Project import generated by Copybara.
GitOrigin-RevId: 0ced4f8567d422af738ad3ae04f2b9484d0d10f9
diff --git a/arch/arm/configs/ipq5018_sirocco_defconfig b/arch/arm/configs/ipq5018_sirocco_defconfig
index 26ef7e2..1d1cb53 100644
--- a/arch/arm/configs/ipq5018_sirocco_defconfig
+++ b/arch/arm/configs/ipq5018_sirocco_defconfig
@@ -4469,7 +4469,7 @@
# CONFIG_SQUASHFS_DECOMP_SINGLE is not set
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
+# CONFIG_SQUASHFS_XATTR is not set
# CONFIG_SQUASHFS_ZLIB is not set
# CONFIG_SQUASHFS_LZ4 is not set
# CONFIG_SQUASHFS_LZO is not set
diff --git a/arch/arm64/boot/dts/qcom/ipq5018.dtsi b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
index 5b1387c..33450fa 100644
--- a/arch/arm64/boot/dts/qcom/ipq5018.dtsi
+++ b/arch/arm64/boot/dts/qcom/ipq5018.dtsi
@@ -814,7 +814,7 @@
<0 309 1>,
<0 310 1>,
<0 311 1>,
- <0 334 1>,
+ <0 312 1>,
<0 313 1>, /* o_wcss_apps_intr[25] */
<0 314 1>,
@@ -840,7 +840,7 @@
<0 332 1>,
<0 333 1>,
- <0 312 1>,
+ <0 334 1>,
<0 335 1>,
<0 336 1>,
<0 337 1>,
diff --git a/arch/arm64/boot/dts/qcom/sirocco-p0.dts b/arch/arm64/boot/dts/qcom/sirocco-p0.dts
index cd7ec02..6909b0d 100644
--- a/arch/arm64/boot/dts/qcom/sirocco-p0.dts
+++ b/arch/arm64/boot/dts/qcom/sirocco-p0.dts
@@ -421,7 +421,6 @@
&i2c_0 {
pinctrl-0 = <&i2c_pins>;
pinctrl-names = "default";
- force-dma-mode;
status = "ok";
ina231: ina231@40 {
diff --git a/arch/arm64/configs/ipq5018_sirocco_defconfig b/arch/arm64/configs/ipq5018_sirocco_defconfig
index 99fcac2..21ae20c 100644
--- a/arch/arm64/configs/ipq5018_sirocco_defconfig
+++ b/arch/arm64/configs/ipq5018_sirocco_defconfig
@@ -4446,7 +4446,7 @@
# CONFIG_SQUASHFS_DECOMP_SINGLE is not set
# CONFIG_SQUASHFS_DECOMP_MULTI is not set
CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU=y
-CONFIG_SQUASHFS_XATTR=y
+# CONFIG_SQUASHFS_XATTR is not set
# CONFIG_SQUASHFS_ZLIB is not set
# CONFIG_SQUASHFS_LZ4 is not set
# CONFIG_SQUASHFS_LZO is not set
diff --git a/drivers/hid/hid-bigbenff.c b/drivers/hid/hid-bigbenff.c
index 74ad8bf..db6da21 100644
--- a/drivers/hid/hid-bigbenff.c
+++ b/drivers/hid/hid-bigbenff.c
@@ -191,7 +191,7 @@ static void bigben_worker(struct work_struct *work)
struct bigben_device, worker);
struct hid_field *report_field = bigben->report->field[0];
- if (bigben->removed || !report_field)
+ if (bigben->removed)
return;
if (bigben->work_led) {
diff --git a/drivers/hid/hid-chicony.c b/drivers/hid/hid-chicony.c
index e19e2b5..3f0ed6a 100644
--- a/drivers/hid/hid-chicony.c
+++ b/drivers/hid/hid-chicony.c
@@ -58,12 +58,8 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
static __u8 *ch_switch12_report_fixup(struct hid_device *hdev, __u8 *rdesc,
unsigned int *rsize)
{
- struct usb_interface *intf;
-
- if (!hid_is_usb(hdev))
- return rdesc;
-
- intf = to_usb_interface(hdev->dev.parent);
+ struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+
if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
/* Change usage maximum and logical maximum from 0x7fff to
* 0x2fff, so they don't exceed HID_MAX_USAGES */
diff --git a/drivers/hid/hid-corsair.c b/drivers/hid/hid-corsair.c
index 8c895c8..902a60e 100644
--- a/drivers/hid/hid-corsair.c
+++ b/drivers/hid/hid-corsair.c
@@ -553,12 +553,7 @@ static int corsair_probe(struct hid_device *dev, const struct hid_device_id *id)
int ret;
unsigned long quirks = id->driver_data;
struct corsair_drvdata *drvdata;
- struct usb_interface *usbif;
-
- if (!hid_is_usb(dev))
- return -EINVAL;
-
- usbif = to_usb_interface(dev->dev.parent);
+ struct usb_interface *usbif = to_usb_interface(dev->dev.parent);
drvdata = devm_kzalloc(&dev->dev, sizeof(struct corsair_drvdata),
GFP_KERNEL);
diff --git a/drivers/hid/hid-elan.c b/drivers/hid/hid-elan.c
index 0e8f424..dae1937 100644
--- a/drivers/hid/hid-elan.c
+++ b/drivers/hid/hid-elan.c
@@ -50,7 +50,7 @@ struct elan_drvdata {
static int is_not_elan_touchpad(struct hid_device *hdev)
{
- if (hid_is_usb(hdev)) {
+ if (hdev->bus == BUS_USB) {
struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
return (intf->altsetting->desc.bInterfaceNumber !=
diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c
index 2876cb6..0d22713 100644
--- a/drivers/hid/hid-elo.c
+++ b/drivers/hid/hid-elo.c
@@ -229,9 +229,6 @@ static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)
struct elo_priv *priv;
int ret;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
priv = kzalloc(sizeof(*priv), GFP_KERNEL);
if (!priv)
return -ENOMEM;
diff --git a/drivers/hid/hid-holtek-kbd.c b/drivers/hid/hid-holtek-kbd.c
index 403506b..0a38e8e 100644
--- a/drivers/hid/hid-holtek-kbd.c
+++ b/drivers/hid/hid-holtek-kbd.c
@@ -140,17 +140,12 @@ static int holtek_kbd_input_event(struct input_dev *dev, unsigned int type,
static int holtek_kbd_probe(struct hid_device *hdev,
const struct hid_device_id *id)
{
- struct usb_interface *intf;
- int ret;
+ struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+ int ret = hid_parse(hdev);
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
- ret = hid_parse(hdev);
if (!ret)
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
- intf = to_usb_interface(hdev->dev.parent);
if (!ret && intf->cur_altsetting->desc.bInterfaceNumber == 1) {
struct hid_input *hidinput;
list_for_each_entry(hidinput, &hdev->inputs, list) {
diff --git a/drivers/hid/hid-holtek-mouse.c b/drivers/hid/hid-holtek-mouse.c
index b7172c4..195b735 100644
--- a/drivers/hid/hid-holtek-mouse.c
+++ b/drivers/hid/hid-holtek-mouse.c
@@ -62,14 +62,6 @@ static __u8 *holtek_mouse_report_fixup(struct hid_device *hdev, __u8 *rdesc,
return rdesc;
}
-static int holtek_mouse_probe(struct hid_device *hdev,
- const struct hid_device_id *id)
-{
- if (!hid_is_usb(hdev))
- return -EINVAL;
- return 0;
-}
-
static const struct hid_device_id holtek_mouse_devices[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT,
USB_DEVICE_ID_HOLTEK_ALT_MOUSE_A067) },
@@ -91,7 +83,6 @@ static struct hid_driver holtek_mouse_driver = {
.name = "holtek_mouse",
.id_table = holtek_mouse_devices,
.report_fixup = holtek_mouse_report_fixup,
- .probe = holtek_mouse_probe,
};
module_hid_driver(holtek_mouse_driver);
diff --git a/drivers/hid/hid-lg.c b/drivers/hid/hid-lg.c
index 2c7e7c0..0dc7cdf 100644
--- a/drivers/hid/hid-lg.c
+++ b/drivers/hid/hid-lg.c
@@ -769,18 +769,12 @@ static int lg_raw_event(struct hid_device *hdev, struct hid_report *report,
static int lg_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
- struct usb_interface *iface;
- __u8 iface_num;
+ struct usb_interface *iface = to_usb_interface(hdev->dev.parent);
+ __u8 iface_num = iface->cur_altsetting->desc.bInterfaceNumber;
unsigned int connect_mask = HID_CONNECT_DEFAULT;
struct lg_drv_data *drv_data;
int ret;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
- iface = to_usb_interface(hdev->dev.parent);
- iface_num = iface->cur_altsetting->desc.bInterfaceNumber;
-
/* G29 only work with the 1st interface */
if ((hdev->product == USB_DEVICE_ID_LOGITECH_G29_WHEEL) &&
(iface_num != 0)) {
diff --git a/drivers/hid/hid-logitech-dj.c b/drivers/hid/hid-logitech-dj.c
index f3cdb19..54d811f 100644
--- a/drivers/hid/hid-logitech-dj.c
+++ b/drivers/hid/hid-logitech-dj.c
@@ -1680,7 +1680,7 @@ static int logi_dj_probe(struct hid_device *hdev,
case recvr_type_27mhz: no_dj_interfaces = 2; break;
case recvr_type_bluetooth: no_dj_interfaces = 2; break;
}
- if (hid_is_usb(hdev)) {
+ if (hid_is_using_ll_driver(hdev, &usb_hid_driver)) {
intf = to_usb_interface(hdev->dev.parent);
if (intf && intf->altsetting->desc.bInterfaceNumber >=
no_dj_interfaces) {
diff --git a/drivers/hid/hid-prodikeys.c b/drivers/hid/hid-prodikeys.c
index e4e9471..2666af0 100644
--- a/drivers/hid/hid-prodikeys.c
+++ b/drivers/hid/hid-prodikeys.c
@@ -798,18 +798,12 @@ static int pk_raw_event(struct hid_device *hdev, struct hid_report *report,
static int pk_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int ret;
- struct usb_interface *intf;
- unsigned short ifnum;
+ struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+ unsigned short ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
unsigned long quirks = id->driver_data;
struct pk_device *pk;
struct pcmidi_snd *pm = NULL;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
- intf = to_usb_interface(hdev->dev.parent);
- ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
-
pk = kzalloc(sizeof(*pk), GFP_KERNEL);
if (pk == NULL) {
hid_err(hdev, "can't alloc descriptor\n");
diff --git a/drivers/hid/hid-roccat-arvo.c b/drivers/hid/hid-roccat-arvo.c
index 4b18e1a..ffcd444 100644
--- a/drivers/hid/hid-roccat-arvo.c
+++ b/drivers/hid/hid-roccat-arvo.c
@@ -344,9 +344,6 @@ static int arvo_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-isku.c b/drivers/hid/hid-roccat-isku.c
index e95d59c..ce5f225 100644
--- a/drivers/hid/hid-roccat-isku.c
+++ b/drivers/hid/hid-roccat-isku.c
@@ -324,9 +324,6 @@ static int isku_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-kone.c b/drivers/hid/hid-roccat-kone.c
index 6cf59b5..509b9bb 100644
--- a/drivers/hid/hid-roccat-kone.c
+++ b/drivers/hid/hid-roccat-kone.c
@@ -749,9 +749,6 @@ static int kone_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-koneplus.c b/drivers/hid/hid-roccat-koneplus.c
index 1896c69..0316edf 100644
--- a/drivers/hid/hid-roccat-koneplus.c
+++ b/drivers/hid/hid-roccat-koneplus.c
@@ -431,9 +431,6 @@ static int koneplus_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-konepure.c b/drivers/hid/hid-roccat-konepure.c
index cf8eeb3..5248b3c 100644
--- a/drivers/hid/hid-roccat-konepure.c
+++ b/drivers/hid/hid-roccat-konepure.c
@@ -133,9 +133,6 @@ static int konepure_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-kovaplus.c b/drivers/hid/hid-roccat-kovaplus.c
index 6fb9b95..9600128 100644
--- a/drivers/hid/hid-roccat-kovaplus.c
+++ b/drivers/hid/hid-roccat-kovaplus.c
@@ -501,9 +501,6 @@ static int kovaplus_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-lua.c b/drivers/hid/hid-roccat-lua.c
index d5ddf0d..4a88a76 100644
--- a/drivers/hid/hid-roccat-lua.c
+++ b/drivers/hid/hid-roccat-lua.c
@@ -160,9 +160,6 @@ static int lua_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-pyra.c b/drivers/hid/hid-roccat-pyra.c
index 4fcc8e7..989927d 100644
--- a/drivers/hid/hid-roccat-pyra.c
+++ b/drivers/hid/hid-roccat-pyra.c
@@ -449,9 +449,6 @@ static int pyra_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-ryos.c b/drivers/hid/hid-roccat-ryos.c
index 5bf1971..3956a6c 100644
--- a/drivers/hid/hid-roccat-ryos.c
+++ b/drivers/hid/hid-roccat-ryos.c
@@ -141,9 +141,6 @@ static int ryos_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-roccat-savu.c b/drivers/hid/hid-roccat-savu.c
index a784bb4..818701f 100644
--- a/drivers/hid/hid-roccat-savu.c
+++ b/drivers/hid/hid-roccat-savu.c
@@ -113,9 +113,6 @@ static int savu_probe(struct hid_device *hdev,
{
int retval;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
retval = hid_parse(hdev);
if (retval) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-samsung.c b/drivers/hid/hid-samsung.c
index cf5992e..2e1c311 100644
--- a/drivers/hid/hid-samsung.c
+++ b/drivers/hid/hid-samsung.c
@@ -152,9 +152,6 @@ static int samsung_probe(struct hid_device *hdev,
int ret;
unsigned int cmask = HID_CONNECT_DEFAULT;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
ret = hid_parse(hdev);
if (ret) {
hid_err(hdev, "parse failed\n");
diff --git a/drivers/hid/hid-u2fzero.c b/drivers/hid/hid-u2fzero.c
index 6f107e3..95e0807 100644
--- a/drivers/hid/hid-u2fzero.c
+++ b/drivers/hid/hid-u2fzero.c
@@ -286,7 +286,7 @@ static int u2fzero_probe(struct hid_device *hdev,
unsigned int minor;
int ret;
- if (!hid_is_usb(hdev))
+ if (!hid_is_using_ll_driver(hdev, &usb_hid_driver))
return -EINVAL;
dev = devm_kzalloc(&hdev->dev, sizeof(*dev), GFP_KERNEL);
diff --git a/drivers/hid/hid-uclogic-core.c b/drivers/hid/hid-uclogic-core.c
index 4edb241..8e9c9e6 100644
--- a/drivers/hid/hid-uclogic-core.c
+++ b/drivers/hid/hid-uclogic-core.c
@@ -164,9 +164,6 @@ static int uclogic_probe(struct hid_device *hdev,
struct uclogic_drvdata *drvdata = NULL;
bool params_initialized = false;
- if (!hid_is_usb(hdev))
- return -EINVAL;
-
/*
* libinput requires the pad interface to be on a different node
* than the pen, so use QUIRK_MULTI_INPUT for all tablets.
diff --git a/drivers/hid/hid-uclogic-params.c b/drivers/hid/hid-uclogic-params.c
index ed4ede5..e80c812 100644
--- a/drivers/hid/hid-uclogic-params.c
+++ b/drivers/hid/hid-uclogic-params.c
@@ -841,7 +841,8 @@ int uclogic_params_init(struct uclogic_params *params,
struct uclogic_params p = {0, };
/* Check arguments */
- if (params == NULL || hdev == NULL || !hid_is_usb(hdev)) {
+ if (params == NULL || hdev == NULL ||
+ !hid_is_using_ll_driver(hdev, &usb_hid_driver)) {
rc = -EINVAL;
goto cleanup;
}
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index a54a177..cd71e71 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -726,7 +726,7 @@ static void wacom_retrieve_hid_descriptor(struct hid_device *hdev,
* Skip the query for this type and modify defaults based on
* interface number.
*/
- if (features->type == WIRELESS && intf) {
+ if (features->type == WIRELESS) {
if (intf->cur_altsetting->desc.bInterfaceNumber == 0)
features->device_type = WACOM_DEVICETYPE_WL_MONITOR;
else
@@ -2185,7 +2185,7 @@ static void wacom_update_name(struct wacom *wacom, const char *suffix)
if ((features->type == HID_GENERIC) && !strcmp("Wacom HID", features->name)) {
char *product_name = wacom->hdev->name;
- if (hid_is_usb(wacom->hdev)) {
+ if (hid_is_using_ll_driver(wacom->hdev, &usb_hid_driver)) {
struct usb_interface *intf = to_usb_interface(wacom->hdev->dev.parent);
struct usb_device *dev = interface_to_usbdev(intf);
product_name = dev->product;
@@ -2416,9 +2416,6 @@ static void wacom_wireless_work(struct work_struct *work)
wacom_destroy_battery(wacom);
- if (!usbdev)
- return;
-
/* Stylus interface */
hdev1 = usb_get_intfdata(usbdev->config->interface[1]);
wacom1 = hid_get_drvdata(hdev1);
@@ -2698,6 +2695,8 @@ static void wacom_mode_change_work(struct work_struct *work)
static int wacom_probe(struct hid_device *hdev,
const struct hid_device_id *id)
{
+ struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+ struct usb_device *dev = interface_to_usbdev(intf);
struct wacom *wacom;
struct wacom_wac *wacom_wac;
struct wacom_features *features;
@@ -2732,14 +2731,8 @@ static int wacom_probe(struct hid_device *hdev,
wacom_wac->hid_data.inputmode = -1;
wacom_wac->mode_report = -1;
- if (hid_is_usb(hdev)) {
- struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
- struct usb_device *dev = interface_to_usbdev(intf);
-
- wacom->usbdev = dev;
- wacom->intf = intf;
- }
-
+ wacom->usbdev = dev;
+ wacom->intf = intf;
mutex_init(&wacom->lock);
INIT_DELAYED_WORK(&wacom->init_work, wacom_init_work);
INIT_WORK(&wacom->wireless_work, wacom_wireless_work);
diff --git a/drivers/i2c/busses/i2c-qup.c b/drivers/i2c/busses/i2c-qup.c
index 65831d9..3417f7d 100644
--- a/drivers/i2c/busses/i2c-qup.c
+++ b/drivers/i2c/busses/i2c-qup.c
@@ -280,7 +280,6 @@ struct qup_i2c_dev {
void (*read_rx_fifo)(struct qup_i2c_dev *qup);
/* function to write tags in tx fifo for i2c read transfer */
void (*write_rx_tags)(struct qup_i2c_dev *qup);
- bool force_dma;
};
static irqreturn_t qup_i2c_interrupt(int irq, void *dev)
@@ -1530,8 +1529,8 @@ qup_i2c_determine_mode_v2(struct qup_i2c_dev *qup,
total_len += msgs[idx].len;
}
- if (!no_dma && qup->is_dma && (qup->force_dma ||
- (total_len > qup->out_fifo_sz || total_len > qup->in_fifo_sz))) {
+ if (!no_dma && qup->is_dma &&
+ (total_len > qup->out_fifo_sz || total_len > qup->in_fifo_sz)) {
qup->use_dma = true;
} else {
qup->blk.is_tx_blk_mode = max_tx_len > qup->out_fifo_sz -
@@ -1885,9 +1884,6 @@ static int qup_i2c_probe(struct platform_device *pdev)
qup->in_blk_sz, qup->in_fifo_sz,
qup->out_blk_sz, qup->out_fifo_sz);
- qup->force_dma = of_property_read_bool(pdev->dev.of_node,
- "force-dma-mode");
-
i2c_set_adapdata(&qup->adap, qup);
qup->adap.dev.parent = qup->dev;
qup->adap.dev.of_node = pdev->dev.of_node;
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 48784f8..8a537fe 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -2107,6 +2107,8 @@ static int __init sec_key_init(struct device *dev)
int err = 0;
size_t dma_buf_size = 0;
+ dev = qdev;
+
sec_kobj = kobject_create_and_add("sec_key", NULL);
if (!sec_kobj) {
@@ -2327,6 +2329,8 @@ static int qtiapp_test(struct device *dev, void *input,
if (!buf) {
pr_err("Failed to allocate page\n");
return -ENOMEM;
+ } else {
+ printk("\n memory allocated at physical address 0x%x\n",dma_buf);
}
/*
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
index 8be4c50..b569b05 100644
--- a/drivers/mmc/core/block.c
+++ b/drivers/mmc/core/block.c
@@ -1653,32 +1653,32 @@ static void mmc_blk_read_single(struct mmc_queue *mq, struct request *req)
struct mmc_card *card = mq->card;
struct mmc_host *host = card->host;
blk_status_t error = BLK_STS_OK;
+ int retries = 0;
do {
u32 status;
int err;
- int retries = 0;
- while (retries++ <= MMC_READ_SINGLE_RETRIES) {
- mmc_blk_rw_rq_prep(mqrq, card, 1, mq);
+ mmc_blk_rw_rq_prep(mqrq, card, 1, mq);
- mmc_wait_for_req(host, mrq);
+ mmc_wait_for_req(host, mrq);
- err = mmc_send_status(card, &status);
+ err = mmc_send_status(card, &status);
+ if (err)
+ goto error_exit;
+
+ if (!mmc_host_is_spi(host) &&
+ !mmc_blk_in_tran_state(status)) {
+ err = mmc_blk_fix_state(card, req);
if (err)
goto error_exit;
-
- if (!mmc_host_is_spi(host) &&
- !mmc_blk_in_tran_state(status)) {
- err = mmc_blk_fix_state(card, req);
- if (err)
- goto error_exit;
- }
-
- if (!mrq->cmd->error)
- break;
}
+ if (mrq->cmd->error && retries++ < MMC_READ_SINGLE_RETRIES)
+ continue;
+
+ retries = 0;
+
if (mrq->cmd->error ||
mrq->data->error ||
(!mmc_host_is_spi(host) &&
diff --git a/drivers/net/wireless/ath/ath10k/testmode.c b/drivers/net/wireless/ath/ath10k/testmode.c
index 1764069..1bffe3f 100644
--- a/drivers/net/wireless/ath/ath10k/testmode.c
+++ b/drivers/net/wireless/ath/ath10k/testmode.c
@@ -89,7 +89,7 @@ bool ath10k_tm_event_wmi(struct ath10k *ar, u32 cmd_id, struct sk_buff *skb)
goto out;
}
- cfg80211_testmode_event(nl_skb, GFP_ATOMIC, false);
+ cfg80211_testmode_event(nl_skb, GFP_ATOMIC);
out:
spin_unlock_bh(&ar->data_lock);
diff --git a/drivers/net/wireless/ath/ath11k/ce.c b/drivers/net/wireless/ath/ath11k/ce.c
index 54c9b1b..ce4a689 100644
--- a/drivers/net/wireless/ath/ath11k/ce.c
+++ b/drivers/net/wireless/ath/ath11k/ce.c
@@ -431,11 +431,6 @@ static void ath11k_ce_recv_process_cb(struct ath11k_ce_pipe *pipe)
ATH11K_MEMORY_STATS_DEC(ab, ce_rx_pipe, skb->truesize);
- if (!ATH11K_SKB_RXCB(skb)->paddr) {
- ath11k_warn(ab, "Invalid paddr in skb received in CE\n");
- continue;
- }
-
dma_unmap_single(ab->dev, ATH11K_SKB_RXCB(skb)->paddr,
max_nbytes, DMA_FROM_DEVICE);
@@ -517,11 +512,6 @@ static void ath11k_ce_tx_process_cb(struct ath11k_ce_pipe *pipe)
if (!skb)
continue;
- if (!ATH11K_SKB_CB(skb)->paddr) {
- ath11k_warn(ab, "Invalid padd in Tx skb in CE\n");
- continue;
- }
-
dma_unmap_single(ab->dev, ATH11K_SKB_CB(skb)->paddr, skb->len,
DMA_TO_DEVICE);
if ((!pipe->send_cb) || ab->hw_params.credit_flow) {
@@ -632,7 +622,6 @@ ath11k_ce_alloc_ring(struct ath11k_base *ab, int nentries, int desc_sz)
{
struct ath11k_ce_ring *ce_ring;
dma_addr_t base_addr;
- unsigned long off;
ce_ring = kzalloc(struct_size(ce_ring, skb, nentries), GFP_KERNEL);
if (ce_ring == NULL)
@@ -661,13 +650,12 @@ ath11k_ce_alloc_ring(struct ath11k_base *ab, int nentries, int desc_sz)
ce_ring->base_addr_ce_space_unaligned = base_addr;
- ce_ring->base_addr_ce_space = (dma_addr_t) ALIGN(
- (unsigned long)ce_ring->base_addr_ce_space_unaligned,
+ ce_ring->base_addr_owner_space = PTR_ALIGN(
+ ce_ring->base_addr_owner_space_unaligned,
CE_DESC_RING_ALIGN);
- off = (unsigned long)ce_ring->base_addr_ce_space -
- (unsigned long)ce_ring->base_addr_ce_space_unaligned;
- ce_ring->base_addr_owner_space = (void *)
- ((unsigned long)ce_ring->base_addr_owner_space_unaligned + off);
+ ce_ring->base_addr_ce_space = ALIGN(
+ ce_ring->base_addr_ce_space_unaligned,
+ CE_DESC_RING_ALIGN);
return ce_ring;
}
@@ -1019,8 +1007,8 @@ void ath11k_ce_free_pipes(struct ath11k_base *ab)
dma_free_coherent(ab->dev,
pipe->src_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN,
- pipe->src_ring->base_addr_owner_space_unaligned,
- pipe->src_ring->base_addr_ce_space_unaligned);
+ pipe->src_ring->base_addr_owner_space,
+ pipe->src_ring->base_addr_ce_space);
ATH11K_MEMORY_STATS_DEC(ab, ce_ring_alloc,
pipe->src_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN);
@@ -1033,8 +1021,8 @@ void ath11k_ce_free_pipes(struct ath11k_base *ab)
dma_free_coherent(ab->dev,
pipe->dest_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN,
- pipe->dest_ring->base_addr_owner_space_unaligned,
- pipe->dest_ring->base_addr_ce_space_unaligned);
+ pipe->dest_ring->base_addr_owner_space,
+ pipe->dest_ring->base_addr_ce_space);
ATH11K_MEMORY_STATS_DEC(ab, ce_ring_alloc,
pipe->dest_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN);
@@ -1048,8 +1036,8 @@ void ath11k_ce_free_pipes(struct ath11k_base *ab)
dma_free_coherent(ab->dev,
pipe->status_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN,
- pipe->status_ring->base_addr_owner_space_unaligned,
- pipe->status_ring->base_addr_ce_space_unaligned);
+ pipe->status_ring->base_addr_owner_space,
+ pipe->status_ring->base_addr_ce_space);
ATH11K_MEMORY_STATS_DEC(ab, ce_ring_alloc,
pipe->status_ring->nentries * desc_sz +
CE_DESC_RING_ALIGN);
diff --git a/drivers/net/wireless/ath/ath11k/ce.h b/drivers/net/wireless/ath/ath11k/ce.h
index a82285d..c586847 100644
--- a/drivers/net/wireless/ath/ath11k/ce.h
+++ b/drivers/net/wireless/ath/ath11k/ce.h
@@ -141,7 +141,7 @@ struct ath11k_ce_ring {
/* Host address space */
void *base_addr_owner_space_unaligned;
/* CE address space */
- dma_addr_t base_addr_ce_space_unaligned;
+ u32 base_addr_ce_space_unaligned;
/* Actual start of descriptors.
* Aligned to descriptor-size boundary.
@@ -151,7 +151,7 @@ struct ath11k_ce_ring {
void *base_addr_owner_space;
/* CE address space */
- dma_addr_t base_addr_ce_space;
+ u32 base_addr_ce_space;
/* HAL ring id */
u32 hal_ring_id;
diff --git a/drivers/net/wireless/ath/ath11k/core.c b/drivers/net/wireless/ath/ath11k/core.c
index d2fe4b5..00a5994 100644
--- a/drivers/net/wireless/ath/ath11k/core.c
+++ b/drivers/net/wireless/ath/ath11k/core.c
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/module.h>
@@ -326,7 +325,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
.hw_ops = &ipq5018_ops,
.qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_IPQ8074,
- .ring_mask = &ath11k_hw_ring_mask_ipq8074,
+ .ring_mask = &ath11k_hw_ring_mask_ipq5018,
.regs = &ipq5018_regs,
.m3_addr = ATH11K_QMI_IPQ5018_M3_DUMP_ADDRESS,
.spectral_fft_sz = 2,
@@ -364,7 +363,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.is_qdss_support = false,
.max_tx_ring = 1,
.wakeup_mhi = false,
- .reo_status_poll = false,
+ .reo_status_poll = true,
.cfr_support = true,
.cfr_dma_hdr_size = sizeof(struct ath11k_cfir_dma_hdr),
.cfr_num_stream_bufs = 255,
@@ -390,7 +389,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.hal_desc_sz = sizeof(struct hal_rx_desc_qcn9074),
.hw_ops = &qcn6122_ops,
.qmi_service_ins_id = ATH11K_QMI_WLFW_SERVICE_INS_ID_V01_QCN6122,
- .ring_mask = &ath11k_hw_ring_mask_qcn6122,
+ .ring_mask = &ath11k_hw_ring_mask_ipq5018,
.regs = &qcn6122_regs,
.m3_addr = ATH11K_QMI_QCN6122_M3_DUMP_ADDRESS,
.spectral_fft_sz = 2,
@@ -428,7 +427,7 @@ static const struct ath11k_hw_params ath11k_hw_params[] = {
.is_qdss_support = true,
.max_tx_ring = 1,
.wakeup_mhi = false,
- .reo_status_poll = false,
+ .reo_status_poll = true,
.cfr_support = true,
.cfr_dma_hdr_size = sizeof(struct ath11k_cfir_dma_hdr),
.cfr_num_stream_bufs = 255,
@@ -900,8 +899,7 @@ int ath11k_core_fetch_bdf(struct ath11k_base *ab, struct ath11k_board_data *bd)
ab->bd_api = 2;
if (country_code && strlen(country_code) == 2) {
- memcpy(cc, country_code, 2);
- cc[2] = 0;
+ strcpy(cc, country_code);
ath11k_country_str_tolower(cc);
scnprintf(filename, sizeof(filename),
"board-2-%s.bin", cc);
@@ -1054,7 +1052,7 @@ static int ath11k_core_pdev_create(struct ath11k_base *ab)
err_nss_tear:
ath11k_nss_teardown(ab);
err_dp_pdev_free:
- ath11k_dp_pdev_free(ab, true);
+ ath11k_dp_pdev_free(ab);
err_pdev_debug:
ath11k_debugfs_pdev_destroy(ab);
@@ -1072,7 +1070,7 @@ static void ath11k_core_pdev_destroy(struct ath11k_base *ab)
ath11k_nss_set_enabled(ab, false);
ath11k_hif_irq_disable(ab);
- ath11k_dp_pdev_free(ab, true);
+ ath11k_dp_pdev_free(ab);
ath11k_debugfs_pdev_destroy(ab);
}
@@ -1371,7 +1369,7 @@ static int ath11k_core_reconfigure_on_crash(struct ath11k_base *ab)
ath11k_spectral_deinit(ab);
ath11k_thermal_unregister(ab);
ath11k_hif_irq_disable(ab);
- ath11k_dp_pdev_free(ab, false);
+ ath11k_dp_pdev_free(ab);
ath11k_hif_stop(ab);
ath11k_wmi_detach(ab);
ath11k_dp_pdev_reo_cleanup(ab);
@@ -1451,7 +1449,6 @@ static void ath11k_core_restart(struct work_struct *work)
ath11k_mac_drain_tx(ar);
complete(&ar->scan.started);
complete(&ar->scan.completed);
- complete(&ar->scan.on_channel);
complete(&ar->peer_assoc_done);
complete(&ar->peer_delete_done);
complete(&ar->install_key_done);
diff --git a/drivers/net/wireless/ath/ath11k/core.h b/drivers/net/wireless/ath/ath11k/core.h
index 047c3f7..09293d0 100644
--- a/drivers/net/wireless/ath/ath11k/core.h
+++ b/drivers/net/wireless/ath/ath11k/core.h
@@ -127,7 +127,7 @@ struct ath11k_skb_rxcb {
bool is_last_msdu;
bool is_continuation;
bool is_mcbc;
- bool is_eapol_tkip;
+ bool is_eapol;
struct hal_rx_desc *rx_desc;
u8 err_rel_src;
u8 err_code;
@@ -363,8 +363,6 @@ struct ath11k_vif {
u32 tid_conf_changed[ATH11K_TID_MAX];
struct ath11k_tid_qos_config tid_cfg[ATH11K_TID_MAX];
u32 tids_rst;
- u64 tbtt_offset;
- struct work_struct update_bcn_template_work;
DECLARE_BITMAP(free_groupidx_map, ATH11K_GROUP_KEYS_NUM_MAX);
};
@@ -531,7 +529,6 @@ struct ath11k_sta {
u64 tx_duration;
u32 tx_rts_retry_count;
u8 rssi_comb;
- u32 tx_retry_count;
struct ewma_avg_rssi avg_rssi;
struct ath11k_htt_tx_stats *tx_stats;
struct ath11k_rx_peer_stats *rx_stats;
@@ -585,9 +582,6 @@ struct ath11k_sta {
struct ath11k_per_peer_cfr_capture cfr_capture;
#endif
struct ath11k_smart_ant_sta *smart_ant_sta;
- struct completion disassoc_comp;
- bool tx_disassoc;
- u32 bw_last;
};
#define ATH11K_HALF_20MHZ_BW 10
@@ -808,17 +802,10 @@ struct ath11k_afc_info {
u32 afc_wfa_version;
bool is_6g_afc_expiry_event_received;
bool is_6g_afc_power_event_received;
- bool switch_to_lpi_indication_received;
struct ath11k_afc_sp_reg_info *afc_reg_info;
bool afc_regdom_configured;
};
-enum mon_status_buf_done {
- MON_STATUS_BUF_DONE = 0,
- MON_STATUS_NO_BUF_DONE = 1,
- MON_STATUS_BUF_DONE_NEXT = 2,
-};
-
struct ath11k {
struct ath11k_base *ab;
struct ath11k_pdev *pdev;
@@ -990,10 +977,6 @@ struct ath11k {
struct list_head fw_stats_pdevs;
struct completion fw_stats_complete;
bool fw_stats_done;
- u16 rts_threshold[NUM_NL80211_IFTYPES];
- struct completion ani_status_event;
- bool mon_status_skb_zero;
- enum mon_status_buf_done mon_status_no_buf_done;
};
struct ath11k_band_cap {
@@ -1176,18 +1159,6 @@ struct ath11k_base {
struct ath11k_pdev __rcu *pdevs_active[MAX_RADIOS];
struct ath11k_hal_reg_capabilities_ext hal_reg_cap[MAX_RADIOS];
unsigned long long free_vdev_map;
-
- /*
- * The rhashtable containing struct ath11k_peer keyed by mac addr
- * protected under ab->base_lock spin lock
- */
- struct rhashtable *rhead_peer_addr;
- struct rhashtable_params rhash_peer_addr_param;
-
- /* The rhashtable containing struct ath11k_peer keyed by id */
- struct rhashtable *rhead_peer_id;
- struct rhashtable_params rhash_peer_id_param;
-
struct list_head peers;
wait_queue_head_t peer_mapping_wq;
u8 mac_addr[ETH_ALEN];
diff --git a/drivers/net/wireless/ath/ath11k/debug_nss.c b/drivers/net/wireless/ath/ath11k/debug_nss.c
index 2899859..74f2131 100644
--- a/drivers/net/wireless/ath/ath11k/debug_nss.c
+++ b/drivers/net/wireless/ath/ath11k/debug_nss.c
@@ -11,8 +11,6 @@
#include "debug.h"
#include "debug_nss.h"
-extern struct dentry *debugfs_debug_infra;
-
static unsigned int
debug_nss_fill_mpp_dump(struct ath11k_vif *arvif, char *buf, ssize_t size)
{
@@ -1009,17 +1007,16 @@ void ath11k_debugfs_nss_mesh_vap_create(struct ath11k_vif *arvif)
void ath11k_debugfs_nss_soc_create(struct ath11k_base *ab)
{
- if (debugfs_debug_infra)
- return;
+ struct dentry *debugfs_dbg_infra;
- debugfs_debug_infra = debugfs_create_dir("dbg_infra", debugfs_ath11k);
+ debugfs_dbg_infra = debugfs_create_dir("dbg_infra", debugfs_ath11k);
debugfs_create_file("links", 0200,
- debugfs_debug_infra, ab,
+ debugfs_dbg_infra, ab,
&fops_nss_links);
debugfs_create_file("mpp_mode", 0600,
- debugfs_debug_infra, ab,
+ debugfs_dbg_infra, ab,
&fops_nss_mpp_mode);
}
diff --git a/drivers/net/wireless/ath/ath11k/debug_smart_ant.c b/drivers/net/wireless/ath/ath11k/debug_smart_ant.c
index 8fa98f2..808f836 100644
--- a/drivers/net/wireless/ath/ath11k/debug_smart_ant.c
+++ b/drivers/net/wireless/ath/ath11k/debug_smart_ant.c
@@ -56,12 +56,6 @@ static ssize_t ath11k_write_sa_enable_ops(struct file *file,
return count;
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
if (enable) {
ret = ath11k_wmi_pdev_enable_smart_ant(ar,
ATH11K_SMART_ANT_ENABLE,
@@ -119,14 +113,6 @@ static ssize_t ath11k_write_sa_tx_ant(struct file *file,
if (len < ATH11K_SA_TX_ANT_MIN_LEN)
return -EINVAL;
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
buf[len] = '\0';
sptr = buf;
for (i = 0; i < ETH_ALEN - 1; i++) {
@@ -212,11 +198,6 @@ static ssize_t ath11k_write_sa_rx_ant(struct file *file,
"Setting Rx antenna to %d\n", rxant);
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
ret = ath11k_wmi_pdev_set_rx_ant(ar, rxant);
mutex_unlock(&ar->conf_mutex);
@@ -264,14 +245,6 @@ static ssize_t ath11k_write_sa_train_info(struct file *file,
char *token, *sptr;
char buf[128];
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
if (!ath11k_smart_ant_enabled(ar))
return -ENOTSUPP;
diff --git a/drivers/net/wireless/ath/ath11k/debugfs.c b/drivers/net/wireless/ath/ath11k/debugfs.c
index cced2f7..2562397 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs.c
@@ -17,7 +17,6 @@
#include "qmi.h"
struct dentry *debugfs_ath11k;
-struct dentry *debugfs_debug_infra;
static const char *htt_bp_umac_ring[HTT_SW_UMAC_RING_IDX_MAX] = {
"REO2SW1_RING",
@@ -259,18 +258,9 @@ static ssize_t ath11k_write_wmi_ctrl_path_stats(struct file *file,
{
struct ath11k_vif *arvif = file->private_data;
struct wmi_ctrl_path_stats_cmd_param param = {0};
- struct ath11k *ar = arvif->ar;
u8 buf[128] = {0};
int ret;
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, ubuf, count);
if (ret < 0) {
return ret;
@@ -719,19 +709,10 @@ static ssize_t ath11k_write_ampdu_aggr_size(struct file *file,
{
struct ath11k_vif *arvif = file->private_data;
struct ath11k_base *ab = arvif->ar->ab;
- struct ath11k *ar = arvif->ar;
unsigned int tx_aggr_size = 0;
int ret;
struct set_custom_aggr_size_params params = {0};
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
if (kstrtouint_from_user(ubuf, count, 0, &tx_aggr_size))
return -EINVAL;
@@ -2361,7 +2342,6 @@ void ath11k_debugfs_destroy()
{
debugfs_remove_recursive(debugfs_ath11k);
debugfs_ath11k = NULL;
- debugfs_debug_infra = NULL;
}
void ath11k_debugfs_fw_stats_init(struct ath11k *ar)
@@ -2785,12 +2765,6 @@ static ssize_t ath11k_write_simulate_radar(struct file *file,
struct ath11k *ar = file->private_data;
int ret;
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
ret = ath11k_wmi_simulate_radar(ar);
if (ret)
return ret;
@@ -2851,14 +2825,6 @@ static ssize_t ath11k_write_btcoex(struct file *file,
if (!ar)
return -EINVAL;
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
buf_size = min(count, (sizeof(buf) - 1));
if (copy_from_user(buf, ubuf, buf_size))
return -EFAULT;
@@ -2951,14 +2917,6 @@ static ssize_t ath11k_write_btcoex_duty_cycle(struct file *file,
if (!ar)
return -EINVAL;
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
- mutex_unlock(&ar->conf_mutex);
-
if (!test_bit(ATH11K_FLAG_BTCOEX, &ar->dev_flags))
return -EINVAL;
@@ -3050,12 +3008,6 @@ static ssize_t ath11k_write_btcoex_algo(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
arvif = list_first_entry(&ar->arvifs, typeof(*arvif), list);
if (!arvif->is_started) {
ret = -EINVAL;
@@ -3246,12 +3198,6 @@ static ssize_t ath11k_write_ps_state_enable(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- ret = -ENETDOWN;
- goto exit;
- }
-
if (ar->ps_state_enable == ps_state_enable) {
ret = count;
goto exit;
@@ -3518,14 +3464,6 @@ static ssize_t ath11k_athdiag_write(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
- mutex_unlock(&ar->conf_mutex);
-
buf = vmalloc(count);
if (!buf) {
ret = -ENOMEM;
@@ -4407,35 +4345,11 @@ static ssize_t ath11k_read_ani_enable(struct file *file, char __user *user_buf,
size_t count, loff_t *ppos)
{
struct ath11k *ar = file->private_data;
- unsigned long time_left;
- int ret;
- int len;
- char buf[128];
+ int len = 0;
+ char buf[32];
- mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ret = -ENETDOWN;
- goto unlock;
- }
- reinit_completion(&ar->ani_status_event);
- ret = ath11k_wmi_pdev_get_ani_status(ar);
- if (ret) {
- ath11k_warn(ar->ab, "failed to get ani status: %d\n", ret);
- goto unlock;
- }
- time_left = wait_for_completion_timeout(&ar->ani_status_event,
- 1 * HZ);
- if (time_left == 0) {
- ret = -ETIMEDOUT;
- goto unlock;
- }
- len = scnprintf(buf, sizeof(buf), "%d\n", ar->ani_enabled);
- mutex_unlock(&ar->conf_mutex);
+ len = scnprintf(buf, sizeof(buf) - len, "%d\n",ar->ani_enabled);
return simple_read_from_buffer(user_buf, count, ppos, buf, len);
-
-unlock:
- mutex_unlock(&ar->conf_mutex);
- return ret;
}
static ssize_t ath11k_write_ani_enable(struct file *file,
@@ -4451,12 +4365,6 @@ static ssize_t ath11k_write_ani_enable(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d is not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
if (ar->ani_enabled == enable) {
ret = count;
goto exit;
@@ -4468,9 +4376,7 @@ static ssize_t ath11k_write_ani_enable(struct file *file,
ath11k_warn(ar->ab, "ani_enable failed from debugfs: %d\n", ret);
goto exit;
}
- spin_lock_bh(&ar->data_lock);
ar->ani_enabled = enable;
- spin_unlock_bh(&ar->data_lock);
ret = count;
exit:
@@ -4514,12 +4420,6 @@ static ssize_t ath11k_write_ani_poll_period(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_ANI_POLL_PERIOD,
ani_poll_period, ar->pdev->pdev_id);
if (ret) {
@@ -4570,12 +4470,6 @@ static ssize_t ath11k_write_ani_listen_period(struct file *file,
mutex_lock(&ar->conf_mutex);
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
ret = ath11k_wmi_pdev_set_param(ar, WMI_PDEV_PARAM_ANI_LISTEN_PERIOD,
ani_listen_period, ar->pdev->pdev_id);
if (ret) {
@@ -4999,26 +4893,22 @@ static ssize_t ath11k_debugfs_write_rts_threshold(struct file *file,
size_t count, loff_t *ppos)
{
struct ath11k *ar = file->private_data;
- int rts_threshold, ret = 0, vif_type;
+ int rts_threshold, ret = 0;
struct ath11k_vif *arvif;
struct ieee80211_vif *vif;
- char buf[128] = {0};
- ret = simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
- if (ret < 0)
- return ret;
-
- ret = sscanf(buf, "%d %d", &rts_threshold, &vif_type);
- if (ret || vif_type >= NUM_NL80211_IFTYPES)
+ ret = kstrtoint_from_user(user_buf, count, 0, &rts_threshold);
+ if (ret)
return ret;
mutex_lock(&ar->conf_mutex);
list_for_each_entry(arvif, &ar->arvifs, list) {
vif = arvif->vif;
- if (vif->type == vif_type) {
+ if (vif->type != NL80211_IFTYPE_MESH_POINT) {
+ ar->hw->wiphy->rts_threshold = rts_threshold;
ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
WMI_VDEV_PARAM_RTS_THRESHOLD,
- rts_threshold);
+ ar->hw->wiphy->rts_threshold);
if (ret) {
ath11k_warn(ar->ab,
"Failed to set rts threshold for vdev %d: %d\n",
@@ -5028,7 +4918,6 @@ static ssize_t ath11k_debugfs_write_rts_threshold(struct file *file,
}
}
- ar->rts_threshold[vif_type] = rts_threshold;
mutex_unlock(&ar->conf_mutex);
return count;
}
@@ -5038,15 +4927,12 @@ static ssize_t ath11k_debugfs_read_rts_threshold(struct file *file,
size_t count, loff_t *ppos)
{
struct ath11k *ar = file->private_data;
- char buf[2048] = {0};
- int len = 0, i;
+ char buf[32] = {0};
+ int len = 0;
mutex_lock(&ar->conf_mutex);
- len += scnprintf(buf, sizeof(buf) - len, "VIF type\tRTS threshold\n");
- for (i = 0; i < NUM_NL80211_IFTYPES; i++) {
- if (ar->rts_threshold[i])
- len += scnprintf(buf + len, sizeof(buf) - len, "%d\t\t%d\n", i, ar->rts_threshold[i]);
- }
+ len = scnprintf(buf, sizeof(buf) - len, "%d\n",
+ ar->hw->wiphy->rts_threshold);
mutex_unlock(&ar->conf_mutex);
return simple_read_from_buffer(user_buf, count, ppos, buf, len);
}
@@ -5220,9 +5106,8 @@ int ath11k_debugfs_register(struct ath11k *ar)
ath11k_init_pktlog(ar);
ath11k_smart_ant_debugfs_init(ar);
init_completion(&ar->tpc_complete);
- init_completion(&ab->ani_ofdm_event);
- init_completion(&ab->ani_cck_event);
- init_completion(&ar->ani_status_event);
+ init_completion(&ab->ani_ofdm_event);
+ init_completion(&ab->ani_cck_event);
debugfs_create_file("ext_tx_stats", 0644,
ar->debug.debugfs_pdev, ar,
diff --git a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
index c2dea31..19c03e0 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs_htt_stats.c
@@ -6338,13 +6338,6 @@ static ssize_t ath11k_write_htt_stats_reset(struct file *file,
return -E2BIG;
mutex_lock(&ar->conf_mutex);
-
- if (ar->state != ATH11K_STATE_ON) {
- ath11k_warn(ar->ab, "pdev %d not in ON state\n", ar->pdev->pdev_id);
- mutex_unlock(&ar->conf_mutex);
- return -ENETDOWN;
- }
-
cfg_params.cfg0 = HTT_STAT_DEFAULT_RESET_START_OFFSET;
cfg_params.cfg1 = 1 << (cfg_params.cfg0 + type);
ret = ath11k_dp_tx_htt_h2t_ext_stats_req(ar,
diff --git a/drivers/net/wireless/ath/ath11k/debugfs_sta.c b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
index d57e62a..71201e7 100644
--- a/drivers/net/wireless/ath/ath11k/debugfs_sta.c
+++ b/drivers/net/wireless/ath/ath11k/debugfs_sta.c
@@ -1668,24 +1668,17 @@ static ssize_t ath11k_dbg_sta_read_tx_success_bytes(struct file *file,
int len = 0, i, retval = 0;
u64 total_succ_bytes;
+ if (!arsta->tx_stats || !arsta->wbm_tx_stats) {
+ ath11k_warn(ar->ab, "failed to get tx success bytes");
+ return -EINVAL;
+ }
+
mutex_lock(&ar->conf_mutex);
spin_lock_bh(&ar->data_lock);
- if (!arsta->tx_stats || !arsta->wbm_tx_stats) {
- ath11k_warn(ar->ab, "failed to get tx success bytes");
- retval = -EINVAL;
- goto end;
- }
-
stats = &arsta->tx_stats->stats[ATH11K_STATS_TYPE_SUCC];
- if (!stats) {
- ath11k_warn(ar->ab, "Stats not present to read Tx success bytes\n");
- retval = -EINVAL;
- goto end;
- }
-
total_succ_bytes = stats->gi[ATH11K_COUNTER_TYPE_BYTES][0] +
stats->gi[ATH11K_COUNTER_TYPE_BYTES][1] +
stats->gi[ATH11K_COUNTER_TYPE_BYTES][2] +
@@ -1704,11 +1697,6 @@ static ssize_t ath11k_dbg_sta_read_tx_success_bytes(struct file *file,
mutex_unlock(&ar->conf_mutex);
return retval;
-
-end:
- spin_unlock_bh(&ar->data_lock);
- mutex_unlock(&ar->conf_mutex);
- return retval;
}
static const struct file_operations fops_tx_success_bytes = {
diff --git a/drivers/net/wireless/ath/ath11k/dp.c b/drivers/net/wireless/ath/ath11k/dp.c
index 822ed1c..bcbc612 100644
--- a/drivers/net/wireless/ath/ath11k/dp.c
+++ b/drivers/net/wireless/ath/ath11k/dp.c
@@ -251,8 +251,6 @@ int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring,
int max_entries = ath11k_hal_srng_get_max_entries(ab, type);
int ret;
bool cached;
- unsigned long off;
- u8 align = HAL_RING_BASE_ALIGN;
if (max_entries < 0 || entry_sz < 0)
return -EINVAL;
@@ -260,9 +258,6 @@ int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring,
if (num_entries > max_entries)
num_entries = max_entries;
- if (type == HAL_RXDMA_DIR_BUF)
- align = HAL_RXDMA_DIR_BUF_RING_BASE_ALIGN;
-
/* Allocate the reo dst and tx completion rings from cacheable memory */
switch (type) {
case HAL_REO_DST:
@@ -278,7 +273,7 @@ int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring,
if (ath11k_nss_offload_enabled(ab))
cached = false;
- ring->size = (num_entries * entry_sz) + align - 1;
+ ring->size = (num_entries * entry_sz) + HAL_RING_BASE_ALIGN - 1;
if (!cached) {
ring->vaddr_unaligned = dma_alloc_coherent(ab->dev, ring->size,
@@ -294,10 +289,9 @@ int ath11k_dp_srng_setup(struct ath11k_base *ab, struct dp_srng *ring,
ATH11K_MEMORY_STATS_INC(ab, dma_alloc, ring->size);
- ring->paddr = (dma_addr_t) ALIGN((unsigned long)ring->paddr_unaligned,
- align);
- off = (unsigned long)ring->paddr - (unsigned long)ring->paddr_unaligned;
- ring->vaddr = (u32 *) ((unsigned long)ring->vaddr_unaligned + off);
+ ring->vaddr = PTR_ALIGN(ring->vaddr_unaligned, HAL_RING_BASE_ALIGN);
+ ring->paddr = ring->paddr_unaligned + ((unsigned long)ring->vaddr -
+ (unsigned long)ring->vaddr_unaligned);
params.ring_base_vaddr = ring->vaddr;
params.ring_base_paddr = ring->paddr;
@@ -396,7 +390,27 @@ static void ath11k_dp_handle_reo_status_timer(struct timer_list *timer)
struct ath11k_dp *dp = from_timer(dp, timer, reo_status_timer);
struct ath11k_base *ab = dp->ab;
+ spin_lock_bh(&dp->reo_cmd_lock);
+ dp->reo_status_timer_running = false;
+ spin_unlock_bh(&dp->reo_cmd_lock);
+
ath11k_dp_process_reo_status(ab);
+}
+
+void ath11k_dp_start_reo_status_timer(struct ath11k_base *ab)
+{
+ struct ath11k_dp *dp = &ab->dp;
+
+ if (!ab->hw_params.reo_status_poll)
+ return;
+
+ spin_lock_bh(&dp->reo_cmd_lock);
+ if (dp->reo_status_timer_running) {
+ spin_unlock_bh(&dp->reo_cmd_lock);
+ return;
+ }
+ dp->reo_status_timer_running = true;
+ spin_unlock_bh(&dp->reo_cmd_lock);
mod_timer(&dp->reo_status_timer, jiffies +
msecs_to_jiffies(ATH11K_REO_STATUS_POLL_TIMEOUT_MS));
@@ -410,6 +424,7 @@ static void ath11k_dp_stop_reo_status_timer(struct ath11k_base *ab)
return;
del_timer_sync(&dp->reo_status_timer);
+ dp->reo_status_timer_running = false;
}
static void ath11k_dp_init_reo_status_timer(struct ath11k_base *ab)
@@ -421,10 +436,6 @@ static void ath11k_dp_init_reo_status_timer(struct ath11k_base *ab)
timer_setup(&dp->reo_status_timer,
ath11k_dp_handle_reo_status_timer, 0);
-
- /* Trigger reo status polling periodically */
- mod_timer(&dp->reo_status_timer, jiffies +
- msecs_to_jiffies(ATH11K_REO_STATUS_POLL_TIMEOUT_MS));
}
static void ath11k_dp_srng_common_cleanup(struct ath11k_base *ab)
@@ -981,7 +992,7 @@ int ath11k_dp_service_srng(struct ath11k_base *ab,
}
EXPORT_SYMBOL(ath11k_dp_service_srng);
-void ath11k_dp_pdev_free(struct ath11k_base *ab, bool ureg_dbgfs)
+void ath11k_dp_pdev_free(struct ath11k_base *ab)
{
struct ath11k *ar;
int i;
@@ -991,8 +1002,7 @@ void ath11k_dp_pdev_free(struct ath11k_base *ab, bool ureg_dbgfs)
for (i = 0; i < ab->num_radios; i++) {
ar = ab->pdevs[i].ar;
ath11k_dp_rx_pdev_free(ab, i);
- if (ureg_dbgfs)
- ath11k_debugfs_unregister(ar);
+ ath11k_debugfs_unregister(ar);
ath11k_dp_rx_pdev_mon_detach(ar);
}
}
@@ -1047,7 +1057,7 @@ int ath11k_dp_pdev_alloc(struct ath11k_base *ab)
return 0;
err:
- ath11k_dp_pdev_free(ab, true);
+ ath11k_dp_pdev_free(ab);
return ret;
}
diff --git a/drivers/net/wireless/ath/ath11k/dp.h b/drivers/net/wireless/ath/ath11k/dp.h
index 5dc9061..46a9ad6 100644
--- a/drivers/net/wireless/ath/ath11k/dp.h
+++ b/drivers/net/wireless/ath/ath11k/dp.h
@@ -45,7 +45,7 @@ struct dp_rx_tid {
#define DP_MON_PURGE_TIMEOUT_MS 100
#define DP_MON_SERVICE_BUDGET 128
-#define ATH11K_REO_STATUS_POLL_TIMEOUT_MS 50
+#define ATH11K_REO_STATUS_POLL_TIMEOUT_MS 10
struct dp_reo_cache_flush_elem {
struct list_head list;
@@ -307,6 +307,7 @@ struct ath11k_dp {
/* reo status timer and flags */
struct timer_list reo_status_timer;
+ bool reo_status_timer_running;
};
/* HTT definitions */
@@ -1959,7 +1960,7 @@ void ath11k_dp_free(struct ath11k_base *ab);
int ath11k_dp_alloc(struct ath11k_base *ab);
int ath11k_dp_pdev_alloc(struct ath11k_base *ab);
void ath11k_dp_pdev_pre_alloc(struct ath11k_base *ab);
-void ath11k_dp_pdev_free(struct ath11k_base *ab, bool ureg_dbgfs);
+void ath11k_dp_pdev_free(struct ath11k_base *ab);
int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id,
int mac_id, enum hal_ring_type ring_type);
int ath11k_dp_peer_setup(struct ath11k *ar, int vdev_id, const u8 *addr);
@@ -1984,5 +1985,6 @@ void ath11k_dp_shadow_init_timer(struct ath11k_base *ab,
struct ath11k_hp_update_timer *update_timer,
u32 interval, u32 ring_id);
void ath11k_dp_stop_shadow_timers(struct ath11k_base *ab);
+void ath11k_dp_start_reo_status_timer(struct ath11k_base *ab);
#endif
diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c
index 8b375de..56f7ce6 100644
--- a/drivers/net/wireless/ath/ath11k/dp_rx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_rx.c
@@ -434,12 +434,12 @@ int ath11k_dp_rxbufs_replenish(struct ath11k_base *ab, int mac_id,
buf_id = buf_ids[buf_id_index];
idr_replace(&rx_ring->bufs_idr, skb, buf_id);
} else {
- buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 1,
- (rx_ring->bufs_max * 3) + 1, GFP_ATOMIC);
+ buf_id = idr_alloc(&rx_ring->bufs_idr, skb, 0,
+ rx_ring->bufs_max * 3, GFP_ATOMIC);
}
spin_unlock_bh(&rx_ring->idr_lock);
- if (buf_id <= 0)
+ if (buf_id < 0)
goto fail_free_skb;
desc = ath11k_hal_srng_src_get_next_entry(ab, srng);
@@ -2689,14 +2689,11 @@ static void ath11k_dp_rx_h_undecap(struct ath11k *ar, struct sk_buff *msdu,
case DP_RX_DECAP_TYPE_ETHERNET2_DIX:
ehdr = (struct ethhdr *) msdu->data;
- /* mac80211 allows fast path only for authorized STA and
- also not supported for TKIP */
- if (ehdr->h_proto == cpu_to_be16(ETH_P_PAE) ||
- enctype == HAL_ENCRYPT_TYPE_TKIP_MIC) {
- ATH11K_SKB_RXCB(msdu)->is_eapol_tkip = true;
+ /* mac80211 allows fast path only for authorized STA */
+ if (ehdr->h_proto == cpu_to_be16(ETH_P_PAE)) {
+ ATH11K_SKB_RXCB(msdu)->is_eapol = true;
ath11k_dp_rx_h_undecap_eth(ar, msdu, first_hdr,
enctype, status);
- break;
}
/* PN for mcast packets will be validated in mac80211;
@@ -2827,9 +2824,6 @@ static void ath11k_dp_rx_h_mpdu(struct ath11k *ar,
/* PN for multicast packets will be checked in mac80211 */
rxcb = ATH11K_SKB_RXCB(msdu);
-
- rxcb->is_mcbc = ath11k_dp_rx_h_attn_is_mcbc(ar->ab, rx_desc);
-
fill_crypto_hdr = rxcb->is_mcbc;
if (rxcb->is_mcbc) {
rxcb->seq_no = ath11k_dp_rx_h_mpdu_start_seq_no(ar->ab, rx_desc);
@@ -3054,7 +3048,7 @@ static void ath11k_dp_rx_deliver_msdu(struct ath11k *ar, struct napi_struct *nap
int len;
u8 index;
bool is_mcbc = rxcb->is_mcbc;
- bool is_eapol_tkip = rxcb->is_eapol_tkip;
+ bool is_eapol = rxcb->is_eapol;
if ((status->encoding == RX_ENC_HE) && !(status->flag & RX_FLAG_RADIOTAP_HE) &&
!(status->flag & RX_FLAG_SKIP_MONITOR)) {
@@ -3109,7 +3103,7 @@ static void ath11k_dp_rx_deliver_msdu(struct ath11k *ar, struct napi_struct *nap
* Also, fast_rx expectes the STA to be authorized, hence
* eapol packets are sent in slow path.
*/
- if (decap == DP_RX_DECAP_TYPE_ETHERNET2_DIX && !is_eapol_tkip &&
+ if (decap == DP_RX_DECAP_TYPE_ETHERNET2_DIX && !is_eapol &&
!(is_mcbc && rx_status->flag & RX_FLAG_DECRYPTED)) {
rx_status->flag |= RX_FLAG_8023;
goto exit;
@@ -3403,17 +3397,6 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id,
ath11k_hal_srng_access_begin(ab, srng);
while (likely(desc = (struct hal_reo_dest_ring *)ath11k_hal_srng_dst_get_next_entry(ab, srng))) {
-
- push_reason = FIELD_GET(HAL_REO_DEST_RING_INFO0_PUSH_REASON,
- desc->info0);
-
- if (unlikely(push_reason ==
- HAL_REO_DEST_RING_PUSH_REASON_ERR_DETECTED)) {
- ath11k_warn(ab,"Received invalid desc\n");
- ab->soc_stats.hal_reo_error[dp->reo_dst_ring[ring_id].ring_id]++;
- continue;
- }
-
cookie = FIELD_GET(BUFFER_ADDR_INFO1_SW_COOKIE,
desc->buf_addr_info.info1);
buf_id = FIELD_GET(DP_RXDMA_BUF_COOKIE_BUF_ID,
@@ -3446,6 +3429,8 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id,
num_buffs_reaped[mac_id]++;
+ push_reason = FIELD_GET(HAL_REO_DEST_RING_INFO0_PUSH_REASON,
+ desc->info0);
if (unlikely(push_reason !=
HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION)) {
dev_kfree_skb_any(msdu);
@@ -3989,14 +3974,6 @@ dp_rx_mon_handle_status_buf_done(struct ath11k_base *ab, struct hal_srng *srng,
return DP_MON_STATUS_NO_DMA;
rxcb = ATH11K_SKB_RXCB(skb);
-
- if (!rxcb->paddr) {
- ath11k_warn(ab, "Invalid paddr at SKB cb \n");
- } else if (paddr != rxcb->paddr) {
- ath11k_warn(ab, "Invalid desc and skb fetch %pad rxcb %pad rbm %u cookie %u\n",
- &paddr, &(rxcb->paddr), rbm, cookie);
- }
-
dma_sync_single_for_cpu(ab->dev, rxcb->paddr,
skb->len + skb_tailroom(skb),
DMA_FROM_DEVICE);
@@ -4040,7 +4017,6 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
ath11k_hal_srng_access_begin(ab, srng);
while (*budget) {
*budget -= 1;
- ar->mon_status_no_buf_done = MON_STATUS_BUF_DONE;
rx_mon_status_desc = ath11k_hal_srng_src_peek(ab, srng);
if (!rx_mon_status_desc) {
pmon->mon_status_buf_state = DP_MON_STATUS_REPLINISH;
@@ -4070,18 +4046,6 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
rxcb = ATH11K_SKB_RXCB(skb);
- if (ar->mon_status_skb_zero) {
- ath11k_warn(ab, "Previous mon status skb zero \n");
- ar->mon_status_skb_zero = false;
- }
-
- if (!rxcb->paddr) {
- ath11k_warn(ab, "NULL paddr at SKB cb \n");
- } else if (paddr != rxcb->paddr) {
- ath11k_warn(ab, "paddr mismatch desc %pad rxcb %pad rbm-%u cookie %u\n",
- &paddr, &(rxcb->paddr), rbm, cookie);
- }
-
dma_sync_single_for_cpu(ab->dev, rxcb->paddr,
skb->len + skb_tailroom(skb),
DMA_FROM_DEVICE);
@@ -4090,7 +4054,6 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
if (FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl) !=
HAL_RX_STATUS_BUFFER_DONE) {
- ar->mon_status_no_buf_done = MON_STATUS_NO_BUF_DONE;
/* RxDMA status done bit might not be set even
* though tp is moved by HW.
*/
@@ -4112,7 +4075,6 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
if (reap_status == DP_MON_STATUS_NO_DMA) {
continue;
} else if (reap_status == DP_MON_STATUS_REPLINISH) {
- ar->mon_status_no_buf_done = MON_STATUS_BUF_DONE_NEXT;
ath11k_warn(ab, "mon status DONE not set %lx, buf_id %d\n",
FIELD_GET(HAL_TLV_HDR_TAG, tlv->tl),
buf_id);
@@ -4155,9 +4117,6 @@ static int ath11k_dp_rx_reap_mon_status_ring(struct ath11k_base *ab, int mac_id,
&buf_id);
if (!skb) {
- ath11k_warn(ab, "failed to allocate skb no buf done %d\n",
- ar->mon_status_no_buf_done);
- ar->mon_status_skb_zero = true;
ath11k_hal_rx_buf_addr_info_set(rx_mon_status_desc, 0, 0,
HAL_RX_BUF_RBM_SW3_BM);
num_buffs_reaped++;
diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c
index 2a798ee..bb64b76 100644
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
@@ -831,7 +831,6 @@ static void ath11k_dp_tx_complete_msdu(struct ath11k *ar,
status.info = info;
rate = arsta->last_txrate;
status.rate = &rate;
- arsta->tx_retry_count += ts.try_cnt > 1 ? (ts.try_cnt - 1) : 0;
if (unlikely(ath11k_debugfs_is_extd_tx_stats_enabled(ar))) {
if(arsta->wbm_tx_stats && wbm_status < HAL_WBM_REL_HTT_TX_COMP_STATUS_MAX)
@@ -896,7 +895,8 @@ static inline bool ath11k_dp_tx_completion_valid(struct hal_wbm_release_ring *de
if (FIELD_GET(HAL_WBM_RELEASE_INFO0_REL_SRC_MODULE, desc->info0) ==
HAL_WBM_REL_SRC_MODULE_FW) {
- status_desc = (struct htt_tx_wbm_completion *)(((u8 *)desc) + HTT_TX_WBM_COMP_STATUS_OFFSET);
+ status_desc = (struct htt_tx_wbm_completion *)((u8 *)desc) + HTT_TX_WBM_COMP_STATUS_OFFSET;
+
/* Dont consider HTT_TX_COMP_STATUS_MEC_NOTIFY */
if (FIELD_GET(HTT_TX_WBM_COMP_INFO0_STATUS, status_desc->info0) ==
HAL_WBM_REL_HTT_TX_COMP_STATUS_MEC_NOTIFY)
@@ -1083,6 +1083,10 @@ int ath11k_dp_tx_send_reo_cmd(struct ath11k_base *ab, struct dp_rx_tid *rx_tid,
if (cmd_num == 0)
return -EINVAL;
+ /* Trigger reo status polling if required */
+ if (cmd->flag & HAL_REO_CMD_FLG_NEED_STATUS)
+ ath11k_dp_start_reo_status_timer(ab);
+
if (!cb)
return 0;
diff --git a/drivers/net/wireless/ath/ath11k/hal.h b/drivers/net/wireless/ath/ath11k/hal.h
index 2ef92cd..875efcb 100644
--- a/drivers/net/wireless/ath/ath11k/hal.h
+++ b/drivers/net/wireless/ath/ath11k/hal.h
@@ -21,8 +21,7 @@ struct ath11k_base;
#define HAL_NUM_MPDU_LINKS_PER_QUEUE_DESC 12
#define HAL_MAX_AVAIL_BLK_RES 3
-#define HAL_RING_BASE_ALIGN 32
-#define HAL_RXDMA_DIR_BUF_RING_BASE_ALIGN 8
+#define HAL_RING_BASE_ALIGN 8
#define HAL_WBM_IDLE_SCATTER_BUF_SIZE_MAX 32704
/* TODO: Check with hw team on the supported scatter buf size */
diff --git a/drivers/net/wireless/ath/ath11k/hw.c b/drivers/net/wireless/ath/ath11k/hw.c
index be49f03..204d2e1 100644
--- a/drivers/net/wireless/ath/ath11k/hw.c
+++ b/drivers/net/wireless/ath/ath11k/hw.c
@@ -1450,6 +1450,39 @@ const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390 = {
},
};
+const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq5018 = {
+ .tx = {
+ ATH11K_TX_RING_MASK_0,
+ ATH11K_TX_RING_MASK_1,
+ ATH11K_TX_RING_MASK_2,
+ },
+ .rx_mon_status = {
+ 0, 0, 0,
+ ATH11K_RX_MON_STATUS_RING_MASK_0,
+ },
+ .rx = {
+ 0, 0, 0, 0,
+ ATH11K_RX_RING_MASK_0,
+ ATH11K_RX_RING_MASK_1,
+ ATH11K_RX_RING_MASK_2,
+ ATH11K_RX_RING_MASK_3,
+ },
+ .rx_err = {
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ ATH11K_RX_ERR_RING_MASK_0,
+ },
+ .rx_wbm_rel = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ ATH11K_RX_WBM_REL_RING_MASK_0,
+ },
+ .rxdma2host = {
+ ATH11K_RXDMA2HOST_RING_MASK_0,
+ },
+ .host2rxdma = {
+ ATH11K_HOST2RXDMA_RING_MASK_0,
+ },
+};
+
/* Target firmware's Copy Engine configuration. */
const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq8074[] = {
/* CE0: host->target HTC control and raw streams */
@@ -2164,41 +2197,6 @@ const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qcn9074[] = {
},
};
-const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn6122 = {
- .tx = {
- ATH11K_TX_RING_MASK_0,
- ATH11K_TX_RING_MASK_1,
- ATH11K_TX_RING_MASK_2,
- },
- .rx_mon_status = {
- 0, 0, 0,
- ATH11K_RX_MON_STATUS_RING_MASK_0,
- },
- .rx = {
- 0, 0, 0, 0,
- ATH11K_RX_RING_MASK_0,
- ATH11K_RX_RING_MASK_1,
- ATH11K_RX_RING_MASK_2,
- ATH11K_RX_RING_MASK_3,
- },
- .rx_err = {
- ATH11K_RX_ERR_RING_MASK_0,
- },
- .rx_wbm_rel = {
- ATH11K_RX_WBM_REL_RING_MASK_0,
- },
- .reo_status = {
- 0, 0, 0,
- ATH11K_REO_STATUS_RING_MASK_0,
- },
- .rxdma2host = {
- ATH11K_RXDMA2HOST_RING_MASK_0,
- },
- .host2rxdma = {
- ATH11K_HOST2RXDMA_RING_MASK_0,
- },
-};
-
/* Target firmware's Copy Engine configuration for IPQ5018 */
const struct ce_pipe_config ath11k_target_ce_config_wlan_ipq5018[] = {
/* CE0: host->target HTC control and raw streams */
diff --git a/drivers/net/wireless/ath/ath11k/hw.h b/drivers/net/wireless/ath/ath11k/hw.h
index 5a34b3b..bff8ea2 100644
--- a/drivers/net/wireless/ath/ath11k/hw.h
+++ b/drivers/net/wireless/ath/ath11k/hw.h
@@ -291,7 +291,7 @@ extern const struct ath11k_hw_ops qcn6122_ops;
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq8074;
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qca6390;
extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn9074;
-extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_qcn6122;
+extern const struct ath11k_hw_ring_mask ath11k_hw_ring_mask_ipq5018;
static inline
int ath11k_hw_get_mac_from_pdev_id(struct ath11k_hw_params *hw,
diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
index 4809076..dd9825d 100644
--- a/drivers/net/wireless/ath/ath11k/mac.c
+++ b/drivers/net/wireless/ath/ath11k/mac.c
@@ -887,7 +887,6 @@ void ath11k_mac_peer_cleanup_all(struct ath11k *ar)
spin_lock_bh(&ab->base_lock);
list_for_each_entry_safe(peer, tmp, &ab->peers, list) {
ath11k_peer_rx_tid_cleanup(ar, peer);
- ath11k_peer_rhash_delete(ab, peer);
list_del(&peer->list);
kfree(peer);
}
@@ -1230,7 +1229,6 @@ static int __ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif, struct sk_buff
u8 *ies;
int ret;
const u8 *vht_cap_ie;
- u64 adjusted_tsf;
ies = bcn->data + ieee80211_get_hdrlen_from_skb(bcn);
ies += sizeof(mgmt->u.beacon);
@@ -1268,15 +1266,6 @@ static int __ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif, struct sk_buff
WMI_BEACON_EMA_PARAM_LAST_TMPL_SHIFT;
}
- /* Make the TSF offset negative so beacons in the same
- * staggered batch have the same TSF.
- */
- if (arvif->tbtt_offset) {
- adjusted_tsf = cpu_to_le64(0ULL - arvif->tbtt_offset);
- mgmt = (void *)bcn->data;
- memcpy(&mgmt->u.beacon.timestamp, &adjusted_tsf, sizeof(adjusted_tsf));
- }
-
ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn, ema_param);
if (ret)
@@ -1335,7 +1324,7 @@ static int ath11k_mac_setup_bcn_tmpl_legacy(struct ath11k_vif *arvif)
return ret;
}
-int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
+static int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif)
{
if (arvif->vdev_type != WMI_VDEV_TYPE_AP)
return 0;
@@ -3194,7 +3183,7 @@ static int ath11k_mac_config_obss_pd(struct ath11k *ar,
static void ath11k_mac_op_nss_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
- u64 changed)
+ u32 changed)
{
struct ath11k *ar = hw->priv;
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
@@ -3232,7 +3221,7 @@ static void ath11k_mac_op_nss_bss_info_changed(struct ieee80211_hw *hw,
static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
- u64 changed)
+ u32 changed)
{
struct ath11k *ar = hw->priv;
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
@@ -3250,24 +3239,6 @@ static void ath11k_mac_op_bss_info_changed(struct ieee80211_hw *hw,
mutex_lock(&ar->conf_mutex);
- if (changed & BSS_CHANGED_6G_POWER_MODE) {
- if (ar->supports_6ghz &&
- info->chandef.chan->band == NL80211_BAND_6GHZ &&
- arvif->vdev_type == WMI_VDEV_TYPE_AP &&
- test_bit(WMI_TLV_SERVICE_EXT_TPC_REG_SUPPORT, ar->ab->wmi_ab.svc_map)) {
- ath11k_mac_fill_reg_tpc_info(ar, arvif->vif, &arvif->chanctx);
- ret = ath11k_wmi_send_vdev_set_tpc_power(ar, arvif->vdev_id,
- &arvif->reg_tpc_info);
- if (ret)
- ath11k_warn(ar->ab, "Failed to set 6GHZ power mode\n");
- else
- ieee80211_6ghz_power_mode_switch_done(arvif->vif);
-
- } else {
- ath11k_warn(ar->ab, "Set 6GHZ power mode not applicable\n");
- }
- }
-
if (changed & BSS_CHANGED_FTM_RESPONDER &&
arvif->ftm_responder != info->ftm_responder &&
(vif->type == NL80211_IFTYPE_AP ||
@@ -4060,7 +4031,6 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
const u8 *peer_addr;
int ret = 0;
u32 flags = 0;
- unsigned long time_left;
/* BIP needs to be done in software */
if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
@@ -4138,14 +4108,6 @@ static int ath11k_mac_op_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
else
flags |= WMI_KEY_GROUP;
- if (arsta && cmd == DISABLE_KEY && arsta->tx_disassoc) {
- time_left = wait_for_completion_timeout(&arsta->disassoc_comp,
- ATH11K_DISASSOC_TX_COMPLETION_TIMEOUT);
- if (!time_left)
- ath11k_warn(ab, "disassociation tx completion timeout %pM\n",
- sta->addr);
- }
-
ret = ath11k_install_key(arvif, key, cmd, peer_addr, flags);
if (ret) {
ath11k_warn(ab, "ath11k_install_key failed (%d)\n", ret);
@@ -4797,10 +4759,8 @@ static int ath11k_station_disassoc(struct ath11k *ar,
struct ieee80211_sta *sta)
{
struct ath11k_vif *arvif = (void *)vif->drv_priv;
- struct ath11k_sta *arsta = (struct ath11k_sta *)sta->drv_priv;
bool peer_dbg_info;
int ret = 0;
- unsigned long time_left;
lockdep_assert_held(&ar->conf_mutex);
@@ -4816,14 +4776,6 @@ static int ath11k_station_disassoc(struct ath11k *ar,
return ret;
}
- if (arsta->tx_disassoc) {
- time_left = wait_for_completion_timeout(&arsta->disassoc_comp,
- ATH11K_DISASSOC_TX_COMPLETION_TIMEOUT);
- if (!time_left)
- ath11k_warn(ar->ab, "disassociation tx completion timeout sta %pM\n",
- sta->addr);
- }
-
ret = ath11k_clear_peer_keys(arvif, sta->addr);
if (ret) {
ath11k_warn(ar->ab, "failed to clear all peer keys for vdev %i: %d\n",
@@ -4844,12 +4796,11 @@ static void ath11k_sta_rc_update_wk(struct work_struct *wk)
const u8 *ht_mcs_mask;
const u16 *vht_mcs_mask;
const u16 *he_mcs_mask;
- u32 changed, bw, nss, smps, bw_last;
+ u32 changed, bw, nss, smps;
int err, num_ht_rates, num_vht_rates, num_he_rates;
const struct cfg80211_bitrate_mask *mask;
struct peer_assoc_params peer_arg;
bool peer_dbg_info, debug;
- enum wmi_phy_mode peer_phymode;
arsta = container_of(wk, struct ath11k_sta, update_wk);
sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv);
@@ -4870,7 +4821,6 @@ static void ath11k_sta_rc_update_wk(struct work_struct *wk)
arsta->changed = 0;
bw = arsta->bw;
- bw_last = arsta->bw_last;
nss = arsta->nss;
smps = arsta->smps;
@@ -4886,59 +4836,11 @@ static void ath11k_sta_rc_update_wk(struct work_struct *wk)
ath11k_mac_max_he_nss(he_mcs_mask)));
if (changed & IEEE80211_RC_BW_CHANGED) {
- /* Get the the peer phymode */
- ath11k_peer_assoc_h_phymode(ar, arvif->vif, sta, &peer_arg);
- peer_phymode = peer_arg.peer_phymode;
-
- if (peer_dbg_info)
- ath11k_dbg(ar->ab, ATH11K_DBG_PEER, "mac update sta %pM peer bw %d phymode %d\n",
- sta->addr, bw, peer_phymode);
-
- if (bw > bw_last) {
- /* BW is upgraded. In this case we send WMI_PEER_PHYMODE
- * followed by WMI_PEER_CHWIDTH
- */
- ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac BW upgrade for sta %pM new BW %d, old BW %d\n",
- sta->addr, bw, bw_last);
-
- err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
- WMI_PEER_PHYMODE, peer_phymode);
-
- if (err) {
- ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n",
- sta->addr, peer_phymode, err);
- goto err_rc_update;
- }
-
- err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
- WMI_PEER_CHWIDTH, bw);
-
- if (err)
- ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n",
- sta->addr, bw, err);
- } else {
- /* BW is downgraded. In this case we send WMI_PEER_CHWIDTH
- * followed by WMI_PEER_PHYMODE
- */
- ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac BW downgrade for sta %pM new BW %d, old BW %d\n",
- sta->addr, bw, bw_last);
-
- err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
- WMI_PEER_CHWIDTH, bw);
-
- if (err) {
- ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n",
- sta->addr, bw, err);
- goto err_rc_update;
- }
-
- err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
- WMI_PEER_PHYMODE, peer_phymode);
-
- if (err)
- ath11k_warn(ar->ab, "failed to update STA %pM peer phymode %d: %d\n",
- sta->addr, peer_phymode, err);
- }
+ err = ath11k_wmi_set_peer_param(ar, sta->addr, arvif->vdev_id,
+ WMI_PEER_CHWIDTH, bw);
+ if (err)
+ ath11k_warn(ar->ab, "failed to update STA %pM peer bw %d: %d\n",
+ sta->addr, bw, err);
}
if (changed & IEEE80211_RC_NSS_CHANGED) {
@@ -5029,7 +4931,6 @@ static void ath11k_sta_rc_update_wk(struct work_struct *wk)
}
}
-err_rc_update:
mutex_unlock(&ar->conf_mutex);
}
@@ -5596,8 +5497,6 @@ static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
INIT_WORK(&arsta->update_wk, ath11k_sta_rc_update_wk);
INIT_WORK(&arsta->use_4addr_wk, ath11k_sta_use_4addr_wk);
INIT_WORK(&arsta->tid_config_wk, ath11k_sta_tid_cfg_wk);
- init_completion(&arsta->disassoc_comp);
- arsta->tx_disassoc = false;
ret = ath11k_mac_station_add(ar, vif, sta);
if (ret)
@@ -5621,13 +5520,13 @@ static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
if (peer && peer->sta == sta) {
ath11k_warn(ar->ab, "Found peer entry %pM n vdev %i after it was supposedly removed\n",
vif->addr, arvif->vdev_id);
- ath11k_peer_rhash_delete(ar->ab, peer);
peer->sta = NULL;
list_del(&peer->list);
kfree(peer);
ar->num_peers--;
}
spin_unlock_bh(&ar->ab->base_lock);
+
kfree(arsta->tx_stats);
arsta->tx_stats = NULL;
kfree(arsta->wbm_tx_stats);
@@ -5664,11 +5563,6 @@ static int ath11k_mac_op_sta_state(struct ieee80211_hw *hw,
peer->is_authorized = true;
spin_unlock_bh(&ar->ab->base_lock);
- spin_lock_bh(&ar->data_lock);
- /* Set arsta bw and last bw */
- arsta->bw = arsta->bw_last = sta->bandwidth;
- spin_unlock_bh(&ar->data_lock);
-
if (vif->type == NL80211_IFTYPE_STATION) {
ret = ath11k_wmi_set_peer_param(ar, sta->addr,
arvif->vdev_id,
@@ -5831,7 +5725,6 @@ static void ath11k_mac_op_sta_rc_update(struct ieee80211_hw *hw,
break;
}
- arsta->bw_last = arsta->bw;
arsta->bw = bw;
}
@@ -6608,8 +6501,6 @@ static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif,
struct ath11k_base *ab = ar->ab;
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
struct ieee80211_tx_info *info;
- struct ath11k_peer *peer;
- struct ath11k_sta *arsta;
dma_addr_t paddr;
bool tx_params_valid = false;
int buf_id;
@@ -6658,18 +6549,6 @@ static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif,
peer_is_in_cfr_unassoc_pool(ar, hdr->addr1))
tx_params_valid = true;
- if (ieee80211_has_protected(hdr->frame_control) &&
- ieee80211_is_disassoc(hdr->frame_control)) {
- spin_lock_bh(&ar->ab->base_lock);
- peer = ath11k_peer_find_by_addr(ar->ab, hdr->addr1);
- if (peer && peer->sta) {
- arsta = (struct ath11k_sta *)peer->sta->drv_priv;
- reinit_completion(&arsta->disassoc_comp);
- arsta->tx_disassoc = true;
- }
- spin_unlock_bh(&ar->ab->base_lock);
- }
-
ret = ath11k_wmi_mgmt_send(ar, arvif->vdev_id, buf_id, skb,
tx_params_valid);
if (ret) {
@@ -6787,13 +6666,11 @@ static void ath11k_mac_op_tx(struct ieee80211_hw *hw,
u32 info_flags = info->flags;
struct ieee80211_sta *sta = control->sta;
struct ath11k_sta *arsta = NULL;
- struct ieee80211_mgmt *mgmt;
bool is_prb_rsp;
u16 frm_type = 0;
u8 tid, *qos_ctl;
bool noack = false;
int ret;
- u64 adjusted_tsf;
if (unlikely(test_bit(ATH11K_FLAG_CRASH_FLUSH, &ar->ab->dev_flags))) {
ieee80211_free_txskb(ar->hw, skb);
@@ -6813,12 +6690,6 @@ static void ath11k_mac_op_tx(struct ieee80211_hw *hw,
} else if (ieee80211_is_mgmt(hdr->frame_control)) {
frm_type = FIELD_GET(IEEE80211_FCTL_STYPE, hdr->frame_control);
is_prb_rsp = ieee80211_is_probe_resp(hdr->frame_control);
- if (is_prb_rsp && arvif->tbtt_offset) {
- mgmt = (struct ieee80211_mgmt *)skb->data;
- adjusted_tsf = cpu_to_le64(0ULL - arvif->tbtt_offset);
- memcpy(&mgmt->u.probe_resp.timestamp, &adjusted_tsf,
- sizeof(adjusted_tsf));
- }
ret = ath11k_mac_tx_over_wmi(ar, skb, is_prb_rsp);
if (ret) {
if (ret != -EBUSY)
@@ -7114,22 +6985,6 @@ static int ath11k_mac_op_start(struct ieee80211_hw *hw)
return ret;
}
-static void ath11k_update_bcn_template_work(struct work_struct *work)
-{
- struct ath11k_vif *arvif = container_of(work, struct ath11k_vif,
- update_bcn_template_work);
- struct ath11k *ar = arvif->ar;
- int ret = 0;
-
- mutex_lock(&ar->conf_mutex);
- if (arvif->is_up)
- ret = ath11k_mac_setup_bcn_tmpl(arvif);
- mutex_unlock(&ar->conf_mutex);
- if (ret)
- ath11k_warn(ar->ab, "failed to submit beacon template for vdev_id : %d ret : %d\n",
- arvif->vdev_id, ret);
-}
-
static void ath11k_mac_op_stop(struct ieee80211_hw *hw)
{
struct ath11k *ar = hw->priv;
@@ -7352,7 +7207,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
INIT_DELAYED_WORK(&arvif->connection_loss_work,
ath11k_mac_vif_sta_connection_loss_work);
- INIT_WORK(&arvif->update_bcn_template_work, ath11k_update_bcn_template_work);
for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) {
arvif->bitrate_mask.control[i].legacy = 0xffffffff;
@@ -7384,12 +7238,8 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
goto err;
}
- if (ar->state != ATH11K_STATE_RESTARTED) {
- ath11k_debugfs_dbg_mac_filter(arvif);
- ath11k_debugfs_wbm_tx_comp_stats(arvif);
- } else {
- INIT_LIST_HEAD(&arvif->mac_filters);
- }
+ ath11k_debugfs_dbg_mac_filter(arvif);
+ ath11k_debugfs_wbm_tx_comp_stats(arvif);
switch (vif->type) {
case NL80211_IFTYPE_UNSPECIFIED:
@@ -7558,14 +7408,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
param_id = WMI_VDEV_PARAM_RTS_THRESHOLD;
param_value = ar->hw->wiphy->rts_threshold;
-
- if (vif->type == NL80211_IFTYPE_MESH_POINT &&
- !ar->rts_threshold[vif->type])
- ar->rts_threshold[vif->type] = 1;
-
- if (ar->rts_threshold[vif->type])
- param_value = ar->rts_threshold[vif->type];
-
ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id,
param_id, param_value);
if (ret) {
@@ -7587,13 +7429,8 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
goto err_peer_del;
}
- if (ar->state != ATH11K_STATE_RESTARTED) {
- ath11k_debug_aggr_size_config_init(arvif);
- ath11k_debugfs_wmi_ctrl_stats(arvif);
- } else {
- INIT_LIST_HEAD(&arvif->ar->debug.wmi_list);
- init_completion(&arvif->ar->debug.wmi_ctrl_path_stats_rcvd);
- }
+ ath11k_debug_aggr_size_config_init(arvif);
+ ath11k_debugfs_wmi_ctrl_stats(arvif);
mutex_unlock(&ar->conf_mutex);
@@ -7671,7 +7508,6 @@ static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,
}
cancel_delayed_work_sync(&arvif->connection_loss_work);
- cancel_work_sync(&arvif->update_bcn_template_work);
ath11k_dbg(ab, ATH11K_DBG_MAC, "mac remove interface (vdev %d)\n",
arvif->vdev_id);
@@ -8696,7 +8532,7 @@ void ath11k_mac_fill_reg_tpc_info(struct ath11k *ar,
bool is_psd_power = false, is_tpe_present = false;
s8 max_tx_power[IEEE80211_MAX_NUM_PWR_LEVEL],
psd_power, tx_power = 0, eirp_power = 0;
- u16 oper_freq = 0, start_freq = 0, center_freq = 0, op_center_freq = 0;
+ u16 oper_freq = 0, start_freq = 0, center_freq = 0;
u8 reg_6g_power_mode;
enum nl80211_chan_width bw;
int cfi;
@@ -8822,8 +8658,8 @@ void ath11k_mac_fill_reg_tpc_info(struct ath11k *ar,
psd_power = temp_chan->psd;
if (reg_6g_power_mode == IEEE80211_REG_SP_AP &&
ar->afc.is_6g_afc_power_event_received) {
- op_center_freq = ctx->def.center_freq1;
- cfi = ieee80211_frequency_to_channel(op_center_freq);
+ center_freq = ctx->def.center_freq1;
+ cfi = ieee80211_frequency_to_channel(center_freq);
bw = ctx->def.width;
eirp_power = ath11k_reg_get_afc_eirp_power(ar,
bw,
@@ -10624,11 +10460,6 @@ static void ath11k_mac_op_sta_statistics(struct ieee80211_hw *hw,
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RTS_RETRIES);
}
- if (arsta->tx_retry_count) {
- sinfo->tx_retries = arsta->tx_retry_count;
- sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_RETRIES);
- }
-
if (!arsta->txrate.legacy && !arsta->txrate.nss)
return;
@@ -10798,7 +10629,7 @@ static int ath11k_fw_stats_request(struct ath11k *ar,
static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
- int *mbm)
+ int *dbm)
{
struct ath11k *ar = hw->priv;
struct ath11k_base *ab = ar->ab;
@@ -10837,134 +10668,22 @@ static int ath11k_mac_op_get_txpower(struct ieee80211_hw *hw,
}
/* tx power is set as 2 units per dBm in FW. */
- *mbm = DBM_TO_MBM(pdev->chan_tx_power) / 2;
+ *dbm = pdev->chan_tx_power/2;
spin_unlock_bh(&ar->data_lock);
mutex_unlock(&ar->conf_mutex);
- ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "%s: txpower: %d from fw\n", __func__, *mbm);
+ ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "%s: txpower: %d from fw\n", __func__, *dbm);
return 0;
err_unlock:
mutex_unlock(&ar->conf_mutex);
/* We didn't get txpower from FW. Hence, relying on vif->bss_conf.txpower */
- *mbm = DBM_TO_MBM(vif->bss_conf.txpower);
+ *dbm = vif->bss_conf.txpower;
ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "%s: txpower: %d from bss_conf\n", __func__, vif->bss_conf.txpower);
return 0;
}
-static int ath11k_mac_op_cancel_remain_on_channel(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif)
-{
- struct ath11k *ar = hw->priv;
-
- mutex_lock(&ar->conf_mutex);
-
- spin_lock_bh(&ar->data_lock);
- ar->scan.roc_notify = false;
- spin_unlock_bh(&ar->data_lock);
-
- ath11k_scan_abort(ar);
-
- mutex_unlock(&ar->conf_mutex);
-
- cancel_delayed_work_sync(&ar->scan.timeout);
-
- return 0;
-}
-
-static int ath11k_mac_op_remain_on_channel(struct ieee80211_hw *hw,
- struct ieee80211_vif *vif,
- struct ieee80211_channel *chan,
- int duration,
- enum ieee80211_roc_type type)
-{
- struct ath11k *ar = hw->priv;
- struct ath11k_vif *arvif = (void *)vif->drv_priv;
- struct scan_req_params *arg;
- int ret;
- u32 scan_time_msec;
-
- mutex_lock(&ar->conf_mutex);
-
- spin_lock_bh(&ar->data_lock);
- switch (ar->scan.state) {
- case ATH11K_SCAN_IDLE:
- reinit_completion(&ar->scan.started);
- reinit_completion(&ar->scan.completed);
- reinit_completion(&ar->scan.on_channel);
- ar->scan.state = ATH11K_SCAN_STARTING;
- ar->scan.is_roc = true;
- ar->scan.vdev_id = arvif->vdev_id;
- ar->scan.roc_freq = chan->center_freq;
- ar->scan.roc_notify = true;
- ret = 0;
- break;
- case ATH11K_SCAN_STARTING:
- case ATH11K_SCAN_RUNNING:
- case ATH11K_SCAN_ABORTING:
- ret = -EBUSY;
- break;
- }
- spin_unlock_bh(&ar->data_lock);
-
- if (ret)
- goto exit;
-
- scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
-
- arg = kzalloc(sizeof(*arg), GFP_KERNEL);
- if (!arg) {
- ret = -ENOMEM;
- goto exit;
- }
-
- ath11k_wmi_start_scan_init(ar, arg);
- arg->chan_list.num_chan = 1;
-
- arg->vdev_id = arvif->vdev_id;
- arg->scan_id = ATH11K_SCAN_ID;
- arg->chan_list.chan[0].freq = chan->center_freq;
- arg->dwell_time_active = scan_time_msec;
- arg->dwell_time_passive = scan_time_msec;
- arg->max_scan_time = scan_time_msec;
- arg->scan_flags |= WMI_SCAN_FLAG_PASSIVE;
- arg->scan_flags |= WMI_SCAN_FILTER_PROBE_REQ;
- arg->burst_duration = duration;
-
- ret = ath11k_start_scan(ar, arg);
- if (ret) {
- ath11k_warn(ar->ab, "failed to start roc scan: %d\n", ret);
-
- spin_lock_bh(&ar->data_lock);
- ar->scan.state = ATH11K_SCAN_IDLE;
- spin_unlock_bh(&ar->data_lock);
- goto exit;
- }
-
- ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ);
- if (ret == 0) {
- ath11k_warn(ar->ab, "failed to switch to channel for roc scan\n");
- ret = ath11k_scan_stop(ar);
- if (ret)
- ath11k_warn(ar->ab, "failed to stop scan: %d\n", ret);
- ret = -ETIMEDOUT;
- goto exit;
- }
-
- ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
- msecs_to_jiffies(duration));
-
- ret = 0;
-
-exit:
- if (arg)
- kfree(arg);
-
- mutex_unlock(&ar->conf_mutex);
- return ret;
-}
-
static const struct ieee80211_ops ath11k_ops = {
.tx = ath11k_mac_op_tx,
.start = ath11k_mac_op_start,
@@ -11003,8 +10722,6 @@ static const struct ieee80211_ops ath11k_ops = {
.set_tid_config = ath11k_mac_op_set_tid_config,
.reset_tid_config = ath11k_mac_op_reset_tid_config,
.sta_set_mgmt_rts_cts = ath11k_mac_op_sta_set_mgmt_rts_cts,
- .remain_on_channel = ath11k_mac_op_remain_on_channel,
- .cancel_remain_on_channel = ath11k_mac_op_cancel_remain_on_channel,
CFG80211_TESTMODE_CMD(ath11k_tm_cmd)
#ifdef CONFIG_ATH11K_DEBUGFS
.sta_add_debugfs = ath11k_debugfs_sta_op_add,
@@ -11396,8 +11113,6 @@ void ath11k_mac_unregister(struct ath11k_base *ab)
__ath11k_mac_unregister(ar);
}
-
- ath11k_peer_rhash_tbl_destroy(ab);
}
static int __ath11k_mac_register(struct ath11k *ar)
@@ -11676,10 +11391,6 @@ int ath11k_mac_register(struct ath11k_base *ab)
ab->free_vdev_map = (1LL << (ab->num_radios * TARGET_NUM_VDEVS)) - 1;
- ret = ath11k_peer_rhash_tbl_init(ab);
- if (ret)
- return ret;
-
for (i = 0; i < ab->num_radios; i++) {
pdev = &ab->pdevs[i];
ar = pdev->ar;
@@ -11710,8 +11421,6 @@ int ath11k_mac_register(struct ath11k_base *ab)
__ath11k_mac_unregister(ar);
}
- ath11k_peer_rhash_tbl_destroy(ab);
-
return ret;
}
@@ -11778,7 +11487,6 @@ int ath11k_mac_allocate(struct ath11k_base *ab)
init_completion(&ar->bss_survey_done);
init_completion(&ar->scan.started);
init_completion(&ar->scan.completed);
- init_completion(&ar->scan.on_channel);
init_completion(&ar->thermal.wmi_sync);
INIT_DELAYED_WORK(&ar->scan.timeout, ath11k_scan_timeout_work);
diff --git a/drivers/net/wireless/ath/ath11k/mac.h b/drivers/net/wireless/ath/ath11k/mac.h
index 475756a..7076e56 100644
--- a/drivers/net/wireless/ath/ath11k/mac.h
+++ b/drivers/net/wireless/ath/ath11k/mac.h
@@ -133,8 +133,6 @@ struct ath11k_generic_iter {
#define IEEE80211_HE_DL_MU_SUPPORT_ENABLE 2
#define IEEE80211_HE_DL_MU_SUPPORT_INVALID 3
-#define ATH11K_DISASSOC_TX_COMPLETION_TIMEOUT (3 * HZ)
-
extern const struct htt_rx_ring_tlv_filter ath11k_mac_mon_status_filter_default;
int ath11k_mac_ap_ps_recalc(struct ath11k *ar);
@@ -176,5 +174,4 @@ bool ath11k_mac_sta_level_info(struct ath11k_vif *arvif, struct ieee80211_sta *s
void ath11k_mac_get_any_chandef_iter(struct ieee80211_hw *hw,
struct ieee80211_chanctx_conf *conf,
void *data);
-int ath11k_mac_setup_bcn_tmpl(struct ath11k_vif *arvif);
#endif
diff --git a/drivers/net/wireless/ath/ath11k/peer.c b/drivers/net/wireless/ath/ath11k/peer.c
index b0cc6f8..81d3df4 100644
--- a/drivers/net/wireless/ath/ath11k/peer.c
+++ b/drivers/net/wireless/ath/ath11k/peer.c
@@ -27,6 +27,25 @@ struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id,
return NULL;
}
+static struct ath11k_peer *ath11k_peer_find_by_pdev_idx(struct ath11k_base *ab,
+ u8 pdev_idx, const u8 *addr)
+{
+ struct ath11k_peer *peer;
+
+ lockdep_assert_held(&ab->base_lock);
+
+ list_for_each_entry(peer, &ab->peers, list) {
+ if (peer->pdev_idx != pdev_idx)
+ continue;
+ if (!ether_addr_equal(peer->addr, addr))
+ continue;
+
+ return peer;
+ }
+
+ return NULL;
+}
+
struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
const u8 *addr)
{
@@ -34,13 +53,14 @@ struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
lockdep_assert_held(&ab->base_lock);
- if (!ab->rhead_peer_addr)
- return NULL;
+ list_for_each_entry(peer, &ab->peers, list) {
+ if (!ether_addr_equal(peer->addr, addr))
+ continue;
- peer = rhashtable_lookup_fast(ab->rhead_peer_addr, addr,
- ab->rhash_peer_addr_param);
+ return peer;
+ }
- return peer;
+ return NULL;
}
struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab,
@@ -50,13 +70,11 @@ struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab,
lockdep_assert_held(&ab->base_lock);
- if (!ab->rhead_peer_id)
- return NULL;
+ list_for_each_entry(peer, &ab->peers, list)
+ if (peer_id == peer->peer_id)
+ return peer;
- peer = rhashtable_lookup_fast(ab->rhead_peer_id, &peer_id,
- ab->rhash_peer_id_param);
-
- return peer;
+ return NULL;
}
struct ath11k_peer *ath11k_peer_find_by_vdev_id(struct ath11k_base *ab,
@@ -443,7 +461,6 @@ void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id)
ath11k_dbg(ab, ATH11K_DBG_DP_HTT, "htt peer unmap vdev %d peer %pM id %d\n",
peer->vdev_id, peer->addr, peer_id);
- ath11k_peer_rhash_delete(ab, peer);
list_del(&peer->list);
kfree(peer);
wake_up(&ab->peer_mapping_wq);
@@ -485,7 +502,6 @@ void ath11k_peer_unmap_v2_event(struct ath11k_base *ab, u16 peer_id, bool is_wds
ar->bss_peer = NULL;
free_peer:
rcu_read_unlock();
- ath11k_peer_rhash_delete(ab, peer);
list_del(&peer->list);
kfree(peer);
wake_up(&ab->peer_mapping_wq);
@@ -591,69 +607,6 @@ static int ath11k_wait_for_peer_common(struct ath11k_base *ab, int vdev_id,
return 0;
}
-static inline int ath11k_peer_rhash_insert(struct ath11k_base *ab,
- struct rhashtable *rtbl,
- struct rhash_head *rhead,
- struct rhashtable_params *params,
- void *key)
-{
- struct ath11k_peer *tmp;
-
- lockdep_assert_held(&ab->base_lock);
-
- tmp = rhashtable_lookup_get_insert_fast(rtbl, rhead, *params);
-
- if (!tmp)
- return 0;
- else if (IS_ERR(tmp))
- return PTR_ERR(tmp);
- else
- return -EEXIST;
-}
-
-static inline int ath11k_peer_rhash_remove(struct ath11k_base *ab,
- struct rhashtable *rtbl,
- struct rhash_head *rhead,
- struct rhashtable_params *params)
-{
- lockdep_assert_held(&ab->base_lock);
-
- return rhashtable_remove_fast(rtbl, rhead, *params);
-}
-
-static int ath11k_peer_rhash_add(struct ath11k_base *ab, struct ath11k_peer *peer)
-{
- int ret;
-
- lockdep_assert_held(&ab->base_lock);
-
- if (!ab->rhead_peer_id || !ab->rhead_peer_addr)
- return -EPERM;
-
- ret = ath11k_peer_rhash_insert(ab, ab->rhead_peer_id, &peer->rhash_id,
- &ab->rhash_peer_id_param, &peer->peer_id);
- if (ret) {
- ath11k_warn(ab, "failed to add peer %pM with id %d in rhash_id ret %d\n",
- peer->addr, peer->peer_id, ret);
- return ret;
- }
-
- ret = ath11k_peer_rhash_insert(ab, ab->rhead_peer_addr, &peer->rhash_addr,
- &ab->rhash_peer_addr_param, &peer->addr);
- if (ret) {
- ath11k_warn(ab, "failed to add peer %pM with id %d in rhash_addr ret %d\n",
- peer->addr, peer->peer_id, ret);
- goto err_clean;
- }
-
- return 0;
-
-err_clean:
- ath11k_peer_rhash_remove(ab, ab->rhead_peer_id, &peer->rhash_id,
- &ab->rhash_peer_id_param);
- return ret;
-}
-
void ath11k_peer_cleanup(struct ath11k *ar, u32 vdev_id)
{
struct ath11k_peer *peer, *tmp_peer;
@@ -681,7 +634,6 @@ void ath11k_peer_cleanup(struct ath11k *ar, u32 vdev_id)
&peer->ast_entry_list, ase_list)
ath11k_peer_del_ast(ar, ast_entry);
- ath11k_peer_rhash_delete(ab, peer);
list_del(&peer->list);
kfree(peer);
ar->num_peers--;
@@ -791,7 +743,7 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
struct ath11k_peer *peer;
struct ieee80211_vif *vif = arvif->vif;
struct ath11k_sta *arsta;
- int ret, err_ret;
+ int ret;
lockdep_assert_held(&ar->conf_mutex);
@@ -802,7 +754,7 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
}
spin_lock_bh(&ar->ab->base_lock);
- peer = ath11k_peer_find_by_addr(ar->ab, param->peer_addr);
+ peer = ath11k_peer_find_by_pdev_idx(ar->ab, ar->pdev_idx, param->peer_addr);
if (peer) {
spin_unlock_bh(&ar->ab->base_lock);
return -EINVAL;
@@ -830,14 +782,22 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
ath11k_warn(ar->ab, "failed to find peer %pM on vdev %i after creation\n",
param->peer_addr, param->vdev_id);
- ret = -ENOENT;
- goto cleanup;
- }
+ reinit_completion(&ar->peer_delete_done);
- ret = ath11k_peer_rhash_add(ar->ab, peer);
- if (ret) {
- spin_unlock_bh(&ar->ab->base_lock);
- goto cleanup;
+ ret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
+ param->vdev_id);
+ if (ret) {
+ ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM\n",
+ param->vdev_id, param->peer_addr);
+ return ret;
+ }
+
+ ret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
+ param->peer_addr);
+ if (ret)
+ return ret;
+
+ return -ENOENT;
}
peer->pdev_idx = ar->pdev_idx;
@@ -871,211 +831,4 @@ int ath11k_peer_create(struct ath11k *ar, struct ath11k_vif *arvif,
spin_unlock_bh(&ar->ab->base_lock);
return 0;
-
-cleanup:
- reinit_completion(&ar->peer_delete_done);
-
- err_ret = ath11k_wmi_send_peer_delete_cmd(ar, param->peer_addr,
- param->vdev_id);
- if (err_ret) {
- ath11k_warn(ar->ab, "failed to delete peer vdev_id %d addr %pM ret %d\n",
- param->vdev_id, param->peer_addr, err_ret);
- goto exit;
- }
-
- err_ret = ath11k_wait_for_peer_delete_done(ar, param->vdev_id,
- param->peer_addr);
- if (err_ret)
- ath11k_warn(ar->ab, "failed wait for peer %pM delete done id %d ret %d\n",
- param->peer_addr, param->vdev_id, err_ret);
-
-exit:
- return ret;
-}
-
-int ath11k_peer_rhash_delete(struct ath11k_base *ab, struct ath11k_peer *peer)
-{
- int ret;
-
- lockdep_assert_held(&ab->base_lock);
-
- if (!ab->rhead_peer_id || !ab->rhead_peer_addr)
- return -EPERM;
-
- ret = ath11k_peer_rhash_remove(ab, ab->rhead_peer_id, &peer->rhash_id,
- &ab->rhash_peer_id_param);
- if (ret) {
- ath11k_warn(ab, "failed to remove peer %pM id %d in rhash_id ret %d\n",
- peer->addr, peer->peer_id, ret);
- return ret;
- }
-
- ret = ath11k_peer_rhash_remove(ab, ab->rhead_peer_addr, &peer->rhash_addr,
- &ab->rhash_peer_addr_param);
- if (ret) {
- ath11k_warn(ab, "failed to remove peer %pM id %d in rhash_addr ret %d\n",
- peer->addr, peer->peer_id, ret);
- return ret;
- }
-
- return 0;
-}
-
-static int ath11k_peer_rhash_id_tbl_init(struct ath11k_base *ab)
-{
- struct rhashtable_params *param;
- struct rhashtable *rhash_id_tbl;
- int ret;
- size_t size;
-
- if (ab->rhead_peer_id)
- return 0;
-
- size = sizeof(*ab->rhead_peer_id);
- rhash_id_tbl = kzalloc(size, GFP_KERNEL);
- if (!rhash_id_tbl) {
- ath11k_warn(ab, "failed to init rhash id table due to no mem (size %zu)\n",
- size);
- return -ENOMEM;
- }
-
- param = &ab->rhash_peer_id_param;
-
- param->key_offset = offsetof(struct ath11k_peer, peer_id);
- param->head_offset = offsetof(struct ath11k_peer, rhash_id);
- param->key_len = sizeof_field(struct ath11k_peer, peer_id);
- param->automatic_shrinking = true;
- param->nelem_hint = ab->num_radios * TARGET_NUM_PEERS_PDEV;
-
- ret = rhashtable_init(rhash_id_tbl, param);
- if (ret) {
- ath11k_warn(ab, "failed to init peer id rhash table %d\n", ret);
- goto err_free;
- }
-
- spin_lock_bh(&ab->base_lock);
-
- if (!ab->rhead_peer_id) {
- ab->rhead_peer_id = rhash_id_tbl;
- } else {
- spin_unlock_bh(&ab->base_lock);
- ath11k_warn(ab, "already peer rhash id init done id_tbl: %p\n",
- ab->rhead_peer_id);
- goto cleanup_tbl;
- }
-
- spin_unlock_bh(&ab->base_lock);
-
- return 0;
-
-cleanup_tbl:
- rhashtable_destroy(rhash_id_tbl);
-err_free:
- kfree(rhash_id_tbl);
-
- return ret;
-}
-
-static int ath11k_peer_rhash_addr_tbl_init(struct ath11k_base *ab)
-{
- struct rhashtable_params *param;
- struct rhashtable *rhash_addr_tbl;
- int ret;
- size_t size;
-
- if (ab->rhead_peer_addr)
- return 0;
-
- size = sizeof(*ab->rhead_peer_addr);
- rhash_addr_tbl = kzalloc(size, GFP_KERNEL);
- if (!rhash_addr_tbl) {
- ath11k_warn(ab, "failed to init rhash addr table due to no mem (size %zu)\n",
- size);
- return -ENOMEM;
- }
-
- param = &ab->rhash_peer_addr_param;
-
- param->key_offset = offsetof(struct ath11k_peer, addr);
- param->head_offset = offsetof(struct ath11k_peer, rhash_addr);
- param->key_len = sizeof_field(struct ath11k_peer, addr);
- param->automatic_shrinking = true;
- param->nelem_hint = TARGET_NUM_PEERS_PDEV;
-
- ret = rhashtable_init(rhash_addr_tbl, param);
- if (ret) {
- ath11k_warn(ab, "failed to init peer addr rhash table %d\n", ret);
- goto err_free;
- }
-
- spin_lock_bh(&ab->base_lock);
-
- if (!ab->rhead_peer_addr) {
- ab->rhead_peer_addr = rhash_addr_tbl;
- } else {
- spin_unlock_bh(&ab->base_lock);
- ath11k_warn(ab, "already peer rhash addr init done\n");
- goto cleanup_tbl;
- }
-
- spin_unlock_bh(&ab->base_lock);
-
- return 0;
-
-cleanup_tbl:
- rhashtable_destroy(rhash_addr_tbl);
-err_free:
- kfree(rhash_addr_tbl);
-
- return ret;
-}
-
-static inline void ath11k_peer_rhash_id_tbl_destroy(struct ath11k_base *ab)
-{
- if (!ab->rhead_peer_id)
- return;
-
- rhashtable_destroy(ab->rhead_peer_id);
- kfree(ab->rhead_peer_id);
- ab->rhead_peer_id = NULL;
-}
-
-static inline void ath11k_peer_rhash_addr_tbl_destroy(struct ath11k_base *ab)
-{
- if (!ab->rhead_peer_addr)
- return;
-
- rhashtable_destroy(ab->rhead_peer_addr);
- kfree(ab->rhead_peer_addr);
- ab->rhead_peer_addr = NULL;
-}
-
-int ath11k_peer_rhash_tbl_init(struct ath11k_base *ab)
-{
- int ret;
-
- ret = ath11k_peer_rhash_id_tbl_init(ab);
- if (ret)
- return ret;
-
- ret = ath11k_peer_rhash_addr_tbl_init(ab);
- if (ret)
- goto cleanup_tbl;
-
- return 0;
-
-cleanup_tbl:
- ath11k_peer_rhash_id_tbl_destroy(ab);
-
- return ret;
-}
-
-void ath11k_peer_rhash_tbl_destroy(struct ath11k_base *ab)
-{
- spin_lock_bh(&ab->base_lock);
-
- ath11k_peer_rhash_id_tbl_destroy(ab);
- ath11k_peer_rhash_addr_tbl_destroy(ab);
-
- spin_unlock_bh(&ab->base_lock);
}
diff --git a/drivers/net/wireless/ath/ath11k/peer.h b/drivers/net/wireless/ath/ath11k/peer.h
index aa0835d..e54ced9 100644
--- a/drivers/net/wireless/ath/ath11k/peer.h
+++ b/drivers/net/wireless/ath/ath11k/peer.h
@@ -75,10 +75,6 @@ struct ath11k_peer {
/* protected by ab->data_lock */
struct ieee80211_key_conf *keys[WMI_MAX_KEY_INDEX + 1];
struct dp_rx_tid rx_tid[IEEE80211_NUM_TIDS + 1];
- /* peer id based rhashtable list pointer */
- struct rhash_head rhash_id;
- /* peer addr based rhashtable list pointer */
- struct rhash_head rhash_addr;
/* Info used in MMIC verification of
* RX fragments
@@ -117,9 +113,6 @@ int ath11k_wait_for_peer_delete_done(struct ath11k *ar, u32 vdev_id,
const u8 *addr);
struct ath11k_peer *ath11k_peer_find_by_vdev_id(struct ath11k_base *ab,
int vdev_id);
-int ath11k_peer_rhash_tbl_init(struct ath11k_base *ab);
-void ath11k_peer_rhash_tbl_destroy(struct ath11k_base *ab);
-int ath11k_peer_rhash_delete(struct ath11k_base *ab, struct ath11k_peer *peer);
#ifdef CONFIG_ATH11K_NSS_SUPPORT
struct ath11k_ast_entry *ath11k_peer_ast_find_by_addr(struct ath11k_base *ab,
diff --git a/drivers/net/wireless/ath/ath11k/qmi.c b/drivers/net/wireless/ath/ath11k/qmi.c
index cbcb031..c13bc82 100644
--- a/drivers/net/wireless/ath/ath11k/qmi.c
+++ b/drivers/net/wireless/ath/ath11k/qmi.c
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/elf.h>
@@ -4536,8 +4535,9 @@ static void ath11k_qmi_driver_event_work(struct work_struct *work)
ath11k_core_qmi_firmware_ready(ab);
set_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags);
- if (country_code)
- ath11k_reg_update_cc(ab, country_code);
+ if (country_code) {
+ ath11k_reg_update_cc(ab);
+ }
}
break;
diff --git a/drivers/net/wireless/ath/ath11k/reg.c b/drivers/net/wireless/ath/ath11k/reg.c
index a45182a..281f646 100644
--- a/drivers/net/wireless/ath/ath11k/reg.c
+++ b/drivers/net/wireless/ath/ath11k/reg.c
@@ -1,7 +1,6 @@
// SPDX-License-Identifier: BSD-3-Clause-Clear
/*
* Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include "core.h"
#include "debug.h"
@@ -17,6 +16,8 @@
#define ETSI_WEATHER_RADAR_BAND_HIGH 5650
#define ETSI_WEATHER_RADAR_BAND_CAC_TIMEOUT 600000
+extern char *country_code;
+
static const struct ieee80211_regdomain ath11k_world_regd = {
.n_reg_rules = 3,
.alpha2 = "00",
@@ -127,21 +128,22 @@ ath11k_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request)
"INIT Country code set to fw failed : %d\n", ret);
}
-void ath11k_reg_update_cc(struct ath11k_base *ab, const char *country_code)
+void ath11k_reg_update_cc(struct ath11k_base *ab)
{
struct wmi_init_country_params init_country_param;
struct ath11k_pdev *pdev;
+ struct ath11k *ar;
int i, ret;
- init_country_param.flags = ALPHA_IS_SET;
- memcpy(&init_country_param.cc_info.alpha2, country_code, 2);
- init_country_param.cc_info.alpha2[2] = 0;
-
for (i = 0; i < ab->num_radios; i++) {
pdev = &ab->pdevs[i];
- ret = ath11k_wmi_send_init_country_cmd(pdev->ar, init_country_param);
+ ar = pdev->ar;
+ init_country_param.flags = ALPHA_IS_SET;
+ memcpy(&init_country_param.cc_info.alpha2, country_code, 2);
+ init_country_param.cc_info.alpha2[2] = 0;
+ ret = ath11k_wmi_send_init_country_cmd(ar, init_country_param);
if (ret)
- ath11k_warn(pdev->ar->ab,
+ ath11k_warn(ar->ab,
"INIT Country code set to fw failed : %d\n", ret);
}
}
@@ -214,11 +216,6 @@ int ath11k_regd_update(struct ath11k *ar, bool init)
rtnl_lock();
wiphy_lock(ar->hw->wiphy);
- if (ar->afc.is_6g_afc_power_event_received || ar->afc.switch_to_lpi_indication_received)
- ar->hw->wiphy->regulatory_flags |= REGULATORY_SET_BY_6GHZ_AFC;
- else
- ar->hw->wiphy->regulatory_flags &= ~REGULATORY_SET_BY_6GHZ_AFC;
-
ret = regulatory_set_wiphy_regd_sync(ar->hw->wiphy, regd_copy);
wiphy_unlock(ar->hw->wiphy);
rtnl_unlock();
@@ -887,69 +884,6 @@ void ath11k_reg_get_afc_eirp_power_for_bw(struct ath11k *ar, u16 *start_freq,
*tx_power = ath11k_reg_get_afc_eirp_power(ar, bw, cfi);
}
-int ath11k_reg_switch_to_lpi(struct ath11k_base *ab, struct ath11k_afc_info *afc)
-{
- struct ieee80211_regdomain *regd = NULL;
- struct ieee80211_regdomain *new_regd = NULL;
- struct ieee80211_reg_rule *old_rule, *new_regd_rules;
- struct ath11k *ar = container_of(afc, struct ath11k, afc);
- int new_reg_rule_cnt = 0, num_regd_rules = 0, num_sp_rules = 0;
- int i, k, pdev_idx, ret = 0;
-
- pdev_idx = ar->pdev_idx;
-
- if (ab->new_regd[pdev_idx]) {
- regd = ab->new_regd[pdev_idx];
- } else {
- regd = ab->default_regd[pdev_idx];
- }
-
- if (!regd) {
- ath11k_warn(ab, "Regulatory domain data not present\n");
- return -EINVAL;
- }
-
- num_regd_rules = regd->n_reg_rules;
- for (i = 0; i < num_regd_rules; i++) {
- old_rule = regd->reg_rules + i;
- if (old_rule->mode == NL80211_REG_AP_SP)
- num_sp_rules++;
- }
-
- new_reg_rule_cnt = num_regd_rules - num_sp_rules;
-
- new_regd = kzalloc(sizeof(*new_regd) +
- (sizeof(*new_regd_rules) * new_reg_rule_cnt),
- GFP_KERNEL);
- if (!new_regd)
- return -ENOMEM;
-
- new_regd->n_reg_rules = new_reg_rule_cnt;
- memcpy(new_regd->alpha2, regd->alpha2, REG_ALPHA2_LEN + 1);
- new_regd->dfs_region = ath11k_map_fw_dfs_region(regd->dfs_region);
- k = 0;
- for (i = 0; i < num_regd_rules; i++) {
- old_rule = regd->reg_rules + i;
-
- if (old_rule->mode == NL80211_REG_AP_SP) {
- continue;
- } else {
- memcpy((new_regd->reg_rules + k), old_rule, sizeof(*new_regd_rules));
- k++;
- }
- }
-
- ar->afc.switch_to_lpi_indication_received = true;
-
- spin_lock_bh(&ab->base_lock);
- kfree(ab->new_regd[pdev_idx]);
- ab->new_regd[pdev_idx] = new_regd;
- spin_unlock_bh(&ab->base_lock);
-
- ieee80211_queue_work(ar->hw, &ar->regd_update_work);
- return ret;
-}
-
int ath11k_reg_process_afc_power_event(struct ath11k *ar)
{
struct ath11k_base *ab = ar->ab;
@@ -1030,9 +964,6 @@ int ath11k_reg_process_afc_power_event(struct ath11k *ar)
}
}
- if (num_new_sp_rules)
- ar->afc.switch_to_lpi_indication_received = false;
-
/* Remove the old sp rule from regd and add the new intersected sp rules */
new_reg_rule_cnt = num_regd_rules - num_old_sp_rules + num_new_sp_rules;
ath11k_dbg(ab, ATH11K_DBG_AFC,
@@ -1041,7 +972,7 @@ int ath11k_reg_process_afc_power_event(struct ath11k *ar)
new_regd = kzalloc(sizeof(*new_regd) +
(sizeof(*new_regd_rules) * new_reg_rule_cnt),
- GFP_ATOMIC);
+ GFP_KERNEL);
if (!new_regd) {
ret = -ENOMEM;
goto end;
@@ -1129,15 +1060,8 @@ int ath11k_copy_afc_response(struct ath11k *ar, char *afc_resp, u32 len)
}
status[AFC_AUTH_STATUS_OFFSET] = cpu_to_le32(AFC_AUTH_ERROR);
-
- if (ab->userpd_id) {
- memset_io(mem + (slotid * AFC_SLOT_SIZE), 0, AFC_SLOT_SIZE);
- memcpy_toio(mem + (slotid * AFC_SLOT_SIZE), afc_resp, len);
- } else {
- memset(mem + (slotid * AFC_SLOT_SIZE), 0, AFC_SLOT_SIZE);
- memcpy(mem + (slotid * AFC_SLOT_SIZE), afc_resp, len);
- }
-
+ memset(mem + (slotid * AFC_SLOT_SIZE), 0, AFC_SLOT_SIZE);
+ memcpy(mem + (slotid * AFC_SLOT_SIZE), afc_resp, len);
status[AFC_AUTH_STATUS_OFFSET] = cpu_to_le32(AFC_AUTH_SUCCESS);
return 0;
@@ -1149,7 +1073,7 @@ int ath11k_reg_afc_start(struct ath11k_base *ab, struct ath11k_afc_info *afc)
struct ath11k_afc_req_fixed_params *fixed_param = NULL;
int ret = 0;
- fixed_param = kzalloc(sizeof(*fixed_param), GFP_ATOMIC);
+ fixed_param = kzalloc(sizeof(*fixed_param), GFP_KERNEL);
if (!fixed_param)
return -ENOMEM;
@@ -1181,9 +1105,8 @@ int ath11k_process_expiry_event(struct ath11k_base *ab, struct ath11k_afc_info *
}
break;
case REG_AFC_EXPIRY_EVENT_SWITCH_TO_LPI:
- ath11k_dbg(ab, ATH11K_DBG_AFC, "AFC switch to LPI indication received\n");
- ret = ath11k_reg_switch_to_lpi(ab, afc);
- return ret;
+ /*TBH*/
+ break;
default:
ath11k_dbg(ab, ATH11K_DBG_AFC, "Invalid AFC expiry event subtype %d\n",
afc->event_subtype);
diff --git a/drivers/net/wireless/ath/ath11k/reg.h b/drivers/net/wireless/ath/ath11k/reg.h
index b4939a2..a5dfb89 100644
--- a/drivers/net/wireless/ath/ath11k/reg.h
+++ b/drivers/net/wireless/ath/ath11k/reg.h
@@ -1,7 +1,6 @@
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
/*
* Copyright (c) 2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef ATH11K_REG_H
@@ -66,6 +65,6 @@ void ath11k_reg_get_afc_eirp_power_for_bw(struct ath11k *ar, u16 *start_freq,
u16 *center_freq, int pwr_level,
struct cfg80211_chan_def *chan_def,
s8 *tx_power);
-void ath11k_reg_update_cc(struct ath11k_base *ab, const char *country_code);
+void ath11k_reg_update_cc(struct ath11k_base *ab);
#endif
diff --git a/drivers/net/wireless/ath/ath11k/testmode.c b/drivers/net/wireless/ath/ath11k/testmode.c
index 63edc6e..bfba684 100644
--- a/drivers/net/wireless/ath/ath11k/testmode.c
+++ b/drivers/net/wireless/ath/ath11k/testmode.c
@@ -61,7 +61,7 @@ void ath11k_fwlog_write(struct ath11k_base *ab, u8 *data, int len)
return;
}
- cfg80211_testmode_event(nl_skb, GFP_ATOMIC, true);
+ cfg80211_testmode_event(nl_skb, GFP_ATOMIC);
}
/* Returns true if callee consumes the skb and the skb should be discarded.
@@ -141,7 +141,7 @@ bool ath11k_wmi_tm_event_unsegmented(struct ath11k_base *ab, u32 cmd_id,
goto out;
}
- cfg80211_testmode_event(nl_skb, GFP_ATOMIC, false);
+ cfg80211_testmode_event(nl_skb, GFP_ATOMIC);
out:
spin_unlock_bh(&ar->data_lock);
@@ -265,7 +265,7 @@ bool ath11k_process_tm_event(struct ath11k_base *ab, u32 cmd_id,
goto out;
}
- cfg80211_testmode_event(nl_skb, GFP_ATOMIC, false);
+ cfg80211_testmode_event(nl_skb, GFP_ATOMIC);
out:
spin_unlock_bh(&ar->data_lock);
diff --git a/drivers/net/wireless/ath/ath11k/vendor.c b/drivers/net/wireless/ath/ath11k/vendor.c
index b1795b2..6ba6a92 100644
--- a/drivers/net/wireless/ath/ath11k/vendor.c
+++ b/drivers/net/wireless/ath/ath11k/vendor.c
@@ -269,7 +269,7 @@ int ath11k_send_power_update_complete(struct ath11k *ar)
ath11k_dbg(ab, ATH11K_DBG_AFC,
"Sending power update complete for afc request id %llu status code %d\n",
fixed_param.req_id, fixed_param.status_code);
- cfg80211_vendor_event(nl_skb, GFP_ATOMIC);
+ cfg80211_vendor_event(nl_skb, GFP_KERNEL);
return 0;
}
@@ -305,7 +305,7 @@ int ath11k_send_afc_start(struct ath11k *ar, struct ath11k_afc_req_fixed_params
goto out;
}
- cfg80211_vendor_event(nl_skb, GFP_ATOMIC);
+ cfg80211_vendor_event(nl_skb, GFP_KERNEL);
ath11k_dbg(ar->ab, ATH11K_DBG_AFC,
"Sending expiry event to higher layer of type %d\n",
QCA_WLAN_VENDOR_AFC_EXPIRY_EVENT);
diff --git a/drivers/net/wireless/ath/ath11k/wmi.c b/drivers/net/wireless/ath/ath11k/wmi.c
index 74b8414..c6318d8 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.c
+++ b/drivers/net/wireless/ath/ath11k/wmi.c
@@ -23,8 +23,6 @@
#define ATH11K_WMI_STA_KICKOUT_TIMEOUT_MS 5000
#define ATH11K_WMI_STA_KICKOUT_LIMIT 100
-#define ATH11K_TEST_CAL_STATUS(val, idx) ((val >> idx) & 1)
-
struct wmi_tlv_policy {
size_t min_len;
};
@@ -156,9 +154,6 @@ static const struct wmi_tlv_policy wmi_tlv_policies[] = {
= { .min_len = sizeof(struct wmi_afc_event_fixed_param) },
[WMI_TAG_AFC_EXPIRY_EVENT_PARAM]
= { .min_len = sizeof(struct wmi_afc_expiry_event_param) },
- [WMI_TAG_PDEV_CAL_STATUS_EVENT]
- = { .min_len = sizeof(struct wmi_pdev_cal_status_event) },
-
};
#define PRIMAP(_hw_mode_) \
@@ -6352,8 +6347,6 @@ static int wmi_process_tx_comp(struct ath11k *ar, struct wmi_tx_compl_event *tx_
struct ieee80211_vif *vif;
struct ath11k_vif *arvif;
struct ath11k_mgmt_frame_stats *mgmt_stats;
- struct ath11k_peer *peer;
- struct ath11k_sta *arsta;
u16 frm_type;
spin_lock_bh(&ar->data_lock);
@@ -6393,18 +6386,6 @@ static int wmi_process_tx_comp(struct ath11k *ar, struct wmi_tx_compl_event *tx_
mgmt_stats->tx_compl_fail[frm_type]++;
}
- if (ieee80211_has_protected(hdr->frame_control) &&
- ieee80211_is_disassoc(hdr->frame_control)) {
- spin_lock_bh(&ar->ab->base_lock);
- peer = ath11k_peer_find_by_addr(ar->ab, hdr->addr1);
- if (peer && peer->sta) {
- arsta = (struct ath11k_sta *)peer->sta->drv_priv;
- complete_all(&arsta->disassoc_comp);
- arsta->tx_disassoc = false;
- }
- spin_unlock_bh(&ar->ab->base_lock);
- }
-
skip_mgmt_stats:
spin_unlock_bh(&ar->data_lock);
@@ -6476,8 +6457,6 @@ static void ath11k_wmi_event_scan_started(struct ath11k *ar)
break;
case ATH11K_SCAN_STARTING:
ar->scan.state = ATH11K_SCAN_RUNNING;
- if (ar->scan.is_roc)
- ieee80211_ready_on_channel(ar->hw);
complete(&ar->scan.started);
break;
}
@@ -6560,8 +6539,6 @@ static void ath11k_wmi_event_scan_foreign_chan(struct ath11k *ar, u32 freq)
case ATH11K_SCAN_RUNNING:
case ATH11K_SCAN_ABORTING:
ar->scan_channel = ieee80211_get_channel(ar->hw->wiphy, freq);
- if (ar->scan.is_roc && ar->scan.roc_freq == freq)
- complete(&ar->scan.on_channel);
break;
}
}
@@ -8416,6 +8393,7 @@ static void ath11k_peer_sta_kickout_event(struct ath11k_base *ab, struct sk_buff
spin_lock_bh(&ab->base_lock);
peer = ath11k_peer_find_by_addr(ab, arg.mac_addr);
+
if (!peer) {
spin_unlock_bh(&ab->base_lock);
ath11k_warn(ab, "peer not found %pM\n",
@@ -10085,6 +10063,7 @@ ath11k_wmi_event_peer_sta_ps_state_chg(struct ath11k_base *ab, struct sk_buff *s
spin_lock_bh(&ab->base_lock);
peer = ath11k_peer_find_by_addr(ab, peer_addr);
+
if (!peer) {
ath11k_warn(ab, "peer not found %pM\n",
peer_addr);
@@ -10095,9 +10074,11 @@ ath11k_wmi_event_peer_sta_ps_state_chg(struct ath11k_base *ab, struct sk_buff *s
}
ar = ath11k_mac_get_ar_by_vdev_id(ab, peer->vdev_id);
+
if (!ar) {
ath11k_warn(ab, "invalid vdev id in peer sta ps state change ev %d",
peer->vdev_id);
+
spin_unlock_bh(&ab->base_lock);
goto exit;
}
@@ -10242,130 +10223,6 @@ static void ath11k_wmi_tlv_cfr_cpature_phase_fixed_param(const void *ptr,
}
}
-static int ath11k_wmi_tbtt_offset_subtlv_parser(struct ath11k_base *ab, u16 tag,
- u16 len, const void *ptr,
- void *data)
-{
- int ret = 0;
- struct ath11k *ar;
- u64 tx_delay = 0;
- struct wmi_tbtt_offset_info *tbtt_offset_info;
- struct ieee80211_chanctx_conf *conf;
- struct ath11k_vif *arvif;
-
- tbtt_offset_info = (struct wmi_tbtt_offset_info *)ptr;
-
- rcu_read_lock();
- ar = ath11k_mac_get_ar_by_vdev_id(ab, tbtt_offset_info->vdev_id);
- if (!ar) {
- ath11k_warn(ab, "ar not found, vdev_id %d\n", tbtt_offset_info->vdev_id);
- ret = -EINVAL;
- goto exit;
- }
-
- arvif = ath11k_mac_get_arvif(ar, tbtt_offset_info->vdev_id);
- if (!arvif) {
- ath11k_warn(ab, "arvif not found, vdev_id %d\n",
- tbtt_offset_info->vdev_id);
- ret = -EINVAL;
- goto exit;
- }
-
- if (arvif->vdev_type != WMI_VDEV_TYPE_AP) {
- ret = 0;
- goto exit;
- }
-
- arvif->tbtt_offset = tbtt_offset_info->tbtt_offset;
-
- conf = rcu_dereference(arvif->vif->chanctx_conf);
- if (conf && conf->def.chan->band == NL80211_BAND_2GHZ) {
- /* 1Mbps Beacon: */
- /* 144 us ( LPREAMBLE) + 48 (PLCP Header)
- * + 192 (1Mbps, 24 ytes)
- * = 384 us + 2us(MAC/BB DELAY
- */
- tx_delay = 386;
- } else if (conf && (conf->def.chan->band == NL80211_BAND_5GHZ ||
- conf->def.chan->band == NL80211_BAND_6GHZ)) {
- /* 6Mbps Beacon: */
- /*20(lsig)+2(service)+32(6mbps, 24 bytes)
- *= 54us + 2us(MAC/BB DELAY)
- */
- tx_delay = 56;
- }
- arvif->tbtt_offset -= tx_delay;
-
- ieee80211_queue_work(ar->hw, &arvif->update_bcn_template_work);
-exit:
- rcu_read_unlock();
- return ret;
-}
-
-static int ath11k_wmi_tbtt_offset_event_parser(struct ath11k_base *ab,
- u16 tag, u16 len,
- const void *ptr, void *data)
-{
- int ret = 0;
-
- ath11k_dbg(ab, ATH11K_DBG_WMI, "wmi tbtt offset event tag 0x%x of len %d rcvd\n",
- tag, len);
-
- switch (tag) {
- case WMI_TAG_TBTT_OFFSET_EXT_EVENT:
- break;
- case WMI_TAG_ARRAY_STRUCT:
- ret = ath11k_wmi_tlv_iter(ab, ptr, len,
- ath11k_wmi_tbtt_offset_subtlv_parser,
- data);
- break;
- default:
- ath11k_warn(ab, "Received invalid tag for wmi tbtt offset event\n");
- ret = -EINVAL;
- break;
- }
-
- return ret;
-}
-
-static int ath11k_wmi_pull_tbtt_offset(struct ath11k_base *ab, struct sk_buff *skb,
- struct wmi_tbtt_offset_ev_arg *arg)
-{
- struct wmi_tbtt_offset_event *ev = NULL;
- struct wmi_tbtt_offset_info tbtt_offset_info = {0};
- struct wmi_tlv *tlv;
- int ret;
- u8 *ptr;
- u16 tlv_tag;
-
- ptr = skb->data;
-
- if (skb->len < (sizeof(*ev) + TLV_HDR_SIZE)) {
- ath11k_warn(ab, "wmi_tbtt_offset event size invalid\n");
- return -EINVAL;
- }
-
- tlv = (struct wmi_tlv *)ptr;
- tlv_tag = FIELD_GET(WMI_TLV_TAG, tlv->header);
- ptr += sizeof(*tlv);
-
- if (tlv_tag == WMI_TAG_TBTT_OFFSET_EXT_EVENT) {
- ev = (struct wmi_tbtt_offset_event *)ptr;
- } else {
- ath11k_warn(ab, "tbtt event received with invalid tag\n");
- return -EINVAL;
- }
-
- ret = ath11k_wmi_tlv_iter(ab, skb->data, skb->len,
- ath11k_wmi_tbtt_offset_event_parser,
- &tbtt_offset_info);
- if (ret) {
- ath11k_warn(ab, "failed to parse tbtt tlv %d\n", ret);
- return -EINVAL;
- }
- return 0;
-}
-
static int ath11k_wmi_tlv_cfr_capture_evt_parse(struct ath11k_base *ab,
u16 tag, u16 len,
const void *ptr, void *data)
@@ -10410,16 +10267,6 @@ static void ath11k_wmi_parse_cfr_capture_event(struct ath11k_base *ab,
"failed to process cfr cpature ret = %d\n", ret);
}
-void ath11k_wmi_event_tbttoffset_update(struct ath11k_base *ab, struct sk_buff *skb)
-{
- struct wmi_tbtt_offset_ev_arg arg = {};
- int ret;
-
- ret = ath11k_wmi_pull_tbtt_offset(ab, skb, &arg);
- if (ret)
- ath11k_warn(ab, "failed to parse tbtt offset event: %d\n", ret);
-}
-
static int ath11k_wmi_peer_ratecode_subtlv_parser(struct ath11k_base *ab,
u16 tag, u16 len,
const void *ptr, void *data)
@@ -10948,87 +10795,6 @@ int ath11k_wmi_send_afc_resp_rx_ind(struct ath11k *ar, int data_type)
return ret;
}
-int ath11k_wmi_pdev_get_ani_status(struct ath11k *ar)
-{
- struct ath11k_pdev_wmi *wmi = ar->wmi;
- struct wmi_pdev_get_ani_status_cmd *cmd = NULL;
- struct sk_buff *skb;
- int ret;
-
- skb = ath11k_wmi_alloc_skb(wmi->wmi_ab, sizeof(*cmd));
- if (!skb)
- return -ENOMEM;
-
- cmd = (struct wmi_pdev_get_ani_status_cmd *)skb->data;
- cmd->tlv_header = FIELD_PREP(WMI_TLV_TAG,
- WMI_TAG_PDEV_GET_CAL_STATUS_CONFIG_CMD) |
- FIELD_PREP(WMI_TLV_LEN,
- sizeof(*cmd) - TLV_HDR_SIZE);
- cmd->pdev_id = ar->pdev->pdev_id;
-
- ret = ath11k_wmi_cmd_send(wmi, skb, WMI_PDEV_GET_CAL_STATUS_CMDID);
- if (ret) {
- ath11k_warn(ar->ab, "failed to send get cal status cmd\n");
- dev_kfree_skb(skb);
- return ret;
- }
-
- ath11k_dbg(ar->ab, ATH11K_DBG_WMI,
- "wmi cal status cmd pdev id %d\n",
- ar->pdev->pdev_id);
-
- return 0;
-}
-
-static int ath11k_wmi_event_get_ani_status(struct ath11k_base *ab,
- struct sk_buff *skb)
-{
- const void **tb;
- const struct wmi_pdev_cal_status_event *ev;
- struct ath11k *ar;
- int ret;
-
-
- if (!(test_bit(ATH11K_FLAG_REGISTERED, &ab->dev_flags)))
- return 0;
-
- tb = ath11k_wmi_tlv_parse_alloc(ab, skb->data, skb->len, GFP_ATOMIC);
- if (IS_ERR(tb)) {
- ret = PTR_ERR(tb);
- ath11k_warn(ab, "failed to parse tlv of ani status event: %d\n", ret);
- return ret;
- }
-
- ev = tb[WMI_TAG_PDEV_CAL_STATUS_EVENT];
-
- if (!ev) {
- ath11k_warn(ab, "failed to fetch ani status ev");
- kfree(tb);
- return -EINVAL;
- }
-
- if (ATH11K_TEST_CAL_STATUS(ev->cal_valid_bitmap, WMI_CAL_ANI)) {
- rcu_read_lock();
- ar = ath11k_mac_get_ar_by_pdev_id(ab, ev->pdev_id);
- if (!ar) {
- ath11k_warn(ab, "ani enabled event in invalid pdev %d\n",
- ev->pdev_id);
- rcu_read_unlock();
- return -EINVAL;
- }
- spin_lock_bh(&ar->data_lock);
- ar->ani_enabled = ATH11K_TEST_CAL_STATUS(ev->cal_status_bitmap, WMI_CAL_ANI);
- spin_unlock_bh(&ar->data_lock);
- if (!completion_done(&ar->ani_status_event))
- complete(&ar->ani_status_event);
- ath11k_dbg(ab, ATH11K_DBG_WMI,
- "pdev id %d ani status %d\n",
- ev->pdev_id, ar->ani_enabled);
- rcu_read_unlock();
- }
- return 0;
-}
-
static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
{
struct wmi_cmd_hdr *cmd_hdr;
@@ -11141,10 +10907,8 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
case WMI_OBSS_COLOR_COLLISION_DETECTION_EVENTID:
ath11k_wmi_obss_color_collision_event(ab, skb);
break;
- case WMI_TBTTOFFSET_EXT_UPDATE_EVENTID:
- ath11k_wmi_event_tbttoffset_update(ab, skb);
- break;
/* add Unsupported events here */
+ case WMI_TBTTOFFSET_EXT_UPDATE_EVENTID:
case WMI_PEER_OPER_MODE_CHANGE_EVENTID:
case WMI_TWT_ENABLE_EVENTID:
case WMI_TWT_DISABLE_EVENTID:
@@ -11195,9 +10959,6 @@ static void ath11k_wmi_tlv_op_rx(struct ath11k_base *ab, struct sk_buff *skb)
case WMI_PDEV_ANI_OFDM_LEVEL_EVENTID:
ath11k_wmi_event_ani_ofdm_level(ab, skb);
break;
- case WMI_PDEV_GET_CAL_STATUS_EVENTID:
- ath11k_wmi_event_get_ani_status(ab, skb);
- break;
case WMI_PEER_RATECODE_LIST_EVENTID:
ath11k_wmi_event_peer_ratecode_list(ab, skb);
break;
diff --git a/drivers/net/wireless/ath/ath11k/wmi.h b/drivers/net/wireless/ath/ath11k/wmi.h
index a3ade7c..9704dba 100644
--- a/drivers/net/wireless/ath/ath11k/wmi.h
+++ b/drivers/net/wireless/ath/ath11k/wmi.h
@@ -301,11 +301,6 @@ enum wmi_tlv_cmd_id {
WMI_PDEV_SET_NON_SRG_OBSS_COLOR_ENABLE_BITMAP_CMDID,
WMI_PDEV_SET_NON_SRG_OBSS_BSSID_ENABLE_BITMAP_CMDID,
WMI_PDEV_GET_TPC_STATS_CMDID,
- WMI_PDEV_ENABLE_DURATION_BASED_TX_MODE_SELECTION_CMDID,
- WMI_PDEV_GET_DPD_STATUS_CMDID,
- WMI_PDEV_SET_BIOS_SAR_TABLE_CMDID,
- WMI_PDEV_SET_BIOS_GEO_TABLE_CMDID,
- WMI_PDEV_GET_CAL_STATUS_CMDID,
WMI_VDEV_CREATE_CMDID = WMI_TLV_CMD(WMI_GRP_VDEV),
WMI_VDEV_DELETE_CMDID,
WMI_VDEV_START_REQUEST_CMDID,
@@ -695,8 +690,6 @@ enum wmi_tlv_event_id {
WMI_SERVICE_READY_EXT2_EVENTID,
WMI_PDEV_MULTIPLE_VDEV_RESTART_RESP_EVENTID,
WMI_PDEV_GET_TPC_STATS_EVENTID,
- WMI_PDEV_GET_DPD_STATUS_EVENTID,
- WMI_PDEV_GET_CAL_STATUS_EVENTID,
WMI_VDEV_START_RESP_EVENTID = WMI_TLV_CMD(WMI_GRP_VDEV),
WMI_VDEV_STOPPED_EVENTID,
WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID,
@@ -1980,9 +1973,6 @@ enum wmi_tlv_tag {
WMI_TAG_AFC_6G_CHANNEL_INFO,
WMI_TAG_AFC_CHAN_EIRP_POWER_INFO,
- WMI_TAG_PDEV_GET_CAL_STATUS_CONFIG_CMD = 0x3DA,
- WMI_TAG_PDEV_CAL_STATUS_EVENT,
-
WMI_TAG_MAX
};
@@ -2854,31 +2844,6 @@ struct wmi_p2p_noa_descriptor {
u32 start_time;
};
-enum wmi_cal_list {
- WMI_CAL_ADC,
- WMI_CAL_BWFILTER,
- WMI_CAL_PDET_AND_PAL,
- WMI_CAL_RXDCO,
- WMI_CAL_COMB_TXLO_TXIQ_RXIQ,
- WMI_CAL_IBF,
- WMI_CAL_PA_DROOP,
- WMI_CAL_DAC,
- WMI_CAL_ANI,
- WMI_CAL_NOISE_FLOOR,
- WMI_CAL_MAX_CAL_LIST
-};
-
-struct wmi_pdev_cal_status_event {
- u32 pdev_id;
- u32 cal_valid_bitmap;
- u32 cal_status_bitmap;
-} __packed;
-
-struct wmi_pdev_get_ani_status_cmd {
- u32 tlv_header;
- u32 pdev_id;
-} __packed;
-
struct wmi_pdev_ani_event {
u32 tlv_header;
u32 ani_level;
@@ -4668,24 +4633,6 @@ struct wmi_vdev_delete_resp_event {
u32 vdev_id;
} __packed;
-struct wmi_tbtt_offset_info {
- u32 vdev_id;
- u32 tbtt_offset;
- u32 tbtt_qtime_low_us;
- u32 tbtt_qtime_high_us;
-} __packed;
-
-struct wmi_tbtt_offset_event {
- u32 num_vdevs;
-} __packed;
-
-struct wmi_tbtt_offset_ev_arg {
- u32 vdev_id;
- u32 tbtt_offset;
- u32 tbtt_qtime_low_us;
- u32 tbtt_qtime_high_us;
-} __packed;
-
#define WMI_REG_CLIENT_MAX 4
struct wmi_reg_chan_list_cc_ext_event {
@@ -7262,5 +7209,5 @@ int ath11k_wmi_send_vdev_set_tpc_power(struct ath11k *ar,
u32 vdev_id,
struct ath11k_reg_tpc_power_info *param);
int ath11k_wmi_send_afc_resp_rx_ind(struct ath11k *ar, int data_type);
-int ath11k_wmi_pdev_get_ani_status(struct ath11k *ar);
+
#endif
diff --git a/drivers/net/wireless/ath/ath6kl/testmode.c b/drivers/net/wireless/ath/ath6kl/testmode.c
index 9ed2559..f3906db 100644
--- a/drivers/net/wireless/ath/ath6kl/testmode.c
+++ b/drivers/net/wireless/ath/ath6kl/testmode.c
@@ -58,7 +58,7 @@ void ath6kl_tm_rx_event(struct ath6kl *ar, void *buf, size_t buf_len)
if (nla_put_u32(skb, ATH6KL_TM_ATTR_CMD, ATH6KL_TM_CMD_TCMD) ||
nla_put(skb, ATH6KL_TM_ATTR_DATA, buf_len, buf))
goto nla_put_failure;
- cfg80211_testmode_event(skb, GFP_KERNEL, false);
+ cfg80211_testmode_event(skb, GFP_KERNEL);
return;
nla_put_failure:
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
index c7a8c43..ed46fd7 100644
--- a/drivers/usb/gadget/composite.c
+++ b/drivers/usb/gadget/composite.c
@@ -1928,9 +1928,6 @@ composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
if (w_index != 0x5 || (w_value >> 8))
break;
interface = w_value & 0xFF;
- if (interface >= MAX_CONFIG_INTERFACES ||
- !os_desc_cfg->interface[interface])
- break;
buf[6] = w_index;
count = count_ext_prop(os_desc_cfg,
interface);
diff --git a/drivers/usb/gadget/function/rndis.c b/drivers/usb/gadget/function/rndis.c
index ab827c1..04c142c 100644
--- a/drivers/usb/gadget/function/rndis.c
+++ b/drivers/usb/gadget/function/rndis.c
@@ -637,17 +637,14 @@ static int rndis_set_response(struct rndis_params *params,
rndis_set_cmplt_type *resp;
rndis_resp_t *r;
- BufLength = le32_to_cpu(buf->InformationBufferLength);
- BufOffset = le32_to_cpu(buf->InformationBufferOffset);
- if ((BufLength > RNDIS_MAX_TOTAL_SIZE) ||
- (BufOffset + 8 >= RNDIS_MAX_TOTAL_SIZE))
- return -EINVAL;
-
r = rndis_add_response(params, sizeof(rndis_set_cmplt_type));
if (!r)
return -ENOMEM;
resp = (rndis_set_cmplt_type *)r->buf;
+ BufLength = le32_to_cpu(buf->InformationBufferLength);
+ BufOffset = le32_to_cpu(buf->InformationBufferOffset);
+
#ifdef VERBOSE_DEBUG
pr_debug("%s: Length: %d\n", __func__, BufLength);
pr_debug("%s: Offset: %d\n", __func__, BufOffset);
diff --git a/drivers/usb/gadget/legacy/inode.c b/drivers/usb/gadget/legacy/inode.c
index 3521d04..cabcbb4 100644
--- a/drivers/usb/gadget/legacy/inode.c
+++ b/drivers/usb/gadget/legacy/inode.c
@@ -1815,9 +1815,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
spin_lock_irq (&dev->lock);
value = -EINVAL;
if (dev->buf) {
- spin_unlock_irq(&dev->lock);
kfree(kbuf);
- return value;
+ goto fail;
}
dev->buf = kbuf;
@@ -1864,8 +1863,8 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
value = usb_gadget_probe_driver(&gadgetfs_driver);
if (value != 0) {
- spin_lock_irq(&dev->lock);
- goto fail;
+ kfree (dev->buf);
+ dev->buf = NULL;
} else {
/* at this point "good" hardware has for the first time
* let the USB the host see us. alternatively, if users
@@ -1882,9 +1881,6 @@ dev_config (struct file *fd, const char __user *buf, size_t len, loff_t *ptr)
return value;
fail:
- dev->config = NULL;
- dev->hs_config = NULL;
- dev->dev = NULL;
spin_unlock_irq (&dev->lock);
pr_debug ("%s: %s fail %zd, %p\n", shortname, __func__, value, dev);
kfree (dev->buf);
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 854e68d..c7044a1 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -829,11 +829,6 @@ static inline bool hid_is_using_ll_driver(struct hid_device *hdev,
return hdev->ll_driver == driver;
}
-static inline bool hid_is_usb(struct hid_device *hdev)
-{
- return hid_is_using_ll_driver(hdev, &usb_hid_driver);
-}
-
#define PM_HINT_FULLON 1<<5
#define PM_HINT_NORMAL 1<<1
diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h
index 39a1ed5..9535b62 100644
--- a/include/linux/if_bridge.h
+++ b/include/linux/if_bridge.h
@@ -58,7 +58,6 @@ extern struct net_device *br_port_dev_get(struct net_device *dev,
struct sk_buff *skb,
unsigned int cookie);
extern void br_refresh_fdb_entry(struct net_device *dev, const char *addr);
-extern void br_fdb_entry_refresh(struct net_device *dev, const char *addr, __u16 vid);
extern void br_dev_update_stats(struct net_device *dev,
struct rtnl_link_stats64 *nlstats);
extern struct net_bridge_fdb_entry *br_fdb_has_entry(struct net_device *dev,
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 723d002..2f3f85f 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -1342,11 +1342,6 @@ struct cfg80211_color_change_settings {
u8 color;
};
-struct cfg80211_6ghz_power_mode_settings {
- u8 he_6ghz_pwr_mode;
- struct cfg80211_beacon_data beacon_next;
-};
-
#define CFG80211_MAX_NUM_DIFFERENT_CHANNELS 10
#define CFG80211_MAX_NUM_DIFFERENT_BI 16
@@ -4101,7 +4096,6 @@ struct mgmt_frame_regs {
* @set_unsol_bcast_probe_resp: Set unsolicited broadcast probe response
* transmission parameters.
* @color_change: initiate a color change (with color change).
- * @power_mode_change_6ghz: initiate power mode change for 6 GHZ.
*/
struct cfg80211_ops {
int (*suspend)(struct wiphy *wiphy, struct cfg80211_wowlan *wow);
@@ -4438,8 +4432,6 @@ struct cfg80211_ops {
int (*color_change)(struct wiphy *wiphy,
struct net_device *dev,
struct cfg80211_color_change_settings *params);
- int (*power_mode_change_6ghz)(struct wiphy *wiphy, struct net_device *dev,
- struct cfg80211_6ghz_power_mode_settings *params);
};
/*
@@ -6836,7 +6828,7 @@ struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy,
int vendor_event_idx,
int approxlen, gfp_t gfp);
-void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp, bool testlogs);
+void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp);
/**
* cfg80211_vendor_cmd_alloc_reply_skb - allocate vendor command reply
@@ -6966,7 +6958,7 @@ cfg80211_vendor_event_alloc_ucast(struct wiphy *wiphy,
*/
static inline void cfg80211_vendor_event(struct sk_buff *skb, gfp_t gfp)
{
- __cfg80211_send_event_skb(skb, gfp, false);
+ __cfg80211_send_event_skb(skb, gfp);
}
#ifdef CONFIG_NL80211_TESTMODE
@@ -7067,10 +7059,9 @@ cfg80211_testmode_alloc_event_skb(struct wiphy *wiphy, int approxlen, gfp_t gfp)
* by cfg80211_testmode_alloc_event_skb(), as an event. It always
* consumes it.
*/
-static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp,
- bool testlogs)
+static inline void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp)
{
- __cfg80211_send_event_skb(skb, gfp, testlogs);
+ __cfg80211_send_event_skb(skb, gfp);
}
#define CFG80211_TESTMODE_CMD(cmd) .testmode_cmd = (cmd),
@@ -7834,14 +7825,6 @@ void cfg80211_ch_switch_started_notify(struct net_device *dev,
struct cfg80211_chan_def *chandef,
u8 count, bool quiet);
-/*cfg80211_6ghz_power_mode_notify - Notify new HE 6GHZ power mode
- * @dev: the device on which power mode change is done
- * @gfp: allocation flags
- * @cmd: the actual event to be notified
- */
-void cfg80211_6ghz_power_mode_notify(struct net_device *dev,
- gfp_t gfp, enum nl80211_commands cmd);
-
/**
* ieee80211_operating_class_to_band - convert operating class to band
*
@@ -8450,14 +8433,4 @@ static inline void cfg80211_color_change_notify(struct net_device *dev)
0, 0);
}
-/*cfg80211_6ghz_power_mode_change_notify -notify 6GHZ power mode change
- * @dev: the device on which the power mode change is done
- *
- * Inform the userspace about the successful change in 6GHZ power mode
- */
-static inline void cfg80211_6ghz_power_mode_change_notify(struct net_device *dev)
-{
- cfg80211_6ghz_power_mode_notify(dev, GFP_KERNEL,
- NL80211_CMD_POWER_MODE_CHANGE_COMPLETED);
-}
#endif /* __NET_CFG80211_H */
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 6136b3f..96b25c1 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -360,8 +360,7 @@ enum ieee80211_bss_change {
BSS_CHANGED_HE_OBSS_PD = 1<<28,
BSS_CHANGED_HE_BSS_COLOR = 1<<29,
BSS_CHANGED_FILS_DISCOVERY = 1<<30,
- BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1ULL<<31,
- BSS_CHANGED_6G_POWER_MODE = 1ULL<<32,
+ BSS_CHANGED_UNSOL_BCAST_PROBE_RESP = 1<<31,
/* when adding here, make sure to change ieee80211_reconfig */
};
@@ -1830,7 +1829,6 @@ struct ieee80211_vif {
bool color_change_active;
u8 color_change_color;
u8 bmiss_threshold;
- bool noqueue_enable;
/* must be last */
u8 drv_priv[] __aligned(sizeof(void *));
@@ -4069,10 +4067,10 @@ struct ieee80211_ops {
void (*bss_info_changed)(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
struct ieee80211_bss_conf *info,
- u64 changed);
+ u32 changed);
void (*nss_bss_info_changed)(struct ieee80211_hw *hw,
struct ieee80211_vif *vif,
- u64 changed);
+ u32 changed);
int (*start_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
void (*stop_ap)(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
@@ -5259,16 +5257,6 @@ void ieee80211_beacon_set_cntdwn(struct ieee80211_vif *vif, u8 counter);
void ieee80211_csa_finish(struct ieee80211_vif *vif);
/**
- * ieee80211_6ghz_power_mode_switch_done - notify mac80211 about power mode
- * change.
- * @vif: &struct ieee80211_vif pointer from the add_interface callback.
- *
- * After power change for 6 GHZ interface successful, this function must
- * be called by the driver to notify mac80211 about power mode change.
- */
-void ieee80211_6ghz_power_mode_switch_done (struct ieee80211_vif *vif);
-
-/**
* ieee80211_beacon_cntdwn_is_complete - find out if countdown reached 1
* @vif: &struct ieee80211_vif pointer from the add_interface callback.
*
diff --git a/include/net/regulatory.h b/include/net/regulatory.h
index 12266ef..ddbf9e7 100644
--- a/include/net/regulatory.h
+++ b/include/net/regulatory.h
@@ -176,7 +176,6 @@ enum ieee80211_regulatory_flags {
REGULATORY_ENABLE_RELAX_NO_IR = BIT(5),
REGULATORY_IGNORE_STALE_KICKOFF = BIT(6),
REGULATORY_WIPHY_SELF_MANAGED = BIT(7),
- REGULATORY_SET_BY_6GHZ_AFC = BIT(8),
};
struct ieee80211_freq_range {
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 06f1dfc..e8ccb6f 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -51,7 +51,6 @@
#define NL80211_MULTICAST_GROUP_VENDOR "vendor"
#define NL80211_MULTICAST_GROUP_NAN "nan"
#define NL80211_MULTICAST_GROUP_TESTMODE "testmode"
-#define NL80211_MULTICAST_GROUP_TESTLOGS "testlogs"
#define NL80211_EDMG_BW_CONFIG_MIN 4
#define NL80211_EDMG_BW_CONFIG_MAX 15
@@ -1214,11 +1213,7 @@
* @NL80211_CMD_AWGN_DETECT: Once AWGN interference is detected on the operating
* channel, userspace is notified with the interference bitmap using
* %NL80211_ATTR_AWGN_INTERFERENCE_BITMAP
- * @NL80211_CMD_SET_6GHZ_POWER_MODE: User can set HE 6 GHZ power mode using userspace
- * application controlling AP cli(i.e hostapd_cli).This command is used to set this
- * power mode to the driver.
- * @NL80211_CMD_POWER_MODE_CHANGE_COMPLETED: Notify the successful 6GHZ power mode change
- * to userspace to update its power mode
+
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -1464,9 +1459,6 @@ enum nl80211_commands {
NL80211_CMD_COLOR_CHANGE_ANNOUNCEMENT_COMPLETED,
NL80211_CMD_AWGN_DETECT,
- NL80211_CMD_SET_6GHZ_POWER_MODE,
- NL80211_CMD_POWER_MODE_CHANGE_COMPLETED,
-
/* add new commands above here */
/* used to define NL80211_CMD_MAX below */
@@ -4041,7 +4033,6 @@ enum nl80211_reg_initiator {
NL80211_REGDOM_SET_BY_USER,
NL80211_REGDOM_SET_BY_DRIVER,
NL80211_REGDOM_SET_BY_COUNTRY_IE,
- NL80211_REGDOM_SET_BY_AFC,
};
/**
diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 4c7f75f..79682c2 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -914,8 +914,6 @@ int cgroup1_parse_param(struct fs_context *fc, struct fs_parameter *param)
opt = fs_parse(fc, &cgroup1_fs_parameters, param, &result);
if (opt == -ENOPARAM) {
if (strcmp(param->key, "source") == 0) {
- if (param->type != fs_value_is_string)
- return invalf(fc, "Non-string source");
if (fc->source)
return invalf(fc, "Multiple sources not supported");
fc->source = param->string;
diff --git a/lib/iov_iter.c b/lib/iov_iter.c
index 332cc2b..639d5e7 100644
--- a/lib/iov_iter.c
+++ b/lib/iov_iter.c
@@ -398,7 +398,6 @@ static size_t copy_page_to_iter_pipe(struct page *page, size_t offset, size_t by
return 0;
pipe->nrbufs++;
buf->ops = &page_cache_pipe_buf_ops;
- buf->flags = 0;
get_page(buf->page = page);
buf->offset = offset;
buf->len = bytes;
@@ -524,7 +523,6 @@ static size_t push_pipe(struct iov_iter *i, size_t size,
if (!page)
break;
pipe->nrbufs++;
- pipe->bufs[idx].flags = 0;
pipe->bufs[idx].ops = &default_pipe_buf_ops;
pipe->bufs[idx].page = page;
pipe->bufs[idx].offset = 0;
diff --git a/net/bridge/br_fdb.c b/net/bridge/br_fdb.c
index a9d1a05..353690b 100644
--- a/net/bridge/br_fdb.c
+++ b/net/bridge/br_fdb.c
@@ -686,24 +686,6 @@ void br_refresh_fdb_entry(struct net_device *dev, const char *addr)
}
EXPORT_SYMBOL_GPL(br_refresh_fdb_entry);
-/* Update timestamp of FDB entries for bridge packets being forwarded by offload engines */
-void br_fdb_entry_refresh(struct net_device *dev, const char *addr, __u16 vid)
-{
- struct net_bridge_fdb_entry *fdb;
- struct net_bridge_port *p = br_port_get_rcu(dev);
-
- if (!p || p->state == BR_STATE_DISABLED)
- return;
-
- rcu_read_lock();
- fdb = fdb_find_rcu(&p->br->fdb_hash_tbl, addr, vid);
- if (likely(fdb)) {
- fdb->updated = jiffies;
- }
- rcu_read_unlock();
-}
-EXPORT_SYMBOL_GPL(br_fdb_entry_refresh);
-
/* Look up the MAC address in the device's bridge fdb table */
struct net_bridge_fdb_entry *br_fdb_has_entry(struct net_device *dev,
const char *addr, __u16 vid)
diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c
index eb90194..c2ee61b 100644
--- a/net/bridge/br_if.c
+++ b/net/bridge/br_if.c
@@ -842,16 +842,14 @@ void br_dev_update_stats(struct net_device *dev,
return;
br = netdev_priv(dev);
- stats = this_cpu_ptr(br->stats);
+ stats = per_cpu_ptr(br->stats, 0);
- local_bh_disable();
u64_stats_update_begin(&stats->syncp);
stats->rx_packets += nlstats->rx_packets;
stats->rx_bytes += nlstats->rx_bytes;
stats->tx_packets += nlstats->tx_packets;
stats->tx_bytes += nlstats->tx_bytes;
u64_stats_update_end(&stats->syncp);
- local_bh_enable();
}
EXPORT_SYMBOL_GPL(br_dev_update_stats);
diff --git a/net/core/skbuff_recycle.h b/net/core/skbuff_recycle.h
index c93c87c..ab14aec 100644
--- a/net/core/skbuff_recycle.h
+++ b/net/core/skbuff_recycle.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013-2017, 2022, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2013-2017, The Linux Foundation. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -43,7 +43,7 @@
#define SKB_RECYCLE_SIZE 2304
#define SKB_RECYCLE_MIN_SIZE SKB_RECYCLE_SIZE
#define SKB_RECYCLE_MAX_SIZE (3904 - NET_SKB_PAD)
-#define SKB_RECYCLE_MAX_SKBS 8192
+#define SKB_RECYCLE_MAX_SKBS 1024
#define SKB_RECYCLE_SPARE_MAX_SKBS 256
diff --git a/net/ipv4/igmp.c b/net/ipv4/igmp.c
index 8b72b31..480d0b2 100644
--- a/net/ipv4/igmp.c
+++ b/net/ipv4/igmp.c
@@ -2722,7 +2722,6 @@ int ip_check_mc_rcu(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u
rv = 1;
} else if (im) {
if (src_addr) {
- spin_lock_bh(&im->lock);
for (psf = im->sources; psf; psf = psf->sf_next) {
if (psf->sf_inaddr == src_addr)
break;
@@ -2733,7 +2732,6 @@ int ip_check_mc_rcu(struct in_device *in_dev, __be32 mc_addr, __be32 src_addr, u
im->sfcount[MCAST_EXCLUDE];
else
rv = im->sfcount[MCAST_EXCLUDE] != 0;
- spin_unlock_bh(&im->lock);
} else
rv = 1; /* unspecified source; tentatively allow */
}
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 7611a1a..07504da 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -927,26 +927,19 @@ static int ieee80211_set_fils_discovery(struct wiphy *wiphy,
struct ieee80211_fils_discovery *fd;
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ if (!params->tmpl || !params->tmpl_len)
+ return -EINVAL;
+
fd = &sdata->vif.bss_conf.fils_discovery;
fd->min_interval = params->min_interval;
fd->max_interval = params->max_interval;
old = sdata_dereference(sdata->u.ap.fils_discovery, sdata);
-
- if (!fd->max_interval) {
- new = NULL;
- goto free_old_fils;
- }
-
- if (!params->tmpl || !params->tmpl_len)
- return -EINVAL;
-
new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
if (!new)
return -ENOMEM;
new->len = params->tmpl_len;
memcpy(new->data, params->tmpl, params->tmpl_len);
-free_old_fils:
rcu_assign_pointer(sdata->u.ap.fils_discovery, new);
if (old)
@@ -964,24 +957,17 @@ ieee80211_set_unsol_bcast_probe_resp(struct wiphy *wiphy,
struct unsol_bcast_probe_resp_data *new, *old = NULL;
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ if (!params->tmpl || !params->tmpl_len)
+ return -EINVAL;
+
sdata->vif.bss_conf.unsol_bcast_probe_resp_interval = params->interval;
old = sdata_dereference(sdata->u.ap.unsol_bcast_probe_resp, sdata);
-
- if (!params->interval) {
- new = NULL;
- goto free_old_ubpr;
- }
-
- if (!params->tmpl || !params->tmpl_len)
- return -EINVAL;
-
new = kzalloc(sizeof(*new) + params->tmpl_len, GFP_KERNEL);
if (!new)
return -ENOMEM;
new->len = params->tmpl_len;
memcpy(new->data, params->tmpl, params->tmpl_len);
-free_old_ubpr:
rcu_assign_pointer(sdata->u.ap.unsol_bcast_probe_resp, new);
if (old)
@@ -2937,18 +2923,18 @@ static int ieee80211_set_tx_power(struct wiphy *wiphy,
static int ieee80211_get_tx_power(struct wiphy *wiphy,
struct wireless_dev *wdev,
- int *mbm)
+ int *dbm)
{
struct ieee80211_local *local = wiphy_priv(wiphy);
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
if (local->ops->get_txpower)
- return drv_get_txpower(local, sdata, mbm);
+ return drv_get_txpower(local, sdata, dbm);
if (!local->use_chanctx)
- *mbm = DBM_TO_MBM(local->hw.conf.power_level);
+ *dbm = local->hw.conf.power_level;
else
- *mbm = DBM_TO_MBM(sdata->vif.bss_conf.txpower);
+ *dbm = sdata->vif.bss_conf.txpower;
return 0;
}
@@ -3465,39 +3451,6 @@ static void ieee80211_csa_finalize(struct ieee80211_sub_if_data *sdata)
}
}
-void ieee80211_power_mode_switch_work(struct work_struct *work)
-{
- int ret;
- u32 changed = 0;
- struct ieee80211_sub_if_data *sdata =
- container_of(work, struct ieee80211_sub_if_data,
- power_mode_switch_work);
- struct ieee80211_local *local = sdata->local;
-
- sdata_lock(sdata);
- mutex_lock(&local->mtx);
-
- if (sdata->vif.csa_active || !sdata->u.ap.next_beacon)
- goto unlock;
-
- ret = ieee80211_assign_beacon(sdata, sdata->u.ap.next_beacon,
- NULL, NULL);
- kfree(sdata->u.ap.next_beacon);
- sdata->u.ap.next_beacon = NULL;
-
- if (ret < 0) {
- goto unlock;
- }
- changed = ret;
-
- ieee80211_bss_info_change_notify(sdata, changed);
- cfg80211_6ghz_power_mode_change_notify(sdata->dev);
-
-unlock:
- mutex_unlock(&local->mtx);
- sdata_unlock(sdata);
-}
-
void ieee80211_csa_finalize_work(struct work_struct *work)
{
struct ieee80211_sub_if_data *sdata =
@@ -4390,62 +4343,6 @@ static int ieee80211_set_sar_specs(struct wiphy *wiphy,
return local->ops->set_sar_specs(&local->hw, sar);
}
-void ieee80211_6ghz_power_mode_switch_done(struct ieee80211_vif *vif)
-{
- struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
-
- ieee80211_queue_work(&sdata->local->hw, &sdata->power_mode_switch_work);
-}
-EXPORT_SYMBOL(ieee80211_6ghz_power_mode_switch_done);
-
-static int ieee80211_set_power_mode_changed_beacon(struct ieee80211_sub_if_data *sdata,
- struct cfg80211_6ghz_power_mode_settings *params)
-{
-
- if (sdata->vif.type != NL80211_IFTYPE_AP)
- return -EOPNOTSUPP;
-
- sdata->u.ap.next_beacon =
- cfg80211_beacon_dup(¶ms->beacon_next);
-
- if (!sdata->u.ap.next_beacon)
- return -ENOMEM;
-
- return 0;
-}
-
-static int
-ieee80211_6ghz_power_mode_change(struct wiphy *wiphy, struct net_device *dev,
- struct cfg80211_6ghz_power_mode_settings *params)
-{
- struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
- struct ieee80211_local *local = sdata->local;
- struct wireless_dev *wdev = dev->ieee80211_ptr;
- int err;
- u64 changed = 0;
-
- sdata_assert_lock(sdata);
- mutex_lock(&local->mtx);
-
- if (sdata->vif.csa_active) {
- err = -EBUSY;
- goto out;
- }
-
- err = ieee80211_set_power_mode_changed_beacon(sdata, params);
- if (err)
- goto out;
-
- wdev->reg_6g_power_mode = params->he_6ghz_pwr_mode;
-
- changed = BSS_CHANGED_6G_POWER_MODE;
- ieee80211_bss_info_change_notify(sdata, changed);
-out:
- mutex_unlock(&local->mtx);
-
- return err;
-}
-
static int ieee80211_set_after_color_change_beacon(struct ieee80211_sub_if_data *sdata,
u32 *changed)
{
@@ -4764,5 +4661,4 @@ const struct cfg80211_ops mac80211_config_ops = {
.set_fils_discovery = ieee80211_set_fils_discovery,
.set_unsol_bcast_probe_resp = ieee80211_set_unsol_bcast_probe_resp,
.color_change = ieee80211_color_change,
- .power_mode_change_6ghz = ieee80211_6ghz_power_mode_change,
};
diff --git a/net/mac80211/debugfs_netdev.c b/net/mac80211/debugfs_netdev.c
index 01b1851..491661a 100644
--- a/net/mac80211/debugfs_netdev.c
+++ b/net/mac80211/debugfs_netdev.c
@@ -329,32 +329,6 @@ static ssize_t ieee80211_if_parse_bmiss_threshold(struct ieee80211_sub_if_data *
IEEE80211_IF_FILE_RW(bmiss_threshold);
-static ssize_t ieee80211_if_fmt_noqueue_enable(const struct ieee80211_sub_if_data *sdata,
- char *buf, int buflen)
-{
- return snprintf(buf, buflen, "%u\n", sdata->vif.noqueue_enable);
-}
-
-static ssize_t ieee80211_if_parse_noqueue_enable(struct ieee80211_sub_if_data *sdata,
- const char *buf, int buflen)
-{
- int ret;
- u8 val;
-
- ret = kstrtou8(buf, 0, &val);
- if (ret)
- return ret;
-
- if (val > 1)
- return -EINVAL;
-
- sdata->vif.noqueue_enable = val;
-
- return buflen;
-}
-
-IEEE80211_IF_FILE_RW(noqueue_enable);
-
static ssize_t
ieee80211_if_parse_wmm_param(struct ieee80211_sub_if_data *sdata,
const char *user_buf, int count)
@@ -865,7 +839,6 @@ static void add_ap_files(struct ieee80211_sub_if_data *sdata)
DEBUGFS_ADD_MODE(multicast_to_unicast, 0600);
DEBUGFS_ADD_MODE(bmiss_threshold, 0600);
DEBUGFS_ADD_MODE(wmm_param, 0200);
- DEBUGFS_ADD_MODE(noqueue_enable, 0600);
}
static void add_vlan_files(struct ieee80211_sub_if_data *sdata)
@@ -888,7 +861,6 @@ static void add_mesh_files(struct ieee80211_sub_if_data *sdata)
DEBUGFS_ADD_MODE(estab_plinks, 0400);
DEBUGFS_ADD_MODE(bmiss_threshold, 0600);
DEBUGFS_ADD_MODE(wmm_param, 0200);
- DEBUGFS_ADD_MODE(noqueue_enable, 0600);
}
static void add_mesh_stats(struct ieee80211_sub_if_data *sdata)
diff --git a/net/mac80211/driver-ops.h b/net/mac80211/driver-ops.h
index 20f4e92..386059a 100644
--- a/net/mac80211/driver-ops.h
+++ b/net/mac80211/driver-ops.h
@@ -150,7 +150,7 @@ static inline int drv_config(struct ieee80211_local *local, u32 changed)
static inline void drv_bss_info_changed(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
struct ieee80211_bss_conf *info,
- u64 changed)
+ u32 changed)
{
might_sleep();
@@ -181,7 +181,7 @@ static inline void drv_bss_info_changed(struct ieee80211_local *local,
static inline void drv_nss_bss_info_changed(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata,
struct ieee80211_bss_conf *info,
- u64 changed)
+ u32 changed)
{
might_sleep();
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index e9e6e16..e4f3dcc 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -247,8 +247,6 @@ struct ieee80211_rx_data {
u32 tkip_iv32;
u16 tkip_iv16;
- u16 last_legacy_rate_idx;
- enum nl80211_band last_legacy_band;
};
struct ieee80211_csa_settings {
@@ -954,7 +952,6 @@ struct ieee80211_sub_if_data {
struct cfg80211_chan_def csa_chandef;
struct work_struct color_change_finalize_work;
- struct work_struct power_mode_switch_work;
struct list_head assigned_chanctx_list; /* protected by chanctx_mtx */
struct list_head reserved_chanctx_list; /* protected by chanctx_mtx */
@@ -1661,7 +1658,7 @@ u64 ieee80211_calculate_rx_timestamp(struct ieee80211_local *local,
int ieee80211_hw_config(struct ieee80211_local *local, u32 changed);
void ieee80211_tx_set_protected(struct ieee80211_tx_data *tx);
void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
- u64 changed);
+ u32 changed);
void ieee80211_nss_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
u32 changed);
void ieee80211_configure_filter(struct ieee80211_local *local);
@@ -1790,7 +1787,6 @@ int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
/* channel switch handling */
void ieee80211_csa_finalize_work(struct work_struct *work);
-void ieee80211_power_mode_switch_work(struct work_struct *work);
int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
struct cfg80211_csa_settings *params);
/* awgn interference handling */
diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
index 25701fa..ba47dd0 100644
--- a/net/mac80211/iface.c
+++ b/net/mac80211/iface.c
@@ -490,7 +490,6 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, bool going_do
}
cancel_work_sync(&sdata->color_change_finalize_work);
- cancel_work_sync(&sdata->power_mode_switch_work);
/* APs need special treatment */
if (sdata->vif.type == NL80211_IFTYPE_AP) {
@@ -1624,7 +1623,6 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata,
INIT_WORK(&sdata->recalc_smps, ieee80211_recalc_smps_work);
INIT_WORK(&sdata->csa_finalize_work, ieee80211_csa_finalize_work);
INIT_WORK(&sdata->color_change_finalize_work, ieee80211_color_change_finalize_work);
- INIT_WORK(&sdata->power_mode_switch_work, ieee80211_power_mode_switch_work);
INIT_LIST_HEAD(&sdata->assigned_chanctx_list);
INIT_LIST_HEAD(&sdata->reserved_chanctx_list);
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 224e801..e453a9b 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -200,7 +200,7 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
}
void ieee80211_bss_info_change_notify(struct ieee80211_sub_if_data *sdata,
- u64 changed)
+ u32 changed)
{
struct ieee80211_local *local = sdata->local;
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
index 1274658..efc6cf6 100644
--- a/net/mac80211/rx.c
+++ b/net/mac80211/rx.c
@@ -3927,14 +3927,6 @@ static void ieee80211_rx_handlers_result(struct ieee80211_rx_data *rx,
status = IEEE80211_SKB_RXCB((rx->skb));
sband = rx->local->hw.wiphy->bands[status->band];
- if (!status || !sband) {
- printk(KERN_ERR "status %pM or sband %pM is Null rate_idx %u legacy_band %d\n",
- status, sband, rx->last_legacy_rate_idx, rx->last_legacy_band);
- if (status) {
- printk(KERN_ERR "STATUS idx %d\n", status->rate_idx);
- printk(KERN_ERR "rate %pM\n", &sband->bitrates[status->rate_idx]);
- }
- }
if (status->encoding == RX_ENC_LEGACY)
rate = &sband->bitrates[status->rate_idx];
@@ -4584,16 +4576,6 @@ static void ieee80211_rx_8023(struct ieee80211_rx_data *rx,
return;
}
- /* Get the multicat broadcast stats */
- ieee80211_mc_bc_stats(((struct ethhdr *)rx->skb->data)->h_dest, rx);
-
- if (!ieee80211_mc_bc_rx_limit(((struct ethhdr *)rx->skb->data)->h_dest,
- rx)) {
- /* free the omitted skb's before returning from here */
- dev_kfree_skb(skb);
- return;
- }
-
/* deliver to local stack */
skb->protocol = eth_type_trans(skb, fast_rx->dev);
memset(skb->cb, 0, sizeof(skb->cb));
@@ -4933,7 +4915,6 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
struct list_head *list)
{
struct ieee80211_local *local = hw_to_local(hw);
- struct ieee80211_rx_status *status = IEEE80211_SKB_RXCB(skb);
struct ieee80211_sub_if_data *sdata;
struct ieee80211_hdr *hdr;
__le16 fc;
@@ -4948,14 +4929,6 @@ static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw,
rx.local = local;
rx.list = list;
- if (status && status->encoding == RX_ENC_LEGACY) {
- rx.last_legacy_rate_idx = status->rate_idx;
- rx.last_legacy_band = status->band;
- }
-
- if (!status)
- pr_err("STATUS not found\n");
-
if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc))
I802_DEBUG_INC(local->dot11ReceivedFragmentCount);
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c
index 9c14a5c..644a7de 100644
--- a/net/mac80211/sta_info.c
+++ b/net/mac80211/sta_info.c
@@ -2147,7 +2147,7 @@ sta_get_last_rx_stats(struct sta_info *sta)
if (ieee80211_hw_check(&local->hw, SUPPORTS_NSS_OFFLOAD))
return stats;
- if (!ieee80211_hw_check(&local->hw, USES_RSS) || !sta->pcpu_rx_stats)
+ if (!ieee80211_hw_check(&local->hw, USES_RSS))
return stats;
for_each_possible_cpu(cpu) {
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index a6c0174..912019c 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -414,12 +414,8 @@ void ieee80211_propagate_queue_wake(struct ieee80211_local *local, int queue)
if (ac_queue == queue ||
(sdata->vif.cab_queue == queue &&
local->queue_stop_reasons[ac_queue] == 0 &&
- skb_queue_empty(&local->pending[ac_queue]))) {
- if (sdata->vif.noqueue_enable)
- continue;
-
+ skb_queue_empty(&local->pending[ac_queue])))
netif_wake_subqueue(sdata->dev, ac);
- }
}
}
}
@@ -518,9 +514,6 @@ static void __ieee80211_stop_queue(struct ieee80211_hw *hw, int queue,
for (ac = 0; ac < n_acs; ac++) {
if (sdata->vif.hw_queue[ac] == queue ||
sdata->vif.cab_queue == queue) {
- if (!local->ops->wake_tx_queue && sdata->vif.noqueue_enable)
- continue;
-
if (!local->ops->wake_tx_queue) {
netif_stop_subqueue(sdata->dev, ac);
continue;
diff --git a/net/wireless/core.c b/net/wireless/core.c
index 4a59bf6..57e7703 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -334,17 +334,11 @@ void cfg80211_destroy_ifaces(struct cfg80211_registered_device *rdev)
struct wireless_dev *wdev, *tmp;
ASSERT_RTNL();
+ lockdep_assert_wiphy(&rdev->wiphy);
list_for_each_entry_safe(wdev, tmp, &rdev->wiphy.wdev_list, list) {
- if (wdev->nl_owner_dead) {
- if (wdev->netdev)
- dev_close(wdev->netdev);
-
- wiphy_lock(&rdev->wiphy);
- cfg80211_leave(rdev, wdev);
+ if (wdev->nl_owner_dead)
rdev_del_virtual_intf(rdev, wdev);
- wiphy_unlock(&rdev->wiphy);
- }
}
}
@@ -356,7 +350,9 @@ static void cfg80211_destroy_iface_wk(struct work_struct *work)
destroy_work);
rtnl_lock();
+ wiphy_lock(&rdev->wiphy);
cfg80211_destroy_ifaces(rdev);
+ wiphy_unlock(&rdev->wiphy);
rtnl_unlock();
}
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index dd890dc..472549a 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -47,8 +47,7 @@ enum nl80211_multicast_groups {
NL80211_MCGRP_MLME,
NL80211_MCGRP_VENDOR,
NL80211_MCGRP_NAN,
- NL80211_MCGRP_TESTMODE,
- NL80211_MCGRP_TESTLOGS /* keep last - ifdef! */
+ NL80211_MCGRP_TESTMODE /* keep last - ifdef! */
};
static const struct genl_multicast_group nl80211_mcgrps[] = {
@@ -59,8 +58,7 @@ static const struct genl_multicast_group nl80211_mcgrps[] = {
[NL80211_MCGRP_VENDOR] = { .name = NL80211_MULTICAST_GROUP_VENDOR },
[NL80211_MCGRP_NAN] = { .name = NL80211_MULTICAST_GROUP_NAN },
#ifdef CONFIG_NL80211_TESTMODE
- [NL80211_MCGRP_TESTMODE] = { .name = NL80211_MULTICAST_GROUP_TESTMODE },
- [NL80211_MCGRP_TESTLOGS] = { .name = NL80211_MULTICAST_GROUP_TESTLOGS }
+ [NL80211_MCGRP_TESTMODE] = { .name = NL80211_MULTICAST_GROUP_TESTMODE }
#endif
};
@@ -3023,7 +3021,6 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
{
struct netlink_ext_ack *extack = info->extack;
struct nlattr **attrs = info->attrs;
- struct wireless_dev *wdev = info->user_ptr[1];
enum nl80211_regulatory_power_modes mode = NL80211_REG_AP_LPI;
u32 control_freq;
@@ -3036,12 +3033,10 @@ int nl80211_parse_chandef(struct cfg80211_registered_device *rdev,
control_freq +=
nla_get_u32(info->attrs[NL80211_ATTR_WIPHY_FREQ_OFFSET]);
- if (info->attrs[NL80211_ATTR_6G_REG_POWER_MODE]) {
+ if (info->attrs[NL80211_ATTR_6G_REG_POWER_MODE])
mode = nla_get_u8(info->attrs[NL80211_ATTR_6G_REG_POWER_MODE]);
- } else {
- if (wdev)
- mode = wdev->reg_6g_power_mode;
- }
+ else
+ mode = chandef->mode;
memset(chandef, 0, sizeof(*chandef));
@@ -3637,12 +3632,12 @@ static int nl80211_send_iface(struct sk_buff *msg, u32 portid, u32 seq, int flag
}
if (rdev->ops->get_tx_power) {
- int mbm, ret;
+ int dbm, ret;
- ret = rdev_get_tx_power(rdev, wdev, &mbm);
+ ret = rdev_get_tx_power(rdev, wdev, &dbm);
if (ret == 0 &&
nla_put_u32(msg, NL80211_ATTR_WIPHY_TX_POWER_LEVEL,
- mbm))
+ DBM_TO_MBM(dbm)))
goto nla_put_failure;
}
@@ -3991,7 +3986,7 @@ static int nl80211_set_interface(struct sk_buff *skb, struct genl_info *info)
return err;
}
-static int _nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
+static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
struct vif_params params;
@@ -4000,6 +3995,9 @@ static int _nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
int err;
enum nl80211_iftype type = NL80211_IFTYPE_UNSPECIFIED;
+ /* to avoid failing a new interface creation due to pending removal */
+ cfg80211_destroy_ifaces(rdev);
+
memset(¶ms, 0, sizeof(params));
if (!info->attrs[NL80211_ATTR_IFNAME])
@@ -4087,21 +4085,6 @@ static int _nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
return genlmsg_reply(msg, info);
}
-static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
-{
- struct cfg80211_registered_device *rdev = info->user_ptr[0];
- int ret;
-
- /* to avoid failing a new interface creation due to pending removal */
- cfg80211_destroy_ifaces(rdev);
-
- wiphy_lock(&rdev->wiphy);
- ret = _nl80211_new_interface(skb, info);
- wiphy_unlock(&rdev->wiphy);
-
- return ret;
-}
-
static int nl80211_del_interface(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
@@ -5262,11 +5245,6 @@ static int nl80211_set_fils_discovery(struct sk_buff *skb,
if (ret)
return ret;
- fd.max_interval = nla_get_u32(tb[NL80211_FILS_DISCOVERY_ATTR_INT_MAX]);
- if (!fd.max_interval) {
- goto set_fils;
- }
-
if (!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN] ||
!tb[NL80211_FILS_DISCOVERY_ATTR_INT_MAX] ||
!tb[NL80211_FILS_DISCOVERY_ATTR_TMPL])
@@ -5275,8 +5253,8 @@ static int nl80211_set_fils_discovery(struct sk_buff *skb,
fd.tmpl_len = nla_len(tb[NL80211_FILS_DISCOVERY_ATTR_TMPL]);
fd.tmpl = nla_data(tb[NL80211_FILS_DISCOVERY_ATTR_TMPL]);
fd.min_interval = nla_get_u32(tb[NL80211_FILS_DISCOVERY_ATTR_INT_MIN]);
+ fd.max_interval = nla_get_u32(tb[NL80211_FILS_DISCOVERY_ATTR_INT_MAX]);
-set_fils:
wdev_lock(wdev);
ret = rdev_set_fils_discovery(rdev, dev, &fd);
wdev_unlock(wdev);
@@ -5305,19 +5283,14 @@ nl80211_set_unsol_bcast_probe_resp(struct sk_buff *skb, struct genl_info *info)
if (ret)
return ret;
- params.interval = nla_get_u32(tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT]);
-
- if (!params.interval)
- goto set_ubpr;
-
if (!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT] ||
!tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL])
return -EINVAL;
params.tmpl = nla_data(tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL]);
params.tmpl_len = nla_len(tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_TMPL]);
+ params.interval = nla_get_u32(tb[NL80211_UNSOL_BCAST_PROBE_RESP_ATTR_INT]);
-set_ubpr:
wdev_lock(wdev);
ret = rdev_set_unsol_bcast_probe_resp(rdev, dev, ¶ms);
wdev_unlock(wdev);
@@ -10725,7 +10698,7 @@ struct sk_buff *__cfg80211_alloc_event_skb(struct wiphy *wiphy,
}
EXPORT_SYMBOL(__cfg80211_alloc_event_skb);
-void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp, bool testlogs)
+void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp)
{
struct cfg80211_registered_device *rdev = ((void **)skb->cb)[0];
void *hdr = ((void **)skb->cb)[1];
@@ -10746,9 +10719,6 @@ void __cfg80211_send_event_skb(struct sk_buff *skb, gfp_t gfp, bool testlogs)
if (data->nla_type == NL80211_ATTR_VENDOR_DATA)
mcgrp = NL80211_MCGRP_VENDOR;
- if (testlogs)
- mcgrp = NL80211_MCGRP_TESTLOGS;
-
genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy),
skb, 0, mcgrp, gfp);
}
@@ -15031,74 +15001,6 @@ static int nl80211_set_tid_config(struct sk_buff *skb,
return ret;
}
-static int nl80211_6ghz_power_mode_change(struct sk_buff *skb, struct genl_info *info)
-{
- struct cfg80211_registered_device *rdev = info->user_ptr[0];
- struct cfg80211_6ghz_power_mode_settings params = {};
- struct net_device *dev = info->user_ptr[1];
- struct ieee80211_channel *chan;
- struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct cfg80211_chan_def *chan_def = &wdev->chandef;
- const struct ieee80211_reg_rule *reg_rule;
- u32 width;
- int i, err, num_20mhz_channels, center_freq;
-
- if (!rdev->ops->power_mode_change_6ghz)
- return -EOPNOTSUPP;
-
- if (wdev->iftype != NL80211_IFTYPE_AP)
- return -EOPNOTSUPP;
-
- if (!info->attrs[NL80211_ATTR_6G_REG_POWER_MODE])
- return -EINVAL;
-
- params.he_6ghz_pwr_mode = nla_get_u8(info->attrs[NL80211_ATTR_6G_REG_POWER_MODE]);
-
- if (params.he_6ghz_pwr_mode < NL80211_REG_AP_LPI ||
- params.he_6ghz_pwr_mode > NL80211_REG_AP_VLP ||
- params.he_6ghz_pwr_mode == wdev->reg_6g_power_mode) {
- GENL_SET_ERR_MSG(info, "Invalid 6GHZ power mode configuration\n");
- return -EINVAL;
- }
-
- if (chan_def->width == NL80211_CHAN_WIDTH_20) {
- width = 20;
- } else if (chan_def->width == NL80211_CHAN_WIDTH_40) {
- width = 40;
- } else if (chan_def->width == NL80211_CHAN_WIDTH_80) {
- width = 80;
- } else if (chan_def->width == NL80211_CHAN_WIDTH_160) {
- width = 160;
- } else {
- GENL_SET_ERR_MSG(info, "Unsupported channel width for configuring power mode\n");
- return -EINVAL;
- }
-
- num_20mhz_channels = width / 20 ;
-
- for (i = 0; i < num_20mhz_channels; i++) {
- center_freq = chan_def->chan->center_freq + i * 20;
- chan = ieee80211_get_6g_channel_khz(&rdev->wiphy,
- MHZ_TO_KHZ(center_freq),
- params.he_6ghz_pwr_mode);
-
- if (!chan || chan->flags & IEEE80211_CHAN_DISABLED) {
- GENL_SET_ERR_MSG(info, "Current channel does not support configured power mode\n");
- return -ENOTSUPP;
- }
- }
-
- err = nl80211_parse_beacon(rdev, info->attrs, ¶ms.beacon_next);
- if (err)
- return err;
-
- wdev_lock(wdev);
- err = rdev_6g_power_mode_change(rdev, dev, ¶ms);
- wdev_unlock(wdev);
-
- return err;
-}
-
static int nl80211_color_change(struct sk_buff *skb, struct genl_info *info)
{
struct cfg80211_registered_device *rdev = info->user_ptr[0];
@@ -15186,7 +15088,6 @@ static int nl80211_color_change(struct sk_buff *skb, struct genl_info *info)
#define NL80211_FLAG_NEED_WDEV_UP (NL80211_FLAG_NEED_WDEV |\
NL80211_FLAG_CHECK_NETDEV_UP)
#define NL80211_FLAG_CLEAR_SKB 0x20
-#define NL80211_FLAG_NO_WIPHY_MTX 0x40
static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
struct genl_info *info)
@@ -15238,7 +15139,7 @@ static int nl80211_pre_doit(const struct genl_ops *ops, struct sk_buff *skb,
info->user_ptr[0] = rdev;
}
- if (rdev && !(ops->internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
+ if (rdev) {
wiphy_lock(&rdev->wiphy);
/* we keep the mutex locked until post_doit */
__release(&rdev->wiphy.mtx);
@@ -15263,8 +15164,7 @@ static void nl80211_post_doit(const struct genl_ops *ops, struct sk_buff *skb,
}
}
- if (info->user_ptr[0] &&
- !(ops->internal_flags & NL80211_FLAG_NO_WIPHY_MTX)) {
+ if (info->user_ptr[0]) {
struct cfg80211_registered_device *rdev = info->user_ptr[0];
/* we kept the mutex locked since pre_doit */
@@ -15430,9 +15330,7 @@ static const struct genl_ops nl80211_ops[] = {
.doit = nl80211_new_interface,
.flags = GENL_UNS_ADMIN_PERM,
.internal_flags = NL80211_FLAG_NEED_WIPHY |
- NL80211_FLAG_NEED_RTNL |
- /* we take the wiphy mutex later ourselves */
- NL80211_FLAG_NO_WIPHY_MTX,
+ NL80211_FLAG_NEED_RTNL,
},
{
.cmd = NL80211_CMD_DEL_INTERFACE,
@@ -15727,9 +15625,7 @@ static const struct genl_ops nl80211_ops[] = {
.validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
.doit = nl80211_wiphy_netns,
.flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_WIPHY |
- NL80211_FLAG_NEED_RTNL |
- NL80211_FLAG_NO_WIPHY_MTX,
+ .internal_flags = NL80211_FLAG_NEED_WIPHY,
},
{
.cmd = NL80211_CMD_GET_SURVEY,
@@ -16194,14 +16090,6 @@ static const struct genl_ops nl80211_ops[] = {
.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
NL80211_FLAG_NEED_RTNL,
},
- {
- .cmd = NL80211_CMD_SET_6GHZ_POWER_MODE,
- .validate = GENL_DONT_VALIDATE_STRICT | GENL_DONT_VALIDATE_DUMP,
- .doit = nl80211_6ghz_power_mode_change,
- .flags = GENL_UNS_ADMIN_PERM,
- .internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
- NL80211_FLAG_NEED_RTNL,
- },
};
static struct genl_family nl80211_fam __ro_after_init = {
@@ -17887,46 +17775,6 @@ void cfg80211_ch_switch_started_notify(struct net_device *dev,
}
EXPORT_SYMBOL(cfg80211_ch_switch_started_notify);
-void cfg80211_6ghz_power_mode_notify(struct net_device *dev,
- gfp_t gfp, enum nl80211_commands cmd)
-{
- struct wireless_dev *wdev = dev->ieee80211_ptr;
- struct wiphy *wiphy = wdev->wiphy;
- struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
- struct sk_buff *msg;
- void *hdr;
- u8 he_6ghz_power_mode = wdev->reg_6g_power_mode;
-
- ASSERT_WDEV_LOCK(wdev);
- trace_cfg80211_6ghz_power_mode_notify(dev, cmd, he_6ghz_power_mode);
-
- msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
- if (!msg)
- return;
-
- hdr = nl80211hdr_put(msg, 0, 0, 0, cmd);
- if (!hdr) {
- nlmsg_free(msg);
- return;
- }
-
- if (nla_put_u32(msg, NL80211_ATTR_IFINDEX, dev->ifindex))
- goto nla_put_failure;
-
- if(nla_put_u32(msg, NL80211_ATTR_6G_REG_POWER_MODE, he_6ghz_power_mode))
- goto nla_put_failure;
-
- genlmsg_end(msg, hdr);
-
- genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
- NL80211_MCGRP_MLME, gfp);
- return;
-
-nla_put_failure:
- nlmsg_free(msg);
-}
-EXPORT_SYMBOL(cfg80211_6ghz_power_mode_notify);
-
void cfg80211_bss_color_notify(struct net_device *dev,
gfp_t gfp, enum nl80211_commands cmd,
u8 count, u64 color_bitmap)
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index efc83d4..5f5b9c3 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -573,12 +573,12 @@ static inline int rdev_set_tx_power(struct cfg80211_registered_device *rdev,
}
static inline int rdev_get_tx_power(struct cfg80211_registered_device *rdev,
- struct wireless_dev *wdev, int *mbm)
+ struct wireless_dev *wdev, int *dbm)
{
int ret;
trace_rdev_get_tx_power(&rdev->wiphy, wdev);
- ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, mbm);
- trace_rdev_return_int_int(&rdev->wiphy, ret, MBM_TO_DBM(*mbm));
+ ret = rdev->ops->get_tx_power(&rdev->wiphy, wdev, dbm);
+ trace_rdev_return_int_int(&rdev->wiphy, ret, *dbm);
return ret;
}
@@ -1382,19 +1382,6 @@ static inline int rdev_set_unsol_bcast_probe_resp(struct cfg80211_registered_dev
return ret;
}
-static inline int rdev_6g_power_mode_change(struct cfg80211_registered_device *rdev,
- struct net_device *dev,
- struct cfg80211_6ghz_power_mode_settings *params)
-{
- int ret;
-
- trace_rdev_power_mode_change(&rdev->wiphy, dev, params);
- ret = rdev->ops->power_mode_change_6ghz(&rdev->wiphy, dev, params);
- trace_rdev_return_int(&rdev->wiphy, ret);
-
- return ret;
-}
-
static inline int rdev_color_change(struct cfg80211_registered_device *rdev,
struct net_device *dev,
struct cfg80211_color_change_settings *params)
diff --git a/net/wireless/reg.c b/net/wireless/reg.c
index 9b4763f..6d70f11 100644
--- a/net/wireless/reg.c
+++ b/net/wireless/reg.c
@@ -3159,10 +3159,7 @@ static void reg_process_self_managed_hint(struct wiphy *wiphy)
request.wiphy_idx = get_wiphy_idx(wiphy);
request.alpha2[0] = regd->alpha2[0];
request.alpha2[1] = regd->alpha2[1];
- if (wiphy->regulatory_flags & REGULATORY_SET_BY_6GHZ_AFC)
- request.initiator = NL80211_REGDOM_SET_BY_AFC;
- else
- request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
+ request.initiator = NL80211_REGDOM_SET_BY_DRIVER;
nl80211_send_wiphy_reg_change_event(&request);
}
diff --git a/net/wireless/trace.h b/net/wireless/trace.h
index 3a70072..9d34885 100644
--- a/net/wireless/trace.h
+++ b/net/wireless/trace.h
@@ -3612,26 +3612,6 @@ TRACE_EVENT(rdev_set_unsol_bcast_probe_resp,
__entry->interval, __entry->tmpl_len)
);
-TRACE_EVENT(rdev_power_mode_change,
- TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
- struct cfg80211_6ghz_power_mode_settings *params),
- TP_ARGS(wiphy, netdev, params),
- TP_STRUCT__entry(
- WIPHY_ENTRY
- NETDEV_ENTRY
- __field(u8, pwr_mode)
- ),
- TP_fast_assign(
- WIPHY_ASSIGN;
- NETDEV_ASSIGN;
- __entry->pwr_mode = params->he_6ghz_pwr_mode;
- ),
- TP_printk(WIPHY_PR_FMT ", " NETDEV_PR_FMT
- ", pwr_mode: %u",
- WIPHY_PR_ARG, NETDEV_PR_ARG,
- __entry->pwr_mode)
-);
-
TRACE_EVENT(rdev_color_change,
TP_PROTO(struct wiphy *wiphy, struct net_device *netdev,
struct cfg80211_color_change_settings *params),
@@ -3656,25 +3636,6 @@ TRACE_EVENT(rdev_color_change,
__entry->count)
);
-TRACE_EVENT(cfg80211_6ghz_power_mode_notify,
- TP_PROTO(struct net_device *netdev,
- enum nl80211_commands cmd,
- u8 he_6ghz_power_mode),
- TP_ARGS(netdev, cmd,he_6ghz_power_mode),
- TP_STRUCT__entry(
- NETDEV_ENTRY
- __field(enum nl80211_commands,cmd)
- __field(u8,he_6ghz_power_mode)
- ),
- TP_fast_assign(
- NETDEV_ASSIGN;
- __entry->cmd = cmd;
- __entry->he_6ghz_power_mode = he_6ghz_power_mode;
- ),
- TP_printk(NETDEV_PR_FMT ", cmd: %x, he_6ghz_power_mode: %u",
- NETDEV_PR_ARG, __entry->cmd, __entry->he_6ghz_power_mode)
-);
-
TRACE_EVENT(cfg80211_bss_color_notify,
TP_PROTO(struct net_device *netdev,
enum nl80211_commands cmd,
diff --git a/net/wireless/wext-compat.c b/net/wireless/wext-compat.c
index baa7511..a8320dc 100644
--- a/net/wireless/wext-compat.c
+++ b/net/wireless/wext-compat.c
@@ -964,7 +964,7 @@ static int cfg80211_wext_giwtxpower(struct net_device *dev,
/* well... oh well */
data->txpower.fixed = 1;
data->txpower.disabled = rfkill_blocked(rdev->rfkill);
- data->txpower.value = MBM_TO_DBM(val);
+ data->txpower.value = val;
data->txpower.flags = IW_TXPOW_DBM;
return 0;