summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2015-01-17 00:02:18 +0000
committeradrian <adrian@FreeBSD.org>2015-01-17 00:02:18 +0000
commitdddf8376c3d7ac5676dd84d020f202f61b4a12a0 (patch)
tree93a976d4dacdd13e00f3e3e460db73a5ae59f69a /sys/dev/ath
parentccf15241ef743ab44d30677d1872a6893bbba82e (diff)
downloadFreeBSD-src-dddf8376c3d7ac5676dd84d020f202f61b4a12a0.zip
FreeBSD-src-dddf8376c3d7ac5676dd84d020f202f61b4a12a0.tar.gz
Until there's a full MCI implementation - just implement a placeholder
MCI bluetooth coexistence method for WB222. The rest of MCI requires a bunch more work, including adding a DMA buffer for the MCI hardware to bounce messages in/out of and handling MCI interrupts. But the more important part here is telling the HAL the btcoex is enabled and MCI is in use so it configures the correct initial bluetooth parameters in the wireless NIC and configures things like bluetooth traffic weights and such. So, this at least gets the HAL to do some of the right things in configuring the inital bluetooth coexistence stuff, but doesn't actually do full btcoex. That'll take.. some effort. Tested: * AR9462 (WB222), STA mode
Diffstat (limited to 'sys/dev/ath')
-rw-r--r--sys/dev/ath/if_ath_btcoex.c68
1 files changed, 68 insertions, 0 deletions
diff --git a/sys/dev/ath/if_ath_btcoex.c b/sys/dev/ath/if_ath_btcoex.c
index 9d77622..b78f866 100644
--- a/sys/dev/ath/if_ath_btcoex.c
+++ b/sys/dev/ath/if_ath_btcoex.c
@@ -188,6 +188,72 @@ ath_btcoex_cfg_wb225(struct ath_softc *sc)
return (0);
}
+/*
+ * Initial AR9462 / (WB222) bluetooth coexistence settings,
+ * just for experimentation.
+ *
+ * Return 0 for OK; errno for error.
+ */
+static int
+ath_btcoex_cfg_wb222(struct ath_softc *sc)
+{
+ HAL_BT_COEX_INFO btinfo;
+ HAL_BT_COEX_CONFIG btconfig;
+ struct ath_hal *ah = sc->sc_ah;
+
+ if (! ath_hal_btcoex_supported(ah))
+ return (EINVAL);
+
+ bzero(&btinfo, sizeof(btinfo));
+ bzero(&btconfig, sizeof(btconfig));
+
+ device_printf(sc->sc_dev, "Enabling WB222 BTCOEX\n");
+
+ btinfo.bt_module = HAL_BT_MODULE_JANUS; /* XXX not used? */
+ btinfo.bt_coex_config = HAL_BT_COEX_CFG_MCI;
+
+ /*
+ * MCI uses a completely different interface to speak
+ * to the bluetooth module - it's a command based
+ * thing over a serial line, rather than
+ * state pins to/from the bluetooth module.
+ *
+ * So, the GPIO configuration, polarity, etc
+ * doesn't matter on MCI devices; it's just
+ * completely ignored by the HAL.
+ */
+ btinfo.bt_gpio_bt_active = 4;
+ btinfo.bt_gpio_bt_priority = 8;
+ btinfo.bt_gpio_wlan_active = 5;
+
+ btinfo.bt_active_polarity = 1; /* XXX not used */
+ btinfo.bt_single_ant = 0; /* 2 antenna on WB222 */
+ btinfo.bt_isolation = 0; /* in dB, not used */
+
+ ath_hal_btcoex_set_info(ah, &btinfo);
+
+ btconfig.bt_time_extend = 0;
+ btconfig.bt_txstate_extend = 1; /* true */
+ btconfig.bt_txframe_extend = 1; /* true */
+ btconfig.bt_mode = HAL_BT_COEX_MODE_SLOTTED;
+ btconfig.bt_quiet_collision = 1; /* true */
+ btconfig.bt_rxclear_polarity = 1; /* true */
+ btconfig.bt_priority_time = 2;
+ btconfig.bt_first_slot_time = 5;
+ btconfig.bt_hold_rxclear = 1; /* true */
+
+ ath_hal_btcoex_set_config(ah, &btconfig);
+
+ /*
+ * Enable antenna diversity.
+ */
+ ath_hal_btcoex_set_parameter(ah, HAL_BT_COEX_ANTENNA_DIVERSITY, 1);
+
+ return (0);
+}
+
+
+
#if 0
/*
@@ -243,6 +309,8 @@ ath_btcoex_attach(struct ath_softc *sc)
if (strncmp(profname, "wb195", 5) == 0) {
ret = ath_btcoex_cfg_wb195(sc);
+ } else if (strncmp(profname, "wb222", 5) == 0) {
+ ret = ath_btcoex_cfg_wb222(sc);
} else if (strncmp(profname, "wb225", 5) == 0) {
ret = ath_btcoex_cfg_wb225(sc);
} else {
OpenPOWER on IntegriCloud