summaryrefslogtreecommitdiff
path: root/src/drivers/wifi/generic
diff options
context:
space:
mode:
authorJeremy Compostella <jeremy.compostella@intel.com>2024-10-29 12:24:58 -0700
committerJérémy Compostella <jeremy.compostella@intel.com>2024-11-27 21:28:17 +0000
commit6e941f99dad04e6476059082ee6129f4788c1491 (patch)
tree06edccac246e818f74cf3b0a719f3c0414266082 /src/drivers/wifi/generic
parente9b36b03ce63c40fd9d81cefc797928ca867bbb7 (diff)
drivers/wifi: Support Ultra High Band Country Selection
This feature provides ability to set the Bluetooth Ultra High Band (UHB) settings per country. The bluetooth UHB country selection is defined as follow (default is 0): | Bit | Value | | |-------+-------+---------------------------------------------------| | 0 | 0 | No override; use BT device settings | | | 1 | Force disable BT in all countries that are not | | | | defined in the following bits | | 1 | 0 | USA 6GHz BT disable | | | 1 | 6GHz BT allowed in the USA (enabled only if the | | | | device is certified to the USA) | | 2 | 0 | Rest of the World 6GHz BT disable | | | 1 | 6GHz BT allowed in the Rest of the World (enabled | | | | only if the device is certified to the rest | | | | of the world) | | 3 | 0 | EU countries 6GHz BT disable | | | 1 | 6GHz BT allowed in the EU countries (enabled only | | | | if the device is certified to the EU countries) | | 4 | 0 | South Korea 6GHz BT disable | | | 1 | 6GHz BT allowed in the South Korea (enabled only | | | | if the device is certified to the South Korea) | | 5 | 0 | Brazil 6GHz BT disable | | | 1 | 6GHz BT allowed in the Brazil (enabled only if | | | | the device is certified to the Brazil) | | 6 | 0 | Chile 6GHz BT disable | | | 1 | 6GHz BT allowed in the Chile (enabled only if the | | | | device is certified to the Chile) | | 7 | 0 | Japan 6GHz BT disable | | | 1 | 6GHz BT allowed in Japan (enabled only if the | | | | device is certified to Japan) | | 8 | 0 | Canada 6GHz BT disable | | | 1 | 6GHz BT allowed in Canada (enabled only if the | | | | device is certified to Canada) | | 9 | 0 | Morocco 6GHz BT disable | | | 1 | 6GHz BT allowed in the Morocco (enabled only if | | | | the device is certified to the Morocco) | | 10 | 0 | Mongolia 6GHz BT disable | | | 1 | 6GHz BT allowed in the Mongolia (enabled only if | | | | the device is certified to the Mongolia) | | 11 | 0 | Malaysia 6GHz BT disable | | | 1 | 6GHz BT allowed in the Malaysia (enabled only if | | | | the device is certified to the Malaysia) | | 31:12 | 0 | Reserved Should set to zeros | The implementation follows document 559910 Intel Connectivity Platforms BIOS Guideline revision 9.2 specification. BUG=b:346600091 TEST=BUCS method is added to the bluetooth companion device and return the data supplied by the SAR binary blob Change-Id: Iebe95815c944d045f4cf686abcd1874a8a45e231 Signed-off-by: Jeremy Compostella <jeremy.compostella@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/84945 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Kapil Porwal <kapilporwal@google.com> Reviewed-by: Subrata Banik <subratabanik@google.com>
Diffstat (limited to 'src/drivers/wifi/generic')
-rw-r--r--src/drivers/wifi/generic/acpi.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/drivers/wifi/generic/acpi.c b/src/drivers/wifi/generic/acpi.c
index a3fd3ca4c0..4a95b690b4 100644
--- a/src/drivers/wifi/generic/acpi.c
+++ b/src/drivers/wifi/generic/acpi.c
@@ -806,6 +806,41 @@ static void sar_emit_bbsm(const struct bbsm_profile *bbsm)
acpigen_write_package_end();
}
+static void sar_emit_bucs(const struct bucs_profile *bucs)
+{
+ if (bucs == NULL)
+ return;
+
+ /*
+ * Name ("BUCS", Package () {
+ * Revision,
+ * Package () {
+ * Domain Type, // 0x12:Bluetooth
+ * UHB country selection bits
+ * }
+ * })
+ */
+ if (bucs->revision != BUCS_REVISION) {
+ printk(BIOS_ERR, "Unsupported BUCS table revision: %d\n",
+ bucs->revision);
+ return;
+ }
+
+ acpigen_write_name("BUCS");
+ acpigen_write_package(2);
+ acpigen_write_dword(bucs->revision);
+
+ /*
+ * Emit 'Domain Type' + 'UHB country selection bits'
+ */
+ acpigen_write_package(2);
+ acpigen_write_dword(DOMAIN_TYPE_BLUETOOTH);
+ acpigen_write_dword(bucs->uhb_country_selection);
+
+ acpigen_write_package_end();
+ acpigen_write_package_end();
+}
+
static void emit_wifi_sar_acpi_structures(const struct device *dev,
union wifi_sar_limits *sar_limits)
{
@@ -942,6 +977,7 @@ static void wifi_ssdt_write_properties(const struct device *dev, const char *sco
sar_emit_bbfb(sar_limits.bbfb);
sar_emit_bdcm(sar_limits.bdcm);
sar_emit_bbsm(sar_limits.bbsm);
+ sar_emit_bucs(sar_limits.bucs);
acpigen_write_scope_end();
} else {
printk(BIOS_ERR, "Failed to get %s Bluetooth companion ACPI path\n",