more \
}
- const struct carl9170_firmware_descriptor __section(fwdsc) carl9170fw_desc = {
+ const struct carl9170_firmware_descriptor __section(fwdsc) __visible carl9170fw_desc = {
FILL(otus, OTUS,
.feature_set = cpu_to_le32(BIT(CARL9170FW_DUMMY_FEATURE) |
BIT(CARL9170FW_USB_RESP_EP2) |
#ifdef CONFIG_CARL9170FW_WOL
BIT(CARL9170FW_WOL) |
#endif /* CONFIG_CARL9170FW_WOL */
+#ifdef CONFIG_CARL9170FW_RADAR
+ BIT(CARL9170FW_RADAR_PATTERN_GENERATOR) |
+#endif /* CONFIG_CARL9170FW_RADAR */
(0)),
.miniboot_size = cpu_to_le16(0),
),
#endif /* CONFIG_CARL9170FW_WOL */
-
FILL(motd, MOTD,
.fw_year_month_day = cpu_to_le32(
CARL9170FW_SET_DAY(CARL9170FW_VERSION_DAY) +
.desc = "Community AR9170 Linux",
.release = CARL9170FW_VERSION_GIT),
+
+#ifdef CONFIG_CARL9170FW_RADAR
+ FILL(radar, RADAR,
+ .soft_radar = cpu_to_le32(&fw.wlan.soft_radar),
+ .num_radars = __CARL9170FW_NUM_RADARS,
+ .radars = { /* filled by the fwprepare tool */ },
+ ),
+#endif /* CONFIG_CARL9170FW_RADAR */
+
FILL(dbg, DBG,
.bogoclock_addr = cpu_to_le32(0),
.counter_addr = cpu_to_le32(&fw.counter),
#include "wl.h"
#include "rf.h"
#include "usb.h"
+#include "radar.h"
#define AR9170_WATCH_DOG_TIMER 0x100
fw.counter++;
}
+static void radar_pattern_generator(void)
+{
+ if (fw.phy.state == CARL9170_PHY_ON) {
+ if (fw.wlan.soft_radar == NO_RADAR ||
+ fw.wlan.soft_radar >= __CARL9170FW_NUM_RADARS)
+ return;
+
+ const struct radar_info *radar = &radars[fw.wlan.soft_radar];
+ if (radar->pulses >= fw.wlan.pattern_index) {
+ fw.wlan.pattern_index = 0;
+ }
+
+ if (radar->pulses > fw.wlan.pattern_index) {
+ const struct radar_info_pattern *pattern = &radar->pattern[fw.wlan.pattern_index];
+ if (is_after_usecs(fw.wlan.radar_last, pattern->pulse_interval)) {
+ fw.wlan.radar_last = get_clock_counter();
+ //set(PATTERN, pattern->pulse_pattern);
+ //set(MODE, pattern->pulse_mode);
+ udelay(pattern->pulse_width);
+ //set(MODE, ~pattern->pulse_mode);
+ fw.wlan.pattern_index++;
+ }
+ }
+ }
+}
+
static void __noreturn main_loop(void)
{
/* main loop */
handle_timer();
tally_update();
+
+ radar_pattern_generator();
}
}
* we put _start() there with the linker script carl9170.lds.
*/
- void __section(boot) start(void)
+ void __section(boot) __noreturn __visible start(void)
{
clock_set(AHB_40MHZ_OSC, true);
add_custom_target(wol ALL COMMAND gcc wol.c -o wol)
- set(tools fwinfo miniboot checksum fwprepare eeprom_fix)
-set(tools fwinfo miniboot checksum)
++set(tools fwinfo miniboot checksum fwprepare)
foreach(tool ${tools})
add_executable( ${tool} ${tool}.c )