From 1ba1a88647bfe113c885f985d6e383790dec2a1f Mon Sep 17 00:00:00 2001 From: Jason Self Date: Thu, 28 Dec 2017 18:21:46 -0800 Subject: [PATCH] ath9k_htc: Update to upstream's commit d19607454d656cb14d8c16dfbf161eebb542e8fe dated June 25 2017 --- WHENCE | 3 +- ath9k_htc/.editorconfig | 21 + ath9k_htc/.gitattributes | 2 + ath9k_htc/.travis.yml | 24 + ath9k_htc/Makefile | 20 +- ath9k_htc/NOTICE.TXT | 20 +- ath9k_htc/docs/atheros_ar7010.png | Bin 79339 -> 0 bytes ath9k_htc/docs/atheros_ar9271.png | Bin 81020 -> 0 bytes .../local/patches/binutils-2.27_fixup.patch | 13 + .../binutils-elf32-xtensa-sec_cache.patch | 20 - ath9k_htc/local/patches/binutils.patch | 10 - ath9k_htc/local/patches/gcc-6.3.0_fixup.patch | 49 ++ ath9k_htc/local/patches/gcc.patch | 35 +- ath9k_htc/target_firmware/CMakeLists.txt | 51 +- ath9k_htc/target_firmware/Makefile | 36 + ath9k_htc/target_firmware/configure | 55 +- ath9k_htc/target_firmware/firmware-crc.pl | 36 + .../inc/magpie/wdt_api.h => include/rom.h} | 73 +- .../magpie_fw_dev/target/adf/adf_nbuf.c | 267 ++++--- .../magpie_fw_dev/target/adf/adf_nbuf_pvt.h | 142 ++-- .../magpie_fw_dev/target/adf/adf_net.c | 7 +- .../magpie_fw_dev/target/adf/adf_net_pvt.h | 10 +- .../target/adf/adf_os_atomic_pvt.h | 11 +- .../target/adf/adf_os_defer_pvt.c | 2 +- .../target/adf/adf_os_defer_pvt.h | 14 +- .../magpie_fw_dev/target/adf/adf_os_dma.c | 22 +- .../magpie_fw_dev/target/adf/adf_os_dma_pvt.h | 10 +- .../magpie_fw_dev/target/adf/adf_os_io_pvt.h | 2 +- .../magpie_fw_dev/target/adf/adf_os_irq_pvt.c | 8 +- .../target/adf/adf_os_lock_pvt.h | 4 +- .../magpie_fw_dev/target/adf/adf_os_mem_pvt.h | 2 +- .../target/adf/adf_os_module_pvt.h | 8 +- .../magpie_fw_dev/target/adf/adf_os_pci_pvt.h | 22 +- .../target/adf/adf_os_time_pvt.h | 4 +- .../target/adf/adf_os_timer_pvt.h | 8 +- .../target/adf/adf_os_types_pvt.h | 48 +- .../target/adf/adf_os_util_pvt.h | 16 +- .../target/buf_pool/buf_pool_api.h | 24 +- .../target/buf_pool/buf_pool_dynamic.c | 126 ---- .../target/buf_pool/buf_pool_static.c | 58 +- .../target/buf_pool/buf_pool_static.h | 12 +- .../magpie_fw_dev/target/cmnos/clock_api.h | 24 +- .../magpie_fw_dev/target/cmnos/cmnos_api.h | 92 ++- .../magpie_fw_dev/target/cmnos/cmnos_clock.c | 324 --------- .../magpie_fw_dev/target/cmnos/cmnos_printf.c | 322 --------- .../magpie_fw_dev/target/cmnos/cmnos_sflash.c | 2 +- .../magpie_fw_dev/target/cmnos/dbg_api.c | 15 +- .../magpie_fw_dev/target/cmnos/dbg_api.h | 1 + .../target/cmnos/k2_cmnos_clock_patch.c | 10 +- .../target/cmnos/k2_fw_cmnos_printf.c | 5 +- .../target/hif/k2_HIF_usb_patch.c | 9 +- .../target/hif/usb_api_magpie_patch.c | 49 +- .../target/hif/usb_api_main_patch.c | 42 +- .../magpie_fw_dev/target/htc/htc.c | 435 ++++++------ .../magpie_fw_dev/target/htc/htc_api.h | 36 +- .../magpie_fw_dev/target/htc/htc_internal.h | 28 +- .../magpie_fw_dev/target/htc/htc_tgt.c | 75 -- .../magpie_fw_dev/target/inc/OTUS/OTUS_htc.h | 122 ---- .../magpie_fw_dev/target/inc/OTUS/OTUS_misc.h | 104 --- .../magpie_fw_dev/target/inc/OTUS/OTUS_soc.h | 6 +- .../magpie_fw_dev/target/inc/adf_nbuf.h | 120 ++-- .../magpie_fw_dev/target/inc/adf_net.h | 261 ++----- .../magpie_fw_dev/target/inc/adf_net_sw.h | 14 +- .../magpie_fw_dev/target/inc/adf_net_types.h | 10 +- .../magpie_fw_dev/target/inc/adf_net_wcmd.h | 180 ++--- .../magpie_fw_dev/target/inc/adf_os_atomic.h | 6 +- .../magpie_fw_dev/target/inc/adf_os_bitops.h | 233 ------ .../magpie_fw_dev/target/inc/adf_os_crypto.h | 110 --- .../magpie_fw_dev/target/inc/adf_os_defer.h | 32 +- .../magpie_fw_dev/target/inc/adf_os_dma.h | 16 +- .../magpie_fw_dev/target/inc/adf_os_lock.h | 6 +- .../magpie_fw_dev/target/inc/adf_os_mem.h | 6 +- .../magpie_fw_dev/target/inc/adf_os_module.h | 22 +- .../magpie_fw_dev/target/inc/adf_os_pci.h | 30 +- .../magpie_fw_dev/target/inc/adf_os_pseudo.h | 65 -- .../target/inc/adf_os_stdtypes.h | 6 +- .../magpie_fw_dev/target/inc/adf_os_time.h | 14 +- .../magpie_fw_dev/target/inc/adf_os_timer.h | 6 +- .../magpie_fw_dev/target/inc/adf_os_types.h | 46 +- .../magpie_fw_dev/target/inc/adf_os_util.h | 16 +- .../target/inc/{k2 => }/allocram_api.h | 2 +- .../magpie_fw_dev/target/inc/asf_sm.h | 76 -- .../target/inc/{k2 => }/athos_api.h | 4 +- .../target/inc/{k2 => }/dma_engine_api.h | 34 +- .../target/inc/{k2 => }/dma_lib.h | 4 +- .../target/inc/{k2 => }/eeprom_api.h | 6 +- .../target/inc/{magpie => }/hif_api.h | 27 +- .../target/inc/{k2 => }/hif_gmac.h | 2 +- .../target/inc/{k2 => }/hif_pci.h | 30 +- .../target/inc/{k2 => }/hif_usb.h | 0 .../target/inc/{k2 => }/intr_api.h | 0 .../magpie_fw_dev/target/inc/k2/Magpie_api.h | 24 +- .../magpie_fw_dev/target/inc/k2/clock_api.h | 63 -- .../magpie_fw_dev/target/inc/k2/cmnos_api.h | 664 ------------------ .../magpie_fw_dev/target/inc/k2/hif_api.h | 100 --- .../magpie_fw_dev/target/inc/k2/k2/rom_cfg.h | 9 +- .../magpie_fw_dev/target/inc/k2/k2_mem.h | 10 +- .../magpie_fw_dev/target/inc/k2/magpie_mem.h | 141 ---- .../magpie_fw_dev/target/inc/k2/opt_ah.h | 42 -- .../magpie_fw_dev/target/inc/k2/printf_api.h | 47 -- .../magpie_fw_dev/target/inc/k2/sys_cfg.h | 8 +- .../magpie_fw_dev/target/inc/k2/uart_api.h | 334 --------- .../magpie_fw_dev/target/inc/linux/compiler.h | 107 --- .../target/inc/magpie/Magpie_api.h | 26 +- .../target/inc/magpie/adf_nbuf_pvt.h | 459 ------------ .../target/inc/magpie/allocram_api.h | 81 --- .../target/inc/magpie/athos_api.h | 222 ------ .../target/inc/magpie/buf_pool_api.h | 80 --- .../target/inc/magpie/clock_api.h | 55 -- .../target/inc/magpie/cmnos_api.h | 662 ----------------- .../target/inc/magpie/dma_engine_api.h | 122 ---- .../magpie_fw_dev/target/inc/magpie/dma_lib.h | 57 -- .../target/inc/magpie/eeprom_api.h | 66 -- .../target/inc/magpie/hif_gmac.h | 290 -------- .../magpie_fw_dev/target/inc/magpie/hif_pci.h | 49 -- .../magpie_fw_dev/target/inc/magpie/hif_usb.h | 58 -- .../magpie_fw_dev/target/inc/magpie/htc_api.h | 126 ---- .../target/inc/magpie/intr_api.h | 184 ----- .../target/inc/magpie/magpie/reg_defs.h | 524 +++++++------- .../target/inc/magpie/magpie/rom_cfg.h | 9 +- .../target/inc/magpie/magpie_mem.h | 16 +- .../target/inc/magpie/magpie_regdump.h | 71 -- .../magpie_fw_dev/target/inc/magpie/mem_api.h | 44 -- .../target/inc/magpie/misc_api.h | 68 -- .../magpie_fw_dev/target/inc/magpie/opt_ah.h | 42 -- .../magpie_fw_dev/target/inc/magpie/regdump.h | 67 -- .../target/inc/magpie/romp_api.h | 82 --- .../target/inc/magpie/string_api.h | 45 -- .../magpie_fw_dev/target/inc/magpie/sys_cfg.h | 202 +++--- .../target/inc/magpie/tasklet_api.h | 62 -- .../target/inc/magpie/timer_api.h | 57 -- .../target/inc/magpie/usb_table.h | 165 ----- .../target/inc/magpie/vbuf_api.h | 76 -- .../target/inc/magpie/vdesc_api.h | 46 -- .../target/inc/{k2 => }/magpie_regdump.h | 2 +- .../target/inc/{k2 => }/mem_api.h | 0 .../target/inc/{k2 => }/misc_api.h | 0 .../magpie_fw_dev/target/inc/osapi.h | 4 +- .../target/inc/{k2 => }/regdump.h | 2 +- .../target/inc/{k2 => }/romp_api.h | 0 .../target/inc/{k2 => }/string_api.h | 0 .../target/inc/{k2 => }/tasklet_api.h | 0 .../target/inc/{k2 => }/timer_api.h | 0 .../target/inc/{magpie => }/uart_api.h | 2 +- .../magpie_fw_dev/target/inc/usb_api.h | 8 +- .../magpie_fw_dev/target/inc/usb_defs.h | 20 +- .../target/inc/{k2 => }/usb_table.h | 0 .../magpie_fw_dev/target/inc/usbfifo_api.h | 10 +- .../target/inc/{k2 => }/vbuf_api.h | 12 +- .../target/inc/{k2 => }/vdesc_api.h | 10 +- .../target/inc/{k2 => }/wdt_api.h | 0 .../inc/xtensa-elf/xtensa/config/core.h | 32 +- .../target/inc/xtensa-elf/xtensa/corebits.h | 32 +- .../target/inc/xtensa-elf/xtensa/hal.h | 33 +- .../target/inc/xtensa-elf/xtensa/xtruntime.h | 26 +- .../target/inc/xtensa/config/core-isa.h | 33 +- .../target/inc/xtensa/config/core-matmap.h | 32 +- .../target/inc/xtensa/config/specreg.h | 30 +- .../target/inc/xtensa/config/tie.h | 29 +- .../magpie_fw_dev/target/init/app_start.c | 7 +- .../magpie/printf_api.h => init/app_start.h} | 22 +- .../magpie_fw_dev/target/init/init.c | 37 +- .../magpie_fw_dev/target/init/init.h | 6 +- .../magpie_fw_dev/target/init/magpie.c | 11 +- .../target/rompatch/HIF_usb_patch.c | 209 +++--- .../target/rompatch/cmnos_clock_patch.c | 6 +- .../magpie_fw_dev/target/wlan/wlan_pci.c | 60 +- .../magpie_fw_dev/target/wlan/wlan_pci.h | 9 +- .../magpie_fw_dev/target/wmi/wmi_internal.h | 16 +- .../magpie_fw_dev/target/wmi/wmi_svc.c | 134 ++-- .../magpie_fw_dev/target/wmi/wmi_svc_api.h | 28 +- ath9k_htc/target_firmware/ram-k2.ld | 35 + ath9k_htc/target_firmware/ram-magpie.ld | 35 + ath9k_htc/target_firmware/rom-addrs-k2.ld | 36 + ath9k_htc/target_firmware/rom-addrs-magpie.ld | 36 + ath9k_htc/target_firmware/wlan/_ieee80211.h | 6 +- ath9k_htc/target_firmware/wlan/ah.c | 4 +- ath9k_htc/target_firmware/wlan/ah.h | 26 +- ath9k_htc/target_firmware/wlan/ah_osdep.h | 63 +- ath9k_htc/target_firmware/wlan/ar5416.h | 8 +- ath9k_htc/target_firmware/wlan/ar5416Phy.c | 67 +- ath9k_htc/target_firmware/wlan/ar5416_hw.c | 20 +- ath9k_htc/target_firmware/wlan/ar5416desc.h | 4 +- ath9k_htc/target_firmware/wlan/ar5416reg.h | 4 +- ath9k_htc/target_firmware/wlan/ieee80211.h | 50 +- .../target_firmware/wlan/ieee80211_node.h | 2 +- .../target_firmware/wlan/ieee80211_output.c | 2 +- .../target_firmware/wlan/ieee80211_var.h | 7 +- ath9k_htc/target_firmware/wlan/if_ath.c | 27 +- ath9k_htc/target_firmware/wlan/if_ath_pci.c | 53 +- ath9k_htc/target_firmware/wlan/if_ath_pci.h | 55 +- ath9k_htc/target_firmware/wlan/if_athrate.h | 69 +- ath9k_htc/target_firmware/wlan/if_athvar.h | 10 + ath9k_htc/target_firmware/wlan/if_llc.h | 56 +- ath9k_htc/target_firmware/wlan/if_owl.c | 36 +- ath9k_htc/target_firmware/wlan/include/htc.h | 84 +-- .../wlan/include/htc_services.h | 8 +- .../wlan/include/k2/wlan_cfg.h | 2 +- .../wlan/include/magpie/wlan_cfg.h | 2 +- .../target_firmware/wlan/include/wlan_hdr.h | 16 +- ath9k_htc/target_firmware/wlan/include/wmi.h | 8 +- ath9k_htc/target_firmware/wlan/ratectrl.h | 19 +- ath9k_htc/target_firmware/wlan/ratectrl11n.h | 23 +- .../target_firmware/wlan/ratectrl_11n_ln.c | 182 +++-- 204 files changed, 2973 insertions(+), 8986 deletions(-) create mode 100644 ath9k_htc/.editorconfig create mode 100644 ath9k_htc/.gitattributes create mode 100644 ath9k_htc/.travis.yml delete mode 100755 ath9k_htc/docs/atheros_ar7010.png delete mode 100755 ath9k_htc/docs/atheros_ar9271.png create mode 100644 ath9k_htc/local/patches/binutils-2.27_fixup.patch delete mode 100644 ath9k_htc/local/patches/binutils-elf32-xtensa-sec_cache.patch create mode 100644 ath9k_htc/local/patches/gcc-6.3.0_fixup.patch rename ath9k_htc/target_firmware/{magpie_fw_dev/target/inc/magpie/wdt_api.h => include/rom.h} (64%) mode change 100755 => 100644 delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_dynamic.c delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_clock.c delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_printf.c delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_tgt.c delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_htc.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_misc.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_bitops.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_crypto.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pseudo.h rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/allocram_api.h (99%) delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/asf_sm.h rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/athos_api.h (99%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/dma_engine_api.h (96%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/dma_lib.h (98%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/eeprom_api.h (97%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{magpie => }/hif_api.h (96%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/hif_gmac.h (99%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/hif_pci.h (72%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/hif_usb.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/intr_api.h (100%) delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/clock_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/cmnos_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_mem.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/opt_ah.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/printf_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/uart_api.h delete mode 100644 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/linux/compiler.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/adf_nbuf_pvt.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/allocram_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/athos_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/buf_pool_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/clock_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/cmnos_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_engine_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_lib.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/eeprom_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_gmac.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_pci.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_usb.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/htc_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/intr_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/magpie_regdump.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/mem_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/misc_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/opt_ah.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/regdump.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/romp_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/string_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/tasklet_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/timer_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/usb_table.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/vbuf_api.h delete mode 100755 ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/vdesc_api.h rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/magpie_regdump.h (97%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/mem_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/misc_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/regdump.h (99%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/romp_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/string_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/tasklet_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/timer_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{magpie => }/uart_api.h (99%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/usb_table.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/vbuf_api.h (95%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/vdesc_api.h (96%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/inc/{k2 => }/wdt_api.h (100%) rename ath9k_htc/target_firmware/magpie_fw_dev/target/{inc/magpie/printf_api.h => init/app_start.h} (81%) mode change 100755 => 100644 diff --git a/WHENCE b/WHENCE index 003bb8e..4e57350 100644 --- a/WHENCE +++ b/WHENCE @@ -65,7 +65,8 @@ From http://wiki.erazor-zone.de/doku.php?id=wiki:projects:linux:as31 Driver: ath9k_htc - Atheros HTC devices (USB) -Version: 1.4.0 +Version: Based on commit d19607454d656cb14d8c16dfbf161eebb542e8fe +dated June 25 2017 Licence: Free software. See ath9k_htc/LICENCE.TXT for details. diff --git a/ath9k_htc/.editorconfig b/ath9k_htc/.editorconfig new file mode 100644 index 0000000..6be3f2b --- /dev/null +++ b/ath9k_htc/.editorconfig @@ -0,0 +1,21 @@ +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided this notice is +# preserved. This file is offered as-is, without any warranty. +# Names of contributors must not be used to endorse or promote products +# derived from this file without specific prior written permission. + +# EditorConfig +# http://EditorConfig.org + +# top-most EditorConfig file +root = true + +# LF end-of-line, insert an empty new line and UTF-8 +[*] +end_of_line = lf +insert_final_newline = true +charset = utf-8 + +# Tab indentation +[makefile,Makefile] +indent_style = tab diff --git a/ath9k_htc/.gitattributes b/ath9k_htc/.gitattributes new file mode 100644 index 0000000..d1564d7 --- /dev/null +++ b/ath9k_htc/.gitattributes @@ -0,0 +1,2 @@ +.gitattributes export-ignore +.gitignore export-ignore \ No newline at end of file diff --git a/ath9k_htc/.travis.yml b/ath9k_htc/.travis.yml new file mode 100644 index 0000000..cfb0ee1 --- /dev/null +++ b/ath9k_htc/.travis.yml @@ -0,0 +1,24 @@ +# Copying and distribution of this file, with or without modification, +# are permitted in any medium without royalty provided this notice is +# preserved. This file is offered as-is, without any warranty. +# Names of contributors must not be used to endorse or promote products +# derived from this file without specific prior written permission. + +# See YAML format https://en.wikipedia.org/wiki/YAML +# See Travis CI (Continuous Integration) https://docs.travis-ci.com/ + + +language: c + +os: + - linux + +addons: + apt: + packages: + - cmake + +script: + - make toolchain + - make -C target_firmware + - make -C target_firmware clean diff --git a/ath9k_htc/Makefile b/ath9k_htc/Makefile index 931c8bc..9469c40 100644 --- a/ath9k_htc/Makefile +++ b/ath9k_htc/Makefile @@ -1,29 +1,34 @@ -GMP_VER=5.0.5 +GMP_VER=6.1.1 GMP_URL=https://ftp.gnu.org/gnu/gmp/gmp-$(GMP_VER).tar.bz2 GMP_TAR=gmp-$(GMP_VER).tar.bz2 GMP_DIR=gmp-$(GMP_VER) +GMP_SUM=a8109865f2893f1373b0a8ed5ff7429de8db696fc451b1036bd7bdf95bbeffd6 -MPFR_VER=3.1.1 +MPFR_VER=3.1.4 MPFR_URL=https://ftp.gnu.org/gnu/mpfr/mpfr-$(MPFR_VER).tar.bz2 MPFR_TAR=mpfr-$(MPFR_VER).tar.bz2 MPFR_DIR=mpfr-$(MPFR_VER) +MPFR_SUM=d3103a80cdad2407ed581f3618c4bed04e0c92d1cf771a65ead662cc397f7775 -MPC_VER=1.0.1 +MPC_VER=1.0.3 MPC_URL=https://ftp.gnu.org/gnu/mpc/mpc-$(MPC_VER).tar.gz MPC_TAR=mpc-$(MPC_VER).tar.gz MPC_DIR=mpc-$(MPC_VER) +MPC_SUM=617decc6ea09889fb08ede330917a00b16809b8db88c29c31bfbb49cbf88ecc3 -BINUTILS_VER=2.23.1 +BINUTILS_VER=2.27 BINUTILS_URL=https://ftp.gnu.org/gnu/binutils/binutils-$(BINUTILS_VER).tar.bz2 BINUTILS_TAR=binutils-$(BINUTILS_VER).tar.bz2 BINUTILS_DIR=binutils-$(BINUTILS_VER) -BINUTILS_PATCHES=local/patches/binutils.patch local/patches/binutils-elf32-xtensa-sec_cache.patch +BINUTILS_PATCHES=local/patches/binutils.patch local/patches/binutils-2.27_fixup.patch +BINUTILS_SUM=369737ce51587f92466041a97ab7d2358c6d9e1b6490b3940eb09fb0a9a6ac88 -GCC_VER=4.7.4 +GCC_VER=6.3.0 GCC_URL=https://ftp.gnu.org/gnu/gcc/gcc-$(GCC_VER)/gcc-$(GCC_VER).tar.bz2 GCC_TAR=gcc-$(GCC_VER).tar.bz2 GCC_DIR=gcc-$(GCC_VER) -GCC_PATCHES=local/patches/gcc.patch +GCC_PATCHES=local/patches/gcc.patch local/patches/gcc-6.3.0_fixup.patch +GCC_SUM=f06ae7f3f790fbf0f018f6d40e844451e6bc3b7bc96e128e63b09825c1f8b29f BASEDIR=$(shell pwd) TOOLCHAIN_DIR=$(BASEDIR)/toolchain @@ -98,6 +103,7 @@ define Build $(DL_DIR)/$($(1)_TAR): mkdir -p $(DL_DIR) wget -N -P $(DL_DIR) $($(1)_URL) + printf "%s %s\n" $($(1)_SUM) $$@ | shasum -a 256 -c $(DL_DIR)/$($(1)_DIR)/.prepared: $(DL_DIR)/$($(1)_TAR) tar -C $(DL_DIR) -x$(if $(findstring bz2,$($(1)_TAR)),j,z)f $(DL_DIR)/$($(1)_TAR) diff --git a/ath9k_htc/NOTICE.TXT b/ath9k_htc/NOTICE.TXT index 0e74083..7ab5e31 100644 --- a/ath9k_htc/NOTICE.TXT +++ b/ath9k_htc/NOTICE.TXT @@ -39,19 +39,18 @@ NOTICES: * Copyright (c) 2002-2005 Atheros Communications, Inc. * Copyright (c) 2008-2010, Atheros Communications Inc. * - * Redistribution and use in source and binary forms are permitted - * provided that the following conditions are met: - * 1. The materials contained herein are unmodified and are used - * unmodified. - * 2. Redistributions of source code must retain the above copyright + * 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 NO * ''WARRANTY'' disclaimer below (''Disclaimer''), without * modification. - * 3. Redistributions in binary form must reproduce at minimum a + * 2. Redistributions in binary form must reproduce at minimum a * disclaimer similar to the Disclaimer below and any redistribution * must be conditioned upon including a substantially similar * Disclaimer requirement for further binary redistribution. - * 4. Neither the names of the above-listed copyright holders nor the + * 3. Neither the names of the above-listed copyright holders nor the * names of any contributors may be used to endorse or promote * product derived from this software without specific prior written * permission. @@ -76,7 +75,7 @@ NOTICES: The following files are from ECoS with a GPLv2 licence with modification and linking caveats. Please see the licence below for more information: -target_firmware/magpie_fw_dev/build/magpie_1_1/sboot/cmnos/printf/src/cmnos_printf.c +sboot/magpie_1_1/sboot/cmnos/printf/src/cmnos_printf.c target_firmware/magpie_fw_dev/target/cmnos/cmnos_printf.c target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c @@ -95,9 +94,8 @@ target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c // 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 eCos; if not, write to the Free Software Foundation, Inc., -// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it diff --git a/ath9k_htc/docs/atheros_ar7010.png b/ath9k_htc/docs/atheros_ar7010.png deleted file mode 100755 index d6615c73f3fb0534ad971cc1717151bdc7abd442..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79339 zcmeFZc{G=6_&543r8z1gl8|{Ql+4N$Dn-hW%#t~C=E{&+8ADQrQf3)5l?nMKK% zDVgWFecbz}ZpXZ#l&RTD4wRc$davJv6 ztZ&;p>DwBUoSdBaOs&lA4E66C^I6-P#7&9Qkx0i$in8a`?me6M;iN&;u`2X8E@bCc z=2X3oRE`{a*N&`P-=3!Ws~865$mg)JrEJs9q;}jBG?oYZ~W9`_>0JG>784ciC>A@0!`DqDG%URbIF6c z?Zh7rym|P)|L}iVgi3)5?sLge+1aPoR;Mfc{QN#NM4wbiRyYvBb$$2OxU-K+N?bkE zPd0sh%1>rvV?(+>U9ov=VPRoeo2A}=aL}l#x|&H+^4OaC>W#9fv zNBZD8UH0f?`4V%2xvZ>+F`GB#@~vHoy-T<-e%A#H?J}1(y%@I3u|G?u%Vlaq7-p0A z7h3(OTwh&0z`(FiOiZk(xcH^xWH*Oe>ec5}t*>SM5BdcKZ6k@huTWJ7(lpJy_ofU` zzMXli#8=Ry@#pZ@I0a>8-;xrs*wdyDsd=?Nba#u^&h+2-`0*qDf}C{E#ig>QhOOZr zZd~~8Pg2M+iGaAX)&uw-aU<xQ{MaUa0@; z*M0G#4waobhQEe}BH0}jE?ue`YKWeh=n_0};>3$P&50c9ncA5P#r(wWVl}srx(h4= zSuTVOnz<{5>i_!nOW18Gd#+GDQFhn&bj?EyqW1Tbk_%L#G8dy z11%{R-&Qp!&kR(jbZWX=`%d%}UUA!49;s|-xTv9}6_9J(5HR(lB+$Ggb1Y&X1qF@! z%G`n5w{N=?{`mU!^4iAgbXQHO{aD!2LXWjiVPWB&zS82+=A=hYCEec_+5Glxp1*SO z;vsB@=vNUDR7o9AZl+v}jw<)U&pyKAv^aHZrpqK@7d<_Fl1D|%Yw~?`eq=lLb7bnC zJ9q!@%uJn4Z%r_Lpwz~a%$?J8)%@XMVO4*Bee%iA&u?6zJ7adDF+u7iH{+p0EOe*u zJT{j2^5u(nR+e?t{NMTc$a*ZS=9lLZH^rU*$=a0J8Gd}Y-C&@~pZGn{TWqHpCE>o3 zch|{DeQrH2CdS|9ca8t|?`my-T;~5=pZWEOF+kd9_gJvzdwWxU<9ezCG&HZZF1d#s z6=ANn=qa!aX}6i|KErQ2sL+gc*Ecuk#yOL1h~lm8D|2BP;WY&2>w(r=aA5H0F>bFEfSBv_us&CSi${^4o852X0{TP2Q{)3u9L ziQms8-9>v`bl%%5qCzOm?E3iq%{9CEGL9#$gVIUOes8Y5rn^MN!^2aB2buB@o0anV zTQ!xu$wO?HzR?S^v9UE&ef#p|(%e|<1#y=-g&D`>l$5&mmp2ZY?q#j3PSptEvviU znfOpjCnqQS30Zb?WY*%T?5k;4<`ZDMc=2L$zPWmi-AJSOMM*;g18*N6A1cAqr@!lU z9b#7=94-7iQ_DDhIelYg{N$K$RNM4#V6fgo*glq z=*)3x$j~XH({-PZoOp+``mwfl$6+qD`;Q*&crNbz&~n=``ckQ1mr4HH}N2 z#nwk~dR+)Twnf33Yq8IDx^9@_m^f|4#!6bF?eOsMz0LK-U&F(`iE@F7s491DY#u~L z9yTyApu`Ut9lcXkRdt+$V<&2q=yn9CbQ z=+{{5>z%uHeN0o&vahG&)23Zrn3M^m=G~h)k`yXgiA#JJJo4vHfSA*i-Y4IEv?8|2 zbH%9aW*wQq|ArcVqZ}964($dgFlsm^>84?(oMidsDZfVEohKikVwYX0@K`@}_vg9m zaT^wWrANwK=C_i*r>RqH*|No@p}MN-g;FHfy^XcvxtQSKeWH#Ne)#W~+QqhhDD`Eo zi$ABQvt}0soTjvc7^QR;G<|j-zPq{MP8z#BCoUneuifr@s*1*Y`!^~*!-Ip~vm;GO z`2Ta8JXglppNZJjq&gT=GcfS3%iq%0zM7>YQ8t8IPHFA^*3?9i;IYD)D;B?u)a@l@^f*{fq{W4Jj1G)-?eg^8|%i# z&z?P#y>uyv>YdYcpUe30#Dqn5pWy8;pKUj9ukqzYbKY^{!^34yOF)JFyRbk#-kx!& z>AA$Uqb&UVDii$`x^DAr>bdJ==kB?>jz>&?d+F7dr{G;U{ScL;my;Oi?1 z)HEk`sLb2b5463#9zJ|hw_F=7@7mAJe*Gn!Z->~;$Fv`2C;gPucSUbqKIx^U0>{{=Q*oixlNP7WpRr4nD{-t>^0n*aqX!K7cO-5 zM^Z`)NeK&g{(SE^-Ip=Tp!QZxG3c0t7V#m(qaYp$Q8h=Fu9i4j#+OKPG z?d0U-%$+1Z-uvT+9O{uADv2ESU~-eCg@vqxDvXc`=7I9U;~{(F70u-|C5ztow9*bR|mojFN!qG_*m z_R#P}RNpGLP06FklPb)~Ie;%vg)&M}OYbCL!mp7L_R_L4hd+|ouU<3W9G!J?xKs|U zywuZ8)zxy(L>;&~W|&!6?oC6+&Ppw3qE6uMRi z9L}9=S>*9?wB>hSvCnZ`wEFe?camL8s>ESFZ4Cm31jNeICH~O1`|;j^ydjeFnmkuW z#?7;G4|==1 zyY-6k$BRQQbEEodK@Z4wC^a<3oxQT6ZE8D%vT$+eS$w>ly}f+_ztrZMU6)h^c6r0F zIXkf{6D_)OMPl=^8l(7bX<5ghQeO;+i;d+f*}B$xMT)cAij=68Z@hYvZK1f8|+`#hyQH{Nk2_VxN&B~W1c9rq_so+JXExA>b}z4}-=2I%s$ zhuF%&%U7;kG2M8=a$#@Ho;`cQB`#^BR9PfEQn+|Ae4Py?BIBC8Sn*R4yH|6|t*@_C z12oCuWWE#k|2ih~b057>MEgvW)aEGf?B8E9Z!W!*_Mu|9An+wYs{g0t^)T&c;?Alg z)?8v&o{Jvci)rTEk5_@}en;}}EYB3-P{b3m~{uy9BN%b&obhyv4 z&OBOq3Myax{C0L7&c>r_7)H5NU$~NWF`7?a;`6hQojcw$ir;&&wC%#`c~_DF7(rL2 zXMef7>N2xjz)m1Bb1tFVUufkV(yymQ@hp6JKsL`Nq!bp2Rl4mg{bo2hUfXT<>)DnO z8Q;BijwQh<>-29mauO+-*E7%6cvauHaf4Y%=*G-SdzS9W4C}R}8J7mP#UDM?xB${;W-o!I?~jyXtiIp z`-&o>WDK~Qe8*K#yY!xlR)J2LORh7n3Vr&b@lgf_IW@J2#3EGk$5HQa&=nOGTf`?z z)PV90+S4`VrA{TZ?s$JOiieZ;byknCtN8`;)RP zpr(Rx>(*Dnb1SG61l;&h;*`=9;pS=F5LFFi`z>8laO|DKc)R|G`&+Ol8yuG(4xp8_ zi~|>@m2X7x-c+LaYa;&lC~m|3f{u=k{Crn`vf`n!{ECW-J^{np5T6v|72$NJsoswu z*D21xI;xL$fZ2T!dhQs5;>!It$x%ec(97sG(7#5BBQF6C^UXWz3&dp1%(xaNy2uEg z333iVeNI8a@1uiR=*gtA{(R%Tj=Mhm)L`_zBbCf>=#b&}+;c9EsE(}6jd>YV2XJaB zuby8`PCl`1`*y`?^$aamhwjHupZZx>tW(dAchrIe1!X4iA3Su3sKg|KVFGDdWT(G= z{o10JiM2L6jP+t7h)BySD#}P=f$S#3CBD>i%^S7Oe}A4YGsX#EDJuuTQW@`%c9!gQ$Ut%+B$WM)$oOwC6KMiLocsp)J)PCJ0m*dg?G2V=88Y5+c!CQc~z{f z7I=F>M@&($s-{NXaUe1NOJ`>%hw@&Aqet)J=j2)a&{~-YmD)Im6EeRrp-P#OoUD*F zYcOb!lRLKfG%AXmX?Z)z7diMFE|0%gxPK?%cJE*ugobhsuP6ogFcJq}{U07$nIgOB2FGqaDCJt@t z^)%{NR}%Qd^sjj>+&Zvh$0MEwvxF+(cFywMneGCK?heI78MiWgXJ}&b$bEI8E_21Y zJ8u`Ttk56V=DtR*>u+)J$=)hwW@ftlHcNPMRMcL<#ywKhbs^pUOeuciDM3M*C(Lrm z%Z1kcLT2vz`ueJcH8|ho4W zH%)Mj z+`FD}`_+0O$i2Djq~Au#Q|+q{T3%ma9BZFPdHGvSqdR)q^Nm*iTl>{jKrO70Pol%> z^0GcK6{#iejKgGiTk3n$v-I_}9p^bG4~?ZOx8I+eCR7sJ+M1f((b;rzHu#?*|ACj*@pCN$+7zVp2vRF2I7SpPLS z84Ozg3(WATglj=x_)JHZZUdhD8%s zIknkA6~PlHSXmXbW(P7^noIoZwjbs=cI;TL=W`Dak5Qn+^bAQ-x<-yP-Eo4QJry(w z`FL}>uC5N;iIbe-7>_&fav{%^*tt4kQ?k8qx`ENXe}jsd9j~uwXgr;JeBLAPSc5~%J-K3>SuPuJ$n}9vA$9l7Kndt zQK(RgYkn@p$+-(9O+Bv>{Pxn*Q|Dd!Q&m{JjPnbb>{^S14%r0Dd+{6A(7MUrhC+95 zVIpR3{h5@f4xK{lW1Kw5K!;jfWymt$qyQT|6}Djpcd}WTGu=yjisZA028v@#3sIB8 z`=&c{$gpp|E2gqvdCqgoGC|0a&I5#-Cm|;wD5#1(!HxNcPi{d$6#2NI?}81FxOi`> zaejk|(^2#0#O+(j$bOBFbF;F7P04__Q0+@k^?vv6UBvO~+FJVcqwxp3|Eu?J%RLgE zR5v6pDktmO+UDN*@jgG@gaU<@U{e7APtc2Z0wTrr35ba&4KnZeDsOtTG+ZOcoLt7^u<%sw8Z>4ooj#)`f*51h~2a zf?W^%{OFZyTeCoYn1BUeIny$YTU%PZ6A}{s&dweJW4)m^J<^oW@aI`X#0eB>=CUU7 zSHAqJs;Wj3-${=hN_LZ#$?ak?@|w5o%x0=}_{N@ge$Hd**AC5fNMlulb>Y=m*1e8d z=AZG{sv#5@OB~uli3T4z-y&$<&eOGqUJ$6BrE^5v`tIHAbn`1D@>-h%(vqV?0DH!> z`x!(}+`QsNzOM>}hTyS&p`kQ1eA<-6nI66pBOs@hfLrV=cQ5IC3f(0v*dJQ$zOtc+ zIqFDyw1tC&Typ1o>XRbyhsHH%Aaw=(U0s@&VoxhVJ613jvhL%dcYO^#U?5u8;{dzz zGs@6o5(m#(^-@CXpaKYZJTGi=Coa!5kWd`^44*F03S4`2iQgF?HO9%H( zzCo2wgu0O1tR8tOBqYS8g!{WPUxYGxx=N{pgv;FHsB7ImmbanB90E=cYy0)CN%Bxr zf)tH3ZG!erCZq8^J9mCoDcjq8>{J#`o%GJ-U5>-$|AHeyI_Q6%oHgPozSC2Xp>})l z^ONGYGPgBZX+UHXHQ(JP_iTa&a}d0M3O92AK=FX*#`0_8loJ%R8pWsz+HuwWEo8F6 zbZ7Q%6bL#=(b3SbkH0;1|E`0>VTgk?gjVocIsV}4;xrBM36N6We0Q*{iD)a@0;%fp z``ZQi`E6pfnjrgg?bk~#nj9}PZ$%LfL^W4gaK@Lbpp#caawh&gpV@RZEViRg&JpWl zRB>kV4NfVcSsToaHYY+|lxK8>^6}Q`i_aI9>n3N%=)bo<#;09u(1dOc8bmwqeu9lH z0Fdj3kl#xjh^3)uU2plMIvd*=s0kMvcr|mYQbmo~Sy|h@0+$NXu}F#lVBLpf}Z%=)Iu!a((&uEQ1SFm4>ky=-yw^k=QUsMx-AAG!yu zEs_~6+3jRbzW*qPH{}2bYVLdb@E2p@QBiE8_7W zHhLbxM$^r{_ej#6G$u|?MIo(x6qeIhT#rjkHYeLDB{h$p(8iA3T$>HO(_daj{2qmZ zlKI=b1TYtJVgT_Q{>f<#D@ao0)8}XfMa0Ac@ud9GOieViKv6FyS#igh{f`XxPWyFM zR@R(^*>wLGs2KbDKHi1WRI#~HlD>xW?+vT1z`+6}C5nuU+Ix^$2A%_<-<~>qwyD`e z=qt*E6_u5#uf0}|JhQ9yd5|Js-i{OYckf;u zT8cgIdbgI)MDphkmW_Y${`^Vhy`NeHpg;OJ^YP;(NSr9+=PWFE3=9qRjg7avy1D|z zzQBP^)hQD#EiL_4V0p9JOLiy{EaxJb`WdTU+MYsdb>p%u-HMvC{cc{Mwd3MD!8ESP zQH0di)?TDA)dJL{`+LbBSNuEtisY8ZeV;C&`{pqMmWBXJZ&mO-*VErGbzyzp{E)OB z3V=qrTk)JG+RWTH&+{j|KR}g5QQd!3!i5TZ;>*GVH3<38ArFA&dxwTnbQfBmq^ITK zZfg4x^kqN<**z!qofz%>@?n_^WtS${PCuI?m;d%UrZCM}Kk|B_^C|MwI2K9xI zqbhkJ&}KE&8zQ-`xAZt<=fGl6Nl`ldhUFm^D+$lASm$K3=a%q2iG{tO(}cp-b=(2? zTAt$I65qF}N0NoRE_whuUyzmE20@jQkuelD5vQr6jm>$eezx(ab}>=X()!^c{f7CF zT~Oegmd0(?_LkLw@#bS$S=pap9~|06r=S2t4k`Szjsq_o+v+c$^kl&SkUnT?YQ-`V zD4K9Cpf{^Vw^(-PeMB?)SA1JG;@TxXY#2X3g~OY{7g_Leva%5)PqqK^*`ILPZhk*> z;6T|sNbR_WoyXm&rh-%|F8{)3wR|cEQp-K9Cu{zHW&sYgUuI%r+JY**l|;z;P$>m9 zCvZR^Z679m%e*CKdg4#1BeZnW!4-G`3M?5T`M?O(4amzHDc`#(9`dMyxQ5*6USqvs(LUnDM{bNWCy+k_c?~gQAuex@g;0~ z2*BYId%3(nK)iY!5wVSihDPJ&%@OA>OH22FzYi)aD`U;>KCf-y!4>D^h_rYUXayx897P zQ%;Z!4wYQlN&5EAO-xQU!|1W-%s&4| z_3CBV$tNWt3>KA?e1dxo@O{_Ok+9^o^6osqE>>jUX@=@X?n}WKg5`!IPRDvNN;b!! zTF=rlm_l-i1kqTqbLfs0jDLMFxH~P$yV5fdZ9`RCX#g>#p#WLbut6#U>sAfeG%lHU?kR@(9zqgP$3C(ia1u#FkNQwM~>&$=;DuN1CA@I%s)LQb6!$1<% z9?)S6atMc4UDrM3&N)78njHO4u_w9=`c%71BObS?>c$%q+Gup&`d6arLcg2Y5*exL%ii0VUt5nlA9q!VInF}Hm<0k z@OYpPE7DVhvPHPUQuE?bjqts{FQ|IHar|`VJbhX% zKo?no@S1{m@4^jC&MG9v5*WNX{*?a1x`AUNwkIxljlR)`8L2w)T*5W>v=F%0*TmFw z%kao&a0_Il8=2bvOftT-JoKPWaQ}$o8qf~WB?!ji092c1(`&0e))o4Y2TAwg7}b#* zHca4~?zE>Lk(QRGs&@Z3xJ%S&DhRUHr`p;JCL3Uu&1J4mq;rq)4Jz-zwg{0;e z@HYvjo>;VN*Dl&KW>k=tPQe=JDuuj$jqU{h>%4I~EE(9qcm!&~12p)FcSO?zQ!Nh2 zC|g51Wxj^|KA|a{KD0WL;A!i=*(zl)!Qg)x`uWa~ZX zo4NenVcZub`+u}L`f*lv!agfoSX}HV`HBs<^snJ$$|8KY&ko@^U;+wR5Rvu%mK+mv zOrI#}%riX%gXwWvCuEV9@yCxT%W`;mcyh&cD4#^FHCp-Q?V~+)?)}3&+aV>dA)N{j zqLaO~J6x!mqLhfUV$fS;lW5ZPJP{qD5^nv-ZaZ!5XBO^zsCga_Q_u_XG>AG*^=h(b z0uK_romTL6&}dI#R;uQ^SB=+4AYA+5Q^wM*;o+;sfF&6najo(@Aes|+n41mMmj&#c zl|ZC_I$J7G|y23{JP~WOu$p`z=U?&_sBV?qJ7{W5q|jvfJ?n#f+JaO}?OE(0nw)N@?s14v`Pc?H%7 zk-+egPip3LU0-n^Xs6~fRQj=qYq8pRyfRT7ni?8@is5WTj4M7D_#zQ9cWx(S(hkno zr;Agsy$-Rsh2z}OQ%W$BOV7nMqx{e{{l9&?%H;iT&;VXS?mY;{)C5HC%S8mG)%30L zXkpT6LR|E*aBpmEtZZt!V%-H$;|~^9UvFZioOrqz;DJ&|NGR6}+2%lr@YKnPqS7N65giRWUUVM@r9uM4Hr`r_pL{T6+E18*9TMrIzTtzog&G`Z zFM#`t3EQ`A`_SLtKUxH;{rF7qSX&xR2%}U8P~%uceqLS`1hQ=COk;vfvQb~Z2wYT9 z_<+5Vyoic%K~L|vR-si!p&KarU1W9;^ioWKOmfLa+&ypcT~ZQDrcN2xDqlVt*WL#Y z9;AX_&2`0|F^3X=$G#UI!2%-UQeoD{#RIF^`pS7IYM;>8jlcew>aPfePJ4s_eNKVb zZTMlID9-l1mAN-_8}QU*5tw?XU4vK|{M?B5--D3k!;=jD(i*^@pZodKhx z&h`idP#(?PZTR~~lv@$qgVW0)xjG?OZ6gS{t>*FrP^GNN`VKI0?b`Az;e(D92cXKn zgc=}U-8OZwrLl28Vhl|MX+6lBy~OkFMBgIOw)u>rDHu0teu)=Tj}jie_EwE^?e8aw z7CS*m7U%BW6GlZz5w`LLC;tul*0MTXzPcagL7i<3s)imMHH5Wx+@D)m1}~8h4ScbF z3rZXf%P)0k2gv+aJcO2fkEiB`&wHMp|8pSb_WHN;JLk7 z?Lr?__|an4>U5sPD=v;6!NL;~hRNSyE+qdpz~zJLdyeu(Uym*Y+<~%bT2MRmWnsEM z6sVkxB5RK{c zu-hsd8ymSjgK$*?3NMz3eDgcNVl*3ZIxrw0Ago#vxsQQP$ZKIy<6x5(#P_4-h1a_w z9~AIg2L``ZBZ@riN)9vXGe}zg=aC<-y{M!Vb|$p@y+fKZaSad! z*&KDgaRc?QKYzG*0omDyn-a2?XgOsYT>}3tF48=I{yf)R0whjOqSE-YskI7mj2Sx6 z{HlPZWu>Jb4me~NaxgpOXi}9qfQ6@Yz@`h>aYzt$29%`aMS^Hmx0T-d->3)pn>Rx`CU$5cMY>lp$9kBxDbdCrYK88F^goduLx zpkAGC+R@Ru#Lv&4d+cFQm!phLPrmu17cY+QWe}x;8K9u3_z^iTZ+vszROOJ5?>>4$ zpjjG@v)0qs--5D-(nOeUnhSofq6kZ--*dD2;r2brX&ca39>SUuvgmwlVuRe!-^G4U zLnv`DPqy8kd)@@>;6un*1)**2U`1zjAPE>!&yXU<2>ILLh5tjwUH}FUGf7b*P9-2}V&#vQTal=@2eJqKH3$+3f z1_k{f!x>Y}T^(&^0Vvp>;P%h|yT!?q2$<-j#t6HwoPMkJW-A259w0wMxLCzg&!hc< z(6swRZKZpH2jV$igw^uW|X#bMG)gPYs@`Tj;c@aAh}1`u#P06Az2Gc+tTXUZ&oe%s!L0!>g+;^qk}`_F>TLl1!o6 zfemB-=R4}P~D)m^WL(K=4JCLbc@!TXw%;AqWG+YO>$Pb=uD{Mn zqA)MKaMu1`H2>Q?Nk>OVgkMjI7GFI`qaf8KKvjYY3y<{}cnL&{P#hkS6?2F)C<;RcbO++Tsrf~LRej8KM(Y;+PX)lj`MpKbR*c`pJ z$fSP2o_X1P=kH+Mq3X*?L0wj)|JDPK6&VNvv}i;hKA{o?17qnS8Kz2c+4&_9{olpK zT7>IPIs8$B%l8ZRF(Dul5*s?3Nzba9RRr%%>PHleHE_oH9VavhSq1Ry93BiILc77h zl9w<^QiBGS?J{pR_or=-uE#Pf0e$d)B_cinl5r9~Fi-Hmi~_WK7CbjtARkUvtZil5 z=7DZF(e-Wz_l@*Zoxx64&d$z+T&Iz(x8>EPn1@wWvM{lCqTB=bk;{i1jWJn$4@6vK zKX&l;m!}WVx|k8b2dDY~;qer@+g`fUeiG*n3`MTFMmkt}Tjq){Ap6Azs(K@d@@V?FvrQ*#&a(S4IXnD2c?NVn@{xFHmDA4^qWlFun2b| zuhZvADE=Yb-XEYYP(@xw8^qaA^N;%owqVl*EnF!pnBh0`J78xHtIQ;ZLYy9v_e%H1 z+j+H-JXh&L>AI-?HzPegi0)I>jKYA+a z@ODnT3U~H%XvhcEV)#zBVhW+$0x1*Qw`FNNOvDRt?UPIBoa=u4U~pZS_z2B|^T!#4 zfX<`#opM{cTk0~;b!C7WDixAjL>egh(M(ce;$J*%!u)aWmQ4qLD)Lwtl@C3}`{PXK zdk1bX17Em_Lra<|6X=55(XJ|iN>kh?r>8@K^z{A>);Yh=5}bua&jyv*Z8---dqJfaoJO%hLqlV9ZZ;uY zj0S&w2o_pbO*!;Ji(-_K&%^YtBU|rx7Fs7HPG;W7h|T+wtQhW1Sve|3Ln1shs_NEq zZcJ--ebB3ch)>0L0<_yCQVc%3FX`Q_%@*kS#k0jb}h zfGn1@*={=ko`S45HM!wPb^IPnBH;%Gf&6!x^N4g0yxOXzncv2%-}?G=p2o#poNg<% zdpU_Bav0+Q{6$~Q`ij3fV)~-_?R9Q1o3?Vhm%I?^Ox6xfc9zIss`CA7UJT1O;d0y=lZ*OX zjAMMn;yHY}X356Vin(UxSZq97cjj2wn76;ivRYVJ*dKgedWp|lVe|QobPXoN3GEF= z9BiNHgJdS&n;8(DndK_}Ou&}6>RFj*o4@>Lv<=>d#FsnBmKDB-sbz5DF}(g)~DDX&<8CLWZOl++nW-TQm)Pe(aMsfak7;y?}Z zhAzk6UVZuSJFl^hf|3$38kMrhsuc0qMMq#e;3UjSuxM@VpMU{0Zh8>eG%*_p} z$^D!GkqG&JO4t|Sk~m(B$O~rGue>`5-vj0KAPR7lq&ZSo&ll2@c|}F(2twfyeiOjY z+t+v4v==G@bP)z@-KaBCZb+qkkKo8cIPd_HRT1;CXOMhGn`XcAThe82C-_{{Bm{$= zfzMA^oaty3821pEN!a;c@|-5xVGfRxcgv(+s{RTg|7$L=OpX{7Jn)3;f0-KpkN<&Zwq&d9D{3f* zC_Q8(VjvD9VBuB4pzVmbkVsKcQJCU-qd2gYaOMcvpbYseP9EONvm>4WFPJ_eodXag z!kgm3i?H5Mlu0Des%Erc@!;s|Zr7$p@JyabxZZHlg)IUxV#v7{5Ln!GVK3=wx&}Ys z;E?l|z0d`SbR~&|NNlQl*7G_8vJWW1l+@JZBtne`<}(Z{irIXQYO)vMkMJs?`F=a{ z$^ID5(4PBlQX{p~L8BQgejA1eZ*M1UIfuU8U}OVtgR|NJ#)zgilQ+>usOazGDEQPF z^mKMA*mz-UE7tYQWX!)mNWN&wc;I(6gK98qI)|TQAlv#H21Q1S@ zpW4U4hyVKz|L-k=eoX)2;{s=ZjR=HCBFal{5fm2HUWhtRdH6`3-Q7w#TR!ym+IJjA z9w-ooBk6uwnfvqFcZG$~1#K9!Z2E0{xIbdGtFltMAk@;*^727o{ObYZ!^5}3o*qGY zPVPkLk}Y^239_Q<8XS>W9;@LB6Cx;H{eQC~Ee-!?fD}d~GqcMoaL9kB`u~gh-~Wbc ztrMV=5>_%2dJZ1yKG=U$W^ha3u5914CvYuuciE?>+K*KT>OeRy*u~4Y4&zz{r0?9} z0Lu1)J}3C`h4`o2D#@KF{V^J_Sj(!3DYd!jenzxEe8087ANfhuj6_*-EMcVmIehX^3|BT?b zdPKd(um3;&A^Qua#LM=brrQTSXa=-Y++z(v^aDr@?gF&Giby#^E*}643BT0N&Z}5t z))5bCWtua)j+pD^(=89Wf1gA&JJ7kvVfVS_3$&7M_axgx`W%2*K7#*X{80Isu+3IL zV1>(nWqpl+_KG#@GXD za_;I?N;o_B@%(;*iXz%BU2Ho9IL-J1!dWUBypEdg;q6?-MR$K~jXJ3tg6l$m#%Sg! zuR1KYLmfdId*FEIAeRdR;Sk!oJp8+m_VC!)09?l}h~OH9Rt$u13=4K?Y3T*v?p=F( zwc_Fbt_*?`2@Xb=$r-cnpM?l1{{z@uj>Gs3sPTVzXaBTuW4`hi&?%A1z+XMm^;|!U zc78o$!;JH49pUo8MfF|FBww!;pY197U+)FLqC-cnhD{3}EOBK8GsDEkTKsr_7-qrJ z+H4a)m?hOo9qoAyT#Atk*18&Mv0dH-b|$~`Kcl255!=C?gz^Oop1P=ncKdt%A|%N;VlD!~yEVST`*U zIYU-Ob&-8RG^-834GE2f&)a%pmjW z(^Pm`kE2{S)J6DPJI5Be}G>m>HbY>6o5 z=c@priD7Q>dw-8tq{(3A6BNieRlq1X_dX&&tEV`874gcNt*=Z_2GW zd#W9I_$TNq8z!o)vt_or6Ne0Y!w@$`%yj3($>UO%^+1;hKY#>mxdZ({K8qNwl#g7T zo0G+JNG@SLa%<4_-aT3dv6C32+Vn=KUJp6^fGbN33=GXMI_xLA4}<$X3=a=inStIM zf{Qaiyb4q9r{Iic+=&59HGs`Pn0zWT*zlk8;6QufvbU1p-P~^3{6Wl*gzX{WLby)V z$vrTmmP;-`iz9No&=s#mXsBgsAAyv2UQLZ^ZEfvu9eV<8yawqUauugAVQtZ0&Vbk? zw#3>47){0{+K8o;ul(T-Iw}&@q>pNQ_$th0RhoA=2*gA`s?sHDsoz$Lz7OX(kQ8z; z0YaXe`auui-c(=#jSru^8!jIa62?Gvq}hCSe!d*g`vE$-0B~SpBDah0okf=b1ktQ> z`7cl4bs6>$SWw2dk%$*8G%RTD%ExBAWczw~$wV20R|nuw#iicHo`{G}hen!|RP zze<25xwgLEoM(#nB4C59AU7}m1FdY zh>Tv++QIr%`$x9hkJ=#FpL6~W=L3CqsKHyNRWPX}QxUJtv4d?XsB1Sd|= zxkrH&L6mHCF;w7Qy%=o&0UUj{bY!y+Z23STwRRsd1QH2po?s{eaXbq|oB}NbL7^=q zWQn|St`bpa*wVcCiK{=q^TDn|Y_!jC`=LnPe}bUvoiCs~){;WR{*WXZjX&xA0g?F2 z+T7Tjn?iU-n5El!&c);u(!Bhda0>MD%sckuWRO~1i+ju6U8BCfnWZN-4<;SA!$2e- zvF^;?f{af2F7pUM*gKVw%=R@(!SCG9C}~kihihLi3}z6!LFeZLEe3M7yoE*jM@3gk zZA{+9ML&N0LU@XZj35Fz7IP6;6Jj@^r z?7s-uzb&zGzF)V!Y#xTfBW(3Q@g`PQA$Zg=Me@aGkqUzsKNjxXr^Ru;@+`Vq@($ONp{5d3 zCt+b>_QMRqcS#s;!M1CB6pJ79gbsqJFZ`adGGy`!EV>>N3aCykyo6>TlhV}Z&AYX2 zXA00tj(FgW7;BmGQ3!;`4Jou+6R&6)?QN_7R%|!2Rpek{4guj_U8XO)`~ro^2Wj6# z4E!u#6~trwiGr)?n4m*hh8H)$yR!FCmkC?$st2S`N|;3(Q+=mYTsbIhjDWiAW^-5e6OD8Z2$k>545n(E3f7=S=1zF%?7DKLNt-w8 z)z)b3(n-8}X3x!=J;Z&&nTzSae%0sYA#->-c-2o#k&rWc+OaGF`6+a-dJ4i#&%2}I zq5g?OZj;f~=@`xR`Av$o>iq%CT+9K-`HHR%@NvY(`VWW21UwB$d^HqSawlfRPVr*O z%AGgA!d5el0(@^y4LrZdoKyAoxL;yA+2Z03is|SFG5X}UpYADr9$G6NYd2LqQf_iQ zX0i9(_w+Zd8$EfZNh+=|q7l0s=ZMX%9h7cBGC34Ae_Sj`>3r7?a~OXqB{!olU;-Nt zx(4ymfTO?T_b@ZJu)|p-vPAv*kG&PFIJKA^I4|-c5~W-7Wb}D%$z|+#oDtQ^!H4xJ zh?b@tY8}U!t7*nxc2xaG+>&K;KP6&Pk@E0iR!Li1+pCEAoJP0=8j>&at>rQ&BwV1m zw8R&4x3~osLTI6CuW+6v*VNQp+kAjWaN@jb9pLB5y9hgCjGKhqmAtZYNTnmL7Qs#5 zgalomSdz@2G@Y{dEryVmjcFCTt}es^fjlMnsNx5N`0yqnR`o)?k6Ve<%A_PR$#;L( z?3=NHTwmNog6&iT(>9O#9iIYQF#)t8qNkpI$-#lhBnV42pgHmO5n{aFn374+-^XV= z67w(bjtxNAmyk`q`IapUd+3P=-e7SQ;~<Igg41$yhDw zW!Q5(8wy0Bt~^-@h|*Ros2j(_8>&M$%SM2PbPnaj1~^xB9%X#Ly1F{iyYMc8PecqN z_*6rX(T%{|ckezCfmW0oA~mBlqADyZN=!jvv@um9Ix^CSm`%E#dg4HRd4AKEFX>lj z`JPL<}RaS{yJ319+Q}>a60=a3tyB*9Y&El^*|4|f-06c;7(;fQ}m{Urj{Kdzy za}$Um2NpIQ-~AXaJviT*r7LCWo1z|8Z1?gF2E$+AIt`XF+R$ovI+0~% zGW&fV9=eTPv4@O|OhR79I0Mgcv^zho(hy?vCp@?YVdhCOa5}6J)iInh8UzyYHT?RA zQL_tQzr>xTm@b_SdCn3RVjHLJ{pb-3a)CU6y0<((KJIe^<5vp3?)_5bt*`7py3?t9 zSqQvKB3QV`#RTWH>|<~F^Hs?DUKI4NytgBoW^TsQfjwu-C95YRt0Zl z0+0)>H1zfL<HOEA@ymnTQL-f^B%PfzbYL8fubEBi01)*IW}An{t9Vp4*ao#@{n zXa0KH?7PBP#%GA#2Fw43jE_E9AS`QG`Zw-Khw<5vE-lT0jz3&)7I+BsKX>?+F^*j69I3 z&2*ncjupYm&X`3UOJe3sy^%pzzC28yQj1(ziY<%in_ZaufIA;~Oc&j<)(M0@@+Cm^ z03a{vKF|pz!Zdosc{wwDB`U$E0H^}?u&;=C1_@WodUiTGAk5A73GS2lQ3z*5YY;Dg zAv|v4gW=U|gHL_cg^1@7v*&Qg>Q8Zf#S5(TFfMX$`Cm$l5P;l(2Osveu`F9SrdeqO zV)mZf=>LUq%9se3sbISk>FsAD0fI|GZ!!1*qCf=HvC^t%>_@Mn=#nEqvpclE#EAmv zpb9vXb#corws3vCHEv)xRe&3WqfvnGBl6&VYQ=IFF8l@#Bask>!ppgK0y(O8O9~2J z%LF9kS*#vLi~ffG{bL*Vfw0Sbwsv;JxD0fk0EfQ5KEm)URA=|;%RD9XYXT4 zyhE-@a&>RT+P^(P!6`H230M$}!2SfYQR)GAm+8%Zgy&ta13vl0y*BNS^^R2|mTG1kV5vdO(ei@)- zUGJ{>{COw-AP0P2e@cKj%U>0Lr}b?8_wV1&@$o?1cc24iH!GnY>Ek6iwVzW4x**RAbF$0v07esw9V2}00Bm6rz$CH$b3m?ruc+21QW-5z>#4W3j zFHwqK0uvh)C-&!)PDE+%e0U#Om;n^^L*qC?#Hjs8psdg*D$egP-6rm~M2UpbwQe>f zSFEh8h_?#yXbD!H~`IGe+))NISfG^$OdqJ`LNHh{<#Hz{cK9@O-fF15{MWvrjP$ zJTp}?O^h2qra;CxY!P;gi3Cm}S)1A`1iV^b2s^ET0iCj6smQx+)e& z{UFR{ISkW0Spjb^{)cpe4X7CNB;Fu}QJvTCmQFLp3?|+^_~h~9`#8_$-)r&YkpFx8 zHTyJCM}mU(mepK6YG`PP_XGYB3lh-Bs0w-m@v1B{OBXxLF4~WN+k((M=29pzp-j9` z%(T?rQb*?)@h(W5jGs6;T+vT?EjHGci8-{vs0LODZaf&dgUr6NUxo#oBy3ecl!b*1 zPms6Z7Dn@WIT8wyg6E96?8q9ftwx1>7}l!1{L@uHb!FRaDvMMLul3qy#i zXwAgXxV(*)h6d5pxtvDXn3==E5T;E+4=1h@A+1kX!FdLGA6Bdy;sKZ*Jb9fla;WDX zR}66!v8QTriiot(f-|`D(tL-m1MLxX+)%8<9d}`Bbe%}NLF7;=$bmsuU7cdaY*0|p zU}I}UMuw$-Q=3rT37X#HLG{vb2mb#2NJhMV2ICllMglQ9zxmIcsYZl01fKiH?ryED z9KaHlF>IB6a5_7d#9@6LjAxevV(UXXwGwk%ck$jPNYu<2o`(=ifDlYF6B5s9i%v=+ zQ8U=RiO^1%?x!Mzj8^ua&w?ZAg-DAY9x$;xi9G)>KP@e-9?BY$=i325)P_6Qv4MTj zIiu^$0=tvbp75c$%9Zm>w`b71EKIzy(M6lA!3H2O5d>Emws2zMG30&*K4vrO$(R)n zuYv+5R<@DMq+ro{Obo0cN$KL;gviFYb`G5Pr-}cBTm626ZQbx!o zq)1t%2pL6YRz_C%q-Y2sI}}l&6qSt7Fba{#C}|K;2^od1`_bp~y>7qT?f1`heg8Ob z=l48Q@AvEV9LMokN85hqo~O5Ix)z{OMfc| zasiqVvMcMOb#0Da_r+=&~{BiCQg{ znDyJ6KpDapU@1)rUtH{7xXla=_({=IQR&zdI(K7}8y2~wM~{@TQxb5Xwdr?xO+Mq0 z`GBQj^2*N1sc1bgz!jKHG?jucN)cpes7#eN7;yGnd3F;PjliiL-M*>d?(jmkS**K2 z4wAEEZAu@n_);`}-zrOYK5RaF*)g8;88%nj_~)BCz!`bSw*U){3^+O%I$wSb@2CEp zIUhEj>aSdP#3NVbWr4#scVJbUQ90Yjs@AQA^d<$(Y|51$Gp@X$LcP)~DkGKDO)?%6 z=YZt%>!!b`Z?jFBBvLKt$VKN=Ej4YECQW9eAU5WoH=s%50UTIgL3ysN>F4ftd#F6Sfrp#d?m3DT0n^;Lm&IA*RBl_Ed?}o ztB;`ID35jbeRo>mcWRH)I11Pxj3ju68!KvJ1uKfx*mw3oIp_>0#)&r+;o zd3ZtU?%sSRj|L!g#?{!h_Bn+jHM)!vNpXTdD8fHJ{Fw_SfVht_L=Y@mSAmYAj_IgT z7Vr98IQ7ncK_V|zGE&n%eE7hd4eB5;qjqp=K2`6}PZ!e_3R*oe4DmROO1tRmTa4|d zcmoDC`LLbh*V!3yrr6{;s>4~rrB3uVCS*shH^q*PRP4^!LB z`c$r4i}M*6IBmngsU~8nUi`tA5y2CVJ z9Df&<$N#{A1`1BQkzvEOO0a8$ea7Hc!~f*~S{>(}qUlFo;ScQG^X(Ro8rB2EWxFUMazc0Tk?E>E$qP`iNkykS*~yczPT z$)rh>hK?F5A4HwZo;VR{Dt>h=R@yYGyI*44+_&%Eg}W`y>)yIa(~uSE!=uIK-v;zQ z;5mndvo!DjQirfJPfiT(){~LOk zi%H@&7gljgqy|tBzkNw+mb$L4u8R|pzzRp#g{Ah$8p7QodIY2mZndoMf=3EMG92UI z47w#x$TUO_;-g2~DTYs;+!8pr4%(TJU0h-J0&f6!#1~K>b$9VY+Uc8)4=raMS+ z7y5i%d-SY(udWmeam<{|7?(hM$@V5XuA8O96qA}o)S4w6>ax?!0UXHXs&o3`zLrNX z2HhuwV>ZZd#HiJ{Lml_}(xu0Lfy_F$X2%uXLk?E%nhP>#(sWSnyR4Sf%6=o|*J)>j zL97UZ?Dz|{|K*iMJ2Sp>{m@68wL|VLCF*L8le(Sv+7tItpZbX#qq)zLDsWc0=?A!$ z9<`fK*`m^E)cfA1HNW!wbdrKN$jGB_(?-OBKcJ$FCfX8YW2 zX4jD)m(PdG>jv=13BZZz?dfOpu4bdq^MqW_gGuFlG5!{IY zWHB!Zc&a0MV@wz)3PLkietkDibZ)s0p>r{*;~aL|E(qXTdz|Z>_aSA5M%EYSjgwf= zTnDvsuA@Af_!J0^W|-8+$+Tf*9fiQy49 zenlZMhk8unwh_}$zHQZVLhpMiM3NgW%G4ufH4o-X?kQe`JW>>CRO!L|K5-7qj;8xM z$p@-zwyX6x%m3v99Fa%dP=OC+b^O3v_4;p^ygevL3s>`2IuJ+Rr5vmLO0B*3q;|oS zSDy}a&kMilDio*7I6<4%so#W@zB=F9TX^#qEh-x{8@|-rh*c82r+2Sj{=bWkC5mwK z89AiAkiE_<-h?)DCqCUd_!>i+hZCX^uU96*ajYWm2RD)R6}WQ6id%HW747Sf@tV6o zm?lB)Yrp@bgA41){mp+ed|dh$Nd*TT(<+TK<7e^N$Zw)4QBkp71^9Y-^~aVG_VMnB zE-6QF{YmLdSpJs1dsXG0;82i{A$kt)2vzD9UgjHKlF&PF!(xLcCs@+qv7gqR7V8}L zcFLKd^-XS_kI)fWIM|i}ZEo@)7|@W9ioM_G&YQ<6Z<5zbY8f(joa@Nv46ylA@|~4H z1(P-)_=^ESW;`~|tNqhTuuK`k_6pyHPi9fzUiwio!5SlV*qZuLs%_3Rd_Ov94xbiZ z?G|vv!3xM(g3c|w$?Nl4g>`jYNpfukwHMk~isa_k5UD@^PRM~=#E^lug@ZhQtfq`3 zQN0uU@XWK@Pn^yJ^8iVYLI$PKdypu%gx9K++qdiEb-g1b3k^;I9~tvwSHhgVFjQgj zuq|D=$j+`cHD~=pV^2rtiY%gL=RPDR|1;Yp4?t8LSLpnuC5?K(aVv_Fk{fre^;;zc zix7)%szuXBOa*z>w^*9BmfP7(&AT7~&lk_6;7eU}b?bBbEqEHP&M{*XD|!!rT@@1F zpOJ(w!q&;pjR8%8Gh3vA7&hZqdeYRXFFX<$=m(hKb9`&lCQX(j3Zp9x>fF<^OXtl+ z+FiOdkgj~`(jL@;pYa4If)eC9$bzxb5%~pn!bfX`Q53^TfR&Ktp`?)T zADbauspav}16vVkiNHxcjl0$AY?*sW-4T>Tvm2evG`^?XDn34*1)@Ix7QAfGUFUVO z2(`of@6F9OF;z&sre_JnSYawut@YXJ#1e}7Qw|GEKZ zMJ%H~ynFw?S{l2*@hkP27SB*dod2s-wyYdAO4Cl6?Z=cpYLDgtj-!r(H1MW?m4E90 z`;m75Q4x$$i%wegBS~dDc;5!j5=0R10vC=K+n!`9?)obmI%Pd-iOOoj~K8Kf0o=tw6hqGrWS45hT;nJa5PqG@#ztsj(0Kt=)IkQoMp2p)`SIM{#LvBaw^W9M#uyDBogYKuE$Ik|<3;WV7RSi1jPYx_uc zryuprobTkMMTC*G9xg7uh315fD&Vn8tXN_KB-MpwxyFe1G=~mtuaHni_>^E|8w*}U z>(I57V`^9d>1Juk+1db2omy3x)yZwmW`@1%+^d^D*%VMbwRRt0T@P0{3`Dw>d}Wm| zsFxt=zuVp+XU?Q8IWY6HJ+I;X?V2{{R9Ir#qeUynC&LUS7jb`z3Hw=P zkM8^d@R*FyKR}_M(T>*=#k>FE!{NRcYCgP0Atj}Y6X4PLZ*5gn{-H_nc`HrmQkS@d zF^(qv<@NciHF7^uJ`jPr|B;dQFsA35%&?d+;SL}myQP-q=J%O!ixxSN{c6ZAZEb69 zvS0xnQdp2aGXiX=WhtdZ50+hgnvCO#@%Ls>IYue9@Z7%rB%LZ-Ioj^W(q3CjNVnNefMHsQkBM(r8DGAAd8 zuIWs4wZN-Dd&oV-^otn!5xrk)4Gp55TXOv*fjI6C2+%p!2iRY@i$UwIhungSmdl6Z zgz_Z-P|Sm)ytt;4(Jx~4MHbqYi`;alY~_mB(43I;~N?ifpuuqJu~oe zL-HLtBwNKB1dYWkFLC_hXT5pz#PjbUqT<{{_INUS29^@)gk7YXhpTTl-j`NLdPH+_ zU}`DG%yX8vocP;o7<}-n%#GBc8an z)*rJZzc~vhU;?&`J=NKh4x&2qPG3!Q5_b5OCw~nCW`FX zWP>CmL6~Z1#6!!zp%$)ewzac|{;)f}8`Ih_s#Nt_|eR$ctW*s+_o>2-C zP83b533M3vc}!>nWVFiLIUK}Ns-EOWbgn$){7_a_-U3{u#k=Ac-@SM5AE_jHle#06zqL=EP8r&A zyIBkiipcKAD^0&m27lodsCD>SUVaNdX;-paLuByAi@=2F~yR;f`VtCz+^KrNkLO6YOdaox83zS@Pi z<+2)dUcX-iM&ugni@7g1Cd^3p{Rq;-E|mbtyiH}7EUJhMZ|>&!uWbL6Q$5$(2ky)vz{AorJ1gzI-{f?>mf5z%=Iwu=#6mC0FI|H1m51h>Z!a$P7(CO}2gE|D)pqYCP96PpC z7y-@^#~k2NNuCNR0#SCr5&84mlL@sHn}3%#*xzlcJ3UPJ-7hijn!=#Cs9yQ=`*-J< z>2Y)SD%s9?f=aC%)O9vMrYJ29g^JtpFF14&?5d_h9)=2qiC_ZA^W!O%(lSzprhM-Y z87llOL5NUVDO7GUfuu>B-gR-T7_#7LX#V~zXdZtrkFo;DQRz}uzQq_|G6v(cYv10A zPL@`c^;DZ0X>CPuz;j);9w0UabqYQ1x7OX|*sztUB+2yp`#Svi{{1$ki|CkRs*d({ zY7F4%0XN+SN@z5H4uQtZQ-O52zz@5~`oX7v(X{;Io>O~#fiEQC0H4ADQcD|;ObY(` zfU66*cODP0fnyHE|0DEc0QxcAl4?3#{d|OI;^`Llas0a;-H0?OE?w4r?>)_i?uGBP zEEjEGx|)?E$v`ewO|Hhr=YhFaDuufjG|S=meyimA{#hWWRX!z}Vhb&YKummHSZXhl zb6?p;&TP*o@AL>?e{`%u zO}>BnT|L6pI1{=$oO)>+vDcU8@7{yZNSwkQPKt&_J2eYSLA(p~rGGy-1g=}_zC_sZNVRLKgCBg%geu?r|X+%bJfN>ItJUnz=5>& z{i-weT|~US-vH3e?En22up;*Y0*@Z`xde$AU^z$vXJV=j6d(A+vw41fLw_JJ9m%i} zPV8eZ`E1(Z3oN1+Cjr)8Sei2^N{YFVIrn5fVsx|#ihH0LGRtk|n(UyulOrNzn34X_rNQ*pHVMmBhn8@7 z4yTT}MRefKAihBC_SepDh^lhE@+GSr` zr%F~p21O944Hu|ouJ{qG1|A@CyZ_khLx_CSMPoiAcqP%?q9TlWMfRZ*8g%_N(G^Ig z<>vNv?FJepH437vfTF$-yU3sSjOnImq|-_YYj_dJ$upCyxCMn_10;C5V(#IA@D392 zQ)XzxCiwRj(vLwEh!|pIuET;;$j~%&T2Xr>avUqSYiC~=;n5qEHW_`1M4ZQUIntYX zcfy#_N{AO<3sB!_143?`G%a&CRdp9f_T;fnW}ucR8+s9NV`^rW2a~w=_s?EDgl#-X z{*gK-(P)ZUQ9!RM&2A%C=b!(Yj?~mti)&l|KbE9F2ch4RKzqK}F6s?c4nKkQXkcl+ zt+?NW_vRdv$rBg`!%7Z>s|#JehzxT9;L8jx?qiz)pMmfX;TZogxUTF31v|8Jb^IB_ zwr!8JIR5d|rzYIK-A7Hbq0TZ~@JN$13-dEskJaz#w0fI^pVkmD*1!1jsg;N$Bub20 zwUPgQ>q|AqhE2kM?T_~P|GE06Y5f}53fPx{Vs)Ff8?c2;?gj|xMsl)Jk%<|Jy(SHi z;E!}>743V}Tv)^Ze?guR)BYTzs^htY_?$A&gsTHxb7?ON(ItgSot;1-sz{@8A6;8TNk);NjvPtyB_czbH|5Qsb3zI}TG zO5&iTyI&Y=@&30)@t(p!Um!~RrB}a#(aeSrX^qxJhW2q^Yh#-S9uuJFduh(uI}2(k z!rqcWz*WyJL}Uu0*)S4sH&#WLzse!e?kZGd+@MeDY0`$S3UtR47YRqH#hn?eS$ z)ReUbB_1X29J{)}nrOAo#w5guP#G>PW%`i%_3Oj+4wpGz?Zkbe;$QiH*0uqg>W#RG zXCftE66y)15%hqE!_yytdt)uLzcbpju6tzq%5 zV2B(|l3525X!o7K=>INL9WXX!4GsPMNBS;49k2;cO*iBIhK4sefnzcv`;D0w6ABrh z7Jw#G+js(X8>lnraGjAON5U2c)5t^RubH}ijA?+EW)qlFoD5w!?z$8Oa8QK$Bo>dOGQ zv+3pmGe%F{ZfP1Ye9fAE5YkqsUZWSjdt(gmmRp=QsSfp3muF2$1w>EPb9FAMCn^Un z*E`kUzp6XCfQ6dB5>S_1f!Q+dXzW;<=f(h_64=9@mo8q!jCSv8+iuvV-#@L(68=oSrDcWguXXRaUXv?pWJUFc zT`HvW&}j((><%s^vBdOEaw{!;_6KaImI7R%>#Gyq`u-HD1uSEWT>#js8~_GM@>0Kv zSmysiOanejI~#;(TIXq6O&o7)b;PXqOP?e0TQA>>5C#H&@@ zonXicLJU+Et#mkakAQl#>$b57PkkTm^`(N9iL++Kemi!EkuPv2#FhCB37}ii4dXR4{$cx#P_7%WL=1-H zvq|>q{1tG4X@7=Q@26$V9$>>VnNf^HfvcgBX0>l5w;|8^KahZcg?h~1@WLiD81&{W#NN zXqg*-zE6)T;fVVO-8Lh5&o&9>?`L!*arE-ltF6M)Q&UZb4_6=~_kh_GZK0G7EcwT5 z-WD?q2#HzRVf#LwK#P|}!OLBGA$E=rY#Kn5vBUlsZ|Y?e-_Q&ZUh^1-#k@q(Yj#J9 z=`jb84(Luewgb+`cVwj#vi)&KCg&R~HS_L`!VHGrvi+GJV|3#$T)eo~pg+3j^IscB zmbImbh&kwGe$gY3wg^4*V+W~$GXOpN3rEB&-q?n~i$|A_v#bE6eBW|TS!_DqpB2v~ z=;E~cKuovnQZD;xzTTnHmTX`s2el51X_fr1@V;ZVP2|L}U4>B6Kg{HZ`L?g)z(7gDg&yleODUQ*T~fGk}gh%mFxnReJR?ikxJJaiyxD=hU8mu_r}(syKGq* z8X1@Z%4;*(qIc#GxJo`Ws*Bp61-5fjH?s-vE`|gAu=wP?f z)YVbUOF!nvMPQIUXec5v&`nbeD|Y1hX7~0D2-QxzckdPes#*twgA*CdQ3p+qUhkdX z0QDpTsW2=5Spa&Sw*0EmK&>D($ikGMNhQ0S2Q5%K9>y7S1Fl7X17svxMxq)1L*E!J zGm)(R%!nCnX`aYVzs($FFTtw1KTO1l;ltZugVYw^)UI83SP8P(Bm+*^J#_1q*_&z0 z$#RwyT})`AdIWjf0sTlU%D96H?iA6MT<`gd-g|9%V~rg`ZYdZ$6q?OS{mnZM@}aViuK z5Is~Qs$iGqPB*rDzEc13lXy_y>zimrG8U_&>D5sm_WQ#Bv;fZ8m#tt*w`R0f!npZf zi^^oZ;^dSwZhNj!JW(E`Fe7Fg7sLqNy;?BC@OwiOs{c~Ci6mF{ zT4&w(qfCSQkP&G8n4sy`Z?yvUJvfA@!yReDFnEggLb<{=MzvR?1FiIceM&;vE2YLy67iD(zpbbs)v)E+P% zkO-ji8ey<%05tahck3yu_hnHwwg-mOwM^p<*^VA`)QaMOgo|yRWGnz~Z;Q8ay%371 zC$Ji{1`nQ|o9C18=liP`ZWnF#?}9j4`1{J*qTnxrckJ-VP$p7k9>{?0`1AwH3`#Oy%o}(wyl;CmO7F zu6N^*!A~?G`@zlVTDwV>+sWtB={}1&PF5b)u<>WhEXjEFz>v4U(oLoA2$4HYgfR>J zU0TN6V}o9Mz6GQN`f|6w|CGCM#!#XNPCs5u51`KBc;<72NAzf(lP3+gR?nUj3VslI z8Rp{V>EW>;d%N+N(uXP2dx z2uTH`kXhyO56Gdk@~(;}W6zjH*&@eDTf5{UD0(a9^oc4QU_``rQg74o zOJd8}vx~hWiwX)ly`EvzySEAG#HBBTQhny`^^K!-AbKLA%rNsE(X;HY3COQ(p6yi* z+h`RN=h<6CCqSWvx{u5ZE7DTM^W`{@iWr@bLB>O5wrFP_g_dQEKaGWH z;z2v$XDO^eD7Rzy6?GA~Ej>?d$TAb=qh=Trx#>rbDaPCopQd*wOhz5($&~GoB|NuB zSo3*ljra<}qH#v-WMAchO%7P|sWlk8`mqfN#w1Ia|NGO*^RzT&y`$hG6Y&zfL95EYyh*SrIU~c@uOB2-JRn*&q7&>g z{RL^|9`h^Ev_23L5>hzqhZ+xiV*bj&z(C8s*;CrT{Mq)zl*)wFCU5I(H?wWVbFux| zryt_-;NW1JV^!$a^oF<+cQDO&!i%yXPKRd^R=cAete}S78L(zQgKz0cJXk}3Osf|~ z)ES-_J@o!mhXE>v?5yIOn{Zd|o0*i8GeZpaKG$a)KXSz2H?lRkI5HBT2CVZ31T^)v zHtPI+Yja~|68KKI@<+op2diXuD_O}i(Zi;{wGrhD|!xXPP_?wN^&!7c}x&yje11ud!XP+G`| zdGXMQiPQ`+Esopl@lBLNNOWO~eza9pJ?WBiniDc$z&rX9wJ{rC8zU6*fL>lWr2YUh zUO(vDp@GhC*JvCb;>Oj^&B+@L{;Pye_G-q*)@&zwm}j9kXbeK_uP*{i)VM?5@f1(D z3Z~`C>3;c!J6qEe7NsG}w43cPn@zMNZoBVa2&HV4ayq2=B(;gKDKTm)R&V#PAkltw z9dde+dFJ$G{j(%5{A~KehhnM_rP2B1u6^Y)qkNJ9M=|M9ad8qj{0O$fGij})*-&R6 z&^v}Wr+_!qco*$YQ&GQMo`5s@C@CC36v{ue)*GP7f(cEg(zH~I)TeZiilLm;qkUH* zk=WwSoKVwy0+rl^S~_V=s)#tyLaO40oCJNh-VksA>4aofm=!;G@Ia+?YrEorP`ErM z?Ic@QjIcT6j`GG}E(G6FOF7&?jiyuFllB^qe)b36j zrUNE6lpN}_%>hh2D^N_o31CW$LPP2oWPLc4g4*T=F_9H zY&)~q9awiImTIk37EYKp?eM6ou1<63GPR*2N1j9szASQ@KfmDQF5^U8%}78OuyH7LpMQb3b+bmDFl-{cLF2mKX0 ztS2D~^Xz!3FFf`?u(mq z7nAZeZF=GW7y;h)*Z1N4MFg@*tCfVM=LErtaM!Jxljm(&d&{LSJVfu>dJmWqP2Ir z`ePNY6r_=f$Z>>jKdF>&cLcR zKQEpq5Hj`YI<;RI`P9BsE_K&3FgRi{WwNGL9E;tH!wa(LaY|0Yz<{=BC%SrPG`_ zouo=MSYiD((ZTAaYWw!x(O*wFU#}N!n$Nk$YiR=<(+z(ASP3AN(!*IJ5 z+0A?hEq}8m8$K*XQ~!{_G92uUce#;~p;6{wh}GINcL4hsztRQMUKaiUx05Ru60n(A z$z8KBGaV{V?HPb-9oPbmJ0U*7eM`U`#9mAf6^g`9WW%&^hm zRZA+_z2Q$sLk%Hida7N)S>4)rU&9W`+AgKp+mah^F*$O zG?e_YW*vsueVX?edQ&6kZ4V`3x#(?vUV}N8-vj@qe*>^cNFL8SnNxMb4Y4Vau4$Rq z%cU zIj#rY%p<6A&pVR%&KM-;mzTzzT#-wVKTV0ttWWe-lbou!NWDgeQIkV4JaVlXHxQkH%xnt0ecJME?|8jy;eOHT zQ@qS$;2FtfGtG-s65w)Iam8lk-J zc8Ih2v@xuE1HU|g+eH;(BE$za(TQjjHE{#56Sre8IE;D+nV?MMns#*qPLcm%%C>Hg zMVJ{MbRpzdl|el$`3MOD+ID#!R$9V|7(KQbgr<;?CmdfW|kfjh=qb z3{3D+M)TdnT+OBipO!BZ<}-co)j{x`fU!qjmH=Xt%-d4(FnFnCZ`DCNDiezR_S$G? z>;#lZ`{QOCGiLs+U#+P|mNT#<4S-rsDM2Nn+nQ4QT34ktcI)bT&x|ZXs`cdFU0hTH zjz(Ya{<<`FhDPePQS@p;z=aeaDa4~;-J+v5!^obfhLlp{cO|hYioe&s0pDS|o`t?_C|55gTM{yG+wi~zgNPW+(GFI0-E>yXA z4+Pf5uOjhsVn;b>w6F!z=dIk=;<7`kJ}c_$fNy5KtL#J1zA;@&r{nkRO_$*6mE;VE zR2$OdVt3x8XIt&Ad6T7+SNH_o;i4rmIvE?Cx`sV@HzO!cwX^!;?{mk9`!yxVD=e(5 zggQYKwG*K`tcv%ZI2M_NnsKJw7LmI^a0SL*p`qwb;{UiwG96GaN`*RjnjHU7iTLJ> z{R)(&dVKJJ0h%P?vsElwecyd=t~_snn1CG|IX^-+_J!HsEH6;K{1>AVnmp|z)9RIZc9}<*nA#||TU4f?V%GijLjci?2MXUF8 zahOK<3H@fam`7!}8%UNT0v>2~HL-%O_{3WW)^7+(U~#?EK$W+VkK#ZQLhev&_abiy zgevNJLgQv#$BiFN)Zxt?B7!9pii~o+fV? zcc7~K&hWzEOG*kl?gmg3!V~*LqXU8DgGT>Ec>kI86c*?#Ne)1Kdnz?eY*Ye=tZPBR zw;ee{)YuQ z1B|ax%fHXPaiiu;7lxk+2_O1y^D&H?uHU3-Q!89Oo_ENwNgJTCFbW?CYbtS0>g4D8 zVZ61FJD1}9gS@@PgewGfJ7TmXM-m)YQZ&N*s%!*G!2pyoZHQ@rmGpAhEfASV0)%|a z>iJ~}CxZuE9kylj!rIy=+_#v=1ldh|teIe8V`T2Qtgd=gN{eyM-n|}Q)9}+!Rq@ks zThdxv_nDn`OQY86-L^RTTGtIR7`J}v>`j~39_^Uaa?OFMYqnGk+`e+{u|SB#7B8-T z-G{Xy5nB4@t96sBt8%M9zur(Lo4E0vA78&FwVJh2YsJC$IF2q5=@~o2%1Xxi>22;a zWU*mN3cE#;d}2!q3hI!`*ms_(d6Lc&ZCAG|bo#h_o(7IOskNlG@t+;Jn_BDKqjp$# z{UK+m&UeZd`;d_eVy54`dnfdMO##2T+8Fj$b9Jf3x^)9(-gm&;k>-;~C6-ca_Psqi zb|iwZG(SW0Xfw={^)vTC=EL-wTrW{QUOLuCrNhD_Z|_ykiQK{d zGXGSxxWDTL0nSo>kl&rPc)W*^`jsnJ>@F|YVwI$n&attw(ptIo{$YbG zH#Tfcj{!mF&-<}2qDrEpdxsqfdlpyU%3e)fJr4lI`ReBCzo;T@=8W<%vX`M^=g#f> z`4Y5oqP2Bm)qzX4IbyN(+&?iOw%eIYRSPWugteopDY&mquwTj$T>H-7xqI(r_no2w z6bVtaEjcSZa_X$(G6a+(-Ew1hykpch6-QOH#%-s$ky&A}?OV3gt@tqSL5g=_PTX!GNy3C|_5jUsx0l&$s9OEwerDqNuF(U_6d`ORaS5Xwb?ss{y7mw)FU)Qgk z4PRXRI3g`SWj%Q!Owtv* z^=s z6DE}tHfjE8Gn5`{wRm9LJW+aO2Caj-xC5y4QB7W=B&#Q9Nn!z;Yfwt0uPl+aKgS$- zKfYm}FdS#Pmy{jAFmWbu_ioK8zYpIz1n#jru()Bu<-y^AHc_jp`zesa@N2)ip<0!I0XpCN zG}+27u*e=Wvjb`R*iHV)%z`EkwXsitd^4Xh;&y6k_%R;+!mwYrJh=jr3uNdkQtenb zd{FWEcy9du%(S#r0z;WJWQ@A-MU*RkZB#Or2M$__d458UM z;TgqqSXwJplgq8QS^YeUzk=Io?~*v@7uN57pXG*%&YgvUv$(cOnFMxlb2)DS)ih-8 z>wpQid@Z5GAxdJ$sm3?5I(Di5XF(Ov4t&(vj?K{g(=H~qZAh=RupsOBu+7crt%(M; z|L|L5tJI5+gUwpZO5>Q~A4D;%cF+>d1ILf=;yf&%LA-<7WjUu*$lssO;-ne>Q?P;m z3U;~eYyZ*vK|_!{O)lOOLFwvf8Jcza#0dpKg8!hB5K0X&*I6kA&dba66>AvudT z72soOK1rs9Qw+@}<@9L1ZJonHLnVe9x!kTVUtD50lho6qRp)i{A;pinS2OL~f6(aO z7>AuZr_&JYq@T}J`rz7C@wD3ESw_a5LG$)2YflHLCGM@GccjD%IM?ZDdx-e2gsRfP z-jU+9$<4j-tTi3%R(LTux8#|F33jGBkf^U)O#Y=yvv!RDW}pV$>e&C$@Sjyx0wGy< zJWp}c9&{jyo4wb(`>oO1rT$)a;_~IzlDQ&qH|U&w!p1{iM_&vAAC-<^;Bn>2t#~oi zI5m1<0K$PuYOlwP9c#+>l#AlsgSKH=G70bb-0|xGk_wRjF@jf946NcvrH6$In{a;Q zAT#6UPcnqd9>J0?N0pq<=7^f)oNC&LI8s(4@lq43H__ zJ9V|P^9newe<&JbOPENvI;M@5H{~tM>}lY(u>fqg9|~t^4?!|-J#1>kE-kAv!I;5Q z%n-UfUkq+`o4~4uT*HTY8TIWe7C%UH`}~jU>gv?V`_}puvv+eA_$ranFNFxwLhJrM z20eNR>~~>tR*wY>7m|}%3;*9g)VW|;5Bk&NgVjq%jHtyZ?e0Iy zS!YRLl#6rJny($aj544(pl^dDLp^={M1WhTV|~zt2}4@CvAABRiPVbo6c=VmBjak} z@&Ycb%QCG^=)d$f&eGA*u`a;p_N97j=WAi-&dud2(fL~nE7Qi`+$QoD%hdAEvJc3p zT~b2B!yRc< zuU{us=C-wM@oBG&a}y5I`Rcn-ojsI)p%*bLe)*ElqxYRH;qF8mOQL7_-p|lZJ30IA=cf8?6qkUWy*)(aKw>N6(hTjw}C-#0FSmJ>}qvy}b8qIvsXrrHpDjR907*apqJ zIDA4P`vcvJ(%i^sU;BB~IQ1keYU)%62nFo=YM-7paqr#(YB{J>ZC?gab+^v->E=fV zb7hidh50j!u@wV57t6>kM@j|IVV~!VMFd4-X+Ki4qN0Mzx0&PvLMt0c+eO80dn)@) zcl*oANHAo{#xBkA!L&8#j**d3GT!(%DD60{Mp|0>ZXf%RF^j&2k`2cbLD)8N(fb42 zw$(>a43D;LP|p%Ttm6VjprRVhm@zQpG4d(Jf={!!?Vo=}1Qw`R?*;XFllvpn=0HG( z*iFz#e?90ommx*chQF$FQtQ#|gY_>YH?X>zkzxJ*<44Pl4^Rd}g@xyOcx8jecUz&_ zodG*C7Ie|w_a!aXqrhx23u(yFjN?C%Wr=)|-cwIcZ#aXXEG#W`9`^U2Z{mu~DLG_D zOiWA^!hjH$b007uj99QB)UKK@VDlw8mWu}H)09_bGIC@{#3+GNO9abgUA6>L zDvrT~@0}Jw{}lPU=sAAxd^iUJ6g6~$di_reP#c(YZs~%E^XHp_tw~H0jiiW8%YLz9 z>I2V8&?T`*5}|ntW8vxu>TJ9uO1N`G@yj__G;~;o;oZttB~ahk&QBieqdl&cdMnc& zHulOH1Dxi~lPPeBodHaULTz>_CWh{_E=~WM+AG}7>*)fq)`KWb=EC%68ZvYpVn!gN zCV(>JlTS%o|An9MVr^Pmx1bKTva#_%ApG4`qHjTQ)M0rljiX2x|Y7aPy6VD>tbp*P`(4A*|1jp66%{KFpdM^1UO>UK}FGp87+O=DYws-9^~Yt zzj&WYMAEaBY>l)R>id0^Y8FlKQV1ByHh8ruuC>)9&4c+61@2Gw&o@}d!9X69^`a&< zKWLJP0BGBvgs#^|tB+kFOxO4-UT(~>y#(^HT4GDyyt%nyX3Yck(BqfX2AOldDnEXI zkrlX#JQ(CB3I&{|IHjB(o@?Hu$=n-R85ttww>j2@C&ZtM{`4|N2`t(96|`Q^S5Art zOEb@egw&I$F)Y#4LHUDiUpG2^S+NB+wh_wXS`MH+Sm$5(12Cq`(xiwWP zd31gd#YiG*5XH4WCkErlz_|IT^CwsOspZTh#O43lC5P@;&}r`H*;S(8r(ylv;&^j+ z{Tlrs08vy4aY3_b5FFDoaq~J-b>Kej`25gMsA@A*8JX4I<~b8rjF6M9n~i`;)yAFI`f*DYAN}mseE0?N(BOxFI+?+B#rii<fUQ2dh7N35)JF^8H#CdS%SuX0NZag^wT>O+a3eiEy;WxOe|L$|I8fEXOTa5@ zeRB}vjIRO|x|R}Qa7(QfI>%2xcyIw#*ACyAoVzIS-=(pdMAA-YuyWm>{)w_|{HsTg zcE>%J&z+xh*=TrF@!5A#JcxqsU1~m~$v&&Eb(R@-vCnGf=(KR*z3HE>v>3aBIHB8{ zs>wErwtW2TbmemW;daC9|J_4IqzN2(5*rs+q|+nGP_zI8-Ku}3Z(i&DpaGu>Z_cM5 zW@cv36G$E{f>LZTdS^R_S7Op8EZ^cwrPkza#)t_7iJsHC)&qLc0;kGf3$-OHC! zEr^hnggef5qKs1pPVp+c)%n20MbX4+P+k?tIR@}@M>gQ0qCmc422+W83WfI6=oAtJdYjg03O(c8bDr@m}Ku40RI~DpkxkpcJ{Sn(fdkhBE)Ad zEibBW3OioUsfQSb23|GmUl-$DWA#=LW#XJb>XCfR!o1-9doR|212W^7W-n0K4MSl? zeb;pgo!^E6vL;fvmkI|ZBs2=YtWbd0(H6I((j6!{P9VsdBm;2*=ouJn1*w+{_|vBy z6!|CVxr@gis@WJu)+E9{zp;6kLK7JyqbaB(O_56h8fdlf7Hb*o<4IN-RKYMBhQggU zpxb1a3D+mDNFregQ~J!1Ej2Z@6MSBo8-g3u6BT1Wwlf<>TwY5n*MP>H?#9Md zzwyGy!Je~^1)F#B$eSZef8kFK-MZBYXHFANspqzo4Io!|hl{^9^Jqx2m^kKBW#{Ml z!9n;hR1o){Dm9Xt(!?eLr8;7viLM%^!|Tqlx0yUyqA?)(@1~}@Q@aWtf=K7dnX;NK zcIvgQt!*BQ2ifCDdT@+~L6MQoMZ$oYP*B=N*?s|154k}rI&U*`bFce}wG|AS zl|Ty0>N$kbU9*>2KdoLBn1t4?D3s_8&dNOJo%1PNk^Kfy%E*nt$V=KBtEp4H>9d5< zxLB2TP~U=h(Xh5D&y)Eh{=Cay4LF{g}L< z**?DE;riVD-jixrLUQZ2vlWV-^JyJWn3xk!X=|%au_0A%pFS5W#~;}}YP&=0?;UTu z(siCVdp6DTHy)jK=8efapX4_{-4udh-cxHDZ%%`IKKb+f6gM7J~PedU);zpAPX zj;7Jg9imt1!v^g=2M4R~uadajeF;Uyba030fep!2xDRXC2H0s7)Z(YZ;X-_hCa-r{ z48oZE^N+jTrhWs}1Rb1wi^&bMpK5xw`cc9;Rv4$dR z-NVBjDanzGz38}~QtT_W@U-+poJ$+%=bLePPj7yx-#8n4qxN8z`+shjd3m`*;2eW# z_U4rs$L31>#_7;d^SqBrA(xQ|x0}QMdDItdHl2lKurZxSITyI?7M7C0$H1>2r)?zb zWF7-~s;--NPUOki?&+vC&Wy!Rd(pEz1{t4M(*xGq-Q8=;&PHRZ zd|$tfSZq4-{ipIE>Z7N&ey>5j#2*EdKl>l5;`jlX$YtwgG^FB_669KQs~*NY14eb zEzI3ikL}*Az)zliWwm8#jss`lj59eCxY|Ge{+3Bt@0v9h&I`5>2> z#7%&k-+cbOHA4JkKHY^SuljLsUc6&AYLp{_Z1JVPslLlOin&Tj{4-~A*+d9KlCU^A z%$c*5lTmc+l2Zxk@}hvoT@2P7Y>S~nd>w2IRU;g-u)bmx`mh19nL`$G~mXo!y{dZ2`FCGbWBq4 zU-;Y9A!lHO29nUr&8Sy?;|32ot7{jt8U;aCHIP)HF(pL6$_UDai|B;H?%Y^k;q&2D zT;%h<)sk`%`5`aw*1$M|z;{rB%B(qEJv}d~RNH$OLcs^4E^{W&=Sm1U_LU0GH&DWh zW`5B+)iv0`s`x99_F?)4gsLvb+iGZ}CftCn89Zs`%!di1l7b5}0l>x&meB-X38lJa z*yI&Kyp!%(7f*7lP8 ze2P@bh9i2oIjxNtt6%q98$P~s3kl~sYRoAw|CoEgIvtaUxaIu2s`IHKJ>e z9`CvhT}*l(ELy5tDgEkA!zKd0Q)Rtp5|_ShfU@Zd2S>-mskeJ+X^n{Zx~M~!7T$0M z_hkvILogR!>cXnPG9rC>$=UGmM8K3+)v@ z-=Ex7IJ35VlA=p!Vxu@_r={~%lRzs5x>0kWB=NA%`a^>xD;L-G3GSOmnKplhRUwL| zdMW(IJsd<|6?4qs!(}-A&xbo|d1Ttcr*YK3h@?H0%bFcHidvd6MfDVrVTqjNfNGtm zWV5C(CM}~~^P+4x`>BJCnR1F}Y-~S@pXX~xM&R^aJT&rM$MuS%@ofQ|xtB!3do+RF z$|+n2fc5BK7Slu3q{>r_tt{XBmy`VL@0a|w7Do)MzD`=RkWH~1b>;Y6Rlgy2Dq>DAaEi6)$?S!(`|#B4ot2 z^?5gWA3k`qDaq;>8F3Jo$!&^+TGs+kMiGc*``SIVVK9h9bK{>|{utxHglF?#w~-1+ zDw?QG`aK$2*%K5!|Daz?OkW83+6u>I-;nss?78e+$Okm!b{sy3Eh4Ad+UoRsah(#9 zQf}YJ-^lDHolDQkno|1lBOhSgsT;gd&B)ca<)nTz%48m5qltJyfC zlgIA$A{&t|R(iFMKWS<2AMWe>M|m++j>~3+juCedPfv%hYyqapqD`4CO8@A++=7u$BV-FwM#R7JdYxUdFM>)IzIB)F8N z&RBWKnU&-@<-7*zw`XQ>{!UGtu1B>!kv;r@Eip-N6wPzWu}r-yN4rzsp(pPEqVM4B z+=Mq9mBlO%adC*YJL1>PT(=+XG1xU$h+($;@#v1_$5y(j&?P!J+-frgihc**{U(QK zgJ$h+(z>nq`+J>)J0itNtifTz_qvX4t5tZOrRY=A%IfPvvj-DiOgK6qDE5p8Jc!E2 z#l#`<#8(mdkn*lq+pI)0Xyu9k^qelo(>kM!+xi-bb z{7Hojg`|y>(FIHk@`sWIeFm7W1HMw{^Y^eHoI)}w1+d7%Z#DW7X!It75|fh3(bqAWvk}rqreka;wSX)2W=oZ_OnjPR0p zu!mC*ohM<0IcWRWp5t&SS||zvq^QN03SxrAHw&2PQVB!w_Vr?uHhq7@5-pYt`u5g% zR>s_~#c5Ugi5$m$hL}H9eGy>Q=ggJt#p8hdh>AO7T~0@845jG+0Lk1sl`U}-es>(Y z-h-WYd}TILg6CzRJJ9?s4y}N%dQrx18hD4w)KWRcThmwRP08W!GQEa(e5%7FN{*?o zqku;%{57=vMm_L;!Sn?G%khEMsD#5wM+$9MW}Fyexh5;_@WArbk$W6fO}utje0Z|`3HPn4 zL67jkZk3lz%D;a3GT>_;-SJ1wQ_N<}fL-qsKk2oTRwJ!t)&5rr$~rUQ*_TiZ00&|D z=VveAPcTPX^GEoYJvb7_v>Rk&ZS4-EO%`$it$Pi}){9ouvF-ixuy>P`hDUj4Zz=4b z{B+9gNgl_J%{(9VGz^T(IYVHu03Tboo#})3H12ECP$j(B@>(6`>0=_J7ClNy;gEV! z#@XwQ0XD2xTN91_hbMH0j4kIvOC2&F9`$IxHW6D?dFP(&StnD9WYmpk`bS*Ae~BLo z(N#(#@$DDT@qz|U)6{7=>164^f+KtZDF;rkiu6#{wnY5~>pj4&?~fg|HCG=yX~Y<+R@3dl@uQy&)F{>reHy&T z*m%!7w5UgQ5@<=IFs<5#n3oNsx>c$PFGO9EzVuDV$&*`o02v+Io2X4( zX}*u`3Tt7I6;C4kKe6AdhkaA?HWkZwMm$zt#$+A%+86hc_~Kv(T2vJxk8Le-drG>H zZ+#cse*+3wc;9m+YM(~h$je8yz!*T1|ypKI<~G47b8-Oa>`?qDN|aZ@_6+0sToZ1 z^D`&0LJwf@EEB}TPwz;1`}QqK(^GO5-aU2ptS^9G_~54h4|{JK*5ls(|9)BKX@wG6 zhKvo$%pyVx$rL3eAwnSvQDmMfnJZH$MMb43nq+98WQYnWB%&fy#$vzDxbNSwkNsdD z``G^n{|EmE>%J|k;rd?J=lXok^F5t`-2jk|1Xn1&9kWs_N#Eh-<|eeyqM1w^%HA~( z8{(#lOFt%*mQk5W>Hs^(wa@&ZXZY2I8yaqYuyx%U2xO%nOGh45H7o4qqgoM~_<9=2hGu9uFNJjjX7Vb{dB>~ekwSPtq7pnnmj z?A_ZUY8iE;B(6GrPFzr4$K3ipJxiM9?F)nHhpQ^q{n{574yWFsKklkmefmZ=Wi~ly-*`f84=7b;0IeRwspV3TtU;DHNooB&NOeVhk&tn*fl! zCZoB2&i37~yhTN}lCIC{9NY8RmRL^+Hk#BqX1pw^Vh!?ZV>qXlJi?kgBYP36ony;*`%*-U@h#pyejg?;hM+-38 zY1y)oJkc`c3&8D1iVP0kc*XmtTvkS_>i=Q#7RlSIl-yx%qOTqrDiGA?pRhpW3>s+A z;FrWrWY-;FwqaLzV`M1|z!G4xeIEzwI@7KDnX%%|oo&jZyOV2Yu$2Iw63RAaVp{1aNL)sIvIh(Te2^(pNViI6C87mo}>s22Y={a%C*T zSEZ^)gicB%qJgNaim$P3hw!0$7w1*JHp*%jS8MH7!=!WkN5mw)i%*?8H3v=ik(|gb zH}Jg@ocpgkDgfoxfA#EwE9@Gt{=b=b*j$uxCJImL`j)RrX%t#IF};Dhp+E0510}t& z=5``_8NCAd@n*zqjBW;j+Qv7^Fvzi~q5+n=6-;D+3(rW|pOCyLdZRKIQLq3S707P4Ab#52^qM_=-ZqAunnV{%C!;{JXAsRW0wY@$Iw&*0(7 z@oyiRia#)A?Gn(e=UqR;E*I~t1}BJ`BWivv_cw?#oNdut_Xh26ln!Pwk9G8Kl`gdLa)&3r3D9{E zc?*#1_HX>)gLp)Ft^-=^B6?^4k3*cdJHo@m??*BhTyZd6e76y0o`#*~iE}ZE;I!5d zS1;M0#-Ti5=+9L$tarXggQk}YMe6$L)t=~Kjs}N@Xz6~fF@hE9 zlYjN>kJ_;wup4znjnp-MdBY~xME}~d z+c;^A%Mz8ls+T&m$3(?7fQL+MI$aW#WPd|Ydd^+^3DnKzKOeXhU*AK-%_uW7<(jvj zYF7Jviz!*^rqDA7fPR;_USikofSJ}7Q|qkOTi^WMtl22|qwo?`@ZwIGywb}jC@gI3 zGw<@b?Zj|z(FAl=GMmBvMzbpONj%=nzM309_8E}!8Dc%{TG0I&1!g4`6}Q(~K|ZAQm=V8UsO4Zj~ zRQl?M(Y5|WoXa(#58IJWJd#PLjyNnM zz>i_Ch5-{p^uNFA{E~gP(MQwqS*Cz}~ed#J4g%~417BYssm30MzJ}7D! zXu_6?(LU5^@WH)+Sz4+^n0{Q>%+AwGkYig)3!|6s1w4C>(na~wyg3G`M%Tg}*%PPA=t1vk6MzIFmraNDYK)opB;-q7O*xg=@@HR1Z z!q~AzYlfo(PMN+)e?hNtG4nsxHn+0McsSmPy^D}V3yn02V5!?;{YfLj0vnosDkx}a zZt1c93w={^<{t7ql)R}_oQS+--^Xv?Jt{CLsE$Z9SzvI!rkL9a{FHgyC>a(l*Um#5 zpbo!GD-M~tJ}Rm=K0=AVKpN7(xuTgtTdm*x%{yFy_m_KM|W4yC$*tlP7i5**CCu?_22&8+Pnm zZ^ueKDCZ5#6S=jG|T)`jYU3X1B{z^X=!N8N)`i?L2_~FmIf-SzZvfV2$aMWGhKL;- z7tZ+@U_2yFsMF*;I^ zkLlf~Ptloahp;QMpU|CeoZT8#^K6mNC$AkUoql?w5j@>63l|o+M$eul%1xueSE8OY zwp;dF4HT%)j(@~BzhcPRs@4LjqPJ+cb+!;9n6#dPQ!<2Vw>D#qnu<0)_ZU(`&f6BWCgC0SE_#NQqr}@d6 zdo<==47uG%%8xFtU#}jiX&!zL=+H4oI6#3f2`2CQ_ZvVwjjRZ z-#6@YA6w;PAY*}87?;O8@Lf=s$JvHsd8d&~k$E&*mO>kRL$0^Ie@i{|>7S0oCVDlz zv1xYe#I@B{U8BmvjFnY!-!RRjbv|Po2hXo)Y|K_G6L4dhnca+<&F96K-wSisq0V+} zORiqk!i05k)Sr`Q&cjtaMc_3r898%0jq%*}zc8Bw(x()CtGVXQWA@Ppvhzm0VTE0x z)VlDML!#*X>2=#99LI-YhKnND{Dn+9PnpAbpPe<@GR|FFR0JTjH5cDtoRw8us(WlSf}ZW0TZYHduDL@F;R$-Z5R_8A|s>Goge@&0i4beERQ= z`GysQe2m1ta4PcUtp{u>`!Cv@CDyob-7j|!C*F^<;wEoDv~81XC^BXf8!wuF2F}-F zm&YMXQb=R6JXJC>GaoJ^sQ-Al&czP2om`}86k-PK6xUdq5;seb*sO&M8R;p? z;JZ|r;z*W351yWlKCb~m1^O~_sN&_aj4CLW#5nGxaZD#_5G_$~7?r_isZB+E+Da7BKG=@9~MvD&*zC|sJpCRON zI%a#3Rsl{&Rz3inlvG&f^xXURQz$p;#^?>~c)7?R2X4R{0nbycA0o)lpLy==9SF{e z!>Tt!Bx))Dq5u;WlmyS&Y8AOT=!Bh*O_^E8!WyIW-oAURntzxY02q4> zSWPC!9KkUy6Gh<2m?iS(A z|HsO)i(^K#RL-dgg;S_dCHol{sm#2USb7vjIC>b$CKKw>03n`lBc8wHwbf>8@-kY^ zbu#V1`y{5yrwm;R^((8xG%2pTj_W)frZ}N`H;i|iEicNOIBB}CYz80N)|Lnt#Z}2l#MsvQa571 z!cHk!-%5nigCs;n_Oy(y!&4fYs;j9vf~vIpS{$FPx7K>+a?#AeL96E%k+CAXy95s_ zLQ&W<$<>>`viuOVX76=B*NBB3d5m-F?d#WP`9&qIt&YDxv?s+5ccF=l5<>suKlw|b z1N4qadf6^y_xe$Am+I$2wmy>q+izjgX(r)$y+*-N^8{3`Bi z02}AUffk50Xp}pW@FiY70Jq|dP<@njXznK)&#skNpy)byFk5Crx%@Hr(1QLywfTHr zEC-52oj#b3no-@1J37SD;S96KqOM*gi;OaW(`@+KwffXMo*YBx)J#fVypWZRVD`Yj zPJyM4W)1mVVfXId9YNPAiam_MMX0<=`d{+*Z^wQveu9^SVbJA0 zG2fQ(+z)V%;C8ulj17^srq?^3b#^Ot3%^z@6*4iNq6hWo?3s)@X!WP`Fzkdx1r_vt zwbcCDC@mgEgZOh8F> zBewhaLz`JjA6gyzyI&8_-=DC37GgjgcqK7sWyHFuKw`5PQHQdku;}BKKOPJNWh#sM zFn%Ja!=_SR$tG}_7${3&D&GHFnMv=w|8r5L zm$5bQLJ3oePC=Z>pJQl#)cELQQ?mfSxNYQ|U;B)lj*(q$R*bi_`=3WcyaBPLJ#mg^ zeU_oiY#xnLZ)9d}Lir^``)6|gTX8DC)Uh!C?}}*8w(itzCS|^p=jKPsyJP zC3McV#01OOqWmup=O5D?I)7xl|M^1UMbGn)=C+?Xb?R2&(r56Ki%1;*SYztwGR!>S zKMS}$zMRe|obHt%2CH1PXUt~Ms+!(KgeQ_f>+>Q+>$et}MQDWU2f#pkz)j;rNIT(U z6$p6kevl@3{p~u_DYTsErX{5-_I7%DeYQyi+M^2gTKu(mMfXYf0Ao^J`kWaw>J4qm zk&L(P;9;0xZ{l5z3ZP~JB?sT3>Pu(NjI&+DYC5R$+fie`hWwUIZ0?sq?vJhc(2!^K z7soTC;NE4{402$TuZwSnyvXQk&agh)24o!>)N!ZQ}vvW&zEXP8it@vuPDudg+8s@*XyQ3@-d08;oes zN&OY2fOCh)P)*lXNSbOL9pc)lGEwSb_74f24b&X40J9p8Wjl>$@U57rs6F4}i9V7d zHrSS2X3L1@0J)Q;-R+4yKBfoPCi$h~W}SgkxtD;d2)5nHSI zawk)wI>2|4fbZ=an}weMlzVI{{CcW{hl0Ba^iFYylXB~xJsr_`*d>swl`9KXu-Zp+kn$ zN$$V#xTly7nVl_TlO)awx-sQ53M@(v4Kr(2r8-jsfi{OD;OG*5X*%@>5n+^k^|7KF z0Gc@==KTa?G~vr1BqNrG#iX&ZrE}k5@f2S^B1D)^hlD6V<7$Y(=;yI-<& zpJ7IyM53@f@@JH{JW8w$>yRVhYsl$8euR>lle#z3@%gH6;@e_Xkw+?%gm^pXxkvvV zzIqlVrpusSY(8REL{qnP`SRj7f1Hlb(D(hnIUOBCxWfN99q;5$ty(H`%r?>19g3+M2y)=7r(n?W3bItp@=&w?2mSFWjDK56sRjXHvQ&LfQ>xXn8&@cxF z&p1|d4E7sGGc%If4a;LgLI2?cvM`;X?Hx6XX>H=d;dQB{U_R#+5Y670?+@nDHZW_k zuhb9#|T$qxbvw4hF}2P|-EK>i#rSCv~GN+p8>~@xM(XySE1Y@k{1|HhDk1-&0FB z2uIS3^Q5N-o*ei4w~UM?Y60AVr0M?irX<(tA23}54fUW@BR~trx}UnVx#kPEKUGmx zodW_aBgh|Il3{h!L!~BRNBPB9E<9N)-iz33Vktrp$jG;J>H-@r#cBR6raRC@&~WVb z_s{x_R7KvF$)i0TMy47yrT@Q7-SGh4tS<-b$+R86f8lO~R)0}@_#)aRUE!6gp1c7gtM5cbddpK}}qCoEiu$ z%J3LU*b!L=f7`9pVNMJI5o;;T&3~mA`lqKaum1JdIy=?o%{?9&wem1rxVX8Ar-p;y z#7R0a>&g?XykcXs|IYB!4G9U}_((Ijt*vHYu5y6k=V>j}_ZY^0{Ly*W<0p@A?mbxC zZQnaL{q`SM-Ar2c*7cZP--D08B$XW9w+TE%LOQ9Y38&~mfwxsm(Nagu{`6($y*5&R&ZTM#uWx;r_q7{#5t4^-?)V&J%J5~#<)xcB=L-L z8=zYI8@Bs!*5Z_= zhe=~g30^@4XbKvbKi}ilj%G%c4{J4f*g0I5jG zY|QqsH`klpiFk}&HYZ@`w}+UuG-#ce1@a*|fc9~dgU8AqyEjWKrf_?45e1dFI)!<* zF95|5Ax!7knyF7?6F8gtEqLK>ty=RYl__02Ap8fj0DT}!O z=7kVxWL-auuWB;~otuESF^kiI&!mwGf5O}yA-Qw_rNsr@w)?QV^Pt#KCY~>RA@iVK zRf>*QW?aIpZ9{d46nYYaqb0EpNJ>BeN?>ZE&1@MDV_8NAph0eZXZ)IswU4Q!@!YEu zN%9-b_*CsLScrWOSzb1o;VcyhU}jm5mY99%l4B|%R_{);>A$Rw^FANWsW$g@S+q$R zD=UX zkM|whwr$&p8(S!_B!7(7d%=*ic_|2c5tgPBD8UHG$q!EY8VBpfA^PeS9Ua{$CLBdt zTBV#TuCzxrvv!P6GCRKjcLT7$U0C=ot-ohqavPKzehPgZQ%jYrWrn!n9OMcVa5y$hM zsP$H^neN$KC3&*@3u?r_7?*SzQIXw=kw^kn9WI7*N1t-4ip@tz8mvb(qe;e$SJwXb<)ZMM8 zS;%mmrC;C8mW`Oa47b#G@83(J$)Y3@jhHGAjHemSfVoj@s!mLnzJJDY%CB~swd{(v zKis_|vLki81Y(fPycGKPF+c=9T2!r#KuEUX2)druS)cSMVvSBuTT}Cl4$C}I29-Au zQU=M~MxIG$pi!}uAnWjK*s|O8h*m7&zggw?79QGyZ84*T7awyrh?iZbUUXJ#=ry zn$5NP41yxbpFuBpG_T5arUV$&64-)-)XZ}A>B^x2553QKMZ3{r z^>DL^upT5qsF%NE6(qm1o6g4!qc$=w<8>S&5*y1d>=4cG0yZ)GL09MR*1d)=e2B`$ z<1L+WQ^zGv8s__6`2-QCVf?)plj+{Sy4yJ= zCFLoFLblR*5P3=KLf$az=E<5FshZ9#asdCyR%@y5WTFxW4Qg)tYHE6!%Nkx;eC)_= zirI<*A>C9JyJ7L!_L462)LpX3ISMN%f)In}3sKx17~m7(F1SSWx1 zmN`_d=(ty?vH%DrqS z?MjL(6cnSMf9KY$`It3u8h$-?*LR3ZuLAG@By8~apV9EbUfGPssg;bHk2zMr1y;=C0Esa#>O31R?g=cu8qV3#AAJlRT?wqP=^v^&4yrXQ& z{C+nTUH$3EOMPrl%g+uuFL7G9+0U|U4;(HzdW|t|5|!WI_d-mJkIw1BCN{gP><(J* zcjnCXu?u1^8fd$)=3CFO6YlXI;Km^Vk`d-}4m4y&l17G)m&_vz49=M29550NFsKB$ zmgIoG|M|X2LwDBcc=)z~Ir~>|$;6{W?k4=?05iT#@C0g`rhiSJHspZytK);i2P+uB z+9tHCJU=tvSF8UCJ!CD;%g6{*g9eOjGs%>ZUURj5(u)nYVFrKLXUVH>@`T*^+J^xn z>%Vrz{l}(hHLE~s%^7i%!mmBxXNw%_b=;OMb%}hoOUae<*VHn=?VpCj%TjIvbL?(v zyczYTHA2$fjq0Lm&|uRA%LEslTgQg=)cNuCD{%^=Zp@Qc(^S*q!1L?C z_oB4Sb`BovBNl#dJHqqs!Xw*%Lp4Do6_y)MdQ@{IrH(obs*`zD11@@}zVIHS>+<%o z2UwXBo+XW?&U=OFBSi54)#RdT>Tb_-9yK?i(Uxu7Wb}s6{D8m9eY1F893{_6O143j z*;fNl2L;&ox5TbUx1mtb2n%t*;hdAvwR`syyyqMdQRf}eB5Zv-IZA8AzE|$=uGDv! z5>RrxH8UG)aHhq2?8}n1x!4_Sl5%dVygcma3ux^BGo6fom0ToBPfK6h^T6&I)Zun=?z3+#aH-={J<vPbtzj+4?iwgm6c@*@vw<5wdWl zcq3Qh*+XCd()|u!ic6k7n?1={6iFOS&v`Q)EV`b5|KY<`ntlEa}UMp#Aa1MI5ulGicq9r7UTiH*mon1?QE7P66af z=%hMIBQ$Hgt($YTV8m}4ad(eCOzCZP~ zG5%N*ZU?c$+brtM=JoX1Gt)(t+5z}B(j05^z9rQIe77jwwfe&{CnwEMv7m@hkQQhA zA2L5PjRJOu#=fEB$Ifsz&Gjb2ND7Xc2fW>L2Ahu1`f~2k?|(dy)FNYJ25MWHuvLFtj0e4^)g z4@G_4qc0i5Nm;#9>gems-Xsm!05bE&&`2+wvfh!Znjtw2Fi^XS0 zi-B}h92fn^E~>e=Ngq0tA0`+-=}X~AFbfG+W0hc@?bNTIvS6;rxz|5#_=R>z=5{}2 z1j~R$m*G`{?1=V~BrDX3g!3AJ6iUJhdZ97<#`i=@4GTqaz5nWJ>wdvnao6XNzR_*` zq2pAy3y|OxuKlr?X6538B5%43j^@7<;sk=!Ol{>Q&oQGt8j&U)^#8#=ba(KXUqq8{ zkbE^VITh=L2SbH&arx`Lxo(t1y_rH`ALslcL#Q)GTy+UwjVQEct^+?5?n`(h#Vj_* zSGdzIrJm8Espt@~x` zRfB)ndGY26R2CAVfwsn~WX){IUxK1`of$_K$^Iq_qVdnab{Jh4?O?kn`6r?^4sM$c zz$891-fJ}Fu|iZgfdEcAW!y6ilZNfp%?%aK-L)<02|ZG})~p>#&Se+eO0KWXi#O%v z5=MJH7dgGX&N^C$*Kx4WVoy4^mLK%+h=br-Y zjRmdPo^i73%QTjSLl0HjN-p32Aw!EIXV1e*99#k`0jjz{eR^0TMH+dm3Oc%43Ut-d z!+AfJrP9f*9j28GU!5L3`uR@rPj9LKP5u-%Y+W4bjMvuZszeU#6UUiz74%9`y!I>W zL?bFBdQ@RB*sNDsxE`?0i8!>vkJecCu?Y z>$P-N@~ve)UR7Uy(8&#tZ2c`0t{M4W&Sl?Ly9B_ZmR$Gi$4td~T1M)(klgM}g<~7( zg(9^#>4tOd>}p+am*#>Jz$z20yA5pBKHqge-VC(gJ7fkE4kBW8*QsjHaXqou3!X=E zb`-rRTPX_F;%XMnr@=}FvxK=Pvi>753@n=3vn~Tp^bKN ziM4vjZWD;rv~3wbQq%CX&wR)7diyuSr^st%&_Ho{Fd}w-=SnH;-7lE4|nNdlh|6eH4zJ;Z38$JBdCl}I$yB5B5502r2WHN zwTUh%-+41=7mh`Z*F z1vu@xjx5x`yeoh{b~BC<*CMEgYN^&$tW`|*?T->|VY{W*DQ9SduTs0QtEz`b@^M1j z1igw$c6LI2W!d38FMnB&W54Dd-~gP>oyq<{de$Un#M-GD%eu77z@H(Wd;2(08;RjA zZ28Q-2(LfAe`nO8)QE<(A21|RHTR>QWOw(;V3@U~+fP_cmBA;oZGIFRHEJ(Nr0W^=5GRn1=5??@^@LWuiao+A5)AWVMeM=S2~B$jxsU@@G24 zjykO83#*to6>R6?QS+|%rBrUrndTe+m{q0*^@szK+HGSk!2GJI!PTQ_-hwB}VDCc+_*@J?C7owA=%iwoaM$E7IVdFvD1`PHnf@q4~^po|4H_P3)vl|)BE14dYVAz&Z? zyukDP2+iQP8L56V*LpxO0_yfv2K8@6%{n>%Gq2G86|-x8zLtzfq~M!5AY>wX7bPX7 z<15>dLno%i+`MFh%_WRLbRsy5|3Gz27?Ma`Zh;i`%sTD7_&E=nDx#I+DNj>MTU20M zY7krT<34;h-Ie0Z`>3@5O8D^xI;b@&f;gj6Z=2AD#bcJn9wahMkkt`dQ_s|#-!py! z#$~6txH4^OJ2$>`hNRjprw@Nul-ii=$Tn~_x@Yy-@@wwl(xrD2nsyDo-&NJF0FY_y zj3*bW{-;7Mry!+pTMq!N#CL4k>$P{5L)a7lMugv@sOog-d#Scr$fSS+)6M^-$N`$3 zy21Sxyur!wd!FYp&xu-fw=b-%r*(IEV|~W+aedpVwc5%U$6I;8I-Uqqp7R+R0I$(y z{HYmPRo4*o5vQ^#IeFcN6>X-6j?>){$~z)8^^QmNxuEFp|r4?`V{3BHOO(p=mBpB7)^*x;qSnsyM^~#7AhZgUDsE>M=0AR^9LtQJIayTidnJI%3X~VW}SH4n%eHt1DHTaDe{_p&U zWpf6u4+)aoYKnKoER>QmWy<3)_X4S@V!fmho;fqNi>`vLyCd2YD_zPBkJPmQOPiGx z3TS<9u*$+Ab1vOZ+j$JAap;Bf=QoGizdtstPwtbJ3Mv(b{xw$2a&Ty5Vv^ayYw^vm zOR}FVJ38>&>QQF7?=tEpIYG=f##T3N`t&)Nwz{@jNk2dNF_@6=G;0N~vac-~BXaIS zQ*84eJ~VbB%GIj;J%N^5sUVEnpI5~f`4yM^!_3VeJ7~E~y1bQKivz&(I(rVdVnynb zN}!~xM_Rr0aE#WT73AUDI(_^#G(A1tZ(8}@pQ~@3_&!wo#*@Xve-2W6F4x8MQhD1u z8U3F>{4cx-2hUkViwVAh!-e)yKYLJ zV`!#)#Bi659)>U)jg8oZDSEy7=K}sq8;rrdBjq;%su~s%|Ab8q_Y`!BUQrx}Cq8zl z1OjZ{zWq*!lc(Vq3bk@Smv#p0!lh_P%B|_8HLm`46VXnynx6sN30w0|yLRty=~Wyj zONsf&s{sA4LFT+L;G z>UGWC3M?dQR`8v-J5f%vhv1k54UtIn!oo|_=0BZ)whJxy(yFgc)|b|_!GcBrbUhlc zI>hmR{r=sSb_8F+eXDd4*->9m$q^A5_~21kPxU(da1nHY1NhsaSMb6GNVV6P2Q5yF z)2Fp%%rxbd@7G074I}H0_|%p#z}=Mi$KYvI6+xpRHN~)#g2kZ=<=To|2;D9qy;>K1 z#-I3)7C`=;;DZ&u-kzQ$LS(J(uBC4IcvI)FLWLX z?T!Fb-LMGMRS>n-2_=&uxf{?(zCOEl?NX)w&Wn43tWX)G{%)IrLx;|&dUx$_30q(| zgIVO4z7?pLG%$*3IX<~G<5l%q+`M1Q&)p_MY2S#bj}reTQpE_<#R#Upe*G#5!l7@>!_1mf?W5KXl+Y0^BYeP6HW`0Cj+b*6_$L>+~(zTV7nMLXpuZ~^!` z+Adde;4yN9ghgFSEHyFED zUg;2*j^+>ks)AMBUR*pk>B}JUvU*rX8={9)9<;Xb#M`#VW8 zpZunh^HlsJ+kx5~hHjU6KqHLP&@ctP;faOBSTjOrL3WTw+C}OKRRY8J_{=;v&)cTr z3jqD6b(Jz2_T{EPC%+md$#vtw2E9Zobjn%RpRZe8T| z_4=y!mPtNjhn$&eVdEU|UB-ZYMJFpis`1);o^a?h$S9aRKOfbBk%7U+^I0IUpMJi{ ztvuRt&tMm?z{z&dj9)P_*HZA*Q@EP*zD*l9zD5tb3vBWAjAS&bVv|C{lbQRA-~Sc6 zu0p}?b&ZeG-|-j|+pvI%pfI`;!gZ;W(+H}oJqHeKhdUD^AIUY7+pvC*3|`Twu&^+C zF$0fw!KW@*ERhhs7~Dccz~3rbW_MQ4tW@7ToDK?|OHS=f7`~PQR1zMw{nwA=U;C1# z@*vFsL?jNAx7;qW|Dp#1t#q7DEZ|1b;VrBg8cU_SdH%=s$bN2`M<^lLcWWEh_dwxl%>TKq5j znAVSkyLRk=2l~$6nU*JGVSq4_O7Fe|dlBYu{o~~KbVc?(1|n4F@)Xw#{8$Uh3X#Y{ zb(k!y=Jgi;Xj6w%0wFDWupUEhXi_c|Qx&wHVm;fZ(A0C<37n7Gdu|ync|wlspx`tM zGZWVN;<{g#9zC&!kXu@MU(?dhkoW=C_2@ZgkQ9q`jxr4k+{CEm?G4tzQ{Nk-LXm$A>}wza6d*->%#_=vx7ZmWCSfjp$_ zRv(G5_Mq8Mfa59Jr(S1lIXN1NGX>?3@=(1?JXFgjD1v*>y{;4`86C5()V_Tg!8nud=H;07xR-reUNZJ2rWko^41^JTJ%(nT;CT;{M zVP}USLkDm!m1ZIZhf7bH2$Ty3n02TK!ej6kw2QAD-h&9rNQhKuuT&1~Mr)qP3|o+o z6agbR3cH-nL@3T=q~LcQ#;U(U?f{&#>DGi~)GA`>t($hgBqNo9u_05}fo>QgI+|NX zyMgK-#b> z+4E@G+h*1y6TV%@EyB>Ip5#Q$UKp>tfdXrWmY51S&rF}{;~Oz<^@D80XpFFpp~poM zZ<@T;-Tzk*fP$Q$h9Jiq-mfqnx?mM$5{SrVtApGd%y@IpZ1AHK(nIV;imUc^3)$TGe)1>2JW`0-x+{QD{$e4P1 z>UbhuZEmkLIhXju+-%q}ZnH}0gpu|px{wb6zSg4FU^d_sMmEe?#PJEEF^);PMsH^Q zg2WpkIwsM?L(euQbl3fW%Z2y zakR}_g*(aBUFF(vI5$2OEITZ3Nr)~Bz^{7f!olC1tG};!R#X)DS#1F7(D2HaBr2j@ zG`0iQIiBZHzmqKwaL1(^TS}W=L>g81XhVRugQ$oi&X4!eGN1cPgU&rT4^p;Yu262F zM0$E-cM2%{krO#{n0-DrxD1;q<8{%Eb_yT1^6e4Y@dF@68*|rX8^txOV%{Jcif~m7LK;Ift8nzkthO<=yTz zatcFK*K_kj3U7ZRGGa^_!;AxBjsm@#yxTOlaiiL$Sr3CZd1& zN;X}iM5lr~hcC0G_gI{dF~{GI8r81;ItZUT+7j5 zx4)EnYZ)B4?O@>6WD6y#j3wYE~$N++@bg(=162O*J@~%ybpE2eeJEJy;l`n**>Q4tvloG zc9v%CqQYrCY;B@VK6*x(K%f1Ak|U^udUnszVQZ_VJ^vgwaKHd2+E;w8JsfT~s0329 z|APERDq6G9$caFc9>Dvy{*Q6bA2(uYTpjpi&0oyUlYxaC#s+Nlxo#cw*JupAt(G~{ zLd~p16(&3H^qa63v@Xrn)EX;7tmFCsUh*lZ@%j!Z zB*e#K=gxY&SAPtPjEpRNUzvjlJ!V?khp+GFAfqwP3>)aW@FT_Ib9SBV#|lCTq@TKV zcyEkp_1envhf@~Dai*W3p2?2Z|9Ij)5G@&l5$D%%RK)b*vl+nX*HXara7Tu4L^g#! zy&pc^B62iZ*r4x}95KFqmpg9bVLhz444WE|=OX&YehYS=UxP~Nb)0_k?DbA-(`l&A zl7$ZiEQ$p3=mNTkw9&DZMYX^7%_Ro{ zk_!x%Xwfgcq+c+(%{koUdwRt8+r(l_b^{1r@j9+_*dlY+6IT>*Ehn}iQER-LBdKwB zV#7)ixbpgRrfZ;IqT(GI^p}IV$YHq>Q@&M*EAYxG+7b>qbmj8pJ$l7Dw1LE$qI1ga zY=ICEvA3t3o~omX!FosT=g@9FzKy;Ntl&FpL#XMAt>x>dYKFD+wr@K$v`gsDJ7!U~ zMp$LaVrFoVI(;ZMe*NPp!UxnRtwmQ|7zM>G-LYal#_#e9la@ItIX7+?N46F){AhY= zYG~5iXU{f3S;{<8M7s492-2?JyVsI1)4STEoJ^}1f$2@+@JqU2Ufp!c`1a;cp2Jtz z4~;thUGL=ggrHr4KX;1sn7@>HL#XoJCI70P=yJ9D#KM%d)H|CXdxgV)Um;`JvOgAm z=f^zyu&a}i;i1qDK1x2$Vf7dDT>37Up7SB>*MY&vU}$w}UvKB@Lc`}U|BBgdH+!|P zscJclc5}GjYr*vKEQY%f-y*Mocugx-6#ZLcg){ui_Lz*Rernby3UIQ#`b^ z%rP`k%jrWL&F;mKe+ zZD*8ta48b{{T>FhZB?NLffL4VZ%a$9p8hy7wsKs2X~Wvo;j9AkrvBlzdq51Vkn6EY zcwS|TR>URGsXHUaEV#I08YgEjGE1SZYHT&!B=J*Ap%S<5SG6h&K|%;*NDDb9GY1C* zeQyT|rqOHO&nLayLw;^m>6bsS`3sI_wy!qxN3JWU&FeALV(6I4FJIEpV5x7u47uh_ z{%}2Nvx2+eC&(-7^xO8mUwrwL!!T$M-oiM4tWBA(*$#g9e{#ur+gL}?+ z{{F_!43C&QcdlahG2@#g#7*Fdtv{TelVd)1k&shRqOVnEb^z>?HJze!EID%$ z1#$4V3AoobaYCK0PLdv$CXh%c{K`a_<*lmho6JRxvG@z2#4fHV|F}z;WPOO8fUmsD z_sKgzrvIp^-2mvtxk_4RP;nss6JW1vw42Rawc5&+gd4BMe+$~7tAoLKN@Q%PulB1( z|L|NdXlN}ni_|Z!e3s|ukoQkc-^>-I_ph*b1-}5on8haJkdM?wZTQ<^G9P`xo4|c2 z?&`Bp{hC!F6uU#3=%z=Dwi8f*-BZE#$|<$!eu;IUSxkQVvlx+Kz$a@9Kdqd%y$^NU`0>jZzoWO047ztbLO-78 z96$w&Afev+$J#1kQCeV-LE1C7n6h=g9zGO_5Q>m`d3#oN)u_<&QL4?}e^p9>WqO<{ znoc(lub*W9D89eL99!Fs5aXg10tczJ{_$x&N&CHU;X+~k!(%6nAJUXfuR80-x{4gY zj7g!ByDH)eM(Ztq)v;`F-QxDwOA7LwK}N?BG+L4~yyKUZA9+iCyA3QSQ5i^}iNghb z{;wBJB!be;tY=DYt#{|L5U4*j!!NFsuhCk(a6fR^+zr_l;dlyxJ(lgv_f{5!OJxS1<>2{5;?|-{@Zu%+{%Wl z|Ep>l2D0G;PA?_3kFi!>^vkxuEZN_Akgp2zE@;pRiZ5SU{ELJ;h_kL$9+J}meZSIR zZUof2k%7N^4&i(vN>Yp&czd*=;Vb|itCl<1BOf+RL5N&OfvJ6@)djG++JC==Vv($m zhvnH}1IL$~a%&lN(ou~qICME1{Ar8U|1RzLXC$-#n>*c5Qj4A+k(LOA?W?J1&wQ?) zoa7qYWp86p7fnsF5;Q(7%7Nb&YG<#hdL79J;wP0oo=|!G?C~y%U@YQ*K=u~Aa;4hh zFKWsuH*PePC@8)%SbGM&l>zs>*OI~^uj|e3%89DwoGq3exb6g2qA zLc${-A)21)*R=V;FH4=BTM*RV0z9y}ptXeHI7qUS5!!M?aFhPAF#tQA`u8{2nKxqO zT`iRCBL^IgRf=o5B(&MH3Vp6o&0IqHnih|=$>P(zp=9(Pvcj>9TwvTvjX9oZN4ET zHK8I>(97h^^Q-S%(v&>leNA0Yf1j4*7GssTaciLY*fnbsA06oit>ZBAv9Gqp1eAf( z5`Vl+h>jbCP+G>p&%KuUC_mqez$8x@Sp=LXE*cq^VPAA7FElkvKW z?Eng|&A(6z&E0ooDDU!|IIJ|+yX8zNx{I`T&;I>Ey={!Usy+&tu;|pA+4yHU+cY*` z_iublt?)JYf{@Lgl(r9_l3NoT46bt)hI zVnNyuIbOiYl-u{jq4w~L!j+WhizFQiN>D6X|IM|(e4__1BJ+Gw@#V}%kF3^wemH;d z--WcW(r4aJV{~q-2cz8mIdacf#f+7IP~?tibq-8!vRLju1{KYN6n5e#Ll z&4tz@+kao~l|fJH@02r89onTi;zlLeAPQX1SGOcQu?5*?&9Mh4A?dH1rqT4q7Nxkp zE}c3$*RsRb)PZVMYA0_q3Gl3>qdvr>2w$FAzRJwv~xdXtO$c7*JpD@)_W4zgniVp6vmle=!d z44y3!ha}2LEF8}Uys0(^ttrAg?%|c(+^Mf$`dM)s$RWEToi!mU0-@9U6WMG|}D_i9KTsw&CWl8Jbb4AkyHK|z<9B+U?j>~SwZ5^#!c z3tVQd?3Y;KaFo{mb@jtndw1{d*wlpy9UHjSDsdCsnN~V^K=c$24CP;kP4I++W}S8a z;bQNfkgz&nNtHzgeMgY`K{6EQwrp6cOIT{`+_T<>EEI?^ZXoyDo>iTEA^g)wV*7`Hp!kVnya*DsZ}PgFo0m##$k~ z2%oX8Lagk16^T_214@fbnE4YO|=fz<-eX zp-i(EAk!e&((9$J;rzbks%s_`4c<);j%(wV_a1WcNy-kiw2H&$IXSoEkGpn4Az4GP z)9{CUwq#^T9)WK+o_PRJ)c<9o)pe$BATA zaq)W>RVm@nw+()t8#-mQ^!ODQ4PNoNI%@9hX zO_Z5sJ-)DAiDd$Z_U`xqmCQ}h*iY*?djkd=s@%r2$y8P<&!F7Rj>QYYU3zJP?-Kt5IW(572raF+`G63gms27;>3)Q2YYnhzHWyDZW_ zsTKy$!;PX}{b`B-6=f`GneGO8eHn%DRDC*WqAFA*0g6M%AU*4J86(nsvYJ65Y^1me z;BMelnVb&*-yi3--5dc^K~LuL~QxqBo`dzsQf!4sTku#*(c=r!};?a9e2_!iv7mni<{ltxwFVzKhV#9 z@2$-jIvO;PZNm2sN&>FADJNL&S4+VER@fSclaCefytbrA%SU`|Gq~dyJ%JbH0~Qp_ z2oI-X7)hC;GJdYdm@Q5{k0|-{aPe|Gmte%@j-UDxNmC0vZwY6{p)FuXnN&9FKAbHm z_33j>XKpC8?awQ0-lI{8Ue;x^dn4Fy-tG8ghC?0GSc zj^MXGKE~t5DNB=r(qZeFGZdxF2siYT!HhCuk@%}%LN_ftWPuPs z-1`1bD^_?}0b`uGgpTWUL7o$dCcSZaAfi&&MyTD3sQK{z5fP52;$F{rQC{9d*CtV; zh6`jqbm!Ge6au9vuUfZ{uMtG|%q8A2FW$w>43?|cl1tx4am=?A5Gxk)del0mzcMy2ND=oE7~59sxxQsIM=V=fI?_p{1YZ}q9r z!xEspgUUnIWJo~z!90p4liN79WV}U8-^08pX}t1xU~&Wjqn`guA&F;rb+5q7)&dLK z^a!Jg(ZjV87z$ps-zSP>Opc}Z=-`VuIIdxT;*^zC(JL6l`7a}X{j6^4c{)CsTH)f- zXSHPm*PenikX^oh2lr3SMF2Er#&$vOIIN!Y<~!uKZc7iJAzzNb&CU)kdMib>u$rP; zS{^$L?H%Q<%v?mzhOM*eJ!m2ZupQjL%nY1z&v~_s5QmA)k$Y2r_}eFQ3(Zf^YPMBo z6R3_p-Jgq_qNbTeBqHn6h%?|UA^_Aob!wdDAiVz!a<0Qx)n7xmzu2t^HNKGHKMH%${^8HRJ3RzwxuGChDlSm{A za#hrV_0qd_(%Io(pcE>D9d4<8*uN&kCJsr6kwSv?8`*ra&8aqxccv|y4i~4A4 zT3+mtdVOGqUz?Vi1vfiwYgruq@@jDK#)BK1^&h9)Kut+$Nb;};?rTe)x<4=cE55RN z(V{O$R^R&O{5I~D>#dIi97-I*U)s`cf2b}mU$pH>I?1C^s4a4wNT@cNGv`Fko5eZS zXQp465WyKA{feB%12d*f>HIdXq0WK0noAbse-|}?aDq;a& z{NR*s_L03kMYI!x9r4969M?C8I@D3lslG)@ z=j$FF=Wg$Ol_Y;<*-M^pW7a@Nt8ygQ`vG(P!AdyLYr_VM>y#+laING^T@Em~WZ zJTEtwx@pz0)@LmpX+QtW2-$PmiXkoFa#zEQq`GPAt%ul~k^;ZP96#AD5G`F*hRK)!F{z*J^6qI)@f+jqXG@)O(M$ne^{HY^>@Wi}uSKjt`^2DVzLlvlxa= zeC{hTl+o)EibTx;=2m0MdmTFch7wZeHNic1x70-+&5RkmGZ3Rj2w|3N2#0^dzlOSi z{oGgV9JrP9nJto{12@Axq(ptA1!@~%gr~eSI+pd__U-VJ%iK|psY1J(47T4BCcYdy zLPKwkZX4SljyR8W2qa2o7OL26ACXFV5-!(zmAXnwk+jFKbX+F zD(S$HCkq2A3kpcyat0rExu2dMbzm@R+};`2Bqk(mLIqGVBX}K2EYq02Nx1mH(G)!% z?|kp@u=$gIKa;(|3#iyFyqcI0{iSbU@FZjclk;I2bX^^c{1Y!1=Z)NKS5e7-9Gt_> z$av`<<>yye%n{918cdrM{VP~55Q~GSw{6VY9B30;6GoCE!R_%Lh{P`R3&)~ma=Cm% zF3KyF8nMZ-?j#Ko5x;-`)6^rQk=7)V8;cTpKV}$I^PFyxNE#7;q%J+ZtFn3l;bxK< z+95l*xYSh=TM8Y+6iZudKcLsgn0X<@TuLe_W>}IxMkDOBB^nYwlG;s3qDs|`X+`V9 z`a6U&IoUhUs>8KoBUD18+s9A1B#Zo*o?rBfQT1D}3ycaVwQClo6X}LC$Pj>(2 zw3g*C@K7mHJEgYWb8X)M3kQ>{;1JCvK8r=}(8a9t;r@^bx$o^x5xj5q2MK`?@rHw9 zu;^Zu=9t0=G_d)kKEnnO0-O`1xT1SQ+l*VXrGJhRd#mL;y38#R^WpEAl`vwAg77_CkPi0DQiTpCeMS27k*QH&DjorLb~t$oh%kIE2U z>dv$zHExl?F}v89n9DJ)rAfeNpe*N0kYdPkr~lMctjr5kzjVRbF>z{oZ5qQKySt9wUnRvK5()fCslVH$!gXhoktYrwHXW|M{zm3e%E2!=>^jRh@Onkuv=N zROF`BX)R@j8?JshJd`kD0A3{7aPW(mnUkoPF)}?DQ}O8N;IJ3+lXu^@gFm%TlVY`e z?b?dfQu=NC5!7wI_wA4j#BbdN%Q9pi8)!i$+f$#9YLuC1;KI7Q%_d^!&P6!kFen=4 zVrdCaY~Sb%g?$X5a@;nC=_gOxUO72)u>PGvmzX_9ww!2GU74lnXV22_=6lYfzXweD z);$p}gcGCJOG4{9dPXP+Th6!O8U{2li$CEb1HkGkmrD_S-&>^h=WA5# zQF)(R9X^`B#tRzOVI~Kyyqk9SI1AW+f@P{#JTl1|iGy+&VV~TKZ1e}{L*jb11!r~+ z)pb^X8?fW#$p!-h0}U_)US{sK`*-aNsWdPLblrm7o59zZOy>3KThK9uh#?ZZzyWrB z!5*T6@|Tm=MD6~v{@OJMi|eaHov(tGjKOkN z9~of0$M-UP1VIdE(Cc_zymi@O?;`oN%P|c;xP#QQ`?|Z=O*Fjq@u;9Lw_UHIudBXj z(Jzxh0ReZ}#-}wfJ}rAunE486w!rwteQ49qfA%FTa_$%%U#~7#)Ng}rcy=B(9E&zw zvMa3F=QCd|TZZc>OiV8GX(regqJsC1?*C8TfPw1veU$rgoVc^)g4ejy>p6W(7eYo> z*dz0Bxg9DD#Aejp!wuGlRMoX79+bbwCP51XNFoK9?ds0G0f{73{okAR2!+?@GB`w< zyeY4PpeLqlm6erC>z>NwPx$;y?KTwW>rO|!GklM3Ng36vmH)-+I)SdS@$U11#dvb) z`arI@L&vHH&yJvUGg?Nuw+yrDf~!}*yFVxv8|r@p0=-NTRMqv-sT-V-L?Z6s>{eF$AJWa?+TsnB q#K&oNE)~Tnd2DHF{=fZ0f7&z5?l1iOuj+CoJa+Ba<52M(HQ^uc9HR9A diff --git a/ath9k_htc/docs/atheros_ar9271.png b/ath9k_htc/docs/atheros_ar9271.png deleted file mode 100755 index 94006c4907d82abd191b8d0103e1dcf351006c3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81020 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

*$!_e0Xfi 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 N#_r#Dsec, sec_cache->relocs); - if (sec_cache->ptbl) - free (sec_cache->ptbl); -- memset (sec_cache, 0, sizeof (sec_cache)); -+ memset (sec_cache, 0, sizeof (*sec_cache)); - } - } - -@@ -6117,7 +6117,7 @@ - - /* Fill in the new section cache. */ - clear_section_cache (sec_cache); -- memset (sec_cache, 0, sizeof (sec_cache)); -+ memset (sec_cache, 0, sizeof (*sec_cache)); - - sec_cache->sec = sec; - sec_cache->contents = contents; diff --git a/ath9k_htc/local/patches/binutils.patch b/ath9k_htc/local/patches/binutils.patch index 9a8ec65..8246771 100644 --- a/ath9k_htc/local/patches/binutils.patch +++ b/ath9k_htc/local/patches/binutils.patch @@ -28869,16 +28869,6 @@ diff --git a/include/xtensa-config.h b/include/xtensa-config.h index 30f4f41..fe9b051 100644 --- a/include/xtensa-config.h +++ b/include/xtensa-config.h -@@ -1,7 +1,7 @@ - /* Xtensa configuration settings. -- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 -+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. -- Contributed by Bob Wilson (bob.wilson@acm.org) at Tensilica. -+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. - - 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 @@ -44,10 +44,7 @@ #define XCHAL_HAVE_L32R 1 diff --git a/ath9k_htc/local/patches/gcc-6.3.0_fixup.patch b/ath9k_htc/local/patches/gcc-6.3.0_fixup.patch new file mode 100644 index 0000000..681c0ee --- /dev/null +++ b/ath9k_htc/local/patches/gcc-6.3.0_fixup.patch @@ -0,0 +1,49 @@ +diff --git a/gcc/config/xtensa/xtensa.c b/gcc/config/xtensa/xtensa.c +index 015dd1049fb..df80ad9117e 100644 +--- a/gcc/config/xtensa/xtensa.c ++++ b/gcc/config/xtensa/xtensa.c +@@ -1780,7 +1780,8 @@ xtensa_emit_call (int callop, rtx *operands) + rtx tgt = operands[callop]; + + if (GET_CODE (tgt) == CONST_INT) +- sprintf (result, "call%d\t0x%lx", WINDOW_SIZE, INTVAL (tgt)); ++ sprintf (result, "call%d\t" HOST_WIDE_INT_PRINT_HEX, ++ WINDOW_SIZE, INTVAL (tgt)); + else if (register_operand (tgt, VOIDmode)) + sprintf (result, "callx%d\t%%%d", WINDOW_SIZE, callop); + else +@@ -2351,14 +2352,14 @@ print_operand (FILE *file, rtx x, int letter) + + case 'L': + if (GET_CODE (x) == CONST_INT) +- fprintf (file, "%ld", (32 - INTVAL (x)) & 0x1f); ++ fprintf (file, HOST_WIDE_INT_PRINT_DEC, (32 - INTVAL (x)) & 0x1f); + else + output_operand_lossage ("invalid %%L value"); + break; + + case 'R': + if (GET_CODE (x) == CONST_INT) +- fprintf (file, "%ld", INTVAL (x) & 0x1f); ++ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x) & 0x1f); + else + output_operand_lossage ("invalid %%R value"); + break; +@@ -2372,7 +2373,7 @@ print_operand (FILE *file, rtx x, int letter) + + case 'd': + if (GET_CODE (x) == CONST_INT) +- fprintf (file, "%ld", INTVAL (x)); ++ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); + else + output_operand_lossage ("invalid %%d value"); + break; +@@ -2437,7 +2438,7 @@ print_operand (FILE *file, rtx x, int letter) + else if (GET_CODE (x) == MEM) + output_address (GET_MODE (x), XEXP (x, 0)); + else if (GET_CODE (x) == CONST_INT) +- fprintf (file, "%ld", INTVAL (x)); ++ fprintf (file, HOST_WIDE_INT_PRINT_DEC, INTVAL (x)); + else + output_addr_const (file, x); + } diff --git a/ath9k_htc/local/patches/gcc.patch b/ath9k_htc/local/patches/gcc.patch index 9f43902..b26cc56 100644 --- a/ath9k_htc/local/patches/gcc.patch +++ b/ath9k_htc/local/patches/gcc.patch @@ -1,28 +1,8 @@ -From c7162b8a3db42e7faf47606d3aa3dd61e64aea17 Mon Sep 17 00:00:00 2001 -From: Sujith Manoharan -Date: Mon, 7 Jan 2013 16:06:28 +0530 -Subject: [PATCH] gcc: AR9271/AR7010 config - -Signed-off-by: Sujith Manoharan ---- - include/xtensa-config.h | 36 +++++++++++++++++------------------- - 1 file changed, 17 insertions(+), 19 deletions(-) - diff --git a/include/xtensa-config.h b/include/xtensa-config.h -index 30f4f41..fe9b051 100644 +index 5ae4c80..8397564 100644 --- a/include/xtensa-config.h +++ b/include/xtensa-config.h -@@ -1,7 +1,7 @@ - /* Xtensa configuration settings. -- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010 -+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 - Free Software Foundation, Inc. -- Contributed by Bob Wilson (bob.wilson@acm.org) at Tensilica. -+ Contributed by Bob Wilson (bwilson@tensilica.com) at Tensilica. - - 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 -@@ -44,10 +44,7 @@ +@@ -43,10 +43,7 @@ #define XCHAL_HAVE_L32R 1 #undef XSHAL_USE_ABSOLUTE_LITERALS @@ -34,7 +14,7 @@ index 30f4f41..fe9b051 100644 #undef XCHAL_HAVE_MAC16 #define XCHAL_HAVE_MAC16 0 -@@ -59,10 +56,10 @@ +@@ -58,10 +55,10 @@ #define XCHAL_HAVE_MUL32 1 #undef XCHAL_HAVE_MUL32_HIGH @@ -47,7 +27,7 @@ index 30f4f41..fe9b051 100644 #undef XCHAL_HAVE_NSA #define XCHAL_HAVE_NSA 1 -@@ -103,8 +100,6 @@ +@@ -102,8 +99,6 @@ #undef XCHAL_HAVE_FP_RSQRT #define XCHAL_HAVE_FP_RSQRT 0 @@ -56,7 +36,7 @@ index 30f4f41..fe9b051 100644 #undef XCHAL_HAVE_WINDOWED #define XCHAL_HAVE_WINDOWED 1 -@@ -119,32 +114,32 @@ +@@ -118,32 +113,32 @@ #undef XCHAL_ICACHE_SIZE @@ -97,7 +77,7 @@ index 30f4f41..fe9b051 100644 #undef XCHAL_HAVE_DEBUG -@@ -157,8 +152,11 @@ +@@ -156,8 +151,11 @@ #define XCHAL_NUM_DBREAK 2 #undef XCHAL_DEBUGLEVEL @@ -110,6 +90,3 @@ index 30f4f41..fe9b051 100644 #undef XCHAL_MAX_INSTRUCTION_SIZE #define XCHAL_MAX_INSTRUCTION_SIZE 3 --- -1.8.1 - diff --git a/ath9k_htc/target_firmware/CMakeLists.txt b/ath9k_htc/target_firmware/CMakeLists.txt index 56e486a..73cb930 100644 --- a/ath9k_htc/target_firmware/CMakeLists.txt +++ b/ath9k_htc/target_firmware/CMakeLists.txt @@ -1,10 +1,56 @@ +## + # Copyright (c) 2013 Qualcomm Atheros, Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted (subject to the limitations in the + # disclaimer below) 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 Qualcomm Atheros nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + # GRANTED BY THIS LICENSE. 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. + ## + SET(CMAKE_C_COMPILER_WORKS 1) CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(ath9k_firmware NONE) ENABLE_LANGUAGE(C) -ADD_DEFINITIONS(-g -Os -Wunused-label -Wunused-variable -Wunused-value -Wpointer-arith -Wundef -nostdlib -Wundef) +ADD_DEFINITIONS( + -g -Os + -Wunused-label + -Wunused-variable + -Wunused-value + -Wpointer-arith + -nostdlib + -Wundef + -Wunused-but-set-variable + -Wmaybe-uninitialized +) ADD_DEFINITIONS( -D_RAM_ -DBIG_ENDIAN -D_BYTE_ORDER=_BIG_ENDIAN @@ -77,6 +123,8 @@ ELSE() ENDIF() INCLUDE_DIRECTORIES( + ${CMAKE_SOURCE_DIR}/include + ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/ ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc/xtensa-elf ${CMAKE_SOURCE_DIR}/magpie_fw_dev/target/inc/${PLATFORM_NAME} @@ -99,6 +147,7 @@ ADD_CUSTOM_COMMAND( DEPENDS firmware COMMAND ${CMAKE_C_COMPILER} -nostdlib + -fno-lto -Wl,--start-group ${CMAKE_BINARY_DIR}/libfirmware.a -Wl,--end-group diff --git a/ath9k_htc/target_firmware/Makefile b/ath9k_htc/target_firmware/Makefile index d08e3cd..bfe0565 100644 --- a/ath9k_htc/target_firmware/Makefile +++ b/ath9k_htc/target_firmware/Makefile @@ -1,3 +1,39 @@ +## + # Copyright (c) 2013 Qualcomm Atheros, Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted (subject to the limitations in the + # disclaimer below) 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 Qualcomm Atheros nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + # GRANTED BY THIS LICENSE. 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. + ## + all: [ -d build ] || ./configure || { rm -rf build; false; } +$(MAKE) -C build/k2 diff --git a/ath9k_htc/target_firmware/configure b/ath9k_htc/target_firmware/configure index 38117cd..e2d4639 100755 --- a/ath9k_htc/target_firmware/configure +++ b/ath9k_htc/target_firmware/configure @@ -1,25 +1,58 @@ #!/bin/sh -TOOLCHAIN=$PWD/../toolchain/inst +## + # Copyright (c) 2013 Qualcomm Atheros, Inc. + # + # All rights reserved. + # + # Redistribution and use in source and binary forms, with or without + # modification, are permitted (subject to the limitations in the + # disclaimer below) 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 Qualcomm Atheros nor the names of its + # contributors may be used to endorse or promote products derived + # from this software without specific prior written permission. + # + # NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + # GRANTED BY THIS LICENSE. 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. + ## + TARGET=xtensa-elf -PREFIX="$TOOLCHAIN/bin/$TARGET-" -TOOLCHAIN_FILE=$PWD/build/toolchain.cmake + +[ -z "$CROSS_COMPILE" ] && + CROSS_COMPILE="$PWD/../toolchain/inst/bin/$TARGET-" + +TOOLCHAIN_FILE="$PWD/build/toolchain.cmake" set -e rm -rf build mkdir -p build cat > "$TOOLCHAIN_FILE" < + * * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,59 +34,32 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __WDT_API_H__ -#define __WDT_API_H__ -/* - * - */ - -typedef enum { - WDT_ACTION_NO = 0, // bit1, bit0: 00 - WDT_ACTION_INTR, // bit1, bit0: 01 - WDT_ACTION_NMI, // bit1, bit0: 10 - WDT_ACTION_RESET, // bit1, bit0: 11 - - WDT_ACTION_UNKNOWN -}T_WDT_ACTION_TYPE; +#ifndef _ATH_ROM_H_ +#define _ATH_ROM_H_ -typedef enum { - WDT_TIMEOUT = 1, - WDT_ACTION, +#include +#include +#include - WDT_UNKNOWN -}T_WDT_CMD_TYPE; +int strcmp(const char *s1, const char *s2); -typedef struct { - uint32_t cmd; - union { - uint32_t timeout; - uint32_t action; - }; -}T_WDT_CMD; +LOCAL BOOLEAN bSet_configuration(void); +LOCAL void HTCControlSvcProcessMsg(HTC_ENDPOINT_ID EndpointID, + adf_nbuf_t hdr_buf, adf_nbuf_t pBuffers, void *arg); +LOCAL void HTCMsgRecvHandler(adf_nbuf_t hdr_buf, + adf_nbuf_t buffer, void *context); +void athos_indirection_table_install(void); -typedef enum{ - ENUM_WDT_BOOT = 1, - ENUM_COLD_BOOT, - ENUM_SUSP_BOOT, - - // add above here - ENUM_UNKNOWN_BOOT -}T_BOOT_TYPE; - - -/*!- interface of watchdog timer - * - */ -struct wdt_api { - void (* _wdt_init)(void); - void (* _wdt_enable)(void); - void (* _wdt_disable)(void); - void (* _wdt_set)(T_WDT_CMD); - void (* _wdt_task)(void); - void (* _wdt_reset)(void); - T_BOOT_TYPE (*_wdt_last_boot)(void); -}; -#endif /* __WDT_API_H__ */ +void HIFusb_DescTraceDump(void); +void _HIFusb_isr_handler(hif_handle_t); +void _HIFusb_start(hif_handle_t); +void mUsbEPinHighBandSet(uint8_t EPn, uint8_t dir, uint16_t size); +void mUsbEPMap(uint8_t EPn, uint8_t MAP); +void mUsbEPMxPtSzHigh(uint8_t EPn, uint8_t dir, uint16_t size); +void mUsbEPMxPtSzLow(uint8_t EPn, uint8_t dir, uint16_t size); +void mUsbFIFOConfig(uint8_t FIFOn, uint8_t cfg); +void mUsbFIFOMap(uint8_t FIFOn, uint8_t MAP); +#endif /* _ATH_ROM_H_ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf.c index 36bf86f..180a93e 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf.c @@ -39,7 +39,6 @@ * user,hence these routines should be called to manipulate * anything inside it. */ -#include #include #include "cmnos_api.h" #include @@ -52,22 +51,22 @@ VDESC * __adf_nbuf_last(VBUF *buf); // ############################################################################# /** - * + * * @brief allocate a new nbuf, - * + * * @param hdl (adf_net handle) * @param size (size of the new buf) * @param reserve (amount of space to reserve in the head) - * + * * @return newly allocated nbuf */ -__adf_nbuf_t -__adf_nbuf_alloc(adf_os_size_t size, a_uint32_t reserve, +__adf_nbuf_t +__adf_nbuf_alloc(adf_os_size_t size, a_uint32_t reserve, a_uint32_t align) { VBUF *buf = NULL; VDESC *desc; - + buf = VBUF_alloc_vbuf(); if ( buf != NULL ) { desc = VDESC_alloc_vdesc(); @@ -76,21 +75,21 @@ __adf_nbuf_alloc(adf_os_size_t size, a_uint32_t reserve, desc->next_desc = NULL; desc->data_offset = reserve; desc->data_size = 0; - desc->control = 0; - + desc->control = 0; + buf->desc_list = desc; - buf->buf_length = 0; + buf->buf_length = 0; } - + return buf; -} - +} + /** * @brief Free the nbuf * function to be called in * @param hdl * @param adf_nbuf - * + * */ void __adf_nbuf_free(__adf_nbuf_t buf) { @@ -100,13 +99,13 @@ void __adf_nbuf_free(__adf_nbuf_t buf) /** * @brief reallocate the head space, call it only after the you * have called headroom - * + * * @param adf_nbuf - * @param headroom - * + * @param headroom + * * @return new nbuf */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_realloc_headroom(__adf_nbuf_t buf, a_uint32_t headroom) { adf_os_assert(0); @@ -116,13 +115,13 @@ __adf_nbuf_realloc_headroom(__adf_nbuf_t buf, a_uint32_t headroom) /** * @brief expand the tailroom, mostly by adding the new tail * buffer, also take care of the priv - * + * * @param buf * @param tailroom - * + * * @return struct mbuf * (buffer with the new tailroom) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_realloc_tailroom(__adf_nbuf_t buf, a_uint32_t tailroom) { adf_os_assert(0); @@ -131,14 +130,14 @@ __adf_nbuf_realloc_tailroom(__adf_nbuf_t buf, a_uint32_t tailroom) /** * @brief expand the headroom or tailroom or both - * + * * @param buf * @param headroom ( 0 if no headroom expansion req) * @param tailroom ( 0 if no tailroom expansion req) - * + * * @return struct mbuf* (NULL if something goofed up) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_expand(__adf_nbuf_t buf, a_uint32_t headroom, a_uint32_t tailroom) { adf_os_assert(0); @@ -147,19 +146,19 @@ __adf_nbuf_expand(__adf_nbuf_t buf, a_uint32_t headroom, a_uint32_t tailroom) /** * @brief put data in the head - * + * * @param buf * @param len (how much data to put) - * + * * @return new data pointer ,NULL if the len is more than the * space available in the head frag. */ -a_uint8_t * +a_uint8_t * __adf_nbuf_push_head(__adf_nbuf_t buf, adf_os_size_t len) { - a_uint8_t *ptr = NULL; + a_uint8_t *ptr = NULL; VDESC *desc = buf->desc_list; - + desc->data_offset -= len; desc->data_size += len; buf->buf_length += len; @@ -168,12 +167,12 @@ __adf_nbuf_push_head(__adf_nbuf_t buf, adf_os_size_t len) } /** - * + * * @brief add data in the end of tail - * + * * @param buf * @param len (how much data to put) - * + * * @return previous tail (data+len),NULL if the len is more than * space available */ @@ -182,79 +181,79 @@ __adf_nbuf_put_tail(__adf_nbuf_t buf, adf_os_size_t len) { a_uint8_t *tail = NULL; VDESC *last_desc = __adf_nbuf_last(buf); - + tail = last_desc->buf_addr + last_desc->data_offset + last_desc->data_size; last_desc->data_size += len; buf->buf_length += len; - + return tail; } /** * @brief strip data from head - * + * * @param adf_nbuf * @param len (how much data to rip) - * + * * @return new data pointer */ -a_uint8_t * +a_uint8_t * __adf_nbuf_pull_head(__adf_nbuf_t buf, adf_os_size_t len) { a_uint8_t *ptr = NULL; VDESC *desc = buf->desc_list; - + desc->data_offset += len; desc->data_size -= len; buf->buf_length -= len; ptr = desc->buf_addr + desc->data_offset; - + return ptr; } /** * @brief strip data from tail, priv safe - * + * * @param buf * @param len (how much to strip down) - * + * */ -void +void __adf_nbuf_trim_tail(__adf_nbuf_t buf, adf_os_size_t len) { VDESC *last_desc = __adf_nbuf_last(buf); - + adf_os_assert(buf != NULL); last_desc->data_size -= len; buf->buf_length -= len; - + //adf_os_assert(0); //0820 } /** * @brief Copy assumes that we create a writeable copy of the * nbuf which is equivalent in FreeBSD as duping the * mbuf. - * + * * @param src - * + * * @return struct mbuf * (newly allocated buffer) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_copy(__adf_nbuf_t src) { - __adf_nbuf_t buf = NULL; + __adf_nbuf_t buf = NULL; adf_os_assert(src != NULL); - + return buf; } /** * @brief make the writable copy of the nbuf - * + * * @param adf_nbuf - * + * * @return new nbuf */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_unshare(__adf_nbuf_t src) { __adf_nbuf_t buf = NULL; @@ -267,32 +266,32 @@ __adf_nbuf_unshare(__adf_nbuf_t src) /** * @brief return the frag data & len, where frag no. is * specified by the index - * + * * @param[in] buf * @param[out] sg (scatter/gather list of all the frags) - * + * */ -void +void __adf_nbuf_frag_info(__adf_nbuf_t buf, adf_os_sglist_t *sg) { VDESC *desc = buf->desc_list; int count = 0; - + while( desc != NULL ) { sg->sg_segs[count].vaddr = desc->buf_addr + desc->data_offset; sg->sg_segs[count].len = desc->data_size; - - count++; + + count++; desc = desc->next_desc; } - + sg->nsegs = count; } /** * @brief retrieve the priv space pointer from nbuf - * + * * @param buf (nbuf to attach the priv space) - * + * * @return uint8_t* ( pointer to the data ) */ a_uint8_t * @@ -304,15 +303,15 @@ __adf_nbuf_get_priv(__adf_nbuf_t buf) } /** - * + * * @brief append the nbuf to the queue - * + * * @param adf_qhead * @param adf_nbuf - * + * */ -void -__adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, +void +__adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, __adf_nbuf_t buf) { qhead->qlen++; @@ -330,12 +329,12 @@ __adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, /** * @brief dequeue an nbuf - * + * * @param adf_qhead - * + * * @return the nbuf */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_queue_remove(__adf_nbuf_qhead_t *qhead) { __adf_nbuf_t b0 = NULL; @@ -349,7 +348,7 @@ __adf_nbuf_queue_remove(__adf_nbuf_qhead_t *qhead) } else { qhead->head = qhead->head->next_buf; } - + b0->next_buf = NULL; } return b0; @@ -363,51 +362,51 @@ __adf_nbuf_queue_remove(__adf_nbuf_qhead_t *qhead) /** * @brief creates a streaming mapping (takes a pre allocated * global tag for 4K mbuf sizes) - * + * * @param hdl * @param max_sz * @param dmap - * + * * @return a_status_t */ -a_status_t +a_status_t __adf_nbuf_dmamap_create(__adf_os_device_t osdev, __adf_os_dma_map_t *dmap) { a_status_t retval = A_STATUS_OK; - + (*dmap) = A_ALLOCRAM(sizeof(struct __adf_dma_map)); if(*dmap == NULL) return A_STATUS_ENOMEM; - + (*dmap)->buf = NULL; return retval; } -a_status_t -__adf_nbuf_map(__adf_os_device_t osdev, __adf_os_dma_map_t bmap, +a_status_t +__adf_nbuf_map(__adf_os_device_t osdev, __adf_os_dma_map_t bmap, __adf_nbuf_t buf, adf_os_dma_dir_t dir) -{ +{ bmap->buf = buf; - + return A_STATUS_OK; } -void -__adf_nbuf_unmap(__adf_os_device_t osdev, __adf_os_dma_map_t bmap, +void +__adf_nbuf_unmap(__adf_os_device_t osdev, __adf_os_dma_map_t bmap, adf_os_dma_dir_t dir) { bmap->buf = NULL; - + return; } void -__adf_nbuf_dmamap_destroy(__adf_os_device_t osdev, +__adf_nbuf_dmamap_destroy(__adf_os_device_t osdev, __adf_os_dma_map_t dmap) { //dmap->buf = NULL; - + // Should not be called in FW! //return A_STATUS_OK; } @@ -415,26 +414,26 @@ __adf_nbuf_dmamap_destroy(__adf_os_device_t osdev, /** - * @brief return the dma map info - * + * @brief return the dma map info + * * @param[in] bmap * @param[out] sg (map_info ptr) */ -void +void __adf_nbuf_dmamap_info(__adf_os_dma_map_t bmap, adf_os_dmamap_info_t *sg) { VDESC *desc = bmap->buf->desc_list; int count = 0; - + while( desc != NULL ) { sg->dma_segs[count].paddr = (adf_os_dma_addr_t)(desc->buf_addr + desc->data_offset); sg->dma_segs[count].len = desc->data_size; - - count++; + + count++; desc = desc->next_desc; } - - sg->nsegs = count; + + sg->nsegs = count; } /** @@ -445,18 +444,18 @@ __adf_nbuf_dmamap_info(__adf_os_dma_map_t bmap, adf_os_dmamap_info_t *sg) /** * @brief sets the cksum type & value for nbuf * XXX: not fully implemented - * + * * @param buf * @param cksum */ -void +void __adf_nbuf_set_rx_cksum(__adf_nbuf_t buf, adf_nbuf_rx_cksum_t *cksum) { } -a_status_t -__adf_nbuf_get_vlan_info(adf_net_handle_t hdl, __adf_nbuf_t buf, +a_status_t +__adf_nbuf_get_vlan_info(adf_net_handle_t hdl, __adf_nbuf_t buf, adf_net_vlanhdr_t *vlan) { return A_STATUS_OK; @@ -504,7 +503,7 @@ __adf_nbuf_create_frm_frag(__adf_nbuf_queue_t *qhead) } if (cnt != len) { - //adf_os_print("cnt: %x, len: %x, __adf_nbuf_queue_len: %x\n", cnt, len, + //adf_os_print("cnt: %x, len: %x, __adf_nbuf_queue_len: %x\n", cnt, len, // __adf_nbuf_queue_len(qhead)); adf_os_assert(0); } @@ -547,36 +546,36 @@ __adf_nbuf_split_to_frag(__adf_nbuf_t buf, __adf_nbuf_qhead_t *qhead) buf->desc_list = NULL; buf->buf_length = 0; VBUF_free_vbuf(buf); - + } /** * @brief return the last mbuf - * + * * @param m0 - * + * * @return struct mbuf* */ -VDESC * +VDESC * __adf_nbuf_last(VBUF *buf) { VDESC *desc = buf->desc_list; - + //for(; desc->next_desc != NULL; desc = desc->next_desc) // ; while(desc->next_desc != NULL) { desc = desc->next_desc; } - + return desc; } /** * @brief num bytes in the head - * + * * @param adf_nbuf - * + * * @return num of bytes available */ a_uint32_t @@ -589,45 +588,45 @@ __adf_nbuf_headroom(__adf_nbuf_t buf) /** * @brief num of bytes available in the tail excluding the priv * portion - * + * * @param adf_nbuf - * + * * @return num of bytes */ -a_uint32_t +a_uint32_t __adf_nbuf_tailroom(__adf_nbuf_t buf) { VDESC *last_desc = __adf_nbuf_last(buf); - + return last_desc->buf_size - last_desc->data_offset - last_desc->data_size; } /** * @brief get the entire packet length - * + * * @param adf_nbuf - * + * * @return total length of packet (sum of all frag lengths) - */ + */ a_uint32_t __adf_nbuf_len(__adf_nbuf_t buf) { - return buf->buf_length; + return buf->buf_length; } /** * @brief Clone the nbuf (will not create writeable copies) - * + * * @param adf_nbuf - * + * * @return Read-only copy of the nbuf (including clusters) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_clone(__adf_nbuf_t src) { __adf_nbuf_t buf = NULL; - + return buf; } @@ -641,9 +640,9 @@ __adf_nbuf_cat(__adf_nbuf_t dst, __adf_nbuf_t src) /* * @brief check if the mbuf is cloned or not - * + * * @param buf - * + * * @return a_bool_t */ a_bool_t @@ -655,19 +654,19 @@ __adf_nbuf_is_cloned(__adf_nbuf_t buf) * @brief This will return the header's addr & m_len */ void -__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, +__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, a_uint32_t *len) { VDESC *desc = buf->desc_list; - + *addr = desc->buf_addr + desc->data_offset; - *len = desc->data_size; + *len = desc->data_size; } /** * @brief init the queue * @param qhead */ -void +void __adf_nbuf_queue_init(__adf_nbuf_qhead_t *qhead) { qhead->qlen = 0; @@ -677,11 +676,11 @@ __adf_nbuf_queue_init(__adf_nbuf_qhead_t *qhead) /** * @brief return the length of queue * @param adf_qhead - * + * * @return length - * + * */ -a_uint32_t +a_uint32_t __adf_nbuf_queue_len(__adf_nbuf_qhead_t *qhead) { return qhead->qlen; @@ -689,34 +688,34 @@ __adf_nbuf_queue_len(__adf_nbuf_qhead_t *qhead) /** * @brief returns the first guy in the Q * @param qhead - * + * * @return (NULL if the Q is empty) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_queue_first(__adf_nbuf_queue_t *qhead) { return qhead->head; } /** * @brief return the next packet from packet chain - * + * * @param buf (packet) - * + * * @return (NULL if no packets are there) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_queue_next(__adf_nbuf_t buf) { return buf->next_buf; } /** * @brief check if the queue is empty or not - * + * * @param qhead - * + * * @return a_bool_t */ -a_bool_t +a_bool_t __adf_nbuf_is_queue_empty(__adf_nbuf_qhead_t *qhead) { return ((qhead->qlen == 0)); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf_pvt.h index 0b21fb8..a446583 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_nbuf_pvt.h @@ -33,7 +33,7 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * FreeBSD specific prototypes + * FreeBSD specific prototypes */ #ifndef _ADF_NBUF_PVT_H #define _ADF_NBUF_PVT_H @@ -44,7 +44,7 @@ //#include #define __ADF_NBUF_NULL NULL -#define __ADF_NBUF_CTX_BUF +#define __ADF_NBUF_CTX_BUF typedef VBUF * __adf_nbuf_t; @@ -53,94 +53,94 @@ typedef VBUF * __adf_nbuf_t; */ typedef struct __adf_nbuf_qhead { VBUF *head; - VBUF *tail; + VBUF *tail; a_uint32_t qlen; }__adf_nbuf_qhead_t; typedef __adf_nbuf_qhead_t __adf_nbuf_queue_t; -__adf_nbuf_t -__adf_nbuf_alloc(adf_os_size_t size, - a_uint32_t reserve, a_uint32_t align); +__adf_nbuf_t +__adf_nbuf_alloc(adf_os_size_t size, + a_uint32_t reserve, a_uint32_t align); -void +void __adf_nbuf_free(__adf_nbuf_t buf); -a_uint8_t * +a_uint8_t * __adf_nbuf_push_head(__adf_nbuf_t buf, adf_os_size_t size); - -a_uint8_t * + +a_uint8_t * __adf_nbuf_pull_head(__adf_nbuf_t buf, adf_os_size_t size); -a_uint8_t * +a_uint8_t * __adf_nbuf_put_tail(__adf_nbuf_t buf, adf_os_size_t size); -void +void __adf_nbuf_trim_tail(__adf_nbuf_t buf, adf_os_size_t size); -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_realloc_headroom(__adf_nbuf_t buf, - a_uint32_t headroom); - -__adf_nbuf_t -__adf_nbuf_realloc_tailroom(__adf_nbuf_t buf, + a_uint32_t headroom); + +__adf_nbuf_t +__adf_nbuf_realloc_tailroom(__adf_nbuf_t buf, a_uint32_t tailroom); - -__adf_nbuf_t + +__adf_nbuf_t __adf_nbuf_expand(__adf_nbuf_t buf, a_uint32_t headroom, a_uint32_t tailroom); - -__adf_nbuf_t + +__adf_nbuf_t __adf_nbuf_copy(__adf_nbuf_t src); -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_unshare(__adf_nbuf_t src); -void +void __adf_nbuf_frag_info(__adf_nbuf_t buf, adf_os_sglist_t *sg); -a_uint8_t * +a_uint8_t * __adf_nbuf_get_priv(__adf_nbuf_t buf); -void -__adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, +void +__adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, __adf_nbuf_t buf); - -__adf_nbuf_t + +__adf_nbuf_t __adf_nbuf_queue_remove(__adf_nbuf_qhead_t *qhead); -a_uint32_t -__adf_nbuf_tx_cksum_info(__adf_nbuf_t buf, - a_uint8_t **hdr_off, +a_uint32_t +__adf_nbuf_tx_cksum_info(__adf_nbuf_t buf, + a_uint8_t **hdr_off, a_uint8_t **where); - -void + +void __adf_nbuf_set_rx_cksum(__adf_nbuf_t buf, adf_nbuf_rx_cksum_t *cksum); -void +void __adf_nbuf_get_tso_info(__adf_nbuf_t buf, adf_nbuf_tso_t *tso); -a_status_t -__adf_nbuf_get_vlan_info(adf_net_handle_t hdl, - __adf_nbuf_t buf, - adf_net_vlanhdr_t *vlan); - -void +a_status_t +__adf_nbuf_get_vlan_info(adf_net_handle_t hdl, + __adf_nbuf_t buf, + adf_net_vlanhdr_t *vlan); + +void __adf_nbuf_dmamap_info(__adf_os_dma_map_t bmap, adf_os_dmamap_info_t *sg); /** * @brief return the last mbuf - * + * * @param m0 - * + * * @return struct mbuf* */ -VDESC * +VDESC * __adf_nbuf_last(VBUF *buf); /** * @brief num bytes in the head - * + * * @param adf_nbuf - * + * * @return num of bytes available */ a_uint32_t @@ -149,33 +149,33 @@ __adf_nbuf_headroom(__adf_nbuf_t buf); /** * @brief num of bytes available in the tail excluding the priv * portion - * + * * @param adf_nbuf - * + * * @return num of bytes */ -a_uint32_t +a_uint32_t __adf_nbuf_tailroom(__adf_nbuf_t buf); /** * @brief get the entire packet length - * + * * @param adf_nbuf - * + * * @return total length of packet (sum of all frag lengths) - */ + */ a_uint32_t __adf_nbuf_len(__adf_nbuf_t buf); /** * @brief Clone the nbuf (will not create writeable copies) - * + * * @param adf_nbuf - * + * * @return Read-only copy of the nbuf (including clusters) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_clone(__adf_nbuf_t src); void @@ -184,9 +184,9 @@ __adf_nbuf_cat(__adf_nbuf_t dst, __adf_nbuf_t src); /* * @brief check if the mbuf is cloned or not - * + * * @param buf - * + * * @return a_bool_t */ a_bool_t @@ -196,53 +196,53 @@ __adf_nbuf_is_cloned(__adf_nbuf_t buf); * @brief This will return the header's addr & m_len */ void -__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, +__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, a_uint32_t *len); /** * @brief init the queue * @param qhead */ -void +void __adf_nbuf_queue_init(__adf_nbuf_qhead_t *qhead); /** * @brief return the length of queue * @param adf_qhead - * + * * @return length - * + * */ -a_uint32_t +a_uint32_t __adf_nbuf_queue_len(__adf_nbuf_qhead_t *qhead); /** * @brief returns the first guy in the Q * @param qhead - * + * * @return (NULL if the Q is empty) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_queue_first(__adf_nbuf_queue_t *qhead); /** * @brief return the next packet from packet chain - * + * * @param buf (packet) - * + * * @return (NULL if no packets are there) */ -__adf_nbuf_t +__adf_nbuf_t __adf_nbuf_queue_next(__adf_nbuf_t buf); /** * @brief check if the queue is empty or not - * + * * @param qhead - * + * * @return a_bool_t */ -a_bool_t +a_bool_t __adf_nbuf_is_queue_empty(__adf_nbuf_qhead_t *qhead); __adf_nbuf_t @@ -250,10 +250,10 @@ __adf_nbuf_create_frm_frag(__adf_nbuf_queue_t *head); void __adf_nbuf_split_to_frag(__adf_nbuf_t buf, __adf_nbuf_queue_t *qhead); -a_status_t __adf_nbuf_dmamap_create(__adf_os_device_t osdev, +a_status_t __adf_nbuf_dmamap_create(__adf_os_device_t osdev, __adf_os_dma_map_t *dmap); -void __adf_nbuf_dmamap_destroy(__adf_os_device_t osdev, +void __adf_nbuf_dmamap_destroy(__adf_os_device_t osdev, __adf_os_dma_map_t dmap); a_status_t __adf_nbuf_map(__adf_os_device_t osdev, __adf_os_dma_map_t dmap, diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net.c index ef754a9..d65fb7d 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net.c @@ -37,9 +37,6 @@ * @module_desc Magpie Network Shim */ -#include -//#include -//#include "adf_net_wcmd_pvt.h" #include /** @@ -49,13 +46,13 @@ /** * @brief register the driver into the shim * @param[in] drv - * + * * @return a_status_t */ a_status_t __adf_net_register_drv(adf_drv_info_t *drv) { - wlan_pci_register_drv(drv); + wlan_pci_register_drv(drv); return A_STATUS_OK; } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net_pvt.h index 9858823..00c513d 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_net_pvt.h @@ -44,7 +44,7 @@ #define __ADF_PCI_BAR0 0x10 -a_status_t +a_status_t __adf_net_register_drv(adf_drv_info_t *drv); void @@ -80,7 +80,7 @@ __adf_net_carrier_on(adf_net_handle_t hdl) static inline void __adf_net_start_queue(adf_net_handle_t hdl) -{ +{ } @@ -118,8 +118,8 @@ static inline adf_net_handle_t __adf_net_dev_create(adf_drv_handle_t hdl, adf_de return NULL; } -static inline adf_net_handle_t __adf_net_vdev_create(adf_net_handle_t dev_hdl, - adf_drv_handle_t hdl, adf_vdev_sw_t *op, +static inline adf_net_handle_t __adf_net_vdev_create(adf_net_handle_t dev_hdl, + adf_drv_handle_t hdl, adf_vdev_sw_t *op, adf_net_dev_info_t *info) { return NULL; @@ -140,6 +140,6 @@ static inline adf_os_handle_t __adf_net_hdl_to_os(adf_net_handle_t hdl) { return NULL; -} +} #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_atomic_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_atomic_pvt.h index fcbcc2c..0225ccd 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_atomic_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_atomic_pvt.h @@ -35,18 +35,13 @@ #ifndef __ADF_OS_ATOMIC_PVT_H #define __ADF_OS_ATOMIC_PVT_H -//#include -//#include - -#include - typedef a_uint32_t __adf_os_atomic_t; /** * @brief This initiallizes the varriable to zero - * + * * @param __adf_os_atomic_t (int pointer) - * + * */ static inline void __adf_os_atomic_init(__adf_os_atomic_t *v) @@ -78,7 +73,7 @@ static inline void __adf_os_atomic_write(__adf_os_atomic_t *v,a_uint32_t p) { atomic_store_rel_int(v,(int)p); -} +} */ #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.c index b19f0e5..d27398a 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.c @@ -34,7 +34,7 @@ */ #include "adf_os_defer_pvt.h" -void +void __adf_os_defer_func(void *arg, int pending) { __adf_os_defer_ctx_t *ctx = (__adf_os_defer_ctx_t *)arg; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.h index 525a7f4..66b4ee8 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_defer_pvt.h @@ -66,13 +66,13 @@ extern void __adf_os_defer_func(void *arg, int pending); /** * @brief initiallize the defer function (work or bh) - * + * * @param defer * @param func * @param arg */ static inline void __adf_os_init_defer(__adf_os_defer_t *defer, - adf_os_defer_fn_t func, + adf_os_defer_fn_t func, void *arg) { defer->ctx.caller_fn = func; @@ -97,27 +97,27 @@ static inline void __adf_os_init_bh(adf_os_handle_t hdl, //__adf_os_init_defer(bh, func, arg); A_TASKLET_INIT_TASK(func, arg, bh); } -static inline void __adf_os_sched_work(adf_os_handle_t hdl, +static inline void __adf_os_sched_work(adf_os_handle_t hdl, __adf_os_work_t * work) { //taskqueue_enqueue(taskqueue_thread, &work->tsk); } -static inline void __adf_os_disable_work(adf_os_handle_t hdl, +static inline void __adf_os_disable_work(adf_os_handle_t hdl, __adf_os_work_t * work) { //taskqueue_drain(taskqueue_thread, &work->tsk); } -static inline void __adf_os_sched_bh(adf_os_handle_t hdl, +static inline void __adf_os_sched_bh(adf_os_handle_t hdl, __adf_os_bh_t * bh) { A_TASKLET_SCHEDULE(bh); } -static inline void __adf_os_disable_bh(adf_os_handle_t hdl, +static inline void __adf_os_disable_bh(adf_os_handle_t hdl, __adf_os_bh_t * bh) { A_TASKLET_DISABLE(bh); } -#endif +#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma.c index 915e8e0..c29f8e4 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma.c @@ -45,7 +45,7 @@ void __adf_os_dma_load(void *arg, bus_dma_segment_t *dseg, int nseg, int error) adf_os_assert(nseg == 1); ((bus_dma_segment_t *)arg)[0].ds_addr = dseg[0].ds_addr; - ((bus_dma_segment_t *)arg)[0].ds_len = dseg[0].ds_len; + ((bus_dma_segment_t *)arg)[0].ds_len = dseg[0].ds_len; } #endif @@ -53,29 +53,29 @@ void __adf_os_dma_load(void *arg, bus_dma_segment_t *dseg, int nseg, int error) * @brief Allocates a DMA region, uses the tag elem to store the * tag value which constant for all the mappings done * through this API. - * + * * @param osdev * @param size * @param coherent * @param dmap - * + * * @return void* (Virtual address) */ inline void* -__adf_os_dmamem_alloc(__adf_os_device_t osdev, adf_os_size_t size, +__adf_os_dmamem_alloc(__adf_os_device_t osdev, adf_os_size_t size, a_bool_t coherent, __adf_os_dma_map_t *dmap) -{ +{ (*dmap) = A_ALLOCRAM(sizeof(struct __adf_dma_map)); - + if((*dmap) == NULL){ goto fail_malloc; } - + (*dmap)->ds_addr = A_ALLOCRAM(size); (*dmap)->ds_len = size; - + return (*dmap)->ds_addr; - -fail_malloc: - return NULL; + +fail_malloc: + return NULL; } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma_pvt.h index bf4180b..342b2fc 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_dma_pvt.h @@ -39,17 +39,17 @@ #include inline void* -__adf_os_dmamem_alloc(__adf_os_device_t osdev, adf_os_size_t size, +__adf_os_dmamem_alloc(__adf_os_device_t osdev, adf_os_size_t size, a_bool_t coherent, __adf_os_dma_map_t *dmap); -/* - * Free a previously mapped DMA buffer +/* + * Free a previously mapped DMA buffer * Direction doesnt matter, since this API is called at closing time. */ static inline void __adf_os_dmamem_free(adf_os_device_t osdev, __adf_os_size_t size, a_bool_t coherent, void *vaddr, __adf_os_dma_map_t dmap) -{ +{ } @@ -57,7 +57,7 @@ __adf_os_dmamem_free(adf_os_device_t osdev, __adf_os_size_t size, a_bool_t co //#define __adf_os_dmamem_map2addr(_dmap) ((_dmap)->seg[0].ds_addr) #define __adf_os_dmamem_map2addr(_dmap) ((adf_os_dma_addr_t)(_dmap)->ds_addr) -static inline void +static inline void __adf_os_dmamem_cache_sync(__adf_os_device_t osdev, __adf_os_dma_map_t dmap, adf_os_cache_sync_t sync) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_io_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_io_pvt.h index 105216f..1b37cef 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_io_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_io_pvt.h @@ -53,6 +53,6 @@ #define __adf_os_htons(x) x #define __adf_os_htonl(x) x -#define __adf_os_cpu_to_le16(x) __bswap16(x) +#define __adf_os_cpu_to_le16(x) __bswap16(x) #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_irq_pvt.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_irq_pvt.c index 5a7dfb7..90212bc 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_irq_pvt.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_irq_pvt.c @@ -45,7 +45,7 @@ extern adf_os_drv_intr g_wlan_intr; * @brief setup the Interrupt handler for the driver * @param[in] dev * @param[in] sc - * + * * @return int */ @@ -53,8 +53,8 @@ int __adf_os_setup_intr(__adf_os_device_t osdev, adf_os_drv_intr fn) { g_wlan_intr = fn; - - return 0; + + return 0; } /** @@ -65,5 +65,5 @@ __adf_os_setup_intr(__adf_os_device_t osdev, adf_os_drv_intr fn) void __adf_os_free_intr(__adf_os_device_t osdev) { - g_wlan_intr = NULL; + g_wlan_intr = NULL; } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_lock_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_lock_pvt.h index aa60e13..20ac814 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_lock_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_lock_pvt.h @@ -40,7 +40,7 @@ typedef int __adf_os_mutex_t; static inline void __adf_os_init_mutex(__adf_os_mutex_t *mtx) { - + } static inline int __adf_os_mutex_acquire(__adf_os_mutex_t *mtx) @@ -77,7 +77,7 @@ static inline void __adf_os_spin_unlock_bh(__adf_os_spinlock_t *lock) { //mtx_unlock_spin(lock); } -static inline a_bool_t __adf_os_spinlock_irq_exec(adf_os_handle_t hdl, __adf_os_spinlock_t *lock, +static inline a_bool_t __adf_os_spinlock_irq_exec(adf_os_handle_t hdl, __adf_os_spinlock_t *lock, adf_os_irqlocked_func_t func, void *arg) { return 0; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_mem_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_mem_pvt.h index b5bcfa1..7b2f0e1 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_mem_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_mem_pvt.h @@ -53,7 +53,7 @@ static inline void __adf_os_mem_free(void *buf) /* move a memory buffer */ static inline void __adf_os_mem_copy(void *dst, const void *src, adf_os_size_t size) { - A_MEMCPY(dst,src,size); + A_MEMCPY(dst,src,size); } /* set a memory buffer */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_module_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_module_pvt.h index 08a9617..08313ba 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_module_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_module_pvt.h @@ -55,18 +55,18 @@ /** * @brief generic driver /module init function - * + * * @param mod (module data) * @param event (LOAD or UNLOAD) * @param arg (any extra argument needed if - * + * * @return int */ /** * exit module macro */ -#define __adf_os_virt_module_exit(_fn) +#define __adf_os_virt_module_exit(_fn) -#define __adf_os_module_dep(_name, _dep) +#define __adf_os_module_dep(_name, _dep) #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_pci_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_pci_pvt.h index c4d6b70..4e7861f 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_pci_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_pci_pvt.h @@ -47,7 +47,7 @@ /** * exit module macro */ -#define __adf_os_pci_module_exit(_fn) +#define __adf_os_pci_module_exit(_fn) /** * initiallize the PCI driver structure @@ -69,10 +69,10 @@ * @param osdev * @param offset * @param val - * + * * @return int */ -static inline int +static inline int __adf_os_pci_config_read8(adf_os_device_t osdev, int offset, a_uint8_t *val) { (*val) = wlan_pci_config_read(offset, 1); @@ -82,39 +82,39 @@ __adf_os_pci_config_read8(adf_os_device_t osdev, int offset, a_uint8_t *val) */ } -static inline int +static inline int __adf_os_pci_config_write8(adf_os_device_t osdev, int offset, a_uint8_t val) { wlan_pci_config_write(offset, val, 1); - return 0; + return 0; } -static inline int +static inline int __adf_os_pci_config_read16(adf_os_device_t osdev, int offset, a_uint16_t *val) { (*val) = wlan_pci_config_read(offset, 2); return 0; } -static inline int +static inline int __adf_os_pci_config_write16(adf_os_device_t osdev, int offset, a_uint16_t val) { wlan_pci_config_write(offset, val, 2); - return 0; + return 0; } -static inline int +static inline int __adf_os_pci_config_read32(adf_os_device_t osdev, int offset, a_uint32_t *val) { (*val) = wlan_pci_config_read(offset, 4); return 0; } -static inline int +static inline int __adf_os_pci_config_write32(adf_os_device_t osdev, int offset, a_uint32_t val) { wlan_pci_config_write(offset, val, 4); - return 0; + return 0; } #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_time_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_time_pvt.h index 3b9d02a..708ff43 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_time_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_time_pvt.h @@ -42,7 +42,7 @@ * @brief this code is modified version of tvtohz(9) which * returns signed int which we don't require, hence we * got rid of the type casting thing - * + * * @return unsigned long */ static inline unsigned long @@ -63,7 +63,7 @@ __adf_os_msecs_to_ticks(a_uint32_t msecs) static inline unsigned long __adf_os_getuptime(void) { - return MSEC_TO_TICK(A_MILLISECONDS());; + return MSEC_TO_TICK(A_MILLISECONDS());; } static inline void diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_timer_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_timer_pvt.h index 7ae74be..936ab85 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_timer_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_timer_pvt.h @@ -39,7 +39,7 @@ #include "Magpie_api.h" -typedef struct +typedef struct { A_timer_t *magpie_timer; adf_os_timer_func_t timer_func; @@ -50,7 +50,7 @@ typedef struct void __adf_os_timer_func(A_HANDLE timer_handle, void *arg); -/* +/* * Initialize a timer */ static inline void @@ -61,8 +61,8 @@ __adf_os_timer_init(adf_os_handle_t hdl, __adf_os_timer_t *timer, A_INIT_TIMER(timer->magpie_timer, __adf_os_timer_func, arg); } -/* - * start a timer +/* + * start a timer */ static inline void __adf_os_timer_start(__adf_os_timer_t *timer, int msec) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_types_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_types_pvt.h index dc8316c..5ff6a1c 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_types_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_types_pvt.h @@ -65,14 +65,14 @@ /** * CACHE-SYNC (DMA) */ -#define __ADF_SYNC_PREREAD 0 +#define __ADF_SYNC_PREREAD 0 #define __ADF_SYNC_POSTREAD 1 #define __ADF_SYNC_PREWRITE 2 #define __ADF_SYNC_POSTWRITE 3 #define __ADF_OS_DMA_TO_DEVICE 0 -#define __ADF_OS_DMA_FROM_DEVICE 1 - +#define __ADF_OS_DMA_FROM_DEVICE 1 + struct __adf_softc; @@ -86,24 +86,24 @@ enum __adf_net_wireless_evcode{ __ADF_IEEE80211_SCAN = 105, __ADF_IEEE80211_REPLAY = 106, __ADF_IEEE80211_MICHAEL = 107, - __ADF_IEEE80211_REJOIN = 108, + __ADF_IEEE80211_REJOIN = 108, __ADF_CUSTOM_PUSH_BUTTON = 109, }; /* generic data types */ struct __adf_device { -int dummy; -}; +int dummy; +}; typedef struct __adf_device *__adf_os_device_t; struct __adf_dma_map { VBUF *buf; - + A_UINT32 *ds_addr; A_UINT16 ds_len; -}; +}; typedef struct __adf_dma_map *__adf_os_dma_map_t; @@ -116,23 +116,23 @@ typedef int __adf_os_off_t; #define __adf_os_iomem_t #if 0 -typedef int __a_uint8_t; -typedef int __a_int8_t; -typedef int __a_uint16_t; -typedef int __a_int16_t; -typedef int __a_uint32_t; -typedef int __a_int32_t; -typedef int __a_uint64_t; -typedef int __a_int64_t; +typedef int __a_uint8_t; +typedef int __a_int8_t; +typedef int __a_uint16_t; +typedef int __a_int16_t; +typedef int __a_uint32_t; +typedef int __a_int32_t; +typedef int __a_uint64_t; +typedef int __a_int64_t; #else typedef A_UINT8 __a_uint8_t; -typedef A_INT8 __a_int8_t; -typedef A_UINT16 __a_uint16_t; -typedef A_INT16 __a_int16_t; -typedef A_UINT32 __a_uint32_t; -typedef A_INT32 __a_int32_t; -typedef A_UINT64 __a_uint64_t; -typedef A_INT64 __a_int64_t; +typedef A_INT8 __a_int8_t; +typedef A_UINT16 __a_uint16_t; +typedef A_INT16 __a_int16_t; +typedef A_UINT32 __a_uint32_t; +typedef A_INT32 __a_int32_t; +typedef A_UINT64 __a_uint64_t; +typedef A_INT64 __a_int64_t; typedef A_UINT32 u_int32_t; typedef A_UINT16 u_int16_t; @@ -150,7 +150,7 @@ typedef A_UINT64 u_int64_t; //#define __adf_os_print my_printf #define __adf_os_print A_PRINTF -#if 1 +#if 1 #if defined(__XCC__) #include "stdarg.h" #define __va_list __gnuc_va_list diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_util_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_util_pvt.h index 0efeb06..23b71b1 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_util_pvt.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/adf/adf_os_util_pvt.h @@ -37,18 +37,18 @@ #include -#define __adf_os_unlikely(_expr) -#define __adf_os_likely(_expr) +#define __adf_os_unlikely(_expr) +#define __adf_os_likely(_expr) /** - * @brief memory barriers. + * @brief memory barriers. */ #define __adf_os_wmb() oops no implementation... #define __adf_os_rmb() oops no implementation... #define __adf_os_mb() oops no implementation... -#define __adf_os_min(_a, _b) ((_a < _b) ? _a : _b) -#define __adf_os_max(_a, _b) ((_a > _b) ? _a : _b) +#define __adf_os_min(_a, _b) ((_a < _b) ? _a : _b) +#define __adf_os_max(_a, _b) ((_a > _b) ? _a : _b) #ifdef _DEBUG_BUILD_ #define __adf_os_assert(expr) do {\ @@ -79,10 +79,10 @@ #define inline #endif -static void inline +static void inline __adf_os_get_rand(adf_os_handle_t hdl,__a_uint8_t *ptr, __a_uint32_t len) { -#if 0 +#if 0 u_int8_t *dp = ptr; u_int32_t v; size_t nb; @@ -93,7 +93,7 @@ __adf_os_get_rand(adf_os_handle_t hdl,__a_uint8_t *ptr, __a_uint32_t len) dp += sizeof(u_int32_t); len -= nb; } -#endif +#endif } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_api.h index b4ff2b5..54cdd1d 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_api.h @@ -34,9 +34,9 @@ */ /* * @File: buf_pool_api.h - * + * * @Abstract: BUF Pool api - * + * * @Notes: */ @@ -48,11 +48,11 @@ /* endpoint defines */ typedef enum { - POOL_ID_HTC_CONTROL = 0, - POOL_ID_WMI_SVC_CMD_REPLY = 1, + POOL_ID_HTC_CONTROL = 0, + POOL_ID_WMI_SVC_CMD_REPLY = 1, POOL_ID_WMI_SVC_EVENT = 2, POOL_ID_WLAN_RX_BUF = 3, - POOL_ID_MAX = 10 + POOL_ID_MAX = 10 } BUF_POOL_ID; typedef void* pool_handle_t; @@ -60,19 +60,19 @@ typedef void* pool_handle_t; /* hardware API table structure (API descriptions below) */ struct buf_pool_api { pool_handle_t (*_init)(adf_os_handle_t handle); - + void (*_shutdown)(pool_handle_t handle); - + void (*_create_pool)(pool_handle_t handle, BUF_POOL_ID poolId, int nItems, int nSize); - + adf_nbuf_t (*_alloc_buf)(pool_handle_t handle, BUF_POOL_ID poolId, int reserve); - + adf_nbuf_t (*_alloc_buf_align)(pool_handle_t handle, BUF_POOL_ID poolId, int reserve, int align); - + void (*_free_buf)(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf); - + /* room to expand this table by another table */ - void *pReserved; + void *pReserved; }; extern void buf_pool_module_install(struct buf_pool_api *apis); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_dynamic.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_dynamic.c deleted file mode 100755 index 7e70fd5..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_dynamic.c +++ /dev/null @@ -1,126 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/* - * @File: - * - * @Abstract: Buf pool implementation: Dynamic version - * - * @Notes: - */ -#include -#include -#include -#include -//#include -#include - -LOCAL htc_handle_t _buf_pool_dynamic_init(adf_os_handle_t handle); -LOCAL void _buf_pool_dynamic_create_pool(pool_handle_t handle, BUF_POOL_ID poolId, int nItems, int nSize); -LOCAL adf_nbuf_t _buf_pool_dynamic_alloc_buf(pool_handle_t handle, BUF_POOL_ID poolId, int reserve); -LOCAL adf_nbuf_t _buf_pool_dynamic_alloc_buf_align(pool_handle_t handle, BUF_POOL_ID poolId, int reserve, int align); -LOCAL void _buf_pool_dynamic_free_buf(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf); -LOCAL void _buf_pool_dynamic_shutdown(pool_handle_t handle); - -typedef struct _POOL_CONFIG { - int nSize; -} POOL_CONFIG; - -typedef struct _BUF_POOL_DYNAMIC_CONTEXT { - adf_os_handle_t OSHandle; - POOL_CONFIG poolConf[POOL_ID_MAX]; -} BUF_POOL_DYNAMIC_CONTEXT; - -void buf_pool_module_install(struct buf_pool_api *pAPIs) -{ - pAPIs->_init = _buf_pool_dynamic_init; - pAPIs->_create_pool = _buf_pool_dynamic_create_pool; - pAPIs->_alloc_buf = _buf_pool_dynamic_alloc_buf; - pAPIs->_alloc_buf_align = _buf_pool_dynamic_alloc_buf_align; - pAPIs->_free_buf = _buf_pool_dynamic_free_buf; - pAPIs->_shutdown = _buf_pool_dynamic_shutdown; -} - -LOCAL pool_handle_t _buf_pool_dynamic_init(adf_os_handle_t handle) -{ - BUF_POOL_DYNAMIC_CONTEXT *ctx; - - ctx = (BUF_POOL_DYNAMIC_CONTEXT *)adf_os_mem_alloc(sizeof(BUF_POOL_DYNAMIC_CONTEXT)); - ctx->OSHandle = handle; - - return ctx; -} - -LOCAL void _buf_pool_dynamic_shutdown(pool_handle_t handle) -{ - BUF_POOL_DYNAMIC_CONTEXT *ctx = (BUF_POOL_DYNAMIC_CONTEXT *)handle; - - adf_os_mem_free(ctx); -} - -LOCAL void _buf_pool_dynamic_create_pool(pool_handle_t handle, BUF_POOL_ID poolId, int nItems, int nSize) -{ - BUF_POOL_DYNAMIC_CONTEXT *ctx = (BUF_POOL_DYNAMIC_CONTEXT *)handle; - - ctx->poolConf[poolId].nSize = nSize; -} - -LOCAL adf_nbuf_t _buf_pool_dynamic_alloc_buf(pool_handle_t handle, BUF_POOL_ID poolId, int reserve) -{ - BUF_POOL_DYNAMIC_CONTEXT *ctx = (BUF_POOL_DYNAMIC_CONTEXT *)handle; - POOL_CONFIG *poolConf = &ctx->poolConf[poolId]; - - return adf_nbuf_alloc(poolConf->nSize, - reserve, 0); - -} - -LOCAL adf_nbuf_t _buf_pool_dynamic_alloc_buf_align(pool_handle_t handle, BUF_POOL_ID poolId, int reserve, int align) -{ - BUF_POOL_DYNAMIC_CONTEXT *ctx = (BUF_POOL_DYNAMIC_CONTEXT *)handle; - POOL_CONFIG *poolConf = &ctx->poolConf[poolId]; - - return adf_nbuf_alloc(poolConf->nSize, - reserve, align); - -} - -LOCAL void _buf_pool_dynamic_free_buf(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf) -{ - //BUF_POOL_DYNAMIC_CONTEXT *ctx = (BUF_POOL_DYNAMIC_CONTEXT *)handle; - - adf_nbuf_free(buf); -} - -adf_os_export_symbol(buf_pool_module_install); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.c index 6886e8a..33a95fb 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.c @@ -33,20 +33,20 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * + * @File: + * * @Abstract: Buf pool implementation: static version - * - * @Notes: + * + * @Notes: */ #include -#include +#include #include #include #include #include -#include +#include #include "buf_pool_static.h" @@ -55,12 +55,12 @@ LOCAL void _buf_pool_static_create_pool(pool_handle_t handle, BUF_POOL_ID poolId LOCAL adf_nbuf_t _buf_pool_static_alloc_buf(pool_handle_t handle, BUF_POOL_ID poolId, int reserve); LOCAL adf_nbuf_t _buf_pool_static_alloc_buf_align(pool_handle_t handle, BUF_POOL_ID poolId, int reserve, int align); LOCAL void _buf_pool_static_free_buf(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf); -LOCAL void _buf_pool_static_shutdown(pool_handle_t handle); +LOCAL void _buf_pool_static_shutdown(pool_handle_t handle); BUF_POOL_STATIC_CONTEXT g_poolCtx; void buf_pool_module_install(struct buf_pool_api *pAPIs) -{ +{ pAPIs->_init = _buf_pool_static_init; pAPIs->_create_pool = _buf_pool_static_create_pool; pAPIs->_alloc_buf = _buf_pool_static_alloc_buf; @@ -68,29 +68,29 @@ void buf_pool_module_install(struct buf_pool_api *pAPIs) pAPIs->_free_buf = _buf_pool_static_free_buf; pAPIs->_shutdown = _buf_pool_static_shutdown; } - + LOCAL pool_handle_t _buf_pool_static_init(adf_os_handle_t handle) { #if 1 int i; - + for(i=0; i < POOL_ID_MAX; i++) { g_poolCtx.bufQ[i] = NULL; } - + return &g_poolCtx; -#else +#else BUF_POOL_STATIC_CONTEXT *ctx; - + //ctx = (BUF_POOL_static_CONTEXT *)A_ALLOCRAM(sizeof(BUF_POOL_static_CONTEXT)); ctx = (BUF_POOL_STATIC_CONTEXT *)adf_os_mem_alloc(sizeof(BUF_POOL_STATIC_CONTEXT)); ctx->NetHandle = handle; - - return ctx; -#endif -} - -LOCAL void _buf_pool_static_shutdown(pool_handle_t handle) + + return ctx; +#endif +} + +LOCAL void _buf_pool_static_shutdown(pool_handle_t handle) { // SHALL NOT BE USED in FW } @@ -100,9 +100,9 @@ LOCAL void _buf_pool_static_create_pool(pool_handle_t handle, BUF_POOL_ID poolId int i; VBUF *buf; VDESC *desc; - + //BUF_POOL_STATIC_CONTEXT *ctx = (BUF_POOL_STATIC_CONTEXT *)handle; - + for ( i = 0; i < nItems; i++) { buf = VBUF_alloc_vbuf(); desc = VDESC_alloc_vdesc(); @@ -111,10 +111,10 @@ LOCAL void _buf_pool_static_create_pool(pool_handle_t handle, BUF_POOL_ID poolId desc->buf_size = nSize; desc->data_offset = 0; desc->data_size = 0; - - buf->buf_length = 0; + + buf->buf_length = 0; buf->desc_list = desc; - + if ( g_poolCtx.bufQ[poolId] == NULL ) { g_poolCtx.bufQ[poolId] = buf; } else { @@ -123,21 +123,21 @@ LOCAL void _buf_pool_static_create_pool(pool_handle_t handle, BUF_POOL_ID poolId } } } - + LOCAL adf_nbuf_t _buf_pool_static_alloc_buf(pool_handle_t handle, BUF_POOL_ID poolId, int reserve) { VBUF *buf; - + buf = g_poolCtx.bufQ[poolId]; if ( buf != NULL ) { g_poolCtx.bufQ[poolId] = buf->next_buf; - + buf->next_buf = NULL; buf->desc_list->data_offset = reserve; buf->desc_list->data_size = 0; buf->buf_length = 0; } - + return buf; } @@ -145,7 +145,7 @@ LOCAL adf_nbuf_t _buf_pool_static_alloc_buf_align(pool_handle_t handle, BUF_POO { return _buf_pool_static_alloc_buf(handle, poolId, reserve); } - + LOCAL void _buf_pool_static_free_buf(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf) { if ( g_poolCtx.bufQ[poolId] == NULL ) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.h index d882436..02c55ad 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/buf_pool/buf_pool_static.h @@ -33,11 +33,11 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * - * @Abstract: - * - * @Notes: + * @File: + * + * @Abstract: + * + * @Notes: */ #ifndef BUF_POOL_STATIC_H_ @@ -45,7 +45,7 @@ typedef struct _BUF_POOL_STATIC_CONTEXT { VBUF *bufQ[POOL_ID_MAX]; - + // Left a door for extension the structure void *pReserved; } BUF_POOL_STATIC_CONTEXT; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/clock_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/clock_api.h index c7aae71..b268ddb 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/clock_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/clock_api.h @@ -40,16 +40,20 @@ #define MSEC_TO_TICK(msec) ((msec)* TICK_MSEC_RATIO) struct clock_api { - void (* _clock_init)(A_UINT32 ref_clk); - void (* _clockregs_init)(void); - A_UINT32 (* _uart_frequency)(void); - void (* _delay_us)(int); - void (* _wlan_band_set)(int); - A_UINT32 (* _refclk_speed_get)(void); - A_UINT32 (* _milliseconds)(void); - void (* _sysclk_change)(void); - - void (* _clock_tick)(void); + void (* _clock_init)(A_UINT32 ref_clk); + void (* _clockregs_init)(void); + A_UINT32 (* _uart_frequency)(void); + void (* _delay_us)(int); + void (* _wlan_band_set)(int); + A_UINT32 (* _refclk_speed_get)(void); + A_UINT32 (* _milliseconds)(void); + void (* _sysclk_change)(void); + +#if defined(PROJECT_K2) + A_UINT32 (* _sysclk_get)(void); +#endif + + void (* _clock_tick)(void); }; #endif /* __CLOCK_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_api.h index ccd3033..08c66c2 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_api.h @@ -70,7 +70,7 @@ #if defined(PROJECT_K2) #if SYSTEM_MODULE_SFLASH -#include "sflash_api.h" +#include "cmnos/sflash_api.h" #endif #endif @@ -117,7 +117,7 @@ do { \ asm volatile("rsr %0,%1" : "=r" (epc3) : "n" (EPC_3)); \ asm volatile("rsr %0,%1" : "=r" (epc4) : "n" (EPC_4)); \ \ - A_PRINTF("\tepc1=0x%x, epc2=0x%x, epc3=0x%x, epc4=0x%x\n", \ + A_PRINTF("\tepc1=0x%x, epc2=0x%x, epc3=0x%x, epc4=0x%x\n", \ epc1, epc2, epc3, epc4); \ A_PRINTF("0x%08x, 0x%08x, 0x%08x, \n\r", \ DEBUG_SYSTEM_STATE, WATCH_DOG_RESET_COUNTER, \ @@ -156,7 +156,7 @@ do { \ #define A_MEMMOVE(dst, src, size) #define A_MEMCMP(p1, p2, nbytes) -#endif +#endif #if 1 @@ -179,20 +179,20 @@ do { \ #if SYSTEM_MODULE_UART /* Serial port support */ -#define A_UART_INIT() A_CMN(uart._uart_init()) +#define A_UART_INIT() A_CMN(uart._uart_init()) #define A_UART_HWINIT(freq, baud) \ A_CMN(uart._uart_hwinit((freq), (baud))) -#define A_UART_ENABLED() (HOST_INTEREST->hi_uart_enable) +#define A_UART_ENABLED() (HOST_INTEREST->hi_uart_enable) -#define A_PUTS(str) A_CMN(uart._uart_str_out(str)) +#define A_PUTS(str) A_CMN(uart._uart_str_out(str)) -#define A_PUTC(ch) A_CMN(uart._uart_char_put(ch)) -#define A_GETC(pCh) A_CMN(uart._uart_char_get(pCh)) +#define A_PUTC(ch) A_CMN(uart._uart_char_put(ch)) +#define A_GETC(pCh) A_CMN(uart._uart_char_get(pCh)) -#define A_UART_TASK() A_CMN(uart._uart_task()) -#define A_UART_CONFIG(x) A_CMN(uart._uart_config(x)) +#define A_UART_TASK() A_CMN(uart._uart_task()) +#define A_UART_CONFIG(x) A_CMN(uart._uart_config(x)) #else @@ -200,9 +200,9 @@ do { \ #define A_UART_HWINIT(freq, baud) -#define A_UART_ENABLED() +#define A_UART_ENABLED() -#define A_PUTS(str) +#define A_PUTS(str) #define A_PUTC(ch) #define A_GETC(pCh) @@ -228,7 +228,7 @@ do { \ #define A_MISALIGNED_LOAD_HANDLER(dump) A_CMN(misc._misaligned_load_handler(dump)) /* reture the host interface type */ -#define A_IS_HOST_PRESENT() A_CMN(misc._is_host_present()) +#define A_IS_HOST_PRESENT() A_CMN(misc._is_host_present()) #define A_KBHIT(delay) A_CMN(misc._kbhit(delay)) #define A_GET_ROM_VER() A_CMN(misc._rom_version_get()) #else @@ -247,7 +247,7 @@ do { \ #define A_IS_HOST_PRESENT() #define A_KBHIT(delay) #define A_GET_ROM_VER() -#endif +#endif //#if SYSTEM_MODULE_DBG /* debug Support */ @@ -268,16 +268,16 @@ do { \ #define A_USB_EP0_SETUP() A_CMN(usb._usb_ep0_setup()) #define A_USB_EP0_TX_DATA() A_CMN(usb._usb_ep0_tx_data()) #define A_USB_EP0_RX_DATA() A_CMN(usb._usb_ep0_rx_data()) - + #define A_USB_GET_CONFIG() A_CMN(usb._usb_get_configuration()) #define A_USB_SET_CONFIG() A_CMN(usb._usb_set_configuration()) - + #define A_USB_GET_INTERFACE() A_CMN(usb._usb_get_interface()) #define A_USB_SET_INTERFACE() A_CMN(usb._usb_set_interface()) - + #define A_USB_STANDARD_CMD() A_CMN(usb._usb_standard_cmd()) #define A_USB_VENDOR_CMD() A_CMN(usb._usb_vendor_cmd()) - + #define A_USB_POWER_OFF() A_CMN(usb._usb_power_off()) #define A_USB_RESET_FIFO() A_CMN(usb._usb_reset_fifo()) #define A_USB_GEN_WDT() A_CMN(usb._usb_gen_wdt()) @@ -299,31 +299,31 @@ do { \ #else #define A_USB_INIT() -#define A_USB_TASK() +#define A_USB_TASK() #define A_USB_INIT_PHY() -#define A_USB_EP0_SETUP() -#define A_USB_EP0_TX() -#define A_USB_EP0_RX() - -#define A_USB_GET_CONFIG() -#define A_USB_SET_CONFIG() - -#define A_USB_GET_INTERFACE() -#define A_USB_SET_INTERFACE() - -#define A_USB_STANDARD_CMD() -#define A_USB_VENDOR_CMD() - +#define A_USB_EP0_SETUP() +#define A_USB_EP0_TX() +#define A_USB_EP0_RX() + +#define A_USB_GET_CONFIG() +#define A_USB_SET_CONFIG() + +#define A_USB_GET_INTERFACE() +#define A_USB_SET_INTERFACE() + +#define A_USB_STANDARD_CMD() +#define A_USB_VENDOR_CMD() + #define A_USB_POWER_OFF() #define A_USB_RESET_FIFO() #define A_USB_GEN_WDT() #define A_USB_JUMP_BOOT() #define A_USB_GET_DESCRIPTOR() -#define A_USB_SET_ADDRESS() -#define A_USB_SET_FEATURE() -#define A_USB_CLEAR_FEATURE() +#define A_USB_SET_ADDRESS() +#define A_USB_SET_FEATURE() +#define A_USB_CLEAR_FEATURE() #define A_USB_GET_STATUS() #define A_USB_SETUP_DESC() @@ -395,9 +395,9 @@ do { \ #if SYSTEM_MODULE_CLOCK -#define A_CLOCK_INIT(refclk_guess) A_CMN(clock._clock_init(refclk_guess)) -#define A_CLOCK_TICK() A_CMN(clock._clock_tick()) -#define A_CLOCK_GET_TICK() A_CMN(clock._clock_get_tick()) +#define A_CLOCK_INIT(refclk_guess) A_CMN(clock._clock_init(refclk_guess)) +#define A_CLOCK_TICK() A_CMN(clock._clock_tick()) +#define A_CLOCK_GET_TICK() A_CMN(clock._clock_get_tick()) /* * Get the number of millisecond ticks since the system was started. @@ -457,11 +457,8 @@ do { \ #define A_TIMER_RUN() \ A_CMN(timer._timer_run()) -#define A_PCI_BOOT_INIT() \ - A_CMN(pci.pci_boot_init()) - #define A_GMAC_BOOT_INIT() \ - A_CMN(gmac.gmac_boot_init()) + A_CMN(gmac.gmac_boot_init()) #if SYSTEM_MODULE_ALLOCRAM /* Default size of ALLOCRAM area */ @@ -477,7 +474,7 @@ do { A_CMN(allocram.cmnos_allocram_init((astart), (asize))); \ } while (0) -#define A_ALLOCRAM(nbytes) A_CMN(allocram.cmnos_allocram(0, (nbytes))) +#define A_ALLOCRAM(nbytes) A_CMN(allocram.cmnos_allocram(0, (nbytes))) #define A_ALLOCRAM_DEBUG() A_CMN(allocram.cmnos_allocram_debug()) @@ -541,7 +538,7 @@ typedef struct _A_cmnos_indirection_table { int (* hal_linkage_check)(int sz, struct _A_os_linkage_check *); unsigned int *start_bss; void (* app_start)(void); - + #if SYSTEM_MODULE_MEM struct mem_api mem; #endif @@ -562,9 +559,6 @@ typedef struct _A_cmnos_indirection_table { // struct dbg_api dbg; //#endif -#if SYSTEM_MODULE_PCI - struct pci_api pci; -#endif #if SYSTEM_MODULE_GMAC struct gmac_api gmac; @@ -661,10 +655,6 @@ extern void cmnos_wdt_module_install(struct wdt_api *); extern void cmnos_eep_module_install(struct eep_api *); #endif -#if SYSTEM_MODULE_PCI -extern void cmnos_pci_module_install(struct pci_api *); -#endif - extern void cmnos_tasklet_module_install(struct tasklet_api *); extern void cmnos_string_module_install(struct string_api *tbl); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_clock.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_clock.c deleted file mode 100755 index d1b959d..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_clock.c +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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 "sys_cfg.h" - -#if SYSTEM_MODULE_CLOCK -#include "athos_api.h" - -LOCAL A_UINT32 cticks = 0; - -#define A_BAND_DEFAULT 0 // not ust now, avoiding compile error/warning, Ryan - -LOCAL int curr_band = A_BAND_DEFAULT; -LOCAL void cmnos_pll_init(void); - -/* We accept frequencies within this deviation from an expected frequency. */ -#define A_REFCLK_DEVIATION 800000 - -#define A_REFCLK_UNKNOWN SYS_CFG_REFCLK_UNKNOWN -#define A_REFCLK_10_MHZ SYS_CFG_REFCLK_10_MHZ -#define A_REFCLK_20_MHZ SYS_CFG_REFCLK_20_MHZ -#define A_REFCLK_40_MHZ SYS_CFG_REFCLK_40_MHZ - -LOCAL const struct cmnos_clock_s { - A_refclk_speed_t refclk_speed; - A_UINT32 ticks_per_sec; - // below are useless so far, ryan - A_UINT32 pll_ctrl_5ghz; - A_UINT32 pll_ctrl_24ghz; - A_UINT32 pll_settling_time; /* 50us */ -} cmnos_clocking_table[] = { - {A_REFCLK_10_MHZ, - //10485760, - 10000000, - 0x0, - 0x0, - 0x0}, - - {A_REFCLK_20_MHZ, - //20971520, - 20000000, - 0x0, - 0x0, - 0x0}, - - {A_REFCLK_40_MHZ, - //41943040, - 40000000, - 0x0, - 0x0, - 0x0}, - - {A_REFCLK_UNKNOWN, - 0, - 0x0, - 0x0, - 0x0}, -}; - - -#define CMNOS_CLOCKING_TABLE_NUM_ENTRIES \ - (sizeof(cmnos_clocking_table)/sizeof(cmnos_clocking_table[0])) - -LOCAL struct cmnos_clock_s *clock_info; - - -LOCAL void cmnos_tick(void); - -/* - * In case we have PLL initialization problems, software can arrange - * (e.g. through BMI) to skip PLL initialization, and other software - * can handle it. - */ -int cmnos_skip_pll_init = 0; -A_UINT32 pll_ctrl_setting_24ghz = 0; -A_UINT32 pll_ctrl_setting_5ghz = 0; - -/* - * Use default hardware values for clock-related registers. - * The defaults can be overridden through BMI, EJTAG, or patches. - * - * CPU clock frequencies depend on what mode we're in (2.4GHz or 5GHz): - * NB: AR6001 has a "reduced power" mode, but we don't use it. - * - * AR6001/AR6002 FPGA CPU clock is always at 40MHz - * - * AR6001 Rev 2.x supports 4 CPU speed selections: - * selector: 0 1 2 3 - * 2.4GHz: 44, 88, 141, refclk - * 5 GHz: 40, 80, 128, refclk - * - * AR6002 supports 7 CPU/SoC speed selections via CORE_CLK: - * CORE_CLK.DIV setting: 6,7 5 4 3 2 1 0 - * divisor: 16 14 12 10 8 6 4 - * 2.4GHz (pll at 352MHz): 22 25.1, 29.3, 35.2, 44, 58.7, 88 - * 5 GHz (pll at 320MHz): 20 22.9, 26.7, 32, 40, 53.3, 80 - */ - -#if defined(DISABLE_SYNC_DURING_PLL_UPDATE_WAR) -A_UINT32 cpu_clock_setting; -#endif - -//A_COMPILE_TIME_ASSERT(verify_host_interest_small_enough, -// (sizeof(struct host_interest_s) <= HOST_INTEREST_MAX_SIZE)) - -//A_COMPILE_TIME_ASSERT(verify_flash_is_present_addr, -// ((A_UINT32)&HOST_INTEREST->hi_flash_is_present) == FLASH_IS_PRESENT_TARGADDR) - - -LOCAL void -cmnos_delay_us(int us) -{ -// A_UINT32 start_time = A_RTC_REG_READ(LF_TIMER_COUNT0_ADDRESS); -// unsigned int num_LF_ticks = (us+29) / 30 + 1; /* ~30.5us per LF tick */ - //A_UINT32 ref_clk = (clock_info->ticks_per_sec)/1000/1000; - A_UINT32 ref_clk = (clock_info->ticks_per_sec) >> 20; - A_UINT32 start_time = NOW(); - unsigned int num_ticks = us*ref_clk; // system_freq == number of ticks per 1us - - while ( (NOW() - start_time) < num_ticks) { - /* busy spin */; - } -} - -/* - * Return the number of milliseconds since startup. - * For this purpose, a "millisecond" is approximated by - * 1/32 of a 32KHz clock. - */ -LOCAL A_UINT32 -cmnos_milliseconds(void) -{ - //unsigned int lowfreq_timer; - - //lowfreq_timer = A_RTC_REG_READ(LF_TIMER_COUNT0_ADDRESS); - //lowfreq_timer = NOW(); - - /* LF0 timer counts at 32KHz, so adjust to approximate Ms with >> 5. */ - //lowfreq_timer = lowfreq_timer; - - /* - * NB: We do not account for wrap, which occurs every 36 - * hours when the 32768Hz low frequency timer wraps the - * 32 bit counter. - */ - cmnos_tick(); - - return cticks; -} - - -/* Expect 40MHz on AR6001 and 26MHz on AR6002 */ -//LOCAL A_refclk_speed_t cmnos_refclk_speed; - -LOCAL A_UINT32 -cmnos_refclk_speed_get(void) -{ - return clock_info->ticks_per_sec; -} - -/* The UART is clocked at the reference clock frequency. */ -LOCAL A_UINT32 -cmnos_uart_frequency(void) -{ -#if 0 -#if defined(FPGA) - return clock_info->ticks_per_sec; -#else - return clock_info->ticks_per_sec; -#endif -#else - /* TBD */ - /* do we need keep a struct to hold the data ?*/ -#endif -} - - -/* - * Adjust any state that needs adjusting when the clock - * speed changes. - */ -LOCAL void -cmnos_sysclk_change(void) -{ - /* OS may override this function */ -} - - -LOCAL void -cmnos_clockregs_init(void) -{ - /* TBD */ - /* we might don't need this init() */ -} - -/* - * Make whatever system-level changes are needed in order to operate - * in the specified wireless band. - * - * For AR6K, we just need to set the PLL appropriately. - */ -LOCAL void -cmnos_wlan_band_set(int which_band) -{ - /* TBD */ - /* we don't have wlan need to config */ -} - -LOCAL void -cmnos_pll_init(void) -{ - /* TBD */ - /* we don't have pll now, */ -} - -LOCAL void -cmnos_clock_init(A_UINT32 ref_clk) -{ -#if 1 - unsigned int i; - - /* Look up the nearest supported frequency. */ - for (i = 0; - i < CMNOS_CLOCKING_TABLE_NUM_ENTRIES-1; - i++) - { - A_UINT32 ticks_per_sec; - - ticks_per_sec = cmnos_clocking_table[i].ticks_per_sec; - if ((ref_clk > ticks_per_sec - A_REFCLK_DEVIATION) && - (ref_clk < ticks_per_sec + A_REFCLK_DEVIATION)) - { - break; - } - } - - clock_info = (struct cmnos_clock_s *)&cmnos_clocking_table[i]; -// HOST_INTEREST->hi_clock_info = (A_UINT32)clock_info; - -#endif -} - -//////////////////////////////////////////////////////////////////////// -// software emulate ticks on millisecond based -LOCAL void -cmnos_tick(void) -{ -#if 0 - - set_ccompare0(xthal_get_ccompare(XTENSA_TIMER_0)+ONE_MSEC); - - cticks++; - -#else - static A_UINT32 last_tick = 0; - A_UINT32 current_tick = NOW(); - A_UINT32 delta_tick; - - // tick is 32 bit register, will overflow soon - if( current_tick < last_tick ) - { - delta_tick = (A_UINT32 )((0xffffffff-last_tick)+current_tick+1)/(1000); - } - else - { - delta_tick = (A_UINT32 ) (current_tick - last_tick)/(1000); - } - - if( delta_tick > 0 ) - last_tick = current_tick; - - cticks += delta_tick; -#endif -} - -//////////////////////////////////////////////////////////////////////// - -void -cmnos_clock_module_install(struct clock_api *tbl) -{ - tbl->_clock_init = cmnos_clock_init; - tbl->_clockregs_init = cmnos_clockregs_init; - tbl->_delay_us = cmnos_delay_us; - tbl->_wlan_band_set = cmnos_wlan_band_set; - tbl->_refclk_speed_get = cmnos_refclk_speed_get; - tbl->_milliseconds = cmnos_milliseconds; - tbl->_uart_frequency = cmnos_uart_frequency; - tbl->_sysclk_change = cmnos_sysclk_change; - - tbl->_clock_tick = cmnos_tick; -} -#endif /* SYSTEM_MODULE_CLOCK */ - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_printf.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_printf.c deleted file mode 100755 index 1f0a55e..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_printf.c +++ /dev/null @@ -1,322 +0,0 @@ -//####ECOSGPLCOPYRIGHTBEGIN#### -// ------------------------------------------- -// This file is part of eCos, the Embedded Configurable Operating System. -// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. -// Copyright (C) 2002 Gary Thomas -// -// eCos 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 or (at your option) any later version. -// -// eCos 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 eCos; if not, write to the Free Software Foundation, Inc., -// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. -// -// As a special exception, if other files instantiate templates or use macros -// or inline functions from this file, or you compile this file and link it -// with other works to produce a work based on this file, this file does not -// by itself cause the resulting work to be covered by the GNU General Public -// License. However the source code for this file must still be made available -// in accordance with section (3) of the GNU General Public License. -// -// This exception does not invalidate any other reasons why a work based on -// this file might be covered by the GNU General Public License. -// -// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. -// at http://sources.redhat.com/ecos/ecos-license/ -// ------------------------------------------- -//####ECOSGPLCOPYRIGHTEND#### - -#include "dt_defs.h" -#include "sys_cfg.h" - -#if SYSTEM_MODULE_PRINT - -#include "athos_api.h" - -#define is_digit(c) ((c >= '0') && (c <= '9')) - -#if defined(__GNUC__) && defined(__mips__) -#define va_list __builtin_va_list -#define va_arg __builtin_va_arg -#define va_start __builtin_va_start -#define va_end __builtin_va_end -#define va_copy __builtin_va_copy -#endif - -#if defined(__XCC__) -#include "stdarg.h" -#define va_list __gnuc_va_list -#endif - -void -cmnos_write_char(char c) -{ - if (c == '\n') { - A_PUTC('\r'); - A_PUTC('\n'); - } else if (c == '\r') { - } else { - A_PUTC(c); - } -} - -void (*_putc)(char c) = cmnos_write_char; - -static int _cvt(unsigned long val, char *buf, long radix, char *digits) -{ - char temp[80]; - char *cp = temp; - int length = 0; - - if (val == 0) { - /* Special case */ - *cp++ = '0'; - } else { - while (val) { - *cp++ = digits[val % radix]; - val /= radix; - } - } - while (cp != temp) { - *buf++ = *--cp; - length++; - } - *buf = '\0'; - return (length); -} - - -static int cmnos_vprintf(void (*putc)(char c), const char *fmt, va_list ap) -{ - char buf[sizeof(long)*8]; - char c, sign, *cp=buf; - int left_prec, right_prec, zero_fill, pad, pad_on_right, - i, islong, islonglong; - long val = 0; - int res = 0, length = 0; - - while ((c = *fmt++) != '\0') { - if (c == '%') { - c = *fmt++; - left_prec = right_prec = pad_on_right = islong = islonglong = 0; - if (c == '-') { - c = *fmt++; - pad_on_right++; - } - if (c == '0') { - zero_fill = TRUE; - c = *fmt++; - } else { - zero_fill = FALSE; - } - while (is_digit(c)) { - left_prec = (left_prec * 10) + (c - '0'); - c = *fmt++; - } - if (c == '.') { - c = *fmt++; - zero_fill++; - while (is_digit(c)) { - right_prec = (right_prec * 10) + (c - '0'); - c = *fmt++; - } - } else { - right_prec = left_prec; - } - sign = '\0'; - if (c == 'l') { - // 'long' qualifier - c = *fmt++; - islong = 1; - if (c == 'l') { - // long long qualifier - c = *fmt++; - islonglong = 1; - } - } - // Fetch value [numeric descriptors only] - switch (c) { - case 'p': - islong = 1; - case 'd': - case 'D': - case 'x': - case 'X': - case 'u': - case 'U': - case 'b': - case 'B': - if (islonglong) { - val = va_arg(ap, long); - } else if (islong) { - val = (long)va_arg(ap, long); - } else{ - val = (long)va_arg(ap, int); - } - if ((c == 'd') || (c == 'D')) { - if (val < 0) { - sign = '-'; - val = -val; - } - } else { - // Mask to unsigned, sized quantity - if (islong) { - val &= (1ULL << (sizeof(long) * 8)) - 1; - } else{ - val &= (1ULL << (sizeof(int) * 8)) - 1; - } - } - break; - default: - break; - } - // Process output - switch (c) { - case 'p': // Pointer - (*putc)('0'); - (*putc)('x'); - zero_fill = TRUE; - left_prec = sizeof(unsigned long)*2; - case 'd': - case 'D': - case 'u': - case 'U': - case 'x': - case 'X': - switch (c) { - case 'd': - case 'D': - case 'u': - case 'U': - length = _cvt(val, buf, 10, "0123456789"); - break; - case 'p': - case 'x': - length = _cvt(val, buf, 16, "0123456789abcdef"); - break; - case 'X': - length = _cvt(val, buf, 16, "0123456789ABCDEF"); - break; - } - cp = buf; - break; - case 's': - case 'S': - cp = va_arg(ap, char *); - if (cp == NULL) { - cp = ""; - } - length = 0; - while (cp[length] != '\0') length++; - break; - case 'c': - case 'C': - c = va_arg(ap, int /*char*/); - (*putc)(c); - res++; - continue; - case 'b': - case 'B': - length = left_prec; - if (left_prec == 0) { - if (islonglong) - length = sizeof(long)*8; - else if (islong) - length = sizeof(long)*8; - else - length = sizeof(int)*8; - } - for (i = 0; i < length-1; i++) { - buf[i] = ((val & ((long)1< 0) { - (*putc)(c); - res++; - } - } - if (sign != '\0') { - (*putc)(sign); - res++; - } - while (length-- > 0) { - c = *cp++; - (*putc)(c); - res++; - } - if (pad_on_right) { - while (pad-- > 0) { - (*putc)(' '); - res++; - } - } - } else { - (*putc)(c); - res++; - } - } - return (res); -} - -int cmnos_printf(const char *fmt, ...) -{ - va_list ap; - int ret; - - va_start(ap, fmt); - - //if (A_SERIAL_ENABLED()) { - if (1) { - ret = cmnos_vprintf(_putc, fmt, ap); - } else { - ret = 0; - } - - va_end(ap); - - return (ret); -} - -void -cmnos_printf_init(void) -{ -} - -void cmnos_printf_module_install(struct printf_api *tbl) -{ - tbl->_printf_init = cmnos_printf_init; - tbl->_printf = cmnos_printf; -} - -#endif /* SYSTEM_MODULE_PRINT */ - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_sflash.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_sflash.c index 1d02293..4641162 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_sflash.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/cmnos_sflash.c @@ -449,7 +449,7 @@ cmnos_sflash_init(void) /* "Autosize-determination of the address size of serial flash" is obsolete according to Brian Yang's mail : * The designers reached an conclusion that the spi master (the apb_spi interface control) will be - * modified as ¡§presuming the attached flash model to be 24-bit addressing¡¨, i.e., no more + * modified as presuming the attached flash model to be 24-bit addressing, i.e., no more * auto-size detection! * Hence you are free to force the 24-bit addressing in the *.c test code. */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c index 451059b..04dce3d 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.c @@ -32,6 +32,9 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + #include "sys_cfg.h" #include "athos_api.h" @@ -439,7 +442,7 @@ int db_help_cmd(char *cmd, char *param1, char *param2, char *param3) static int db_ldr_cmd(char *cmd, char *param1, char *param2, char *param3) { - unsigned long val; + unsigned long val = 0; unsigned long addr; char val_str[20]; char addr_str[20]; @@ -561,7 +564,7 @@ static int db_intr_cmd(char *cmd, char *param1, char *param2, char *param3) pending_intrs = A_INTR_GET_INTRENABLE()&(~CMNOS_IMASK_XTTIMER); A_INTR_SET_INTRENABLE(pending_intrs); A_PRINTF("- intr [0x%08x]\n\r", pending_intrs); - + } else if( db_ascii_to_hex(param2, &data)==0 ) { @@ -569,7 +572,7 @@ static int db_intr_cmd(char *cmd, char *param1, char *param2, char *param3) delay = data; else delay = 3; - + A_PRINTF("==>set cb to %d seconds \n\r", delay); } @@ -620,7 +623,7 @@ static void clk_change(uint32_t clk, uint32_t ratio, uint32_t baud) clk_sel = 4; break; case 40: - clk_sel = 6; + clk_sel = 6; break; default: clk_sel = 6; @@ -637,7 +640,7 @@ static int db_clock_cmd(char *cmd, char *param1, char *param2, char *param3) uint32_t ratio = 1; uint32_t baud = 19200; uint32_t clk = 0; - + if( db_ascii_to_int(param1, &clk) != -1 ) { A_PRINTF("changing clock to %d\n", clk); @@ -664,7 +667,7 @@ static int db_info_cmd(char *cmd, char *param1, char *param2, char *param3) return 1; #else - + { uint32_t ccount1; uint32_t ccount2; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.h index fa771ec..956eec4 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/dbg_api.h @@ -72,5 +72,6 @@ struct dbg_api { void (*_dbg_task)(void); }; +void cmnos_dbg_module_install(struct dbg_api *apis); #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_cmnos_clock_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_cmnos_clock_patch.c index acfcab2..b6816a2 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_cmnos_clock_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_cmnos_clock_patch.c @@ -38,7 +38,7 @@ a_uint32_t ref_clk = 0; extern a_uint32_t cticks; -// clock change +// clock change // void cmnos_clock_init_patch(a_uint32_t refclk) { @@ -46,7 +46,7 @@ void cmnos_clock_init_patch(a_uint32_t refclk) } // retrieve current clock setting -// +// a_uint32_t cmnos_refclk_speed_get_patch(void) { return ref_clk; @@ -59,7 +59,7 @@ void cmnos_delay_us_patch(int us) { a_uint32_t start_time = NOW(); unsigned int num_ticks = us*ref_clk; // system_freq == number of ticks per 1us - + while ( (NOW() - start_time) < num_ticks) { /* busy spin */ ; @@ -84,11 +84,11 @@ void cmnos_tick_patch(void) } // get current sysmem up time in milliseconds based -// +// a_uint32_t cmnos_milliseconds_patch(void) { cmnos_tick_patch(); - + return (cticks); } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c index 32dc65e..9742564 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/cmnos/k2_fw_cmnos_printf.c @@ -13,9 +13,8 @@ // 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 eCos; if not, write to the Free Software Foundation, Inc., -// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. +// You should have received a copy of the GNU General Public License +// along with this program. If not, see . // // As a special exception, if other files instantiate templates or use macros // or inline functions from this file, or you compile this file and link it diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/k2_HIF_usb_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/k2_HIF_usb_patch.c index ab8237f..6276f79 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/k2_HIF_usb_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/k2_HIF_usb_patch.c @@ -40,13 +40,14 @@ #include #include #include -#include +#include #include +#include #include "hif_usb.h" /* - * -- support more than 64 bytes command on ep4 -- + * -- support more than 64 bytes command on ep4 -- */ int _HIFusb_get_max_msg_len_patch(hif_handle_t handle, int pipe) { @@ -54,7 +55,7 @@ int _HIFusb_get_max_msg_len_patch(hif_handle_t handle, int pipe) case HIF_USB_PIPE_INTERRUPT: case HIF_USB_PIPE_COMMAND: return 512; - + default: return 1600; } @@ -67,5 +68,5 @@ void _HIFusb_isr_handler_patch(hif_handle_t h) { A_USB_FW_TASK(); - _HIFusb_isr_handler(); + _HIFusb_isr_handler(h); } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_magpie_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_magpie_patch.c index 699ce73..4586a08 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_magpie_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_magpie_patch.c @@ -32,6 +32,9 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + #include "usb_defs.h" #include "usb_type.h" #include "usb_pre.h" @@ -123,11 +126,11 @@ static void turn_off_merlin() default_data[6] = 0x1aaabe40; default_data[7] = 0xbe105554; default_data[8] = 0x00043007; - + for(i=0; i<9; i++) { A_DELAY_USECS(10); - + iowrite32(0x10ff4040, default_data[i]); } A_DELAY_USECS(10); @@ -140,7 +143,7 @@ static void turn_off_merlin() * -- turn_off_phy -- * * . write shift register to both pcie ep and rc - * . + * . */ static void turn_off_phy() @@ -161,16 +164,16 @@ static void turn_off_phy() for(i=0; i<9; i++) { - // check for the done bit to be set + // check for the done bit to be set while (1) { if (ioread32(0x40028) & BIT31) break; } - + A_DELAY_USECS(1); - + iowrite32(0x40024, default_data[i]); } iowrite32(0x40028, BIT0); @@ -178,12 +181,12 @@ static void turn_off_phy() static void turn_off_phy_rc() { - + volatile uint32_t default_data[9]; uint32_t i=0; - + A_PRINTF("turn_off_phy_rc\n"); - + default_data[0] = 0x9248fd00; default_data[1] = 0x24924924; default_data[2] = 0xa8000019; @@ -193,11 +196,11 @@ static void turn_off_phy_rc() default_data[6] = 0x1aaabe40; default_data[7] = 0xbe105554; default_data[8] = 0x00043007; - + for(i=0; i<9; i++) { - // check for the done bit to be set - + // check for the done bit to be set + while (1) { if (ioread32(0x40028) & BIT31) @@ -218,7 +221,7 @@ volatile uint32_t gpio = 0x0; * -- patch zfTurnOffPower -- * * . set suspend counter to non-zero value - * . + * . */ void zfTurnOffPower_patch(void) { @@ -234,13 +237,13 @@ void zfTurnOffPower_patch(void) //32clk wait for External ETH PLL stable A_DELAY_USECS(100); - + iowrite32(0x52000, 0x70303); /* read back 0x703f7 */ iowrite32(0x52008, 0x0e91c); /* read back 0x1e948 */ - + io32_set(MAGPIE_REG_SUSPEND_ENABLE_ADDR, BIT0); - // wake up, and turn on cpu, eth, pcie and usb pll + // wake up, and turn on cpu, eth, pcie and usb pll _fw_power_on(); // restore gpio and other settings _fw_restore_dma_fifo(); @@ -294,7 +297,7 @@ static void _fw_reset_dma_fifo() A_PRINTF("0x4048 0x%x ......\n", ioread32(0x10ff4048)); A_PRINTF("0x404C 0x%x ......\n", ioread32(0x10ff404C)); A_PRINTF("0x4088 0x%x ......\n", ioread32(0x10ff4088)); - + // turn off merlin turn_off_merlin(); // pcie ep @@ -305,7 +308,7 @@ static void _fw_reset_dma_fifo() io32_clr(0x40040, BIT0 | BIT1); A_PRINTF("turn_off_magpie_ep_end ......\n"); - // pcie rc + // pcie rc A_PRINTF("turn_off_magpie_rc_start ......\n"); A_DELAY_USECS(measure_time); io32_clr(0x40040, BIT0); @@ -315,7 +318,7 @@ static void _fw_reset_dma_fifo() A_PRINTF("0x4001C %p ......\n", ioread32(0x4001c)); A_PRINTF("0x40040 %p ......\n", ioread32(0x40040)); - + /* turn off pcie_pll - power down (bit16) */ A_PRINTF(" before pwd PCIE PLL CFG:0x5601C: 0x%08x\n", ioread32(0x5601C)); @@ -348,7 +351,7 @@ static void _fw_power_off() * 2. turn off CPU PLL * 3. turn off ETH PLL * 4. disable ETH PLL bypass and update - * 4.1 set suspend timeout + * 4.1 set suspend timeout * 5. set SUSPEND_ENABLE */ @@ -371,14 +374,14 @@ static void _fw_power_off() } static void _fw_power_on() -{ +{ /* * 1. turn on CPU PLL * 2. disable CPU bypass * 3. turn on ETH PLL * 4. disable ETH PLL bypass and update * 5. turn on pcie pll - */ + */ io32_clr(MAGPIE_REG_ETH_PLL_ADDR, BIT16); @@ -389,7 +392,7 @@ static void _fw_power_on() static void _fw_restore_dma_fifo(void) { io32_clr(0x5601C, BIT18); - + /* reset pcie_rc shift */ io32_clr(0x50010, BIT10 | BIT8 | BIT7); A_DELAY_USECS(1); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c index d1cc35e..97385ad 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/hif/usb_api_main_patch.c @@ -1,5 +1,45 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * Copyright (c) 2016 Oleksij Rempel + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. + */ + /* shared patches for k2 and magpie */ +#include +#include + #include "usb_defs.h" #include "usb_type.h" #include "usb_pre.h" @@ -133,7 +173,7 @@ void usb_status_in_patch(void) } /* - * support more than 64 bytes command on ep4 + * support more than 64 bytes command on ep4 */ void usb_reg_out_patch(void) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc.c index 476155e..a9a9a20 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc.c @@ -33,21 +33,21 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * + * @File: + * * @Abstract: host target communications - * - * @Notes: + * + * @Notes: */ #include -#include +#include #include #include #include -#include -#include +#include +#include -#include "htc_internal.h" +#include "htc_internal.h" #define A_UNCACHED_ADDR(addr) addr @@ -74,106 +74,106 @@ void _HTC_PauseRecv(HTC_ENDPOINT_ID EndpointID); void _HTC_ResumeRecv(HTC_ENDPOINT_ID EndpointID); LOCAL void HTCProcessConnectMsg(HTC_CONTEXT *pHTC, HTC_CONNECT_SERVICE_MSG *pMsg); LOCAL void HTCProcessConfigPipeMsg(HTC_CONTEXT *pHTC, HTC_CONFIG_PIPE_MSG *pMsg); -LOCAL void RedistributeCredit(adf_nbuf_t buf, int toPipeId); +LOCAL void RedistributeCredit(adf_nbuf_t buf, int toPipeId); LOCAL void _HTC_Shutdown(htc_handle_t htcHandle); -/* macro to check if the service wants to prevent credit dribbling by using +/* macro to check if the service wants to prevent credit dribbling by using a dynamic threshold */ #define CHECK_AND_ADJUST_CREDIT_THRESHOLD(pEndpoint) \ if ((pEndpoint)->ConnectionFlags & HTC_CONNECT_FLAGS_REDUCE_CREDIT_DRIBBLE) { \ AdjustCreditThreshold((pEndpoint)); \ - } + } LOCAL void HTC_AssembleBuffers(HTC_CONTEXT *pHTC, int Count, int Size) { - BUF_Pool_create_pool(pHTC->PoolHandle, POOL_ID_HTC_CONTROL, Count, Size); + BUF_Pool_create_pool(pHTC->PoolHandle, POOL_ID_HTC_CONTROL, Count, Size); } LOCAL htc_handle_t _HTC_Init(HTC_SETUP_COMPLETE_CB SetupComplete, HTC_CONFIG *pConfig) { HIF_CALLBACK hifCBConfig; - HTC_CONTEXT *pHTC; - + HTC_CONTEXT *pHTC; + pHTC = (HTC_CONTEXT *)adf_os_mem_alloc(sizeof(HTC_CONTEXT)); - + adf_os_mem_zero(pHTC, sizeof(HTC_CONTEXT)); pHTC->OSHandle = pConfig->OSHandle; pHTC->PoolHandle = pConfig->PoolHandle; pHTC->hifHandle = pConfig->HIFHandle; - + hifCBConfig.send_buf_done = A_INDIR(htc._HTC_SendDoneHandler); hifCBConfig.recv_buf = A_INDIR(htc._HTC_MsgRecvHandler); hifCBConfig.context = pHTC; - + /* initialize hardware layer */ HIF_register_callback(pConfig->HIFHandle, &hifCBConfig); - + /* see if the host wants us to override the number of ctrl buffers */ pHTC->NumBuffersForCreditRpts = 0; - + if (0 == pHTC->NumBuffersForCreditRpts) { /* nothing to override, simply set default */ - pHTC->NumBuffersForCreditRpts = HTC_DEFAULT_NUM_CTRL_BUFFERS; - } - + pHTC->NumBuffersForCreditRpts = HTC_DEFAULT_NUM_CTRL_BUFFERS; + } + pHTC->MaxEpPendingCreditRpts = 0; - + if (0 == pHTC->MaxEpPendingCreditRpts) { - pHTC->MaxEpPendingCreditRpts = HTC_DEFAULT_MAX_EP_PENDING_CREDIT_REPORTS; + pHTC->MaxEpPendingCreditRpts = HTC_DEFAULT_MAX_EP_PENDING_CREDIT_REPORTS; } /* calculate the total allocation size based on the number of credit report buffers */ pHTC->CtrlBufferAllocSize = MIN_CREDIT_BUFFER_ALLOC_SIZE * pHTC->NumBuffersForCreditRpts; /* we need at least enough buffer space for 1 ctrl message */ pHTC->CtrlBufferAllocSize = A_MAX(pHTC->CtrlBufferAllocSize,MAX_HTC_SETUP_MSG_SIZE); - + /* save the size of each buffer/credit we will receive */ pHTC->RecvBufferSize = pConfig->CreditSize; //RecvBufferSize; pHTC->TotalCredits = pConfig->CreditNumber; pHTC->TotalCreditsAssigned = 0; - + /* setup the pseudo service that handles HTC control messages */ pHTC->HTCControlService.ProcessRecvMsg = A_INDIR(htc._HTC_ControlSvcProcessMsg); pHTC->HTCControlService.ProcessSendBufferComplete = A_INDIR(htc._HTC_ControlSvcProcessSendComplete); pHTC->HTCControlService.TrailerSpcCheckLimit = HTC_CTRL_BUFFER_CHECK_SIZE; pHTC->HTCControlService.MaxSvcMsgSize = MAX_HTC_SETUP_MSG_SIZE; pHTC->HTCControlService.ServiceCtx = pHTC; - + /* automatically register this pseudo service to endpoint 1 */ pHTC->Endpoints[ENDPOINT0].pService = &pHTC->HTCControlService; - HIF_get_default_pipe(pHTC->hifHandle, &pHTC->Endpoints[ENDPOINT0].UpLinkPipeID, + HIF_get_default_pipe(pHTC->hifHandle, &pHTC->Endpoints[ENDPOINT0].UpLinkPipeID, &pHTC->Endpoints[ENDPOINT0].DownLinkPipeID); - + /* Initialize control pipe so we could receive the HTC control packets */ // @TODO: msg size! - HIF_config_pipe(pHTC->hifHandle, pHTC->Endpoints[ENDPOINT0].UpLinkPipeID, 1); - + HIF_config_pipe(pHTC->hifHandle, pHTC->Endpoints[ENDPOINT0].UpLinkPipeID, 1); + /* set the first free endpoint */ pHTC->CurrentEpIndex = ENDPOINT1; pHTC->SetupCompleteCb = SetupComplete; - + /* setup buffers for just the setup phase, we only need 1 buffer to handle * setup */ HTC_AssembleBuffers(pHTC, 4, MAX_HTC_SETUP_MSG_SIZE); - + /* start hardware layer so that we can queue buffers */ HIF_start(pHTC->hifHandle); - + return pHTC; } LOCAL void _HTC_Shutdown(htc_handle_t htcHandle) { HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; - + adf_os_mem_free(pHTC); } LOCAL void _HTC_RegisterService(htc_handle_t htcHandle, HTC_SERVICE *pService) { HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; - + /* add it to the list */ pService->pNext = pHTC->pServiceList; pHTC->pServiceList = pService; @@ -185,20 +185,20 @@ LOCAL void _HTC_Ready(htc_handle_t htcHandle) HTC_READY_MSG *pReady; a_uint8_t *addr; HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; - + pBuffer = HTCAllocMsgBuffer(pHTC); - + /* an optimization... the header length is chosen to * be aligned on a 16 bit bounday, the fields in the message are designed to * be aligned */ - addr = adf_nbuf_put_tail(pBuffer, sizeof(HTC_READY_MSG)); - pReady = (HTC_READY_MSG *)addr; - A_MEMZERO(pReady,sizeof(HTC_READY_MSG)); + addr = adf_nbuf_put_tail(pBuffer, sizeof(HTC_READY_MSG)); + pReady = (HTC_READY_MSG *)addr; + A_MEMZERO(pReady,sizeof(HTC_READY_MSG)); pReady->MessageID = adf_os_htons(HTC_MSG_READY_ID); pReady->CreditSize = adf_os_htons((A_UINT16)pHTC->RecvBufferSize); pReady->CreditCount = adf_os_htons((A_UINT16)pHTC->TotalCredits); pReady->MaxEndpoints = ENDPOINT_MAX; - + /* send out the message */ HTC_SendMsg(pHTC, ENDPOINT0, pBuffer); /* now we need to wait for service connection requests */ @@ -206,24 +206,24 @@ LOCAL void _HTC_Ready(htc_handle_t htcHandle) LOCAL void ReturnBuffers(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t pBuffers, A_BOOL sendCreditFlag) -{ +{ int nbufs = 1; HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; - + /* supply some head-room again */ adf_nbuf_push_head(pBuffers, HTC_HDR_LENGTH); - + /* enqueue all buffers to the single mailbox */ - HIF_return_recv_buf(pHTC->hifHandle, pHTC->Endpoints[EndpointID].UpLinkPipeID, pBuffers); - - if (pHTC->StateFlags & HTC_STATE_SETUP_COMPLETE) { + HIF_return_recv_buf(pHTC->hifHandle, pHTC->Endpoints[EndpointID].UpLinkPipeID, pBuffers); + + if (pHTC->StateFlags & HTC_STATE_SETUP_COMPLETE) { A_UINT32 epCreditMask = (1 << EndpointID); /* we are running normally */ /* update pending credit counts with the number of buffers that were added */ pHTC->Endpoints[EndpointID].CreditsToReturn += (A_INT16)nbufs; - pHTC->Endpoints[EndpointID].CreditsConsumed -= (A_INT16)nbufs; + pHTC->Endpoints[EndpointID].CreditsConsumed -= (A_INT16)nbufs; /* update bit map that this endpoint has non-zero credits */ - pHTC->EpCreditPendingMap |= epCreditMask; + pHTC->EpCreditPendingMap |= epCreditMask; if (sendCreditFlag) { HTCCheckAndSendCreditReport(pHTC, epCreditMask,&pHTC->Endpoints[EndpointID],EndpointID); @@ -231,11 +231,11 @@ LOCAL void ReturnBuffers(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, } else { /* we have not started yet so all return operations are simply adding buffers - * to the interface at startup, so we can keep track of how many total + * to the interface at startup, so we can keep track of how many total * credits we get */ /* update global count that will be returned to the host */ pHTC->TotalCredits += nbufs; - } + } } LOCAL void _HTC_ReturnBuffersList(htc_handle_t htcHandle, @@ -264,38 +264,38 @@ LOCAL void _HTC_ReturnBuffers(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID { ReturnBuffers(htcHandle, EndpointID, pBuffers, TRUE); } - + LOCAL void _HTC_SendMsg(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t pBuffers) { HTC_FRAME_HDR *pHTCHdr; int totsz; - HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; + HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; HTC_BUF_CONTEXT *ctx; - + ctx = (HTC_BUF_CONTEXT *)adf_nbuf_get_priv(pBuffers); - + /* init total size (this does not include the space we will put in for the HTC header) */ totsz = adf_nbuf_len(pBuffers); - + /* the first buffer stores the header */ /* back up buffer by a header size when we pass it down, by agreed upon convention the caller - * points the buffer to it's payload and leaves head room for the HTC header + * points the buffer to it's payload and leaves head room for the HTC header * Note: in HTCSendDoneHandler(), we undo this so that the caller get's it's buffer - * back untainted */ + * back untainted */ pHTCHdr = (HTC_FRAME_HDR *)adf_nbuf_push_head(pBuffers, HTC_HDR_LENGTH); - + /* flag that this is the header buffer that was modified */ - ctx->htc_flags |= HTC_FLAGS_BUF_HDR; + ctx->htc_flags |= HTC_FLAGS_BUF_HDR; /* mark where this buffer came from */ - ctx->end_point = EndpointID; + ctx->end_point = EndpointID; /* the header start is ALWAYS aligned since we DMA it directly */ /* set some fields, the rest of them will be filled below when we check for * trailer space */ pHTCHdr->Flags = 0; - pHTCHdr->EndpointID = EndpointID; - + pHTCHdr->EndpointID = EndpointID; + /* check opportunistically if we can return any reports via a trailer */ do { int room,i,totalReportBytes; @@ -304,7 +304,7 @@ LOCAL void _HTC_SendMsg(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, HTC_RECORD_HDR *pRecHdr; int pipeMaxLen; A_UINT32 roomForPipeMaxLen; - + /* figure out how much room the last buffer can spare */ pipeMaxLen = HIF_get_max_msg_len(pHTC->hifHandle, pHTC->Endpoints[EndpointID].DownLinkPipeID); @@ -312,52 +312,52 @@ LOCAL void _HTC_SendMsg(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, if ( roomForPipeMaxLen < 0 ) { roomForPipeMaxLen = 0; } - + room = adf_os_min( adf_nbuf_tailroom(pBuffers), roomForPipeMaxLen); if (room < (int)(sizeof(HTC_CREDIT_REPORT) + sizeof(HTC_RECORD_HDR))) { /* no room for any reports */ - break; - } + break; + } /* note, a record header only has 8 bit fields, so this is safe. - * we need an uncached pointer here too */ + * we need an uncached pointer here too */ totalReportBytes = 0; - - /* get a copy */ - creditsPendingMap = pHTC->EpCreditPendingMap; - + + /* get a copy */ + creditsPendingMap = pHTC->EpCreditPendingMap; + /* test pending map to see if we can send a report , if any - * credits are available, we might as well send them on the + * credits are available, we might as well send them on the * unused space in the buffer */ - if (creditsPendingMap) { - + if (creditsPendingMap) { + pRecHdr = (HTC_RECORD_HDR *)adf_nbuf_put_tail(pBuffers, sizeof(HTC_RECORD_HDR)); - + /* set the ID, the length will be updated with the number of credit reports we * can fit (see below) */ pRecHdr->RecordID = HTC_RECORD_CREDITS; pRecHdr->Length = 0; - /* the credit report follows the record header */ + /* the credit report follows the record header */ totalReportBytes += sizeof(HTC_RECORD_HDR); room -= sizeof(HTC_RECORD_HDR); - + /* walkthrough pending credits map and build the records */ - for (i = 0; - (creditsPendingMap != 0) && (room >= (int)sizeof(HTC_CREDIT_REPORT)); - i++) { + for (i = 0; + (creditsPendingMap != 0) && (room >= (int)sizeof(HTC_CREDIT_REPORT)); + i++) { compareMask = (1 << i); if (compareMask & creditsPendingMap) { - + pCreditRpt = (HTC_CREDIT_REPORT *)adf_nbuf_put_tail(pBuffers, sizeof(HTC_CREDIT_REPORT)); - + /* clear pending mask, we are going to return all these credits */ creditsPendingMap &= ~(compareMask); /* add this record */ pCreditRpt->EndpointID = i; pCreditRpt->Credits = (A_UINT8)pHTC->Endpoints[i].CreditsToReturn; /* remove pending credits, we always send deltas */ - pHTC->Endpoints[i].CreditsToReturn = 0; + pHTC->Endpoints[i].CreditsToReturn = 0; /* adjust new threshold for this endpoint if needed */ CHECK_AND_ADJUST_CREDIT_THRESHOLD(&pHTC->Endpoints[i]); /* update this record length */ @@ -370,36 +370,36 @@ LOCAL void _HTC_SendMsg(htc_handle_t htcHandle, HTC_ENDPOINT_ID EndpointID, } } } - - /* update new pending credits map */ + + /* update new pending credits map */ pHTC->EpCreditPendingMap = creditsPendingMap; } - + if (totalReportBytes <= 0) { break; } - + /* must fit into a byte, this should never actually happen since - * the maximum possible number of endpoints is 32. + * the maximum possible number of endpoints is 32. * The trailer can have at most 1 credit record with up to 32 reports in the record. * The trailer can have at most 1 lookahead record with only 1 lookahead report in the record. */ - - /* set header option bytes */ + + /* set header option bytes */ pHTCHdr->ControlBytes[0] = totalReportBytes; /* HTC frame contains a trailer */ pHTCHdr->Flags |= HTC_FLAGS_RECV_TRAILER; /* increment total size by the reports we added */ totsz += totalReportBytes; - /* adjust the last buffer we used for adding on the trailer */ + /* adjust the last buffer we used for adding on the trailer */ } while (FALSE); - + if (totsz == 0) { } - + /* set length for message (this includes any reports that were added above) */ - pHTCHdr->PayloadLen = adf_os_htons(totsz); - HIF_send_buffer(pHTC->hifHandle, pHTC->Endpoints[EndpointID].DownLinkPipeID, pBuffers); + pHTCHdr->PayloadLen = adf_os_htons(totsz); + HIF_send_buffer(pHTC->hifHandle, pHTC->Endpoints[EndpointID].DownLinkPipeID, pBuffers); } void _HTC_PauseRecv(HTC_ENDPOINT_ID EndpointID) @@ -412,19 +412,19 @@ void _HTC_ResumeRecv(HTC_ENDPOINT_ID EndpointID) int _HTC_GetReservedHeadroom(htc_handle_t htcHandle) { - HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; - + HTC_CONTEXT *pHTC = (HTC_CONTEXT *)htcHandle; + return HTC_HDR_LENGTH + HIF_get_reserved_headroom(pHTC->hifHandle); } void htc_module_install(struct htc_apis *pAPIs) -{ +{ pAPIs->_HTC_Init = _HTC_Init; pAPIs->_HTC_ReturnBuffers = _HTC_ReturnBuffers; pAPIs->_HTC_ReturnBuffersList = _HTC_ReturnBuffersList; pAPIs->_HTC_Ready = _HTC_Ready; pAPIs->_HTC_RegisterService = _HTC_RegisterService; - pAPIs->_HTC_SendMsg = _HTC_SendMsg; + pAPIs->_HTC_SendMsg = _HTC_SendMsg; pAPIs->_HTC_Shutdown = _HTC_Shutdown; pAPIs->_HTC_GetReservedHeadroom = _HTC_GetReservedHeadroom; pAPIs->_HTC_MsgRecvHandler = HTCMsgRecvHandler; @@ -434,9 +434,9 @@ void htc_module_install(struct htc_apis *pAPIs) } /* free message to the free list */ -LOCAL void HTCFreeMsgBuffer(HTC_CONTEXT *pHTC, adf_nbuf_t buf) +LOCAL void HTCFreeMsgBuffer(HTC_CONTEXT *pHTC, adf_nbuf_t buf) { - BUF_Pool_free_buf(pHTC->PoolHandle, POOL_ID_HTC_CONTROL, buf); + BUF_Pool_free_buf(pHTC->PoolHandle, POOL_ID_HTC_CONTROL, buf); } /* HTC control message allocator (also used for empty frames to send trailer options) */ @@ -444,26 +444,26 @@ LOCAL adf_nbuf_t HTCAllocMsgBuffer(HTC_CONTEXT *pHTC) { return BUF_Pool_alloc_buf(pHTC->PoolHandle, POOL_ID_HTC_CONTROL, - HTC_GetReservedHeadroom(pHTC)); + HTC_GetReservedHeadroom(pHTC)); } LOCAL void HTCCheckAndSendCreditReport(HTC_CONTEXT *pHTC, A_UINT32 EpMask, HTC_ENDPOINT *pEndpoint, HTC_ENDPOINT_ID Eid) { adf_nbuf_t pCredBuffer; - HTC_BUF_CONTEXT *ctx; - + HTC_BUF_CONTEXT *ctx; + do { /* check if host needs credits */ if (!(pHTC->EpHostNeedsCreditMap & EpMask)) { /* host does not need any credits for this set */ - break; + break; } /* check if any are pending */ if (!(pHTC->EpCreditPendingMap & EpMask)) { /* nothing to send up */ - break; - } + break; + } /* was an endpoint specified? */ if (pEndpoint != NULL) { /* see if a threshold is in effect for this endpoint */ @@ -474,19 +474,19 @@ LOCAL void HTCCheckAndSendCreditReport(HTC_CONTEXT *pHTC, A_UINT32 EpMask, break; } } - + if (pEndpoint->PendingCreditReports >= pHTC->MaxEpPendingCreditRpts) { /* this endpoint already has some reports outstanding */ /* flag that as soon as a buffer is reaped, we issue a credit update to * pick up this credit that is being held up because the endpoint has already - * exceeded the max outstanding credit report limit */ + * exceeded the max outstanding credit report limit */ pHTC->StateFlags |= HTC_SEND_CREDIT_UPDATE_SOON; - break; - } + break; + } } - + /* if we get here we have some credits to send up */ - + /* allocate a message buffer for the trailer */ pCredBuffer = HTCAllocMsgBuffer(pHTC); if (NULL == pCredBuffer) { @@ -494,25 +494,25 @@ LOCAL void HTCCheckAndSendCreditReport(HTC_CONTEXT *pHTC, A_UINT32 EpMask, * have to wait until we get our endpoint 0 messages back.. */ /* mark that we need to send an update as soon as we can get a buffer back */ pHTC->StateFlags |= HTC_SEND_CREDIT_UPDATE_SOON; - break; + break; } - + ctx = (HTC_BUF_CONTEXT *)adf_nbuf_get_priv(pCredBuffer); if (pEndpoint != NULL) { /* keep track of pending reports */ - pEndpoint->PendingCreditReports++; + pEndpoint->PendingCreditReports++; /* save the endpoint in order to decrement the count when the send completes */ ctx->htc_flags = Eid | HTC_FLAGS_CREDIT_RPT; - } - + } + /* this is an empty message, the HTC_SendMsg will tack on a trailer in the remaining * space, NOTE: no need to flush the cache, the header and trailers are assembled * using uncached addresses */ - HTC_SendMsg(pHTC, ENDPOINT0, pCredBuffer); - - } while (FALSE); + HTC_SendMsg(pHTC, ENDPOINT0, pCredBuffer); + + } while (FALSE); } - + /* called in response to the arrival of a service connection message */ LOCAL void HTCProcessConnectMsg(HTC_CONTEXT *pHTC, HTC_CONNECT_SERVICE_MSG *pMsg) { @@ -522,33 +522,33 @@ LOCAL void HTCProcessConnectMsg(HTC_CONTEXT *pHTC, HTC_CONNECT_SERVICE_MSG *pMsg HTC_CONNECT_SERVICE_RESPONSE_MSG *pRspMsg; int metaDataOutLen = 0; A_UINT16 serviceId = adf_os_ntohs(pMsg->ServiceID); - + pBuffer = HTCAllocMsgBuffer(pHTC); /* note : this will be aligned */ pRspMsg = (HTC_CONNECT_SERVICE_RESPONSE_MSG *) adf_nbuf_put_tail(pBuffer, sizeof(HTC_CONNECT_SERVICE_RESPONSE_MSG)); - + A_MEMZERO(pRspMsg,sizeof(HTC_CONNECT_SERVICE_RESPONSE_MSG)); pRspMsg->MessageID = adf_os_htons(HTC_MSG_CONNECT_SERVICE_RESPONSE_ID); /* reflect the service ID for this connect attempt */ pRspMsg->ServiceID = adf_os_htons(serviceId); while (pService) { - + if (pHTC->CurrentEpIndex >= ENDPOINT_MAX) { /* no more endpoints */ connectStatus = HTC_SERVICE_NO_RESOURCES; - break; + break; } if (serviceId == pService->ServiceID) { - /* we found a match */ - A_UINT8 *pMetaDataIN = NULL; + /* we found a match */ + A_UINT8 *pMetaDataIN = NULL; A_UINT8 *pMetaDataOut; - + /* outgoing meta data resides in the space after the response message */ pMetaDataOut = ((A_UINT8 *)pRspMsg) + sizeof(HTC_CONNECT_SERVICE_RESPONSE_MSG); - + if (pMsg->ServiceMetaLength != 0) { /* the meta data follows the connect service message */ pMetaDataIN = ((A_UINT8 *)pMsg) + sizeof(HTC_CONNECT_SERVICE_MSG); @@ -561,7 +561,7 @@ LOCAL void HTCProcessConnectMsg(HTC_CONTEXT *pHTC, HTC_CONNECT_SERVICE_MSG *pMsg pMsg->ServiceMetaLength, pMetaDataOut, &metaDataOutLen); - + /* check if the service accepted this connection request */ if (HTC_SERVICE_SUCCESS == connectStatus) { /* set the length of the response meta data going back to the host */ @@ -574,49 +574,49 @@ LOCAL void HTCProcessConnectMsg(HTC_CONTEXT *pHTC, HTC_CONNECT_SERVICE_MSG *pMsg pHTC->Endpoints[pHTC->CurrentEpIndex].pService = pService; /* set connection flags */ pHTC->Endpoints[pHTC->CurrentEpIndex].ConnectionFlags = pMsg->ConnectionFlags; - + pHTC->Endpoints[pHTC->CurrentEpIndex].DownLinkPipeID = pMsg->DownLinkPipeID; pHTC->Endpoints[pHTC->CurrentEpIndex].UpLinkPipeID = pMsg->UpLinkPipeID; - + /* mark that we are now connected */ pService->ServiceFlags |= HTC_SERVICE_FLAGS_CONNECTED; /* bump up our index, this EP is now in use */ - pHTC->CurrentEpIndex++; + pHTC->CurrentEpIndex++; } break; - } - - pService = pService->pNext; + } + + pService = pService->pNext; } - - pRspMsg->Status = connectStatus; - + + pRspMsg->Status = connectStatus; + /* send out the response message */ - HTC_SendMsg(pHTC, ENDPOINT0, pBuffer); + HTC_SendMsg(pHTC, ENDPOINT0, pBuffer); } LOCAL void HTCProcessConfigPipeMsg(HTC_CONTEXT *pHTC, HTC_CONFIG_PIPE_MSG *pMsg) { adf_nbuf_t pBuffer; HTC_CONFIG_PIPE_RESPONSE_MSG *pRspMsg; - + pBuffer = HTCAllocMsgBuffer(pHTC); - + /* note : this will be aligned */ pRspMsg = (HTC_CONFIG_PIPE_RESPONSE_MSG *) - adf_nbuf_put_tail(pBuffer, sizeof(HTC_CONFIG_PIPE_RESPONSE_MSG)); - + adf_nbuf_put_tail(pBuffer, sizeof(HTC_CONFIG_PIPE_RESPONSE_MSG)); + A_MEMZERO(pRspMsg,sizeof(HTC_CONFIG_PIPE_RESPONSE_MSG)); - + pRspMsg->MessageID = adf_os_htons(HTC_MSG_CONFIG_PIPE_RESPONSE_ID); /* reflect the service ID for this connect attempt */ pRspMsg->PipeID = pMsg->PipeID; if ( HIF_is_pipe_supported(pHTC->hifHandle, pMsg->PipeID) ) { - pRspMsg->Status = 0; + pRspMsg->Status = 0; } else { - pRspMsg->Status = 1; + pRspMsg->Status = 1; goto config_done; } @@ -626,65 +626,65 @@ LOCAL void HTCProcessConfigPipeMsg(HTC_CONTEXT *pHTC, HTC_CONFIG_PIPE_MSG *pMsg) pRspMsg->Status = 2; goto config_done; } - + HIF_config_pipe(pHTC->hifHandle, pMsg->PipeID, pMsg->CreditCount); - -config_done: + +config_done: /* send out the response message */ - HTC_SendMsg(pHTC, ENDPOINT0, pBuffer); + HTC_SendMsg(pHTC, ENDPOINT0, pBuffer); } /* process an incomming control message from the host */ LOCAL void HTCControlSvcProcessMsg(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t hdr_buf, adf_nbuf_t pBuffers, void *arg) -{ +{ A_BOOL setupComplete = FALSE; a_uint8_t *anbdata; a_uint32_t anblen; HTC_CONTEXT *pHTC = (HTC_CONTEXT *)arg; HTC_UNKNOWN_MSG *pMsg; - + adf_os_assert(hdr_buf == ADF_NBUF_NULL); /* we assume buffers are aligned such that we can access the message * parameters directly*/ adf_nbuf_peek_header(pBuffers, &anbdata, &anblen); pMsg = (HTC_UNKNOWN_MSG *)anbdata; - + /* we cannot handle fragmented messages across buffers */ - - switch ( adf_os_ntohs(pMsg->MessageID) ) { + + switch ( adf_os_ntohs(pMsg->MessageID) ) { case HTC_MSG_CONNECT_SERVICE_ID: - HTCProcessConnectMsg(pHTC, (HTC_CONNECT_SERVICE_MSG *)pMsg); + HTCProcessConnectMsg(pHTC, (HTC_CONNECT_SERVICE_MSG *)pMsg); break; case HTC_MSG_CONFIG_PIPE_ID: - HTCProcessConfigPipeMsg(pHTC, (HTC_CONFIG_PIPE_MSG *)pMsg); - break; + HTCProcessConfigPipeMsg(pHTC, (HTC_CONFIG_PIPE_MSG *)pMsg); + break; case HTC_MSG_SETUP_COMPLETE_ID: /* the host has indicated that it has completed all setup tasks and we can now let the services take over to run the rest of the application */ - setupComplete = TRUE; + setupComplete = TRUE; /* can't get this more than once */ break; default: ; - } - + } + if (pHTC->StateFlags & HTC_STATE_SETUP_COMPLETE) { /* recycle buffer only if we are fully running */ HTC_ReturnBuffers(pHTC, ENDPOINT0,pBuffers); } else { /* supply some head-room again */ adf_nbuf_push_head(pBuffers, HTC_HDR_LENGTH); - + /* otherwise return the packet back to mbox */ - HIF_return_recv_buf(pHTC->hifHandle, pHTC->Endpoints[EndpointID].UpLinkPipeID, pBuffers); + HIF_return_recv_buf(pHTC->hifHandle, pHTC->Endpoints[EndpointID].UpLinkPipeID, pBuffers); } - if (setupComplete) { + if (setupComplete) { /* mark that setup has completed */ - pHTC->StateFlags |= HTC_STATE_SETUP_COMPLETE; + pHTC->StateFlags |= HTC_STATE_SETUP_COMPLETE; if (pHTC->SetupCompleteCb != NULL) { pHTC->SetupCompleteCb(); } @@ -698,25 +698,25 @@ LOCAL void HTCControlSvcProcessSendComplete(HTC_ENDPOINT_ID EndpointID, HTC_CONTEXT *pHTC = (HTC_CONTEXT *)arg; HTC_BUF_CONTEXT *ctx; HTC_ENDPOINT_ID creditRptEndpoint; - - ctx = (HTC_BUF_CONTEXT *)adf_nbuf_get_priv(pBuffers); - + + ctx = (HTC_BUF_CONTEXT *)adf_nbuf_get_priv(pBuffers); + /* put them back into the pool */ - if ( ctx->htc_flags & HTC_FLAGS_CREDIT_RPT ) { - /* extract the endpoint number that requested this credit report */ - creditRptEndpoint = ctx->htc_flags & HTC_FLAGS_CRPT_EP_MASK; - pHTC->Endpoints[creditRptEndpoint].PendingCreditReports--; + if ( ctx->htc_flags & HTC_FLAGS_CREDIT_RPT ) { + /* extract the endpoint number that requested this credit report */ + creditRptEndpoint = ctx->htc_flags & HTC_FLAGS_CRPT_EP_MASK; + pHTC->Endpoints[creditRptEndpoint].PendingCreditReports--; } - + HTCFreeMsgBuffer(pHTC, pBuffers); - + if (pHTC->StateFlags & HTC_SEND_CREDIT_UPDATE_SOON) { /* this flag is set when the host could not send a credit report * because we ran out of HTC control buffers */ pHTC->StateFlags &= ~HTC_SEND_CREDIT_UPDATE_SOON; /* send out a report if anything is pending */ HTCCheckAndSendCreditReport(pHTC, HTC_ANY_ENDPOINT_MASK,NULL,ENDPOINT_MAX); - } + } } LOCAL void HTCSendDoneHandler(adf_nbuf_t buf, void *context) @@ -724,18 +724,18 @@ LOCAL void HTCSendDoneHandler(adf_nbuf_t buf, void *context) A_UINT8 current_eid; HTC_CONTEXT *pHTC = (HTC_CONTEXT *)context; HTC_BUF_CONTEXT *ctx; - + ctx = (HTC_BUF_CONTEXT *)adf_nbuf_get_priv(buf); current_eid = ctx->end_point; - + /* Walk through the buffers and fixup the ones we used for HTC headers. * The buffer list may contain more than one string of HTC buffers comprising of an - * HTC message so we need to check every buffer */ + * HTC message so we need to check every buffer */ adf_nbuf_pull_head(buf, HTC_HDR_LENGTH); - + pHTC->Endpoints[current_eid].pService-> - ProcessSendBufferComplete(current_eid, - buf, + ProcessSendBufferComplete(current_eid, + buf, pHTC->Endpoints[current_eid].pService->ServiceCtx); } @@ -744,43 +744,42 @@ LOCAL void AdjustCreditThreshold(HTC_ENDPOINT *pEndpoint) A_INT16 creditsOutstanding = pEndpoint->CreditsToReturn + pEndpoint->CreditsConsumed; /* set the new threshold based on the number of credits that have been consumed * and which have not been returned by the app. - * Note: it is okay for this threshold to be zero which indicates no threshold - * is in use */ + * Note: it is okay for this threshold to be zero which indicates no threshold + * is in use */ switch (pEndpoint->ConnectionFlags & HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK) { case HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_FOURTH : creditsOutstanding >>= 2; - break; + break; case HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_HALF : creditsOutstanding >>= 1; break; - case HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS : - creditsOutstanding = (creditsOutstanding * 3) >> 2; + case HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS : + creditsOutstanding = (creditsOutstanding * 3) >> 2; break; - /* default case is unity */ + /* default case is unity */ } - + pEndpoint->CreditReturnThreshhold = creditsOutstanding; - + } LOCAL void RedistributeCredit(adf_nbuf_t buf, int toPipeId) { } - + /* callback from the mailbox hardware layer when a full message arrives */ LOCAL void HTCMsgRecvHandler(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *context) { - A_UINT16 totsz; HTC_ENDPOINT *pEndpoint; A_UINT32 eidMask; - int eid; + int eid; a_uint8_t *anbdata; a_uint32_t anblen; HTC_FRAME_HDR *pHTCHdr; HTC_CONTEXT *pHTC = (HTC_CONTEXT *)context; adf_nbuf_t tmp_nbuf; - + if (hdr_buf == ADF_NBUF_NULL) { /* HTC hdr is not in the hdr_buf */ tmp_nbuf = buffer; @@ -788,14 +787,12 @@ LOCAL void HTCMsgRecvHandler(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *contex else { tmp_nbuf = hdr_buf; } - - adf_nbuf_peek_header(tmp_nbuf, &anbdata, &anblen); - pHTCHdr = (HTC_FRAME_HDR *)anbdata; - - totsz = adf_os_ntohs(pHTCHdr->PayloadLen); - - eid = pHTCHdr->EndpointID; - + + adf_nbuf_peek_header(tmp_nbuf, &anbdata, &anblen); + pHTCHdr = (HTC_FRAME_HDR *)anbdata; + + eid = pHTCHdr->EndpointID; + pEndpoint = &pHTC->Endpoints[eid]; eidMask = 1 << eid; @@ -808,7 +805,7 @@ LOCAL void HTCMsgRecvHandler(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *contex if (pHTC->StateFlags & HTC_STATE_SETUP_COMPLETE) { /* after setup we keep track of credit consumption to allow us to - * adjust thresholds to reduce credit dribbling */ + * adjust thresholds to reduce credit dribbling */ pEndpoint->CreditsConsumed ++; } @@ -816,35 +813,35 @@ LOCAL void HTCMsgRecvHandler(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *contex * when we receive a frame with the NEED_CREDIT_UPDATE flag set . * if the host received credits through an opportunistic path, then it can * issue a another frame with this bit cleared, this signals the target to clear - * the "host-needs-credit" state */ + * the "host-needs-credit" state */ if (pHTCHdr->Flags & HTC_FLAGS_NEED_CREDIT_UPDATE) { /* the host is running low (or is out) of credits on this * endpoint, update mask */ - pHTC->EpHostNeedsCreditMap |= eidMask; + pHTC->EpHostNeedsCreditMap |= eidMask; /* check and set new threshold since host has reached a low credit situation */ - CHECK_AND_ADJUST_CREDIT_THRESHOLD(pEndpoint); + CHECK_AND_ADJUST_CREDIT_THRESHOLD(pEndpoint); } else { /* clear the flag */ - pHTC->EpHostNeedsCreditMap &= ~(eidMask); - pEndpoint->CreditReturnThreshhold = 0; + pHTC->EpHostNeedsCreditMap &= ~(eidMask); + pEndpoint->CreditReturnThreshhold = 0; } - /* Adjust the first buffer to point to the start of the actual + /* Adjust the first buffer to point to the start of the actual payload, the first buffer contains the header */ adf_nbuf_pull_head(tmp_nbuf, HTC_HDR_LENGTH); - + /* NOTE : This callback could re-queue the recv buffers within this calling context. * The callback could also send a response message within the context of this callback * as the result of parsing this message. In either case, if there are - * pending credits and the host needs them, a credit report will be sent either through + * pending credits and the host needs them, a credit report will be sent either through * the response message trailer or a NULL message through HTC_ReturnBuffers(). - */ - + */ + pEndpoint->pService->ProcessRecvMsg(eid, hdr_buf, buffer, pEndpoint->pService->ServiceCtx); - /* Calls to HTC_ReturnBuffers drives the endpoint credit reporting state machine. - * We do not want to delay credits for too long in the event that the application is + /* Calls to HTC_ReturnBuffers drives the endpoint credit reporting state machine. + * We do not want to delay credits for too long in the event that the application is * holding onto buffers for excessive periods of time. This gives us "some" better * opportunities to send up credits. */ - HTCCheckAndSendCreditReport(pHTC, eidMask, pEndpoint, eid); + HTCCheckAndSendCreditReport(pHTC, eidMask, pEndpoint, eid); } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_api.h index 963c564..a7f01c6 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_api.h @@ -34,10 +34,10 @@ */ /* * @File: htc_api.h - * + * * @Abstract: host-target communications API - * - * @Notes: + * + * @Notes: */ #ifndef __HTC_API_H__ @@ -53,7 +53,7 @@ typedef void (* HTC_SERVICE_ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, adf_nbuf_t, void *ServiceCtx); typedef void (* HTC_SERVICE_ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, void *ServiceCtx); - + /* HTC service structure : * the caller is required to allocate storage for the service structure and register the * structure using HTC_RegisterService() The service must set the following fields: @@ -65,31 +65,31 @@ typedef void (* HTC_SERVICE_ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointI * */ typedef struct _HTC_SERVICE { struct _HTC_SERVICE *pNext; - /* Callback for processing receive messages. HTC calls this callback whenever a + /* Callback for processing receive messages. HTC calls this callback whenever a * message arrives on the endpoint assigned to this service. * HTC_BUFFER is a chain of buffers containing a full application message. * HTC_BUFFER->buffer points to the start of the msg buffer (past the HTC header) */ - void (* ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, adf_nbuf_t, void *ServiceCtx); + void (* ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, adf_nbuf_t, void *ServiceCtx); /* callback to process completed send buffers */ - void (* ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, void *ServiceCtx); + void (* ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, void *ServiceCtx); /* optional callback when a connection request occurs. - * The EndpointID is the assigned endpoint, the callback returns a connect + * The EndpointID is the assigned endpoint, the callback returns a connect * response status code to allow or disallow the connection. * pDataIn points to the optional meta data supplied in the connection request - * pDataOut points to a buffer to send back meta data + * pDataOut points to a buffer to send back meta data * If no callback is supplied, HTC assumes the connect is allowed */ A_UINT8 (* ProcessConnect)(struct _HTC_SERVICE *pService, - HTC_ENDPOINT_ID EndpointID, - A_UINT8 *pDataIn, + HTC_ENDPOINT_ID EndpointID, + A_UINT8 *pDataIn, int LengthIn, A_UINT8 *pDataOut, - int *pLengthOut); + int *pLengthOut); A_UINT16 ServiceID; /* service ID to match connection requests */ A_UINT16 ServiceFlags; /* service flags */ A_UINT16 MaxSvcMsgSize; /* maximum length of service-specific messages exchanged on the endpoint */ A_UINT16 TrailerSpcCheckLimit; /* amount of space in each send buffer that HTC can check for trailer - data. This should be set to the smallest HTC buffer that can be sent + data. This should be set to the smallest HTC buffer that can be sent through the service. The service can disable trailer data insertion by setting this value to 0. */ void *ServiceCtx; @@ -110,7 +110,7 @@ typedef struct _HTC_CONFIG { typedef struct _HTC_BUF_CONTEXT { A_UINT8 end_point; - A_UINT8 htc_flags; /* htc flags (used by HTC layer only) */ + A_UINT8 htc_flags; /* htc flags (used by HTC layer only) */ } HTC_BUF_CONTEXT; typedef void* htc_handle_t; @@ -119,20 +119,20 @@ typedef void* htc_handle_t; * setup complete function, supplied by HTC caller at HTC_init time. * HTC calls this function after the host has indicated that the service connection * phase is complete. - * + * */ typedef void (* HTC_SETUP_COMPLETE_CB)(void); struct htc_apis { - htc_handle_t (* _HTC_Init)(HTC_SETUP_COMPLETE_CB, HTC_CONFIG *pConfig); + htc_handle_t (* _HTC_Init)(HTC_SETUP_COMPLETE_CB, HTC_CONFIG *pConfig); void (* _HTC_Shutdown)(htc_handle_t); void (* _HTC_RegisterService)(htc_handle_t, HTC_SERVICE *); void (* _HTC_Ready)(htc_handle_t); void (* _HTC_ReturnBuffers)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t); void (* _HTC_ReturnBuffersList)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_queue_t); - void (* _HTC_SendMsg)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t); + void (* _HTC_SendMsg)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t); int (* _HTC_GetReservedHeadroom)(htc_handle_t handle); - + /* These APIs below are for patch purpose only */ void (*_HTC_MsgRecvHandler)(adf_nbuf_t hdr_buf, adf_nbuf_t buf, void *context); void (*_HTC_SendDoneHandler)(adf_nbuf_t buf, void *context); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_internal.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_internal.h index 241bb03..e2951d5 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_internal.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_internal.h @@ -33,11 +33,11 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * + * @File: + * * @Abstract: internal data and structure definitions for HTC - * - * @Notes: + * + * @Notes: */ #ifndef HTC_INTERNAL_H_ @@ -49,7 +49,7 @@ (sizeof(HTC_RECORD_HDR)) * 2 ) + \ HTC_HDR_LENGTH, \ sizeof(A_UINT32))) -/* minimum allocation for a credit message */ +/* minimum allocation for a credit message */ #define MIN_CREDIT_BUFFER_ALLOC_SIZE (MIN_BUF_SIZE_FOR_RPTS) /* max ctrl buffers size for a setup message */ @@ -62,14 +62,14 @@ #define HTC_DEFAULT_MAX_EP_PENDING_CREDIT_REPORTS 3 /* an EP should not have more than this many outstanding reports */ -#define HTC_FLAGS_CRPT_EP_MASK 0x1F /* if the message is a credit report this is the endpoint +#define HTC_FLAGS_CRPT_EP_MASK 0x1F /* if the message is a credit report this is the endpoint that issued it */ #define HTC_FLAGS_CREDIT_RPT (1 << 5) /* the buffer was a credit report */ #define HTC_FLAGS_BUF_HDR (1 << 6) /* the buffer was manipulated and a header added */ #define HTC_FLAGS_RECV_END_MSG (1 << 7) /* this buffer is the last buffer for the recev - message (used for recv pause logic) */ - + message (used for recv pause logic) */ + #define HTC_MAILBOX 0 /* we use mailbox 0 for all communications */ #define HTC_ANY_ENDPOINT_MASK 0xFFFFFFFF #define HTC_LOOKAHEAD_POST_VALID 0x55 @@ -79,14 +79,14 @@ typedef struct _HTC_ENDPOINT { A_INT16 CreditsToReturn; /* credits that are ready to be returned to the host */ HTC_SERVICE *pService; /* service that is bound to this endpoint */ -#ifdef HTC_PAUSE_RESUME_REF_COUNTING +#ifdef HTC_PAUSE_RESUME_REF_COUNTING int PauseRefCount; /* reference count */ #endif A_INT16 CreditReturnThreshhold; /* threshold before credits are returned via NULL pkts, - this reduces dribbling effect */ - A_INT16 CreditsConsumed; /* number of credits consumed (outstanding) on the endpoint */ - A_UINT16 ConnectionFlags; /* HTC connection flags */ - int PendingCreditReports; /* no. of pending credit reports issued by this endpoint */ + this reduces dribbling effect */ + A_INT16 CreditsConsumed; /* number of credits consumed (outstanding) on the endpoint */ + A_UINT16 ConnectionFlags; /* HTC connection flags */ + int PendingCreditReports; /* no. of pending credit reports issued by this endpoint */ A_UINT8 DownLinkPipeID; /* The pipe ID to be use for the direction: target -> host */ A_UINT8 UpLinkPipeID; /* The pipe ID to be use for the direction: host -> target */ } HTC_ENDPOINT; @@ -113,7 +113,7 @@ typedef struct _HTC_CONTEXT { pool_handle_t PoolHandle; // Left a door for extension the structure - void *pReserved; + void *pReserved; } HTC_CONTEXT; #define HTC_STATE_SETUP_COMPLETE (1 << 0) /* HTC host-target setup is complete */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_tgt.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_tgt.c deleted file mode 100755 index 313b09e..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/htc/htc_tgt.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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 -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -_A_magpie_indirection_table_t _indir_tbl; - -int init_htc_tgt(void); - -int init_htc_tgt(void) -{ - /* target-side HIF/HTC/WMI module installation */ - BUF_POOL_MODULE_INSTALL(); - HIF_MODULE_INSTALL(); - HTC_MODULE_INSTALL(); - WMI_SERVICE_MODULE_INSTALL(); - - adf_os_print("HTC Target Version 1.xx Loaded...\n"); - return 0; -} - -void exit_htc_tgt(void); - -void exit_htc_tgt(void) -{ - adf_os_print("HTC Target UnLoaded...\n"); -} - -adf_os_export_symbol(_indir_tbl); - -adf_os_virt_module_init(init_htc_tgt); -adf_os_virt_module_exit(exit_htc_tgt); -adf_os_module_dep(htc_tgt, adf_net); -adf_os_module_dep(htc_tgt, inproc_hif); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_htc.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_htc.h deleted file mode 100755 index 70ec8e4..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_htc.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __AR6K_HTC_H__ -#define __AR6K_HTC_H__ - -/* Host/Target Communications for an AR6K Target */ - -/* Number of mailboxes */ -#define AR6000_MBOX_COUNT 4 - -/* ------ MBOX ID ------ */ -typedef enum -{ - ENDPOINT_UNUSED = -1, - ENDPOINT1 = 0, - ENDPOINT2, - ENDPOINT3, - ENDPOINT4, -} HTC_ENDPOINT_ID; - - -/* An AR6000 DMA Descriptor. See HTC_descriptor(). */ -struct AR6000_DMA_desc_s { - A_UINT32 dma_control; - char *dma_data; - struct AR6000_DMA_desc_s *dma_next; -}; - - -/* - * Make a Mailbox DMA descriptor available to HTC. - * - * Once made available, there is no way to reclaim this memory. - * The caller must guarantee that a descriptor exists for each - * buffer that is used to send or receive. It is expected that - * the caller will supply a bunch of descriptors once during - * initialization, and then forget about them. The number of - * buffers given to HTC for send+recv must never exceed the - * number of descriptors given to HTC. - * - * HTC accesses descriptors via uncached accesses. The caller - * must guarantee not to place any other data in the same cache - * line as a DMA descriptor! In practice, this means that the - * caller should allocate a block of memory for descriptors, - * and the block should include padding at the start and end - * to guarantee there will be no other data in the same cache - * line. - * - * It would be far preferable to bury descriptors in the bufinfo - * structure; but there are practical issues that prevent this. - * It turns out that the most efficient way to add descriptors - * to an active DMA engine requires HTC to "own and actively - * manage" the descriptors. HTC needs to make the association - * between descriptors and buffers at the last possible moment. - * - * extern void _HTC_descriptor(struct AR6000_DMA_desc_s *descriptor); - */ - -/* - * The following interfaces make it easy to allocate suitable - * descriptors for HTC. During initialization, simply use the - * HTC_DESCRIPTORS_INIT macro and specify the number of descriptors - * desired. This number must be a constant, since it is used to - * declare a static array! - * - * The descriptor array is padded with a cache line at the start - * and another at the end. This avoids false sharing between adjacent - * cached data and uncached descriptors. - */ -#define HTC_DESCRIPTOR_SPACE_SIZE(ndescs) \ - (((ndescs) * sizeof(struct AR6000_DMA_desc_s)) + 2*A_CACHE_LINE_SIZE) - -#define HTC_DESCRIPTORS_INIT(ndescs) \ -{ \ - static A_UINT8 HTC_descriptor_space[HTC_DESCRIPTOR_SPACE_SIZE(ndescs)]; \ - struct AR6000_DMA_desc_s *desc; \ - int i; \ - \ - A_DATA_CACHE_FLUSH(HTC_descriptor_space, sizeof(HTC_descriptor_space)); \ - \ - desc = (struct AR6000_DMA_desc_s *) \ - A_ROUND_UP((A_UINT32)HTC_descriptor_space, A_CACHE_LINE_SIZE); \ - \ - for (i=0; i<(ndescs); i++) { \ - HTC_descriptor(desc); \ - desc++; \ - } \ -} - -#endif /* __AR6K_HTC_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_misc.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_misc.h deleted file mode 100755 index 4ac5c9b..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_misc.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __AR6K_MISC_H__ -#define __AR6K_MISC_H__ - -/* - * AR6001: CIS Tuple 0x82, "Board Hardware Configuration Information", - * is set at chip reset according to board configuration. Bits in this - * register indicate what type of Host connection is in use. We don't - * have proper header files to describe tuples, so the offset and layout - * for the one tuple that firmwware needs is defined here. - * - * AR6002: The RESET_TUPLE_STATUS register in the GPIO block holds - * Board Hardware Configuration Information. - * - * If the interface is SDIO, then the "INFO_MASK" must be "SDIO_NORMAL". - * For debug purposes, a Target with the KeepAlive jumper may be booted - * before the Host. In this case, INFO_MASK is 0. - * - * For NON-SDIO Host interfaces, the INFO_MASK may hold board information. - * - * By convention, hostless boards set INTERFACE to SDIO, and INFO to - * something OTHER than SDIO_NORMAL or 0. - * - * Layout of Board HW Cfg Info is below. These values are captured at - * reset and made available to software. - * - * These 3 bits are available on AR6002 via RESET_TUPLE_STATUS_ADDRESS; - * they are NOT available on AR6001. - * bit 10: rftest ??? - * bit 9: cmode[1] Bits 9..8 indicate modes as follows: - * bit 8: cmode[0] 0-->normal - * 1-->rftest - * 2-->functional test (ATE) - * 3-->ATPG/MBIST - * - * These 8 bits are available on AR6002 through RESET_TUPLE_STATUS_ADDRESS - * and on both AR6001 and AR6002 through CIS Tuple 0x82. - * bit 7: gpio9 (aka hmode0) Bits 7..6 are the "Interface Config bits" - * bit 6: tdo (aka hmode1) - * bit 5: clk_req - * bit 4: sdio_cmd - * bit 3: sdio_dat[3] - * bit 2: sdio_dat[2] - * bit 1: sdio_dat[1] - * bit 0: sdio_dat[0] - */ - -#if defined(RESET_TUPLE_STATUS_ADDRESS) -#define AR6K_BOARD_HWCFG_CMODE_MASK 0x300 -#define AR6K_BOARD_HWCFG_CMODE_ATE 0x200 -#else -/* - * CIS Tuple 0x82 happens to be located at offset 0x13c into CIS registers. - * This may change across tapeouts, if CIS tuple information changes. - */ -#define AR6K_BOARD_HWCFG_TUPLE_OFFSET 0x13c -#endif - -#define AR6K_BOARD_HWCFG_INTERFACE_MASK 0xc0 -#define AR6K_BOARD_HWCFG_KEEP_ALIVE_MASK 0x20 -#define AR6K_BOARD_HWCFG_INFO_MASK 0x1f - -/* Values for INTERFACE_MASK indicate type of interface */ -#define AR6K_BOARD_HWCFG_SPI 0x00 -#define AR6K_BOARD_HWCFG_SDIO 0x40 -#define AR6K_BOARD_HWCFG_LBCF 0x80 -#define AR6K_BOARD_HWCFG_MSIO 0xc0 - -#define AR6K_BOARD_HWCFG_SDIO_NORMAL 0x1f - -#endif /* __AR6K_MISC_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_soc.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_soc.h index 3956148..52bb6c6 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_soc.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/OTUS/OTUS_soc.h @@ -96,7 +96,7 @@ typedef A_ULONG A_ADDR; ((void *)((((A_UINT32)(addr)) & ~A_MIPS_KSEG_MASK) | A_MIPS_KSEG_CACHED)) /* Read/Write a 32-bit AR6000 SOC register, specified by its physical address */ -#define A_SOC_ADDR_READ(addr) (*((volatile A_UINT32 *)A_UNCACHED_ADDR(addr))) +#define A_SOC_ADDR_READ(addr) (*((volatile A_UINT32 *)A_UNCACHED_ADDR(addr))) #define A_SOC_ADDR_WRITE(addr, val) \ do { \ @@ -126,7 +126,7 @@ typedef A_ULONG A_ADDR; #define A_UNCACHED_ADDR(addr) (addr) #define A_CACHED_ADDR(addr) (addr) -#define A_SOC_ADDR_READ(addr) (*((volatile A_UINT32 *)(addr))) +#define A_SOC_ADDR_READ(addr) (*((volatile A_UINT32 *)(addr))) #define A_SOC_ADDR_WRITE(addr, val) \ do { \ @@ -199,7 +199,7 @@ do { \ HF_TIMER_CONTROL_RESET_MASK); \ } while (0) -/* +/* * Turn it OFF when you're done: */ #define A_TIMESTAMP_DISABLE() A_RTC_REG_WRITE(HF_TIMER_CONTROL_ADDRESS, 0) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_nbuf.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_nbuf.h index 8ad5185..8217326 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_nbuf.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_nbuf.h @@ -34,13 +34,13 @@ */ /** * @defgroup adf_nbuf_public network buffer API - */ + */ /** * @ingroup adf_nbuf_public * @file adf_nbuf.h * This file defines the network buffer abstraction. - */ + */ #ifndef _ADF_NBUF_H #define _ADF_NBUF_H @@ -75,10 +75,10 @@ typedef __adf_nbuf_queue_t adf_nbuf_queue_t; * - need space in adf_drv's software descriptor * - are typically created during adf_drv_create * - need to be created before any API(adf_nbuf_map) that uses them - * + * * @param[in] osdev os device * @param[out] dmap map handle - * + * * @return status of the operation */ static inline a_status_t @@ -91,7 +91,7 @@ adf_nbuf_dmamap_create(adf_os_device_t osdev, /** * @brief Delete a dmap map - * + * * @param[in] osdev os device * @param[in] dmap */ @@ -113,9 +113,9 @@ adf_nbuf_dmamap_destroy(adf_os_device_t osdev, adf_os_dma_map_t dmap) * @return status of the operation */ static inline a_status_t -adf_nbuf_map(adf_os_device_t osdev, - adf_os_dma_map_t bmap, - adf_nbuf_t buf, +adf_nbuf_map(adf_os_device_t osdev, + adf_os_dma_map_t bmap, + adf_nbuf_t buf, adf_os_dma_dir_t dir) { return __adf_nbuf_map(osdev, bmap, buf, dir); @@ -130,8 +130,8 @@ adf_nbuf_map(adf_os_device_t osdev, * @param[in] dir DMA direction */ static inline void -adf_nbuf_unmap(adf_os_device_t osdev, - adf_os_dma_map_t bmap, +adf_nbuf_unmap(adf_os_device_t osdev, + adf_os_dma_map_t bmap, adf_os_dma_dir_t dir) { __adf_nbuf_unmap(osdev, bmap, dir); @@ -139,7 +139,7 @@ adf_nbuf_unmap(adf_os_device_t osdev, /** * @brief returns information about the mapped buf - * + * * @param[in] bmap map handle * @param[out] sg map info */ @@ -162,14 +162,14 @@ adf_nbuf_dmamap_info(adf_os_dma_map_t bmap, adf_os_dmamap_info_t *sg) * The nbuf created is guarenteed to have only 1 physical segment * * @param[in] hdl platform device object - * @param[in] size data buffer size for this adf_nbuf including max header + * @param[in] size data buffer size for this adf_nbuf including max header * size * @param[in] reserve headroom to start with. * @param[in] align alignment for the start buffer. * * @return The new adf_nbuf instance or NULL if there's not enough memory. */ -static inline adf_nbuf_t +static inline adf_nbuf_t adf_nbuf_alloc(adf_os_size_t size, int reserve, int align) @@ -195,10 +195,10 @@ adf_nbuf_free(adf_nbuf_t buf) * buf. Note that this can allocate a new buffer, or * change geometry of the orignial buffer. The new buffer * is returned in the (new_buf). - * + * * @param[in] buf (older buffer) * @param[in] headroom - * + * * @return newly allocated buffer */ static inline adf_nbuf_t @@ -211,10 +211,10 @@ adf_nbuf_realloc_headroom(adf_nbuf_t buf, a_uint32_t headroom) /** * @brief expand the tailroom to the new tailroom, but the buffer * remains the same - * + * * @param[in] buf buffer * @param[in] tailroom new tailroom - * + * * @return expanded buffer or NULL on failure */ static inline adf_nbuf_t @@ -232,11 +232,11 @@ adf_nbuf_realloc_tailroom(adf_nbuf_t buf, a_uint32_t tailroom) * having an extra API is that some OS do this in more * optimized way, rather than calling realloc (head/tail) * back to back. - * + * * @param[in] buf buffer - * @param[in] headroom new headroom + * @param[in] headroom new headroom * @param[in] tailroom new tailroom - * + * * @return expanded buffer */ static inline adf_nbuf_t @@ -253,9 +253,9 @@ adf_nbuf_expand(adf_nbuf_t buf, a_uint32_t headroom, a_uint32_t tailroom) * effect, it also "linearizes" a buffer (which is * perhaps why you'll use it mostly). It creates a * writeable copy. - * + * * @param[in] buf source nbuf to copy from - * + * * @return the new nbuf */ static inline adf_nbuf_t @@ -268,10 +268,10 @@ adf_nbuf_copy(adf_nbuf_t buf) /** * @brief link two nbufs, the new buf is piggybacked into the * older one. - * + * * @param[in] dst buffer to piggyback into * @param[in] src buffer to put - * + * * @return status of the call */ static inline void @@ -283,12 +283,12 @@ adf_nbuf_cat(adf_nbuf_t dst,adf_nbuf_t src) /** * @brief clone the nbuf (copy is readonly) - * + * * @param[in] buf nbuf to clone from - * + * * @return cloned buffer */ -static inline adf_nbuf_t +static inline adf_nbuf_t adf_nbuf_clone(adf_nbuf_t buf) { return(__adf_nbuf_clone(buf)); @@ -301,12 +301,12 @@ adf_nbuf_clone(adf_nbuf_t buf) * other users.If the nbuf is a clone then this function * creates a new copy of the data. If the buffer is not * a clone the original buffer is returned. - * + * * @param[in] buf source nbuf to create a writable copy from - * + * * @return new buffer which is writeable */ -static inline adf_nbuf_t +static inline adf_nbuf_t adf_nbuf_unshare(adf_nbuf_t buf) { return(__adf_nbuf_unshare(buf)); @@ -322,9 +322,9 @@ adf_nbuf_unshare(adf_nbuf_t buf) /** * @brief return the amount of headroom int the current nbuf - * + * * @param[in] buf buffer - * + * * @return amount of head room */ static inline a_uint32_t @@ -336,10 +336,10 @@ adf_nbuf_headroom(adf_nbuf_t buf) /** * @brief return the amount of tail space available - * + * * @param[in] buf buffer - * - * @return amount of tail room + * + * @return amount of tail room */ static inline a_uint32_t adf_nbuf_tailroom(adf_nbuf_t buf) @@ -397,7 +397,7 @@ adf_nbuf_pull_head(adf_nbuf_t buf, adf_os_size_t size) /** - * + * * @brief trim data out from the end * * @param[in] buf buf instance @@ -427,9 +427,9 @@ adf_nbuf_len(adf_nbuf_t buf) /** * @brief test whether the nbuf is cloned or not - * + * * @param[in] buf buffer - * + * * @return TRUE if it is cloned, else FALSE */ static inline a_bool_t @@ -446,19 +446,19 @@ adf_nbuf_is_cloned(adf_nbuf_t buf) /** * @brief return the frag pointer & length of the frag - * + * * @param[in] buf buffer * @param[out] sg this will return all the frags of the nbuf - * + * */ -static inline void -adf_nbuf_frag_info(adf_nbuf_t buf, adf_os_sglist_t *sg) +static inline void +adf_nbuf_frag_info(adf_nbuf_t buf, adf_os_sglist_t *sg) { __adf_nbuf_frag_info(buf, sg); } /** * @brief return the data pointer & length of the header - * + * * @param[in] buf nbuf * @param[out] addr data pointer * @param[out] len length of the data @@ -475,9 +475,9 @@ adf_nbuf_peek_header(adf_nbuf_t buf, a_uint8_t **addr, a_uint32_t *len) /** * @brief get the priv pointer from the nbuf'f private space - * + * * @param[in] buf - * + * * @return data pointer to typecast into your priv structure */ static inline a_uint8_t * @@ -533,9 +533,9 @@ adf_nbuf_queue_remove(adf_nbuf_queue_t *head) /** * @brief get the length of the queue - * + * * @param[in] head buf queue head - * + * * @return length of the queue */ static inline a_uint32_t @@ -547,12 +547,12 @@ adf_nbuf_queue_len(adf_nbuf_queue_t *head) /** * @brief get the first guy/packet in the queue - * + * * @param[in] head buf queue head - * + * * @return first buffer in queue */ -static inline adf_nbuf_t +static inline adf_nbuf_t adf_nbuf_queue_first(adf_nbuf_queue_t *head) { return (__adf_nbuf_queue_first(head)); @@ -562,9 +562,9 @@ adf_nbuf_queue_first(adf_nbuf_queue_t *head) /** * @brief get the next guy/packet of the given buffer (or * packet) - * + * * @param[in] buf buffer - * + * * @return next buffer/packet */ static inline adf_nbuf_t @@ -576,7 +576,7 @@ adf_nbuf_queue_next(adf_nbuf_t buf) /** * @brief Check if the buf queue is empty - * + * * @param[in] nbq buf queue handle * * @return TRUE if queue is empty @@ -598,7 +598,7 @@ adf_nbuf_is_queue_empty(adf_nbuf_queue_t * nbq) /** * @brief Gets the tx checksumming to be performed on this buf - * + * * @param[in] buf buffer * @param[out] hdr_off the (tcp) header start * @param[out] where the checksum offset @@ -613,7 +613,7 @@ adf_nbuf_tx_cksum_info(adf_nbuf_t buf, a_uint8_t **hdr_off, a_uint8_t **where) /** * @brief Drivers that support hw checksumming use this to * indicate checksum info to the stack. - * + * * @param[in] buf buffer * @param[in] cksum checksum */ @@ -627,7 +627,7 @@ adf_nbuf_set_rx_cksum(adf_nbuf_t buf, adf_nbuf_rx_cksum_t *cksum) /** * @brief Drivers that are capable of TCP Large segment offload * use this to get the offload info out of an buf. - * + * * @param[in] buf buffer * @param[out] tso offload info */ @@ -647,16 +647,16 @@ adf_nbuf_set_vlan_info(adf_nbuf_t buf, adf_net_vlan_tag_t vlan_tag) /** * @brief This function extracts the vid & priority from an * nbuf - * - * + * + * * @param[in] hdl net handle * @param[in] buf buffer * @param[in] vlan vlan header - * + * * @return status of the operation */ static inline a_status_t -adf_nbuf_get_vlan_info(adf_net_handle_t hdl, adf_nbuf_t buf, +adf_nbuf_get_vlan_info(adf_net_handle_t hdl, adf_nbuf_t buf, adf_net_vlanhdr_t *vlan) { return __adf_nbuf_get_vlan_info(hdl, buf, vlan); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net.h index 1cf82df..7b753bc 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net.h @@ -43,9 +43,9 @@ */ /** - * @mainpage + * @mainpage * @section Introduction - * The Atheros Driver Framework provides a mechanism to run the Atheros + * The Atheros Driver Framework provides a mechanism to run the Atheros * WLAN driver on a variety of Operating Systems and Platforms. It achieves * this by abstracting all OS-specific and platform-specific functionality * the driver requires. This ensures the core logic in the driver is OS- @@ -58,7 +58,7 @@ * This component abstracts the OS network buffer. See @ref adf_nbuf_public for details. * @subsection sec3 OS services * This component abstracts any OS services. See @ref adf_os_public for details. - */ + */ #ifndef _ADF_NET_H #define _ADF_NET_H @@ -73,17 +73,17 @@ /* * check for a NULL handle * */ -#define ADF_NET_NULL __ADF_NET_NULL +#define ADF_NET_NULL __ADF_NET_NULL /** * @brief this register the driver to the shim, but won't get * any handle until create device is called. - * + * * @param[in] drv driver info structure - * + * * @return status of operation */ -static inline a_status_t +static inline a_status_t adf_net_register_drv(adf_drv_info_t *drv) { return(__adf_net_register_drv(drv)); @@ -92,7 +92,7 @@ adf_net_register_drv(adf_drv_info_t *drv) /** * @brief deregister the driver from the shim - * + * * @param[in] name driver name passed in adf_drv_info_t * * @see adf_net_register_drv() @@ -106,122 +106,48 @@ adf_net_unregister_drv(a_uint8_t *drv_name) /** * @brief register a real device with the kernel - * + * * @param[in] hdl driver handle for this device * @param[in] op per-device switch structure * @param[in] info basic device information - * + * * @return opaque device handle */ -static inline adf_net_handle_t -adf_net_dev_create(adf_drv_handle_t hdl, - adf_dev_sw_t *op, +static inline adf_net_handle_t +adf_net_dev_create(adf_drv_handle_t hdl, + adf_dev_sw_t *op, adf_net_dev_info_t *info) { return (__adf_net_dev_create(hdl, op, info)); } - -/** - * @brief unregister a real device with the kernel - * - * @param[in] hdl opaque device handle returned by adf_net_dev_create() - * @see adf_net_dev_create() - */ -static inline void -adf_net_dev_delete(adf_net_handle_t hdl) -{ - __adf_net_dev_delete(hdl); -} - - /** * @brief register a virtual device with the kernel. * A virtual device is always backed by a real device. - * + * * @param[in] dev_hdl opaque device handle for the real device * @param[in] hdl driver handle for this virtual device * @param[in] op per-virtual-device switch structure * @param[in] info basic virtual device information - * + * * @return opaque device handle * * @see adf_net_dev_create() */ -static inline adf_net_handle_t -adf_net_vdev_create(adf_net_handle_t dev_hdl, - adf_drv_handle_t hdl, - adf_vdev_sw_t *op, - adf_net_dev_info_t *info) +static inline adf_net_handle_t +adf_net_vdev_create(adf_net_handle_t dev_hdl, + adf_drv_handle_t hdl, + adf_vdev_sw_t *op, + adf_net_dev_info_t *info) { return (__adf_net_vdev_create(dev_hdl, hdl, op, info)); } - /** - * @brief unregister the virtual device with the kernel. - * - * @param[in] hdl opaque device handle returned by adf_net_vdev_create() + * @brief Checks if the interface is running or not * - * @see adf_net_vdev_create() - */ -static inline void -adf_net_vdev_delete(adf_net_handle_t hdl) -{ - __adf_net_vdev_delete(hdl); -} - - -/** - * @brief open the real device - * * @param[in] hdl opaque device handle - * - * @return status of the operation * - * @see adf_net_dev_create() - */ -static inline a_status_t -adf_net_dev_open(adf_net_handle_t hdl) -{ - return (__adf_net_dev_open(hdl)); -} - - -/** - * @brief close the real device - * - * @param[in] hdl opaque device handle - * - * @see adf_net_dev_open() - */ -static inline void -adf_net_dev_close(adf_net_handle_t hdl) -{ - __adf_net_dev_close(hdl); -} - - -/** - * @brief transmit a network buffer using a device - * - * @param[in] hdl opaque device handle - * @param[in] pkt network buffer to transmit - * - * @return status of the operation - */ -static inline a_status_t -adf_net_dev_tx(adf_net_handle_t hdl, adf_nbuf_t pkt) -{ - return (__adf_net_dev_tx(hdl,pkt)); -} - - -/** - * @brief Checks if the interface is running or not - * - * @param[in] hdl opaque device handle - * * @return true if running, false if not */ static inline a_bool_t @@ -232,9 +158,9 @@ adf_net_is_running(adf_net_handle_t hdl) /** * @brief Checks if the interface is up or not - * + * * @param[in] hdl opaque device handle - * + * * @return true if up, false if not */ static inline a_bool_t @@ -246,12 +172,12 @@ adf_net_is_up(adf_net_handle_t hdl) /** * @brief check whether the carrier is available or not - * + * * @param[in] hdl opaque device handle - * + * * @return a_bool_t true if available, false if not */ -static inline a_bool_t +static inline a_bool_t adf_net_carrier_ok(adf_net_handle_t hdl) { return(__adf_net_carrier_ok(hdl)); @@ -260,10 +186,10 @@ adf_net_carrier_ok(adf_net_handle_t hdl) /** * @brief inform the networking stack that the link is down - * + * * @param[in] hdl opaque device handle */ -static inline void +static inline void adf_net_carrier_off(adf_net_handle_t hdl) { __adf_net_carrier_off(hdl); @@ -272,12 +198,12 @@ adf_net_carrier_off(adf_net_handle_t hdl) /** * @brief inform the networking stack that the link is up - * + * * @param[in] hdl opaque device handle - * + * * @see adf_net_carrier_off() */ -static inline void +static inline void adf_net_carrier_on(adf_net_handle_t hdl) { __adf_net_carrier_on(hdl); @@ -291,12 +217,12 @@ adf_net_carrier_on(adf_net_handle_t hdl) */ /** - * @brief inform the networking stack that the device is ready to receive + * @brief inform the networking stack that the device is ready to receive * transmit packets. Typically called during init. - * + * * @param[in] hdl opaque device handle */ -static inline void +static inline void adf_net_start_queue(adf_net_handle_t hdl) { __adf_net_start_queue(hdl); @@ -305,10 +231,10 @@ adf_net_start_queue(adf_net_handle_t hdl) /** * @brief inform the networking stack to stop sending transmit packets. * Typically called if the driver runs out of resources for the device. - * + * * @param[in] hdl opaque device handle */ -static inline void +static inline void adf_net_stop_queue(adf_net_handle_t hdl) { __adf_net_stop_queue(hdl); @@ -318,13 +244,13 @@ adf_net_stop_queue(adf_net_handle_t hdl) /** * @brief inform the native stack to resume sending packets * to transmit.Typically called when the driver has resources - * available again for the device. + * available again for the device. * * @note adf_net_wake_queue() is the counterpart of adf_net_stop_queue() * * @param[in] hdl opaque device handle */ -static inline void +static inline void adf_net_wake_queue(adf_net_handle_t hdl) { __adf_net_wake_queue(hdl); @@ -333,61 +259,22 @@ adf_net_wake_queue(adf_net_handle_t hdl) /** * @brief Check the state of the queue - * + * * @param[in] hdl opaque device handle - * + * * @return true if stopped, false if not */ -static inline a_bool_t +static inline a_bool_t adf_net_queue_stopped(adf_net_handle_t hdl) { return(__adf_net_queue_stopped(hdl)); } - -/** - * @brief This indicates a packet to the networking stack - * (minus the FCS). The driver should just strip - * the FCS and give the packet as a whole. This is - * necessary because different native stacks have - * different expectation of how they want to recv the - * packet. This fucntion will strip off whatever is - * required for the OS interface. The routine will also - * figure out whether its being called in irq context and - * call the appropriate OS API. - * - * @param[in] hdl opaque device handle - * @param[in] pkt network buffer to indicate - * @param[in] len length of buffer - */ -static inline void -adf_net_indicate_packet(adf_net_handle_t hdl, adf_nbuf_t pkt, a_uint32_t len) -{ - __adf_net_indicate_packet(hdl, pkt, len); -} - -/** - * @brief use this when indicating a vlan tagged packet on RX - * - * @param[in] hdl opaque device handle - * @param[in] pkt network buffer to indicate - * @param[in] len length of buffer - * @param[in] vid vlan id - * - * @return status of operation - */ -static inline a_status_t -adf_net_indicate_vlanpkt(adf_net_handle_t hdl, adf_nbuf_t pkt, - a_uint32_t len, adf_net_vid_t *vid) -{ - return (__adf_net_indicate_vlanpkt(hdl, pkt, len, vid)); -} - /** * @brief get interface name - * + * * @param[in] hdl opaque device handle - * + * * @return name of interface */ static inline const a_uint8_t * @@ -396,67 +283,13 @@ adf_net_ifname(adf_net_handle_t hdl) return (__adf_net_ifname(hdl)); } -/** - * @brief send management packets to apps (listener). - * This is used for wireless applications. - * - * @param[in] hdl opaque device handle - * @param[in] pkt network buffer to send - * @param[in] len length of buffer - */ -static inline void -adf_net_fw_mgmt_to_app(adf_net_handle_t hdl, adf_nbuf_t pkt, a_uint32_t len) -{ - __adf_net_fw_mgmt_to_app(hdl, pkt, len); -} -/** - * @brief send wireless events to listening applications - * - * @param[in] hdl opaque device handle - * @param[in] what event to send - * @param[in] data information about event - * @param[in] data_len length of accompanying information - */ -static inline void -adf_net_send_wireless_event(adf_net_handle_t hdl, - adf_net_wireless_event_t what, - void *data, adf_os_size_t data_len) -{ - __adf_net_send_wireless_event(hdl, what, data, data_len); -} - -/** - * @brief schedule the poll controller. - * - * @param[in] hdl opaque device handle - */ -static inline void -adf_net_poll_schedule(adf_net_handle_t hdl) -{ - __adf_net_poll_schedule(hdl); -} - - -/** - * @brief per cpu deffered callback (e.g. for RSS) - * - * @param[in] hdl opaque device handle - * @param[in] cpu_msk - * @param[in] arg - */ -static inline void -adf_net_poll_schedule_cpu(adf_net_handle_t hdl, a_uint32_t cpu_msk, void *arg) -{ - __adf_net_poll_schedule_cpu(hdl, cpu_msk, arg); -} - /** * @brief Get OS Handle from OS device object. * * @param[in] osdev OS device object - * + * * @return OS handle - */ + */ static inline adf_os_handle_t adf_net_dev_to_os(adf_os_device_t osdev) { @@ -467,9 +300,9 @@ adf_net_dev_to_os(adf_os_device_t osdev) * @brief Get OS Handle from OS net handle. * * @param[in] osdev OS net handle - * + * * @return OS handle - */ + */ static inline adf_os_handle_t adf_net_hdl_to_os(adf_net_handle_t hdl) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_sw.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_sw.h index 40b8e58..66783af 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_sw.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_sw.h @@ -36,7 +36,7 @@ * @ingroup adf_net_public * @file adf_net_sw.h * This file defines the device and virtual device switch tables. - */ + */ #ifndef __ADF_NET_SW_H #define __ADF_NET_SW_H @@ -49,7 +49,7 @@ typedef struct _adf_dev_sw{ /** * @brief Handler for device open - mandatory interface */ - a_status_t (*drv_open) (adf_drv_handle_t hdl); + a_status_t (*drv_open) (adf_drv_handle_t hdl); /** * @brief Handler for device close - mandatory interface */ @@ -66,7 +66,7 @@ typedef struct _adf_dev_sw{ /** * @brief Handler for ioctl - mandatory interface */ - a_status_t (*drv_ioctl) (adf_drv_handle_t hdl, int num, + a_status_t (*drv_ioctl) (adf_drv_handle_t hdl, int num, void *data); /** * @brief Handler for transmission timeout - mandatory interface @@ -77,17 +77,17 @@ typedef struct _adf_dev_sw{ */ a_status_t (*drv_wcmd) (adf_drv_handle_t hdl, adf_net_wcmd_type_t cmd, adf_net_wcmd_data_t *data); - /** - * @brief Handler for polling if polling/deferred processing required - + /** + * @brief Handler for polling if polling/deferred processing required - * optional interface */ - adf_net_poll_resp_t (*drv_poll) (adf_drv_handle_t hdl, int quota, + adf_net_poll_resp_t (*drv_poll) (adf_drv_handle_t hdl, int quota, int *work_done); /** * @brief Handler for per cpu deffered callback (e.g. for RSS) - optional * interface */ - adf_net_poll_resp_t (*drv_poll_cpu) (adf_drv_handle_t hdl, int quota, + adf_net_poll_resp_t (*drv_poll_cpu) (adf_drv_handle_t hdl, int quota, int *work_done, void *arg); /** * @brief Handler for disabling receive interrupts for polling. diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_types.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_types.h index 4238c38..dcd032c 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_types.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_types.h @@ -72,7 +72,7 @@ typedef enum { /** - * @brief Indicates what features are supported by the interface. + * @brief Indicates what features are supported by the interface. */ #define ADF_NET_LINK_SUPP_10baseT_Half (1 << 0) #define ADF_NET_LINK_SUPP_10baseT_Full (1 << 1) @@ -93,7 +93,7 @@ typedef enum { ADF_NET_LINK_SUPP_1000baseT_Full) /** - * @brief Indicates what features are advertised by the interface. + * @brief Indicates what features are advertised by the interface. */ #define ADF_NET_LINK_ADV_10baseT_Half (1 << 0) #define ADF_NET_LINK_ADV_10baseT_Full (1 << 1) @@ -196,7 +196,7 @@ typedef struct adf_net_vlanhdr{ typedef struct adf_net_vid{ #if defined (ADF_LITTLE_ENDIAN_MACHINE) a_uint16_t val:12; - a_uint8_t res:4; + a_uint8_t res:4; #elif defined (ADF_BIG_ENDIAN_MACHINE) a_uint8_t res:4; a_uint16_t val:12; @@ -314,7 +314,7 @@ typedef union { }adf_net_cmd_data_t; /** - * @brief For polled devices, adf_drv responds with one of the following status in + * @brief For polled devices, adf_drv responds with one of the following status in * its poll function. */ typedef enum { @@ -368,7 +368,7 @@ typedef enum adf_net_wireless_events{ ADF_IEEE80211_SCAN = __ADF_IEEE80211_SCAN, ADF_IEEE80211_REPLAY = __ADF_IEEE80211_REPLAY, ADF_IEEE80211_MICHAEL = __ADF_IEEE80211_MICHAEL, - ADF_IEEE80211_REJOIN = __ADF_IEEE80211_REJOIN, + ADF_IEEE80211_REJOIN = __ADF_IEEE80211_REJOIN, ADF_CUSTOM_PUSH_BUTTON = __ADF_CUSTOM_PUSH_BUTTON }adf_net_wireless_event_t; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_wcmd.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_wcmd.h index ea0aebb..1964195 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_wcmd.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_net_wcmd.h @@ -34,7 +34,7 @@ */ /** * Copyright (c) Atheros Communications Inc. 2002-2008 - * + * */ #ifndef __ADF_NET_WCMD_H @@ -50,8 +50,8 @@ * Defines */ #define ADF_NET_WCMD_NAME_SIZE __ADF_OS_NAME_SIZE -#define ADF_NET_WCMD_NICK_NAME 32 /**< Max Device nick name size*/ -#define ADF_NET_WCMD_MODE_NAME_LEN 6 +#define ADF_NET_WCMD_NICK_NAME 32 /**< Max Device nick name size*/ +#define ADF_NET_WCMD_MODE_NAME_LEN 6 #define ADF_NET_WCMD_IE_MAXLEN 256 /** Max Len for IE */ #define ADF_NET_WCMD_MAX_BITRATES 32 @@ -64,7 +64,7 @@ * @brief key set/get info */ #define ADF_NET_WCMD_KEYBUF_SIZE 16 -#define ADF_NET_WCMD_MICBUF_SIZE 16/**< space for tx+rx keys */ +#define ADF_NET_WCMD_MICBUF_SIZE 16/**< space for tx+rx keys */ #define ADF_NET_WCMD_KEY_DEFAULT 0x80/**< default xmit key */ #define ADF_NET_WCMD_ADDR_LEN 6 #define ADF_NET_WCMD_KEYDATA_SZ \ @@ -75,8 +75,8 @@ */ #define ADF_NET_WCMD_VAPKEY_XMIT 0x01/**< xmit */ #define ADF_NET_WCMD_VAPKEY_RECV 0x02/**< recv */ -#define ADF_NET_WCMD_VAPKEY_GROUP 0x04/**< WPA group*/ -#define ADF_NET_WCMD_VAPKEY_SWCRYPT 0x10/**< Encrypt/decrypt*/ +#define ADF_NET_WCMD_VAPKEY_GROUP 0x04/**< WPA group*/ +#define ADF_NET_WCMD_VAPKEY_SWCRYPT 0x10/**< Encrypt/decrypt*/ #define ADF_NET_WCMD_VAPKEY_SWMIC 0x20/**< Enmic/Demic */ #define ADF_NET_WCMD_VAPKEY_DEFAULT 0x80/**< Default key */ @@ -101,9 +101,9 @@ * @brief Ethtool specific */ #define ADF_NET_WCMD_BUSINFO_LEN 32 -#define ADF_NET_WCMD_DRIVSIZ 32 -#define ADF_NET_WCMD_VERSIZ 32 -#define ADF_NET_WCMD_FIRMSIZ 32 +#define ADF_NET_WCMD_DRIVSIZ 32 +#define ADF_NET_WCMD_VERSIZ 32 +#define ADF_NET_WCMD_FIRMSIZ 32 /** * *******************************Enums****************** */ @@ -133,21 +133,21 @@ typedef enum adf_net_wcmd_ciphermode{ */ typedef enum adf_net_wcmd_type{ /* net80211 */ - ADF_NET_WCMD_GET_RTS_THRES, - ADF_NET_WCMD_SET_RTS_THRES, - ADF_NET_WCMD_GET_FRAGMENT, - ADF_NET_WCMD_SET_FRAGMENT, - ADF_NET_WCMD_GET_VAPMODE, + ADF_NET_WCMD_GET_RTS_THRES, + ADF_NET_WCMD_SET_RTS_THRES, + ADF_NET_WCMD_GET_FRAGMENT, + ADF_NET_WCMD_SET_FRAGMENT, + ADF_NET_WCMD_GET_VAPMODE, ADF_NET_WCMD_SET_VAPMODE, - ADF_NET_WCMD_GET_BSSID, - ADF_NET_WCMD_SET_BSSID, - ADF_NET_WCMD_GET_NICKNAME, - ADF_NET_WCMD_SET_NICKNAME, - ADF_NET_WCMD_GET_FREQUENCY, - ADF_NET_WCMD_SET_FREQUENCY, - ADF_NET_WCMD_GET_ESSID, - ADF_NET_WCMD_SET_ESSID, - ADF_NET_WCMD_GET_TX_POWER, + ADF_NET_WCMD_GET_BSSID, + ADF_NET_WCMD_SET_BSSID, + ADF_NET_WCMD_GET_NICKNAME, + ADF_NET_WCMD_SET_NICKNAME, + ADF_NET_WCMD_GET_FREQUENCY, + ADF_NET_WCMD_SET_FREQUENCY, + ADF_NET_WCMD_GET_ESSID, + ADF_NET_WCMD_SET_ESSID, + ADF_NET_WCMD_GET_TX_POWER, ADF_NET_WCMD_SET_TX_POWER, ADF_NET_WCMD_GET_PARAM, ADF_NET_WCMD_SET_PARAM, @@ -158,14 +158,14 @@ typedef enum adf_net_wcmd_type{ ADF_NET_WCMD_SET_ENC, ADF_NET_WCMD_GET_KEY, ADF_NET_WCMD_SET_KEY, - ADF_NET_WCMD_GET_SCAN, - ADF_NET_WCMD_SET_SCAN, - ADF_NET_WCMD_GET_MODE, - ADF_NET_WCMD_SET_MODE, - ADF_NET_WCMD_GET_CHAN_LIST, - ADF_NET_WCMD_SET_CHAN_LIST, - ADF_NET_WCMD_GET_WMM_PARAM, - ADF_NET_WCMD_SET_WMM_PARAM, + ADF_NET_WCMD_GET_SCAN, + ADF_NET_WCMD_SET_SCAN, + ADF_NET_WCMD_GET_MODE, + ADF_NET_WCMD_SET_MODE, + ADF_NET_WCMD_GET_CHAN_LIST, + ADF_NET_WCMD_SET_CHAN_LIST, + ADF_NET_WCMD_GET_WMM_PARAM, + ADF_NET_WCMD_SET_WMM_PARAM, ADF_NET_WCMD_GET_VAPNAME, ADF_NET_WCMD_GET_IC_CAPS, ADF_NET_WCMD_GET_RETRIES, @@ -202,7 +202,7 @@ typedef enum adf_net_wcmd_type{ ADF_NET_WCMD_GET_DEV_DIALOG, ADF_NET_WCMD_GET_DEV_PHYERR, ADF_NET_WCMD_GET_DEV_CWM, - ADF_NET_WCMD_GET_DEV_ETHTOOL, + ADF_NET_WCMD_GET_DEV_ETHTOOL, ADF_NET_WCMD_SET_DEV_MAC, ADF_NET_WCMD_SET_DEV_CAP,/*ATH_CAP*/ /* Device write specific */ @@ -348,7 +348,7 @@ typedef enum adf_net_wcmd_param_id{ ADF_NET_WCMD_PARAM_FAST_CC,/**< fast channel change */ /** * 11n A-MPDU, A-MSDU support - */ + */ ADF_NET_WCMD_PARAM_AMPDU,/**< 11n a-mpdu support */ ADF_NET_WCMD_PARAM_AMPDU_LIMIT,/**< a-mpdu length limit */ ADF_NET_WCMD_PARAM_AMPDU_DENSITY,/**< a-mpdu density */ @@ -369,7 +369,7 @@ typedef enum adf_net_wcmd_param_id{ ADF_NET_WCMD_PARAM_RB,/**< Switch in/out of RB */ /** * RB Detection knobs. - */ + */ ADF_NET_WCMD_PARAM_RB_DETECT,/**< Do RB detection */ ADF_NET_WCMD_PARAM_RB_SKIP_THRESHOLD,/**< seqno-skip-by-1s to detect */ ADF_NET_WCMD_PARAM_RB_TIMEOUT,/**< (in ms) to restore non-RB */ @@ -419,7 +419,7 @@ typedef enum adf_net_wcmd_wmmparams{ ADF_NET_WCMD_WMMPARAMS_AIFS, ADF_NET_WCMD_WMMPARAMS_TXOPLIMIT, ADF_NET_WCMD_WMMPARAMS_ACM, - ADF_NET_WCMD_WMMPARAMS_NOACKPOLICY, + ADF_NET_WCMD_WMMPARAMS_NOACKPOLICY, }adf_net_wcmd_wmmparams_t; /** @@ -448,8 +448,8 @@ typedef enum adf_net_wcmd_txpow_flags{ ADF_NET_WCMD_TXPOW_DBM = 0,/**< dBm */ ADF_NET_WCMD_TXPOW_MWATT = 0x1,/**< mW */ ADF_NET_WCMD_TXPOW_RELATIVE = 0x2,/**< Arbitrary units */ - ADF_NET_WCMD_TXPOW_TYPE = 0xFF,/**< Type of value */ - ADF_NET_WCMD_TXPOW_RANGE = 0x1000/**< Range (min - max) */ + ADF_NET_WCMD_TXPOW_TYPE = 0xFF,/**< Type of value */ + ADF_NET_WCMD_TXPOW_RANGE = 0x1000/**< Range (min - max) */ }adf_net_wcmd_txpow_flags_t; /** * @brief Retry flags @@ -460,7 +460,7 @@ typedef enum adf_net_wcmd_retry_flags{ ADF_NET_WCMD_RETRY_MAX = 0x2,/**< Maximum */ ADF_NET_WCMD_RETRY_RELATIVE = 0x4,/**< Not in seconds/ms/us */ ADF_NET_WCMD_RETRY_SHORT = 0x10,/**< Short packets */ - ADF_NET_WCMD_RETRY_LONG = 0x20,/**< Long packets */ + ADF_NET_WCMD_RETRY_LONG = 0x20,/**< Long packets */ ADF_NET_WCMD_RETRY_MODIFIER = 0xFF,/**< Modify a parameter */ ADF_NET_WCMD_RETRY_LIMIT = 0x1000,/**< Max retries*/ ADF_NET_WCMD_RETRY_LIFETIME = 0x2000,/**< Max retries us*/ @@ -495,7 +495,7 @@ typedef enum adf_net_wcmd_cwm_event{ ADF_NET_WCMD_CWMEVENT_EXTCHRESUME,/**< ext channel sensing resume */ ADF_NET_WCMD_CWMEVENT_DESTCW20, /**< dest channel width changed to 20 */ ADF_NET_WCMD_CWMEVENT_DESTCW40, /**< dest channel width changed to 40 */ - ADF_NET_WCMD_CWMEVENT_MAX + ADF_NET_WCMD_CWMEVENT_MAX } adf_net_wcmd_cwm_event_t; /** @@ -510,7 +510,7 @@ typedef enum adf_net_wcmd_ethtool_cmd{ ADF_NET_WCMD_ETHTOOL_SWOL,/**< Set wake-on-lan options. */ ADF_NET_WCMD_ETHTOOL_GMSGLVL,/**< Get driver message level */ ADF_NET_WCMD_ETHTOOL_SMSGLVL,/**< Set driver msg level */ - ADF_NET_WCMD_ETHTOOL_NWAY_RST,/**< Restart autonegotiation. */ + ADF_NET_WCMD_ETHTOOL_NWAY_RST,/**< Restart autonegotiation. */ ADF_NET_WCMD_ETHTOOL_GEEPROM,/**< Get EEPROM data */ ADF_NET_WCMD_ETHTOOL_SEEPROM,/** < Set EEPROM data. */ ADF_NET_WCMD_ETHTOOL_GCOALESCE,/** < Get coalesce config */ @@ -582,7 +582,7 @@ typedef struct adf_net_wcmd_discard{ * @brief Link quality info */ typedef struct adf_net_wcmd_linkqty{ - a_uint8_t qual;/*link quality(retries, SNR, missed beacons)*/ + a_uint8_t qual;/*link quality(retries, SNR, missed beacons)*/ a_uint8_t level;/*Signal level (dBm) */ a_uint8_t noise;/*Noise level (dBm) */ a_uint8_t updated;/*Update flag*/ @@ -601,7 +601,7 @@ typedef struct adf_net_wcmd_freq{ * @brief VAP parameter range info */ typedef struct adf_net_wcmd_vapparam_range{ - + /** * @brief Informative stuff (to choose between different * interface) In theory this value should be the maximum @@ -612,7 +612,7 @@ typedef struct adf_net_wcmd_vapparam_range{ * benchmark... */ a_uint32_t throughput;/**< To give an idea... */ - + /** @brief NWID (or domain id) */ a_uint32_t min_nwid;/**< Min NWID to set */ a_uint32_t max_nwid;/**< Max NWID to set */ @@ -648,9 +648,9 @@ typedef struct adf_net_wcmd_vapparam_range{ * quality level (using a geometric subdivision centered on the * average). I expect that people doing the user space apps will * feedback us on which value we need to put in each - * driver... + * driver... */ - adf_net_wcmd_linkqty_t avg_qual; + adf_net_wcmd_linkqty_t avg_qual; /**@brief Rates */ a_uint8_t num_bitrates; /**< Number of entries in the list */ @@ -684,11 +684,11 @@ typedef struct adf_net_wcmd_vapparam_range{ a_uint16_t txpower_capa;/**< options supported */ a_uint8_t num_txpower;/**< Number of entries in the list */ a_int32_t txpower[ADF_NET_WCMD_MAX_TXPOWER];/**< in bps */ - + /**@brief Wireless Extension version info */ a_uint8_t we_version_compiled;/**< Must be WIRELESS_EXT */ a_uint8_t we_version_source;/**< Last update of source */ - + /**@brief Retry limits and lifetime */ a_uint16_t retry_capa;/**< retry options supported */ a_uint16_t retry_flags;/**< decode max/min retry limit*/ @@ -697,7 +697,7 @@ typedef struct adf_net_wcmd_vapparam_range{ a_int32_t max_retry;/**< Max retries */ a_int32_t min_r_time;/**< Min retry lifetime */ a_int32_t max_r_time;/**< Max retry lifetime */ - + /**@brief Frequency */ a_uint16_t num_channels;/**< Num channels [0 - (num - 1)] */ a_uint8_t num_frequency;/**< Num entries*/ @@ -706,7 +706,7 @@ typedef struct adf_net_wcmd_vapparam_range{ * numbers, because each entry contain its channel index */ adf_net_wcmd_freq_t freq[ADF_NET_WCMD_MAX_FREQ]; - + a_uint32_t enc_capa; /**< IW_ENC_CAPA_* bit field */ }adf_net_wcmd_vapparam_range_t; /** @@ -751,12 +751,12 @@ typedef struct adf_net_wcmd_param{ typedef adf_net_ie_info_t adf_net_wcmd_optie_t; /** - * @brief status of VAP interface - */ + * @brief status of VAP interface + */ typedef struct adf_net_wcmd_vapstats{ a_uint8_t status;/**< Status*/ adf_net_wcmd_linkqty_t qual;/**< Quality of the link*/ - adf_net_wcmd_discard_t discard;/**< Packet discarded counts */ + adf_net_wcmd_discard_t discard;/**< Packet discarded counts */ adf_net_wcmd_miss_t miss;/**< Packet missed counts */ } adf_net_wcmd_vapstats_t; @@ -807,7 +807,7 @@ typedef struct adf_net_wcmd_delba{ * @brief MLME */ typedef struct adf_net_wcmd_mlme{ - adf_net_wcmd_mlme_op_type_t op;/**< operation to perform */ + adf_net_wcmd_mlme_op_type_t op;/**< operation to perform */ a_uint8_t reason;/**< 802.11 reason code */ //a_uint8_t macaddr[ADF_NET_WCMD_ADDR_LEN]; adf_net_ethaddr_t mac; @@ -845,8 +845,8 @@ typedef struct adf_net_wcmd_chaninfo{ }adf_net_wcmd_chaninfo_t; /** - * @brief wmm-param info - */ + * @brief wmm-param info + */ typedef struct adf_net_wcmd_wmmparaminfo{ adf_net_wcmd_wmmparams_t cmd; a_uint32_t ac; @@ -923,8 +923,8 @@ typedef struct adf_net_wcmd_txpower{ }adf_net_wcmd_txpower_t; /** - * @brief tx-power-limit info - */ + * @brief tx-power-limit info + */ typedef a_uint32_t adf_net_wcmd_txpowlimit_t; @@ -961,7 +961,7 @@ typedef struct adf_net_wcmd_scan{ */ typedef struct adf_net_wcmd_vaplist{ a_uint8_t list[ADF_NET_WCMD_MAX_AP]; - a_uint32_t len; + a_uint32_t len; }adf_net_wcmd_vaplist_t; /** * @brief list of stations @@ -973,10 +973,10 @@ typedef struct adf_net_wcmd_stainfo{ /** * @brief ath caps info */ -typedef struct adf_net_wcmd_devcap{ - a_int32_t cap; - a_int32_t setting; -}adf_net_wcmd_devcap_t; +typedef struct adf_net_wcmd_devcap{ + a_int32_t cap; + a_int32_t setting; +}adf_net_wcmd_devcap_t; /** * @brief station stats @@ -992,7 +992,7 @@ typedef struct adf_net_wcmd_stastats{ a_uint64_t ns_rx_bytes;/**< rx data count (bytes) */ a_uint64_t ns_rx_beacons;/**< rx beacon frames */ a_uint32_t ns_rx_proberesp;/**< rx probe response frames */ - + a_uint32_t ns_rx_dup;/**< rx discard 'cuz dup */ a_uint32_t ns_rx_noprivacy;/**< rx w/ wep but privacy off */ a_uint32_t ns_rx_wepfail;/**< rx wep processing failed */ @@ -1005,7 +1005,7 @@ typedef struct adf_net_wcmd_stastats{ a_uint32_t ns_rx_decryptcrc;/**< rx decrypt failed on crc */ a_uint32_t ns_rx_unauth;/**< rx on unauthorized port */ a_uint32_t ns_rx_unencrypted;/**< rx unecrypted w/ privacy */ - + a_uint32_t ns_tx_data;/**< tx data frames */ a_uint32_t ns_tx_mgmt;/**< tx management frames */ a_uint32_t ns_tx_ucast;/**< tx unicast frames */ @@ -1013,16 +1013,16 @@ typedef struct adf_net_wcmd_stastats{ a_uint64_t ns_tx_bytes;/**< tx data count (bytes) */ a_uint32_t ns_tx_probereq;/**< tx probe request frames */ a_uint32_t ns_tx_uapsd;/**< tx on uapsd queue */ - + a_uint32_t ns_tx_novlantag;/**< tx discard 'cuz no tag */ a_uint32_t ns_tx_vlanmismatch;/**< tx discard 'cuz bad tag */ - + a_uint32_t ns_tx_eosplost;/**< uapsd EOSP retried out */ - + a_uint32_t ns_ps_discard;/**< ps discard 'cuz of age */ - + a_uint32_t ns_uapsd_triggers;/**< uapsd triggers */ - + /* MIB-related state */ a_uint32_t ns_tx_assoc;/**< [re]associations */ a_uint32_t ns_tx_assoc_fail;/**< [re]association failures */ @@ -1124,8 +1124,8 @@ typedef struct adf_net_wcmd_11n_stats { /** - * @brief ampdu info - */ + * @brief ampdu info + */ typedef struct adf_net_wcmd_ampdu_trc { a_uint32_t tr_head; a_uint32_t tr_tail; @@ -1140,8 +1140,8 @@ typedef struct adf_net_wcmd_ampdu_trc { } adf_net_wcmd_ampdu_trc_t; /** - * @brief phy stats info - */ + * @brief phy stats info + */ typedef struct adf_net_wcmd_phystats{ a_uint32_t ast_watchdog;/**< device reset by watchdog */ a_uint32_t ast_hardware;/**< fatal hardware error interrupts */ @@ -1245,8 +1245,8 @@ typedef struct adf_net_wcmd_phystats{ } adf_net_wcmd_phystats_t; /** - * @brief diag info - */ + * @brief diag info + */ typedef struct adf_net_wcmd_diag{ a_int8_t ad_name[ADF_NET_WCMD_NAME_SIZE];/**< if name*/ a_uint16_t ad_id; @@ -1283,7 +1283,7 @@ typedef struct adf_net_wcmd_cwminfo{ typedef struct adf_net_wcmd_cwmdbg{ adf_net_wcmd_cwm_cmd_t dc_cmd;/**< dbg commands*/ adf_net_wcmd_cwm_event_t dc_arg;/**< events*/ -} adf_net_wcmd_cwmdbg_t; +} adf_net_wcmd_cwmdbg_t; /** * @brief device cwm info @@ -1309,11 +1309,11 @@ typedef struct adf_net_wcmd_ethtool{ a_int8_t driver[ADF_NET_WCMD_DRIVSIZ];/**< driver short name */ a_int8_t version[ADF_NET_WCMD_VERSIZ];/**< driver ver string */ a_int8_t fw_version[ADF_NET_WCMD_FIRMSIZ];/**< firmware ver string*/ - a_int8_t bus_info[ADF_NET_WCMD_BUSINFO_LEN];/**< Bus info */ + a_int8_t bus_info[ADF_NET_WCMD_BUSINFO_LEN];/**< Bus info */ a_int8_t reserved1[32]; a_int8_t reserved2[16]; a_uint32_t n_stats;/**< number of u64's from ETHTOOL_GSTATS */ - a_uint32_t testinfo_len; + a_uint32_t testinfo_len; a_uint32_t eedump_len;/**< Size of data from EEPROM(bytes) */ a_uint32_t regdump_len;/**< Size of data from REG(bytes) */ }adf_net_wcmd_ethtool_t ; @@ -1323,12 +1323,12 @@ typedef struct adf_net_wcmd_ethtool_info{ adf_net_wcmd_ethtool_t drv; }adf_net_wcmd_ethtool_info_t; -/** - * @brief vap create flag info - */ +/** + * @brief vap create flag info + */ typedef enum adf_net_wcmd_vapcreate_flags{ ADF_NET_WCMD_CLONE_BSSID=0x1,/**< allocate unique mac/bssid */ - ADF_NET_WCMD_NO_STABEACONS/**< Do not setup the sta beacon timers*/ + ADF_NET_WCMD_NO_STABEACONS/**< Do not setup the sta beacon timers*/ }adf_net_wcmd_vapcreate_flags_t; /** @@ -1355,7 +1355,7 @@ typedef struct adf_net_wcmd_devstats{ a_uint64_t tx_dropped;/**< no space available in linux */ a_uint64_t multicast;/**< multicast packets received */ a_uint64_t collisions; - + /* detailed rx_errors: */ a_uint64_t rx_length_errors; a_uint64_t rx_over_errors;/**< receiver ring buff overflow */ @@ -1363,14 +1363,14 @@ typedef struct adf_net_wcmd_devstats{ a_uint64_t rx_frame_errors;/**< recv'd frame alignment error */ a_uint64_t rx_fifo_errors;/**< recv'r fifo overrun */ a_uint64_t rx_missed_errors;/**< receiver missed packet */ - + /* detailed tx_errors */ a_uint64_t tx_aborted_errors; a_uint64_t tx_carrier_errors; a_uint64_t tx_fifo_errors; a_uint64_t tx_heartbeat_errors; a_uint64_t tx_window_errors; - + /* for cslip etc */ a_uint64_t rx_compressed; a_uint64_t tx_compressed; @@ -1442,11 +1442,11 @@ typedef union adf_net_wcmd_data{ /** * @brief ioctl structure to configure the wireless interface. - */ + */ typedef struct adf_net_wcmd{ char if_name[ADF_NET_WCMD_NAME_SIZE];/**< Iface name*/ adf_net_wcmd_type_t type; /**< Type of wcmd */ - adf_net_wcmd_data_t data; /**< Data */ + adf_net_wcmd_data_t data; /**< Data */ } adf_net_wcmd_t; /** * @brief helper macros @@ -1505,19 +1505,19 @@ typedef struct adf_net_wcmd_chansw{ a_uint8_t chan; a_uint8_t ttbt; }adf_net_wcmd_chansw_t; -/** +/** * ***************************Unresoloved******************* */ // typedef struct adf_net_wcmd_chansw_info{ // a_uint8_t chan; // a_uint8_t ttbt; // }adf_net_wcmd_chansw_info_t; -// +// /** * @brief ath mac info */ // typedef struct { // a_uint16_t sa_family;/**< address family, AF_xxx*/ -// a_int8_t sa_data[ADF_NET_WCMD_ADDR_LEN];/**< 14 bytes address */ +// a_int8_t sa_data[ADF_NET_WCMD_ADDR_LEN];/**< 14 bytes address */ // }adf_net_wcmd_ath_mac_info_t; #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_atomic.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_atomic.h index cadd0d7..321b5fe 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_atomic.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_atomic.h @@ -32,12 +32,12 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -/** +/** * @ingroup adf_os_public * @file adf_os_atomic.h * This file abstracts an atomic counter. */ - + #ifndef _ADF_OS_ATOMIC_H #define _ADF_OS_ATOMIC_H @@ -50,7 +50,7 @@ */ typedef __adf_os_atomic_t adf_os_atomic_t; -/** +/** * @brief Initialize an atomic type variable * @param[in] v a pointer to an opaque atomic variable */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_bitops.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_bitops.h deleted file mode 100755 index b8b7b02..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_bitops.h +++ /dev/null @@ -1,233 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/** - * @ingroup adf_os_public - * @file adf_os_bitops.h - * This file abstracts bit-level operations on a stream of bytes. - */ - -#ifndef _ADF_OS_BITOPS_H -#define _ADF_OS_BITOPS_H - -#include - -/** - * @brief Set a bit atomically - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_set_bit_a(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_set_bit_a(nr, addr); -} - -/** - * @brief Set a bit - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_set_bit(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_set_bit(nr, addr); -} - -/** - * @brief Clear a bit atomically - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_clear_bit_a(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_clear_bit_a(nr, addr); -} - -/** - * @brief Clear a bit - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_clear_bit(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_clear_bit(nr, addr); -} - -/** - * @brief Toggle a bit atomically - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_change_bit_a(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_change_bit_a(nr, addr); -} - -/** - * @brief Toggle a bit - * @param[in] nr Bit to change - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_change_bit(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_change_bit(nr, addr); -} - -/** - * @brief Test and Set a bit atomically - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_set_bit_a(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_set_bit_a(nr, addr); -} - -/** - * @brief Test and Set a bit - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_set_bit(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_set_bit(nr, addr); -} - -/** - * @brief Test and clear a bit atomically - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_clear_bit_a(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_clear_bit_a(nr, addr); -} - -/** - * @brief Test and clear a bit - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_clear_bit(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_clear_bit(nr, addr); -} - -/** - * @brief Test and change a bit atomically - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its atomic and cannot be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_change_bit_a(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_change_bit_a(nr, addr); -} - -/** - * @brief Test and clear a bit - * @param[in] nr Bit to set - * @param[in] addr Address to start counting from - * - * @note its not atomic and can be re-ordered. - * Note that nr may be almost arbitrarily large; this function is not - * restricted to acting on a single-word quantity. - */ -static inline void adf_os_test_and_change_bit(a_uint32_t nr, - volatile a_uint32_t *addr) -{ - __adf_os_test_and_change_bit(nr, addr); -} - -/** - * @brief test_bit - Determine whether a bit is set - * @param[in] nr bit number to test - * @param[in] addr Address to start counting from - * - * @return 1 if set, 0 if not - */ -static inline int adf_os_test_bit(a_uint32_t nr, volatile a_uint32_t *addr) -{ - __adf_os_test_bit(nr, addr); -} - - -#endif /**_AOD_BITOPS_H*/ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_crypto.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_crypto.h deleted file mode 100755 index 25776bd..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_crypto.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/** - * @ingroup adf_os_public - * @file adf_os_crypto.h - * This file defines crypto APIs - */ - -#ifndef __ADF_OS_CRYPTO_H -#define __ADF_OS_CRYPTO_H - -#include - -/** - * @brief Representation of a cipher context. - */ -typedef __adf_os_cipher_t adf_os_cipher_t; - -/** - * @brief Types of crypto algorithms - */ -typedef enum adf_os_crypto_alg{ - ADF_OS_CRYPTO_AES = __ADF_OS_CRYPTO_AES, - ADF_OS_CRYPTO_OTHER = __ADF_OS_CRYPTO_OTHER, -}adf_os_crypto_alg_t; - - -/** - * @brief allocate the cipher context - * @param[in] type crypto algorithm - * - * @return the new cipher context - */ -static inline adf_os_cipher_t -adf_os_crypto_alloc_cipher(adf_os_crypto_alg_t type) -{ - return __adf_os_crypto_alloc_cipher(type); -} - -/** - * @brief free the cipher context - * - * @param[in] cipher cipher context - */ -static inline void -adf_os_crypto_free_cipher(adf_os_cipher_t cipher) -{ - __adf_os_crypto_free_cipher(cipher); -} - -/** - * @brief set the key for cipher context with length keylen - * - * @param[in] cipher cipher context - * @param[in] key key material - * @param[in] keylen length of key material - * - * @return a_uint32_t - */ -static inline a_uint32_t -adf_os_crypto_cipher_setkey(adf_os_cipher_t cipher, const a_uint8_t *key, a_uint8_t keylen) -{ - return __adf_os_crypto_cipher_setkey(cipher, key, keylen); -} - -/** - * @brief encrypt the data with AES - * - * @param[in] cipher cipher context - * @param[in] src unencrypted data - * @param[out] dst encrypted data - */ -static inline void -adf_os_crypto_rijndael_encrypt(adf_os_cipher_t cipher, const void *src, void *dst) -{ - __adf_os_crypto_rijndael_encrypt(cipher, src, dst); -} -#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_defer.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_defer.h index 4c16056..094e541 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_defer.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_defer.h @@ -46,37 +46,37 @@ /** * TODO This implements work queues (worker threads, kernel threads etc.). - * Note that there is no cancel on a scheduled work. You cannot free a work + * Note that there is no cancel on a scheduled work. You cannot free a work * item if its queued. You cannot know if a work item is queued or not unless * its running, whence you know its not queued. * * so if, say, a module is asked to unload itself, how exactly will it make - * sure that the work's not queued, for OS'es that dont provide such a + * sure that the work's not queued, for OS'es that dont provide such a * mechanism?? */ /** * @brief Representation of a work queue. - */ + */ typedef __adf_os_work_t adf_os_work_t; /** * @brief Representation of a bottom half. - */ + */ typedef __adf_os_bh_t adf_os_bh_t; /** * @brief This initiallizes the Bottom half deferred handler - * + * * @param[in] hdl OS handle * @param[in] bh bottom instance * @param[in] func deferred function to run at bottom half interrupt * context. * @param[in] arg argument for the deferred function */ -static inline void +static inline void adf_os_init_bh(adf_os_handle_t hdl, adf_os_bh_t *bh, adf_os_defer_fn_t func,void *arg) { @@ -86,11 +86,11 @@ adf_os_init_bh(adf_os_handle_t hdl, adf_os_bh_t *bh, /** * @brief schedule a bottom half (DPC) - * + * * @param[in] hdl OS handle * @param[in] bh bottom instance */ -static inline void +static inline void adf_os_sched_bh(adf_os_handle_t hdl, adf_os_bh_t *bh) { __adf_os_sched_bh(hdl, bh); @@ -98,11 +98,11 @@ adf_os_sched_bh(adf_os_handle_t hdl, adf_os_bh_t *bh) /** * @brief disable the bh (synchronous) - * + * * @param[in] hdl OS handle * @param[in] bh bottom instance */ -static inline void +static inline void adf_os_disable_bh(adf_os_handle_t hdl, adf_os_bh_t *bh) { __adf_os_disable_bh(hdl,bh); @@ -113,14 +113,14 @@ adf_os_disable_bh(adf_os_handle_t hdl, adf_os_bh_t *bh) /** * @brief allocate a work/task queue, This runs in non-interrupt * context, so can be preempted by H/W & S/W intr - * + * * @param[in] hdl OS handle * @param[in] work work instance * @param[in] func deferred function to run at bottom half non-interrupt * context. * @param[in] arg argument for the deferred function */ -static inline void +static inline void adf_os_init_work(adf_os_handle_t hdl, adf_os_work_t *work, adf_os_defer_fn_t func, void *arg) { @@ -129,11 +129,11 @@ adf_os_init_work(adf_os_handle_t hdl, adf_os_work_t *work, /** * @brief Schedule a deferred task on non-interrupt context - * + * * @param[in] hdl OS handle * @param[in] work work instance */ -static inline void +static inline void adf_os_sched_work(adf_os_handle_t hdl, adf_os_work_t *work) { __adf_os_sched_work(hdl, work); @@ -145,8 +145,8 @@ adf_os_sched_work(adf_os_handle_t hdl, adf_os_work_t *work) *@param[in] hdl OS handle *@param[in] work work instance */ -static inline void -adf_os_disable_work(adf_os_handle_t hdl, adf_os_work_t *work) +static inline void +adf_os_disable_work(adf_os_handle_t hdl, adf_os_work_t *work) { __adf_os_disable_work(hdl, work); } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_dma.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_dma.h index f0979f6..782292a 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_dma.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_dma.h @@ -55,13 +55,13 @@ * @param[in] size DMA buffer size * @param[in] coherent 0 => cached. * @param[out] dmap opaque coherent memory handle - * + * * @return returns the virtual address of the memory */ static inline void * -adf_os_dmamem_alloc(adf_os_device_t osdev, - adf_os_size_t size, - a_bool_t coherent, +adf_os_dmamem_alloc(adf_os_device_t osdev, + adf_os_size_t size, + a_bool_t coherent, adf_os_dma_map_t *dmap) { return __adf_os_dmamem_alloc(osdev, size, coherent, dmap); @@ -69,7 +69,7 @@ adf_os_dmamem_alloc(adf_os_device_t osdev, /** * @brief Free a previously mapped DMA buffer - * + * * @param[in] osdev platform device instance * @param[in] size DMA buffer size * @param[in] coherent 0 => cached. @@ -107,8 +107,8 @@ adf_os_dmamem_map2addr(adf_os_dma_map_t dmap) * @param[in] op op code for sync type, (see @ref adf_os_types.h) */ static inline void -adf_os_dmamem_cache_sync(adf_os_device_t osdev, - adf_os_dma_map_t dmap, +adf_os_dmamem_cache_sync(adf_os_device_t osdev, + adf_os_dma_map_t dmap, adf_os_cache_sync_t op) { __adf_os_dmamem_cache_sync(osdev, dmap, op); @@ -116,7 +116,7 @@ adf_os_dmamem_cache_sync(adf_os_device_t osdev, /** * @brief Get the cpu cache line size - * + * * @return The CPU cache line size in bytes. */ static inline adf_os_size_t diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_lock.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_lock.h index 72d3310..3828ea0 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_lock.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_lock.h @@ -124,7 +124,7 @@ adf_os_spin_unlock_irq(adf_os_spinlock_t *lock, a_uint32_t *flags) /** * @brief locks the spinlock mutex in soft irq context - * + * * @param[in] lock spinlock object pointer */ static inline void @@ -136,7 +136,7 @@ adf_os_spin_lock_bh(adf_os_spinlock_t *lock) /** * @brief unlocks the spinlock mutex in soft irq context - * + * * @param[in] lock spinlock object pointer */ static inline void @@ -153,7 +153,7 @@ adf_os_spin_unlock_bh(adf_os_spinlock_t *lock) * @param[in] lock spinlock to be held for the critical region * @param[in] func critical region function that to be executed * @param[in] context context of the critical region function - * + * * @return Boolean status returned by the critical region function */ static inline a_bool_t diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_mem.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_mem.h index ec7691f..02c6d75 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_mem.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_mem.h @@ -88,7 +88,7 @@ adf_os_mem_copy(void *dst, const void *src, adf_os_size_t size) * @param[in] src source address * @param[in] size buffer size */ -static inline void +static inline void adf_os_mem_move(void *dst, void *src, adf_os_size_t size) { __adf_os_mem_move(dst,src,size); @@ -97,7 +97,7 @@ adf_os_mem_move(void *dst, void *src, adf_os_size_t size) /** * @brief Fill a memory buffer - * + * * @param[in] buf buffer to be filled * @param[in] b byte to fill * @param[in] size buffer size @@ -111,7 +111,7 @@ adf_os_mem_set(void *buf, a_uint8_t b, adf_os_size_t size) /** * @brief Zero a memory buffer - * + * * @param[in] buf buffer to be zeroed * @param[in] size buffer size */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_module.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_module.h index ea8d32a..2ad690f 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_module.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_module.h @@ -47,36 +47,36 @@ typedef a_status_t (*module_init_func_t)(void); /** * @brief Specify the module's entry point. - */ + */ #define adf_os_virt_module_init(_mod_init_func) __adf_os_virt_module_init(_mod_init_func) /** * @brief Specify the module's exit point. - */ + */ #define adf_os_virt_module_exit(_mod_exit_func) __adf_os_virt_module_exit(_mod_exit_func) /** * @brief Specify the module's dependency on another module. - */ + */ #define adf_os_module_dep(_name,_dep) __adf_os_module_dep(_name,_dep) /** * @brief Export a symbol from a module. - */ + */ #define adf_os_export_symbol(_sym) __adf_os_export_symbol(_sym) - + /** * @brief Module parameter of type integer. - */ + */ #define ADF_OS_PARAM_TYPE_INT32 __ADF_OS_PARAM_TYPE_INT32 /** * @brief Module parameter of type string. - */ + */ #define ADF_OS_PARAM_TYPE_STRING __ADF_OS_PARAM_TYPE_STRING /** - * @brief Declare a module parameter. + * @brief Declare a module parameter. * * @param[in] name name of the parameter * @param[in] type type of the parameter @@ -86,8 +86,8 @@ typedef a_status_t (*module_init_func_t)(void); * Only two types are supported * ADF_OS_PARAM_TYPE_STRING * ADF_OS_PARAM_TYPE_INT32 - * For example, say, the parameters name "my_int" and "my_name" are of - * variables of type int and string respectively. Then you would declare them + * For example, say, the parameters name "my_int" and "my_name" are of + * variables of type int and string respectively. Then you would declare them * as follows: * @code * adf_os_declare_param(my_int, ADF_OS_PARAM_TYPE_INT32); @@ -99,7 +99,7 @@ typedef a_status_t (*module_init_func_t)(void); * adf_os_read_param(my_name, &softc->sc_my_name); * @endcode * - * or + * or * @code * st = adf_os_read_param(my_int, &softc->sc_my_int); * @endcode diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pci.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pci.h index 274ae50..d8116e5 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pci.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pci.h @@ -44,18 +44,18 @@ /** * @brief Define the entry point for the PCI module. - */ + */ #define adf_os_pci_module_init(_fn) __adf_os_pci_module_init(_fn) /** * @brief Define the exit point for the PCI module. - */ + */ #define adf_os_pci_module_exit(_fn) __adf_os_pci_module_exit(_fn) /** * @brief Setup the following driver information: name, PCI IDs of devices * supported and some device handlers. - */ + */ #define adf_os_pci_set_drv_info(_name, _pci_ids, _attach, _detach, _suspend, _resume) \ __adf_os_pci_set_drv_info(_name, _pci_ids, _attach, _detach, _suspend, _resume) @@ -67,8 +67,8 @@ * @param[out] val value read * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_read8(adf_os_device_t osdev, int offset, a_uint8_t *val) { return __adf_os_pci_config_read8(osdev, offset, val); @@ -82,8 +82,8 @@ adf_os_pci_config_read8(adf_os_device_t osdev, int offset, a_uint8_t *val) * @param[in] val value to write * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_write8(adf_os_device_t osdev, int offset, a_uint8_t val) { return __adf_os_pci_config_write8(osdev, offset, val); @@ -97,8 +97,8 @@ adf_os_pci_config_write8(adf_os_device_t osdev, int offset, a_uint8_t val) * @param[out] val value read * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_read16(adf_os_device_t osdev, int offset, a_uint16_t *val) { return __adf_os_pci_config_read16(osdev, offset, val); @@ -112,8 +112,8 @@ adf_os_pci_config_read16(adf_os_device_t osdev, int offset, a_uint16_t *val) * @param[in] val value to write * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_write16(adf_os_device_t osdev, int offset, a_uint16_t val) { return __adf_os_pci_config_write16(osdev, offset, val); @@ -127,8 +127,8 @@ adf_os_pci_config_write16(adf_os_device_t osdev, int offset, a_uint16_t val) * @param[out] val value read * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_read32(adf_os_device_t osdev, int offset, a_uint32_t *val) { return __adf_os_pci_config_read32(osdev, offset, val); @@ -142,8 +142,8 @@ adf_os_pci_config_read32(adf_os_device_t osdev, int offset, a_uint32_t *val) * @param[in] val value to write * * @return status of operation - */ -static inline int + */ +static inline int adf_os_pci_config_write32(adf_os_device_t osdev, int offset, a_uint32_t val) { return __adf_os_pci_config_write32(osdev, offset, val); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pseudo.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pseudo.h deleted file mode 100755 index 65bf1e8..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_pseudo.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/** - * @ingroup adf_os_public - * @file adf_os_pseudo.h - * This file abstracts "pseudo module" semantics. - */ -#ifndef __ADF_OS_PSEUDO_H -#define __ADF_OS_PSEUDO_H - -#include - -/** - * @brief Specify the module's entry point. - */ -#define adf_os_pseudo_module_init(_fn) __adf_os_pseudo_module_init(_fn) - -/** - * @brief Specify the module's exit point. - */ -#define adf_os_pseudo_module_exit(_fn) __adf_os_pseudo_module_exit(_fn) - -/** - * @brief Setup the following driver information: name, pseudo IDs of devices - * supported and some device handlers. - */ -#define adf_os_pseudo_set_drv_info(_name, _ifname, _pseudo_ids, _attach, _detach, \ - _suspend, _resume) \ - __adf_os_pseudo_set_drv_info(_name, _ifname, _pseudo_ids, \ - _attach, _detach, \ - _suspend, _resume) -#endif - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_stdtypes.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_stdtypes.h index f8f3f45..e31a67a 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_stdtypes.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_stdtypes.h @@ -34,7 +34,7 @@ */ /** * @defgroup adf_os_public OS abstraction API - */ + */ /** * @ingroup adf_os_public @@ -48,11 +48,11 @@ #include /** - * @brief basic data types. + * @brief basic data types. */ typedef enum { A_FALSE, - A_TRUE + A_TRUE }a_bool_t; typedef __a_uint8_t a_uint8_t; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_time.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_time.h index 034bfe8..827120b 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_time.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_time.h @@ -45,7 +45,7 @@ /** * @brief count the number of ticks elapsed from the time when * the system booted - * + * * @return ticks */ static inline unsigned long @@ -59,7 +59,7 @@ adf_os_ticks(void) * * @param[in] ticks number of ticks * @return time in milliseconds - */ + */ static inline a_uint32_t adf_os_ticks_to_msecs(unsigned long ticks) { @@ -71,7 +71,7 @@ adf_os_ticks_to_msecs(unsigned long ticks) * * @param[in] time in milliseconds * @return number of ticks - */ + */ static inline unsigned long adf_os_msecs_to_ticks(a_uint32_t msecs) { @@ -111,19 +111,19 @@ adf_os_mdelay(int msecs) /** * @brief Check if _a is later than _b. - */ + */ #define adf_os_time_after(_a, _b) __adf_os_time_after(_a, _b) /** * @brief Check if _a is prior to _b. - */ + */ #define adf_os_time_before(_a, _b) __adf_os_time_before(_a, _b) /** * @brief Check if _a atleast as recent as _b, if not later. - */ + */ #define adf_os_time_after_eq(_a, _b) __adf_os_time_after_eq(_a, _b) #endif - + diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_timer.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_timer.h index 81d4450..9e48cb2 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_timer.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_timer.h @@ -53,7 +53,7 @@ typedef __adf_os_timer_t adf_os_timer_t; /** * @brief Initialize a timer - * + * * @param[in] hdl OS handle * @param[in] timer timer object pointer * @param[in] func timer function @@ -70,7 +70,7 @@ adf_os_timer_init(adf_os_handle_t hdl, /** * @brief Start a one-shot timer - * + * * @param[in] timer timer object pointer * @param[in] msec expiration period in milliseconds */ @@ -84,7 +84,7 @@ adf_os_timer_start(adf_os_timer_t *timer, int msec) * @brief Cancel a timer * * @param[in] timer timer object pointer - * + * * @retval TRUE timer was cancelled and deactived * @retval FALSE timer was cancelled but already got fired. */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_types.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_types.h index 109b7c4..44d77da 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_types.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_types.h @@ -48,12 +48,12 @@ #define ADF_OS_MAX_SCATTER __ADF_OS_MAX_SCATTER /** * @brief Max number of scatter-gather segments. - */ + */ #define ADF_OS_MAX_SGLIST 4 /** * @brief denotes structure is packed. - */ + */ #define adf_os_packed __adf_os_packed /** @@ -86,34 +86,34 @@ typedef __adf_os_off_t adf_os_off_t; /** * @brief DMA mapping object. - */ + */ typedef __adf_os_dma_map_t adf_os_dma_map_t; /** * @brief DMA address. - */ + */ typedef __adf_os_dma_addr_t adf_os_dma_addr_t; /** * @brief DMA size. - */ + */ typedef __adf_os_dma_size_t adf_os_dma_size_t; /** * @brief Information inside a DMA map. - */ + */ typedef struct adf_os_dmamap_info{ a_uint32_t nsegs; /**< total number mapped segments*/ struct __dma_segs{ adf_os_dma_addr_t paddr; /**< physical(dma'able) address of the segment*/ adf_os_dma_size_t len; /**< length of the segment*/ - } dma_segs[ADF_OS_MAX_SCATTER]; + } dma_segs[ADF_OS_MAX_SCATTER]; }adf_os_dmamap_info_t; /** * @brief Representation of a scatter-gather list. - */ + */ typedef struct adf_os_sglist{ a_uint32_t nsegs; /**< total number of segments*/ struct __sg_segs{ @@ -133,7 +133,7 @@ typedef struct adf_os_sglist{ * operations, where reading a network packet or * storage sector corresponds to a read operation in * bus_dma. - * + * * ADF_SYNC_PREREAD Perform any synchronization * required prior to an update * of host memory by the DMA @@ -180,7 +180,7 @@ typedef enum { } a_status_t; /** - * @brief An ecore needs to provide a table of all pci device/vendor id's it + * @brief An ecore needs to provide a table of all pci device/vendor id's it * supports * * This table should be terminated by a NULL entry , i.e. {0} @@ -214,7 +214,7 @@ typedef enum { /** * @brief Representation of a h/w resource. - */ + */ typedef struct { a_uint64_t start; a_uint64_t end; @@ -225,7 +225,7 @@ typedef struct { /** * @brief Representation of bus registration data. - */ + */ typedef union { adf_os_pci_dev_id_t *pci; void *raw; @@ -233,7 +233,7 @@ typedef union { /** * @brief Representation of data required for attach. - */ + */ typedef union { adf_os_pci_dev_id_t pci; void *raw; @@ -243,7 +243,7 @@ typedef union { /** * @brief Types of buses. - */ + */ typedef enum { ADF_OS_BUS_TYPE_PCI = 1, ADF_OS_BUS_TYPE_GENERIC, @@ -251,7 +251,7 @@ typedef enum { /** * @brief IRQ handler response codes. - */ + */ typedef enum { ADF_OS_IRQ_NONE, ADF_OS_IRQ_HANDLED, @@ -259,7 +259,7 @@ typedef enum { /** * @brief DMA mask types. - */ + */ typedef enum { ADF_OS_DMA_MASK_32BIT, ADF_OS_DMA_MASK_64BIT, @@ -272,8 +272,8 @@ typedef enum { * ADF_OS_DMA_FROM_DEVICE (data going from memory to device) */ typedef enum { - ADF_OS_DMA_TO_DEVICE = __ADF_OS_DMA_TO_DEVICE, - ADF_OS_DMA_FROM_DEVICE = __ADF_OS_DMA_FROM_DEVICE, + ADF_OS_DMA_TO_DEVICE = __ADF_OS_DMA_TO_DEVICE, + ADF_OS_DMA_FROM_DEVICE = __ADF_OS_DMA_FROM_DEVICE, } adf_os_dma_dir_t; /* @@ -300,12 +300,12 @@ typedef void (*adf_os_timer_func_t)(void *); /** * @brief Prototype of IRQ function. - */ -typedef adf_os_irq_resp_t (*adf_os_drv_intr)(adf_drv_handle_t hdl); + */ +typedef adf_os_irq_resp_t (*adf_os_drv_intr)(adf_drv_handle_t hdl); /** * @brief The OS print routine. - */ + */ #define adf_os_print __adf_os_print /** @@ -316,8 +316,8 @@ typedef struct _adf_drv_info{ /** * @brief driver specific functions */ - adf_drv_handle_t (*drv_attach) (adf_os_resource_t *res, int count, - adf_os_attach_data_t *data, + adf_drv_handle_t (*drv_attach) (adf_os_resource_t *res, int count, + adf_os_attach_data_t *data, adf_os_device_t osdev); void (*drv_detach) (adf_drv_handle_t hdl); void (*drv_suspend) (adf_drv_handle_t hdl, adf_os_pm_t pm); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_util.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_util.h index 5296f16..a9a13fc 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_util.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/adf_os_util.h @@ -54,40 +54,40 @@ #define adf_os_likely(_expr) __adf_os_likely(_expr) /** - * @brief read memory barrier. + * @brief read memory barrier. */ #define adf_os_wmb() __adf_os_wmb() /** - * @brief write memory barrier. + * @brief write memory barrier. */ #define adf_os_rmb() __adf_os_rmb() /** - * @brief read + write memory barrier. + * @brief read + write memory barrier. */ #define adf_os_mb() __adf_os_mb() /** * @brief return the lesser of a, b - */ + */ #define adf_os_min(_a, _b) __adf_os_min(_a, _b) /** * @brief return the larger of a, b - */ + */ #define adf_os_max(_a, _b) __adf_os_max(_a, _b) /** * @brief assert "expr" evaluates to true. - */ + */ #define adf_os_assert(expr) __adf_os_assert(expr) /** * @brief supply pseudo-random numbers */ -static inline void adf_os_get_rand(adf_os_handle_t hdl, - a_uint8_t *ptr, +static inline void adf_os_get_rand(adf_os_handle_t hdl, + a_uint8_t *ptr, a_uint32_t len) { __adf_os_get_rand(hdl, ptr, len); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/allocram_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/allocram_api.h similarity index 99% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/allocram_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/allocram_api.h index 4a849a8..551d709 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/allocram_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/allocram_api.h @@ -71,7 +71,7 @@ struct allocram_api { * be set to 0 -- only a single arena is currently supported. */ void *(* cmnos_allocram)(void *which_arena, A_UINT32 nbytes); - + void (* cmnos_allocram_debug)(void); }; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/asf_sm.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/asf_sm.h deleted file mode 100755 index f7272b3..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/asf_sm.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef _ASF_SM_H_ -#define _ASF_SM_H_ - -typedef void (*asf_sm_fn_t)(void *object, int event); - -typedef struct asf_sm_s { - void * object; - asf_sm_fn_t fn; - void * event_arg; -} asf_sm_t; - -static inline void -asf_sm_init(asf_sm_t *sm, void *object) -{ - sm->object = object; -} - -static inline void -asf_sm_set_state(asf_sm_t *sm, asf_sm_fn_t fn) -{ - sm->fn = fn; -} - -static inline void -asf_sm_send_event(asf_sm_t *sm, int event) -{ - sm->fn(sm->object, event); -} - -static inline void -asf_sm_set_event_arg(asf_sm_t *sm, void *arg) -{ - sm->event_arg = arg; -} - -static inline void * -asf_sm_get_event_arg(asf_sm_t *sm) -{ - return sm->event_arg; -} - -#endif /* _ASF_SM_H_ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/athos_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/athos_api.h similarity index 99% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/athos_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/athos_api.h index 01f75aa..93188fb 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/athos_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/athos_api.h @@ -82,7 +82,7 @@ struct _A_os_linkage_check { int table; }; -/* +/* * A_INIT() handles any initialization needed by the OS abstraction, * and it clears the application's BSS, if necessary. (Application BSS * is not cleared if the application is linked into a single image that @@ -96,7 +96,7 @@ A_INIT(void) { struct _A_os_linkage_check link_check; unsigned int *clrptr; - + if (&START_BSS != _A_MAGPIE_INDIRECTION_TABLE->cmnos.start_bss) { /* Clear BSS */ for (clrptr = &START_BSS; clrptr < &END_BSS; clrptr++) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_engine_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_engine_api.h similarity index 96% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_engine_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_engine_api.h index fad2016..e57c5e0 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_engine_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_engine_api.h @@ -34,9 +34,9 @@ */ /* * @File: dma_engine_api.h - * + * * @Abstract: DMA Engine api - * + * * @Notes: */ @@ -75,44 +75,44 @@ struct zsTxDmaQueue { struct zsDmaDesc* head; struct zsDmaDesc* terminator; - + /* Below are fields specific to TX */ VBUF *xmited_buf_head; - VBUF *xmited_buf_tail; + VBUF *xmited_buf_tail; }; /* hardware API table structure (API descriptions below) */ -struct dma_engine_api +struct dma_engine_api { void (*_init)(); void (*_init_rx_queue)(struct zsDmaQueue *q); - + void (*_init_tx_queue)(struct zsTxDmaQueue *q); - + void (*_config_rx_queue)(struct zsDmaQueue *q, int num_desc, int buf_size); - + void (*_xmit_buf)(struct zsTxDmaQueue *q, VBUF *buf); - + void (*_flush_xmit)(struct zsDmaQueue *q); - + VBUF* (*_reap_recv_buf)(struct zsDmaQueue *q); - + void (*_return_recv_buf)(struct zsDmaQueue *q, VBUF *buf); - + VBUF* (*_reap_xmited_buf)(struct zsTxDmaQueue *q); - + void (*_swap_data)(struct zsDmaDesc* desc); - + int (*_has_compl_packets)(struct zsDmaQueue *q); - + void (*_desc_dump)(struct zsDmaQueue *q); - + /* The functions below are for patchable */ struct zsDmaDesc* (*_get_packet)(struct zsDmaQueue* q); void (*_reclaim_packet)(struct zsDmaQueue* q, struct zsDmaDesc* desc); void (*_put_packet)(struct zsDmaQueue* q, struct zsDmaDesc* desc); - + /* room to expand this table by another table */ void *pReserved; }; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_lib.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_lib.h similarity index 98% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_lib.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_lib.h index 983e8b3..8b89d87 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/dma_lib.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/dma_lib.h @@ -68,7 +68,7 @@ struct dma_lib_api{ A_UINT16 (*rx_init)(dma_engine_t eng_no, dma_iftype_t if_type); void (*rx_config)(dma_engine_t eng_no, a_uint16_t num_desc, a_uint16_t gran); - void (*rx_start)(dma_engine_t eng_no); + void (*rx_start)(dma_engine_t eng_no); A_UINT32 (*intr_status)(dma_iftype_t if_type); A_UINT16 (*hard_xmit)(dma_engine_t eng_no, VBUF *buf); void (*flush_xmit)(dma_engine_t eng_no); @@ -83,7 +83,7 @@ struct dma_lib_api{ /** * @brief Install the DMA lib api's this for ROM patching * support - * + * * @param apis */ void dma_lib_module_install(struct dma_lib_api *apis); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/eeprom_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/eeprom_api.h similarity index 97% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/eeprom_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/eeprom_api.h index b340f35..67191be 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/eeprom_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/eeprom_api.h @@ -36,13 +36,13 @@ #define __EEPROM_API_H__ typedef enum { - RET_SUCCESS = 0, + RET_SUCCESS = 0, RET_NOT_INIT, RET_NOT_EXIST, RET_EEP_CORRUPT, RET_EEP_OVERFLOW, - - // add return code from here + + // add return code from here RET_UNKNOWN } T_EEP_RET; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_api.h similarity index 96% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_api.h index eff92df..3f0ed16 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_api.h @@ -34,9 +34,9 @@ */ /* * @File: HIF_api.h - * + * * @Abstract: Host Interface api - * + * * @Notes: */ @@ -64,37 +64,38 @@ typedef void* hif_handle_t; /* hardware API table structure (API descriptions below) */ struct hif_api { hif_handle_t (*_init)(HIF_CONFIG *pConfig); - + void (* _shutdown)(hif_handle_t); - + void (*_register_callback)(hif_handle_t, HIF_CALLBACK *); - + int (*_get_total_credit_count)(hif_handle_t); - + void (*_start)(hif_handle_t); void (*_config_pipe)(hif_handle_t handle, int pipe, int creditCount); - + int (*_send_buffer)(hif_handle_t handle, int pipe, adf_nbuf_t buf); - void (*_return_recv_buf)(hif_handle_t handle, int pipe, adf_nbuf_t buf); + void (*_return_recv_buf)(hif_handle_t handle, int pipe, adf_nbuf_t buf); //void (*_set_recv_bufsz)(int pipe, int bufsz); //void (*_pause_recv)(int pipe); //void (*_resume_recv)(int pipe); int (*_is_pipe_supported)(hif_handle_t handle, int pipe); - + int (*_get_max_msg_len)(hif_handle_t handle, int pipe); - + int (*_get_reserved_headroom)(hif_handle_t handle); - + void (*_isr_handler)(hif_handle_t handle); - + void (*_get_default_pipe)(hif_handle_t handle, A_UINT8 *pipe_uplink, A_UINT8 *pipe_downlink); - + /* room to expand this table by another table */ void *pReserved; }; +extern void hif_module_install(struct hif_api *apis); extern void generic_hif_module_install(struct hif_api *apis); #endif /* #ifndef _HIF_API_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_gmac.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_gmac.h similarity index 99% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_gmac.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_gmac.h index 9625dca..4e1714f 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_gmac.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_gmac.h @@ -50,7 +50,7 @@ #define ATH_P_MAGNORM 0x13 /*Magpie GMAC 19 for HTC & others*/ #define ETH_P_ATH 0x88bd - + typedef enum hif_gmac_pipe{ HIF_GMAC_PIPE_RX = 1, /*Normal Priority RX*/ HIF_GMAC_PIPE_TX = 2, /*Normal Priority TX*/ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_pci.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_pci.h similarity index 72% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_pci.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_pci.h index 40d96b5..a2621b1 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_pci.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_pci.h @@ -1,5 +1,6 @@ /* * Copyright (c) 2013 Qualcomm Atheros, Inc. + * * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,15 +33,18 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + #ifndef __HIF_PCI_H #define __HIF_PCI_H #include +#include + +#define PCI_MAX_DATA_PKT_LEN 1664 +#define PCI_MAX_CMD_PKT_LEN 512 +#define PCI_MAX_BOOT_DESC 2 -#define PCI_MAX_PKT_LEN 1600 -#define PCI_MAX_DESC 2 - typedef enum hif_pci_pipe_rx{ HIF_PCI_PIPE_RX0, /*Normal Priority RX*/ HIF_PCI_PIPE_RX1, @@ -55,11 +59,25 @@ typedef enum hif_pci_pipe_tx{ HIF_PCI_PIPE_TX_MAX }hif_pci_pipe_tx_t; -struct pci_api{ - void (*pci_boot_init)(void); +typedef struct __pci_softc{ + HIF_CALLBACK sw; +}__pci_softc_t; + +struct hif_pci_api{ + void (*pci_boot_init)(void); + hif_handle_t (*pci_init)(HIF_CONFIG *pConfig); + void (*pci_reset)(void); + void (*pci_enable)(void); + void (*pci_reap_xmitted)(__pci_softc_t *sc, + dma_engine_t eng_no); + void (*pci_reap_recv)(__pci_softc_t *sc, dma_engine_t eng_no); + A_UINT8 (*pci_get_pipe)(dma_engine_t eng); + dma_engine_t (*pci_get_tx_eng)(hif_pci_pipe_tx_t pipe); + dma_engine_t (*pci_get_rx_eng)(hif_pci_pipe_rx_t pipe); + }; -void cmnos_pci_module_install(struct pci_api *apis); +void hif_pci_api_install(struct hif_pci_api *apis); void hif_pci_module_install(struct hif_api *apis); #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_usb.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_usb.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_usb.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/hif_usb.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/intr_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/intr_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/intr_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/intr_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/Magpie_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/Magpie_api.h index 1c1b174..3093367 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/Magpie_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/Magpie_api.h @@ -34,16 +34,18 @@ */ /* * @File: Magpie_api.h - * + * * @Abstract: Magpie FW api - * + * * @Notes: */ #ifndef _MAGPIE_API_H #define _MAGPIE_API_H +#include #include + #include "cmnos_api.h" #include "vbuf_api.h" #include "vdesc_api.h" @@ -111,8 +113,8 @@ #define dma_lib_tx_init(eng_no, if_type) A_INDIR(dma_lib.tx_init(eng_no, if_type)) #define dma_lib_rx_init(eng_no, if_type) A_INDIR(dma_lib.rx_init(eng_no, if_type)) #define dma_lib_rx_config(eng_no, desc, gran) A_INDIR(dma_lib.rx_config(eng_no, desc, gran)) -#define dma_lib_tx_start(eng_no) A_INDIR(dma_lib.tx_start(eng_no)) -#define dma_lib_rx_start(eng_no) A_INDIR(dma_lib.rx_start(eng_no)) +#define dma_lib_tx_start(eng_no) A_INDIR(dma_lib.tx_start(eng_no)) +#define dma_lib_rx_start(eng_no) A_INDIR(dma_lib.rx_start(eng_no)) #define dma_lib_intr_status(if_type) A_INDIR(dma_lib.intr_status(if_type)) #define dma_lib_hard_xmit(eng_no, buf) A_INDIR(dma_lib.hard_xmit(eng_no, buf)) #define dma_lib_flush_xmit(eng_no) A_INDIR(dma_lib.flush_xmit(eng_no)) @@ -127,11 +129,11 @@ #define HIF_init(pConfig) A_INDIR(hif._init(pConfig)) #define HIF_shutdown(h) A_INDIR(hif._shutdown(h)) #define HIF_register_callback(h, pConfig) A_INDIR(hif._register_callback(h, pConfig)) -#define HIF_start(h) A_INDIR(hif._start(h)) -#define HIF_config_pipe(h, pipe, desc_list) A_INDIR(hif._config_pipe(h, pipe, desc_list)) -#define HIF_send_buffer(h, pipe, buf) A_INDIR(hif._send_buffer(h, pipe, buf)) -#define HIF_return_recv_buf(h, pipe, buf) A_INDIR(hif._return_recv_buf(h, pipe, buf)) -#define HIF_isr_handler(h) A_INDIR(hif._isr_handler(h)) +#define HIF_start(h) A_INDIR(hif._start(h)) +#define HIF_config_pipe(h, pipe, desc_list) A_INDIR(hif._config_pipe(h, pipe, desc_list)) +#define HIF_send_buffer(h, pipe, buf) A_INDIR(hif._send_buffer(h, pipe, buf)) +#define HIF_return_recv_buf(h, pipe, buf) A_INDIR(hif._return_recv_buf(h, pipe, buf)) +#define HIF_isr_handler(h) A_INDIR(hif._isr_handler(h)) #define HIF_is_pipe_supported(h, pipe) A_INDIR(hif._is_pipe_supported(h, pipe)) #define HIF_get_max_msg_len(h, pipe) A_INDIR(hif._get_max_msg_len(h, pipe)) #define HIF_get_reserved_headroom(h) A_INDIR(hif._get_reserved_headroom(h)) @@ -161,7 +163,7 @@ #define HTC_GetReservedHeadroom(h) A_INDIR(htc._HTC_GetReservedHeadroom(h)) #define HTC_NotifyTargetInserted(h) -#define HTC_NotifyTargetDetached(h) +#define HTC_NotifyTargetDetached(h) /* WMI SVC module */ #define WMI_SERVICE_MODULE_INSTALL() WMI_service_module_install(&_A_MAGPIE_INDIRECTION_TABLE->wmi_svc_api) @@ -203,7 +205,7 @@ typedef struct _A_magpie_indirection_table { struct sflash_api sflash; struct hif_api hif; struct htc_apis htc; - WMI_SVC_APIS wmi_svc_api; + WMI_SVC_APIS wmi_svc_api; struct usbfifo_api usbfifo_api; struct buf_pool_api buf_pool; struct vbuf_api vbuf; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/clock_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/clock_api.h deleted file mode 100755 index 15ddc74..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/clock_api.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __CLOCK_API_H__ -#define __CLOCK_API_H__ - -#define TICK_MSEC_RATIO 1 -#define TICK_TO_MSEC(tick) ((tick)/TICK_MSEC_RATIO) -#define MSEC_TO_TICK(msec) ((msec)* TICK_MSEC_RATIO) - -typedef struct date_s { - uint16_t miliseconds; - uint16_t seconds; - uint16_t minutes; - uint16_t hours; -} A_DATE_T; - -struct clock_api { - void (* _clock_init)(A_UINT32 ref_clk); - void (* _clockregs_init)(void); - A_UINT32 (* _uart_frequency)(void); - void (* _delay_us)(int); - void (* _wlan_band_set)(int); - A_UINT32 (* _refclk_speed_get)(void); - A_UINT32 (* _milliseconds)(void); - void (* _sysclk_change)(uint32_t sys_clk); - A_UINT32 (* _sysclk_get)(void); - - void (* _clock_tick)(void); -}; - -#endif /* __CLOCK_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/cmnos_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/cmnos_api.h deleted file mode 100755 index 6bd18fb..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/cmnos_api.h +++ /dev/null @@ -1,664 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __CMNOS_API_H__ -#define __CMNOS_API_H__ - -/* - * This file contains wrappers to OS operating system functions - * that are available in all versions of the operating system. - * - * Target software must always use these wrappers to access OS - * services -- it may not access any OS services directly. - */ - -#include "xtensa/config/core.h" -#include "xtensa/hal.h" -#include "xtensa/xtruntime.h" -#include "sys_cfg.h" - -/* cmnos interface */ -#include "printf_api.h" -#include "uart_api.h" -#include "dbg_api.h" -#include "mem_api.h" -#include "misc_api.h" -#include "string_api.h" -#include "timer_api.h" -#include "romp_api.h" -#include "allocram_api.h" -#include "tasklet_api.h" -#include "clock_api.h" -#include "intr_api.h" -#include "wdt_api.h" -#include "eeprom_api.h" -#include "usb_api.h" - -#if defined(PROJECT_K2) -#if SYSTEM_MODULE_SFLASH -#include "sflash_api.h" -#endif -#endif - -#define AR6K_ROM_START 0x004e0000 -#define AR6K_ROM_ADDR(byte_offset) (AR6K_ROM_START+(byte_offset)) -#define TARG_ROM_ADDRS(byte_offset) AR6K_ROM_ADDR(byte_offset) - -#define IML_SIGNAL_UNUSED0_ADDR TARG_ROM_ADDRS(0) /* Cannot be used -- aligned */ -#define IML_SIGNAL_ASSERT_ADDR TARG_ROM_ADDRS(1) /* Signal an assertion failure */ -#define IML_SIGNAL_PRINTF_ADDR TARG_ROM_ADDRS(2) /* Signal a printf request */ -#define IML_SIGNAL_UNUSED4_ADDR TARG_ROM_ADDRS(4) /* Cannot be used -- aligned */ -#define IML_SIGNAL_UNUSED8_ADDR TARG_ROM_ADDRS(8) /* Cannot be used -- aligned */ -#define IML_SIGNAL_UNUSEDC_ADDR TARG_ROM_ADDRS(0xc) /* Cannot be used -- aligned */ -#define IML_SIGNAL_MASK 0xfffe000f -#define IML_LINENUM_SHIFT 4 - -#define NOW() xthal_get_ccount() - -#if defined(__XTENSA__) -#define _A_BARRIER asm volatile("memw") -#else -#define _A_BARRIER -#endif - -#define A_ASSERT( __bool ) \ - do { \ - if (0 == (__bool)) { \ - (void)*((volatile int *)(IML_SIGNAL_ASSERT_ADDR+(__LINE__<<4)));\ - _A_BARRIER; \ - } \ - } while (0) - - -#define A_IML_IS_ASSERT(vaddr) \ - (((vaddr) & IML_SIGNAL_MASK) == (IML_SIGNAL_ASSERT_ADDR & IML_SIGNAL_MASK)) - - -#define PRINT_FAILURE_STATE() \ -do { \ - uint32_t epc1, epc2, epc3, epc4; \ - \ - asm volatile("rsr %0,%1" : "=r" (epc1) : "n" (EPC_1)); \ - asm volatile("rsr %0,%1" : "=r" (epc2) : "n" (EPC_2)); \ - asm volatile("rsr %0,%1" : "=r" (epc3) : "n" (EPC_3)); \ - asm volatile("rsr %0,%1" : "=r" (epc4) : "n" (EPC_4)); \ - \ - A_PRINTF("\tepc1=0x%x, epc2=0x%x, epc3=0x%x, epc4=0x%x\n", \ - epc1, epc2, epc3, epc4); \ - A_PRINTF("0x%08x, 0x%08x, 0x%08x, \n\r", \ - DEBUG_SYSTEM_STATE, WATCH_DOG_RESET_COUNTER, \ - WATCH_DOG_MAGIC_PATTERN); \ -} while(0) -//////////////////////////////////////////////////////////////////////////////////// - - -//#define A_CMN(sym) _A_OS_INDIRECTION_TABLE->cmnos.sym -#define A_CMN(sym) _A_MAGPIE_INDIRECTION_TABLE->cmnos.sym - -#if SYSTEM_MODULE_MEM -/* Mem interfaces */ -#define A_MEMSET(addr, value, size) \ - A_CMN(mem._memset((char *)(addr), (int)(value), (int)(size))) - -#define A_MEMZERO(addr, size) \ - A_CMN(mem._memset((char *)(addr), (int)0, (int)(size))) - -#define A_MEMCPY(dst, src, size) \ - A_CMN(mem._memcpy((char *)(dst), (char *)(src), (int)(size))) - -#define A_MEMMOVE(dst, src, size) \ - A_CMN(mem._memmove((char *)(dst), (char *)(src), (int)(size))) - -#define A_MEMCMP(p1, p2, nbytes) \ - A_CMN(mem._memcmp)((void *)(p1), (void *)(p2), (int)(nbytes)) -#else -/* Mem interfaces */ -#define A_MEMSET(addr, value, size) - -#define A_MEMZERO(addr, size) - -#define A_MEMCPY(dst, src, size) - -#define A_MEMMOVE(dst, src, size) - -#define A_MEMCMP(p1, p2, nbytes) -#endif - - -#if 1 - /* String interfaces */ - #define A_STRCPY(dst, src) A_CMN(string._strcpy((dst), (src))) - #define A_STRNCPY(dst, src, n) A_CMN(string._strncpy((dst), (src), (n))) - #define A_STRLEN(str) A_CMN(string._strlen(str)) - #define A_STRCMP(str1, str2) A_CMN(string._strcmp((str1), (str2))) - #define A_STRNCMP(str1, str2, n) A_CMN(string._strncmp((str1), (str2), (n))) -#endif - -#if SYSTEM_MODULE_PRINT -/* Printf support */ -#define A_PRINTF_INIT() A_CMN(printf._printf_init()) -#define A_PRINTF A_CMN(printf._printf) -#else -#define A_PRINTF_INIT() -#define A_PRINTF -#endif /* SYSTEM_MODULE_PRINT */ - -#if SYSTEM_MODULE_UART -/* Serial port support */ -#define A_UART_INIT() A_CMN(uart._uart_init()) - -#define A_UART_HWINIT(freq, baud) \ - A_CMN(uart._uart_hwinit((freq), (baud))) - -#define A_UART_ENABLED() (HOST_INTEREST->hi_uart_enable) - -#define A_PUTS(str) A_CMN(uart._uart_str_out(str)) - -#define A_PUTC(ch) A_CMN(uart._uart_char_put(ch)) -#define A_GETC(pCh) A_CMN(uart._uart_char_get(pCh)) - -#define A_UART_TASK() A_CMN(uart._uart_task()) -#define A_UART_CONFIG(x) A_CMN(uart._uart_config(x)) - -#else - -#define A_UART_INIT() - -#define A_UART_HWINIT(freq, baud) - -#define A_UART_ENABLED() - -#define A_PUTS(str) - -#define A_PUTC(ch) -#define A_GETC(pCh) - -#define A_UART_TASK() -#define A_UART_CONFIG(x) - -#endif - -#if SYSTEM_MODULE_MISC -/* Reset Support */ -#define A_RESET() A_CMN(misc._system_reset()) -#define A_RESET_MAC() A_CMN(misc._mac_reset()) - -/* Assertion failure */ -#define A_ASSFAIL(regdump) A_CMN(misc._assfail((regdump))) - -/* Report a failure to the Host */ -#define A_REPORT_FAILURE(data, len) \ - A_CMN(misc._report_failure_to_host((data), (len))) - -/* UNALIGNED references are used for ASSERTs */ -#define A_MISALIGNED_LOAD_HANDLER(dump) A_CMN(misc._misaligned_load_handler(dump)) - -/* reture the host interface type */ -#define A_IS_HOST_PRESENT() A_CMN(misc._is_host_present()) -#define A_KBHIT(delay) A_CMN(misc._kbhit(delay)) -#define A_GET_ROM_VER() A_CMN(misc._rom_version_get()) -#else -/* Reset Support */ -#define A_RESET() -#define A_RESET_MAC() - -/* Assertion failure */ -#define A_ASSFAIL(regdump) - -#define A_MISALIGNED_LOAD_HANDLER(dump) - -/* Report a failure to the Host */ -#define A_REPORT_FAILURE(data, len) - -#define A_IS_HOST_PRESENT() -#define A_KBHIT(delay) -#define A_GET_ROM_VER() -#endif - -#if SYSTEM_MODULE_USB -/* debug Support */ -#define A_USB_INIT() A_CMN(usb._usb_init()) -#define A_USB_ROM_TASK() A_CMN(usb._usb_rom_task()) -#define A_USB_FW_TASK() A_CMN(usb._usb_fw_task()) -#define A_USB_INIT_PHY() A_CMN(usb._usb_init_phy()) - -#define A_USB_EP0_SETUP() A_CMN(usb._usb_ep0_setup()) -#define A_USB_EP0_TX_DATA() A_CMN(usb._usb_ep0_tx_data()) -#define A_USB_EP0_RX_DATA() A_CMN(usb._usb_ep0_rx_data()) - -#define A_USB_GET_CONFIG() A_CMN(usb._usb_get_configuration()) -#define A_USB_SET_CONFIG() A_CMN(usb._usb_set_configuration()) - -#define A_USB_GET_INTERFACE() A_CMN(usb._usb_get_interface()) -#define A_USB_SET_INTERFACE() A_CMN(usb._usb_set_interface()) - -#define A_USB_STANDARD_CMD() A_CMN(usb._usb_standard_cmd()) -#define A_USB_VENDOR_CMD() A_CMN(usb._usb_vendor_cmd()) - -#define A_USB_POWER_OFF() A_CMN(usb._usb_power_off()) -#define A_USB_RESET_FIFO() A_CMN(usb._usb_reset_fifo()) -#define A_USB_GEN_WDT() A_CMN(usb._usb_gen_wdt()) -#define A_USB_JUMP_BOOT() A_CMN(usb._usb_jump_boot()) - -#define A_USB_GET_DESCRIPTOR() A_CMN(usb._usb_get_descriptor()) -#define A_USB_SET_ADDRESS() A_CMN(usb._usb_set_address()) -#define A_USB_SET_FEATURE() A_CMN(usb._usb_set_feature()) -#define A_USB_CLEAR_FEATURE() A_CMN(usb._usb_clr_feature()) - -#define A_USB_GET_STATUS() A_CMN(usb._usb_get_status()) -#define A_USB_SETUP_DESC() A_CMN(usb._usb_setup_desc()) -#define A_USB_STATUS_IN() A_CMN(usb._usb_status_in()) -#define A_USB_REG_OUT() A_CMN(usb._usb_reg_out()) - -#define A_USB_EP0_TX() A_CMN(usb._usb_ep0_tx()) -#define A_USB_EP0_RX() A_CMN(usb._usb_ep0_rx()) -#define A_USB_CLK_INIT() A_CMN(usb._usb_clk_init()) - -#else -#define A_USB_INIT() -#define A_USB_TASK() -#define A_USB_INIT_PHY() - -#define A_USB_EP0_SETUP() -#define A_USB_EP0_TX() -#define A_USB_EP0_RX() - -#define A_USB_GET_CONFIG() -#define A_USB_SET_CONFIG() - -#define A_USB_GET_INTERFACE() -#define A_USB_SET_INTERFACE() - -#define A_USB_STANDARD_CMD() -#define A_USB_VENDOR_CMD() - -#define A_USB_POWER_OFF() -#define A_USB_RESET_FIFO() -#define A_USB_GEN_WDT() -#define A_USB_JUMP_BOOT() - -#define A_USB_GET_DESCRIPTOR() -#define A_USB_SET_ADDRESS() -#define A_USB_SET_FEATURE() -#define A_USB_CLEAR_FEATURE() - -#define A_USB_GET_STATUS() -#define A_USB_SETUP_DESC() - - -#define A_USB_STATUS_IN() -#define A_USB_REG_OUT() - -#define A_USB_EP0_TX() -#define A_USB_EP0_RX() - -#define A_USB_CLK_INIT() -#endif - -#if SYSTEM_MODULE_INTR -/* Low-level interrupt support intended for use by OS modules */ -#define A_INTR_GET_INTRENABLE() A_CMN(intr._get_intrenable()) -#define A_INTR_SET_INTRENABLE(val) A_CMN(intr._set_intrenable(val)) -#define A_INTR_GET_INTRPENDING() A_CMN(intr._get_intrpending()) -#define A_INTR_UNBLOCK_ALL_INTRLVL() A_CMN(intr._unblock_all_intrlvl()) - -/* Interrupt support */ -#define A_INTR_INIT() A_CMN(intr._intr_init()) - -#define A_INTR_DISABLE(pOld) \ - do { \ - *(pOld) = A_CMN(intr._intr_disable()); \ - } while (0) - -#define A_INTR_RESTORE(old) A_CMN(intr._intr_restore((old))) - -#define A_INVOKE_ISR(inum) A_CMN(intr._intr_invoke_isr(inum)) - -#define A_INTR_MASK(inum) A_CMN(intr._intr_mask_inum(inum)) -#define A_INTR_UNMASK(inum) A_CMN(intr._intr_unmask_inum(inum)) - -#define A_ATTACH_ISR(inum, isr, arg) A_CMN(intr._intr_attach_isr(inum, isr, arg)) -#else -#define A_INTR_INIT() -#define A_INTR_DISABLE(pOld) -#define A_INTR_RESTORE(old) - -#define A_INTR_GET_INTRENABLE() -#define A_INTR_SET_INTRENABLE(val) -#define A_INTR_GET_INTRPENDING() -#define A_INTR_UNBLOCK_ALL_INTRLVL() -#define A_INVOKE_ISR(inum) -#define A_INTR_MASK(inum) -#define A_INTR_UNMASK(inum) -#define A_ATTACH_ISR(inum, isr, arg) - -#endif - -/* Tasklet Support */ -#define A_TASKLET_INIT() A_CMN(tasklet._tasklet_init()) -#define A_TASKLET_INIT_TASK(f, arg, t) A_CMN(tasklet._tasklet_init_task(f, arg, t)) -#define A_TASKLET_DISABLE(t) A_CMN(tasklet._tasklet_disable(t)) -#define A_TASKLET_SCHEDULE(t) A_CMN(tasklet._tasklet_schedule(t)) -#define A_TASKLET_RUN() A_CMN(tasklet._tasklet_run()) - - -/* RAM Allocation Support */ -#if defined(__mips__) -#define alloc_arena_start _end -#endif -#if defined(__XTENSA__) -#define alloc_arena_start _end -#endif - -#if SYSTEM_MODULE_CLOCK - -#define A_CLOCK_INIT(refclk_guess) A_CMN(clock._clock_init(refclk_guess)) -#define A_CLOCK_TICK() A_CMN(clock._clock_tick()) -#define A_CLOCK_GET_TICK() A_CMN(clock._clock_get_tick()) - -/* - * Get the number of millisecond ticks since the system was started. - * Note that this only approximates 1Ms. It's actually 32 ticks of - * a 32KHz clock. - * - * Returns a A_UINT32 value. - */ -#define A_MILLISECONDS() A_CMN(clock._milliseconds()) - -/* - * Get the frequency of the reference clock, expressed as - * an A_refclk_speed_t. - */ -#define A_REFCLK_SPEED_GET() A_CMN(clock._refclk_speed_get()) - -/* Spin delay */ -#define A_DELAY_USECS(us) A_CMN(clock._delay_us(us)) - -#define A_UART_FREQUENCY() A_CMN(clock._uart_frequency()) - -#define A_CLOCKREGS_INIT() A_CMN(clock._clockregs_init()) - -/* which_band is either A_BAND_24GHZ or A_BAND_5GHZ */ -#define A_WLAN_BAND_SET(which_band) \ - A_CMN(clock._wlan_band_set(which_band)) - -/* Called whenever the system clock changes speed */ -#define A_SYSCLK_CHANGE(mhz) A_CMN(clock._sysclk_change(mhz)) - -#define A_SYSCLK_GET() A_CMN(clock._sysclk_get()) - -#else - -#define A_CLOCK_INIT(refclk_guess) -#define A_CLOCK_TICK() -#define A_CLOCK_GET_TICK() -#define A_MILLISECONDS() -#define A_REFCLK_SPEED_GET() -#define A_DELAY_USECS(us) -#define A_UART_FREQUENCY() -#define A_CLOCKREGS_INIT() -#define A_WLAN_BAND_SET(which_band) -#define A_SYSCLK_CHANGE(mhz) -#define A_SYSCLK_GET() - -#endif - -// Timer -#define A_INIT_TIMER(pTimer, pFunction, pArg) \ - A_CMN(timer._timer_setfn((pTimer), (pFunction), (pArg))) - -/* Set a (possibly periodic) timer for "period" Milliseconds. */ -#define A_TIMEOUT_MS(pTimer, period) \ - A_CMN(timer._timer_arm((pTimer), (period))) - -#define A_UNTIMEOUT(pTimer) \ - A_CMN(timer._timer_disarm(pTimer)) - -#define A_TIMER_RUN() \ - A_CMN(timer._timer_run()) - -#define A_PCI_BOOT_INIT() \ - A_CMN(pci.pci_boot_init()) - -#define A_GMAC_BOOT_INIT() \ - A_CMN(gmac.gmac_boot_init()) - -#if SYSTEM_MODULE_ALLOCRAM -/* Default size of ALLOCRAM area */ -#define ARENA_SZ_DEFAULT 12000 - -#define A_ALLOCRAM_INIT(arena_start, arena_size) \ - do { \ - extern unsigned int alloc_arena_start; \ - void *astart; \ - int asize; \ - astart = (arena_start) ? (void *)(arena_start) : &alloc_arena_start; \ - asize = (arena_size) ? (arena_size) : (ARENA_SZ_DEFAULT); \ - A_CMN(allocram.cmnos_allocram_init((astart), (asize))); \ - } while (0) - -#define A_ALLOCRAM(nbytes) A_CMN(allocram.cmnos_allocram(0, (nbytes))) - -#define A_ALLOCRAM_DEBUG() A_CMN(allocram.cmnos_allocram_debug()) - -#else -#define A_ALLOCRAM_INIT(arena_start, arena_size) -#define A_ALLOCRAM(nbytes) -#define A_ALLOCRAM_DEBUG() -#endif - -#if SYSTEM_MODULE_ROM_PATCH - -#define A_ROMP_INIT() A_CMN(romp._romp_init()) -#define A_ROMP_DOWNLOAD(x) A_CMN(romp._romp_download(x)) -#define A_ROMP_DECODE(addr) A_CMN(romp._romp_decode(addr)) -#define A_ROMP_INSTALL() A_CMN(romp._romp_install()) -#else -#define A_ROMP_INIT() -#define A_ROMP_DOWNLOAD(x) -#define A_ROMP_DECODE(addr) -#define A_ROMP_INSTALL() -#endif - -#if SYSTEM_MODULE_WDT - -#define A_WDT_INIT() A_CMN(wdt_timer._wdt_init()) -#define A_WDT_ENABLE() A_CMN(wdt_timer._wdt_enable()) -#define A_WDT_DISABLE() A_CMN(wdt_timer._wdt_disable()) -#define A_WDT_SET(t) A_CMN(wdt_timer._wdt_set(t)) -#define A_WDT_TASK() A_CMN(wdt_timer._wdt_task()) -#define A_WDT_LASTBOOT() A_CMN(wdt_timer._wdt_last_boot()) -#define A_WDT_RESET() A_CMN(wdt_timer._wdt_reset()) - -#else -#define A_WDT_INIT() -#define A_WDT_ENABLE() -#define A_WDT_DISABLE() -#define A_WDT_SET(t) -#define A_WDT_TASK() -#define A_WDT_LASTBOOT() -#define A_WDT_RESET() -#endif - - -#if SYSTEM_MODULE_EEPROM -#define A_EEP_INIT() A_CMN(eep._eep_init()) -#define A_EEP_READ(off, len, buf) A_CMN(eep._eep_read(off, len, buf)) -#define A_EEP_WRITE(off, len, buf) A_CMN(eep._eep_write(off, len, buf)) -#define A_EEP_IS_EXIST() A_CMN(eep._eep_is_exist()) -#else -#define A_EEP_INIT() -#define A_EEP_READ(off, len, buf) -#define A_EEP_WRITE(off, len, buf) -#define A_EEP_IS_EXIST() -#endif - - - -struct _A_os_linkage_check; /* OS-dependent */ - -typedef struct _A_cmnos_indirection_table { - int (* hal_linkage_check)(int sz, struct _A_os_linkage_check *); - unsigned int *start_bss; - void (* app_start)(void); - -#if SYSTEM_MODULE_MEM - struct mem_api mem; -#endif - -#if SYSTEM_MODULE_MISC - struct misc_api misc; -#endif - -#if SYSTEM_MODULE_PRINT - struct printf_api printf; -#endif - -#if SYSTEM_MODULE_UART - struct uart_api uart; -#endif - -#if SYSTEM_MODULE_DBG -#if !MOVE_DBG_TO_RAM // move to firmware not in cmnos - struct dbg_api dbg; -#endif -#endif -#if SYSTEM_MODULE_PCI - struct pci_api pci; -#endif - -#if SYSTEM_MODULE_GMAC - struct gmac_api gmac; -#endif - -#if SYSTEM_MODULE_USB - struct usb_api usb; -#endif - -#if SYSTEM_MODULE_CLOCK - struct clock_api clock; -#endif - -#if SYSTEM_MODULE_TIMER - struct timer_api timer; -#endif - -#if SYSTEM_MODULE_INTR - struct intr_api intr; -#endif - -#if SYSTEM_MODULE_ALLOCRAM - struct allocram_api allocram; -#endif - -#if SYSTEM_MODULE_ROM_PATCH - struct romp_api romp; -#endif - -#if SYSTEM_MODULE_WDT - struct wdt_api wdt_timer; -#endif - -#if SYSTEM_MODULE_EEPROM - struct eep_api eep; -#endif - - struct string_api string; - struct tasklet_api tasklet; - -} _A_cmnos_indirection_table_t; - -/* Module installation for cmnos modules */ - -#if SYSTEM_MODULE_MEM -extern void cmnos_mem_module_install(struct mem_api *); -#endif - -#if SYSTEM_MODULE_MISC -extern void cmnos_misc_module_install(struct misc_api *); -#endif - -#if SYSTEM_MODULE_PRINT -extern void cmnos_printf_module_install(struct printf_api *); -#endif - -#if SYSTEM_MODULE_UART -extern void cmnos_uart_module_install(struct uart_api *); -#endif - -#if SYSTEM_MODULE_DBG -extern void cmnos_dbg_module_install(struct dbg_api *); -#endif - -#if SYSTEM_MODULE_USB -extern void cmnos_usb_module_install(struct usb_api *); -#endif - -#if SYSTEM_MODULE_INTR -extern void cmnos_intr_module_install(struct intr_api *); -#endif - -#if SYSTEM_MODULE_CLOCK -extern void cmnos_clock_module_install(struct clock_api *); -#endif - -#if SYSTEM_MODULE_TIMER -extern void cmnos_timer_module_install(struct timer_api *); -#endif - -#if SYSTEM_MODULE_ALLOCRAM -extern void cmnos_allocram_module_install(struct allocram_api *); -#endif - -#if SYSTEM_MODULE_ROM_PATCH -extern void cmnos_romp_module_install(struct romp_api *); -#endif - -#if SYSTEM_MODULE_WDT -extern void cmnos_wdt_module_install(struct wdt_api *); -#endif - -#if SYSTEM_MODULE_EEPROM -extern void cmnos_eep_module_install(struct eep_api *); -#endif - -#if SYSTEM_MODULE_PCI -extern void cmnos_pci_module_install(struct pci_api *); -#endif - -extern void cmnos_tasklet_module_install(struct tasklet_api *); - -extern void cmnos_string_module_install(struct string_api *tbl); - -#endif /* __CMNOS_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_api.h deleted file mode 100755 index a47a483..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/hif_api.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/* - * @File: HIF_api.h - * - * @Abstract: Host Interface api - * - * @Notes: - */ - -#ifndef _HIF_API_H -#define _HIF_API_H - -#include - -/* mailbox hw module configuration structure */ -typedef struct _HIF_CONFIG { - int dummy; -} HIF_CONFIG; - -typedef struct _HIF_CALLBACK { - /* callback when a buffer has be sent to the host*/ - void (*send_buf_done)(adf_nbuf_t buf, void *context); - /* callback when a receive message is received */ - void (*recv_buf)(adf_nbuf_t hdr_buf, adf_nbuf_t buf, void *context); - /* context used for all callbacks */ - void *context; -} HIF_CALLBACK; - -typedef void* hif_handle_t; - -/* hardware API table structure (API descriptions below) */ -struct hif_api { - hif_handle_t (*_init)(HIF_CONFIG *pConfig); - - void (* _shutdown)(hif_handle_t); - - void (*_register_callback)(hif_handle_t, HIF_CALLBACK *); - - int (*_get_total_credit_count)(hif_handle_t); - - void (*_start)(hif_handle_t); - - void (*_config_pipe)(hif_handle_t handle, int pipe, int creditCount); - - int (*_send_buffer)(hif_handle_t handle, int pipe, adf_nbuf_t buf); - - void (*_return_recv_buf)(hif_handle_t handle, int pipe, adf_nbuf_t buf); - //void (*_set_recv_bufsz)(int pipe, int bufsz); - //void (*_pause_recv)(int pipe); - //void (*_resume_recv)(int pipe); - int (*_is_pipe_supported)(hif_handle_t handle, int pipe); - - int (*_get_max_msg_len)(hif_handle_t handle, int pipe); - - int (*_get_reserved_headroom)(hif_handle_t handle); - - void (*_isr_handler)(hif_handle_t handle); - - void (*_get_default_pipe)(hif_handle_t handle, A_UINT8 *pipe_uplink, A_UINT8 *pipe_downlink); - - /* room to expand this table by another table */ - void *pReserved; -}; - -extern void hif_module_install(struct hif_api *apis); - -#endif /* #ifndef _HIF_API_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2/rom_cfg.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2/rom_cfg.h index f5b88f4..2ff05de 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2/rom_cfg.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2/rom_cfg.h @@ -49,7 +49,7 @@ #define _ROM_CFG_H_ /************************** FPGA version **************************/ -#define MAGPIE_FPGA_RAM_256K 0 +#define MAGPIE_FPGA_RAM_256K 0 /************************** SYSTEM WIDE ***************************/ /* Release Code : @@ -62,14 +62,11 @@ #define ATH_VER_MINOR_NUMBER "0" #define ATH_VER_BUILD_NUMBER "3" -#define ATH_VER_DATES __DATE__" "__TIME__ - #define ATH_VERSION_STR "["ATH_VER_RELEASE_CODE "." \ ATH_VER_PLATFORM_NUMBER "." \ ATH_VER_MAJOR_NUMBER "." \ ATH_VER_MINOR_NUMBER "." \ - ATH_VER_BUILD_NUMBER "] " \ - ATH_VER_DATES + ATH_VER_BUILD_NUMBER "]" /* ROM Code Version (16 bit) * Bit 15 : 0 means ASIC, 1 means FPGA @@ -213,7 +210,7 @@ typedef enum { #define WATCH_DOG_MAGIC_PATTERN_ADDR (SYS_D_RAM_REGION_0_BASE+SYS_RAM_SZIE-0x4) // 0x53fffc,magic pattern address #define WATCH_DOG_RESET_COUNTER_ADDR (SYS_D_RAM_REGION_0_BASE+SYS_RAM_SZIE-0x8) // 0x53fff8,record the reset counter #define DEBUG_SYSTEM_STATE_ADDR (SYS_D_RAM_REGION_0_BASE+SYS_RAM_SZIE-0xc) // 0x53fff4,record the state of system -#define CURRENT_PROGRAM_ADDR (SYS_D_RAM_REGION_0_BASE+SYS_RAM_SZIE-0x10) // 0x53fff0,reserved +#define CURRENT_PROGRAM_ADDR (SYS_D_RAM_REGION_0_BASE+SYS_RAM_SZIE-0x10) // 0x53fff0,reserved #define WATCH_DOG_MAGIC_PATTERN (*((volatile u32_t*)(WATCH_DOG_MAGIC_PATTERN_ADDR))) #define WATCH_DOG_RESET_COUNTER (*((volatile u32_t*)(WATCH_DOG_RESET_COUNTER_ADDR))) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2_mem.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2_mem.h index 830a073..c0aba81 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2_mem.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/k2_mem.h @@ -59,15 +59,15 @@ /* instruction port area */ #define SYS_I_R0M_REGION_0_BASE 0x8e0000 - + #define SYS_I_RAM_REGION_0_BASE 0x900000 #define SYS_I_RAM_REGION_1_BASE (SYS_I_RAM_REGION_0_BASE+SYS_RAM_BLOCK_SIZE) #define SYS_I_RAM_REGION_2_BASE (SYS_I_RAM_REGION_1_BASE+SYS_RAM_BLOCK_SIZE) #define SYS_I_RAM_REGION_3_BASE (SYS_I_RAM_REGION_2_BASE+SYS_RAM_BLOCK_SIZE) - -/* data port area */ + +/* data port area */ #define SYS_D_R0M_REGION_0_BASE 0x4e0000 - + #define SYS_D_RAM_REGION_0_BASE 0x500000 #define SYS_D_RAM_REGION_1_BASE (SYS_D_RAM_REGION_0_BASE+SYS_RAM_BLOCK_SIZE) #define SYS_D_RAM_REGION_2_BASE (SYS_D_RAM_REGION_1_BASE+SYS_RAM_BLOCK_SIZE) @@ -106,7 +106,7 @@ #define USB_DEVICE_PID_SIZE 1 // PID SIZE, 1 halfword offset #define USB_DEVICE_VID_SIZE 1 // VID SIZE, 1 halfword offset - + #define USB_DESC_IN_EEPROM_FLAG_OFFSET USB_DESCRIPTOR_ADDR #define USB_DEVICE_DESCRIPTOR_OFFSET (USB_DESC_IN_EEPROM_FLAG_OFFSET+USB_DESC_IN_EEPROM_SIZE) #define USB_STRING00_DESCRIPTOR_OFFSET (USB_DEVICE_DESCRIPTOR_OFFSET+USB_DEVICE_DESCRIPTOR_SIZE) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_mem.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_mem.h deleted file mode 100755 index fcef691..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_mem.h +++ /dev/null @@ -1,141 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/*************************************************************************/ -/* Copyright (c) 2006 Atheros Communications, Inc., All Rights Reserved */ -/* */ -/* Module Name : mem_addrs.h */ -/* */ -/* Abstract */ -/* This file contains definition of the memory related information. */ -/* */ -/* NOTES */ -/* None */ -/* */ -/*************************************************************************/ - -#ifndef _MEM_ADDRS_H_ -#define _MEM_ADDRS_H_ - -#define SYS_ROM_BLOCK_SIZE (32*1024) -#if MAGPIE_FPGA_RAM_256K == 1 -#define SYS_ROM_BLOCK_NUM 2 //ram 256K version is also rom 64k version -#else -#define SYS_ROM_BLOCK_NUM 3 -#endif -#define SYS_ROM_SIZE (SYS_ROM_BLOCK_SIZE*SYS_ROM_BLOCK_NUM) - -#if MAGPIE_FPGA_RAM_256K == 1 -#define SYS_RAM_BLOCK_SIZE 64*1024 -#else -#define SYS_RAM_BLOCK_SIZE 40*1024 -#endif - -#define SYS_RAM_BLOCK_NUM 4 -#define SYS_RAM_SZIE (SYS_RAM_BLOCK_SIZE*SYS_RAM_BLOCK_NUM) - -/* instruction port area */ -#define SYS_I_R0M_REGION_0_BASE 0x8e0000 - -#define SYS_I_RAM_REGION_0_BASE 0x900000 -#define SYS_I_RAM_REGION_1_BASE (SYS_I_RAM_REGION_0_BASE+SYS_RAM_BLOCK_SIZE) -#define SYS_I_RAM_REGION_2_BASE (SYS_I_RAM_REGION_1_BASE+SYS_RAM_BLOCK_SIZE) -#define SYS_I_RAM_REGION_3_BASE (SYS_I_RAM_REGION_2_BASE+SYS_RAM_BLOCK_SIZE) - -/* data port area */ -#define SYS_D_R0M_REGION_0_BASE 0x4e0000 - -#define SYS_D_RAM_REGION_0_BASE 0x500000 -#define SYS_D_RAM_REGION_1_BASE (SYS_D_RAM_REGION_0_BASE+SYS_RAM_BLOCK_SIZE) -#define SYS_D_RAM_REGION_2_BASE (SYS_D_RAM_REGION_1_BASE+SYS_RAM_BLOCK_SIZE) -#define SYS_D_RAM_REGION_3_BASE (SYS_D_RAM_REGION_2_BASE+SYS_RAM_BLOCK_SIZE) - -/* data and bss section */ - -#define SYS_D_RAM_DATA_BSS SYS_D_RAM_REGION_0_BASE -#define SYS_D_RAM_DATA_BSS_SZ SYS_RAM_BLOCK_SIZE -#define SYS_D_RAM_STACK_SIZE (2*1024) - -///////////////////////////////////////////////////////////////////////////////////// -#define EEPROM_CTRL_BASE 0x10ff0000 -#define EEPROM_ADDR_BASE (EEPROM_CTRL_BASE+0x2000) - -#define EEPROM_SIZE 0xfff // 4K addressing space, each has 2 bytes, (a half word) -#define EEPROM_START_OFFSET 0 // THIS SHOULD NOT MODIFY -#define EEPROM_END_OFFSET (EEPROM_START_OFFSET+EEPROM_SIZE) // end of the eeprom offset - -///////////////////////////////////////////////////////////////////////////////////// -#define EEPROM_USB_DESCRIPTOR_ADDR ((uint32_t)&_bss_end) // address at RAM to put descriptor data -#define USB_DESC_START_ADDR 0x780 -#define USB_DESCRIPTOR_ADDR USB_DESC_START_ADDR // eeprom offset to sotre the descriptor data - -#define USB_DESC_IN_EEPROM_SIZE 2 // indicate eeprom is exist in eeprom -#define USB_DEVICE_DESCRIPTOR_SIZE 16 // Device Descriptor -#define USB_STRING00_DESCRIPTOR_SIZE 6 // 16 half word -#define USB_STRING10_DESCRIPTOR_SIZE 12 // Manufacture data -#define USB_STRING20_DESCRIPTOR_SIZE 16 // Product/Company data -#define USB_STRING30_DESCRIPTOR_SIZE 8 // Serial Number - -#define USB_DEVICE_PID_SIZE 1 // PID SIZE, 1 halfword offset -#define USB_DEVICE_VID_SIZE 1 // VID SIZE, 1 halfword offset - -#define USB_DESC_IN_EEPROM_FLAG_OFFSET USB_DESCRIPTOR_ADDR -#define USB_DEVICE_DESCRIPTOR_OFFSET (USB_DESC_IN_EEPROM_FLAG_OFFSET+USB_DESC_IN_EEPROM_SIZE) -#define USB_STRING00_DESCRIPTOR_OFFSET (USB_DEVICE_DESCRIPTOR_OFFSET+USB_DEVICE_DESCRIPTOR_SIZE) -#define USB_STRING10_DESCRIPTOR_OFFSET (USB_STRING00_DESCRIPTOR_OFFSET+USB_STRING00_DESCRIPTOR_SIZE) -#define USB_STRING20_DESCRIPTOR_OFFSET (USB_STRING10_DESCRIPTOR_OFFSET+USB_STRING10_DESCRIPTOR_SIZE) -#define USB_STRING30_DESCRIPTOR_OFFSET (USB_STRING20_DESCRIPTOR_OFFSET+USB_STRING20_DESCRIPTOR_SIZE) - -#define USB_DEVICE_VID_OFFSET (USB_DEVICE_DESCRIPTOR_OFFSET+4) -#define USB_DEVICE_PID_OFFSET (USB_DEVICE_VID_OFFSET+USB_DEVICE_VID_SIZE) - -#define USB_DESC_IN_EEPROM_FLAG_ADDR EEPROM_USB_DESCRIPTOR_ADDR -#define USB_DEVICE_DESCRIPTOR_ADDR (USB_DESC_IN_EEPROM_FLAG_ADDR+(USB_DESC_IN_EEPROM_SIZE*2)) -#define USB_STRING00_DESCRIPTOR_ADDR (USB_DEVICE_DESCRIPTOR_ADDR+(USB_DEVICE_DESCRIPTOR_SIZE*2)) -#define USB_STRING10_DESCRIPTOR_ADDR (USB_STRING00_DESCRIPTOR_ADDR+(USB_STRING00_DESCRIPTOR_SIZE*2)) -#define USB_STRING20_DESCRIPTOR_ADDR (USB_STRING10_DESCRIPTOR_ADDR+(USB_STRING10_DESCRIPTOR_SIZE*2)) -#define USB_STRING30_DESCRIPTOR_ADDR (USB_STRING20_DESCRIPTOR_ADDR+(USB_STRING20_DESCRIPTOR_SIZE*2)) - -#define USB_DEVICE_VID_ADDR (USB_DEVICE_DESCRIPTOR_ADDR+4) -#define USB_DEVICE_PID_ADDR (USB_DEVICE_VID_ADDR+USB_DEVICE_VID_SIZE) - -#define USB_DESC_IN_EEP_PATTERN 0x41544852 //ATHR - -/****************************** patch in eeprom *****************************************/ -#define ROM_PATCH_EEPROM_SIZE 2 // 4 bytes - -#define ROM_PATCH_EEPROM_OFFSET 0xfc -#define ROM_PATCH_BUF_ADDR SYS_D_RAM_REGION_3_BASE - -#endif /* _MEM_ADDRS_H_ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/opt_ah.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/opt_ah.h deleted file mode 100755 index 5a3febe..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/opt_ah.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#define AH_SUPPORT_AR5416 1 -#define AH_SUPPORT_2133 1 -#define AH_SUPPORT_5413 1 -#define AH_DEBUG 1 -#define AR5416_EMULATION 1 -#define ATH_FORCE_PPM 1 -#define ATH_FORCE_BIAS 1 -#define AH_SUPPORT_DFS 1 diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/printf_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/printf_api.h deleted file mode 100755 index d3ef91f..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/printf_api.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __PRINTF_API_H__ -#define __PRINTF_API_H__ - -struct printf_api { - void (* _printf_init)(void); - int (* _printf)(const char * fmt, ...); -}; - -/* NB: The printf module requires the serial module. */ -void cmnos_printf_module_install(struct printf_api *tbl); - - -#endif /* __PRINTF_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/sys_cfg.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/sys_cfg.h index 41198b8..55bcf1a 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/sys_cfg.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/sys_cfg.h @@ -56,8 +56,8 @@ #if defined(_ROM_) #include "rom_cfg.h" -#if MAGPIE_FPGA_RAM_256K == 1 -#undef MAX_BUF_NUM +#if MAGPIE_FPGA_RAM_256K == 1 +#undef MAX_BUF_NUM #define MAX_BUF_NUM 100 #endif @@ -76,13 +76,13 @@ #endif #undef SYSTEM_MODULE_DBG -#undef MOVE_PRINT_TO_RAM +#undef MOVE_PRINT_TO_RAM #ifdef _DEBUG_BUILD_ #define SYSTEM_MODULE_DBG 1 #define MOVE_PRINT_TO_RAM 1 #else #define SYSTEM_MODULE_DBG 0 -#define MOVE_PRINT_TO_RAM 1 +#define MOVE_PRINT_TO_RAM 1 #endif #undef SYSTEM_MODULE_SFLASH #define SYSTEM_MODULE_SFLASH 0 diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/uart_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/uart_api.h deleted file mode 100755 index b30c7b5..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/uart_api.h +++ /dev/null @@ -1,334 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/*************************************************************************/ -/* Copyright (c) 2006 Atheros Communications, Inc., All Rights Reserved */ -/* */ -/* Module Name : uart.h */ -/* */ -/* Abstract */ -/* This file contains definition of uart registers, marco and api. */ -/* */ -/* NOTES */ -/* None */ -/* */ -/*************************************************************************/ - -#ifndef _UART_API_H_ -#define _UART_API_H_ - -#include "k2/reg_defs.h" - -/************************** Register deinition ***************************/ -#define RBR_ADDRESS 0x00051000 -#define RBR_OFFSET 0x00000000 -#define RBR_RBR_MSB 7 -#define RBR_RBR_LSB 0 -#define RBR_RBR_MASK 0x000000ff -#define RBR_RBR_GET(x) (((x) & RBR_RBR_MASK) >> RBR_RBR_LSB) -#define RBR_RBR_SET(x) (((x) << RBR_RBR_LSB) & RBR_RBR_MASK) - -#define THR_ADDRESS 0x00051000 -#define THR_OFFSET 0x00000000 -#define THR_THR_MSB 7 -#define THR_THR_LSB 0 -#define THR_THR_MASK 0x000000ff -#define THR_THR_GET(x) (((x) & THR_THR_MASK) >> THR_THR_LSB) -#define THR_THR_SET(x) (((x) << THR_THR_LSB) & THR_THR_MASK) - -#define DLL_ADDRESS 0x00051000 -#define DLL_OFFSET 0x00000000 -#define DLL_DLL_MSB 7 -#define DLL_DLL_LSB 0 -#define DLL_DLL_MASK 0x000000ff -#define DLL_DLL_GET(x) (((x) & DLL_DLL_MASK) >> DLL_DLL_LSB) -#define DLL_DLL_SET(x) (((x) << DLL_DLL_LSB) & DLL_DLL_MASK) - -#define DLH_ADDRESS 0x00051004 -#define DLH_OFFSET 0x00000004 -#define DLH_DLH_MSB 7 -#define DLH_DLH_LSB 0 -#define DLH_DLH_MASK 0x000000ff -#define DLH_DLH_GET(x) (((x) & DLH_DLH_MASK) >> DLH_DLH_LSB) -#define DLH_DLH_SET(x) (((x) << DLH_DLH_LSB) & DLH_DLH_MASK) - -#define IER_ADDRESS 0x00051004 -#define IER_OFFSET 0x00000004 -#define IER_EDDSI_MSB 3 -#define IER_EDDSI_LSB 3 -#define IER_EDDSI_MASK 0x00000008 -#define IER_EDDSI_GET(x) (((x) & IER_EDDSI_MASK) >> IER_EDDSI_LSB) -#define IER_EDDSI_SET(x) (((x) << IER_EDDSI_LSB) & IER_EDDSI_MASK) -#define IER_ELSI_MSB 2 -#define IER_ELSI_LSB 2 -#define IER_ELSI_MASK 0x00000004 -#define IER_ELSI_GET(x) (((x) & IER_ELSI_MASK) >> IER_ELSI_LSB) -#define IER_ELSI_SET(x) (((x) << IER_ELSI_LSB) & IER_ELSI_MASK) -#define IER_ETBEI_MSB 1 -#define IER_ETBEI_LSB 1 -#define IER_ETBEI_MASK 0x00000002 -#define IER_ETBEI_GET(x) (((x) & IER_ETBEI_MASK) >> IER_ETBEI_LSB) -#define IER_ETBEI_SET(x) (((x) << IER_ETBEI_LSB) & IER_ETBEI_MASK) -#define IER_ERBFI_MSB 0 -#define IER_ERBFI_LSB 0 -#define IER_ERBFI_MASK 0x00000001 -#define IER_ERBFI_GET(x) (((x) & IER_ERBFI_MASK) >> IER_ERBFI_LSB) -#define IER_ERBFI_SET(x) (((x) << IER_ERBFI_LSB) & IER_ERBFI_MASK) - -#define IIR_ADDRESS 0x00051008 -#define IIR_OFFSET 0x00000008 -#define IIR_FIFO_STATUS_MSB 7 -#define IIR_FIFO_STATUS_LSB 6 -#define IIR_FIFO_STATUS_MASK 0x000000c0 -#define IIR_FIFO_STATUS_GET(x) (((x) & IIR_FIFO_STATUS_MASK) >> IIR_FIFO_STATUS_LSB) -#define IIR_FIFO_STATUS_SET(x) (((x) << IIR_FIFO_STATUS_LSB) & IIR_FIFO_STATUS_MASK) -#define IIR_IID_MSB 3 -#define IIR_IID_LSB 0 -#define IIR_IID_MASK 0x0000000f -#define IIR_IID_GET(x) (((x) & IIR_IID_MASK) >> IIR_IID_LSB) -#define IIR_IID_SET(x) (((x) << IIR_IID_LSB) & IIR_IID_MASK) - -#define FCR_ADDRESS 0x00051008 -#define FCR_OFFSET 0x00000008 -#define FCR_RCVR_TRIG_MSB 7 -#define FCR_RCVR_TRIG_LSB 6 -#define FCR_RCVR_TRIG_MASK 0x000000c0 -#define FCR_RCVR_TRIG_GET(x) (((x) & FCR_RCVR_TRIG_MASK) >> FCR_RCVR_TRIG_LSB) -#define FCR_RCVR_TRIG_SET(x) (((x) << FCR_RCVR_TRIG_LSB) & FCR_RCVR_TRIG_MASK) -#define FCR_DMA_MODE_MSB 3 -#define FCR_DMA_MODE_LSB 3 -#define FCR_DMA_MODE_MASK 0x00000008 -#define FCR_DMA_MODE_GET(x) (((x) & FCR_DMA_MODE_MASK) >> FCR_DMA_MODE_LSB) -#define FCR_DMA_MODE_SET(x) (((x) << FCR_DMA_MODE_LSB) & FCR_DMA_MODE_MASK) -#define FCR_XMIT_FIFO_RST_MSB 2 -#define FCR_XMIT_FIFO_RST_LSB 2 -#define FCR_XMIT_FIFO_RST_MASK 0x00000004 -#define FCR_XMIT_FIFO_RST_GET(x) (((x) & FCR_XMIT_FIFO_RST_MASK) >> FCR_XMIT_FIFO_RST_LSB) -#define FCR_XMIT_FIFO_RST_SET(x) (((x) << FCR_XMIT_FIFO_RST_LSB) & FCR_XMIT_FIFO_RST_MASK) -#define FCR_RCVR_FIFO_RST_MSB 1 -#define FCR_RCVR_FIFO_RST_LSB 1 -#define FCR_RCVR_FIFO_RST_MASK 0x00000002 -#define FCR_RCVR_FIFO_RST_GET(x) (((x) & FCR_RCVR_FIFO_RST_MASK) >> FCR_RCVR_FIFO_RST_LSB) -#define FCR_RCVR_FIFO_RST_SET(x) (((x) << FCR_RCVR_FIFO_RST_LSB) & FCR_RCVR_FIFO_RST_MASK) -#define FCR_FIFO_EN_MSB 0 -#define FCR_FIFO_EN_LSB 0 -#define FCR_FIFO_EN_MASK 0x00000001 -#define FCR_FIFO_EN_GET(x) (((x) & FCR_FIFO_EN_MASK) >> FCR_FIFO_EN_LSB) -#define FCR_FIFO_EN_SET(x) (((x) << FCR_FIFO_EN_LSB) & FCR_FIFO_EN_MASK) - -#define LCR_ADDRESS 0x0005100c -#define LCR_OFFSET 0x0000000c -#define LCR_DLAB_MSB 7 -#define LCR_DLAB_LSB 7 -#define LCR_DLAB_MASK 0x00000080 -#define LCR_DLAB_GET(x) (((x) & LCR_DLAB_MASK) >> LCR_DLAB_LSB) -#define LCR_DLAB_SET(x) (((x) << LCR_DLAB_LSB) & LCR_DLAB_MASK) -#define LCR_BREAK_MSB 6 -#define LCR_BREAK_LSB 6 -#define LCR_BREAK_MASK 0x00000040 -#define LCR_BREAK_GET(x) (((x) & LCR_BREAK_MASK) >> LCR_BREAK_LSB) -#define LCR_BREAK_SET(x) (((x) << LCR_BREAK_LSB) & LCR_BREAK_MASK) -#define LCR_EPS_MSB 4 -#define LCR_EPS_LSB 4 -#define LCR_EPS_MASK 0x00000010 -#define LCR_EPS_GET(x) (((x) & LCR_EPS_MASK) >> LCR_EPS_LSB) -#define LCR_EPS_SET(x) (((x) << LCR_EPS_LSB) & LCR_EPS_MASK) -#define LCR_PEN_MSB 3 -#define LCR_PEN_LSB 3 -#define LCR_PEN_MASK 0x00000008 -#define LCR_PEN_GET(x) (((x) & LCR_PEN_MASK) >> LCR_PEN_LSB) -#define LCR_PEN_SET(x) (((x) << LCR_PEN_LSB) & LCR_PEN_MASK) -#define LCR_STOP_MSB 2 -#define LCR_STOP_LSB 2 -#define LCR_STOP_MASK 0x00000004 -#define LCR_STOP_GET(x) (((x) & LCR_STOP_MASK) >> LCR_STOP_LSB) -#define LCR_STOP_SET(x) (((x) << LCR_STOP_LSB) & LCR_STOP_MASK) -#define LCR_CLS_MSB 1 -#define LCR_CLS_LSB 0 -#define LCR_CLS_MASK 0x00000003 -#define LCR_CLS_GET(x) (((x) & LCR_CLS_MASK) >> LCR_CLS_LSB) -#define LCR_CLS_SET(x) (((x) << LCR_CLS_LSB) & LCR_CLS_MASK) - -#define MCR_ADDRESS 0x00051010 -#define MCR_OFFSET 0x00000010 -#define MCR_LOOPBACK_MSB 5 -#define MCR_LOOPBACK_LSB 5 -#define MCR_LOOPBACK_MASK 0x00000020 -#define MCR_LOOPBACK_GET(x) (((x) & MCR_LOOPBACK_MASK) >> MCR_LOOPBACK_LSB) -#define MCR_LOOPBACK_SET(x) (((x) << MCR_LOOPBACK_LSB) & MCR_LOOPBACK_MASK) -#define MCR_OUT2_MSB 3 -#define MCR_OUT2_LSB 3 -#define MCR_OUT2_MASK 0x00000008 -#define MCR_OUT2_GET(x) (((x) & MCR_OUT2_MASK) >> MCR_OUT2_LSB) -#define MCR_OUT2_SET(x) (((x) << MCR_OUT2_LSB) & MCR_OUT2_MASK) -#define MCR_OUT1_MSB 2 -#define MCR_OUT1_LSB 2 -#define MCR_OUT1_MASK 0x00000004 -#define MCR_OUT1_GET(x) (((x) & MCR_OUT1_MASK) >> MCR_OUT1_LSB) -#define MCR_OUT1_SET(x) (((x) << MCR_OUT1_LSB) & MCR_OUT1_MASK) -#define MCR_RTS_MSB 1 -#define MCR_RTS_LSB 1 -#define MCR_RTS_MASK 0x00000002 -#define MCR_RTS_GET(x) (((x) & MCR_RTS_MASK) >> MCR_RTS_LSB) -#define MCR_RTS_SET(x) (((x) << MCR_RTS_LSB) & MCR_RTS_MASK) -#define MCR_DTR_MSB 0 -#define MCR_DTR_LSB 0 -#define MCR_DTR_MASK 0x00000001 -#define MCR_DTR_GET(x) (((x) & MCR_DTR_MASK) >> MCR_DTR_LSB) -#define MCR_DTR_SET(x) (((x) << MCR_DTR_LSB) & MCR_DTR_MASK) - -#define LSR_ADDRESS 0x00051014 -#define LSR_OFFSET 0x00000014 -#define LSR_FERR_MSB 7 -#define LSR_FERR_LSB 7 -#define LSR_FERR_MASK 0x00000080 -#define LSR_FERR_GET(x) (((x) & LSR_FERR_MASK) >> LSR_FERR_LSB) -#define LSR_FERR_SET(x) (((x) << LSR_FERR_LSB) & LSR_FERR_MASK) -#define LSR_TEMT_MSB 6 -#define LSR_TEMT_LSB 6 -#define LSR_TEMT_MASK 0x00000040 -#define LSR_TEMT_GET(x) (((x) & LSR_TEMT_MASK) >> LSR_TEMT_LSB) -#define LSR_TEMT_SET(x) (((x) << LSR_TEMT_LSB) & LSR_TEMT_MASK) -#define LSR_THRE_MSB 5 -#define LSR_THRE_LSB 5 -#define LSR_THRE_MASK 0x00000020 -#define LSR_THRE_GET(x) (((x) & LSR_THRE_MASK) >> LSR_THRE_LSB) -#define LSR_THRE_SET(x) (((x) << LSR_THRE_LSB) & LSR_THRE_MASK) -#define LSR_BI_MSB 4 -#define LSR_BI_LSB 4 -#define LSR_BI_MASK 0x00000010 -#define LSR_BI_GET(x) (((x) & LSR_BI_MASK) >> LSR_BI_LSB) -#define LSR_BI_SET(x) (((x) << LSR_BI_LSB) & LSR_BI_MASK) -#define LSR_FE_MSB 3 -#define LSR_FE_LSB 3 -#define LSR_FE_MASK 0x00000008 -#define LSR_FE_GET(x) (((x) & LSR_FE_MASK) >> LSR_FE_LSB) -#define LSR_FE_SET(x) (((x) << LSR_FE_LSB) & LSR_FE_MASK) -#define LSR_PE_MSB 2 -#define LSR_PE_LSB 2 -#define LSR_PE_MASK 0x00000004 -#define LSR_PE_GET(x) (((x) & LSR_PE_MASK) >> LSR_PE_LSB) -#define LSR_PE_SET(x) (((x) << LSR_PE_LSB) & LSR_PE_MASK) -#define LSR_OE_MSB 1 -#define LSR_OE_LSB 1 -#define LSR_OE_MASK 0x00000002 -#define LSR_OE_GET(x) (((x) & LSR_OE_MASK) >> LSR_OE_LSB) -#define LSR_OE_SET(x) (((x) << LSR_OE_LSB) & LSR_OE_MASK) -#define LSR_DR_MSB 0 -#define LSR_DR_LSB 0 -#define LSR_DR_MASK 0x00000001 -#define LSR_DR_GET(x) (((x) & LSR_DR_MASK) >> LSR_DR_LSB) -#define LSR_DR_SET(x) (((x) << LSR_DR_LSB) & LSR_DR_MASK) - -#define MSR_ADDRESS 0x00051018 -#define MSR_OFFSET 0x00000018 -#define MSR_DCD_MSB 7 -#define MSR_DCD_LSB 7 -#define MSR_DCD_MASK 0x00000080 -#define MSR_DCD_GET(x) (((x) & MSR_DCD_MASK) >> MSR_DCD_LSB) -#define MSR_DCD_SET(x) (((x) << MSR_DCD_LSB) & MSR_DCD_MASK) -#define MSR_RI_MSB 6 -#define MSR_RI_LSB 6 -#define MSR_RI_MASK 0x00000040 -#define MSR_RI_GET(x) (((x) & MSR_RI_MASK) >> MSR_RI_LSB) -#define MSR_RI_SET(x) (((x) << MSR_RI_LSB) & MSR_RI_MASK) -#define MSR_DSR_MSB 5 -#define MSR_DSR_LSB 5 -#define MSR_DSR_MASK 0x00000020 -#define MSR_DSR_GET(x) (((x) & MSR_DSR_MASK) >> MSR_DSR_LSB) -#define MSR_DSR_SET(x) (((x) << MSR_DSR_LSB) & MSR_DSR_MASK) -#define MSR_CTS_MSB 4 -#define MSR_CTS_LSB 4 -#define MSR_CTS_MASK 0x00000010 -#define MSR_CTS_GET(x) (((x) & MSR_CTS_MASK) >> MSR_CTS_LSB) -#define MSR_CTS_SET(x) (((x) << MSR_CTS_LSB) & MSR_CTS_MASK) -#define MSR_DDCD_MSB 3 -#define MSR_DDCD_LSB 3 -#define MSR_DDCD_MASK 0x00000008 -#define MSR_DDCD_GET(x) (((x) & MSR_DDCD_MASK) >> MSR_DDCD_LSB) -#define MSR_DDCD_SET(x) (((x) << MSR_DDCD_LSB) & MSR_DDCD_MASK) -#define MSR_TERI_MSB 2 -#define MSR_TERI_LSB 2 -#define MSR_TERI_MASK 0x00000004 -#define MSR_TERI_GET(x) (((x) & MSR_TERI_MASK) >> MSR_TERI_LSB) -#define MSR_TERI_SET(x) (((x) << MSR_TERI_LSB) & MSR_TERI_MASK) -#define MSR_DDSR_MSB 1 -#define MSR_DDSR_LSB 1 -#define MSR_DDSR_MASK 0x00000002 -#define MSR_DDSR_GET(x) (((x) & MSR_DDSR_MASK) >> MSR_DDSR_LSB) -#define MSR_DDSR_SET(x) (((x) << MSR_DDSR_LSB) & MSR_DDSR_MASK) -#define MSR_DCTS_MSB 0 -#define MSR_DCTS_LSB 0 -#define MSR_DCTS_MASK 0x00000001 -#define MSR_DCTS_GET(x) (((x) & MSR_DCTS_MASK) >> MSR_DCTS_LSB) -#define MSR_DCTS_SET(x) (((x) << MSR_DCTS_LSB) & MSR_DCTS_MASK) - - -/************************** config definition ***************************/ -#define UART_FIFO_SIZE 512 //Must be 2^N - -#define USE_POST_BUFFER 0 // ENABLE a tx buffer for post processing, -/*********************** data struction definition ************************/ -// data struction definition -struct uart_fifo { -#if USE_POST_BUFFER - uint8_t buf[UART_FIFO_SIZE]; -#endif - uint16_t start_index; - uint16_t end_index; - uint32_t overrun_err; -}; - - -struct uart_blk { - uint16_t debug_mode; - uint16_t baud; - struct uart_api *_uart; - struct uart_fifo _tx; -}; - -/******** hardware API table structure (API descriptions below) *************/ -struct uart_api { - uint32_t (*_uart_init)(void); - void (*_uart_char_put)(uint8_t ch); - uint16_t (*_uart_char_get)(uint8_t* ch); - void (*_uart_str_out)(uint8_t* str); - void (*_uart_task)(void); - uint32_t (*_uart_status)(void); - void (*_uart_config)(uint16_t flag); - void (*_uart_hwinit)(uint32_t freq, uint32_t baud); -}; - -#endif // end of _UART_API_H_ - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/linux/compiler.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/linux/compiler.h deleted file mode 100644 index 725ee73..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/linux/compiler.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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. - */ - -#ifndef __SHARED_COMPILER_H -#define __SHARED_COMPILER_H - -#define __noinline __attribute__((noinline)) -#define __noreturn __attribute__((noreturn)) -#define __inline __attribute__((always_inline)) -#define __hot __attribute__((hot)) -#define __cold __attribute__((cold)) -#define __unused __attribute__((unused)) -#define __force __attribute__((force)) -#define __section(s) __attribute__((section("." # s))) -#define __aligned(a) __attribute__((aligned(a))) -#define __packed __attribute__((packed)) -#define __visible __attribute__((externally_visible)) - -#define BUILD_BUG_ON(condition) ((void)sizeof(char[1 - 2*!!(condition)])) -#define BUILD_BUG_ON_ZERO(e) (sizeof(char[1 - 2 * !!(e)]) - 1) - -#define ALIGN(x, a) __ALIGN_MASK(x, (typeof(x))(a) - 1) -#define __ALIGN_MASK(x, mask) (((x) + (mask)) & ~(mask)) - -#define __roundup(x, y) ((((x) + ((y) - 1)) / (y)) * (y)) - -#define __must_be_array(a) \ - BUILD_BUG_ON_ZERO(__builtin_types_compatible_p(typeof(a), typeof(&a[0]))) -#define ARRAY_SIZE(arr) (sizeof((arr)) / sizeof((arr)[0]) + __must_be_array(arr)) - -#define BIT(b) (1 << (b)) -#define MASK(w) (BIT(w) - 1) - -#undef offsetof -#ifdef __compiler_offsetof -# define offsetof(TYPE, MEMBER) __compiler_offsetof(TYPE, MEMBER) -#else -# define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) -#endif - -#define likely(x) __builtin_expect(!!(x), 1) -#define unlikely(x) __builtin_expect(!!(x), 0) - -#define min(x, y) ({ \ - typeof(x) _min1 = (x); \ - typeof(y) _min2 = (y); \ - (void) (&_min1 == &_min2); \ - _min1 < _min2 ? _min1 : _min2; }) - -#define max(x, y) ({ \ - typeof(x) _max1 = (x); \ - typeof(y) _max2 = (y); \ - (void) (&_max1 == &_max2); \ - _max1 > _max2 ? _max1 : _max2; }) - -#define min_t(type, x, y) ({ \ - type __min1 = (x); \ - type __min2 = (y); \ - __min1 < __min2 ? __min1 : __min2; }) - -#define max_t(type, x, y) ({ \ - type __max1 = (x); \ - type __max2 = (y); \ - __max1 > __max2 ? __max1 : __max2; }) - - -#define container_of(ptr, type, member) ({ \ - const typeof(((type *)0)->member) * __mptr = (ptr); \ - (type *)(((unsigned long)__mptr - offsetof(type, member))); }) - -#define MAX_ERRNO 4095 - -#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO) - -static inline void *ERR_PTR(long errornr) -{ - return (void *) errornr; -} - -static inline long PTR_ERR(const void *ptr) -{ - return (long) ptr; -} - -static inline long IS_ERR(const void *ptr) -{ - return IS_ERR_VALUE((unsigned long)ptr); -} - -static inline long IS_ERR_OR_NULL(const void *ptr) -{ - return !ptr || IS_ERR_VALUE((unsigned long)ptr); -} -#endif /* __SHARED_COMPILER_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/Magpie_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/Magpie_api.h index 5103d64..c28f5a8 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/Magpie_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/Magpie_api.h @@ -34,9 +34,9 @@ */ /* * @File: Magpie_api.h - * + * * @Abstract: Magpie FW api - * + * * @Notes: */ @@ -115,8 +115,8 @@ #define dma_lib_tx_init(eng_no, if_type) A_INDIR(dma_lib.tx_init(eng_no, if_type)) #define dma_lib_rx_init(eng_no, if_type) A_INDIR(dma_lib.rx_init(eng_no, if_type)) #define dma_lib_rx_config(eng_no, desc, gran) A_INDIR(dma_lib.rx_config(eng_no, desc, gran)) -#define dma_lib_tx_start(eng_no) A_INDIR(dma_lib.tx_start(eng_no)) -#define dma_lib_rx_start(eng_no) A_INDIR(dma_lib.rx_start(eng_no)) +#define dma_lib_tx_start(eng_no) A_INDIR(dma_lib.tx_start(eng_no)) +#define dma_lib_rx_start(eng_no) A_INDIR(dma_lib.rx_start(eng_no)) #define dma_lib_intr_status(if_type) A_INDIR(dma_lib.intr_status(if_type)) #define dma_lib_hard_xmit(eng_no, buf) A_INDIR(dma_lib.hard_xmit(eng_no, buf)) #define dma_lib_flush_xmit(eng_no) A_INDIR(dma_lib.flush_xmit(eng_no)) @@ -142,11 +142,11 @@ #define HIF_init(pConfig) A_INDIR(hif._init(pConfig)) #define HIF_shutdown(h) A_INDIR(hif._shutdown(h)) #define HIF_register_callback(h, pConfig) A_INDIR(hif._register_callback(h, pConfig)) -#define HIF_start(h) A_INDIR(hif._start(h)) -#define HIF_config_pipe(h, pipe, desc_list) A_INDIR(hif._config_pipe(h, pipe, desc_list)) -#define HIF_send_buffer(h, pipe, buf) A_INDIR(hif._send_buffer(h, pipe, buf)) -#define HIF_return_recv_buf(h, pipe, buf) A_INDIR(hif._return_recv_buf(h, pipe, buf)) -#define HIF_isr_handler(h) A_INDIR(hif._isr_handler(h)) +#define HIF_start(h) A_INDIR(hif._start(h)) +#define HIF_config_pipe(h, pipe, desc_list) A_INDIR(hif._config_pipe(h, pipe, desc_list)) +#define HIF_send_buffer(h, pipe, buf) A_INDIR(hif._send_buffer(h, pipe, buf)) +#define HIF_return_recv_buf(h, pipe, buf) A_INDIR(hif._return_recv_buf(h, pipe, buf)) +#define HIF_isr_handler(h) A_INDIR(hif._isr_handler(h)) #define HIF_is_pipe_supported(h, pipe) A_INDIR(hif._is_pipe_supported(h, pipe)) #define HIF_get_max_msg_len(h, pipe) A_INDIR(hif._get_max_msg_len(h, pipe)) #define HIF_get_reserved_headroom(h) A_INDIR(hif._get_reserved_headroom(h)) @@ -181,7 +181,7 @@ typedef void (*HIF_INSTALL_FUNC_T)(struct hif_api *apis); #define HTC_GetReservedHeadroom(h) A_INDIR(htc._HTC_GetReservedHeadroom(h)) #define HTC_NotifyTargetInserted(h) -#define HTC_NotifyTargetDetached(h) +#define HTC_NotifyTargetDetached(h) /* WMI SVC module */ #define WMI_SERVICE_MODULE_INSTALL() WMI_service_module_install(&_A_MAGPIE_INDIRECTION_TABLE->wmi_svc_api) @@ -225,14 +225,14 @@ typedef struct _A_magpie_indirection_table { //#endif struct hif_api hif; struct htc_apis htc; - WMI_SVC_APIS wmi_svc_api; + WMI_SVC_APIS wmi_svc_api; struct usbfifo_api usbfifo_api; struct buf_pool_api buf_pool; -#ifdef MAGPIE_FW_BUILD +#ifdef MAGPIE_FW_BUILD struct vbuf_api vbuf; struct vdesc_api vdesc; struct allocram_api allocram; -#endif +#endif struct dma_engine_api dma_engine; struct dma_lib_api dma_lib; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/adf_nbuf_pvt.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/adf_nbuf_pvt.h deleted file mode 100755 index 8c5f406..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/adf_nbuf_pvt.h +++ /dev/null @@ -1,459 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/* - * (c) Copyright Atheros Communications - * FreeBSD specific prototypes - */ -#ifndef _ADF_NBUF_PVT_H -#define _ADF_NBUF_PVT_H - -#include -//#include -#include -//#include - -#define __ADF_NBUF_NULL NULL -#define __ADF_NBUF_CTX_BUF - -typedef VBUF * __adf_nbuf_t; - -/** - * queue head - */ -typedef struct __adf_nbuf_qhead { - VBUF *head; - VBUF *tail; - a_uint32_t qlen; -}__adf_nbuf_qhead_t; - -typedef __adf_nbuf_qhead_t __adf_nbuf_queue_t; - -__adf_nbuf_t -__adf_nbuf_alloc(adf_os_size_t size, - a_uint32_t reserve, a_uint32_t align); - -void -__adf_nbuf_free(__adf_nbuf_t buf); - -#ifndef _ROM_ -a_uint8_t * -__adf_nbuf_push_head(__adf_nbuf_t buf, adf_os_size_t size); - -a_uint8_t * -__adf_nbuf_pull_head(__adf_nbuf_t buf, adf_os_size_t size); - -a_uint8_t * -__adf_nbuf_put_tail(__adf_nbuf_t buf, adf_os_size_t size); -#endif - -void -__adf_nbuf_trim_tail(__adf_nbuf_t buf, adf_os_size_t size); - -__adf_nbuf_t -__adf_nbuf_realloc_headroom(__adf_nbuf_t buf, - a_uint32_t headroom); - -__adf_nbuf_t -__adf_nbuf_realloc_tailroom(__adf_nbuf_t buf, - a_uint32_t tailroom); - -__adf_nbuf_t -__adf_nbuf_expand(__adf_nbuf_t buf, - a_uint32_t headroom, a_uint32_t tailroom); - -__adf_nbuf_t -__adf_nbuf_copy(__adf_nbuf_t src); - -__adf_nbuf_t -__adf_nbuf_unshare(__adf_nbuf_t src); - -void -__adf_nbuf_frag_info(__adf_nbuf_t buf, adf_os_sglist_t *sg); - -#ifndef _ROM_ -a_uint8_t * -__adf_nbuf_get_priv(__adf_nbuf_t buf); -#endif - -void -__adf_nbuf_queue_add(__adf_nbuf_qhead_t *qhead, - __adf_nbuf_t buf); - -__adf_nbuf_t -__adf_nbuf_queue_remove(__adf_nbuf_qhead_t *qhead); - -a_uint32_t -__adf_nbuf_tx_cksum_info(__adf_nbuf_t buf, - a_uint8_t **hdr_off, - a_uint8_t **where); - -void -__adf_nbuf_set_rx_cksum(__adf_nbuf_t buf, adf_nbuf_rx_cksum_t *cksum); -void -__adf_nbuf_get_tso_info(__adf_nbuf_t buf, adf_nbuf_tso_t *tso); - -a_status_t -__adf_nbuf_get_vlan_info(adf_net_handle_t hdl, - __adf_nbuf_t buf, - adf_net_vlanhdr_t *vlan); - -void -__adf_nbuf_dmamap_info(__adf_os_dma_map_t bmap, adf_os_dmamap_info_t *sg); - -/** - * @brief return the last mbuf - * - * @param m0 - * - * @return struct mbuf* - */ -#ifndef _ROM_ -VDESC * -__adf_nbuf_last(VBUF *buf); -#endif - -/** - * @brief num bytes in the head - * - * @param adf_nbuf - * - * @return num of bytes available - */ -#ifndef _ROM_ -a_uint32_t -__adf_nbuf_headroom(__adf_nbuf_t buf); -#endif - -/** - * @brief num of bytes available in the tail excluding the priv - * portion - * - * @param adf_nbuf - * - * @return num of bytes - */ -#ifndef _ROM_ -a_uint32_t -__adf_nbuf_tailroom(__adf_nbuf_t buf); -#endif - -/** - * @brief get the entire packet length - * - * @param adf_nbuf - * - * @return total length of packet (sum of all frag lengths) - */ -#ifndef _ROM_ -a_uint32_t -__adf_nbuf_len(__adf_nbuf_t buf); -#endif - -/** - * @brief Clone the nbuf (will not create writeable copies) - * - * @param adf_nbuf - * - * @return Read-only copy of the nbuf (including clusters) - */ -__adf_nbuf_t -__adf_nbuf_clone(__adf_nbuf_t src); - -void -__adf_nbuf_cat(__adf_nbuf_t dst, __adf_nbuf_t src); - - -/* - * @brief check if the mbuf is cloned or not - * - * @param buf - * - * @return a_bool_t - */ -a_bool_t -__adf_nbuf_is_cloned(__adf_nbuf_t buf); - -/** - * @brief This will return the header's addr & m_len - */ -#ifndef _ROM_ -void -__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, - a_uint32_t *len); -#endif - -/** - * @brief init the queue - * @param qhead - */ -void -__adf_nbuf_queue_init(__adf_nbuf_qhead_t *qhead); - -/** - * @brief return the length of queue - * @param adf_qhead - * - * @return length - * - */ -a_uint32_t -__adf_nbuf_queue_len(__adf_nbuf_qhead_t *qhead); - -/** - * @brief returns the first guy in the Q - * @param qhead - * - * @return (NULL if the Q is empty) - */ -#ifndef _ROM_ -__adf_nbuf_t -__adf_nbuf_queue_first(__adf_nbuf_queue_t *qhead); - -/** - * @brief return the next packet from packet chain - * - * @param buf (packet) - * - * @return (NULL if no packets are there) - */ -__adf_nbuf_t -__adf_nbuf_queue_next(__adf_nbuf_t buf); -#endif - -/** - * @brief check if the queue is empty or not - * - * @param qhead - * - * @return a_bool_t - */ -a_bool_t -__adf_nbuf_is_queue_empty(__adf_nbuf_qhead_t *qhead); - -__adf_nbuf_t -__adf_nbuf_create_frm_frag(__adf_nbuf_queue_t *head); -void -__adf_nbuf_split_to_frag(__adf_nbuf_t buf, __adf_nbuf_queue_t *qhead); - -#ifdef _ROM_ - -/** - * @brief This will return the header's addr & m_len - */ -static inline void -__adf_nbuf_peek_header(__adf_nbuf_t buf, a_uint8_t **addr, - a_uint32_t *len) -{ - VDESC *desc = buf->desc_list; - - *addr = desc->buf_addr + desc->data_offset; - *len = desc->data_size; -} - -/** - * @brief return the last mbuf - * - * @param m0 - * - * @return struct mbuf* - */ -static inline VDESC * -__adf_nbuf_last(VBUF *buf) -{ - VDESC *desc = buf->desc_list; - - //for(; desc->next_desc != NULL; desc = desc->next_desc) - // ; - while(desc->next_desc != NULL) - { - desc = desc->next_desc; - } - - return desc; -} - -/** - * @brief num bytes in the head - * - * @param adf_nbuf - * - * @return num of bytes available - */ -static inline a_uint32_t -__adf_nbuf_headroom(__adf_nbuf_t buf) -{ - return buf->desc_list->data_offset; -} - -/** - * @brief num of bytes available in the tail excluding the priv - * portion - * - * @param adf_nbuf - * - * @return num of bytes - */ - -static inline a_uint32_t -__adf_nbuf_tailroom(__adf_nbuf_t buf) -{ - VDESC *last_desc = __adf_nbuf_last(buf); - - return last_desc->buf_size - last_desc->data_offset - last_desc->data_size; -} - -/** - * @brief get the entire packet length - * - * @param adf_nbuf - * - * @return total length of packet (sum of all frag lengths) - */ -static inline a_uint32_t -__adf_nbuf_len(__adf_nbuf_t buf) -{ - return buf->buf_length; -} - -/** - * @brief put data in the head - * - * @param buf - * @param len (how much data to put) - * - * @return new data pointer ,NULL if the len is more than the - * space available in the head frag. - */ -static inline a_uint8_t * -__adf_nbuf_push_head(__adf_nbuf_t buf, adf_os_size_t len) -{ - a_uint8_t *ptr = NULL; - VDESC *desc = buf->desc_list; - - desc->data_offset -= len; - desc->data_size += len; - buf->buf_length += len; - ptr = desc->buf_addr + desc->data_offset; - return(ptr); -} - -/** - * - * @brief add data in the end of tail - * - * @param buf - * @param len (how much data to put) - * - * @return previous tail (data+len),NULL if the len is more than - * space available - */ -static inline a_uint8_t * -__adf_nbuf_put_tail(__adf_nbuf_t buf, adf_os_size_t len) -{ - a_uint8_t *tail = NULL; - VDESC *last_desc = __adf_nbuf_last(buf); - - tail = last_desc->buf_addr + last_desc->data_offset + last_desc->data_size; - last_desc->data_size += len; - buf->buf_length += len; - - return tail; -} - -/** - * @brief strip data from head - * - * @param adf_nbuf - * @param len (how much data to rip) - * - * @return new data pointer - */ -static inline a_uint8_t * -__adf_nbuf_pull_head(__adf_nbuf_t buf, adf_os_size_t len) -{ - a_uint8_t *ptr = NULL; - VDESC *desc = buf->desc_list; - - desc->data_offset += len; - desc->data_size -= len; - buf->buf_length -= len; - ptr = desc->buf_addr + desc->data_offset; - - return ptr; -} - -/** - * @brief retrieve the priv space pointer from nbuf - * - * @param buf (nbuf to attach the priv space) - * - * @return uint8_t* ( pointer to the data ) - */ -static inline a_uint8_t * -__adf_nbuf_get_priv(__adf_nbuf_t buf) -{ - //adf_os_assert(buf != NULL); - - return buf->ctx; -} - -/** - * @brief returns the first guy in the Q - * @param qhead - * - * @return (NULL if the Q is empty) - */ -static inline __adf_nbuf_t -__adf_nbuf_queue_first(__adf_nbuf_queue_t *qhead) -{ - return qhead->head; -} -/** - * @brief return the next packet from packet chain - * - * @param buf (packet) - * - * @return (NULL if no packets are there) - */ -static inline __adf_nbuf_t -__adf_nbuf_queue_next(__adf_nbuf_t buf) -{ - return buf->next_buf; -} - -#endif - -#endif - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/allocram_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/allocram_api.h deleted file mode 100755 index 2413f3a..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/allocram_api.h +++ /dev/null @@ -1,81 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __ALLOCRAM_API_H__ -#define __ALLOCRAM_API_H__ - -/* API for Target-side startup-time RAM allocations */ - -struct allocram_api { - /* - * Initialize allocram, providing it with a block of RAM - * (an "arena") from which to allocate. - * - * If arena_start is 0, a default start -- the end of - * the application's text & data -- is used. - * - * If arena_sz is 0, a default size -- which uses most - * of physical RAM beyond arena_start -- is used. - * - * Return value is reserved for future use -- it's an arena handle. - */ - void *(* cmnos_allocram_init)(void *arena_start, A_UINT32 arena_sz); - - /* - * Allocate nbytes of memory, returning a pointer to the start - * of the allocated block. Allocation size is rounded up to the - * nearest A_CACHE_LINE_SIZE and the returned address similarly - * aligned. - * - * There is no need to check the return value from this function. - * A failure to satisfy a RAM allocation request is treated as a - * fatal error. - * - * Allocations are expected to occur only during startup; this - * API does not, for instance, guarantee atomicity with respect - * to allocations that might (foolishly) be attempted from - * interrupt handlers. - * - * The "which_arena" parameter is currently unused, and should - * be set to 0 -- only a single arena is currently supported. - */ - void *(* cmnos_allocram)(void *which_arena, A_UINT32 nbytes); - - void (* cmnos_allocram_debug)(void); -}; - -extern void allocram_module_install(struct allocram_api *api); - - -#endif /* __ALLOCRAM_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/athos_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/athos_api.h deleted file mode 100755 index 010dd63..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/athos_api.h +++ /dev/null @@ -1,222 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __ATHOS_API_H__ -#define __ATHOS_API_H__ - -/* - * This file contains wrappers to OS operating system functions - * that are available in the Athos version of the operating system. - * - * Target software must always use these wrappers to access OS - * services -- it may not access any OS services directly. - * - * These wrappers are intended to provide OS-independence for applications. - * Using this header file, an application should be able to compile and - * fully link without any other OS header files, source files, or - * binary files. - */ - -#include -#include "dt_defs.h" -#include "cmnos_api.h" -//#include "HIF_api.h" -//#include "vbuf_api.h" -//#include "vdesc_api.h" -//#include "htc_api.h" -#include "Magpie_api.h" - -/* ROM Patch API */ - - -/* HTC API */ - - -/* WMI Adaptive API - required for WMI SVCs as they refer some of them*/ - - -/* WLAN WMI API - required for WMI SVCs and others...*/ - -#if 0 -#define A_INDIR(sym) _A_OS_INDIRECTION_TABLE->sym - -/* HIF support */ -#define HIF_MODULE_INSTALL() hif_module_install(&_A_OS_INDIRECTION_TABLE->hif) -#define HIF_init(pConfig) A_INDIR(hif._init(pConfig)) -#define HIF_start() A_INDIR(hif._start()) -#define HIF_config_pipe(pipe, desc_list) A_INDIR(hif._config_pipe(pipe, desc_list)) -#define HIF_send_buffer(pipe, buf) A_INDIR(hif._send_buffer(pipe, buf)) -#define HIF_return_recv_buf(pipe, buf) A_INDIR(hif._return_recv_buf(pipe, buf)) -#define HIF_isr_handler() A_INDIR(hif._isr_handler()) -#define HIF_is_pipe_supported(pipe) A_INDIR(hif._is_pipe_supported(pipe)) - -/* VBUF APIs */ -#define VBUF_MODULE_INSTALL() vbuf_module_install(&_A_OS_INDIRECTION_TABLE->vbuf) -#define VBUF_init(dataAddr, nBuf) A_INDIR(vbuf._init(dataAddr, nBuf)) -#define VBUF_alloc_vbuf() A_INDIR(vbuf._alloc_vbuf()) -#define VBUF_free_vbuf(buf) A_INDIR(vbuf._free_vbuf(buf)) - -/* VDESC APIs */ -#define VDESC_MODULE_INSTALL() vdesc_module_install(&_A_OS_INDIRECTION_TABLE->vdesc) -#define VDESC_init(dataAddr, nTxDesc, nRxDesc) A_INDIR(vdesc._init(dataAddr, nTxDesc, nRxDesc)) -#define VDESC_alloc_vdesc(type) A_INDIR(vdesc._alloc_vdesc(type)) -#define VDESC_get_hw_desc(type, desc) A_INDIR(vdesc._get_hw_desc(type, desc)) -//#define VDESC_free_vdesc(buf) A_INDIR(vdesc._free_vdesc(buf)) - -#define HTC_MODULE_INSTALL() htc_module_install(&_A_OS_INDIRECTION_TABLE->htc) -//#define HTC_init(dataAddr, SetupComplete, RecvBufferSize) A_INDIR(htc._HTC_Init(dataAddr, SetupComplete, RecvBufferSize)) -#define HTC_init(dataAddr, SetupComplete, pConfig) A_INDIR(htc._HTC_Init(dataAddr, SetupComplete, pConfig)) -#define HTC_RegisterService(s) A_INDIR(htc._HTC_RegisterService(s)) -#define HTC_Ready() A_INDIR(htc._HTC_Ready()) -#define HTC_SendMsg(endpt, buf) A_INDIR(htc._HTC_SendMsg(endpt, buf)) -#define HTC_ReturnBuffers(endpt, buf) A_INDIR(htc._HTC_ReturnBuffers(endpt, buf)) - -#if 0 -/* WMI SVC module */ -#define WMI_SERVICE_MODULE_INSTALL() WMI_service_module_install(&_A_OS_INDIRECTION_TABLE->wmi_svc_api) -#define WMI_Init(dataAddr, pCfg) A_INDIR(wmi_svc_api._WMI_Init(dataAddr, pCfg)) -#define WMI_RegisterDispatchTable(pT) A_INDIR(wmi_svc_api._WMI_RegisterDispatchTable(pT)) -#define WMI_AllocEvent(ec,len) A_INDIR(wmi_svc_api._WMI_AllocEvent(ec, len)) -#define WMI_SendEvent(ev,id,seq,len) A_INDIR(wmi_svc_api._WMI_SendEvent(ev, id, seq, len)) -#define WMI_GetPendingEventsCount() A_INDIR(wmi_svc_api._WMI_GetPendingEventsCount()) -#define WMI_GetControlEp() A_INDIR(wmi_svc_api._WMI_GetControlEp()) -#define WMI_SendCompleteHandler(ep, buf) A_INDIR(wmi_svc_api._WMI_SendCompleteHandler(ep, buf)) -#endif - -/* - * This defines the layout of the indirection table, which - * is used to access exported APIs of various modules. The - * layout is shared across ROM and RAM code. RAM code may - * call into ROM and ROM code may call into RAM. Because - * of the latter, existing offsets must not change for the - * lifetime of a revision of ROM; but new members may be - * added at the end. - */ -typedef struct _A_athos_indirection_table { - _A_cmnos_indirection_table_t cmnos; - - /* TBD: to be added */ - struct hif_api hif; - struct vbuf_api vbuf; - struct vdesc_api vdesc; - struct htc_apis htc; - //WMI_SVC_APIS wmi_svc_api; -} _A_athos_indirection_table_t; - -#if 1 -extern _A_athos_indirection_table_t _indir_tbl; -#define _A_OS_INDIRECTION_TABLE_SIZE sizeof(_A_athos_indirection_table_t) -#define _A_OS_INDIRECTION_TABLE (&_indir_tbl) -#endif -#endif - -extern unsigned int _data_start_in_rom; -extern unsigned int _data_start; -extern unsigned int _data_end; -extern unsigned int _bss_start; -extern unsigned int _bss_end; -extern unsigned int _stack_sentry; -extern unsigned int __stack; -extern unsigned int _fw_image_end; - -#if defined(__XTENSA__) -#define START_DATA _data_start -#define END_DATA _data_end -#define START_BSS _bss_start -#define END_BSS _bss_end - -#define STACK_START _stack_sentry -#define STACK_END __stack -#endif - - -struct _A_os_linkage_check { - int version; - int table; -}; - - -/* - * A_INIT() handles any initialization needed by the OS abstraction, - * and it clears the application's BSS, if necessary. (Application BSS - * is not cleared if the application is linked into a single image that - * includes AthOS.) - * - * A_INIT() must be called first thing in the application (from app_start) - * in order to guarantee that BSS has been cleared properly. - */ -static INLINE int -A_INIT(void) -{ - struct _A_os_linkage_check link_check; - unsigned int *clrptr; - - if (&START_BSS != _A_MAGPIE_INDIRECTION_TABLE->cmnos.start_bss) { - /* Clear BSS */ - for (clrptr = &START_BSS; clrptr < &END_BSS; clrptr++) { - *clrptr = 0; - } - } - - { - /* Copy writable data from flash to RAM. */ - unsigned int *srcptr, *destptr; - - /* - * The _data_start symbol points to the start of data IN FLASH. - * It is defined by flash.ld at application link time. If flash.ld - * is not used, it is defined (on the link line) as 0. - */ - static int *data_start_addr = &_data_start; - - if (data_start_addr != 0) { - for (srcptr = &_data_start, destptr = &START_DATA; - destptr < &END_DATA; - srcptr++, destptr++) - { - *destptr = *srcptr; - } - } - } - -#define OS_LINKAGE_VERSION 4 - link_check.version = OS_LINKAGE_VERSION; - link_check.table = _A_MAGPIE_INDIRECTION_TABLE_SIZE; - - return A_CMN(hal_linkage_check(sizeof(link_check), &link_check)); -} - - -#endif /* __ATHOS_API_H__ */ - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/buf_pool_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/buf_pool_api.h deleted file mode 100755 index b4ff2b5..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/buf_pool_api.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/* - * @File: buf_pool_api.h - * - * @Abstract: BUF Pool api - * - * @Notes: - */ - -#ifndef _BUF_POOL_API_H -#define _BUF_POOL_API_H - -#include - -/* endpoint defines */ -typedef enum -{ - POOL_ID_HTC_CONTROL = 0, - POOL_ID_WMI_SVC_CMD_REPLY = 1, - POOL_ID_WMI_SVC_EVENT = 2, - POOL_ID_WLAN_RX_BUF = 3, - POOL_ID_MAX = 10 -} BUF_POOL_ID; - -typedef void* pool_handle_t; - -/* hardware API table structure (API descriptions below) */ -struct buf_pool_api { - pool_handle_t (*_init)(adf_os_handle_t handle); - - void (*_shutdown)(pool_handle_t handle); - - void (*_create_pool)(pool_handle_t handle, BUF_POOL_ID poolId, int nItems, int nSize); - - adf_nbuf_t (*_alloc_buf)(pool_handle_t handle, BUF_POOL_ID poolId, int reserve); - - adf_nbuf_t (*_alloc_buf_align)(pool_handle_t handle, BUF_POOL_ID poolId, int reserve, int align); - - void (*_free_buf)(pool_handle_t handle, BUF_POOL_ID poolId, adf_nbuf_t buf); - - /* room to expand this table by another table */ - void *pReserved; -}; - -extern void buf_pool_module_install(struct buf_pool_api *apis); - -#endif /* #ifndef _BUF_POOL_API_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/clock_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/clock_api.h deleted file mode 100755 index c7aae71..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/clock_api.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __CLOCK_API_H__ -#define __CLOCK_API_H__ - -#define TICK_MSEC_RATIO 1 -#define TICK_TO_MSEC(tick) ((tick)/TICK_MSEC_RATIO) -#define MSEC_TO_TICK(msec) ((msec)* TICK_MSEC_RATIO) - -struct clock_api { - void (* _clock_init)(A_UINT32 ref_clk); - void (* _clockregs_init)(void); - A_UINT32 (* _uart_frequency)(void); - void (* _delay_us)(int); - void (* _wlan_band_set)(int); - A_UINT32 (* _refclk_speed_get)(void); - A_UINT32 (* _milliseconds)(void); - void (* _sysclk_change)(void); - - void (* _clock_tick)(void); -}; - -#endif /* __CLOCK_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/cmnos_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/cmnos_api.h deleted file mode 100755 index 392ec29..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/cmnos_api.h +++ /dev/null @@ -1,662 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __CMNOS_API_H__ -#define __CMNOS_API_H__ - -/* - * This file contains wrappers to OS operating system functions - * that are available in all versions of the operating system. - * - * Target software must always use these wrappers to access OS - * services -- it may not access any OS services directly. - */ - -#include "sys_cfg.h" - -#include "xtensa/config/core.h" -#include "xtensa/hal.h" -#include "xtensa/xtruntime.h" - -/* cmnos interface */ -#include "printf_api.h" -#include "uart_api.h" -#include "dbg_api.h" -#include "mem_api.h" -#include "misc_api.h" -#include "string_api.h" -#include "timer_api.h" -#include "romp_api.h" -#include "allocram_api.h" -#include "tasklet_api.h" -#include "clock_api.h" -#include "intr_api.h" -#include "wdt_api.h" -#include "eeprom_api.h" -#include "usb_api.h" -#include -#include - -#if defined(PROJECT_K2) -#if SYSTEM_MODULE_SFLASH -#include "cmnos/sflash_api.h" -#endif -#endif - -#define AR6K_ROM_START 0x004e0000 -#define AR6K_ROM_ADDR(byte_offset) (AR6K_ROM_START+(byte_offset)) -#define TARG_ROM_ADDRS(byte_offset) AR6K_ROM_ADDR(byte_offset) - -#define IML_SIGNAL_UNUSED0_ADDR TARG_ROM_ADDRS(0) /* Cannot be used -- aligned */ -#define IML_SIGNAL_ASSERT_ADDR TARG_ROM_ADDRS(1) /* Signal an assertion failure */ -#define IML_SIGNAL_PRINTF_ADDR TARG_ROM_ADDRS(2) /* Signal a printf request */ -#define IML_SIGNAL_UNUSED4_ADDR TARG_ROM_ADDRS(4) /* Cannot be used -- aligned */ -#define IML_SIGNAL_UNUSED8_ADDR TARG_ROM_ADDRS(8) /* Cannot be used -- aligned */ -#define IML_SIGNAL_UNUSEDC_ADDR TARG_ROM_ADDRS(0xc) /* Cannot be used -- aligned */ -#define IML_SIGNAL_MASK 0xfffe000f -#define IML_LINENUM_SHIFT 4 - -#define NOW() xthal_get_ccount() - -#if defined(__XTENSA__) -#define _A_BARRIER asm volatile("memw") -#else -#define _A_BARRIER -#endif - -#define A_ASSERT( __bool ) \ - do { \ - if (0 == (__bool)) { \ - (void)*((volatile int *)(IML_SIGNAL_ASSERT_ADDR+(__LINE__<<4)));\ - _A_BARRIER; \ - } \ - } while (0) - - -#define A_IML_IS_ASSERT(vaddr) \ - (((vaddr) & IML_SIGNAL_MASK) == (IML_SIGNAL_ASSERT_ADDR & IML_SIGNAL_MASK)) - - -#define PRINT_FAILURE_STATE() \ -do { \ - uint32_t epc1, epc2, epc3, epc4; \ - \ - asm volatile("rsr %0,%1" : "=r" (epc1) : "n" (EPC_1)); \ - asm volatile("rsr %0,%1" : "=r" (epc2) : "n" (EPC_2)); \ - asm volatile("rsr %0,%1" : "=r" (epc3) : "n" (EPC_3)); \ - asm volatile("rsr %0,%1" : "=r" (epc4) : "n" (EPC_4)); \ - \ - A_PRINTF("\tepc1=0x%x, epc2=0x%x, epc3=0x%x, epc4=0x%x\n", \ - epc1, epc2, epc3, epc4); \ - A_PRINTF("0x%08x, 0x%08x, 0x%08x, \n\r", \ - DEBUG_SYSTEM_STATE, WATCH_DOG_RESET_COUNTER, \ - WATCH_DOG_MAGIC_PATTERN); \ -} while(0) -//////////////////////////////////////////////////////////////////////////////////// - - -//#define A_CMN(sym) _A_OS_INDIRECTION_TABLE->cmnos.sym -#define A_CMN(sym) _A_MAGPIE_INDIRECTION_TABLE->cmnos.sym - -#if SYSTEM_MODULE_MEM -/* Mem interfaces */ -#define A_MEMSET(addr, value, size) \ - A_CMN(mem._memset((char *)(addr), (int)(value), (int)(size))) - -#define A_MEMZERO(addr, size) \ - A_CMN(mem._memset((char *)(addr), (int)0, (int)(size))) - -#define A_MEMCPY(dst, src, size) \ - A_CMN(mem._memcpy((char *)(dst), (char *)(src), (int)(size))) - -#define A_MEMMOVE(dst, src, size) \ - A_CMN(mem._memmove((char *)(dst), (char *)(src), (int)(size))) - -#define A_MEMCMP(p1, p2, nbytes) \ - A_CMN(mem._memcmp)((void *)(p1), (void *)(p2), (int)(nbytes)) -#else -/* Mem interfaces */ -#define A_MEMSET(addr, value, size) - -#define A_MEMZERO(addr, size) - -#define A_MEMCPY(dst, src, size) - -#define A_MEMMOVE(dst, src, size) - -#define A_MEMCMP(p1, p2, nbytes) -#endif - - -#if 1 - /* String interfaces */ - #define A_STRCPY(dst, src) A_CMN(string._strcpy((dst), (src))) - #define A_STRNCPY(dst, src, n) A_CMN(string._strncpy((dst), (src), (n))) - #define A_STRLEN(str) A_CMN(string._strlen(str)) - #define A_STRCMP(str1, str2) A_CMN(string._strcmp((str1), (str2))) - #define A_STRNCMP(str1, str2, n) A_CMN(string._strncmp((str1), (str2), (n))) -#endif - -#if SYSTEM_MODULE_PRINT -/* Printf support */ -#define A_PRINTF_INIT() A_CMN(printf._printf_init()) -#define A_PRINTF A_CMN(printf._printf) -#else -#define A_PRINTF_INIT() -#define A_PRINTF -#endif /* SYSTEM_MODULE_PRINT */ - -#if SYSTEM_MODULE_UART -/* Serial port support */ -#define A_UART_INIT() A_CMN(uart._uart_init()) - -#define A_UART_HWINIT(freq, baud) \ - A_CMN(uart._uart_hwinit((freq), (baud))) - -#define A_UART_ENABLED() (HOST_INTEREST->hi_uart_enable) - -#define A_PUTS(str) A_CMN(uart._uart_str_out(str)) - -#define A_PUTC(ch) A_CMN(uart._uart_char_put(ch)) -#define A_GETC(pCh) A_CMN(uart._uart_char_get(pCh)) - -#define A_UART_TASK() A_CMN(uart._uart_task()) -#define A_UART_CONFIG(x) A_CMN(uart._uart_config(x)) - -#else - -#define A_UART_INIT() - -#define A_UART_HWINIT(freq, baud) - -#define A_UART_ENABLED() - -#define A_PUTS(str) - -#define A_PUTC(ch) -#define A_GETC(pCh) - -#define A_UART_TASK() -#define A_UART_CONFIG(x) - -#endif - -#if SYSTEM_MODULE_MISC -/* Reset Support */ -#define A_RESET() A_CMN(misc._system_reset()) -#define A_RESET_MAC() A_CMN(misc._mac_reset()) - -/* Assertion failure */ -#define A_ASSFAIL(regdump) A_CMN(misc._assfail((regdump))) - -/* Report a failure to the Host */ -#define A_REPORT_FAILURE(data, len) \ - A_CMN(misc._report_failure_to_host((data), (len))) - -/* UNALIGNED references are used for ASSERTs */ -#define A_MISALIGNED_LOAD_HANDLER(dump) A_CMN(misc._misaligned_load_handler(dump)) - -/* reture the host interface type */ -#define A_IS_HOST_PRESENT() A_CMN(misc._is_host_present()) -#define A_KBHIT(delay) A_CMN(misc._kbhit(delay)) -#define A_GET_ROM_VER() A_CMN(misc._rom_version_get()) -#else -/* Reset Support */ -#define A_RESET() -#define A_RESET_MAC() - -/* Assertion failure */ -#define A_ASSFAIL(regdump) - -#define A_MISALIGNED_LOAD_HANDLER(dump) - -/* Report a failure to the Host */ -#define A_REPORT_FAILURE(data, len) - -#define A_IS_HOST_PRESENT() -#define A_KBHIT(delay) -#define A_GET_ROM_VER() -#endif - -//#if SYSTEM_MODULE_DBG -/* debug Support */ -//#define A_DBG_INIT() A_CMN(dbg._dbg_init()) -//#define A_DBG_TASK() A_CMN(dbg._dbg_task()) -//#else -//#define A_DBG_INIT() -//#define A_DBG_TASK() -//#endif - -#if SYSTEM_MODULE_USB -/* debug Support */ -#define A_USB_INIT() A_CMN(usb._usb_init()) -#define A_USB_ROM_TASK() A_CMN(usb._usb_rom_task()) -#define A_USB_FW_TASK() A_CMN(usb._usb_fw_task()) -#define A_USB_INIT_PHY() A_CMN(usb._usb_init_phy()) - -#define A_USB_EP0_SETUP() A_CMN(usb._usb_ep0_setup()) -#define A_USB_EP0_TX_DATA() A_CMN(usb._usb_ep0_tx_data()) -#define A_USB_EP0_RX_DATA() A_CMN(usb._usb_ep0_rx_data()) - -#define A_USB_GET_CONFIG() A_CMN(usb._usb_get_configuration()) -#define A_USB_SET_CONFIG() A_CMN(usb._usb_set_configuration()) - -#define A_USB_GET_INTERFACE() A_CMN(usb._usb_get_interface()) -#define A_USB_SET_INTERFACE() A_CMN(usb._usb_set_interface()) - -#define A_USB_STANDARD_CMD() A_CMN(usb._usb_standard_cmd()) -#define A_USB_VENDOR_CMD() A_CMN(usb._usb_vendor_cmd()) - -#define A_USB_POWER_OFF() A_CMN(usb._usb_power_off()) -#define A_USB_RESET_FIFO() A_CMN(usb._usb_reset_fifo()) -#define A_USB_GEN_WDT() A_CMN(usb._usb_gen_wdt()) -#define A_USB_JUMP_BOOT() A_CMN(usb._usb_jump_boot()) - -#define A_USB_GET_DESCRIPTOR() A_CMN(usb._usb_get_descriptor()) -#define A_USB_SET_ADDRESS() A_CMN(usb._usb_set_address()) -#define A_USB_SET_FEATURE() A_CMN(usb._usb_set_feature()) -#define A_USB_CLEAR_FEATURE() A_CMN(usb._usb_clr_feature()) - -#define A_USB_GET_STATUS() A_CMN(usb._usb_get_status()) -#define A_USB_SETUP_DESC() A_CMN(usb._usb_setup_desc()) -#define A_USB_STATUS_IN() A_CMN(usb._usb_status_in()) -#define A_USB_REG_OUT() A_CMN(usb._usb_reg_out()) - -#define A_USB_EP0_TX() A_CMN(usb._usb_ep0_tx()) -#define A_USB_EP0_RX() A_CMN(usb._usb_ep0_rx()) -#define A_USB_CLK_INIT() A_CMN(usb._usb_clk_init()) - -#else -#define A_USB_INIT() -#define A_USB_TASK() -#define A_USB_INIT_PHY() - -#define A_USB_EP0_SETUP() -#define A_USB_EP0_TX() -#define A_USB_EP0_RX() - -#define A_USB_GET_CONFIG() -#define A_USB_SET_CONFIG() - -#define A_USB_GET_INTERFACE() -#define A_USB_SET_INTERFACE() - -#define A_USB_STANDARD_CMD() -#define A_USB_VENDOR_CMD() - -#define A_USB_POWER_OFF() -#define A_USB_RESET_FIFO() -#define A_USB_GEN_WDT() -#define A_USB_JUMP_BOOT() - -#define A_USB_GET_DESCRIPTOR() -#define A_USB_SET_ADDRESS() -#define A_USB_SET_FEATURE() -#define A_USB_CLEAR_FEATURE() - -#define A_USB_GET_STATUS() -#define A_USB_SETUP_DESC() - - -#define A_USB_STATUS_IN() -#define A_USB_REG_OUT() - -#define A_USB_EP0_TX() -#define A_USB_EP0_RX() - -#define A_USB_CLK_INIT() -#endif - -#if SYSTEM_MODULE_INTR -/* Low-level interrupt support intended for use by OS modules */ -#define A_INTR_GET_INTRENABLE() A_CMN(intr._get_intrenable()) -#define A_INTR_SET_INTRENABLE(val) A_CMN(intr._set_intrenable(val)) -#define A_INTR_GET_INTRPENDING() A_CMN(intr._get_intrpending()) -#define A_INTR_UNBLOCK_ALL_INTRLVL() A_CMN(intr._unblock_all_intrlvl()) - -/* Interrupt support */ -#define A_INTR_INIT() A_CMN(intr._intr_init()) - -#define A_INTR_DISABLE(pOld) \ - do { \ - *(pOld) = A_CMN(intr._intr_disable()); \ - } while (0) - -#define A_INTR_RESTORE(old) A_CMN(intr._intr_restore((old))) - -#define A_INVOKE_ISR(inum) A_CMN(intr._intr_invoke_isr(inum)) - -#define A_INTR_MASK(inum) A_CMN(intr._intr_mask_inum(inum)) -#define A_INTR_UNMASK(inum) A_CMN(intr._intr_unmask_inum(inum)) - -#define A_ATTACH_ISR(inum, isr, arg) A_CMN(intr._intr_attach_isr(inum, isr, arg)) -#else -#define A_INTR_INIT() -#define A_INTR_DISABLE(pOld) -#define A_INTR_RESTORE(old) - -#define A_INTR_GET_INTRENABLE() -#define A_INTR_SET_INTRENABLE(val) -#define A_INTR_GET_INTRPENDING() -#define A_INTR_UNBLOCK_ALL_INTRLVL() -#define A_INVOKE_ISR(inum) -#define A_INTR_MASK(inum) -#define A_INTR_UNMASK(inum) -#define A_ATTACH_ISR(inum, isr, arg) - -#endif - -/* Tasklet Support */ -#define A_TASKLET_INIT() A_CMN(tasklet._tasklet_init()) -#define A_TASKLET_INIT_TASK(f, arg, t) A_CMN(tasklet._tasklet_init_task(f, arg, t)) -#define A_TASKLET_DISABLE(t) A_CMN(tasklet._tasklet_disable(t)) -#define A_TASKLET_SCHEDULE(t) A_CMN(tasklet._tasklet_schedule(t)) -#define A_TASKLET_RUN() A_CMN(tasklet._tasklet_run()) - - -/* RAM Allocation Support */ -#if defined(__mips__) -#define alloc_arena_start _end -#endif -#if defined(__XTENSA__) -#define alloc_arena_start _end -#endif - -#if SYSTEM_MODULE_CLOCK - -#define A_CLOCK_INIT(refclk_guess) A_CMN(clock._clock_init(refclk_guess)) -#define A_CLOCK_TICK() A_CMN(clock._clock_tick()) -#define A_CLOCK_GET_TICK() A_CMN(clock._clock_get_tick()) - -/* - * Get the number of millisecond ticks since the system was started. - * Note that this only approximates 1Ms. It's actually 32 ticks of - * a 32KHz clock. - * - * Returns a A_UINT32 value. - */ -#define A_MILLISECONDS() A_CMN(clock._milliseconds()) - -/* - * Get the frequency of the reference clock, expressed as - * an A_refclk_speed_t. - */ -#define A_REFCLK_SPEED_GET() A_CMN(clock._refclk_speed_get()) - -/* Spin delay */ -#define A_DELAY_USECS(us) A_CMN(clock._delay_us(us)) - -#define A_UART_FREQUENCY() A_CMN(clock._uart_frequency()) - -#define A_CLOCKREGS_INIT() A_CMN(clock._clockregs_init()) - -/* which_band is either A_BAND_24GHZ or A_BAND_5GHZ */ -#define A_WLAN_BAND_SET(which_band) \ - A_CMN(clock._wlan_band_set(which_band)) - -/* Called whenever the system clock changes speed */ -#define A_SYSCLK_CHANGE() A_CMN(clock._sysclk_change()) - -#else - -#define A_CLOCK_INIT(refclk_guess) -#define A_CLOCK_TICK() -#define A_CLOCK_GET_TICK() -#define A_MILLISECONDS() -#define A_REFCLK_SPEED_GET() -#define A_DELAY_USECS(us) -#define A_UART_FREQUENCY() -#define A_CLOCKREGS_INIT() -#define A_WLAN_BAND_SET(which_band) -#define A_SYSCLK_CHANGE() - -#endif - -// Timer -#define A_INIT_TIMER(pTimer, pFunction, pArg) \ - A_CMN(timer._timer_setfn((pTimer), (pFunction), (pArg))) - -/* Set a (possibly periodic) timer for "period" Milliseconds. */ -#define A_TIMEOUT_MS(pTimer, period) \ - A_CMN(timer._timer_arm((pTimer), (period))) - -#define A_UNTIMEOUT(pTimer) \ - A_CMN(timer._timer_disarm(pTimer)) - -#define A_TIMER_RUN() \ - A_CMN(timer._timer_run()) - -#define A_GMAC_BOOT_INIT() \ - A_CMN(gmac.gmac_boot_init()) - -#if SYSTEM_MODULE_ALLOCRAM -/* Default size of ALLOCRAM area */ -#define ARENA_SZ_DEFAULT 12000 - -#define A_ALLOCRAM_INIT(arena_start, arena_size) \ -do { \ - extern unsigned int alloc_arena_start; \ - void *astart; \ - int asize; \ - astart = (arena_start) ? (void *)(arena_start) : &alloc_arena_start; \ - asize = (arena_size) ? (arena_size) : (ARENA_SZ_DEFAULT); \ - A_CMN(allocram.cmnos_allocram_init((astart), (asize))); \ -} while (0) - -#define A_ALLOCRAM(nbytes) A_CMN(allocram.cmnos_allocram(0, (nbytes))) - -#define A_ALLOCRAM_DEBUG() A_CMN(allocram.cmnos_allocram_debug()) - -#else -#define A_ALLOCRAM_INIT(arena_start, arena_size) -#define A_ALLOCRAM(nbytes) -#define A_ALLOCRAM_DEBUG() -#endif - -#if SYSTEM_MODULE_ROM_PATCH - -#define A_ROMP_INIT() A_CMN(romp._romp_init()) -#define A_ROMP_DOWNLOAD(x) A_CMN(romp._romp_download(x)) -#define A_ROMP_DECODE(addr) A_CMN(romp._romp_decode(addr)) -#define A_ROMP_INSTALL() A_CMN(romp._romp_install()) -#else -#define A_ROMP_INIT() -#define A_ROMP_DOWNLOAD(x) -#define A_ROMP_DECODE(addr) -#define A_ROMP_INSTALL() -#endif - -#if SYSTEM_MODULE_WDT - -#define A_WDT_INIT() A_CMN(wdt_timer._wdt_init()) -#define A_WDT_ENABLE() A_CMN(wdt_timer._wdt_enable()) -#define A_WDT_DISABLE() A_CMN(wdt_timer._wdt_disable()) -#define A_WDT_SET(t) A_CMN(wdt_timer._wdt_set(t)) -#define A_WDT_TASK() A_CMN(wdt_timer._wdt_task()) -#define A_WDT_LASTBOOT() A_CMN(wdt_timer._wdt_last_boot()) -#define A_WDT_RESET() A_CMN(wdt_timer._wdt_reset()) - -#else -#define A_WDT_INIT() -#define A_WDT_ENABLE() -#define A_WDT_DISABLE() -#define A_WDT_SET(t) -#define A_WDT_TASK() -#define A_WDT_LASTBOOT() -#define A_WDT_RESET() -#endif - - -#if SYSTEM_MODULE_EEPROM -#define A_EEP_INIT() A_CMN(eep._eep_init()) -#define A_EEP_READ(off, len, buf) A_CMN(eep._eep_read(off, len, buf)) -#define A_EEP_WRITE(off, len, buf) A_CMN(eep._eep_write(off, len, buf)) -#define A_EEP_IS_EXIST() A_CMN(eep._eep_is_exist()) -#else -#define A_EEP_INIT() -#define A_EEP_READ(off, len, buf) -#define A_EEP_WRITE(off, len, buf) -#define A_EEP_IS_EXIST() -#endif - - - -struct _A_os_linkage_check; /* OS-dependent */ - -typedef struct _A_cmnos_indirection_table { - int (* hal_linkage_check)(int sz, struct _A_os_linkage_check *); - unsigned int *start_bss; - void (* app_start)(void); - -#if SYSTEM_MODULE_MEM - struct mem_api mem; -#endif - -#if SYSTEM_MODULE_MISC - struct misc_api misc; -#endif - -#if SYSTEM_MODULE_PRINT - struct printf_api printf; -#endif - -#if SYSTEM_MODULE_UART - struct uart_api uart; -#endif - -//#if SYSTEM_MODULE_DBG -// struct dbg_api dbg; -//#endif - - -#if SYSTEM_MODULE_GMAC - struct gmac_api gmac; -#endif - -#if SYSTEM_MODULE_USB - struct usb_api usb; -#endif - -#if SYSTEM_MODULE_CLOCK - struct clock_api clock; -#endif - -#if SYSTEM_MODULE_TIMER - struct timer_api timer; -#endif - -#if SYSTEM_MODULE_INTR - struct intr_api intr; -#endif - -#if SYSTEM_MODULE_ALLOCRAM - struct allocram_api allocram; -#endif - -#if SYSTEM_MODULE_ROM_PATCH - struct romp_api romp; -#endif - -#if SYSTEM_MODULE_WDT - struct wdt_api wdt_timer; -#endif - -#if SYSTEM_MODULE_EEPROM - struct eep_api eep; -#endif - - struct string_api string; - struct tasklet_api tasklet; - -} _A_cmnos_indirection_table_t; - -/* Module installation for cmnos modules */ - -#if SYSTEM_MODULE_MEM -extern void cmnos_mem_module_install(struct mem_api *); -#endif - -#if SYSTEM_MODULE_MISC -extern void cmnos_misc_module_install(struct misc_api *); -#endif - -#if SYSTEM_MODULE_PRINT -extern void cmnos_printf_module_install(struct printf_api *); -#endif - -#if SYSTEM_MODULE_UART -extern void cmnos_uart_module_install(struct uart_api *); -#endif - -//#if SYSTEM_MODULE_DBG -//extern void cmnos_dbg_module_install(struct dbg_api *); -//#endif - -#if SYSTEM_MODULE_USB -extern void cmnos_usb_module_install(struct usb_api *); -#endif - -#if SYSTEM_MODULE_INTR -extern void cmnos_intr_module_install(struct intr_api *); -#endif - -#if SYSTEM_MODULE_CLOCK -extern void cmnos_clock_module_install(struct clock_api *); -#endif - -#if SYSTEM_MODULE_TIMER -extern void cmnos_timer_module_install(struct timer_api *); -#endif - -#if SYSTEM_MODULE_ALLOCRAM -extern void cmnos_allocram_module_install(struct allocram_api *); -#endif - -#if SYSTEM_MODULE_ROM_PATCH -extern void cmnos_romp_module_install(struct romp_api *); -#endif - -#if SYSTEM_MODULE_WDT -extern void cmnos_wdt_module_install(struct wdt_api *); -#endif - -#if SYSTEM_MODULE_EEPROM -extern void cmnos_eep_module_install(struct eep_api *); -#endif - -extern void cmnos_tasklet_module_install(struct tasklet_api *); - -extern void cmnos_string_module_install(struct string_api *tbl); - -#endif /* __CMNOS_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_engine_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_engine_api.h deleted file mode 100755 index 2f80c24..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_engine_api.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -/* - * @File: dma_engine_api.h - * - * @Abstract: DMA Engine api - * - * @Notes: - */ - -#ifndef _DMA_ENGINE_API_H -#define _DMA_ENGINE_API_H - -#include -#include - -struct zsDmaDesc -{ -#if 1 // BIG_ENDIAN - volatile u16_t ctrl; // Descriptor control - volatile u16_t status; // Descriptor status - volatile u16_t totalLen; // Total length - volatile u16_t dataSize; // Data size -#else - volatile u16_t status; // Descriptor status - volatile u16_t ctrl; // Descriptor control - volatile u16_t dataSize; // Data size - volatile u16_t totalLen; // Total length -#endif - struct zsDmaDesc* lastAddr; // Last address of this chain - volatile u32_t dataAddr; // Data buffer address - struct zsDmaDesc* nextAddr; // Next TD address -}; - -struct zsDmaQueue -{ - struct zsDmaDesc* head; - struct zsDmaDesc* terminator; -}; - -// Subclass of zsDmaQueue for TX -struct zsTxDmaQueue -{ - struct zsDmaDesc* head; - struct zsDmaDesc* terminator; - - /* Below are fields specific to TX */ - VBUF *xmited_buf_head; - VBUF *xmited_buf_tail; -}; - -/* hardware API table structure (API descriptions below) */ -struct dma_engine_api -{ - void (*_init)(); - - void (*_init_rx_queue)(struct zsDmaQueue *q); - - void (*_init_tx_queue)(struct zsTxDmaQueue *q); - - void (*_config_rx_queue)(struct zsDmaQueue *q, int num_desc, int buf_size); - - void (*_xmit_buf)(struct zsTxDmaQueue *q, VBUF *buf); - - void (*_flush_xmit)(struct zsDmaQueue *q); - - VBUF* (*_reap_recv_buf)(struct zsDmaQueue *q); - - void (*_return_recv_buf)(struct zsDmaQueue *q, VBUF *buf); - - VBUF* (*_reap_xmited_buf)(struct zsTxDmaQueue *q); - - void (*_swap_data)(struct zsDmaDesc* desc); - - int (*_has_compl_packets)(struct zsDmaQueue *q); - - void (*_desc_dump)(struct zsDmaQueue *q); - - /* The functions below are for patchable */ - struct zsDmaDesc* (*_get_packet)(struct zsDmaQueue* q); - void (*_reclaim_packet)(struct zsDmaQueue* q, struct zsDmaDesc* desc); - void (*_put_packet)(struct zsDmaQueue* q, struct zsDmaDesc* desc); - - /* room to expand this table by another table */ - void *pReserved; -}; - -extern void dma_engine_module_install(struct dma_engine_api *apis); - -#endif /* #ifndef _DMA_ENGINE_API_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_lib.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_lib.h deleted file mode 100755 index 7b44c56..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/dma_lib.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef __DMA_LIB_H -#define __DMA_LIB_H - - -/***********************External***************************/ - -/** - * @brief DMA engine numbers, HIF need to map them to there - * respective order - */ -typedef enum dma_engine{ - DMA_ENGINE_RX0, - DMA_ENGINE_RX1, - DMA_ENGINE_RX2, - DMA_ENGINE_RX3, - DMA_ENGINE_TX0, - DMA_ENGINE_TX1, - DMA_ENGINE_MAX -}dma_engine_t; - -/** - * @brief Interface type, each HIF should call with its own interface type - */ -typedef enum dma_iftype{ - DMA_IF_GMAC = 0x0,/* GMAC */ - DMA_IF_PCI = 0x1,/*PCI */ - DMA_IF_PCIE = 0x2 /*PCI Express */ -}dma_iftype_t; - - -struct dma_lib_api{ - A_UINT16 (*tx_init)(dma_engine_t eng_no, dma_iftype_t if_type); - void (*tx_start)(dma_engine_t eng_no); - A_UINT16 (*rx_init)(dma_engine_t eng_no, dma_iftype_t if_type); - void (*rx_config)(dma_engine_t eng_no, a_uint16_t num_desc, - a_uint16_t gran); - void (*rx_start)(dma_engine_t eng_no); - A_UINT32 (*intr_status)(dma_iftype_t if_type); - A_UINT16 (*hard_xmit)(dma_engine_t eng_no, VBUF *buf); - void (*flush_xmit)(dma_engine_t eng_no); - A_UINT16 (*xmit_done)(dma_engine_t eng_no); - VBUF * (*reap_xmitted)(dma_engine_t eng_no); - VBUF * (*reap_recv)(dma_engine_t eng_no); - void (*return_recv)(dma_engine_t eng_no, VBUF *buf); - A_UINT16 (*recv_pkt)(dma_engine_t eng_no); -}; - - -/** - * @brief Install the DMA lib api's this for ROM patching - * support - * - * @param apis - */ -void dma_lib_module_install(struct dma_lib_api *apis); - -#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/eeprom_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/eeprom_api.h deleted file mode 100755 index b9668c8..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/eeprom_api.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __EEPROM_API_H__ -#define __EEPROM_API_H__ -/* - * - */ - - -typedef enum { - RET_SUCCESS = 0, - RET_NOT_INIT, - RET_NOT_EXIST, - RET_EEP_CORRUPT, - RET_EEP_OVERFLOW, - - // add return code from here - RET_UNKNOWN -}T_EEP_RET; - - -/*!- interface of eeprom access - * - */ -struct eep_api { - void (* _eep_init)(void); - T_EEP_RET (* _eep_read)(uint16_t, uint16_t, uint16_t *); - T_EEP_RET (* _eep_write)(uint16_t, uint16_t, uint16_t *); - T_EEP_RET (*_eep_is_exist)(void); - -}; - -#endif /* __EEPROM_API_H__ */ - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_gmac.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_gmac.h deleted file mode 100755 index 3ca57b7..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_gmac.h +++ /dev/null @@ -1,290 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __HIF_GMAC_H -#define __HIF_GMAC_H - -#include -#include - - -#define ETH_ALEN 6 -#define GMAC_MAX_PKT_LEN 1600 -#define GMAC_MAX_DESC 5 - -#define GMAC_DISCV_PKT_SZ 1024 -#define GMAC_DISCV_WAIT 2000 - -#define ATH_P_MAGBOOT 0x12 /*Magpie GMAC 18 for boot downloader*/ -#define ATH_P_MAGNORM 0x13 /*Magpie GMAC 19 for HTC & others*/ - -#define ETH_P_ATH 0x88bd - -typedef enum hif_gmac_pipe{ - HIF_GMAC_PIPE_RX = 1, /*Normal Priority RX*/ - HIF_GMAC_PIPE_TX = 2, /*Normal Priority TX*/ -}hif_gmac_pipe_t; - -struct gmac_api{ - void (*gmac_boot_init)(void); -}; - -void cmnos_gmac_module_install(struct gmac_api *boot_apis); -void hif_gmac_module_install(struct hif_api *apis); - -enum __gmac_mii_mode { - GMAC_MIIMODE_NONE=0, - GMAC_MIIMODE_MII=1, - GMAC_MIIMODE_RMII=2, - GMAC_MIIMODE_GMII=3, - GMAC_MIIMODE_RGMII=4, - GMAC_MIIMODE_MAX=5 -}; -enum __gmac_msg_type{ - GMAC_HST_QUERY = 0x0001, - GMAC_HST_REPLY = 0x0002, - GMAC_TGT_QUERY = 0x0003, - GMAC_TGT_REPLY = 0x0004 -}; - -enum __magpie_regs{ - MAG_REG_GPIO_OE = 0x00052000,/*GPIO Output Enable*/ - MAG_REG_RST = 0x00050010,/*Magpie reset reg*/ - MAG_REG_RST_AHB = 0x00050018,/*Magpie AHB_ARB reset reg*/ - MAG_REG_MII0_CTRL = 0x00054100,/*Magpie MII0 Control reg*/ - MAG_REG_STAT_CTRL = 0x00054104,/*Magpie Status reg*/ - - MAG_REG_ETH_PLL = 0x5600c, - MAG_REG_ETHPLL_BYPASS = 0x56010, -}; - -enum __gmac_regs{ - GMAC_REG_BASE = 0x00060000, - GMAC_REG_MAC_CFG1 = 0x00 + GMAC_REG_BASE,/*MAC config 1*/ - GMAC_REG_MAC_CFG2 = 0x04 + GMAC_REG_BASE,/*MAC config 2*/ - GMAC_REG_IPG_IFG = 0x08 + GMAC_REG_BASE,/*Inter-packet-gap*/ - GMAC_REG_HALF_DPLX = 0x0c + GMAC_REG_BASE,/*Half duplex*/ - GMAC_REG_MAX_FRAME = 0x10 + GMAC_REG_BASE,/*Max frame length*/ - GMAC_REG_MII_CFG = 0x20 + GMAC_REG_BASE,/*MII mgmt config*/ - GMAC_REG_MII_CMD = 0x24 + GMAC_REG_BASE,/*MII mgmt command*/ - GMAC_REG_MII_ADDR = 0x28 + GMAC_REG_BASE,/*MII mgmt address*/ - GMAC_REG_MII_CTRL = 0x2c + GMAC_REG_BASE,/*MII mgmt control*/ - GMAC_REG_MII_STAT = 0x30 + GMAC_REG_BASE,/*MII mgmt status*/ - GMAC_REG_MII_PSTAT = 0x34 + GMAC_REG_BASE,/*MII mgmt Phy status/ind*/ - GMAC_REG_IF_CTRL = 0x38 + GMAC_REG_BASE,/*Interface control*/ - GMAC_REG_IF_STAT = 0x3c + GMAC_REG_BASE,/*Interface status*/ - GMAC_REG_MAC_ADDR1 = 0x40 + GMAC_REG_BASE,/*MAC address 1*/ - GMAC_REG_MAC_ADDR2 = 0x44 + GMAC_REG_BASE,/*MAC address 2*/ - GMAC_REG_FIFO_CFG0 = 0x48 + GMAC_REG_BASE,/*FIFO config reg0*/ - GMAC_REG_FIFO_CFG1 = 0x4c + GMAC_REG_BASE,/*FIFO config reg1*/ - GMAC_REG_FIFO_CFG2 = 0x50 + GMAC_REG_BASE,/*FIFO config reg2*/ - GMAC_REG_FIFO_CFG3 = 0x54 + GMAC_REG_BASE,/*FIFO config reg3*/ - GMAC_REG_FIFO_CFG4 = 0x58 + GMAC_REG_BASE,/*FIFO config reg4*/ - GMAC_REG_FIFO_CFG5 = 0x5c + GMAC_REG_BASE,/*FIFO config reg5*/ - GMAC_REG_FIFO_RAM0 = 0x60 + GMAC_REG_BASE,/*FIFO RAM access reg0*/ - GMAC_REG_FIFO_RAM1 = 0x64 + GMAC_REG_BASE,/*FIFO RAM access reg1*/ - GMAC_REG_FIFO_RAM2 = 0x68 + GMAC_REG_BASE,/*FIFO RAM access reg2*/ - GMAC_REG_FIFO_RAM3 = 0x6c + GMAC_REG_BASE,/*FIFO RAM access reg3*/ - GMAC_REG_FIFO_RAM4 = 0x70 + GMAC_REG_BASE,/*FIFO RAM access reg4*/ - GMAC_REG_FIFO_RAM5 = 0x74 + GMAC_REG_BASE,/*FIFO RAM access reg5*/ - GMAC_REG_FIFO_RAM6 = 0x78 + GMAC_REG_BASE,/*FIFO RAM access reg6*/ - GMAC_REG_FIFO_RAM7 = 0x7c + GMAC_REG_BASE,/*FIFO RAM access reg7*/ -}; - -enum __mag_reg_rst{ - RST_GMAC = (1 << 9),/*Reset the GMAC */ - RST_MII = (3 << 11),/*Reset the MII*/ - RST_OTHERS = 0x5df,/*Reset everybody other than GMAC & MII*/ -}; - -enum __mag_reg_rst_ahb{ - RST_AHB_GMAC = 0x1 -}; -enum __mag_mii0_ctrl_mode{ - MII0_CTRL_MODE_GMII = 0x00, /* GMII*/ - MII0_CTRL_MODE_MII = 0x01, /*MII*/ - MII0_CTRL_MODE_RGMII = 0x02,/* RGMII */ - MII0_CTRL_MODE_RMII = 0x03, /* RMII */ - MII0_CTRL_MASTER_MODE = 0x04 /* master mode */ -}; -enum __mag_mii0_ctrl_speed { - MII0_CTLR_SPEED_10 = 0x00, /* 10 mbps*/ - MII0_CTRL_SPEED_100 = 0x10, /*MII control address 100 Mbps*/ - MII0_CTRL_SPEED_1000 = 0x20 /* 1000 */ -}; - - -enum __gmac_reg_mac_cfg1{ - MAC_CFG1_TX_EN = (1 << 0),/*TX enable*/ - MAC_CFG1_RX_EN = (1 << 2),/*RX enable*/ - MAC_CFG1_TX_FLOW = (1 << 4),/*TX Flow control enable*/ - MAC_CFG1_RX_FLOW = (1 << 5),/*RX Flow control enable*/ - MAC_CFG1_LOOP_EN = (1 << 8),/*Enable loopback*/ -}; -enum __gmac_reg_mac_cfg2{ - MAC_CFG2_FULL_DUP = (1 << 0),/*Enable Full Duplex*/ - MAC_CFG2_PAD_CRC = (1 << 2),/*Enable MAC based CRC insertion*/ - MAC_CFG2_CHK_LEN = (1 << 4),/*Check Length field*/ - MAC_CFG2_HUGE_FRM = (1 << 5),/*Allow sending huge frames*/ - MAC_CFG2_MII = (1 << 8),/*MAC is MII in mode*/ - MAC_CFG2_GMII = (1 << 9),/*MAC is in GMII mode*/ - MAC_CFG2_PREAMBLE = (7 << 12),/*Default Preamble Length*/ -}; -enum __gmac_reg_mii_cfg{ - MII_CFG_CLK_2MHZ = 0x0006,/*Clock is 2Mhz*/ -}; - - -/* following are only for F1 phy on emulation board.*/ -enum __gmac_reg_mii_addr{ - MII_ADDR_RESET = 0x000,/*Flush the MII address register*/ - MII_ADDR_STATS = 0x001,/* Stauts register*/ - MII_ADDR_PHY_IDENT_1 = 0x002,/* phy identifier [18:3]*/ - MII_ADDR_PHY_IDENT_2 = 0x003,/* phy identifier [19:24]*/ - MII_ADDR_AUTONEG_ADV = 0x004,/* Autonegotiaion advertise*/ - MII_ADDR_LINKPART_ABILITY = 0x0005,/* link partner ability*/ - MII_ADDR_AUTONEG_EXP = 0x0006,/* Autonegotiation expansion*/ - MII_ADDR_NEXTPG_TX = 0x0007,/* Next page transmit*/ - MII_ADDR_LINKPART_NEXTPG = 0x0008,/* Link partnet next page*/ - MII_ADDR_1000BASET_CNTRL = 0x0009,/* 1000 base-t control*/ - MII_ADDR_1000BSAET_STATUS = 0x000a,/* 1000 base-t status*/ - MII_ADDR_EXTENDED_STATUS = 0x000f,/* extended status*/ - MII_ADDR_FUNCTION_CTRL = 0x0010,/* function control*/ - MII_ADDR_PHY_REG = 0x0011,/*Phy Status Reg*/ - MII_ADDR_INTERRUPT_ENA = 0x0012,/* interrupt enable*/ - MII_ADDR_INTERRUPT_STATUS = 0x0013,/* interrupt status*/ - MII_ADDR_EXTPHY_CTRL = 0x0014,/* extemded phy specific control*/ - MII_ADDR_CABDET_CTRL = 0x0016,/* cable detect testser control*/ - MII_ADDR_LED_CTRL = 0x0018,/* LED control*/ - MII_ADDR_MANLED_OVER = 0x0019,/* Manual LED override*/ - MII_ADDR_CABDET_STAT = 0x001c,/* cable detect tester status*/ - MII_ADDR_DEBUGPORT_OFF = 0x001d,/* Debug port address offset*/ - MII_ADDR_DEBUGPORT_DATA = 0x001e,/* Debug port data */ -}; - -/* definitions for MII_ADDR_RESET register definitions*/ -#define MII_ADDR_RESET_RESTART_AUTONEG (1 << 9) -#define MII_ADDR_RESET_ENABLE_AUTONEG (1 << 12) -#define MII_ADDR_RESET_ENABLE_LOOPBACK (1<<14) -#define MII_ADDR_RESET_SOFT_RESET (1<<15) -/* flags for autonegotiaion register MII_ADDR_AUTONEG_ADV, - All writes to this register should be followed by a soft - reset on the phy - The list is not exhaustive, only required fields added - */ -#define MII_AUTONEG_10BT_HALF (1<<5) -#define MII_AUTONEG_10BT_FULL (1<<6) -#define MII_AUTONEG_100BT_HALF (1<<7) -#define MII_AUTONEG_100BT_FULL (1<<8) -#define MII_AUTONEG_PAUSE (1<<9) -#define MII_1000BASET_1000BT_HALF (1<<8) -#define MII_1000BASET_1000BT_FULL (1<<9) -enum __gmac_reg_mii_ctrl{ - MII_CTRL_FULL_DPLX = 0x0100,/*Full Duplex mode*/ - MII_CTRL_SPEED_100 = 0x2000,/*Link Speed 100 Mbps*/ - MII_CTRL_LOOPBACK = 0x4000,/*Enable Loopback mode at PHY*/ - MII_CTRL_RESET = 0x8000,/*BMCR reset*/ -}; -enum __gma_reg_mii_cmd{ - MII_CMD_WRITE = 0x0, - MII_CMD_READ = 0x1,/*Perform a Read cycle*/ -}; -enum __gmac_reg_fifo_cfg0{ - FIFO_CFG0_EN = 0x1f00,/*Enable all the Fifo module*/ -}; -enum __gmac_reg_fifo_cfg1{ - FIFO_CFG1_SIZE_2K = (0x7ff << 16),/*Fifo size is 2K*/ -}; -enum __gmac_reg_fifo_cfg4{ - FIFO_CFG4_RX_ALL = 0x3ffff,/*receive all frames*/ -}; -enum __gmac_reg_if_ctrl{ - IF_CTRL_SPEED_100 = (1 << 16),/*Interface speed 100 Mbps for MII*/ -}; - - -#define MAX_MDIO_IO_LEN 14 -#define MDIO_REG_WIDTH 4 -#define MDIO_REG_BASE 0x54200 -#define MDIO_REG_TO_OFFSET( __reg_number__)\ - (MDIO_REG_BASE + (MDIO_REG_WIDTH * (__reg_number__))) - -#define MDIO_OWN_TGT 0x01 -#define MDIO_OWN_HST 0x02 -#define MDIO_REG_WRITE_DELAY 5 /* 5 micro seconds */ - -/*************************GMAC Data types*******************************/ -typedef enum __gmac_pkt_type{ - GMAC_PKT_IS_BCAST, - GMAC_PKT_IS_UCAST -}__gmac_pkt_type_t; - -struct __ethhdr{ - unsigned char dst[ETH_ALEN];/*destination eth addr */ - unsigned char src[ETH_ALEN]; /*source ether addr*/ - A_UINT16 etype;/*ether type*/ -}__attribute__((packed)); -/** - * @brief this is will be in big endian format - */ -struct __athhdr{ -#ifdef LITTLE_ENDIAN - A_UINT8 proto:6, - res:2; -#else - A_UINT8 res:2, - proto:6; -#endif - A_UINT8 res_lo; - A_UINT16 res_hi; -}__attribute__((packed)); - -typedef struct __gmac_hdr{ - struct __ethhdr eth; - struct __athhdr ath; - A_UINT16 align_pad;/*pad it for 4 byte boundary*/ -}__attribute__((packed)) __gmac_hdr_t; - -/*********************************GMAC softC************************/ - -typedef struct __gmac_softc{ - __gmac_hdr_t hdr; - A_UINT16 gran; - HIF_CALLBACK sw; -}__gmac_softc_t; - - - -#endif - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_pci.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_pci.h deleted file mode 100755 index 485a659..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_pci.h +++ /dev/null @@ -1,49 +0,0 @@ - -#ifndef __HIF_PCI_H -#define __HIF_PCI_H - -#include -#include - - -#define PCI_MAX_DATA_PKT_LEN 1664 -#define PCI_MAX_CMD_PKT_LEN 512 -#define PCI_MAX_BOOT_DESC 2 - -typedef enum hif_pci_pipe_rx{ - HIF_PCI_PIPE_RX0, /*Normal Priority RX*/ - HIF_PCI_PIPE_RX1, - HIF_PCI_PIPE_RX2, - HIF_PCI_PIPE_RX3, - HIF_PCI_PIPE_RX_MAX -}hif_pci_pipe_rx_t; - -typedef enum hif_pci_pipe_tx{ - HIF_PCI_PIPE_TX0, /*Normal Priority TX*/ - HIF_PCI_PIPE_TX1, - HIF_PCI_PIPE_TX_MAX -}hif_pci_pipe_tx_t; - -typedef struct __pci_softc{ - HIF_CALLBACK sw; -}__pci_softc_t; - -struct hif_pci_api{ - void (*pci_boot_init)(void); - hif_handle_t (*pci_init)(HIF_CONFIG *pConfig); - void (*pci_reset)(void); - void (*pci_enable)(void); - void (*pci_reap_xmitted)(__pci_softc_t *sc, - dma_engine_t eng_no); - void (*pci_reap_recv)(__pci_softc_t *sc, dma_engine_t eng_no); - A_UINT8 (*pci_get_pipe)(dma_engine_t eng); - dma_engine_t (*pci_get_tx_eng)(hif_pci_pipe_tx_t pipe); - dma_engine_t (*pci_get_rx_eng)(hif_pci_pipe_rx_t pipe); - -}; - -void hif_pci_api_install(struct hif_pci_api *apis); -void hif_pci_module_install(struct hif_api *apis); -#endif - - diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_usb.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_usb.h deleted file mode 100755 index addc17e..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/hif_usb.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * @File: mbox_hw.h - * - * @Abstract: mailbox hardware definitions - * - * @Notes: - * * - * Copyright (c) 2008 Atheros Communications Inc. - * All rights reserved. - * - */ - -#ifndef __HIF_USB_H__ -#define __HIF_USB_H__ - -#include - -#include -#include -#include -//#include -//#include - -#define HIF_USB_PIPE_TX 1 -#define HIF_USB_PIPE_RX 2 -#define HIF_USB_PIPE_INTERRUPT 3 -#define HIF_USB_PIPE_COMMAND 4 -#define HIF_USB_PIPE_HP_TX 5 -#define HIF_USB_PIPE_MP_TX 6 - -struct VBUF_QUEUE -{ - VBUF *head; - VBUF *tail; -}; - - /* the mailbox hardware layer context */ -typedef struct _HIF_USB_CONTEXT { - HIF_CALLBACK hifCb; - struct zsDmaQueue dnQ; - struct zsTxDmaQueue upQ; -#if SYSTEM_MODULE_HP_EP5 - struct zsDmaQueue hpdnQ; // high priority -#endif -#if SYSTEM_MODULE_HP_EP6 - struct zsDmaQueue mpdnQ; // medium priority -#endif - //struct VBUF_QUEUE upVbufQ; - VBUF *cmdQueue; - struct VBUF_QUEUE eventBufQ; - - // Left a door for extension the structure - void *pReserved; -} HIF_USB_CONTEXT; - -void hif_usb_module_install(struct hif_api *apis); - -#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/htc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/htc_api.h deleted file mode 100755 index ac053c0..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/htc_api.h +++ /dev/null @@ -1,126 +0,0 @@ -/* - * @File: htc_api.h - * - * @Abstract: host-target communications API - * - * @Notes: - * - * Copyright (c) 2008 Atheros Communications Inc. - * All rights reserved. - * - */ - -#ifndef __HTC_API_H__ -#define __HTC_API_H__ - -#include -#include -//#include -//#include -#include -#include - -#define HTC_HDR_SZ HTC_HDR_LENGTH -#define HTC_BUFSZ_MAX_SEND 2048 - -typedef void (* HTC_SERVICE_ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, adf_nbuf_t, void *ServiceCtx); -typedef void (* HTC_SERVICE_ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, void *ServiceCtx); - -/* HTC service structure : - * the caller is required to allocate storage for the service structure and register the - * structure using HTC_RegisterService() The service must set the following fields: - * ProcessRecvMsg - * ProcessSendBufferComplete - * ProcessConnect - * ServiceID - * MaxSvcMsgSize (for message validation) - * */ -typedef struct _HTC_SERVICE { - struct _HTC_SERVICE *pNext; - /* Callback for processing receive messages. HTC calls this callback whenever a - * message arrives on the endpoint assigned to this service. - * HTC_BUFFER is a chain of buffers containing a full application message. - * HTC_BUFFER->buffer points to the start of the msg buffer (past the HTC header) */ - //void (* ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, HTC_BUFFER *); - void (* ProcessRecvMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, adf_nbuf_t, void *ServiceCtx); - /* callback to process completed send buffers */ - //void (* ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, HTC_BUFFER *); - void (* ProcessSendBufferComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t, void *ServiceCtx); - /* optional callback when a connection request occurs. - * The EndpointID is the assigned endpoint, the callback returns a connect - * response status code to allow or disallow the connection. - * pDataIn points to the optional meta data supplied in the connection request - * pDataOut points to a buffer to send back meta data - * If no callback is supplied, HTC assumes the connect is allowed */ - A_UINT8 (* ProcessConnect)(struct _HTC_SERVICE *pService, - HTC_ENDPOINT_ID EndpointID, - A_UINT8 *pDataIn, - int LengthIn, - A_UINT8 *pDataOut, - int *pLengthOut); - A_UINT16 ServiceID; /* service ID to match connection requests */ - A_UINT16 ServiceFlags; /* service flags */ - A_UINT16 MaxSvcMsgSize; /* maximum length of service-specific messages exchanged on the endpoint */ - A_UINT16 TrailerSpcCheckLimit; /* amount of space in each send buffer that HTC can check for trailer - data. This should be set to the smallest HTC buffer that can be sent - through the service. The service can disable trailer data insertion - by setting this value to 0. */ - void *ServiceCtx; -} HTC_SERVICE; - -#define HTC_SERVICE_FLAGS_CONNECTED (1 << 0) /* service has at least 1 connection */ - -#define IS_SERVICE_CONNECTED(s) ((s)->ServiceFlags & HTC_SERVICE_FLAGS_CONNECTED) - - /* configuration settings for the WMI service */ -typedef struct _HTC_CONFIG { - int CreditSize; /* */ - int CreditNumber; - //int ControlDownLinkPipeID; - //int ControlUpLinkPipeID; - adf_os_handle_t OSHandle; - hif_handle_t HIFHandle; - pool_handle_t PoolHandle; -} HTC_CONFIG; - -typedef struct _HTC_BUF_CONTEXT { - A_UINT8 end_point; - A_UINT8 htc_flags; /* htc flags (used by HTC layer only) */ -} HTC_BUF_CONTEXT; - -typedef void* htc_handle_t; - -/* - * setup complete function, supplied by HTC caller at HTC_init time. - * HTC calls this function after the host has indicated that the service connection - * phase is complete. - * - */ -typedef void (* HTC_SETUP_COMPLETE_CB)(void); - -struct htc_apis { - htc_handle_t (* _HTC_Init)(HTC_SETUP_COMPLETE_CB, HTC_CONFIG *pConfig); - void (* _HTC_Shutdown)(htc_handle_t); - void (* _HTC_RegisterService)(htc_handle_t, HTC_SERVICE *); - void (* _HTC_Ready)(htc_handle_t); - void (* _HTC_ReturnBuffers)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t); - void (* _HTC_ReturnBuffersList)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_queue_t); - void (* _HTC_SendMsg)(htc_handle_t handle, HTC_ENDPOINT_ID EndpointID, adf_nbuf_t); - int (* _HTC_GetReservedHeadroom)(htc_handle_t handle); - - //void (* _HTC_PauseRecv)(HTC_ENDPOINT_ID EndpointID); - //void (* _HTC_ResumeRecv)(HTC_ENDPOINT_ID EndpointID); - //void (* _HTC_AddBufferResources)(int buffers); - - /* These APIs below are for patch purpose only */ - void (*_HTC_MsgRecvHandler)(adf_nbuf_t hdr_buf, adf_nbuf_t buf, void *context); - void (*_HTC_SendDoneHandler)(adf_nbuf_t buf, void *context); - void (*_HTC_ControlSvcProcessMsg)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t hdr_buf, adf_nbuf_t buf, void *arg); - void (*_HTC_ControlSvcProcessSendComplete)(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t pBuffers, void *arg); - - void *pReserved; /* for expansion if need be */ -}; - -extern void htc_module_install(struct htc_apis *pAPIs); - -#endif /* _HTC_API_H__ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/intr_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/intr_api.h deleted file mode 100755 index 7481f6b..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/intr_api.h +++ /dev/null @@ -1,184 +0,0 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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. - */ -#ifndef __INTR_API_H__ -#define __INTR_API_H__ - -/* - * Interrupt handler, for application-managed interrupts. - * When an interrupt occurs, it is automatically disabled. - * See A_WMAC_INTR_ATTACH() and A_MBOX_INTR_ATTACH(). - * - * If a handler returns A_HANDLER_DONE, the interrupt is - * re-enabled. The OS calls the handler next time service - * is required. This is the normal case for a handler. - * - * If a handler returns A_HANDLER_YIELD, the interrupt - * remains masked. The handler is called again when - * it is "convenient". This gives the OS an opportunity - * to run other code/handlers. A handler should return - * A_HANDLER_YIELD if it might dominate the CPU for too - * long. - * - * If a handler returns A_HANDLER_NOENABLE, the interrupt - * remains disabled. It is up to the application to re-enable - * the interrupt (via A_*_INTR_UNMASK) when it's appropriate. - * - * Note that many combinations of interrupt functions and - * interrupt vectors are NOT supported: Callers should use - * only the macros defined in cmnos_api.h to access the - * interrupt API. - */ -#include "cmnos_api.h" - -typedef uint32_t A_old_intr_t; - -////////////////////////////////////////////////////////////////// -// this is copied from mercury/cmnos_xtensa.h -/* - * These are CMNOS interrupt manifest constants. - * They have specially-chosen values that align with hardware and or - * operating system values (see cmnos_interrupt_info). - */ -#if defined(__XTENSA__) -/* - * Enumeration of low and medium priority interrupt numbers - * which match the CPU hardware configuration: - */ - -/* XTensa Level 1 interrupt */ -#define A_INUM_SOFTWARE 0 /* currently unused */ - -/* XTensa Level2 interrupts */ -#define A_INUM_XTTIMER 1 /* currently unused */ - -#define A_INUM_TBD_0 2 /* TBD */ -#define A_INUM_CPU_WDT 3 /* RST_CPU watchodg interrupt */ -#define A_INUM_GMAC_DMA 4 /* GMAC DMA interrupt */ -#define A_INUM_GMAC_MDIO 5 /* GMAC MDIO interrupt */ -#define A_INUM_HOST_DMA 6 /* HOST DMA */ -#define A_INUM_CPU_GEN_TIMER 7 /* CPU general timer */ -#define A_INUM_TBD_8 8 /* TBD */ -#define A_INUM_TBD_9 9 /* TBD */ -#define A_INUM_USB_CTRL 10 /* USB core control */ -#define A_INUM_USB_DMA 11 /* USB DMA */ -#define A_INUM_TBD_12 12 /* TBD */ -#define A_INUM_TBD_13 13 /* TBD */ -#define A_INUM_EMUX_CPU 14 /* EMUX CPU */ -#define A_INUM_GPIO_CPU 15 /* GPIO CPU interrupt */ -#define A_INUM_TBD_16 16 /* TBD */ -#define A_INUM_PCIE_CPU 17 /* CPU PCIE interrupt */ -#define A_INUM_RST_CPU_NMI 18 /* RST CPU nmi interrupt */ - -/* Number of interrupts that map directly into CPU/hal interrupt bits. */ -#define NUM_DIRECT_INTR 19 - -#endif -////////////////////////////////////////////////////////////////// - -#define CMNOS_IMASK_XTTIMER (1< - -#define MAX_BUF_CTX_LEN 20 - -typedef struct _VBUF -{ - VDESC *desc_list; - struct _VBUF *next_buf; - A_UINT16 buf_length; - A_UINT8 reserved[2]; - A_UINT8 ctx[MAX_BUF_CTX_LEN]; - //A_UINT8 end_point; - //A_UINT8 reserved[1]; -} VBUF; - -#define VBUF_GET_DATA_ADDR(vbuf) (vbuf->desc_list->buf_addr + vbuf->desc_list->data_offset) - -/* hardware API table structure (API descriptions below) */ -struct vbuf_api { - void (*_init)(int nBuf); - VBUF* (*_alloc_vbuf)(void); - VBUF* (*_alloc_vbuf_with_size)(int size, int reserve); - void (*_free_vbuf)(VBUF *buf); - - /* room to expand this table by another table */ - void *pReserved; -}; - -extern void vbuf_module_install(struct vbuf_api *apis); - -#endif /* #ifndef _HIF_API_H */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/vdesc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/vdesc_api.h deleted file mode 100755 index 631f134..0000000 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/vdesc_api.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * @File: VBUF_api.h - * - * @Abstract: Host Interface api - * - * @Notes: - * - * Copyright (c) 2008 Atheros Communications Inc. - * All rights reserved. - * - */ - -#ifndef _VDESC_API_H -#define _VDESC_API_H - -//#define VDESC_CONTROL_BUF_HDR (1 << 6) /* the buffer was manipulated and a header added */ - -#define MAX_HW_DESC_SIZE 20 - -typedef struct _VDESC -{ - struct _VDESC *next_desc; - A_UINT8 *buf_addr; - A_UINT16 buf_size; - A_UINT16 data_offset; - A_UINT16 data_size; - A_UINT16 control; - A_UINT8 hw_desc_buf[MAX_HW_DESC_SIZE]; -} VDESC; - -//#define VDESC_HW_TO_VDESC(hwdesc) ((VDESC *)(((A_UINT32 *)hwdesc - 4))) -#define VDESC_HW_TO_VDESC(hwdesc) ((VDESC *)(((A_UINT32 *)hwdesc - 4))) - -struct vdesc_api { - void (*_init)(int nDesc); - VDESC* (*_alloc_vdesc)(); - A_UINT8* (*_get_hw_desc)(VDESC *desc); - void (*_swap_vdesc)(VDESC *dest, VDESC *src); - //void (*_free_vdesc)(void); - /* room to expand this table by another table */ - void *pReserved; -}; - -extern void vdesc_module_install(struct vdesc_api *apis); - -#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_regdump.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie_regdump.h similarity index 97% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_regdump.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie_regdump.h index 5370727..5622d8b 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/magpie_regdump.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie_regdump.h @@ -64,7 +64,7 @@ struct XTensa_exception_frame_s { } wb[MAGPIE_REGDUMP_FRAMES]; }; -typedef struct XTensa_exception_frame_s CPU_exception_frame_t; +typedef struct XTensa_exception_frame_s CPU_exception_frame_t; #define RD_SIZE sizeof(CPU_exception_frame_t) #endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/mem_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/mem_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/mem_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/mem_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/misc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/misc_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/misc_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/misc_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/osapi.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/osapi.h index 1959fdb..897b580 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/osapi.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/osapi.h @@ -139,7 +139,7 @@ /* * Intentional Misaligned Load special "addresses". - * Loads from misaligned addresses have special semantics, + * Loads from misaligned addresses have special semantics, * handled by the OS, depending on the lower nibble. * * NOTE1: word-aligned nibbles will not cause any exception, @@ -165,7 +165,7 @@ #endif #ifdef HTC_TRACE_MBOX_PAUSE -#define A_ASSERT( __bool ) +#define A_ASSERT( __bool ) #else /* * Code space dedicated to asserts is minimal. We use an Intentional diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/regdump.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/regdump.h similarity index 99% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/regdump.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/regdump.h index 7b570a4..b5cd6ab 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/regdump.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/regdump.h @@ -44,7 +44,7 @@ * XTensa CPU state * This must match the state saved by the target exception handler. */ - + #define RD_SIZE sizeof(CPU_exception_frame_t) /* diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/romp_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/romp_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/romp_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/romp_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/string_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/string_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/string_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/string_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/tasklet_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/tasklet_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/tasklet_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/tasklet_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/timer_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/timer_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/timer_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/timer_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/uart_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/uart_api.h similarity index 99% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/uart_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/uart_api.h index 3492a1d..74847e1 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/uart_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/uart_api.h @@ -326,7 +326,7 @@ struct uart_api { uint16_t (*_uart_char_get)(uint8_t* ch); void (*_uart_str_out)(uint8_t* str); void (*_uart_task)(void); - uint32_t (*_uart_status)(void); + uint32_t (*_uart_status)(void); void (*_uart_config)(uint16_t flag); void (*_uart_hwinit)(uint32_t freq, uint32_t baud); //void (*_uart_config)(uint8_t cmd, void *pData); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_api.h index c3ca296..8b612ad 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_api.h @@ -46,7 +46,7 @@ struct usb_api { // ep0 operation void (*_usb_ep0_setup)(void); - + void (*_usb_ep0_tx)(void); void (*_usb_ep0_rx)(void); @@ -59,16 +59,16 @@ struct usb_api { BOOLEAN (*_usb_set_configuration)(void); // standard/vendor command - BOOLEAN (*_usb_standard_cmd)(void); + BOOLEAN (*_usb_standard_cmd)(void); void (*_usb_vendor_cmd)(void); void (*_usb_power_off)(void); void (*_usb_reset_fifo)(void); void (*_usb_gen_wdt)(void); void (*_usb_jump_boot)(void); - + BOOLEAN (*_usb_clr_feature)(void); - BOOLEAN (*_usb_set_feature)(void); + BOOLEAN (*_usb_set_feature)(void); BOOLEAN (*_usb_set_address)(void); BOOLEAN (*_usb_get_descriptor)(void); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_defs.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_defs.h index 2d0af69..ce2e24e 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_defs.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_defs.h @@ -137,7 +137,7 @@ #define ZM_ADDR_CONV 0x0 #define ZM_CBUS_FIFO_SIZE_REG (ZM_CBUS_FIFO_SIZE_OFFSET^ZM_ADDR_CONV) - + #define ZM_CBUS_CTRL_REG (cSOC_USB_OFST+cSOC_CBUS_CTL_OFFSET^ZM_ADDR_CONV) #define ZM_MAIN_CTRL_REG (ZM_MAIN_CTRL_OFFSET^ZM_ADDR_CONV) @@ -179,7 +179,7 @@ #define ZM_INTR_SOURCE_2_REG (ZM_INTR_SOURCE_2_OFFSET^ZM_ADDR_CONV) #define ZM_INTR_SOURCE_3_REG (ZM_INTR_SOURCE_3_OFFSET^ZM_ADDR_CONV) - + #define ZM_INTR_SOURCE_4_REG (ZM_INTR_SOURCE_4_OFFSET^ZM_ADDR_CONV) #define ZM_INTR_SOURCE_5_REG (ZM_INTR_SOURCE_5_OFFSET^ZM_ADDR_CONV) @@ -239,7 +239,7 @@ USB_BYTE_REG_READ(ZM_MAIN_CTRL_OFFSET)&~BIT0) #define mUsbRmWkupSet() USB_BYTE_REG_WRITE(ZM_MAIN_CTRL_OFFSET, \ USB_BYTE_REG_READ(ZM_MAIN_CTRL_OFFSET)|BIT0) - + #define mUsbGlobIntEnable() USB_BYTE_REG_WRITE(ZM_MAIN_CTRL_OFFSET, \ USB_BYTE_REG_READ(ZM_MAIN_CTRL_OFFSET)|BIT2) @@ -296,7 +296,7 @@ #if (HS_C1_INTERFACE_NUMBER >= 1) // Interface 0 #define HS_C1_I0_ALT_NUMBER 0X01 - #if (HS_C1_I0_ALT_NUMBER >= 1) + #if (HS_C1_I0_ALT_NUMBER >= 1) // AlternateSetting 0X00 #define HS_C1_I0_A0_bInterfaceNumber 0X00 #define HS_C1_I0_A0_bAlternateSetting 0X00 @@ -850,7 +850,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define USB_ENABLE_UP_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT0)) // upstream DMA enable - + #define USB_DISABLE_UP_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT0))) // upstream DMA disable @@ -875,10 +875,10 @@ /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// #define USB_ENABLE_HP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ - (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT8)) // hp downstream DMA enable + (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT8)) // hp downstream DMA enable #define USB_DISABLE_HP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ - (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT8))) // hp downstream DMA disable + (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT8))) // hp downstream DMA disable #define USB_HP_DN_PACKET_MODE() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT7))) // hpQ packet mode @@ -887,9 +887,9 @@ (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT7)) // hpQ stream mode /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -#define USB_ENABLE_MP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT9)) // mp downstream DMA enable +#define USB_ENABLE_MP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|BIT9)) // mp downstream DMA enable -#define USB_DISABLE_MP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT9))) // mp downstream DMA disable +#define USB_DISABLE_MP_DN_DMA() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT9))) // mp downstream DMA disable #define USB_MP_DN_PACKET_MODE() USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)&(~BIT10))) // hpQ packet mode @@ -931,7 +931,7 @@ USB_ENABLE_HP_DN_DMA(); #define USB_STREAM_HOST_BUF_SIZE(size) USB_WORD_REG_WRITE(ZM_SOC_USB_MODE_CTRL_OFFSET, \ - (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|(size))); + (USB_WORD_REG_READ(ZM_SOC_USB_MODE_CTRL_OFFSET)|(size))); #define USB_STREAM_TIMEOUT(time_cnt) USB_WORD_REG_WRITE(ZM_SOC_USB_TIME_CTRL_OFFSET, time_cnt); // set stream mode timeout critirea #define USB_STREAM_AGG_PKT_CNT(cnt) USB_WORD_REG_WRITE(ZM_SOC_USB_MAX_AGGREGATE_OFFSET, cnt); // set stream mode packet buffer critirea diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/usb_table.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_table.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/usb_table.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usb_table.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usbfifo_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usbfifo_api.h index 9ec5398..08f85af 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usbfifo_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/usbfifo_api.h @@ -34,9 +34,9 @@ */ /* * @File: HIF_api.h - * + * * @Abstract: Host Interface api - * + * * @Notes: */ @@ -49,12 +49,12 @@ typedef struct _USB_FIFO_CONFIG { /* callback to get the buf for receiving commands from USB FIFO */ VBUF* (*get_command_buf)(void); /* callback when receiving a command */ - void (*recv_command)(VBUF *cmd); + void (*recv_command)(VBUF *cmd); /* callback to get the buf for event to send to the host */ VBUF* (*get_event_buf)(void); /* callback to indicate the event has been sent to the host */ void (*send_event_done)(VBUF *buf); - + /* context used for all callbacks */ //void *context; } USB_FIFO_CONFIG; @@ -65,7 +65,7 @@ struct usbfifo_api { void (*_enable_event_isr)(void); /* room to expand this table by another table */ - void *pReserved; + void *pReserved; }; extern void usbfifo_module_install(struct usbfifo_api *apis); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vbuf_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vbuf_api.h similarity index 95% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vbuf_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vbuf_api.h index d818301..c0f5006 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vbuf_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vbuf_api.h @@ -34,9 +34,9 @@ */ /* * @File: VBUF_api.h - * + * * @Abstract: Host Interface api - * + * * @Notes: */ @@ -50,10 +50,10 @@ typedef struct _VBUF { VDESC *desc_list; - struct _VBUF *next_buf; - A_UINT16 buf_length; + struct _VBUF *next_buf; + A_UINT16 buf_length; A_UINT8 reserved[2]; - A_UINT8 ctx[MAX_BUF_CTX_LEN]; + A_UINT8 ctx[MAX_BUF_CTX_LEN]; } VBUF; #define VBUF_GET_DATA_ADDR(vbuf) (vbuf->desc_list->buf_addr + vbuf->desc_list->data_offset) @@ -66,7 +66,7 @@ struct vbuf_api { void (*_free_vbuf)(VBUF *buf); /* room to expand this table by another table */ - void *pReserved; + void *pReserved; }; extern void vbuf_module_install(struct vbuf_api *apis); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vdesc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vdesc_api.h similarity index 96% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vdesc_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vdesc_api.h index 3876889..8929e1a 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/vdesc_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/vdesc_api.h @@ -34,9 +34,9 @@ */ /* * @File: VBUF_api.h - * + * * @Abstract: Host Interface api - * + * * @Notes: */ @@ -53,7 +53,7 @@ typedef struct _VDESC A_UINT16 data_offset; A_UINT16 data_size; A_UINT16 control; - A_UINT8 hw_desc_buf[MAX_HW_DESC_SIZE]; + A_UINT8 hw_desc_buf[MAX_HW_DESC_SIZE]; } VDESC; #define VDESC_HW_TO_VDESC(hwdesc) ((VDESC *)(((A_UINT32 *)hwdesc - 4))) @@ -65,9 +65,9 @@ struct vdesc_api { void (*_swap_vdesc)(VDESC *dest, VDESC *src); /* room to expand this table by another table */ - void *pReserved; + void *pReserved; }; extern void vdesc_module_install(struct vdesc_api *apis); -#endif +#endif diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/wdt_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/wdt_api.h similarity index 100% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/k2/wdt_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/inc/wdt_api.h diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/config/core.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/config/core.h index 01bcfdd..ab07ad1 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/config/core.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/config/core.h @@ -1,3 +1,25 @@ +/* + * 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. + */ /* * xtensa/config/core.h -- HAL definitions dependent on CORE configuration * @@ -9,16 +31,6 @@ * It is normal for the HAL library source itself to include this file. */ -/* - * Copyright (c) 2005-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 XTENSA_CONFIG_CORE_H #define XTENSA_CONFIG_CORE_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/corebits.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/corebits.h index 9fbb994..aeaa723 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/corebits.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/corebits.h @@ -1,19 +1,27 @@ /* - * xtensa/corebits.h - Xtensa Special Register field positions, masks, values. + * 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. * - * (In previous releases, these were defined in specreg.h, a generated file. - * This file is not generated, ie. it is processor configuration independent.) + * 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. */ - -/* $Id: //depot/rel/BadgerPass/Xtensa/OS/include/xtensa/corebits.h#3 $ */ - /* - * Copyright (c) 2005-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. + * xtensa/corebits.h - Xtensa Special Register field positions, masks, values. */ #ifndef XTENSA_COREBITS_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/hal.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/hal.h index 5fa9c10..ce34103 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/hal.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/hal.h @@ -1,3 +1,26 @@ +/* + * 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. + */ + /* xtensa/hal.h -- contains a definition of the Core HAL interface @@ -10,16 +33,6 @@ Certain definitions, however, are release/version-specific -- such as the XTHAL_RELEASE_xxx macros (or additions made in later versions). - - - $Id: //depot/rel/BadgerPass/Xtensa/OS/target-os-src/hal.h.tpp#2 $ - - Copyright (c) 1999-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 XTENSA_HAL_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/xtruntime.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/xtruntime.h index 1c9173b..69f222b 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/xtruntime.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa-elf/xtensa/xtruntime.h @@ -1,12 +1,24 @@ /* - * xtruntime.h -- general C definitions for single-threaded run-time + * Copyright (c) 2013 Tensilica Inc. * - * Copyright (c) 2002-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. + * 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 diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-isa.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-isa.h index ccf9b2d..fd258a6 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-isa.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-isa.h @@ -1,19 +1,30 @@ /* - * xtensa/config/core-isa.h -- HAL definitions that are dependent on Xtensa - * processor CORE configuration + * Copyright (c) 2013 Tensilica Inc. * - * See , which includes this file, for more details. + * 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 processor core configuration information. + * xtensa/config/core-isa.h -- HAL definitions that are dependent on Xtensa + * processor CORE configuration * - * Customer ID=4748; Build=0x2230f; Copyright (c) 1999-2008 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. + * See , which includes this file, for more details. */ #ifndef _XTENSA_CORE_CONFIGURATION_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-matmap.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-matmap.h index f0acaca..b30d1b3 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-matmap.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/core-matmap.h @@ -1,3 +1,26 @@ +/* + * 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. + */ + /* * xtensa/config/core-matmap.h -- Memory access and translation mapping * parameters (CHAL) of the Xtensa processor core configuration. @@ -22,15 +45,6 @@ * XCHAL_HW_VERSION_MINOR */ -/* - * Customer ID=4748; Build=0x2230f; Copyright (c) 1999-2008 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 XTENSA_CONFIG_CORE_MATMAP_H #define XTENSA_CONFIG_CORE_MATMAP_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/specreg.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/specreg.h index f342a9d..9eb3ac0 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/specreg.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/specreg.h @@ -1,16 +1,28 @@ /* - * Xtensa Special Register symbolic names + * 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. */ -/* $Id: //depot/rel/BadgerPass/Xtensa/SWConfig/hal/specreg.h.tpp#1 $ */ - /* - * Customer ID=4748; Build=0x2230f; Copyright (c) 1998-2002 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. + * Xtensa Special Register symbolic names */ #ifndef XTENSA_SPECREG_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/tie.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/tie.h index b53910c..eb6b551 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/tie.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/xtensa/config/tie.h @@ -1,3 +1,25 @@ +/* + * 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. + */ /* * tie.h -- compile-time HAL definitions dependent on CORE & TIE configuration * @@ -8,13 +30,6 @@ * 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=4748; Build=0x2230f; Copyright (C) 1999-2008 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 _XTENSA_CORE_TIE_H diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.c index 8960199..8fa9c8b 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.c @@ -32,6 +32,11 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include +#include +#include + #include "dt_defs.h" #include "athos_api.h" @@ -41,7 +46,7 @@ #include "adf_os_io.h" #include "init.h" -#include +#include "app_start.h" // @TODO: Should define the memory region later~ #define ALLOCRAM_START ( ((unsigned int)&_fw_image_end) + 4) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/printf_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.h old mode 100755 new mode 100644 similarity index 81% rename from ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/printf_api.h rename to ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.h index 00bae4a..5b91a72 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/inc/magpie/printf_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/app_start.h @@ -1,5 +1,7 @@ /* * Copyright (c) 2013 Qualcomm Atheros, Inc. + * Copyright (c) 2016 Oleksij Rempel + * * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,18 +34,14 @@ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef __PRINTF_API_H__ -#define __PRINTF_API_H__ - -struct printf_api { - void (* _printf_init)(void); - int (* _printf)(const char * fmt, ...); -}; - -/* NB: The printf module requires the serial module. */ -void cmnos_printf_module_install(struct printf_api *tbl); -int cmnos_printf(const char *fmt, ...); +#ifndef _ATH_APP_START_H_ +#define _ATH_APP_START_H_ +#define __noreturn __attribute__((noreturn)) +#define __section(s) __attribute__((section("." # s))) +#define __visible __attribute__((externally_visible)) +void __section(boot) __noreturn __visible app_start(void); +void Magpie_init(void); -#endif /* __PRINTF_API_H__ */ +#endif /* _ATH_APP_START_H_ */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.c index 87a7cab..7484c05 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.c @@ -34,6 +34,9 @@ */ #if defined(_RAM_) +#include +#include + #include "athos_api.h" #include "usb_defs.h" @@ -65,8 +68,6 @@ uint32_t idle_cnt = 0; int (* save_cmnos_printf)(const char * fmt, ...); #endif -#define ATH_DATE_STRING __DATE__" "__TIME__ - static void idle_task(); #if defined(PROJECT_MAGPIE) @@ -108,7 +109,7 @@ change_magpie_clk(void) A_DELAY_USECS(60); // wait for stable - /* CPU & AHB settings */ + /* CPU & AHB settings */ /* * AHB clk = ( CPU clk / 2 ) */ @@ -192,7 +193,7 @@ LOCAL void zfGenExceptionEvent(uint32_t exccause, uint32_t pc, uint32_t badvaddr iowrite32_usb(ZM_EP3_DATA_OFFSET, exccause); iowrite32_usb(ZM_EP3_DATA_OFFSET, pc); iowrite32_usb(ZM_EP3_DATA_OFFSET, badvaddr); - + mUSB_EP3_XFER_DONE(); } @@ -236,14 +237,14 @@ AR6002_fatal_exception_handler_patch(CPU_exception_frame_t *exc_frame) #endif A_ASSFAIL(&dump); -#if defined(_ROM_) +#if defined(_ROM_) A_WDT_ENABLE(); #endif while(1) ; } -void +void HTCControlSvcProcessMsg_patch(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t hdr_buf, adf_nbuf_t pBuffers, void *arg) { @@ -264,7 +265,7 @@ HTCControlSvcProcessMsg_patch(HTC_ENDPOINT_ID EndpointID, adf_nbuf_t hdr_buf, } /* Patch callback for check the endpoint ID is correct or not */ -void +void HTCMsgRecvHandler_patch(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *context) { int eid; @@ -272,27 +273,27 @@ HTCMsgRecvHandler_patch(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *context) a_uint32_t anblen; adf_nbuf_t tmp_nbuf; HTC_FRAME_HDR *pHTCHdr; - + if (hdr_buf == ADF_NBUF_NULL) { /* HTC hdr is not in the hdr_buf */ tmp_nbuf = buffer; } else { tmp_nbuf = hdr_buf; } - - adf_nbuf_peek_header(tmp_nbuf, &anbdata, &anblen); - pHTCHdr = (HTC_FRAME_HDR *)anbdata; - + + adf_nbuf_peek_header(tmp_nbuf, &anbdata, &anblen); + pHTCHdr = (HTC_FRAME_HDR *)anbdata; + eid = pHTCHdr->EndpointID; - + if ((eid != 0) && (htc_complete_setup == 0)) { A_PRINTF("\nHTC Hdr EndpointID = %d, anblen = %d\n", pHTCHdr->EndpointID, anblen); A_PRINTF("HTC Hder : %2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x\n", - *anbdata, *(anbdata+1), *(anbdata+2), *(anbdata+3), + *anbdata, *(anbdata+1), *(anbdata+2), *(anbdata+3), *(anbdata+4), *(anbdata+5), *(anbdata+6), *(anbdata+7), - *(anbdata+8), *(anbdata+9), *(anbdata+10), *(anbdata+11)); + *(anbdata+8), *(anbdata+9), *(anbdata+10), *(anbdata+11)); A_PRINTF("init_htc_handle = 0x%8x\n", init_htc_handle); - + if (pHTCHdr->EndpointID == 1) { A_PRINTF("Return WMI Command buffer\n"); HTC_ReturnBuffers(init_htc_handle, 1, tmp_nbuf); @@ -304,8 +305,8 @@ HTCMsgRecvHandler_patch(adf_nbuf_t hdr_buf, adf_nbuf_t buffer, void *context) } else { if ((pHTCHdr->EndpointID < 0) || (pHTCHdr->EndpointID >= ENDPOINT_MAX)) { A_PRINTF("HTC Hdr EndpointID = %d, anblen = %d\n", pHTCHdr->EndpointID, anblen); - A_PRINTF("HTC Hder : %2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x\n", - *anbdata, *(anbdata+1), *(anbdata+2), *(anbdata+3), + A_PRINTF("HTC Hder : %2x-%2x-%2x-%2x-%2x-%2x-%2x-%2x\n", + *anbdata, *(anbdata+1), *(anbdata+2), *(anbdata+3), *(anbdata+4), *(anbdata+5), *(anbdata+6), *(anbdata+7)); if (anblen > 64) { diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.h index 89ab2a9..342f64b 100644 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/init.h @@ -36,8 +36,8 @@ #define ALLOCRAM_START ( ((unsigned int)&_fw_image_end) + 4) #define ALLOCRAM_SIZE ( SYS_RAM_SZIE - ( ALLOCRAM_START - SYS_D_RAM_REGION_0_BASE) - SYS_D_RAM_STACK_SIZE) +#include "app_start.h" #include "regdump.h" -#include #define SBOOT_PATTERN 0x5342 #define IS_FLASHBOOT() (((DEBUG_SYSTEM_STATE&~(0x0000ffff))>>16==SBOOT_PATTERN)) @@ -66,7 +66,11 @@ extern void _fw_usb_reset_fifo(void); #endif +#if defined(PROJECT_MAGPIE) +void change_magpie_clk(void); +#endif void fatal_exception_func(); void init_mem(); void __noreturn wlan_task(); +void reset_EP4_FIFO(void); diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/magpie.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/magpie.c index 2ed5e8f..ecf506c 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/init/magpie.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/init/magpie.c @@ -33,6 +33,7 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "sys_cfg.h" +#include "app_start.h" #if defined(_RAM_) @@ -96,7 +97,7 @@ void _wmi_cmd_rsp(void *pContext, WMI_COMMAND_ID cmd_id, A_UINT16 SeqNo, A_UINT8 *pData; netbuf = WMI_AllocEvent(pContext, WMI_EVT_CLASS_CMD_REPLY, sizeof(WMI_CMD_HDR) + Length); - + if (netbuf == ADF_NBUF_NULL) { adf_os_print("%s: buffer allocation for event_id %x failed!\n", __FUNCTION__, cmd_id); adf_os_assert(0); @@ -115,10 +116,10 @@ void _wmi_cmd_rsp(void *pContext, WMI_COMMAND_ID cmd_id, A_UINT16 SeqNo, void Magpie_init(void) { A_PRINTF("[+++Magpie_init]\n\r"); - + A_PRINTF("[+++VBUF_init(%d)]\n\r", MAX_BUF_NUM); VBUF_init(MAX_BUF_NUM); - + A_PRINTF("[+++VBUF_init(%d)]\n\r", MAX_DESC_NUM); VDESC_init(MAX_DESC_NUM); @@ -136,7 +137,7 @@ void Magpie_init(void) #if SYSTEM_MODULE_HP_EP6 HIF_config_pipe(hif_handle, HIF_USB_PIPE_MP_TX, 3); #endif - + A_PRINTF("[+++HIF_init(0)]\n\r"); HIF_start(hif_handle); @@ -171,7 +172,7 @@ void Magpie_init(void) WMI_RegisterDispatchTable(Magpie_Sys_Commands_Tbl.pContext, &Magpie_Sys_Commands_Tbl); #endif/* ZM_FM_LOOPBACK == 0 */ -#endif /* MAGPIE_ENABLE_WLAN */ +#endif /* MAGPIE_ENABLE_WLAN */ } #endif /* #if MAGPIE==1 */ diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/HIF_usb_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/HIF_usb_patch.c index f931bb3..c90f318 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/HIF_usb_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/HIF_usb_patch.c @@ -1,104 +1,105 @@ -/* - * Copyright (c) 2013 Qualcomm Atheros, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted (subject to the limitations in the - * disclaimer below) 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 Qualcomm Atheros nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE - * GRANTED BY THIS LICENSE. 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 "sys_cfg.h" -#include "dt_defs.h" -#include "reg_defs.h" - -#include -#include -#include -#include -#include -#include - -#include "hif_usb.h" - -/* - * -- support more than 64 bytes command on ep4 -- - */ -int _HIFusb_get_max_msg_len_patch(hif_handle_t handle, int pipe) -{ - switch(pipe) { - case HIF_USB_PIPE_INTERRUPT: - case HIF_USB_PIPE_COMMAND: - return 512; - - default: - return 1600; - } -} - -/* - * -- move the usb_task to here -- - */ -void _HIFusb_isr_handler_patch(hif_handle_t h) -{ - A_USB_FW_TASK(); - - _HIFusb_isr_handler(); -} - - -/* - * -- reset usb dma -- - * - * - make sure DMA_START bit0 is zero - * - update DMA_START bit4 to 1 - * - update DESC_START_ADDR - * - update DMA_START bit 0 - */ -void _HIFusb_start_patch(hif_handle_t handle) -{ - MAGPIE_REG_USB_TX0_DMA_START = 0x0; - MAGPIE_REG_USB_RX0_DMA_START = 0x0; - MAGPIE_REG_USB_RX1_DMA_START = 0x0; - MAGPIE_REG_USB_RX2_DMA_START = 0x0; - - while( 1 ) - { - if(!MAGPIE_REG_USB_TX0_DMA_START && - !MAGPIE_REG_USB_RX0_DMA_START && - !MAGPIE_REG_USB_RX1_DMA_START && - !MAGPIE_REG_USB_RX2_DMA_START ) - { - MAGPIE_REG_USB_TX0_DMA_START = MAGPIE_REG_USB_TX0_DMA_START|BIT4; - MAGPIE_REG_USB_RX0_DMA_START = MAGPIE_REG_USB_RX0_DMA_START|BIT4; - MAGPIE_REG_USB_RX1_DMA_START = MAGPIE_REG_USB_RX1_DMA_START|BIT4; - MAGPIE_REG_USB_RX2_DMA_START = MAGPIE_REG_USB_RX2_DMA_START|BIT4; - break; - } - } - _HIFusb_start(); -} +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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 "sys_cfg.h" +#include "dt_defs.h" +#include "reg_defs.h" + +#include +#include +#include +#include +#include +#include +#include + +#include "hif_usb.h" + +/* + * -- support more than 64 bytes command on ep4 -- + */ +int _HIFusb_get_max_msg_len_patch(hif_handle_t handle, int pipe) +{ + switch(pipe) { + case HIF_USB_PIPE_INTERRUPT: + case HIF_USB_PIPE_COMMAND: + return 512; + + default: + return 1600; + } +} + +/* + * -- move the usb_task to here -- + */ +void _HIFusb_isr_handler_patch(hif_handle_t h) +{ + A_USB_FW_TASK(); + + _HIFusb_isr_handler(h); +} + + +/* + * -- reset usb dma -- + * + * - make sure DMA_START bit0 is zero + * - update DMA_START bit4 to 1 + * - update DESC_START_ADDR + * - update DMA_START bit 0 + */ +void _HIFusb_start_patch(hif_handle_t handle) +{ + MAGPIE_REG_USB_TX0_DMA_START = 0x0; + MAGPIE_REG_USB_RX0_DMA_START = 0x0; + MAGPIE_REG_USB_RX1_DMA_START = 0x0; + MAGPIE_REG_USB_RX2_DMA_START = 0x0; + + while( 1 ) + { + if(!MAGPIE_REG_USB_TX0_DMA_START && + !MAGPIE_REG_USB_RX0_DMA_START && + !MAGPIE_REG_USB_RX1_DMA_START && + !MAGPIE_REG_USB_RX2_DMA_START ) + { + MAGPIE_REG_USB_TX0_DMA_START = MAGPIE_REG_USB_TX0_DMA_START|BIT4; + MAGPIE_REG_USB_RX0_DMA_START = MAGPIE_REG_USB_RX0_DMA_START|BIT4; + MAGPIE_REG_USB_RX1_DMA_START = MAGPIE_REG_USB_RX1_DMA_START|BIT4; + MAGPIE_REG_USB_RX2_DMA_START = MAGPIE_REG_USB_RX2_DMA_START|BIT4; + break; + } + } + _HIFusb_start(handle); +} diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/cmnos_clock_patch.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/cmnos_clock_patch.c index 83594c2..c71007e 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/cmnos_clock_patch.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/rompatch/cmnos_clock_patch.c @@ -38,7 +38,7 @@ a_uint32_t ref_clk = 0; extern a_uint32_t cticks; -// clock change +// clock change // void cmnos_clock_init_patch(a_uint32_t refclk) { @@ -57,7 +57,7 @@ void cmnos_delay_us_patch(int us) { a_uint32_t start_time = NOW(); unsigned int num_ticks = us*ref_clk; // system_freq == number of ticks per 1us - + while ( (NOW() - start_time) < num_ticks) { /* busy spin */ ; @@ -84,6 +84,6 @@ void cmnos_tick_patch(void) a_uint32_t cmnos_milliseconds_patch(void) { cmnos_tick_patch(); - + return (cticks); } diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.c index d8db1e4..4bf63e3 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.c @@ -47,7 +47,7 @@ A_PCI_INIT_FUNC g_pci_init_func; #define EMULATE_PCI_CONFIG #endif -#define PCI_CONFIG_BASE_ADDR 0x14000000 +#define PCI_CONFIG_BASE_ADDR 0x14000000 extern A_PCI_INIT_FUNC g_pci_init_func; adf_drv_info_t* g_wlan_drv = NULL; @@ -67,13 +67,13 @@ void wlan_pci_register_drv(adf_drv_info_t *drv) } #define ATHEROS_VENDOR_ID 0x168c -#define AR5416_DEVID_PCIE 0x24 +#define AR5416_DEVID_PCIE 0x24 void wlan_pci_probe(void) { __adf_softc_t *sc; adf_os_resource_t drv_res = {0}; - adf_os_attach_data_t drv_data = {{0}}; + adf_os_attach_data_t drv_data = {{0}}; int vendor_id; int device_id; @@ -82,17 +82,17 @@ void wlan_pci_probe(void) #if MAGPIE_ENABLE_PCIE == 0 vendor_id = ATHEROS_VENDOR_ID; device_id = AR5416_DEVID_PCIE; -#else +#else vendor_id = wlan_pci_config_read(0, 2); device_id = wlan_pci_config_read(2, 2); -#endif - A_PRINTF(": Vendor id 0x%x Dev id 0x%x\n", vendor_id, device_id); - +#endif + A_PRINTF(": Vendor id 0x%x Dev id 0x%x\n", vendor_id, device_id); + if (vendor_id != ATHEROS_VENDOR_ID) { - A_PRINTF(": Atheros card not found\n"); + A_PRINTF(": Atheros card not found\n"); return; } - + /** * Allocate the sc & zero down */ @@ -101,60 +101,60 @@ void wlan_pci_probe(void) A_PRINTF("Cannot malloc softc\n"); goto mem_fail; } - -#define AR5416_DEVID_PCIE 0x24 + +#define AR5416_DEVID_PCIE 0x24 drv_data.pci.device = AR5416_DEVID_PCIE; drv_data.pci.vendor = 0x168c; drv_data.pci.subvendor = 0; drv_data.pci.subdevice = 0; - + drv_res.start = (a_uint32_t) 0; drv_res.end = 0; drv_res.type = ADF_OS_RESOURCE_TYPE_MEM; - + g_wlan_drv_handle = g_wlan_drv->drv_attach(&drv_res, 1, &drv_data, NULL); - + return; mem_fail: - return; + return; } int wlan_pci_config_write(int offset, a_uint32_t val, int width) { -#if MAGPIE_ENABLE_PCIE == 1 +#if MAGPIE_ENABLE_PCIE == 1 unsigned long addr = ( PCI_CONFIG_BASE_ADDR + offset ) & 0xfffffffc; - A_UINT8 *ptr = (A_UINT8 *)addr; - A_UINT8 *valptr = (A_UINT8 *)&val; + A_UINT8 *ptr = (A_UINT8 *)addr; + A_UINT8 *valptr = (A_UINT8 *)&val; int idx = offset & 0x3; int i; - + for (i = 0; i < width; i++) { ptr[idx + i] = valptr[3-i]; - } + } #endif - - return 0; + + return 0; } int wlan_pci_config_read(int offset, int width) { -#if MAGPIE_ENABLE_PCIE == 0 - return 0; +#if MAGPIE_ENABLE_PCIE == 0 + return 0; #else unsigned long addr = ( PCI_CONFIG_BASE_ADDR + offset ) & 0xfffffffc; unsigned long value = *((unsigned long *)addr); - A_UINT8 *ptr = (A_UINT8 *)&value; + A_UINT8 *ptr = (A_UINT8 *)&value; int idx = offset & 0x3; int result = 0; int i; - + for (i = 0; i < width; i++) { result |= (ptr[ 3 - (idx + i)] << (8*i)); - } - - return result; -#endif + } + + return result; +#endif } void wlan_pci_isr() diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.h index 5cdba37..3bbd446 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/wlan/wlan_pci.h @@ -34,15 +34,18 @@ */ /* * @File: wlan_pci.h - * - * @Abstract: - * + * + * @Abstract: + * * @Notes: */ #ifndef _WLAN_PCI_H #define _WLAN_PCI_H +#include +#include + typedef int (*A_PCI_INIT_FUNC)(void); //extern A_PCI_INIT_FUNC g_pci_init_func; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_internal.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_internal.h index 123f2e0..d9480c4 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_internal.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_internal.h @@ -33,11 +33,11 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * + * @File: + * * @Abstract: internal data and structure definitions for WMI service - * - * @Notes: + * + * @Notes: */ #ifndef WMI_INTERNAL_H_ @@ -68,7 +68,7 @@ #endif /* WMI_DEBUG */ #define EVT_PKT_IN_USE (1 << 0) -#define EVT_PKT_IS_FREE(e) !((e)->Flags & EVT_PKT_IN_USE) +#define EVT_PKT_IS_FREE(e) !((e)->Flags & EVT_PKT_IN_USE) #define EVT_MARK_FREE(e) (e)->Flags &= ~EVT_PKT_IN_USE; #define EVT_MARK_INUSE(e) (e)->Flags |= EVT_PKT_IN_USE #define IS_EVT_CLASS_BUFFERED(ec) ((ec) != WMI_EVT_CLASS_DIRECT_BUFFER) @@ -76,16 +76,16 @@ typedef struct _WMI_POOL_STATE { int MaxAllocation; /* maximum allocations allowed for this pool */ int CurrentAllocation; /* current allocations outstanding */ -} WMI_POOL_STATE; +} WMI_POOL_STATE; typedef struct _WMI_SVC_CONTEXT { htc_handle_t HtcHandle; - pool_handle_t PoolHandle; + pool_handle_t PoolHandle; int PendingEvents; /* no. of pending events */ HTC_SERVICE WMIControlService; /* registered control service */ HTC_ENDPOINT_ID ControlEp; /* endpoint assigned to us */ WMI_DISPATCH_TABLE *pDispatchHead; /* dispatch list head ptr */ - WMI_DISPATCH_TABLE *pDispatchTail; /* dispatch list tail ptr */ + WMI_DISPATCH_TABLE *pDispatchTail; /* dispatch list tail ptr */ // Left a door for extension the structure void *pReserved; diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc.c b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc.c index 600c43d..b68dcfc 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc.c +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc.c @@ -33,18 +33,18 @@ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /* - * @File: - * + * @File: + * * @Abstract: Wireless Module Interface Service Implementation - * - * @Notes: + * + * @Notes: */ #include #include #include #include #include -#include +#include #include #include "wmi_internal.h" @@ -55,9 +55,9 @@ static void WMIRecvMessageHandler(HTC_ENDPOINT_ID EndPt, adf_nbuf_t hdr_buf, void *pContext; WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)arg; WMI_DISPATCH_TABLE *pCurrentTable; - WMI_DISPATCH_ENTRY*pCurrentEntry; + WMI_DISPATCH_ENTRY*pCurrentEntry; WMI_CMD_HANDLER pCmdHandler; - A_UINT8* pCmdBuffer; + A_UINT8* pCmdBuffer; int i; A_UINT16 cmd; A_UINT16 seq; @@ -65,76 +65,76 @@ static void WMIRecvMessageHandler(HTC_ENDPOINT_ID EndPt, adf_nbuf_t hdr_buf, a_uint8_t *anbdata; a_uint32_t anblen; WMI_CMD_HDR *cmdHdr; - + adf_os_assert(hdr_buf == ADF_NBUF_NULL); do { length = adf_nbuf_len(pHTCBuf); if (length < sizeof(WMI_CMD_HDR)) { - break; + break; } adf_nbuf_peek_header(pHTCBuf, &anbdata, &anblen); - + pCurrentTable = pWMI->pDispatchHead; length = length - sizeof(WMI_CMD_HDR); - + cmdHdr = (WMI_CMD_HDR *)anbdata; cmd = adf_os_ntohs(cmdHdr->commandId); seq = adf_os_ntohs(cmdHdr->seqNo); - - pCmdBuffer = anbdata + sizeof(WMI_CMD_HDR); + + pCmdBuffer = anbdata + sizeof(WMI_CMD_HDR); pCmdHandler = NULL; - + while (pCurrentTable != NULL) { - + pContext = pCurrentTable->pContext; pCurrentEntry = pCurrentTable->pTable; - + /* scan table entries */ for (i = 0; i < pCurrentTable->NumberOfEntries; i++, pCurrentEntry++) { if (pCurrentEntry->CmdID == cmd) { /* found a match */ pCmdHandler = pCurrentEntry->pCmdHandler; - + /* optionally check length */ if ((pCurrentEntry->CheckLength != 0) && (length < pCurrentEntry->CheckLength)) { /* do not process command */ pCmdHandler = NULL; } - /* end search */ - break; - } - } - + /* end search */ + break; + } + } + if (pCmdHandler != NULL) { /* found a handler */ break; } - + /* scan next table */ pCurrentTable = pCurrentTable->pNext; } - + if (NULL == pCmdHandler) { - break; + break; } - + /* if we get here, we have a command handler to dispatch */ - + /* call dispatch function */ pCmdHandler(pContext, cmd, seq, pCmdBuffer, length); - + } while (FALSE); - - + + /* Invalidate the buffer (including HTC header). Note : we only need to invalidate up to the portion - * that was used (cache invalidate will also round up to the nearest cache line). + * that was used (cache invalidate will also round up to the nearest cache line). * The rest of the buffer should still be coherent. * */ - HTC_ReturnBuffers(pWMI->HtcHandle, EndPt, pHTCBuf); + HTC_ReturnBuffers(pWMI->HtcHandle, EndPt, pHTCBuf); } /* send completion handler when any HTC buffers are returned */ @@ -143,70 +143,70 @@ static void _WMI_SendCompleteHandler(HTC_ENDPOINT_ID Endpt, adf_nbuf_t pHTCBuf, WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)arg; WMI_BUF_CONTEXT *ctx; BUF_POOL_ID poolId; - + ctx = (WMI_BUF_CONTEXT *)adf_nbuf_get_priv(pHTCBuf); - + if ( ctx->EventClass == WMI_EVT_CLASS_CMD_EVENT ) { poolId = POOL_ID_WMI_SVC_EVENT; } else { poolId = POOL_ID_WMI_SVC_CMD_REPLY; } - + BUF_Pool_free_buf(pWMI->PoolHandle, poolId, pHTCBuf); } static A_UINT8 WMIServiceConnect(HTC_SERVICE *pService, - HTC_ENDPOINT_ID eid, - A_UINT8 *pDataIn, + HTC_ENDPOINT_ID eid, + A_UINT8 *pDataIn, int LengthIn, A_UINT8 *pDataOut, int *pLengthOut) { WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)pService->ServiceCtx; - + /* save the eid to use */ pWMI->ControlEp = eid; return HTC_SERVICE_SUCCESS; } /************** public APIS ********************************************/ - + static wmi_handle_t _WMI_Init(WMI_SVC_CONFIG *pWmiConfig) { WMI_SVC_CONTEXT *pWMI = NULL; int eventSize = WMI_SVC_MAX_BUFFERED_EVENT_SIZE + sizeof(WMI_CMD_HDR) + HTC_HDR_SZ; - + pWMI = (WMI_SVC_CONTEXT *)adf_os_mem_alloc(sizeof(WMI_SVC_CONTEXT)); if (pWMI == NULL) { - return NULL; + return NULL; } - + pWMI->pDispatchHead = NULL; pWMI->PoolHandle = pWmiConfig->PoolHandle; - pWMI->HtcHandle = pWmiConfig->HtcHandle; - - BUF_Pool_create_pool(pWmiConfig->PoolHandle, POOL_ID_WMI_SVC_CMD_REPLY, + pWMI->HtcHandle = pWmiConfig->HtcHandle; + + BUF_Pool_create_pool(pWmiConfig->PoolHandle, POOL_ID_WMI_SVC_CMD_REPLY, pWmiConfig->MaxCmdReplyEvts, eventSize); - - BUF_Pool_create_pool(pWmiConfig->PoolHandle, POOL_ID_WMI_SVC_EVENT, + + BUF_Pool_create_pool(pWmiConfig->PoolHandle, POOL_ID_WMI_SVC_EVENT, pWmiConfig->MaxEventEvts, eventSize); - - /* NOTE: since RAM allocation is zero-initialized, there is nothing to do for the + + /* NOTE: since RAM allocation is zero-initialized, there is nothing to do for the * direct event pool */ - + /* register the WMI control service */ pWMI->WMIControlService.ProcessRecvMsg = A_INDIR(wmi_svc_api._WMI_RecvMessageHandler); pWMI->WMIControlService.ProcessSendBufferComplete = A_INDIR(wmi_svc_api._WMI_SendCompleteHandler); pWMI->WMIControlService.ProcessConnect = A_INDIR(wmi_svc_api._WMI_ServiceConnect); pWMI->WMIControlService.MaxSvcMsgSize = WMI_SVC_MSG_SIZE + sizeof(WMI_CMD_HDR); - /* all buffers that are sent through the control endpoint are at least WMI_SVC_MAX_BUFFERED_EVENT_SIZE + /* all buffers that are sent through the control endpoint are at least WMI_SVC_MAX_BUFFERED_EVENT_SIZE * in size. Any WMI event that supplies a data buffer must insure that the space in the buffer * is at least this size. */ - pWMI->WMIControlService.TrailerSpcCheckLimit = WMI_SVC_MAX_BUFFERED_EVENT_SIZE; + pWMI->WMIControlService.TrailerSpcCheckLimit = WMI_SVC_MAX_BUFFERED_EVENT_SIZE; pWMI->WMIControlService.ServiceID = WMI_CONTROL_SVC; pWMI->WMIControlService.ServiceCtx = pWMI; HTC_RegisterService(pWmiConfig->HtcHandle, &pWMI->WMIControlService); - + return pWMI; } @@ -226,35 +226,35 @@ static void _WMI_RegisterDispatchTable(wmi_handle_t handle, WMI_DISPATCH_TABLE *pDispatchTable) { WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)handle; - + if (NULL == pWMI->pDispatchHead) { pWMI->pDispatchHead = pDispatchTable; - pWMI->pDispatchTail = pDispatchTable; + pWMI->pDispatchTail = pDispatchTable; } else { /* link to the tail */ pWMI->pDispatchTail->pNext = pDispatchTable; - pWMI->pDispatchTail = pDispatchTable; + pWMI->pDispatchTail = pDispatchTable; } } static adf_nbuf_t _WMI_AllocEvent(wmi_handle_t handle, WMI_EVT_CLASS EventClass, int Length) -{ +{ BUF_POOL_ID poolId; WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)handle; adf_nbuf_t buf; WMI_BUF_CONTEXT *ctx; - + if ( EventClass == WMI_EVT_CLASS_CMD_EVENT ) { poolId = POOL_ID_WMI_SVC_EVENT; } else { poolId = POOL_ID_WMI_SVC_CMD_REPLY; } - - buf = BUF_Pool_alloc_buf(pWMI->PoolHandle, - poolId, + + buf = BUF_Pool_alloc_buf(pWMI->PoolHandle, + poolId, sizeof(WMI_CMD_HDR) + HTC_GetReservedHeadroom(pWMI->HtcHandle)); - + if ( buf != NULL ) { ctx = (WMI_BUF_CONTEXT *)adf_nbuf_get_priv(buf); ctx->EventClass = EventClass; @@ -262,17 +262,17 @@ static adf_nbuf_t _WMI_AllocEvent(wmi_handle_t handle, WMI_EVT_CLASS EventClass, return buf; } -static void _WMI_SendEvent(wmi_handle_t handle, adf_nbuf_t pEvt, +static void _WMI_SendEvent(wmi_handle_t handle, adf_nbuf_t pEvt, A_UINT16 EventId, A_UINT16 SeqNo, int Length) { WMI_SVC_CONTEXT *pWMI = (WMI_SVC_CONTEXT *)handle; A_UINT8 *pBuffer; - + pBuffer = adf_nbuf_push_head(pEvt, sizeof(WMI_CMD_HDR)); - A_SET_UINT16_FIELD(pBuffer, WMI_CMD_HDR, commandId, adf_os_htons(EventId)); + A_SET_UINT16_FIELD(pBuffer, WMI_CMD_HDR, commandId, adf_os_htons(EventId)); A_SET_UINT16_FIELD(pBuffer, WMI_CMD_HDR, seqNo, adf_os_htons(SeqNo)); - - HTC_SendMsg(pWMI->HtcHandle, pWMI->ControlEp, pEvt); + + HTC_SendMsg(pWMI->HtcHandle, pWMI->ControlEp, pEvt); } static void _WMI_Shutdown(wmi_handle_t handle) diff --git a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc_api.h b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc_api.h index 68484e0..c6cb0db 100755 --- a/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc_api.h +++ b/ath9k_htc/target_firmware/magpie_fw_dev/target/wmi/wmi_svc_api.h @@ -52,7 +52,7 @@ typedef enum WMI_EVT_CLASS { WMI_EVT_CLASS_NONE = -1, WMI_EVT_CLASS_CMD_EVENT = 0, - WMI_EVT_CLASS_CMD_REPLY = 1, + WMI_EVT_CLASS_CMD_REPLY = 1, WMI_EVT_CLASS_MAX } WMI_EVT_CLASS; @@ -70,25 +70,25 @@ typedef struct _WMI_SVC_CONFIG { int MaxCmdReplyEvts; /* total buffers for command replies */ int MaxEventEvts; /* total buffers for low priority events */ } WMI_SVC_CONFIG; - + /* command dispatch entry */ typedef struct _WMI_DISPATCH_ENTRY { WMI_CMD_HANDLER pCmdHandler; /* dispatch function */ A_UINT16 CmdID; /* WMI command to dispatch from */ - A_UINT16 CheckLength; /* expected length of command, set to 0 to bypass check */ + A_UINT16 CheckLength; /* expected length of command, set to 0 to bypass check */ } WMI_DISPATCH_ENTRY; /* dispatch table that is used to register a set of dispatch entries */ typedef struct _WMI_DISPATCH_TABLE { struct _WMI_DISPATCH_TABLE *pNext; /* next dispatch, WMI-reserved */ - void *pContext; /* optional context that is passed to command handlers + void *pContext; /* optional context that is passed to command handlers assigned to this dispatch table */ int NumberOfEntries; /* number of elements pointed to by pTable */ WMI_DISPATCH_ENTRY *pTable; /* start of table */ } WMI_DISPATCH_TABLE; #define WMI_DISPATCH_ENTRY_COUNT(table) \ - (sizeof((table)) / sizeof(WMI_DISPATCH_ENTRY)) + (sizeof((table)) / sizeof(WMI_DISPATCH_ENTRY)) /* handy macro to declare a dispatch table */ #define WMI_DECLARE_DISPATCH_TABLE(name,dispatchEntries) \ @@ -100,15 +100,15 @@ WMI_DISPATCH_TABLE name = \ typedef struct _WMI_BUF_CONTEXT { HTC_BUF_CONTEXT HtcBufCtx; - - WMI_EVT_CLASS EventClass; /* the event class this packet belongs to */ - A_UINT16 Flags; /* internal flags reserved for WMI */ + + WMI_EVT_CLASS EventClass; /* the event class this packet belongs to */ + A_UINT16 Flags; /* internal flags reserved for WMI */ } WMI_BUF_CONTEXT; /* ROM-version, eventually. For now, in RAM */ - + typedef void* wmi_handle_t; - + /* the API table */ typedef struct _wmi_svc_apis { wmi_handle_t (* _WMI_Init)(WMI_SVC_CONFIG *pWmiConfig); @@ -119,15 +119,15 @@ typedef struct _wmi_svc_apis { void (* _WMI_SendCompleteHandler)(HTC_ENDPOINT_ID Endpt, adf_nbuf_t pHTCBuf, void *arg); int (* _WMI_GetControlEp)(wmi_handle_t h); void (* _WMI_Shutdown)(wmi_handle_t h); - + /* */ void (*_WMI_RecvMessageHandler)(HTC_ENDPOINT_ID EndPt, adf_nbuf_t hdr_buf, adf_nbuf_t pHTCBuf, void *arg); - A_UINT8 (*_WMI_ServiceConnect)(HTC_SERVICE *pService, HTC_ENDPOINT_ID eid, - A_UINT8 *pDataIn, + A_UINT8 (*_WMI_ServiceConnect)(HTC_SERVICE *pService, HTC_ENDPOINT_ID eid, + A_UINT8 *pDataIn, int LengthIn, A_UINT8 *pDataOut, int *pLengthOut); - + void *pReserved; /* for expansion if need be */ } WMI_SVC_APIS; diff --git a/ath9k_htc/target_firmware/ram-k2.ld b/ath9k_htc/target_firmware/ram-k2.ld index e0abd57..692ff65 100755 --- a/ath9k_htc/target_firmware/ram-k2.ld +++ b/ath9k_htc/target_firmware/ram-k2.ld @@ -1,3 +1,38 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. + */ /* Linker script for Magpie RAM-based applications */ diff --git a/ath9k_htc/target_firmware/ram-magpie.ld b/ath9k_htc/target_firmware/ram-magpie.ld index 186f96b..5f12c6e 100755 --- a/ath9k_htc/target_firmware/ram-magpie.ld +++ b/ath9k_htc/target_firmware/ram-magpie.ld @@ -1,3 +1,38 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. + */ /* Linker script for Magpie RAM-based applications */ diff --git a/ath9k_htc/target_firmware/rom-addrs-k2.ld b/ath9k_htc/target_firmware/rom-addrs-k2.ld index 0a118fa..501728b 100755 --- a/ath9k_htc/target_firmware/rom-addrs-k2.ld +++ b/ath9k_htc/target_firmware/rom-addrs-k2.ld @@ -1,3 +1,39 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. + */ + PROVIDE ( _indir_tbl = 0x00500000 ); PROVIDE (athos_indirection_table_install = 0x008e1548); PROVIDE ( memcpy = 0x008e4eb8 ); diff --git a/ath9k_htc/target_firmware/rom-addrs-magpie.ld b/ath9k_htc/target_firmware/rom-addrs-magpie.ld index a54a98e..8450e1d 100755 --- a/ath9k_htc/target_firmware/rom-addrs-magpie.ld +++ b/ath9k_htc/target_firmware/rom-addrs-magpie.ld @@ -1,3 +1,39 @@ +/* + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. + */ + PROVIDE ( _indir_tbl = 0x00500000 ); PROVIDE ( memcpy = 0x008e6b64 ); PROVIDE ( memset = 0x008e6e48 ); diff --git a/ath9k_htc/target_firmware/wlan/_ieee80211.h b/ath9k_htc/target_firmware/wlan/_ieee80211.h index 1e64078..77a6883 100755 --- a/ath9k_htc/target_firmware/wlan/_ieee80211.h +++ b/ath9k_htc/target_firmware/wlan/_ieee80211.h @@ -83,9 +83,9 @@ enum ieee80211_protmode { */ #define IEEE80211_AMPDU_LIMIT_MIN (1 * 1024) #define IEEE80211_AMPDU_LIMIT_MAX (64 * 1024 - 1) -#define IEEE80211_AMPDU_SUBFRAME_MIN 2 -#define IEEE80211_AMPDU_SUBFRAME_MAX 64 -#define IEEE80211_AMPDU_SUBFRAME_DEFAULT 32 +#define IEEE80211_AMPDU_SUBFRAME_MIN 2 +#define IEEE80211_AMPDU_SUBFRAME_MAX 64 +#define IEEE80211_AMPDU_SUBFRAME_DEFAULT 32 #define IEEE80211_AMSDU_LIMIT_MAX 4096 struct ieee80211_rateset { diff --git a/ath9k_htc/target_firmware/wlan/ah.c b/ath9k_htc/target_firmware/wlan/ah.c index 0011d32..6d91fc0 100755 --- a/ath9k_htc/target_firmware/wlan/ah.c +++ b/ath9k_htc/target_firmware/wlan/ah.c @@ -142,14 +142,14 @@ ath_hal_computetxtime(struct ath_hal *ah, #undef OFDM_SYMBOL_TIME #ifdef MAGPIE_MERLIN -a_uint32_t +a_uint32_t ath_hal_get_curmode(struct ath_hal *ah, HAL_CHANNEL_INTERNAL *chan) { if (!chan) return HAL_MODE_11NG; if (IS_CHAN_NA(chan)) - return HAL_MODE_11NA; + return HAL_MODE_11NA; if (IS_CHAN_A(chan)) return HAL_MODE_11A; diff --git a/ath9k_htc/target_firmware/wlan/ah.h b/ath9k_htc/target_firmware/wlan/ah.h index 5bdc818..3c7b4c4 100755 --- a/ath9k_htc/target_firmware/wlan/ah.h +++ b/ath9k_htc/target_firmware/wlan/ah.h @@ -359,7 +359,7 @@ struct ath_hal a_uint32_t ah_magic; HAL_SOFTC ah_sc; adf_os_device_t ah_dev; - + a_uint32_t ah_macVersion; a_uint16_t ah_macRev; a_uint16_t ah_phyRev; @@ -368,20 +368,20 @@ struct ath_hal void __ahdecl(*ah_detach)(struct ath_hal*); HAL_BOOL __ahdecl(*ah_updateTxTrigLevel)(struct ath_hal*, HAL_BOOL incTrigLevel); - + /* Misc Functions */ - void __ahdecl(*ah_setDefAntenna)(struct ath_hal*, a_uint32_t); + void __ahdecl(*ah_setDefAntenna)(struct ath_hal*, a_uint32_t); void __ahdecl(*ah_setRxFilter)(struct ath_hal*, a_uint32_t); - - + + /* Target Transmit Functions */ HAL_BOOL __ahdecl(*ah_setTxDP)(struct ath_hal*, a_uint32_t, a_uint32_t txdp); - a_uint32_t __ahdecl(*ah_numTxPending)(struct ath_hal *, a_uint32_t q); + a_uint32_t __ahdecl(*ah_numTxPending)(struct ath_hal *, a_uint32_t q); HAL_BOOL __ahdecl(*ah_startTxDma)(struct ath_hal*, a_uint32_t); HAL_BOOL __ahdecl(*ah_stopTxDma)(struct ath_hal*, a_uint32_t); - + HAL_BOOL __ahdecl(*ah_abortTxDma)(struct ath_hal *); - + void __ahdecl(*ah_set11nTxDesc)(struct ath_tx_desc *ds, a_uint32_t pktLen, HAL_PKT_TYPE type, a_uint32_t txPower, a_uint32_t keyIx, @@ -400,7 +400,7 @@ struct ath_hal void __ahdecl(*ah_set11nBurstDuration)(struct ath_tx_desc *ds, a_uint32_t burstDuration); void __ahdecl(*ah_set11nVirtualMoreFrag)(struct ath_tx_desc *ds, a_uint32_t vmf); - + HAL_BOOL __ahdecl(*ah_setupTxDesc)(struct ath_tx_desc *, a_uint32_t pktLen, a_uint32_t hdrLen, HAL_PKT_TYPE type, a_uint32_t txPower, @@ -418,21 +418,21 @@ struct ath_hal a_uint32_t filter0, a_uint32_t filter1); u_int64_t __ahdecl(*ah_getTsf64)(struct ath_hal*); - + /* Target receive Functions */ void __ahdecl(*ah_setRxDP)(struct ath_hal*, a_uint32_t rxdp); HAL_BOOL __ahdecl(*ah_setupRxDesc)(struct ath_rx_desc *, a_uint32_t size, a_uint32_t flags); HAL_STATUS __ahdecl(*ah_procRxDesc)(struct ath_hal *, struct ath_desc *, a_uint32_t phyAddr, struct ath_desc *next, u_int64_t tsf); - HAL_STATUS __ahdecl(*ah_procRxDescFast)(struct ath_hal *ah, + HAL_STATUS __ahdecl(*ah_procRxDescFast)(struct ath_hal *ah, struct ath_rx_desc *ds, a_uint32_t pa, - struct ath_desc *nds, + struct ath_desc *nds, struct ath_rx_status *rx_stats); HAL_BOOL __ahdecl(*ah_stopDmaReceive)(struct ath_hal*); void __ahdecl(*ah_stopPcuReceive)(struct ath_hal*); void __ahdecl(*ah_enableReceive)(struct ath_hal*); - + /* Interrupt functions */ HAL_BOOL __ahdecl(*ah_isInterruptPending)(struct ath_hal*); HAL_BOOL __ahdecl(*ah_getPendingInterrupts)(struct ath_hal*, HAL_INT*); diff --git a/ath9k_htc/target_firmware/wlan/ah_osdep.h b/ath9k_htc/target_firmware/wlan/ah_osdep.h index 4d44fce..14576a2 100755 --- a/ath9k_htc/target_firmware/wlan/ah_osdep.h +++ b/ath9k_htc/target_firmware/wlan/ah_osdep.h @@ -1,38 +1,41 @@ -/*- +/* * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting, Atheros - * Communications, Inc. All rights reserved. + * Communications, Inc. All rights reserved. + * Copyright (c) 2013 Qualcomm Atheros, Inc. + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) provided that the following conditions are met: * - * Redistribution and use in source and binary forms 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 NO - * ''WARRANTY'' disclaimer below (''Disclaimer''), without - * modification. - * 2. Redistributions in binary form must reproduce at minimum a - * disclaimer similar to the Disclaimer below and any redistribution - * must be conditioned upon including a substantially similar - * Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the - * names of any contributors may be used to endorse or promote - * product derived from this software without specific prior written - * permission. + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. * - * NO WARRANTY - * 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 NONINFRINGEMENT, - * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE - * FOR 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 DAMAGES. + * * 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. * - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/hal/main/linux/ah_osdep.h#1 $ + * * Neither the name of Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ + #ifndef _ATH_AH_OSDEP_H_ #define _ATH_AH_OSDEP_H_ /* diff --git a/ath9k_htc/target_firmware/wlan/ar5416.h b/ath9k_htc/target_firmware/wlan/ar5416.h index df18434..535bbc2 100755 --- a/ath9k_htc/target_firmware/wlan/ar5416.h +++ b/ath9k_htc/target_firmware/wlan/ar5416.h @@ -77,8 +77,8 @@ typedef enum Ar5416_Rates { #define AR5416_PWR_TABLE_OFFSET -5 #define AR5416_LEGACY_CHAINMASK 1 #define AR5416_1_CHAINMASK 1 -#define AR5416_2LOHI_CHAINMASK 5 -#define AR5416_2LOMID_CHAINMASK 3 +#define AR5416_2LOHI_CHAINMASK 5 +#define AR5416_2LOMID_CHAINMASK 3 #define AR5416_3_CHAINMASK 7 #define AH5416(_ah) ((struct ath_hal_5416 *)(_ah)) @@ -104,10 +104,10 @@ struct ath_hal_5416 struct ath_hal_private ah_priv; /* base class */ a_uint16_t ah_antennaSwitchSwap; /* Controls mapping of OID request */ a_uint32_t ah_maskReg; /* copy of AR_IMR */ - + a_uint32_t ah_slottime; /* user-specified slot time */ a_int16_t ah_txPowerIndexOffset; - + a_uint32_t ah_intrTxqs; void *ah_cal_mem; a_uint16_t ah_ratesArray[Ar5416RateSize]; diff --git a/ath9k_htc/target_firmware/wlan/ar5416Phy.c b/ath9k_htc/target_firmware/wlan/ar5416Phy.c index 29408dd..ec80f20 100755 --- a/ath9k_htc/target_firmware/wlan/ar5416Phy.c +++ b/ath9k_htc/target_firmware/wlan/ar5416Phy.c @@ -1,6 +1,37 @@ /* - * Copyright (c) 2000-2002 Atheros Communications, Inc., All Rights Reserved + * Copyright (c) 2013 Qualcomm Atheros, Inc. * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ #ident "$Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/ratectrl11n/ar5416Phy.c#5 $" @@ -24,13 +55,13 @@ /* TRUE_ALL_11N - valid for 20/40/Legacy, TRUE - Legacy only, TRUE_20 - HT 20 only, TRUE_40 - HT 40 only */ /* 4ms frame limit not used for NG mode. The values filled for HT are the 64K max aggregate limit */ -#ifndef MAGPIE_MERLIN // K2 +#ifndef MAGPIE_MERLIN // K2 RATE_TABLE_11N ar5416_11ngRateTable = { - 54, /* number of rates - should match the no. of rows below */ - 100, /* probe interval */ - 50, /* rssi reduce interval */ + 54, /* number of rates - should match the no. of rows below */ + 100, /* probe interval */ + 50, /* rssi reduce interval */ WLAN_RC_HT_FLAG, /* Phy rates allowed initially */ {/* Multiple Single */ /* stream stream short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for*/ @@ -79,7 +110,7 @@ RATE_TABLE_11N ar5416_11ngRateTable = { /* 121.5Mb [41] */ { FALSE, TRUE_40, WLAN_PHY_HT_40_SS,121500,102700,0x86, 0x00, 6, 8, 23, 3, 20, 41, 42, 42, 1, 1, 60156, FALSE}, /* 135 Mb [42] */ { FALSE, TRUE_40, WLAN_PHY_HT_40_SS_HGI,135000,111900,0x86, 0x00, 6, 8, 23, 3, 20, 41, 42, 42, 1, 1, 66840, FALSE}, /* 135 Mb [43] */ { FALSE, TRUE_40, WLAN_PHY_HT_40_SS,135000,112000,0x87, 0x00, 7, 8, 25, 3, 22, 43, 44, 44, 1, 1, 66840, TRUE}, - /* 150 Mb [44] */ { FALSE, TRUE_40, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 22, 43, 44, 44, 1, 1, 74200, TRUE}, + /* 150 Mb [44] */ { FALSE, TRUE_40, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 22, 43, 44, 44, 1, 1, 74200, TRUE}, /* 108 Mb [45] */ { TRUE_40, FALSE, WLAN_PHY_HT_40_DS,108000,92500, 0x8b, 0x00, 11, 8, 10, 3, 24, 45, 45, 45, 3, 7, 53440, FALSE}, /* 162 Mb [46] */ { TRUE_40, FALSE, WLAN_PHY_HT_40_DS,162000,130300,0x8c, 0x00, 12, 8, 14, 3, 25, 46, 47, 47, 3, 7, 80160, TRUE}, /* 180 Mb [47] */ { FALSE, FALSE, WLAN_PHY_HT_40_DS_HGI,180000,156900,0x8c, 0x00, 12, 8, 14, 3, 25, 46, 47, 47, 3, 7, 89090, TRUE}, @@ -91,7 +122,7 @@ RATE_TABLE_11N ar5416_11ngRateTable = { /* 300 Mb [53] */ { TRUE_40, FALSE, WLAN_PHY_HT_40_DS_HGI,300000,207000,0x8f, 0x00, 15, 8, 25, 3, 31, 52, 53, 53, 3, 5, 148400, TRUE}, /* Multiple Single */ /* stream stream short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for*/ - /* valid valid Kbps uKbps RC Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ + /* valid valid Kbps uKbps RC Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ }, }; @@ -99,9 +130,9 @@ RATE_TABLE_11N ar5416_11ngRateTable = { RATE_TABLE_11N ar5416_11ngRateTable = { - 46, /* number of rates - should match the no. of rows below */ - 50, /* probe interval */ - 50, /* rssi reduce interval */ + 46, /* number of rates - should match the no. of rows below */ + 50, /* probe interval */ + 50, /* rssi reduce interval */ WLAN_RC_HT_FLAG, /* Phy rates allowed initially */ {/* Multiple Single Single */ /* stream stream stream short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for*/ @@ -142,7 +173,7 @@ RATE_TABLE_11N ar5416_11ngRateTable = { /* 108 Mb [33] */ { FALSE, TRUE_40, TRUE_40, WLAN_PHY_HT_40_SS,108000,92900, 0x85, 0x00, 5, 8, 20, 3, 17, 33, 33, 33, 1, 1, 53476, FALSE}, /* 121.5Mb [34] */ { FALSE, TRUE_40, TRUE_40, WLAN_PHY_HT_40_SS,121500,102700,0x86, 0x00, 6, 8, 23, 3, 18, 34, 34, 34, 1, 1, 60156, FALSE}, /* 135 Mb [35] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS,135000,112000,0x87, 0x00, 7, 8, 25, 3, 19, 35, 36, 36, 1, 1, 66840, TRUE}, - /* 150 Mb [36] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 19, 35, 36, 36, 1, 1, 74200, TRUE}, + /* 150 Mb [36] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 19, 35, 36, 36, 1, 1, 74200, TRUE}, /* 27 Mb [37] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,27000, 25800, 0x88, 0x00, 8, 8, 2, 3, 20, 37, 37, 37, 3, 7, 13360, TRUE}, /* 54 Mb [38] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,54000, 49800, 0x89, 0x00, 9, 8, 4, 3, 21, 38, 38, 38, 3, 7, 26720, FALSE}, /* 81 Mb [39] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,81000, 71900, 0x8a, 0x00, 10, 8, 6, 3, 22, 39, 39, 39, 3, 7, 40080, TRUE}, @@ -154,7 +185,7 @@ RATE_TABLE_11N ar5416_11ngRateTable = { /* 300 Mb [45] */ { TRUE_40, FALSE, TRUE_40, WLAN_PHY_HT_40_DS_HGI,300000,207000,0x8f, 0x00, 15, 8, 25, 3, 27, 44, 45, 45, 3, 5, 148400, TRUE}, /* Multiple Single */ /* stream stream short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for*/ - /* valid valid Kbps uKbps RC Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ + /* valid valid Kbps uKbps RC Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ }, }; @@ -162,9 +193,9 @@ RATE_TABLE_11N ar5416_11ngRateTable = { //static RATE_TABLE_11N ar5416_11naRateTable = { RATE_TABLE_11N ar5416_11naRateTable = { - 42, /* number of rates */ - 50, /* probe interval */ - 50, /* rssi reduce interval */ + 42, /* number of rates */ + 50, /* probe interval */ + 50, /* rssi reduce interval */ WLAN_RC_HT_FLAG, /* Phy rates allowed initially */ {/* Multiple Single Single*/ /* stream stream stream rate short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for */ @@ -201,7 +232,7 @@ RATE_TABLE_11N ar5416_11naRateTable = { /* 108 Mb [29] */ { FALSE, TRUE_40, TRUE_40, WLAN_PHY_HT_40_SS,108000,92900, 0x85, 0x00, 5, 4, 20, 3, 13, 29, 29, 29, 1, 1, 53476, FALSE}, /* 121.5Mb [30] */ { FALSE, TRUE_40, TRUE_40, WLAN_PHY_HT_40_SS,121500,102700,0x86, 0x00, 6, 4, 23, 3, 14, 30, 30, 30, 1, 1, 60156, FALSE}, /* 135 Mb [31] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS,135000,112000,0x87, 0x00, 7, 4, 25, 3, 15, 31, 32, 32, 1, 1, 66840, TRUE}, - /* 150 Mb [32] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 15, 31, 32, 32, 1, 1, 65535, TRUE}, + /* 150 Mb [32] */ { FALSE, TRUE_40, FALSE, WLAN_PHY_HT_40_SS_HGI,150000,122000,0x87, 0x00, 7, 8, 25, 3, 15, 31, 32, 32, 1, 1, 65535, TRUE}, /* 27 Mb [33] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,27000, 25800, 0x88, 0x00, 8, 0, 2, 3, 16, 33, 33, 33, 3, 7, 13360, TRUE}, /* 54 Mb [34] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,54000, 49800, 0x89, 0x00, 9, 2, 4, 3, 17, 34, 34, 34, 3, 7, 26720, FALSE}, /* 81 Mb [35] */ { FALSE, FALSE, FALSE, WLAN_PHY_HT_40_DS,81000, 71900, 0x8a, 0x00, 10, 2, 6, 3, 18, 35, 35, 35, 3, 7, 40080, TRUE}, @@ -212,12 +243,12 @@ RATE_TABLE_11N ar5416_11naRateTable = { /* 270 Mb [40] */ { TRUE_40, FALSE, TRUE_40, WLAN_PHY_HT_40_DS,270000,192100,0x8f, 0x00, 15, 4, 25, 3, 23, 40, 41, 41, 3, 5, 133600, TRUE}, /* 300 Mb [41] */ { TRUE_40, FALSE, TRUE_40, WLAN_PHY_HT_40_DS_HGI,300000,207000,0x8f, 0x00, 15, 4, 25, 3, 23, 40, 41, 41, 3, 5, 148400, TRUE}, /* stream stream rate short dot11 ctrl RssiAck RssiAck Base CW40 SGI Ht tx chain 4ms tx valid for */ - /* valid valid Kbps uKbps Code Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ + /* valid valid Kbps uKbps Code Preamble Rate Rate ValidMin DeltaMin Idx Idx Idx Idx mask limit UAPSD */ }, }; #endif //ATH_SUPPORT_A_MODE -#endif //#ifdef MAGPIE_MERLIN // MAGPIE_MERLIN +#endif //#ifdef MAGPIE_MERLIN // MAGPIE_MERLIN void ar5416AttachRateTables(struct atheros_softc *sc) diff --git a/ath9k_htc/target_firmware/wlan/ar5416_hw.c b/ath9k_htc/target_firmware/wlan/ar5416_hw.c index 4d2a9f4..becd89d 100644 --- a/ath9k_htc/target_firmware/wlan/ar5416_hw.c +++ b/ath9k_htc/target_firmware/wlan/ar5416_hw.c @@ -58,7 +58,7 @@ static const struct ath_hal_private ar5416hal_10 = {{ /* Transmit functions */ .ah_updateTxTrigLevel = ar5416UpdateTxTrigLevel, .ah_setTxDP = ar5416SetTxDP, - .ah_numTxPending = ar5416NumTxPending, + .ah_numTxPending = ar5416NumTxPending, .ah_startTxDma = ar5416StartTxDma, .ah_stopTxDma = ar5416StopTxDma, @@ -316,7 +316,7 @@ HAL_BOOL ar5416StopDmaReceive(struct ath_hal *ah) void ar5416SetRxFilter(struct ath_hal *ah, a_uint32_t bits) { a_uint32_t phybits; - + iowrite32_mac(AR_RX_FILTER, (bits & 0xff) | AR_RX_COMPR_BAR); phybits = 0; if (bits & HAL_RX_FILTER_PHYRADAR) @@ -382,7 +382,7 @@ HAL_STATUS ar5416ProcRxDescFast_20(struct ath_hal *ah, struct ath_rx_desc *ds, return HAL_EINPROGRESS; /* - * Now we need to get the stats from the descriptor. Since desc are + * Now we need to get the stats from the descriptor. Since desc are * uncached, lets make a copy of the stats first. Note that, since we * touch most of the rx stats, a memcpy would always be more efficient * @@ -400,7 +400,7 @@ HAL_STATUS ar5416ProcRxDescFast_20(struct ath_hal *ah, struct ath_rx_desc *ds, rx_stats->rs_tstamp = ads.AR_RcvTimestamp; /* XXX what about KeyCacheMiss? */ - rx_stats->rs_rssi_combined = + rx_stats->rs_rssi_combined = MS(ads.ds_rxstatus4, AR_RxRSSICombined); rx_stats->rs_rssi_ctl0 = MS(ads.ds_rxstatus0, AR_RxRSSIAnt00); rx_stats->rs_rssi_ctl1 = MS(ads.ds_rxstatus0, AR_RxRSSIAnt01); @@ -601,7 +601,7 @@ HAL_BOOL ar5416AbortTxDma(struct ath_hal *ah) HAL_BOOL ar5416StopTxDma(struct ath_hal*ah, a_uint32_t q) { a_uint32_t i; - + HALASSERT(q < AH_PRIVATE(ah)->ah_caps.halTotalQueues); HALASSERT(AH5416(ah)->ah_txq[q].tqi_type != HAL_TX_QUEUE_INACTIVE); @@ -655,9 +655,9 @@ HAL_BOOL ar5416SetupTxDesc_20(struct ath_tx_desc *ds, ads->ds_ctl2 = SM(txTries0, AR_XmitDataTries0); ads->ds_ctl3 = (txRate0 << AR_XmitRate0_S); - ads->ds_ctl7 = SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel0) + ads->ds_ctl7 = SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel0) | SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel1) - | SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel2) + | SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel2) | SM(AR5416_LEGACY_CHAINMASK, AR_ChainSel3); if (keyIx != HAL_TXKEYIX_INVALID) { @@ -732,7 +732,7 @@ HAL_STATUS ar5416ProcTxDesc_20(struct ath_hal *ah, struct ath_tx_desc *gds) { struct ar5416_desc *ads = AR5416DESC(gds); struct ath_tx_desc *ds = (struct ath_tx_desc *)gds; - + if ((ads->ds_txstatus9 & AR_TxDone) == 0) return HAL_EINPROGRESS; @@ -776,7 +776,7 @@ HAL_STATUS ar5416ProcTxDesc_20(struct ath_hal *ah, struct ath_tx_desc *gds) * ``alternate'' if it wasn't the series 0 rate. */ ds->ds_txstat.ts_rate = MS(ads->ds_txstatus9, AR_FinalTxIdx); - ds->ds_txstat.ts_rssi_combined = + ds->ds_txstat.ts_rssi_combined = MS(ads->ds_txstatus5, AR_TxRSSICombined); ds->ds_txstat.ts_rssi_ctl0 = MS(ads->ds_txstatus0, AR_TxRSSIAnt00); ds->ds_txstat.ts_rssi_ctl1 = MS(ads->ds_txstatus0, AR_TxRSSIAnt01); @@ -903,7 +903,7 @@ void ar5416Set11nAggrMiddle_20(struct ath_tx_desc *ds, a_uint32_t numDelims) ads->ds_ctl1 |= (AR_IsAggr | AR_MoreAggr); /* - * We use a stack variable to manipulate ctl6 to reduce uncached + * We use a stack variable to manipulate ctl6 to reduce uncached * read modify, modfiy, write. */ ctl6 = ads->ds_ctl6; diff --git a/ath9k_htc/target_firmware/wlan/ar5416desc.h b/ath9k_htc/target_firmware/wlan/ar5416desc.h index a56bd54..be7fac6 100755 --- a/ath9k_htc/target_firmware/wlan/ar5416desc.h +++ b/ath9k_htc/target_firmware/wlan/ar5416desc.h @@ -473,7 +473,7 @@ extern void ar5416Set11nTxDesc_20(struct ath_tx_desc *ds, a_uint32_t pktLen, HAL_PKT_TYPE type, a_uint32_t txPower, a_uint32_t keyIx, HAL_KEY_TYPE keyType, a_uint32_t flags); extern void ar5416Set11nRateScenario_20(struct ath_tx_desc *ds, - a_uint32_t durUpdateEn, a_uint32_t rtsctsRate, HAL_11N_RATE_SERIES series[], + a_uint32_t durUpdateEn, a_uint32_t rtsctsRate, HAL_11N_RATE_SERIES series[], a_uint32_t nseries, a_uint32_t flags); extern void ar5416Set11nAggrFirst_20(struct ath_tx_desc *ds, a_uint32_t aggrLen, a_uint32_t numDelims); @@ -487,7 +487,7 @@ extern void ar5416Set11nVirtualMoreFrag_20(struct ath_tx_desc *ds, a_uint32_t vmf); extern HAL_BOOL ar5416SetupRxDesc_20(struct ath_rx_desc *, a_uint32_t size, a_uint32_t flags); -extern HAL_STATUS ar5416ProcRxDescFast_20(struct ath_hal *ah, +extern HAL_STATUS ar5416ProcRxDescFast_20(struct ath_hal *ah, struct ath_rx_desc *, a_uint32_t, struct ath_desc *, struct ath_rx_status *); diff --git a/ath9k_htc/target_firmware/wlan/ar5416reg.h b/ath9k_htc/target_firmware/wlan/ar5416reg.h index 902f897..044a226 100755 --- a/ath9k_htc/target_firmware/wlan/ar5416reg.h +++ b/ath9k_htc/target_firmware/wlan/ar5416reg.h @@ -172,7 +172,7 @@ #define AR_SREV_VERSION_HOWL 0x014 #define AR_SREV_5416_V20_OR_LATER(_ah) (AR_SREV_HOWL((_ah)) || AR_SREV_OWL_20_OR_LATER(_ah)) -#define AR_SREV_5416_V22_OR_LATER(_ah) (AR_SREV_HOWL((_ah)) || AR_SREV_OWL_22_OR_LATER(_ah)) +#define AR_SREV_5416_V22_OR_LATER(_ah) (AR_SREV_HOWL((_ah)) || AR_SREV_OWL_22_OR_LATER(_ah)) #ifdef AR5416_EMULATION /* XXX - AR5416 Emulation only @@ -788,7 +788,7 @@ ((AH_PRIVATE((_ah))->ah_macVersion == AR_SREV_VERSION_MERLIN) && \ (AH_PRIVATE((_ah))->ah_macRev >= AR_SREV_REVISION_MERLIN_20))) -#define AR_SREV_SOWL(_ah) ((AH_PRIVATE((_ah))->ah_macVersion == AR_SREV_VERSION_SOWL)) +#define AR_SREV_SOWL(_ah) ((AH_PRIVATE((_ah))->ah_macVersion == AR_SREV_VERSION_SOWL)) #define AR_SREV_SOWL_11(_ah) (AR_SREV_SOWL(_ah) && (AH_PRIVATE((_ah))->ah_macRev == AR_SREV_REVISION_SOWL_11)) #define AR_RADIO_SREV_MAJOR 0xf0 diff --git a/ath9k_htc/target_firmware/wlan/ieee80211.h b/ath9k_htc/target_firmware/wlan/ieee80211.h index 39418b1..22565b8 100755 --- a/ath9k_htc/target_firmware/wlan/ieee80211.h +++ b/ath9k_htc/target_firmware/wlan/ieee80211.h @@ -42,7 +42,7 @@ /* is 802.11 address multicast/broadcast? */ #define IEEE80211_IS_MULTICAST(_a) (*(_a) & 0x01) -#ifdef __CARRIER_PLATFORM__ +#ifdef __CARRIER_PLATFORM__ #include #endif @@ -55,7 +55,7 @@ struct ieee80211_plcp_hdr { a_uint16_t i_crc; } adf_os_packed; -#define IEEE80211_PLCP_SFD 0xF3A0 +#define IEEE80211_PLCP_SFD 0xF3A0 #define IEEE80211_PLCP_SERVICE 0x00 /* @@ -339,7 +339,7 @@ enum CountryCode { CTRY_CANADA2 = 5001 /* Canada */ }; -/* +/* * Country information element. */ #define IEEE80211_COUNTRY_MAX_TRIPLETS (83) @@ -513,7 +513,7 @@ struct ieee80211_xr_param { } adf_os_packed; /* - * Management Action Frames + * Management Action Frames */ /* generic frame format */ @@ -535,7 +535,7 @@ struct ieee80211_action { /* HT - recommended transmission channel width */ struct ieee80211_action_ht_txchwidth { struct ieee80211_action at_header; - a_uint8_t at_chwidth; + a_uint8_t at_chwidth; } adf_os_packed; #define IEEE80211_A_HT_TXCHWIDTH_20 0 @@ -600,7 +600,7 @@ struct ieee80211_delba_parameterset { struct ieee80211_action_ba_addbarequest { struct ieee80211_action rq_header; a_uint8_t rq_dialogtoken; - struct ieee80211_ba_parameterset rq_baparamset; + struct ieee80211_ba_parameterset rq_baparamset; a_uint16_t rq_batimeout; /* in TUs */ struct ieee80211_ba_seqctrl rq_basequencectrl; } adf_os_packed; @@ -610,7 +610,7 @@ struct ieee80211_action_ba_addbaresponse { struct ieee80211_action rs_header; a_uint8_t rs_dialogtoken; a_uint16_t rs_statuscode; - struct ieee80211_ba_parameterset rs_baparamset; + struct ieee80211_ba_parameterset rs_baparamset; a_uint16_t rs_batimeout; /* in TUs */ } adf_os_packed; @@ -789,7 +789,7 @@ struct vendor_ie_htcap { /* HT capability flags */ #define IEEE80211_HTCAP_C_ADVCODING 0x0001 -#define IEEE80211_HTCAP_C_CHWIDTH40 0x0002 +#define IEEE80211_HTCAP_C_CHWIDTH40 0x0002 #define IEEE80211_HTCAP_C_SMPOWERSAVE_STATIC 0x0000 /* Capable of SM Power Save (Static) */ #define IEEE80211_HTCAP_C_SMPOWERSAVE_DYNAMIC 0x0004 /* Capable of SM Power Save (Dynamic) */ #define IEEE80211_HTCAP_C_SM_RESERVED 0x0008 /* Reserved */ @@ -801,10 +801,10 @@ struct vendor_ie_htcap { #define IEEE80211_HTCAP_C_RXSTBC 0x0100 /* 2 bits */ #define IEEE80211_HTCAP_C_DELAYEDBLKACK 0x0400 #define IEEE80211_HTCAP_C_MAXAMSDUSIZE 0x0800 /* 1 = 8K, 0 = 3839B */ -#define IEEE80211_HTCAP_C_DSSSCCK40 0x1000 -#define IEEE80211_HTCAP_C_PSMP 0x2000 -#define IEEE80211_HTCAP_C_INTOLERANT40 0x4000 -#define IEEE80211_HTCAP_C_LSIGTXOPPROT 0x8000 +#define IEEE80211_HTCAP_C_DSSSCCK40 0x1000 +#define IEEE80211_HTCAP_C_PSMP 0x2000 +#define IEEE80211_HTCAP_C_INTOLERANT40 0x4000 +#define IEEE80211_HTCAP_C_LSIGTXOPPROT 0x8000 #define IEEE80211_HTCAP_C_SM_MASK 0x000c /* Spatial Multiplexing (SM) capabitlity bitmask */ @@ -831,10 +831,10 @@ enum { /* HT extended capability flags */ #define IEEE80211_HTCAP_EXTC_PCO 0x0001 -#define IEEE80211_HTCAP_EXTC_TRANS_TIME_RSVD 0x0000 +#define IEEE80211_HTCAP_EXTC_TRANS_TIME_RSVD 0x0000 #define IEEE80211_HTCAP_EXTC_TRANS_TIME_400 0x0002 /* 20-40 switch time */ #define IEEE80211_HTCAP_EXTC_TRANS_TIME_1500 0x0004 /* in us */ -#define IEEE80211_HTCAP_EXTC_TRANS_TIME_5000 0x0006 +#define IEEE80211_HTCAP_EXTC_TRANS_TIME_5000 0x0006 #define IEEE80211_HTCAP_EXTC_RSVD_1 0x00f8 #define IEEE80211_HTCAP_EXTC_MCS_FEEDBACK_NONE 0x0000 #define IEEE80211_HTCAP_EXTC_MCS_FEEDBACK_RSVD 0x0100 @@ -898,23 +898,23 @@ struct vendor_ie_htinfo { /* extension channel offset (2 bit signed number) */ enum { - IEEE80211_HTINFO_EXTOFFSET_NA = 0, /* 0 no extension channel is present */ - IEEE80211_HTINFO_EXTOFFSET_ABOVE = 1, /* +1 extension channel above control channel */ - IEEE80211_HTINFO_EXTOFFSET_UNDEF = 2, /* -2 undefined */ + IEEE80211_HTINFO_EXTOFFSET_NA = 0, /* 0 no extension channel is present */ + IEEE80211_HTINFO_EXTOFFSET_ABOVE = 1, /* +1 extension channel above control channel */ + IEEE80211_HTINFO_EXTOFFSET_UNDEF = 2, /* -2 undefined */ IEEE80211_HTINFO_EXTOFFSET_BELOW = 3 /* -1 extension channel below control channel*/ }; /* recommended transmission width set */ enum { - IEEE80211_HTINFO_TXWIDTH_20, - IEEE80211_HTINFO_TXWIDTH_2040 + IEEE80211_HTINFO_TXWIDTH_20, + IEEE80211_HTINFO_TXWIDTH_2040 }; /* operating flags */ #define IEEE80211_HTINFO_OPMODE_PURE 0x00 /* no protection */ -#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_OPT 0x01 /* prot optional (legacy device maybe present) */ -#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_40 0x02 /* prot required (20 MHz) */ -#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_ALL 0x03 /* prot required (legacy devices present) */ +#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_OPT 0x01 /* prot optional (legacy device maybe present) */ +#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_40 0x02 /* prot required (20 MHz) */ +#define IEEE80211_HTINFO_OPMODE_MIXED_PROT_ALL 0x03 /* prot required (legacy devices present) */ #define IEEE80211_HTINFO_OPMODE_MASK 0x03 /* For protection 0x00-0x03 */ /* Non-greenfield STAs present */ @@ -1180,7 +1180,7 @@ enum { #define IEEE80211_WEP_EXTIV 0x20 #define IEEE80211_WEP_EXTIVLEN 4 /* extended IV length */ #define IEEE80211_WEP_MICLEN 8 /* trailing MIC */ -#define IEEE80211_WEP_ICVLEN 4 +#define IEEE80211_WEP_ICVLEN 4 #define IEEE80211_WAPI_MICLEN 16 /* trailing MIC */ #define IEEE80211_WAPI_IVLEN 16 @@ -1232,7 +1232,7 @@ A length of 3839 bytes is chosen here to support unaggregated data frames, any s #define IEEE80211_AID(b) ((b) &~ 0xc000) -/* +/* * RTS frame length parameters. The default is specified in * the 802.11 spec. The max may be wrong for jumbo frames. */ @@ -1240,7 +1240,7 @@ A length of 3839 bytes is chosen here to support unaggregated data frames, any s #define IEEE80211_RTS_MIN 1 #define IEEE80211_RTS_MAX 2346 -/* +/* * Regulatory extention identifier for country IE. */ #define IEEE80211_REG_EXT_ID 201 diff --git a/ath9k_htc/target_firmware/wlan/ieee80211_node.h b/ath9k_htc/target_firmware/wlan/ieee80211_node.h index 16d361c..a6f283f 100755 --- a/ath9k_htc/target_firmware/wlan/ieee80211_node.h +++ b/ath9k_htc/target_firmware/wlan/ieee80211_node.h @@ -52,7 +52,7 @@ struct ieee80211_node_table { }; #define IEEE80211_KEYBUF_SIZE 16 -#define IEEE80211_TID_SIZE 17 +#define IEEE80211_TID_SIZE 17 #define IEEE80211_MICBUF_SIZE (8+8) /* space for both tx+rx keys */ struct ieee80211_key_target { diff --git a/ath9k_htc/target_firmware/wlan/ieee80211_output.c b/ath9k_htc/target_firmware/wlan/ieee80211_output.c index 1230e2c..dcfe9d4 100755 --- a/ath9k_htc/target_firmware/wlan/ieee80211_output.c +++ b/ath9k_htc/target_firmware/wlan/ieee80211_output.c @@ -136,4 +136,4 @@ ieee80211_tgt_crypto_encap(struct ieee80211_frame *wh, #undef CRYPTO_KEY_TYPE_WAPI #undef IEEE80211_WLAN_HDR_LEN } -#undef IEEE80211_ADDR_LEN +#undef IEEE80211_ADDR_LEN diff --git a/ath9k_htc/target_firmware/wlan/ieee80211_var.h b/ath9k_htc/target_firmware/wlan/ieee80211_var.h index b410f66..c523413 100755 --- a/ath9k_htc/target_firmware/wlan/ieee80211_var.h +++ b/ath9k_htc/target_firmware/wlan/ieee80211_var.h @@ -47,7 +47,7 @@ /* * Built-in implementation for local skb free. Only interesting for platforms * that pass skbs between OS instances. - */ + */ #define ieee80211_tgt_free_local_nbuf( _nbuf) ieee80211_tgt_free_nbuf( _nbuf) @@ -219,4 +219,9 @@ ieee80211_anyhdrsize(const void *data) return ieee80211_hdrsize(data); } +a_status_t +ieee80211_tgt_crypto_encap(struct ieee80211_frame *wh, + struct ieee80211_node_target *ni, + a_uint8_t keytype); + #endif diff --git a/ath9k_htc/target_firmware/wlan/if_ath.c b/ath9k_htc/target_firmware/wlan/if_ath.c index 2d6a7f7..f8dee47 100755 --- a/ath9k_htc/target_firmware/wlan/if_ath.c +++ b/ath9k_htc/target_firmware/wlan/if_ath.c @@ -56,6 +56,8 @@ #include "if_athvar.h" #include "ah_desc.h" #include "ah.h" +#include "ratectrl.h" +#include "ah_internal.h" static a_int32_t ath_numrxbufs = -1; static a_int32_t ath_numrxdescs = -1; @@ -327,13 +329,11 @@ static void ath_uapsd_processtriggers(struct ath_softc_tgt *sc) a_int32_t retval; a_uint32_t cnt = 0; a_uint16_t frame_len = 0; - a_uint64_t tsf; #define PA2DESC(_sc, _pa) \ ((struct ath_desc *)((caddr_t)(_sc)->sc_rxdma.dd_desc + \ ((_pa) - (_sc)->sc_rxdma.dd_desc_paddr))) - tsf = ah->ah_getTsf64(ah); bf = asf_tailq_first(&sc->sc_rxbuf); ds = asf_tailq_first(&sc->sc_rxdesc); @@ -583,24 +583,21 @@ static void ath_tgt_send_beacon(struct ath_softc_tgt *sc, adf_nbuf_t bc_hdr, struct ath_hal *ah = sc->sc_ah; struct ath_tx_buf *bf; a_uint8_t vap_index, *anbdata; - ath_beacon_hdr_t *bhdr; - struct ieee80211vap_target *vap; + ath_beacon_hdr_t *bhdr = NULL; a_uint32_t anblen; - struct ieee80211_frame *wh; if (!bc_hdr) { adf_nbuf_peek_header(nbuf, &anbdata, &anblen); bhdr = (ath_beacon_hdr_t *)anbdata; } else { adf_os_print("found bc_hdr! 0x%x\n", bc_hdr); + adf_os_assert(0); } vap_index = bhdr->vap_index; adf_os_assert(vap_index < TARGET_VAP_MAX); - vap = &sc->sc_vap[vap_index].av_vap; - wh = (struct ieee80211_frame *)adf_nbuf_pull_head(nbuf, - sizeof(ath_beacon_hdr_t)); + adf_nbuf_pull_head(nbuf, sizeof(ath_beacon_hdr_t)); bf = sc->sc_vap[vap_index].av_bcbuf; adf_os_assert(bf); @@ -763,6 +760,7 @@ static void tgt_HTCRecvMessageHandler(HTC_ENDPOINT_ID EndPt, bf->bf_endpt = EndPt; bf->bf_cookie = dh->cookie; + bf->vap_index = dh->vap_index; if (tid->flag & TID_AGGR_ENABLED) ath_tgt_handle_aggr(sc, bf); @@ -874,7 +872,6 @@ static void ath_descdma_cleanup(struct ath_softc_tgt *sc, ath_bufhead *head, a_int32_t dir) { struct ath_buf *bf; - struct ieee80211_node_target *ni; asf_tailq_foreach(bf, head, bf_list) { if (adf_nbuf_queue_len(&bf->bf_skbhead) != 0) { @@ -892,7 +889,6 @@ static void ath_descdma_cleanup(struct ath_softc_tgt *sc, adf_nbuf_dmamap_destroy(sc->sc_dev, bf->bf_dmamap); - ni = bf->bf_node; bf->bf_node = NULL; } @@ -1104,9 +1100,9 @@ static void ath_enable_intr_tgt(void *Context, A_UINT16 Command, { struct ath_softc_tgt *sc = (struct ath_softc_tgt *)Context; struct ath_hal *ah = sc->sc_ah; - a_uint32_t intr; + a_uint32_t intr = 0; - if (data) + if (datalen == 4) intr = (*(a_uint32_t *)data); intr = adf_os_ntohl(intr); @@ -1619,11 +1615,14 @@ static void ath_stop_tx_dma_tgt(void *Context, A_UINT16 Command, struct ath_hal *ah = sc->sc_ah; a_uint32_t q; - if (data) - q = *(a_uint32_t *)data; + if (!datalen) + goto done; + + q = *(a_uint32_t *)data; q = adf_os_ntohl(q); ah->ah_stopTxDma(ah, q); +done: wmi_cmd_rsp(sc->tgt_wmi_handle, Command, SeqNo, NULL, 0); } diff --git a/ath9k_htc/target_firmware/wlan/if_ath_pci.c b/ath9k_htc/target_firmware/wlan/if_ath_pci.c index c261206..19b0330 100755 --- a/ath9k_htc/target_firmware/wlan/if_ath_pci.c +++ b/ath9k_htc/target_firmware/wlan/if_ath_pci.c @@ -1,40 +1,43 @@ /*- * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting * Copyright (c) 2004 Atheros Communications, Inc. + * Copyright (c) 2013 Qualcomm Atheros, 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, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * - * NO WARRANTY - * 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 NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. - * - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/madwifi/ath/if_ath_pci.c#1 $ + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ #ifndef EXPORT_SYMTAB diff --git a/ath9k_htc/target_firmware/wlan/if_ath_pci.h b/ath9k_htc/target_firmware/wlan/if_ath_pci.h index dc5a1da..b7e3719 100755 --- a/ath9k_htc/target_firmware/wlan/if_ath_pci.h +++ b/ath9k_htc/target_firmware/wlan/if_ath_pci.h @@ -1,42 +1,45 @@ /*- * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting * Copyright (c) 2004 Atheros Communications, Inc. + * Copyright (c) 2013 Qualcomm Atheros, 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, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * - * NO WARRANTY - * 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 NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. - * - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/madwifi/ath/if_ath_pci.h#1 $ + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ - + #ifndef _DEV_ATH_PCI_H_ #define _DEV_ATH_PCI_H_ diff --git a/ath9k_htc/target_firmware/wlan/if_athrate.h b/ath9k_htc/target_firmware/wlan/if_athrate.h index 44e820d..ca9d2fb 100755 --- a/ath9k_htc/target_firmware/wlan/if_athrate.h +++ b/ath9k_htc/target_firmware/wlan/if_athrate.h @@ -1,40 +1,43 @@ /*- * Copyright (c) 2004 Sam Leffler, Errno Consulting * Copyright (c) 2004 Video54 Technologies, Inc. + * Copyright (c) 2013 Qualcomm Atheros, 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, - without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * - * NO WARRANTY - * 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 NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. - * - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/madwifi/ath/if_athrate.h#2 $ + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ #ifndef _ATH_RATECTRL_H_ #define _ATH_RATECTRL_H_ @@ -58,20 +61,20 @@ struct ath_ratectrl { #define ATH_RC_RTSCTS_FLAG 0x10 #define ATH_RC_TX_STBC_FLAG 0x20 /* TX STBC */ #define ATH_RC_RX_STBC_FLAG 0xC0 /* RX STBC ,2 bits */ -#define ATH_RC_RX_STBC_FLAG_S 6 +#define ATH_RC_RX_STBC_FLAG_S 6 #define ATH_RC_WEP_TKIP_FLAG 0x100 /* WEP/TKIP encryption */ enum ath_rc_cwmode{ ATH_RC_CW20_MODE, - ATH_RC_CW40_MODE, + ATH_RC_CW40_MODE, }; #define ATH_RC_PROBE_ALLOWED 0x00000001 #define ATH_RC_MINRATE_LASTRATE 0x00000002 struct ath_rc_series { - a_uint8_t rix; - a_uint8_t tries; + a_uint8_t rix; + a_uint8_t tries; u_int8_t tx_chainmask; a_uint8_t flags; a_uint32_t max4msframelen; @@ -110,7 +113,13 @@ void ath_rate_tx_complete(struct ath_softc_tgt *, struct ath_node_target *, a_int32_t nframes, a_int32_t nbad); -void ath_rate_stateupdate(struct ath_softc_tgt *sc, struct ath_node_target *an, +void ath_rate_stateupdate(struct ath_softc_tgt *sc, struct ath_node_target *an, enum ath_rc_cwmode cwmode); + +void ath_tx_status_update_rate(struct ath_softc_tgt *sc, + struct ath_rc_series rcs[], + int series, + WMI_TXSTATUS_EVENT *txs); + #endif /* _ATH_RATECTRL_H_ */ diff --git a/ath9k_htc/target_firmware/wlan/if_athvar.h b/ath9k_htc/target_firmware/wlan/if_athvar.h index 2c42ee3..7826869 100755 --- a/ath9k_htc/target_firmware/wlan/if_athvar.h +++ b/ath9k_htc/target_firmware/wlan/if_athvar.h @@ -225,6 +225,7 @@ struct ath_tx_buf HTC_ENDPOINT_ID bf_endpt; a_uint16_t al_delta; a_uint8_t bf_cookie; + a_uint8_t vap_index; }; struct ath_rx_buf @@ -488,5 +489,14 @@ typedef enum { } owl_txq_state_t; a_uint8_t ath_get_minrateidx(struct ath_softc_tgt *sc, struct ath_vap_target *avp); +void ath_tgt_tx_cleanup(struct ath_softc_tgt *sc, struct ath_node_target *an, + ath_atx_tid_t *tid, a_uint8_t discard_all); +void ath_tgt_handle_normal(struct ath_softc_tgt *sc, struct ath_tx_buf *bf); +void ath_tgt_handle_aggr(struct ath_softc_tgt *sc, struct ath_tx_buf *bf); +void ath_tgt_tid_drain(struct ath_softc_tgt *sc, struct ath_atx_tid *tid); +void ath_tx_status_clear(struct ath_softc_tgt *sc); + +void wmi_event(wmi_handle_t handle, WMI_EVENT_ID evt_id, + void *buffer, a_int32_t Length); #endif /* _DEV_ATH_ATHVAR_H */ diff --git a/ath9k_htc/target_firmware/wlan/if_llc.h b/ath9k_htc/target_firmware/wlan/if_llc.h index f6d8e17..5fb1ba1 100755 --- a/ath9k_htc/target_firmware/wlan/if_llc.h +++ b/ath9k_htc/target_firmware/wlan/if_llc.h @@ -1,43 +1,43 @@ /*- * Copyright (c) 2002-2004 Sam Leffler, Errno Consulting + * Copyright (c) 2013 Qualcomm Atheros, 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, - * without modification. - * 2. Redistributions in binary form must reproduce at minimum a disclaimer - * similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any - * redistribution must be conditioned upon including a substantially - * similar Disclaimer requirement for further binary redistribution. - * 3. Neither the names of the above-listed copyright holders nor the names - * of any contributors may be used to endorse or promote products derived + * modification, are permitted (subject to the limitations in the + * disclaimer below) 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 Qualcomm Atheros nor the names of its + * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * Alternatively, this software may be distributed under the terms of the * GNU General Public License ("GPL") version 2 as published by the Free * Software Foundation. * - * NO WARRANTY - * 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 NONINFRINGEMENT, MERCHANTIBILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR 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 DAMAGES. - * - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/madwifi/net80211/if_llc.h#1 $ - * $NetBSD: if_llc.h,v 1.12 1999/11/19 20:41:19 thorpej Exp $ - * $Id: //depot/sw/branches/fusion_usb/target_firmware/wlan/target/madwifi/net80211/if_llc.h#1 $ + * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE + * GRANTED BY THIS LICENSE. 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. */ - /* * Copyright (c) 1988, 1993 * The Regents of the University of California. All rights reserved. diff --git a/ath9k_htc/target_firmware/wlan/if_owl.c b/ath9k_htc/target_firmware/wlan/if_owl.c index e891de5..6dda78c 100755 --- a/ath9k_htc/target_firmware/wlan/if_owl.c +++ b/ath9k_htc/target_firmware/wlan/if_owl.c @@ -57,6 +57,7 @@ #include "if_athrate.h" #include "if_athvar.h" #include "ah_desc.h" +#include "ah_internal.h" #define ath_tgt_free_skb adf_nbuf_free @@ -147,6 +148,8 @@ static void ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) int ath_tgt_tx_add_to_aggr(struct ath_softc_tgt *sc, struct ath_buf *bf,int datatype, ath_atx_tid_t *tid, int is_burst); +int ath_tgt_tx_form_aggr(struct ath_softc_tgt *sc, ath_atx_tid_t *tid, + ath_tx_bufhead *bf_q); struct ieee80211_frame *ATH_SKB_2_WH(adf_nbuf_t skb) { @@ -228,9 +231,7 @@ static void ath_dma_map(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) static void ath_dma_unmap(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) { - adf_nbuf_t skb = bf->bf_skb; - - skb = adf_nbuf_queue_first(&bf->bf_skbhead); + adf_nbuf_queue_first(&bf->bf_skbhead); adf_nbuf_unmap( sc->sc_dev, bf->bf_dmamap, ADF_OS_DMA_TO_DEVICE); } @@ -881,14 +882,13 @@ static void ath_tgt_txq_add_ucast(struct ath_softc_tgt *sc, struct ath_tx_buf *b { struct ath_hal *ah = sc->sc_ah; struct ath_txq *txq; - HAL_STATUS status; volatile a_int32_t txe_val; adf_os_assert(bf); txq = bf->bf_txq; - status = ah->ah_procTxDesc(ah, bf->bf_lastds); + ah->ah_procTxDesc(ah, bf->bf_lastds); ATH_TXQ_INSERT_TAIL(txq, bf, bf_list); @@ -969,9 +969,13 @@ ath_tgt_tx_send_normal(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) rcs, &isProbe); ath_hal_memcpy(bf->bf_rcs, rcs, sizeof(rcs)); } else { + struct ath_vap_target *avp; + + avp = &sc->sc_vap[bf->vap_index]; + mrcs[1].tries = mrcs[2].tries = mrcs[3].tries = 0; mrcs[1].rix = mrcs[2].rix = mrcs[3].rix = 0; - mrcs[0].rix = 0; + mrcs[0].rix = ath_get_minrateidx(sc, avp); mrcs[0].tries = 1; mrcs[0].flags = 0; ath_hal_memcpy(bf->bf_rcs, mrcs, sizeof(mrcs)); @@ -1023,13 +1027,15 @@ static void ath_update_stats(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) { struct ath_tx_desc *ds = bf->bf_desc; + struct ieee80211_frame *wh = ATH_SKB2_WH(bf->bf_skb); u_int32_t sr, lr; if (ds->ds_txstat.ts_status == 0) { if (ds->ds_txstat.ts_rate & HAL_TXSTAT_ALTRATE) sc->sc_tx_stats.ast_tx_altrate++; } else { - if (ds->ds_txstat.ts_status & HAL_TXERR_XRETRY) + if (ds->ds_txstat.ts_status & HAL_TXERR_XRETRY && + !IEEE80211_IS_MULTICAST(wh->i_addr1)) sc->sc_tx_stats.ast_tx_xretries++; if (ds->ds_txstat.ts_status & HAL_TXERR_FIFO) sc->sc_tx_stats.ast_tx_fifoerr++; @@ -1741,21 +1747,13 @@ ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) struct ath_tx_desc lastds; struct ath_tx_desc *ds = &lastds; struct ath_rc_series rcs[4]; - u_int16_t seq_st; - u_int32_t *ba; - int ba_index; int nbad = 0; int nframes = bf->bf_nframes; struct ath_tx_buf *bf_next; - int tx_ok = 1; adf_os_mem_copy(ds, bf->bf_lastds, sizeof (struct ath_tx_desc)); adf_os_mem_copy(rcs, bf->bf_rcs, sizeof(rcs)); - seq_st = ATH_DS_BA_SEQ(ds); - ba = ATH_DS_BA_BITMAP(ds); - tx_ok = (ATH_DS_TX_STATUS(ds) == HAL_OK); - if (!bf->bf_isaggr) { ath_update_stats(sc, bf); @@ -1774,7 +1772,6 @@ ath_tx_comp_cleanup(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) } while (bf) { - ba_index = ATH_BA_INDEX(seq_st, SEQNO_FROM_BF_SEQNO(bf->bf_seqno)); bf_next = bf->bf_next; ath_tx_status_update_aggr(sc, bf, ds, rcs, 0); @@ -1961,9 +1958,6 @@ void ath_tgt_tx_cleanup(struct ath_softc_tgt *sc, struct ath_node_target *an, { struct ath_tx_buf *bf; struct ath_tx_buf *bf_next; - struct ath_txq *txq; - - txq = TID_TO_ACTXQ(tid->tidno); bf = asf_tailq_first(&tid->buf_q); @@ -2060,11 +2054,9 @@ static void ath_bar_tx_comp(struct ath_softc_tgt *sc, struct ath_tx_buf *bf) struct ath_tx_desc *ds = bf->bf_lastds; struct ath_node_target *an; ath_atx_tid_t *tid; - struct ath_txq *txq; an = (struct ath_node_target *)bf->bf_node; tid = &an->tid[bf->bf_tidno]; - txq = TID_TO_ACTXQ(tid->tidno); if (ATH_DS_TX_STATUS(ds) & HAL_TXERR_XRETRY) { ath_bar_retry(sc, bf); @@ -2087,7 +2079,6 @@ static void ath_bar_tx(struct ath_softc_tgt *sc, struct ath_hal *ah = sc->sc_ah; HAL_11N_RATE_SERIES series[4]; int i = 0; - adf_nbuf_queue_t skbhead; a_uint8_t *anbdata; a_uint32_t anblen; @@ -2138,7 +2129,6 @@ static void ath_bar_tx(struct ath_softc_tgt *sc, | HAL_TXDESC_CLRDMASK , 0, 0); - skbhead = bf->bf_skbhead; bf->bf_isaggr = 0; bf->bf_next = NULL; diff --git a/ath9k_htc/target_firmware/wlan/include/htc.h b/ath9k_htc/target_firmware/wlan/include/htc.h index a445a1f..15cdfee 100755 --- a/ath9k_htc/target_firmware/wlan/include/htc.h +++ b/ath9k_htc/target_firmware/wlan/include/htc.h @@ -42,8 +42,8 @@ #define ASSEMBLE_UNALIGNED_UINT16(p,highbyte,lowbyte) \ (((a_uint16_t)(((a_uint8_t *)(p))[(highbyte)])) << 8 | (a_uint16_t)(((a_uint8_t *)(p))[(lowbyte)])) - -/* alignment independent macros (little-endian) to fetch UINT16s or UINT8s from a + +/* alignment independent macros (little-endian) to fetch UINT16s or UINT8s from a * structure using only the type and field name. * Use these macros if there is the potential for unaligned buffer accesses. */ #define A_GET_UINT16_FIELD(p,type,field) \ @@ -56,23 +56,23 @@ ((a_uint8_t *)(p))[A_OFFSETOF(type,field)] = (a_uint8_t)((value) >> 8); \ ((a_uint8_t *)(p))[A_OFFSETOF(type,field) + 1] = (a_uint8_t)(value); \ } - + #define A_GET_UINT8_FIELD(p,type,field) \ ((a_uint8_t *)(p))[A_OFFSETOF(type,field)] - + #define A_SET_UINT8_FIELD(p,type,field,value) \ ((a_uint8_t *)(p))[A_OFFSETOF(type,field)] = (value) /****** DANGER DANGER *************** - * + * * The frame header length and message formats defined herein were * selected to accommodate optimal alignment for target processing. This reduces code * size and improves performance. - * + * * Any changes to the header length may alter the alignment and cause exceptions * on the target. When adding to the message structures insure that fields are * properly aligned. - * + * */ /* endpoint defines */ @@ -80,8 +80,8 @@ typedef enum { ENDPOINT_UNUSED = -1, ENDPOINT0 = 0, /* this is reserved for the control endpoint */ - ENDPOINT1 = 1, - ENDPOINT2 = 2, + ENDPOINT1 = 1, + ENDPOINT2 = 2, ENDPOINT3 = 3, ENDPOINT4, ENDPOINT5, @@ -99,13 +99,13 @@ typedef PREPACK struct _HTC_FRAME_HDR{ a_uint8_t EndpointID; a_uint8_t Flags; a_uint16_t PayloadLen; /* length of data (including trailer) that follows the header */ - + /***** end of 4-byte lookahead ****/ - + a_uint8_t ControlBytes[4]; - + /* message payload starts after the header */ - + } POSTPACK HTC_FRAME_HDR; /* frame header flags */ @@ -121,24 +121,24 @@ typedef PREPACK struct _HTC_FRAME_HDR{ typedef enum { HTC_MSG_READY_ID = 1, HTC_MSG_CONNECT_SERVICE_ID = 2, - HTC_MSG_CONNECT_SERVICE_RESPONSE_ID = 3, + HTC_MSG_CONNECT_SERVICE_RESPONSE_ID = 3, HTC_MSG_SETUP_COMPLETE_ID = 4, HTC_MSG_CONFIG_PIPE_ID = 5, HTC_MSG_CONFIG_PIPE_RESPONSE_ID = 6, } HTC_MSG_IDS; - + #define HTC_MAX_CONTROL_MESSAGE_LENGTH 256 - + /* base message ID header */ typedef PREPACK struct { - a_uint16_t MessageID; + a_uint16_t MessageID; } POSTPACK HTC_UNKNOWN_MSG; - + /* HTC ready message * direction : target-to-host */ typedef PREPACK struct { a_uint16_t MessageID; /* ID */ - a_uint16_t CreditCount; /* number of credits the target can offer */ + a_uint16_t CreditCount; /* number of credits the target can offer */ a_uint16_t CreditSize; /* size of each credit */ a_uint8_t MaxEndpoints; /* maximum number of endpoints the target has resources for */ a_uint8_t _Pad1; @@ -150,24 +150,24 @@ typedef PREPACK struct { * direction : host-to-target */ typedef PREPACK struct { a_uint16_t MessageID; - a_uint16_t ServiceID; /* service ID of the service to connect to */ + a_uint16_t ServiceID; /* service ID of the service to connect to */ a_uint16_t ConnectionFlags; /* connection flags */ a_uint8_t DownLinkPipeID; a_uint8_t UpLinkPipeID; -#define HTC_CONNECT_FLAGS_REDUCE_CREDIT_DRIBBLE (1 << 2) /* reduce credit dribbling when - the host needs credits */ -#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK (0x3) +#define HTC_CONNECT_FLAGS_REDUCE_CREDIT_DRIBBLE (1 << 2) /* reduce credit dribbling when + the host needs credits */ +#define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_MASK (0x3) #define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_FOURTH 0x0 #define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_ONE_HALF 0x1 #define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_THREE_FOURTHS 0x2 #define HTC_CONNECT_FLAGS_THRESHOLD_LEVEL_UNITY 0x3 - + a_uint8_t ServiceMetaLength; /* length of meta data that follows */ a_uint8_t _Pad1; - + /* service-specific meta data starts after the header */ - + } POSTPACK HTC_CONNECT_SERVICE_MSG; /* connect response @@ -175,14 +175,14 @@ typedef PREPACK struct { typedef PREPACK struct { a_uint16_t MessageID; a_uint16_t ServiceID; /* service ID that the connection request was made */ - a_uint8_t Status; /* service connection status */ + a_uint8_t Status; /* service connection status */ a_uint8_t EndpointID; /* assigned endpoint ID */ a_uint16_t MaxMsgSize; /* maximum expected message size on this endpoint */ a_uint8_t ServiceMetaLength; /* length of meta data that follows */ - a_uint8_t _Pad1; - + a_uint8_t _Pad1; + /* service-specific meta data starts after the header */ - + } POSTPACK HTC_CONNECT_SERVICE_RESPONSE_MSG; typedef PREPACK struct { @@ -194,26 +194,26 @@ typedef PREPACK struct { * direction : host-to-target */ typedef PREPACK struct { a_uint16_t MessageID; - a_uint8_t PipeID; /* Pipe ID of the service to connect to */ - a_uint8_t CreditCount; /* CreditCount */ - //a_uint8_t _Pad1; + a_uint8_t PipeID; /* Pipe ID of the service to connect to */ + a_uint8_t CreditCount; /* CreditCount */ + //a_uint8_t _Pad1; } POSTPACK HTC_CONFIG_PIPE_MSG; /* config pipe * direction : host-to-target */ typedef PREPACK struct { a_uint16_t MessageID; - a_uint8_t PipeID; /* Pipe ID of the service to connect to */ - a_uint8_t Status; /* status */ - //a_uint8_t _Pad1; + a_uint8_t PipeID; /* Pipe ID of the service to connect to */ + a_uint8_t Status; /* status */ + //a_uint8_t _Pad1; } POSTPACK HTC_CONFIG_PIPE_RESPONSE_MSG; /* connect response status codes */ #define HTC_SERVICE_SUCCESS 0 /* success */ #define HTC_SERVICE_NOT_FOUND 1 /* service could not be found */ #define HTC_SERVICE_FAILED 2 /* specific service failed the connect */ -#define HTC_SERVICE_NO_RESOURCES 3 /* no resources (i.e. no more endpoints) */ -#define HTC_SERVICE_NO_MORE_EP 4 /* specific service is not allowing any more +#define HTC_SERVICE_NO_RESOURCES 3 /* no resources (i.e. no more endpoints) */ +#define HTC_SERVICE_NO_MORE_EP 4 /* specific service is not allowing any more endpoints */ /* shihhung: config pipe response status code */ @@ -225,7 +225,7 @@ typedef PREPACK struct { typedef enum { HTC_RECORD_NULL = 0, HTC_RECORD_CREDITS = 1, - HTC_RECORD_LOOKAHEAD = 2, + HTC_RECORD_LOOKAHEAD = 2, } HTC_RPT_IDS; typedef PREPACK struct { @@ -238,14 +238,14 @@ typedef PREPACK struct { a_uint8_t Credits; /* credits to report since last report */ } POSTPACK HTC_CREDIT_REPORT; -typedef PREPACK struct { +typedef PREPACK struct { a_uint8_t PreValid; /* pre valid guard */ a_uint8_t LookAhead[4]; /* 4 byte lookahead */ a_uint8_t PostValid; /* post valid guard */ - + /* NOTE: the LookAhead array is guarded by a PreValid and Post Valid guard bytes. * The PreValid bytes must equal the inverse of the PostValid byte */ - + } POSTPACK HTC_LOOKAHEAD_REPORT; #ifndef ATH_TARGET diff --git a/ath9k_htc/target_firmware/wlan/include/htc_services.h b/ath9k_htc/target_firmware/wlan/include/htc_services.h index d2ae5fc..41e437c 100755 --- a/ath9k_htc/target_firmware/wlan/include/htc_services.h +++ b/ath9k_htc/target_firmware/wlan/include/htc_services.h @@ -39,8 +39,8 @@ typedef enum { RSVD_SERVICE_GROUP = 0, - WMI_SERVICE_GROUP = 1, - + WMI_SERVICE_GROUP = 1, + HTC_TEST_GROUP = 254, HTC_SERVICE_GROUP_LAST = 255 } HTC_SERVICE_GROUP_IDS; @@ -53,8 +53,8 @@ typedef enum { #define HTC_LOOPBACK_RSVD_SVC MAKE_SERVICE_ID(RSVD_SERVICE_GROUP,2) #define WMI_CONTROL_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,0) -#define WMI_BEACON_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,1) -#define WMI_CAB_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,2) +#define WMI_BEACON_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,1) +#define WMI_CAB_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,2) #define WMI_UAPSD_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,3) #define WMI_MGMT_SVC MAKE_SERVICE_ID(WMI_SERVICE_GROUP,4) diff --git a/ath9k_htc/target_firmware/wlan/include/k2/wlan_cfg.h b/ath9k_htc/target_firmware/wlan/include/k2/wlan_cfg.h index ce42d2c..85a04c9 100755 --- a/ath9k_htc/target_firmware/wlan/include/k2/wlan_cfg.h +++ b/ath9k_htc/target_firmware/wlan/include/k2/wlan_cfg.h @@ -82,7 +82,7 @@ #define ATH_VERSION_MAJOR 1 #define ATH_VERSION_MINOR 4 - + /************************** HAL configurations **************************/ #define HAL_DESC_OPTIMIZATION diff --git a/ath9k_htc/target_firmware/wlan/include/magpie/wlan_cfg.h b/ath9k_htc/target_firmware/wlan/include/magpie/wlan_cfg.h index 2590e9f..ebd7a69 100755 --- a/ath9k_htc/target_firmware/wlan/include/magpie/wlan_cfg.h +++ b/ath9k_htc/target_firmware/wlan/include/magpie/wlan_cfg.h @@ -63,7 +63,7 @@ #define ATH_NO_VIRTUAL_MEMORY //#define ATH_SUPPORT_XB_ONLY -#define ATH_SUPPORT_A_MODE +#define ATH_SUPPORT_A_MODE #define ATH_VERSION_MAJOR 1 #define ATH_VERSION_MINOR 4 diff --git a/ath9k_htc/target_firmware/wlan/include/wlan_hdr.h b/ath9k_htc/target_firmware/wlan/include/wlan_hdr.h index cfcfa0a..b343637 100755 --- a/ath9k_htc/target_firmware/wlan/include/wlan_hdr.h +++ b/ath9k_htc/target_firmware/wlan/include/wlan_hdr.h @@ -61,8 +61,8 @@ typedef struct _mgt_header { } POSTPACK ath_mgt_hdr_t; typedef struct _beacon_header { - a_uint8_t vap_index; - a_uint8_t len_changed; + a_uint8_t vap_index; + a_uint8_t len_changed; a_uint16_t reserved; } ath_beacon_hdr_t; @@ -79,7 +79,7 @@ typedef struct __data_header { a_uint8_t ni_index; a_uint8_t vap_index; a_uint8_t tidno; - a_uint32_t flags; + a_uint32_t flags; a_int8_t keytype; a_int8_t keyix; a_uint8_t cookie; @@ -101,7 +101,7 @@ struct ieee80211com_target { #define VAP_TARGET_SIZE 12 -struct ieee80211vap_target +struct ieee80211vap_target { a_uint8_t iv_vapindex; a_uint8_t iv_opmode; /* enum ieee80211_opmode */ @@ -170,11 +170,11 @@ struct ath_tx_stats { a_uint32_t ast_tx_altrate; /* tx frames with alternate rate */ a_uint32_t ast_tx_protect; /* tx frames with protection */ - a_uint32_t tx_tgt; /* tx data pkts recieved on target */ + a_uint32_t tx_tgt; /* tx data pkts recieved on target */ a_uint32_t tx_qnull; /* txq empty occurences */ a_uint32_t txaggr_nframes; /* no. of frames aggregated */ - a_uint32_t tx_compunaggr; /* tx unaggregated frame completions */ + a_uint32_t tx_compunaggr; /* tx unaggregated frame completions */ a_uint32_t tx_compaggr; /* tx aggregated completions */ a_uint32_t txaggr_retries; /* tx retries of sub frames */ a_uint32_t txaggr_single; /* tx frames not aggregated */ @@ -219,7 +219,7 @@ struct ath_aggr_info { a_uint8_t tidno; a_uint8_t aggr_enable; a_uint8_t padding; -}; +}; struct wmi_data_delba { a_uint8_t ni_nodeindex; @@ -233,4 +233,4 @@ struct wmi_fw_version { a_uint16_t minor; }; -#endif +#endif diff --git a/ath9k_htc/target_firmware/wlan/include/wmi.h b/ath9k_htc/target_firmware/wlan/include/wmi.h index 1c66797..194c38e 100755 --- a/ath9k_htc/target_firmware/wlan/include/wmi.h +++ b/ath9k_htc/target_firmware/wlan/include/wmi.h @@ -103,13 +103,13 @@ typedef enum { typedef PREPACK struct { - a_int8_t rssi; + a_int8_t rssi; a_uint8_t info; /* WMI_MSG_TYPE in lower 2 bits - b1b0 */ /* UP in next 3 bits - b4b3b2 */ #define WMI_DATA_HDR_MSG_TYPE_MASK 0x03 #define WMI_DATA_HDR_MSG_TYPE_SHIFT 0 #define WMI_DATA_HDR_UP_MASK 0x07 -#define WMI_DATA_HDR_UP_SHIFT 2 +#define WMI_DATA_HDR_UP_SHIFT 2 #define WMI_DATA_HDR_IS_MSG_TYPE(h, t) (((h)->info & (WMI_DATA_HDR_MSG_TYPE_MASK)) == (t)) } POSTPACK WMI_DATA_HDR; @@ -174,7 +174,7 @@ typedef enum { WMI_FRAME_PROBE_RESP, WMI_FRAME_ASSOC_REQ, WMI_FRAME_ASSOC_RESP, - WMI_NUM_MGMT_FRAME + WMI_NUM_MGMT_FRAME } WMI_MGMT_FRAME_TYPE; /* @@ -194,7 +194,7 @@ typedef enum { } DOT11_AUTH_MODE; typedef enum { - NONE_AUTH = 0x01, + NONE_AUTH = 0x01, WPA_AUTH = 0x02, WPA_PSK_AUTH = 0x03, WPA2_AUTH = 0x04, diff --git a/ath9k_htc/target_firmware/wlan/ratectrl.h b/ath9k_htc/target_firmware/wlan/ratectrl.h index 08b5457..68c021f 100755 --- a/ath9k_htc/target_firmware/wlan/ratectrl.h +++ b/ath9k_htc/target_firmware/wlan/ratectrl.h @@ -115,7 +115,7 @@ enum { #define RX_FLIP_THRESHOLD 3 /* XXX */ -#ifdef MAGPIE_MERLIN +#ifdef MAGPIE_MERLIN #define MAX_TX_RATE_TBL 46 #else #define MAX_TX_RATE_TBL 54//46 @@ -149,7 +149,7 @@ typedef struct TxRateCtrl_s { typedef struct phy_rate_ctrl { /* 11n state */ A_UINT8 validPhyRateCount[WLAN_RC_PHY_MAX]; /* valid rate count */ - A_UINT8 validPhyRateIndex[WLAN_RC_PHY_MAX][MAX_TX_RATE_TBL]; /* index */ + A_UINT8 validPhyRateIndex[WLAN_RC_PHY_MAX][MAX_TX_RATE_TBL]; /* index */ }PHY_STATE_CTRL; /* per-node state */ @@ -272,7 +272,7 @@ void rcSibInit(struct ath_softc_tgt *, struct ath_node_target *); /* * Determines and returns the new Tx rate index. - */ + */ A_UINT16 rcRateFind(struct ath_softc_tgt *, struct atheros_node *, A_UINT32 frameLen,const RATE_TABLE *pRateTable); @@ -284,4 +284,17 @@ struct fusion_rate_info { void ar5416AttachRateTables(struct atheros_softc *sc); +void ath_rate_node_update(struct ath_softc_tgt *sc, + struct ath_node_target *an, + a_int32_t isnew, + a_uint32_t capflag, + struct ieee80211_rate *rs); + + +void ath_rate_newstate(struct ath_softc_tgt *sc, + struct ieee80211vap_target *vap, + enum ieee80211_state state, + a_uint32_t capflag, + struct ieee80211_rate *rs); + #endif /* _RATECTRL_H_ */ diff --git a/ath9k_htc/target_firmware/wlan/ratectrl11n.h b/ath9k_htc/target_firmware/wlan/ratectrl11n.h index 1123feb..ccd6f77 100755 --- a/ath9k_htc/target_firmware/wlan/ratectrl11n.h +++ b/ath9k_htc/target_firmware/wlan/ratectrl11n.h @@ -40,8 +40,8 @@ * used only in 20 mode. If both 20/40 bits are enabled * then that rate can be used for both 20 and 40 mode */ -#define TRUE_20 0x2 -#define TRUE_40 0x4 +#define TRUE_20 0x2 +#define TRUE_40 0x4 #define TRUE_2040 (TRUE_20|TRUE_40) #define TRUE_ALL_11N (TRUE_2040|TRUE) @@ -62,19 +62,19 @@ typedef enum { #define WLAN_RC_PHY_DS(_phy) ((_phy == WLAN_RC_PHY_HT_20_DS) \ || (_phy == WLAN_RC_PHY_HT_40_DS) \ || (_phy == WLAN_RC_PHY_HT_20_DS_HGI) \ - || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) + || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) #define WLAN_RC_PHY_40(_phy) ((_phy == WLAN_RC_PHY_HT_40_SS) \ || (_phy == WLAN_RC_PHY_HT_40_DS) \ || (_phy == WLAN_RC_PHY_HT_40_SS_HGI) \ - || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) + || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) #define WLAN_RC_PHY_20(_phy) ((_phy == WLAN_RC_PHY_HT_20_SS) \ || (_phy == WLAN_RC_PHY_HT_20_DS) \ || (_phy == WLAN_RC_PHY_HT_20_SS_HGI) \ - || (_phy == WLAN_RC_PHY_HT_20_DS_HGI)) + || (_phy == WLAN_RC_PHY_HT_20_DS_HGI)) #define WLAN_RC_PHY_SGI(_phy) ((_phy == WLAN_RC_PHY_HT_20_SS_HGI) \ || (_phy == WLAN_RC_PHY_HT_20_DS_HGI) \ || (_phy == WLAN_RC_PHY_HT_40_SS_HGI) \ - || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) + || (_phy == WLAN_RC_PHY_HT_40_DS_HGI)) #define WLAN_RC_PHY_HT(_phy) (_phy >= WLAN_RC_PHY_HT_20_SS) @@ -102,7 +102,7 @@ typedef enum { #define WLAN_RC_WEP_TKIP_FLAG (0x100) /* Index into the rate table */ -#define INIT_RATE_MAX_20 23 +#define INIT_RATE_MAX_20 23 #define INIT_RATE_MAX_40 40 /* @@ -129,7 +129,7 @@ typedef struct { A_BOOL validSingleStream;/* Valid for use in rate control for single stream operation */ #ifdef MAGPIE_MERLIN A_BOOL validSTBC; /* Valid for use in rate control for single stream operation */ -#endif +#endif WLAN_PHY phy; /* CCK/OFDM/TURBO/XR */ A_UINT32 rateKbps; /* Rate in Kbits per second */ A_UINT32 userRateKbps; /* User rate in KBits per second */ @@ -159,7 +159,7 @@ typedef struct { /* * Determines and returns the new Tx rate index. - */ + */ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int numTries, @@ -183,9 +183,4 @@ void rcUpdate_11n(struct ath_softc_tgt *sc, int nBad, int sh_lo_retry); -void ath_tx_status_update_rate(struct ath_softc_tgt *sc, - struct ath_rc_series rcs[], - int series, - WMI_TXSTATUS_EVENT *txs); - #endif /* _RATECTRL11N_H_ */ diff --git a/ath9k_htc/target_firmware/wlan/ratectrl_11n_ln.c b/ath9k_htc/target_firmware/wlan/ratectrl_11n_ln.c index de10a27..bf4b945 100755 --- a/ath9k_htc/target_firmware/wlan/ratectrl_11n_ln.c +++ b/ath9k_htc/target_firmware/wlan/ratectrl_11n_ln.c @@ -56,13 +56,13 @@ #include "ratectrl.h" #include "ratectrl11n.h" -static void ath_rate_newassoc_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, +static void ath_rate_newassoc_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, unsigned int capflag, struct ieee80211_rate *rs); -static void ath_rate_tx_complete_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, +static void ath_rate_tx_complete_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, struct ath_tx_desc *ds, - struct ath_rc_series rcs[], int nframes, + struct ath_rc_series rcs[], int nframes, int nbad); static void ath_rate_findrate_11n(struct ath_softc_tgt *sc, @@ -82,7 +82,7 @@ rcSortValidRates(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc) for (i=pRc->maxValidRate-1; i > 0; i--) { for (j=0; j <= i-1; j++) { -#ifdef MAGPIE_MERLIN +#ifdef MAGPIE_MERLIN if (pRateTable->info[pRc->validRateIndex[j]].rateKbps > pRateTable->info[pRc->validRateIndex[j+1]].rateKbps) #else @@ -122,7 +122,7 @@ rcSetValidTxMask(TX_RATE_CTRL *pRc, A_UINT8 index, A_BOOL validTxRate) /* Iterators for validTxRateMask */ static INLINE A_BOOL -rcGetNextValidTxRate(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, +rcGetNextValidTxRate(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, A_UINT8 curValidTxRate, A_UINT8 *pNextIndex) { A_UINT8 i; @@ -136,12 +136,12 @@ rcGetNextValidTxRate(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, /* No more valid rates */ *pNextIndex = 0; - + return FALSE; } static INLINE A_BOOL -rcGetNextLowerValidTxRate(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, +rcGetNextLowerValidTxRate(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, A_UINT8 curValidTxRate, A_UINT8 *pNextIndex) { A_INT8 i; @@ -181,12 +181,12 @@ rcIsValidPhyRate(A_UINT32 phy, A_UINT32 capflag, A_BOOL ignoreCW) return FALSE; } } - + return TRUE; } -/* - * Initialize the Valid Rate Index from valid entries in Rate Table +/* + * Initialize the Valid Rate Index from valid entries in Rate Table */ static A_UINT8 rcSibInitValidRates(const RATE_TABLE_11N *pRateTable, TX_RATE_CTRL *pRc, @@ -196,18 +196,18 @@ static A_UINT8 rcSibInitValidRates(const RATE_TABLE_11N *pRateTable, A_UINT8 i, hi = 0; A_UINT8 singleStream = (capflag & WLAN_RC_DS_FLAG) ? 0 : 1; A_UINT8 valid; - + for (i = 0; i < pRateTable->rateCount; i++) { if (singleStream) { valid = pRateTable->info[i].validSingleStream; } else { valid = pRateTable->info[i].valid; } - + if (valid == TRUE) { A_UINT32 phy = pRateTable->info[i].phy; - if (!rcIsValidPhyRate(phy, capflag, FALSE)) + if (!rcIsValidPhyRate(phy, capflag, FALSE)) continue; pPhyStateCtrl->validPhyRateIndex[phy][pPhyStateCtrl->validPhyRateCount[phy]] = i; @@ -217,17 +217,17 @@ static A_UINT8 rcSibInitValidRates(const RATE_TABLE_11N *pRateTable, hi = A_MAX(hi, i); } - } - + } + return hi; } -/* - * Initialize the Valid Rate Index from Rate Set +/* + * Initialize the Valid Rate Index from Rate Set */ static A_UINT8 rcSibSetValidRates(const RATE_TABLE_11N *pRateTable, - TX_RATE_CTRL *pRc, + TX_RATE_CTRL *pRc, struct ieee80211_rateset *pRateSet, A_UINT32 capflag, struct ath_node_target *an, @@ -236,7 +236,7 @@ rcSibSetValidRates(const RATE_TABLE_11N *pRateTable, A_UINT8 i, j, hi = 0; A_UINT8 singleStream = (capflag & WLAN_RC_DS_FLAG) ? 0 : 1; A_UINT32 valid; - + /* Use intersection of working rates and valid rates */ for (i = 0; i < pRateSet->rs_nrates; i++) { for (j = 0; j < pRateTable->rateCount; j++) { @@ -249,22 +249,22 @@ rcSibSetValidRates(const RATE_TABLE_11N *pRateTable, } else if (singleStream) { #else if (singleStream) { -#endif +#endif valid = pRateTable->info[j].validSingleStream; } else { valid = pRateTable->info[j].valid; } - + /* * We allow a rate only if its valid and the capflag matches one of * the validity (TRUE/TRUE_20/TRUE_40) flags */ - if (((pRateSet->rs_rates[i] & 0x7F) == + if (((pRateSet->rs_rates[i] & 0x7F) == (pRateTable->info[j].dot11Rate & 0x7F)) - && ((valid & WLAN_RC_CAP_MODE(capflag)) == + && ((valid & WLAN_RC_CAP_MODE(capflag)) == WLAN_RC_CAP_MODE(capflag)) && !WLAN_RC_PHY_HT(phy)) { - if (!rcIsValidPhyRate(phy, capflag, FALSE)) + if (!rcIsValidPhyRate(phy, capflag, FALSE)) continue; pPhyStateCtrl->validPhyRateIndex[phy][pPhyStateCtrl->validPhyRateCount[phy]] = j; @@ -275,13 +275,13 @@ rcSibSetValidRates(const RATE_TABLE_11N *pRateTable, } } } - + return hi; } static A_UINT8 rcSibSetValidHtRates(const RATE_TABLE_11N *pRateTable, - TX_RATE_CTRL *pRc, + TX_RATE_CTRL *pRc, A_UINT8 *pMcsSet, A_UINT32 capflag, struct ath_node_target *an, @@ -290,7 +290,7 @@ rcSibSetValidHtRates(const RATE_TABLE_11N *pRateTable, A_UINT8 i, j, hi = 0; A_UINT8 singleStream = (capflag & WLAN_RC_DS_FLAG) ? 0 : 1; A_UINT8 valid; - + /* Use intersection of working rates and valid rates */ for (i = 0; i < ((struct ieee80211_rateset *)pMcsSet)->rs_nrates; i++) { for (j = 0; j < pRateTable->rateCount; j++) { @@ -308,21 +308,21 @@ rcSibSetValidHtRates(const RATE_TABLE_11N *pRateTable, } else { valid = pRateTable->info[j].valid; } - - if (((((struct ieee80211_rateset *)pMcsSet)->rs_rates[i] & 0x7F) - != (pRateTable->info[j].dot11Rate & 0x7F)) - || !WLAN_RC_PHY_HT(phy) + + if (((((struct ieee80211_rateset *)pMcsSet)->rs_rates[i] & 0x7F) + != (pRateTable->info[j].dot11Rate & 0x7F)) + || !WLAN_RC_PHY_HT(phy) || !WLAN_RC_PHY_HT_VALID(valid, capflag) - || ((pRateTable->info[j].dot11Rate == 15) && - (valid & TRUE_20) && + || ((pRateTable->info[j].dot11Rate == 15) && + (valid & TRUE_20) && (capflag & WLAN_RC_WEP_TKIP_FLAG)) ) { continue; } - - if (!rcIsValidPhyRate(phy, capflag, FALSE)) + + if (!rcIsValidPhyRate(phy, capflag, FALSE)) continue; - + pPhyStateCtrl->validPhyRateIndex[phy][pPhyStateCtrl->validPhyRateCount[phy]] = j; pPhyStateCtrl->validPhyRateCount[phy] += 1; @@ -351,7 +351,7 @@ rcSibUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, struct atheros_softc *asc = (struct atheros_softc*)sc->sc_rc; A_UINT8 *phtMcs = (A_UINT8*)&pRateSet->htrates; TX_RATE_CTRL *pRc = (TX_RATE_CTRL *)(pSib); - PHY_STATE_CTRL mPhyCtrlState; + PHY_STATE_CTRL mPhyCtrlState; A_UINT8 i, j, k, hi = 0, htHi = 0; @@ -371,7 +371,7 @@ rcSibUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, for (i = 0; i < WLAN_RC_PHY_MAX; i++) { for (j = 0; j < MAX_TX_RATE_TBL; j++) { mPhyCtrlState.validPhyRateIndex[i][j] = 0; - } + } mPhyCtrlState.validPhyRateCount[i] = 0; } @@ -395,21 +395,21 @@ rcSibUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, pRc->rateTableSize = hi + 1; pRc->rateMaxPhy = 0; - + ASSERT(pRc->rateTableSize <= MAX_TX_RATE_TBL); for (i = 0, k = 0; i < WLAN_RC_PHY_MAX; i++) { for (j = 0; j < mPhyCtrlState.validPhyRateCount[i]; j++) { pRc->validRateIndex[k++] = mPhyCtrlState.validPhyRateIndex[i][j]; - } + } if (!rcIsValidPhyRate(i, pRateTable->initialRateMax, TRUE) || - !mPhyCtrlState.validPhyRateCount[i]) + !mPhyCtrlState.validPhyRateCount[i]) continue; - pRc->rateMaxPhy = mPhyCtrlState.validPhyRateIndex[i][j-1]; + pRc->rateMaxPhy = mPhyCtrlState.validPhyRateIndex[i][j-1]; } - + ASSERT(pRc->rateTableSize <= MAX_TX_RATE_TBL); ASSERT(k <= MAX_TX_RATE_TBL); @@ -423,7 +423,6 @@ static A_UINT8 rcRateFind_ht(struct ath_softc_tgt *sc, struct atheros_node *pSib, const RATE_TABLE_11N *pRateTable, A_BOOL probeAllowed, A_BOOL *isProbing) { - A_UINT32 dt; A_UINT32 bestThruput, thisThruput; A_UINT32 nowMsec; A_UINT8 rate, nextRate, bestRate; @@ -445,7 +444,6 @@ rcRateFind_ht(struct ath_softc_tgt *sc, struct atheros_node *pSib, */ nowMsec = A_MS_TICKGET(); - dt = nowMsec - pRc->rssiTime; /* * Now look up the rate in the rssi table and return it. @@ -457,21 +455,21 @@ rcRateFind_ht(struct ath_softc_tgt *sc, struct atheros_node *pSib, minIndex = 0; bestRate = minIndex; - + /* * Try the higher rate first. It will reduce memory moving time * if we have very good channel characteristics. */ for (index = maxIndex; index >= minIndex ; index--) { A_UINT8 perThres; - + rate = pRc->validRateIndex[index]; if (rate > pRc->rateMaxPhy) { continue; } /* if the best throughput is already larger than the userRateKbps.. - * then we could skip of rest of calculation.. + * then we could skip of rest of calculation.. */ if( bestThruput >= pRateTable->info[rate].userRateKbps) break; @@ -511,7 +509,7 @@ rcRateFind_ht(struct ath_softc_tgt *sc, struct atheros_node *pSib, /* Probe the next allowed phy state */ /* FIXME: Check to make sure ratMax is checked properly */ - if (rcGetNextValidTxRate( pRateTable, pRc, rate, &nextRate) && + if (rcGetNextValidTxRate( pRateTable, pRc, rate, &nextRate) && (nowMsec - pRc->probeTime > pRateTable->probeInterval) && (pRc->hwMaxRetryPktCnt >= 1)) { @@ -551,14 +549,14 @@ rcRateSetseries(const RATE_TABLE_11N *pRateTable , A_BOOL rtsctsenable, A_UINT32 chainmask,int stbc) { series->tries = tries; - series->flags = (rtsctsenable? ATH_RC_RTSCTS_FLAG : 0) | - (WLAN_RC_PHY_DS(pRateTable->info[rix].phy) ? ATH_RC_DS_FLAG : 0) | - (WLAN_RC_PHY_40(pRateTable->info[rix].phy) ? ATH_RC_CW40_FLAG : 0) | + series->flags = (rtsctsenable? ATH_RC_RTSCTS_FLAG : 0) | + (WLAN_RC_PHY_DS(pRateTable->info[rix].phy) ? ATH_RC_DS_FLAG : 0) | + (WLAN_RC_PHY_40(pRateTable->info[rix].phy) ? ATH_RC_CW40_FLAG : 0) | (WLAN_RC_PHY_SGI(pRateTable->info[rix].phy) ? ATH_RC_HT40_SGI_FLAG : 0); #ifdef MAGPIE_MERLIN if (stbc) { /* For now, only single stream STBC is supported */ - if (pRateTable->info[rix].rateCode >= 0x80 && + if (pRateTable->info[rix].rateCode >= 0x80 && pRateTable->info[rix].rateCode <= 0x87) { series->flags |= ATH_RC_TX_STBC_FLAG; @@ -569,31 +567,31 @@ rcRateSetseries(const RATE_TABLE_11N *pRateTable , series->max4msframelen = pRateTable->info[rix].max4msframelen; series->txrateKbps = pRateTable->info[rix].rateKbps; - /* If the hardware is capable of multiple transmit chains (chainmask is 3, 5 or 7), + /* If the hardware is capable of multiple transmit chains (chainmask is 3, 5 or 7), * then choose the number of transmit chains dynamically based on entries in the rate table. */ #ifndef ATH_ENABLE_WLAN_FOR_K2 if(chainmask == 7) series->tx_chainmask = pRateTable->info[rix].txChainMask_3ch; - else if(chainmask == 1) + else if(chainmask == 1) series->tx_chainmask = 1; - else + else series->tx_chainmask = pRateTable->info[rix].txChainMask_2ch; /*Chainmask is 3 or 5*/ #else series->tx_chainmask = 1; #endif } -static A_UINT8 -rcRateGetIndex(struct ath_softc_tgt *sc, struct ath_node_target *an, - const RATE_TABLE_11N *pRateTable , +static A_UINT8 +rcRateGetIndex(struct ath_softc_tgt *sc, struct ath_node_target *an, + const RATE_TABLE_11N *pRateTable , A_UINT8 rix, A_UINT16 stepDown, A_UINT16 minRate) { A_UINT32 j; A_UINT8 nextIndex; struct atheros_node *pSib = ATH_NODE_ATHEROS(an); TX_RATE_CTRL *pRc = (TX_RATE_CTRL *)(pSib); - + if (minRate) { for (j = RATE_TABLE_11N_SIZE; j > 0; j-- ) { if (rcGetNextLowerValidTxRate(pRateTable, pRc, rix, &nextIndex)) { @@ -615,11 +613,11 @@ rcRateGetIndex(struct ath_softc_tgt *sc, struct ath_node_target *an, return rix; } -void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, +void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int numTries, int numRates, int stepDnInc, unsigned int rcflag, struct ath_rc_series series[], int *isProbe) { - A_UINT8 i = 0; + A_UINT8 i = 0; A_UINT8 tryPerRate = 0; struct atheros_softc *asc = (struct atheros_softc*)sc->sc_rc; RATE_TABLE_11N *pRateTable = (RATE_TABLE_11N *)asc->hwRateTable[sc->sc_curmode]; @@ -628,7 +626,7 @@ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, A_UINT8 dot11Rate; WLAN_PHY phy; - rix = rcRateFind_ht(sc, asn, pRateTable, (rcflag & ATH_RC_PROBE_ALLOWED) ? 1 : 0, + rix = rcRateFind_ht(sc, asn, pRateTable, (rcflag & ATH_RC_PROBE_ALLOWED) ? 1 : 0, isProbe); nrix = rix; @@ -636,7 +634,7 @@ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, /* set one try for probe rates. For the probes don't enable rts */ rcRateSetseries(pRateTable, &series[i++], 1, nrix, FALSE, asc->tx_chainmask, asn->stbc); - + /* * Get the next tried/allowed rate. No RTS for the next series * after the probe rate @@ -667,7 +665,7 @@ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, /* * BUG 26545: - * Change rate series to enable aggregation when operating at lower MCS rates. + * Change rate series to enable aggregation when operating at lower MCS rates. * When first rate in series is MCS2 in HT40 @ 2.4GHz, series should look like: * {MCS2, MCS1, MCS0, MCS0}. * When first rate in series is MCS3 in HT20 @ 2.4GHz, series should look like: @@ -678,8 +676,8 @@ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, dot11Rate = pRateTable->info[rix].dot11Rate; phy = pRateTable->info[rix].phy; if (i == 4 && - ((dot11Rate == 2 && phy == WLAN_RC_PHY_HT_40_SS) || - (dot11Rate == 3 && phy == WLAN_RC_PHY_HT_20_SS))) + ((dot11Rate == 2 && phy == WLAN_RC_PHY_HT_40_SS) || + (dot11Rate == 3 && phy == WLAN_RC_PHY_HT_20_SS))) { series[3].rix = series[2].rix; series[3].flags = series[2].flags; @@ -695,14 +693,14 @@ void rcRateFind_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, if (sc->sc_curmode == IEEE80211_MODE_11NG) { dot11Rate = pRateTable->info[rix].dot11Rate; if (dot11Rate <= 3 ) { - series[0].flags |= ATH_RC_RTSCTS_FLAG; + series[0].flags |= ATH_RC_RTSCTS_FLAG; } } } static void -rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, - A_BOOL Xretries, int retries, A_UINT8 curTxAnt, +rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, + A_BOOL Xretries, int retries, A_UINT8 curTxAnt, A_UINT16 nFrames, A_UINT16 nBad) { TX_RATE_CTRL *pRc; @@ -733,7 +731,7 @@ rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, ASSERT(retries >= 0 && retries < MAX_TX_RETRIES); ASSERT(txRate >= 0); - + if (txRate < 0) { return; } @@ -756,7 +754,7 @@ rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, } /* new_PER = 7/8*old_PER + 1/8*(currentPER) */ - pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - + pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - (pRc->state[txRate].per / 8) + ((100) / 8)); } @@ -789,13 +787,13 @@ rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, * of the sum of these two terms. */ if (nFrames > 0) - pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - - (pRc->state[txRate].per / 8) + + pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - + (pRc->state[txRate].per / 8) + ((100*(retries*nFrames + nBad)/(nFrames*(retries+1))) / 8)); } else { /* new_PER = 7/8*old_PER + 1/8*(currentPER) */ - pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - + pRc->state[txRate].per = (A_UINT8)(pRc->state[txRate].per - (pRc->state[txRate].per / 8) + (nRetry2PerLookup[retries] / 8)); } @@ -856,18 +854,18 @@ rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, /* For all cases */ - ASSERT((pRc->rateMaxPhy >= 0 && pRc->rateMaxPhy <= pRc->rateTableSize && + ASSERT((pRc->rateMaxPhy >= 0 && pRc->rateMaxPhy <= pRc->rateTableSize && pRc->rateMaxPhy != INVALID_RATE_MAX)); - + /* * If this rate looks bad (high PER) then stop using it for * a while (except if we are probing). */ if (pRc->state[txRate].per >= 55 && txRate > 0 && - pRateTable->info[txRate].rateKbps <= + pRateTable->info[txRate].rateKbps <= pRateTable->info[pRc->rateMaxPhy].rateKbps) { - rcGetNextLowerValidTxRate(pRateTable, pRc, (A_UINT8) txRate, + rcGetNextLowerValidTxRate(pRateTable, pRc, (A_UINT8) txRate, &pRc->rateMaxPhy); /* Don't probe for a little while. */ @@ -910,9 +908,9 @@ rcUpdate_ht(struct ath_softc_tgt *sc, struct ath_node_target *an, int txRate, * the status of previous frames. */ void rcUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, - A_UINT8 curTxAnt, + A_UINT8 curTxAnt, int finalTSIdx, int Xretries, - struct ath_rc_series rcs[], int nFrames, + struct ath_rc_series rcs[], int nFrames, int nBad, int long_retry) { A_UINT32 series = 0; @@ -941,7 +939,7 @@ void rcUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, if (rcs[series].tries != 0) { flags = rcs[series].flags; /* If HT40 and we have switched mode from 40 to 20 => don't update */ - if ((flags & ATH_RC_CW40_FLAG) && + if ((flags & ATH_RC_CW40_FLAG) && (pRc->rcPhyMode != (flags & ATH_RC_CW40_FLAG))) { return; } @@ -956,7 +954,7 @@ void rcUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, } /* FIXME:XXXX, too many args! */ - rcUpdate_ht(sc, an, rix, Xretries? 1 : 2, rcs[series].tries, + rcUpdate_ht(sc, an, rix, Xretries? 1 : 2, rcs[series].tries, curTxAnt, nFrames, nFrames); } } @@ -973,7 +971,7 @@ void rcUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, flags = rcs[series].flags; /* If HT40 and we have switched mode from 40 to 20 => don't update */ - if ((flags & ATH_RC_CW40_FLAG) && + if ((flags & ATH_RC_CW40_FLAG) && (pRc->rcPhyMode != (flags & ATH_RC_CW40_FLAG))) { return; } @@ -988,7 +986,7 @@ void rcUpdate_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, } /* FIXME:XXXX, too many args! */ - rcUpdate_ht(sc, an, rix, Xretries, long_retry, curTxAnt, + rcUpdate_ht(sc, an, rix, Xretries, long_retry, curTxAnt, nFrames, nBad); } @@ -1036,7 +1034,7 @@ ath_rate_attach(struct ath_softc_tgt *sc) ar5416AttachRateTables(asc); asc->tx_chainmask = 1; - + return &asc->arc; } @@ -1068,14 +1066,14 @@ void ath_rate_tx_complete(struct ath_softc_tgt *sc, struct ath_node_target *an, struct ath_tx_desc *ds, - struct ath_rc_series rcs[], + struct ath_rc_series rcs[], int nframes, int nbad) { ath_rate_tx_complete_11n(sc, an, ds, rcs, nframes, nbad); } void -ath_rate_newassoc(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, +ath_rate_newassoc(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, unsigned int capflag, struct ieee80211_rate *rs) { ath_rate_newassoc_11n(sc, an, isnew, capflag, rs); @@ -1089,7 +1087,7 @@ void ath_rate_node_update(struct ath_softc_tgt *sc, { struct ieee80211_node_target *ni = &an->ni; - ath_rate_newassoc(sc, ATH_NODE_TARGET(ni), isnew, capflag, rs); + ath_rate_newassoc(sc, ATH_NODE_TARGET(ni), isnew, capflag, rs); } static int init_ath_rate_atheros(void); @@ -1132,14 +1130,14 @@ static void ath_rate_tx_complete_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, struct ath_tx_desc *ds, - struct ath_rc_series rcs[], + struct ath_rc_series rcs[], int nframes, int nbad) { int finalTSIdx = ds->ds_txstat.ts_rate; int tx_status = 0; if ((ds->ds_txstat.ts_status & HAL_TXERR_XRETRY) || - (ds->ds_txstat.ts_status & HAL_TXERR_FIFO) || + (ds->ds_txstat.ts_status & HAL_TXERR_FIFO) || (ds->ds_txstat.ts_flags & HAL_TX_DATA_UNDERRUN) || (ds->ds_txstat.ts_flags & HAL_TX_DELIM_UNDERRUN)) { tx_status = 1; @@ -1152,7 +1150,7 @@ ath_rate_tx_complete_11n(struct ath_softc_tgt *sc, } static void -ath_rate_newassoc_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, +ath_rate_newassoc_11n(struct ath_softc_tgt *sc, struct ath_node_target *an, int isnew, unsigned int capflag, struct ieee80211_rate *rs) { if (isnew) { -- 2.31.1