Message ID | 19871.62035.829719.402615@gargle.gargle.HOWL (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On 04/09/11 01:44, Sujith wrote: > Richard Farina wrote: >> I've been using the ethool -i output a lot recently and have been very >> much enjoying it, however I've noticed some oddity. My ath9k_htc card, >> Ubiquiti Wifistation-EXT, doesn't have good output while using >> compat-wireless stable 2.6.39-rc1. >> >> flea scripts # ethtool -i wlan15 >> driver: usb >> version: 2.6.37-pentoo-r6-grsec >> firmware-version: N/A >> bus-info: 2-5 >> >> >> Not only is the driver listed incorrectly, but the firmware-version is >> not listed at all. Is it just me? > The driver name/bus-info is wrong because the wrong device pointer is used > when registering the wireless device. > > The firmware version is N/A because, well, the FW has no version. :) > > I have a patch queued up and ethtool show this now: > (This requires a FW update ...) > > sujith@atheros-dev ~ $ ethtool -i wlan0 > driver: ath9k_htc > version: 2.6.39-rc2-wl > firmware-version: 1.0 > bus-info: 1-3:1.0 The following commit causes extreme sadness: [ 4094.241243] usb 2-5: new high speed USB device using ehci_hcd and address 3 [ 4095.550452] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 [ 4095.816072] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits [ 4159.812888] usb 2-5: USB disconnect, address 3 [ 4159.929317] ath: Couldn't reset chip [ 4159.929321] ath: Unable to initialize hardware; initialization status: -5 [ 4159.929323] ath: Unable to initialize hardware; initialization status: -5 [ 4159.929340] Failed to initialize the device [ 4160.012603] ath9k_htc: probe of 2-5:1.0 failed with error -22 [ 4160.012771] usbcore: registered new interface driver ath9k_htc [ 4163.595059] usb 2-5: new high speed USB device using ehci_hcd and address 4 [ 4164.018920] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 [ 4164.284420] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits I'm guessing because I need the mentioned firmware update? Where can I get it? Or better yet can you (this is almost laughable considering the ralink thread right now) get it into linux-firmware? Or is the needed firmware update an unstable thing? Either way I can wait on the firmware-version fix but where can I find the patch that shows fixes the "driver: usb" issue? Your obviously shows properly :-) Thanks, Rick Farina > commit d3ce084bd9ce550d80fc0e92dd91393ca02d3429 > Author: Sujith Manoharan<Sujith.Manoharan@atheros.com> > Date: Wed Apr 6 09:23:50 2011 +0530 > > ath9k_htc: Add a WMI command to get the firmware version > > Also, update the wiphy information and use the correct > device pointer when registering. This would fix ethtool. > > Signed-off-by: Sujith Manoharan<Sujith.Manoharan@atheros.com> > > diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c > index 23094b7..c81b2da 100644 > --- a/drivers/net/wireless/ath/ath9k/hif_usb.c > +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c > @@ -1035,7 +1035,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, > } > > ret = ath9k_htc_hw_init(hif_dev->htc_handle, > - &hif_dev->udev->dev, hif_dev->device_id, > + &interface->dev, hif_dev->device_id, > hif_dev->udev->product, id->driver_info); > if (ret) { > ret = -EINVAL; > @@ -1153,7 +1153,7 @@ fail_resume: > #endif > > static struct usb_driver ath9k_hif_usb_driver = { > - .name = "ath9k_hif_usb", > + .name = KBUILD_MODNAME, > .probe = ath9k_hif_usb_probe, > .disconnect = ath9k_hif_usb_disconnect, > #ifdef CONFIG_PM > diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h > index ec47be9..9544cd7 100644 > --- a/drivers/net/wireless/ath/ath9k/htc.h > +++ b/drivers/net/wireless/ath/ath9k/htc.h > @@ -388,6 +388,9 @@ struct ath9k_htc_priv { > struct htc_target *htc; > struct wmi *wmi; > > + u16 fw_version_major; > + u16 fw_version_minor; > + > enum htc_endpoint_id wmi_cmd_ep; > enum htc_endpoint_id beacon_ep; > enum htc_endpoint_id cab_ep; > diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c > index 8303b34..6bbfca5 100644 > --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c > +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c > @@ -782,6 +782,32 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, > SET_IEEE80211_PERM_ADDR(hw, common->macaddr); > } > > +static int ath9k_init_firmware_version(struct ath9k_htc_priv *priv) > +{ > + struct ieee80211_hw *hw = priv->hw; > + struct wmi_fw_version cmd_rsp; > + int ret; > + > + memset(&cmd_rsp, 0, sizeof(cmd_rsp)); > + > + WMI_CMD(WMI_GET_FW_VERSION); > + if (ret) > + return -EINVAL; > + > + priv->fw_version_major = be16_to_cpu(cmd_rsp.major); > + priv->fw_version_minor = be16_to_cpu(cmd_rsp.minor); > + > + snprintf(hw->wiphy->fw_version, ETHTOOL_BUSINFO_LEN, "%d.%d", > + priv->fw_version_major, > + priv->fw_version_minor); > + > + dev_info(priv->dev, "ath9k_htc: FW Version: %d.%d\n", > + priv->fw_version_major, > + priv->fw_version_minor); > + > + return 0; > +} > + > static int ath9k_init_device(struct ath9k_htc_priv *priv, > u16 devid, char *product, u32 drv_info) > { > @@ -801,6 +827,10 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv, > common = ath9k_hw_common(ah); > ath9k_set_hw_capab(priv, hw); > > + error = ath9k_init_firmware_version(priv); > + if (error != 0) > + goto err_fw; > + > /* Initialize regulatory */ > error = ath_regd_init(&common->regulatory, priv->hw->wiphy, > ath9k_reg_notifier); > @@ -861,6 +891,8 @@ err_rx: > err_tx: > /* Nothing */ > err_regd: > + /* Nothing */ > +err_fw: > ath9k_deinit_priv(priv); > err_init: > return error; > diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c > index d3d2490..267a98f 100644 > --- a/drivers/net/wireless/ath/ath9k/wmi.c > +++ b/drivers/net/wireless/ath/ath9k/wmi.c > @@ -23,6 +23,8 @@ static const char *wmi_cmd_to_name(enum wmi_cmd_id wmi_cmd) > return "WMI_ECHO_CMDID"; > case WMI_ACCESS_MEMORY_CMDID: > return "WMI_ACCESS_MEMORY_CMDID"; > + case WMI_GET_FW_VERSION: > + return "WMI_GET_FW_VERSION"; > case WMI_DISABLE_INTR_CMDID: > return "WMI_DISABLE_INTR_CMDID"; > case WMI_ENABLE_INTR_CMDID: > diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h > index 4208427..6a36572 100644 > --- a/drivers/net/wireless/ath/ath9k/wmi.h > +++ b/drivers/net/wireless/ath/ath9k/wmi.h > @@ -31,11 +31,17 @@ struct wmi_cmd_hdr { > __be16 seq_no; > } __packed; > > +struct wmi_fw_version { > + __be16 major; > + __be16 minor; > + > +} __packed; > enum wmi_cmd_id { > WMI_ECHO_CMDID = 0x0001, > WMI_ACCESS_MEMORY_CMDID, > > /* Commands to Target */ > + WMI_GET_FW_VERSION, > WMI_DISABLE_INTR_CMDID, > WMI_ENABLE_INTR_CMDID, > WMI_RX_LINK_CMDID, > > > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Richard Farina wrote: > The following commit causes extreme sadness: > [ 4094.241243] usb 2-5: new high speed USB device using ehci_hcd and > address 3 > [ 4095.550452] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 > [ 4095.816072] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits > [ 4159.812888] usb 2-5: USB disconnect, address 3 > [ 4159.929317] ath: Couldn't reset chip > [ 4159.929321] ath: Unable to initialize hardware; initialization status: -5 > [ 4159.929323] ath: Unable to initialize hardware; initialization status: -5 > [ 4159.929340] Failed to initialize the device > [ 4160.012603] ath9k_htc: probe of 2-5:1.0 failed with error -22 > [ 4160.012771] usbcore: registered new interface driver ath9k_htc > [ 4163.595059] usb 2-5: new high speed USB device using ehci_hcd and > address 4 > [ 4164.018920] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 > [ 4164.284420] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits > > I'm guessing because I need the mentioned firmware update? Where can I > get it? Or better yet can you (this is almost laughable considering the > ralink thread right now) get it into linux-firmware? Or is the needed > firmware update an unstable thing? The new FW has to be formally/officially tested before it is merged into linux-firmware. > Either way I can wait on the firmware-version fix but where can I find > the patch that shows fixes the "driver: usb" issue? Your obviously shows > properly :-) http://linuxwireless.org/en/users/Drivers/ath9k_htc Sujith -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Sujith wrote: > > Either way I can wait on the firmware-version fix but where can I find > > the patch that shows fixes the "driver: usb" issue? Your obviously shows > > properly :-) > > http://linuxwireless.org/en/users/Drivers/ath9k_htc In the AP/P2P section. Sujith -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 04/11/11 11:28, Sujith wrote: > Richard Farina wrote: >> The following commit causes extreme sadness: >> [ 4094.241243] usb 2-5: new high speed USB device using ehci_hcd and >> address 3 >> [ 4095.550452] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 >> [ 4095.816072] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits >> [ 4159.812888] usb 2-5: USB disconnect, address 3 >> [ 4159.929317] ath: Couldn't reset chip >> [ 4159.929321] ath: Unable to initialize hardware; initialization status: -5 >> [ 4159.929323] ath: Unable to initialize hardware; initialization status: -5 >> [ 4159.929340] Failed to initialize the device >> [ 4160.012603] ath9k_htc: probe of 2-5:1.0 failed with error -22 >> [ 4160.012771] usbcore: registered new interface driver ath9k_htc >> [ 4163.595059] usb 2-5: new high speed USB device using ehci_hcd and >> address 4 >> [ 4164.018920] usb 2-5: ath9k_htc: Transferred FW: ar9271.fw, size: 51312 >> [ 4164.284420] ath9k_htc 2-5:1.0: ath9k_htc: HTC initialized with 33 credits >> >> I'm guessing because I need the mentioned firmware update? Where can I >> get it? Or better yet can you (this is almost laughable considering the >> ralink thread right now) get it into linux-firmware? Or is the needed >> firmware update an unstable thing? > The new FW has to be formally/officially tested before it is merged into > linux-firmware. > >> Either way I can wait on the firmware-version fix but where can I find >> the patch that shows fixes the "driver: usb" issue? Your obviously shows >> properly :-) > http://linuxwireless.org/en/users/Drivers/ath9k_htc Sorry for being a bit dim on this but which part of this exactly fixes the ethtool driver function? I'm guessing it is in the patchset and the firmware is only required if I want to detect the firmware version? Or do I really need experimental firmware to make it detect the driver properly? Also, when you say experimental do you mean it's all pretty experimental or just the AP stuff is? I'm guessing the firmware is based on the current firmware so the station mode et al should be (approximately) as stable at the released firmware and only the AP parts are experimental. Thanks, Rick Farina > Sujith > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Richard Farina wrote: > Sorry for being a bit dim on this but which part of this exactly fixes > the ethtool driver function? I'm guessing it is in the patchset and the > firmware is only required if I want to detect the firmware version? Or > do I really need experimental firmware to make it detect the driver > properly? The ethtool fix is part of the patchset (specifically patch no. 3), and the new FW is required if the patchset is used. > Also, when you say experimental do you mean it's all pretty experimental > or just the AP stuff is? I'm guessing the firmware is based on the > current firmware so the station mode et al should be (approximately) as > stable at the released firmware and only the AP parts are experimental. Yes, the new version is based on the current FW and the AP stuff is experimental. Station mode should ideally not have any problems, but since the firmware has had a fairly invasive cleanup, one can never know. :) Sujith -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 04/11/11 12:14, Sujith wrote: > Richard Farina wrote: >> Sorry for being a bit dim on this but which part of this exactly fixes >> the ethtool driver function? I'm guessing it is in the patchset and the >> firmware is only required if I want to detect the firmware version? Or >> do I really need experimental firmware to make it detect the driver >> properly? > The ethtool fix is part of the patchset (specifically patch no. 3), > and the new FW is required if the patchset is used. Patch number 3 seems to fix only the firmware version grabbing. Am I misunderstanding the part or is the driver name grabbing fixed somewhere else in a different place? In linus tree driver shows as "usb", Your ethtool output showed driver properly as "ath9k_htc". -Rick >> Also, when you say experimental do you mean it's all pretty experimental >> or just the AP stuff is? I'm guessing the firmware is based on the >> current firmware so the station mode et al should be (approximately) as >> stable at the released firmware and only the AP parts are experimental. > Yes, the new version is based on the current FW and the AP stuff is experimental. > Station mode should ideally not have any problems, but since the firmware > has had a fairly invasive cleanup, one can never know. :) > > Sujith > -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index 23094b7..c81b2da 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c @@ -1035,7 +1035,7 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, } ret = ath9k_htc_hw_init(hif_dev->htc_handle, - &hif_dev->udev->dev, hif_dev->device_id, + &interface->dev, hif_dev->device_id, hif_dev->udev->product, id->driver_info); if (ret) { ret = -EINVAL; @@ -1153,7 +1153,7 @@ fail_resume: #endif static struct usb_driver ath9k_hif_usb_driver = { - .name = "ath9k_hif_usb", + .name = KBUILD_MODNAME, .probe = ath9k_hif_usb_probe, .disconnect = ath9k_hif_usb_disconnect, #ifdef CONFIG_PM diff --git a/drivers/net/wireless/ath/ath9k/htc.h b/drivers/net/wireless/ath/ath9k/htc.h index ec47be9..9544cd7 100644 --- a/drivers/net/wireless/ath/ath9k/htc.h +++ b/drivers/net/wireless/ath/ath9k/htc.h @@ -388,6 +388,9 @@ struct ath9k_htc_priv { struct htc_target *htc; struct wmi *wmi; + u16 fw_version_major; + u16 fw_version_minor; + enum htc_endpoint_id wmi_cmd_ep; enum htc_endpoint_id beacon_ep; enum htc_endpoint_id cab_ep; diff --git a/drivers/net/wireless/ath/ath9k/htc_drv_init.c b/drivers/net/wireless/ath/ath9k/htc_drv_init.c index 8303b34..6bbfca5 100644 --- a/drivers/net/wireless/ath/ath9k/htc_drv_init.c +++ b/drivers/net/wireless/ath/ath9k/htc_drv_init.c @@ -782,6 +782,32 @@ static void ath9k_set_hw_capab(struct ath9k_htc_priv *priv, SET_IEEE80211_PERM_ADDR(hw, common->macaddr); } +static int ath9k_init_firmware_version(struct ath9k_htc_priv *priv) +{ + struct ieee80211_hw *hw = priv->hw; + struct wmi_fw_version cmd_rsp; + int ret; + + memset(&cmd_rsp, 0, sizeof(cmd_rsp)); + + WMI_CMD(WMI_GET_FW_VERSION); + if (ret) + return -EINVAL; + + priv->fw_version_major = be16_to_cpu(cmd_rsp.major); + priv->fw_version_minor = be16_to_cpu(cmd_rsp.minor); + + snprintf(hw->wiphy->fw_version, ETHTOOL_BUSINFO_LEN, "%d.%d", + priv->fw_version_major, + priv->fw_version_minor); + + dev_info(priv->dev, "ath9k_htc: FW Version: %d.%d\n", + priv->fw_version_major, + priv->fw_version_minor); + + return 0; +} + static int ath9k_init_device(struct ath9k_htc_priv *priv, u16 devid, char *product, u32 drv_info) { @@ -801,6 +827,10 @@ static int ath9k_init_device(struct ath9k_htc_priv *priv, common = ath9k_hw_common(ah); ath9k_set_hw_capab(priv, hw); + error = ath9k_init_firmware_version(priv); + if (error != 0) + goto err_fw; + /* Initialize regulatory */ error = ath_regd_init(&common->regulatory, priv->hw->wiphy, ath9k_reg_notifier); @@ -861,6 +891,8 @@ err_rx: err_tx: /* Nothing */ err_regd: + /* Nothing */ +err_fw: ath9k_deinit_priv(priv); err_init: return error; diff --git a/drivers/net/wireless/ath/ath9k/wmi.c b/drivers/net/wireless/ath/ath9k/wmi.c index d3d2490..267a98f 100644 --- a/drivers/net/wireless/ath/ath9k/wmi.c +++ b/drivers/net/wireless/ath/ath9k/wmi.c @@ -23,6 +23,8 @@ static const char *wmi_cmd_to_name(enum wmi_cmd_id wmi_cmd) return "WMI_ECHO_CMDID"; case WMI_ACCESS_MEMORY_CMDID: return "WMI_ACCESS_MEMORY_CMDID"; + case WMI_GET_FW_VERSION: + return "WMI_GET_FW_VERSION"; case WMI_DISABLE_INTR_CMDID: return "WMI_DISABLE_INTR_CMDID"; case WMI_ENABLE_INTR_CMDID: diff --git a/drivers/net/wireless/ath/ath9k/wmi.h b/drivers/net/wireless/ath/ath9k/wmi.h index 4208427..6a36572 100644 --- a/drivers/net/wireless/ath/ath9k/wmi.h +++ b/drivers/net/wireless/ath/ath9k/wmi.h @@ -31,11 +31,17 @@ struct wmi_cmd_hdr { __be16 seq_no; } __packed; +struct wmi_fw_version { + __be16 major; + __be16 minor; + +} __packed; enum wmi_cmd_id { WMI_ECHO_CMDID = 0x0001, WMI_ACCESS_MEMORY_CMDID, /* Commands to Target */ + WMI_GET_FW_VERSION, WMI_DISABLE_INTR_CMDID, WMI_ENABLE_INTR_CMDID, WMI_RX_LINK_CMDID,