+
+int madwifi_get_hardware_id(const char *ifname, char *buf)
+{
+ char vendor[64];
+ char device[64];
+ struct iwinfo_hardware_id *ids;
+ struct iwinfo_hardware_entry *e;
+
+ if (wext_get_hardware_id(ifname, buf))
+ return iwinfo_hardware_id_from_mtd((struct iwinfo_hardware_id *)buf);
+
+ return 0;
+}
+
+static const struct iwinfo_hardware_entry *
+madwifi_get_hardware_entry(const char *ifname)
+{
+ struct iwinfo_hardware_id id;
+
+ if (madwifi_get_hardware_id(ifname, (char *)&id))
+ return NULL;
+
+ return iwinfo_hardware(&id);
+}
+
+int madwifi_get_hardware_name(const char *ifname, char *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ sprintf(buf, "Generic Atheros");
+ else
+ sprintf(buf, "%s %s", hw->vendor_name, hw->device_name);
+
+ return 0;
+}
+
+int madwifi_get_txpower_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ return -1;
+
+ *buf = hw->txpower_offset;
+ return 0;
+}
+
+int madwifi_get_frequency_offset(const char *ifname, int *buf)
+{
+ const struct iwinfo_hardware_entry *hw;
+
+ if (!(hw = madwifi_get_hardware_entry(ifname)))
+ return -1;
+
+ *buf = hw->frequency_offset;
+ return 0;
+}