forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 127
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
iwinfo: recognize IPQ8074 and QCN9074
Signed-off-by: Robert Marko <[email protected]>
- Loading branch information
Showing
2 changed files
with
225 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -11,9 +11,9 @@ PKG_RELEASE:=1 | |
|
||
PKG_SOURCE_PROTO:=git | ||
PKG_SOURCE_URL=$(PROJECT_GIT)/project/iwinfo.git | ||
PKG_SOURCE_DATE:=2022-12-15 | ||
PKG_SOURCE_VERSION:=8d158096a9882d3090c7e180a296ca7b035b4865 | ||
PKG_MIRROR_HASH:=c376d3f2794fcef2956c038a16b4a1a4d30082ca4f2d2b955bd191d06e78f6ec | ||
PKG_SOURCE_DATE:=2023-01-06 | ||
PKG_SOURCE_VERSION:=c7b420a2f33c6f1034c3e2191eba0cb0374af7b6 | ||
PKG_MIRROR_HASH:=c5d188b2c7aa0fe987ffba8330c956670047ebf5be9a217ef647549c65002cd6 | ||
PKG_MAINTAINER:=Jo-Philipp Wich <[email protected]> | ||
PKG_LICENSE:=GPL-2.0 | ||
|
||
|
222 changes: 222 additions & 0 deletions
222
...work/utils/iwinfo/patches/0001-devices-add-support-for-declaring-compatible-matched.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,222 @@ | ||
From d818f80f3ced5cba7612c987e8443d54ada9c74d Mon Sep 17 00:00:00 2001 | ||
From: Jo-Philipp Wich <[email protected]> | ||
Date: Mon, 9 Jan 2023 18:00:34 +0100 | ||
Subject: [iwinfo PATCH] devices: add support for declaring compatible matched | ||
devices | ||
|
||
Some device have embedded wifi card that are not connected with usb or | ||
internall with pci. Such device have fake device_id and only the | ||
vendor_id actually reflect something real but internally they don't have | ||
any id and are just matched by the node compatible binding in DT. | ||
|
||
We currently match this with a big if-else to match the single devices | ||
but this can be improved and be matched directly in devices.txt | ||
|
||
Rework this so that we can drop the big if-else and move the matching | ||
from devices.txt | ||
|
||
When a device is matched using compatible in iwinfo the hardware will be | ||
flagged as embedded and won't print empty ids. | ||
|
||
Tested-by: Christian Marangi <[email protected]> | ||
Co-developed-by: Christian Marangi <[email protected]> | ||
Signed-off-by: Jo-Philipp Wich <[email protected]> | ||
Signed-off-by: Christian Marangi <[email protected]> | ||
--- | ||
devices.txt | 13 +++++++++ | ||
include/iwinfo.h | 2 ++ | ||
iwinfo_cli.c | 9 ++++-- | ||
iwinfo_nl80211.c | 71 ++++++------------------------------------------ | ||
iwinfo_utils.c | 8 +++++- | ||
5 files changed, 36 insertions(+), 67 deletions(-) | ||
|
||
diff --git a/devices.txt b/devices.txt | ||
index d76bbca..93938b5 100644 | ||
--- a/devices.txt | ||
+++ b/devices.txt | ||
@@ -206,3 +206,16 @@ | ||
# USB devices | ||
# 0x0000 | 0x0000 | vendor id | product id | ... | ||
0x0000 0x0000 0x0e8d 0x7961 0 0 "MediaTek" "MT7921AU" | ||
+ | ||
+# FDT compatible strings | ||
+# "compatible" | txpower offset | frequency offset | ... | ||
+"qca,ar9130-wmac" 0 0 "Atheros" "AR9130" | ||
+"qca,ar9330-wmac" 0 0 "Atheros" "AR9330" | ||
+"qca,ar9340-wmac" 0 0 "Atheros" "AR9340" | ||
+"qca,qca9530-wmac" 0 0 "Qualcomm Atheros" "QCA9530" | ||
+"qca,qca9550-wmac" 0 0 "Qualcomm Atheros" "QCA9550" | ||
+"qca,qca9560-wmac" 0 0 "Qualcomm Atheros" "QCA9560" | ||
+"qcom,ipq4019-wifi" 0 0 "Qualcomm Atheros" "IPQ4019" | ||
+"qcom,ipq8074-wifi" 0 0 "Qualcomm Atheros" "IPQ8074" | ||
+"mediatek,mt7622-wmac" 0 0 "MediaTek" "MT7622" | ||
+"mediatek,mt7986-wmac" 0 0 "MediaTek" "MT7986" | ||
diff --git a/include/iwinfo.h b/include/iwinfo.h | ||
index e87ad18..4b63f1e 100644 | ||
--- a/include/iwinfo.h | ||
+++ b/include/iwinfo.h | ||
@@ -243,6 +243,7 @@ struct iwinfo_hardware_id { | ||
uint16_t device_id; | ||
uint16_t subsystem_vendor_id; | ||
uint16_t subsystem_device_id; | ||
+ char compatible[128]; | ||
}; | ||
|
||
struct iwinfo_hardware_entry { | ||
@@ -254,6 +255,7 @@ struct iwinfo_hardware_entry { | ||
uint16_t subsystem_device_id; | ||
int16_t txpower_offset; | ||
int16_t frequency_offset; | ||
+ char compatible[128]; | ||
}; | ||
|
||
extern const struct iwinfo_iso3166_label IWINFO_ISO3166_NAMES[]; | ||
diff --git a/iwinfo_cli.c b/iwinfo_cli.c | ||
index d70f7fb..9b3e8e3 100644 | ||
--- a/iwinfo_cli.c | ||
+++ b/iwinfo_cli.c | ||
@@ -335,9 +335,12 @@ static char * print_hardware_id(const struct iwinfo_ops *iw, const char *ifname) | ||
|
||
if (!iw->hardware_id(ifname, (char *)&ids)) | ||
{ | ||
- snprintf(buf, sizeof(buf), "%04X:%04X %04X:%04X", | ||
- ids.vendor_id, ids.device_id, | ||
- ids.subsystem_vendor_id, ids.subsystem_device_id); | ||
+ if (strlen(ids.compatible) > 0) | ||
+ snprintf(buf, sizeof(buf), "embedded"); | ||
+ else | ||
+ snprintf(buf, sizeof(buf), "%04X:%04X %04X:%04X", | ||
+ ids.vendor_id, ids.device_id, | ||
+ ids.subsystem_vendor_id, ids.subsystem_device_id); | ||
} | ||
else | ||
{ | ||
diff --git a/iwinfo_nl80211.c b/iwinfo_nl80211.c | ||
index 916192f..a9e2adf 100644 | ||
--- a/iwinfo_nl80211.c | ||
+++ b/iwinfo_nl80211.c | ||
@@ -3445,7 +3445,7 @@ static int nl80211_get_mbssid_support(const char *ifname, int *buf) | ||
|
||
static int nl80211_hardware_id_from_fdt(struct iwinfo_hardware_id *id, const char *ifname) | ||
{ | ||
- char *phy, compat[64], path[PATH_MAX]; | ||
+ char *phy, path[PATH_MAX]; | ||
|
||
/* Try to determine the phy name from the given interface */ | ||
phy = nl80211_ifname2phy(ifname); | ||
@@ -3453,62 +3453,10 @@ static int nl80211_hardware_id_from_fdt(struct iwinfo_hardware_id *id, const cha | ||
snprintf(path, sizeof(path), "/sys/class/%s/%s/device/of_node/compatible", | ||
phy ? "ieee80211" : "net", phy ? phy : ifname); | ||
|
||
- if (nl80211_readstr(path, compat, sizeof(compat)) <= 0) | ||
+ if (nl80211_readstr(path, id->compatible, sizeof(id->compatible)) <= 0) | ||
return -1; | ||
|
||
- if (!strcmp(compat, "qca,ar9130-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0029; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9130; | ||
- } else if (!strcmp(compat, "qca,ar9330-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0030; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9330; | ||
- } else if (!strcmp(compat, "qca,ar9340-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0030; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9340; | ||
- } else if (!strcmp(compat, "qca,qca9530-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0033; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9530; | ||
- } else if (!strcmp(compat, "qca,qca9550-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0033; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9550; | ||
- } else if (!strcmp(compat, "qca,qca9560-wmac")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x0033; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x9560; | ||
- } else if (!strcmp(compat, "qcom,ipq4019-wifi")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x003c; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x4019; | ||
- } else if (!strcmp(compat, "qcom,ipq8074-wifi")) { | ||
- id->vendor_id = 0x168c; | ||
- id->device_id = 0x8074; | ||
- id->subsystem_vendor_id = 0x168c; | ||
- id->subsystem_device_id = 0x8074; | ||
- } else if (!strcmp(compat, "mediatek,mt7622-wmac")) { | ||
- id->vendor_id = 0x14c3; | ||
- id->device_id = 0x7622; | ||
- id->subsystem_vendor_id = 0x14c3; | ||
- id->subsystem_device_id = 0x7622; | ||
- } else if (!strcmp(compat, "mediatek,mt7986-wmac")) { | ||
- id->vendor_id = 0x14c3; | ||
- id->device_id = 0x7986; | ||
- id->subsystem_vendor_id = 0x14c3; | ||
- id->subsystem_device_id = 0x7986; | ||
- } | ||
- | ||
- return (id->vendor_id && id->device_id) ? 0 : -1; | ||
+ return 0; | ||
} | ||
|
||
|
||
@@ -3542,16 +3490,13 @@ static int nl80211_get_hardware_id(const char *ifname, char *buf) | ||
*lookup[i].dest = strtoul(num, NULL, 16); | ||
} | ||
|
||
- /* Failed to obtain hardware IDs, try FDT */ | ||
- if (id->vendor_id == 0 && id->device_id == 0 && | ||
- id->subsystem_vendor_id == 0 && id->subsystem_device_id == 0) | ||
- if (!nl80211_hardware_id_from_fdt(id, ifname)) | ||
- return 0; | ||
- | ||
- /* Failed to obtain hardware IDs, search board config */ | ||
+ /* Failed to obtain hardware PCI/USB IDs... */ | ||
if (id->vendor_id == 0 && id->device_id == 0 && | ||
id->subsystem_vendor_id == 0 && id->subsystem_device_id == 0) | ||
- return iwinfo_hardware_id_from_mtd(id); | ||
+ /* ... first fallback to FDT ... */ | ||
+ if (nl80211_hardware_id_from_fdt(id, ifname) == -1) | ||
+ /* ... then board config */ | ||
+ return iwinfo_hardware_id_from_mtd(id); | ||
|
||
return 0; | ||
} | ||
diff --git a/iwinfo_utils.c b/iwinfo_utils.c | ||
index a342b6a..ecd1dff 100644 | ||
--- a/iwinfo_utils.c | ||
+++ b/iwinfo_utils.c | ||
@@ -286,7 +286,10 @@ struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) | ||
&e.vendor_id, &e.device_id, | ||
&e.subsystem_vendor_id, &e.subsystem_device_id, | ||
&e.txpower_offset, &e.frequency_offset, | ||
- e.vendor_name, e.device_name) < 8) | ||
+ e.vendor_name, e.device_name) != 8 && | ||
+ sscanf(buf, "\"%127[^\"]\" %hd %hd \"%63[^\"]\" \"%63[^\"]\"", | ||
+ e.compatible, &e.txpower_offset, &e.frequency_offset, | ||
+ e.vendor_name, e.device_name) != 5) | ||
continue; | ||
|
||
if ((e.vendor_id != 0xffff) && (e.vendor_id != id->vendor_id)) | ||
@@ -303,6 +306,9 @@ struct iwinfo_hardware_entry * iwinfo_hardware(struct iwinfo_hardware_id *id) | ||
(e.subsystem_device_id != id->subsystem_device_id)) | ||
continue; | ||
|
||
+ if (strcmp(e.compatible, id->compatible)) | ||
+ continue; | ||
+ | ||
rv = &e; | ||
break; | ||
} | ||
-- | ||
2.37.2 | ||
|