iwlwifi: MSI support
PATCH 1/1 iwlwifi: MSI support
Add Message Signal Interrupt support to iwlwifi. Tested on 3945. Enable by default, but have parameter to disable for buggy platforms.
drivers/net/wireless/mac80211/iwlwifi/base.c +12 -0
@@ -80,6 +80,8 @@ int param_antenna = 0; /* def: 0 =int param_hwcrypto =0 ;/* def: using software encryption */ int param_qos_enable =0 ; +static int disable_msi; +/* * module name, copyright, version, etc. * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk
@@ -8117,6 +8119,10 @@ static int iwl_pci_probe(struct pci_dev/* If power management is turned on, default to AC mode */ priv->power_mode =IWL_POWER_AC ; priv->user_txpower_limit =IWL_DEFAULT_TX_POWER ; + +if (!disable_msi) +pci_enable_msi (pdev); + err =request_irq (pdev->irq, iwl_isr,IRQF_SHARED ,DRV_NAME , priv);if (err) {IWL_ERROR ("Error allocating IRQ %d\n" , pdev->irq);
@@ -8155,6 +8161,7 @@ static int iwl_pci_probe(struct pci_devsysfs_remove_group (&pdev->dev.kobj, &iwl_attribute_group); out_release_irq: +pci_disable_msi (pdev);free_irq (pdev->irq, priv); out_destroy_workqueue:
@@ -8224,6 +8231,8 @@ static void iwl_pci_remove(struct pci_dedestroy_workqueue (priv->workqueue); priv->workqueue =NULL ; +pci_disable_msi (pdev); +free_irq (pdev->irq, priv);iounmap (priv->hw_base);pci_release_regions (pdev);
@@ -8352,6 +8361,9 @@ static void __exit iwl_exit(void)pci_unregister_driver (&iwl_driver); } +module_param (disable_msi, int,0 ); +MODULE_PARM_DESC (disable_msi,"Disable Message Signaled Interrupt (MSI)" ); +module_param_named (antenna, param_antenna, int,0444 );MODULE_PARM_DESC (antenna,"select antenna (1=Main, 2=Aux, default 0 [both])" );module_param_named (disable, param_disable, int,0444 );
Quoted 4 lines · Stephen Hemminger
Add Message Signal Interrupt support to iwlwifi. Tested on 3945. Enable by default, but have parameter to disable for buggy platforms.
Signed-off-by Stephen Hemminger <[email protected]>
These days we don't want to poop platform MSI disable knobs all over individual drivers...
Jeff
Add Message Signal Interrupt support to iwlwifi. Tested on 3945.
drivers/net/wireless/mac80211/iwlwifi/base.c +6 -0
@@ -8117,6 +8117,9 @@ static int iwl_pci_probe(struct pci_dev/* If power management is turned on, default to AC mode */ priv->power_mode =IWL_POWER_AC ; priv->user_txpower_limit =IWL_DEFAULT_TX_POWER ; + +pci_enable_msi (pdev); + err =request_irq (pdev->irq, iwl_isr,IRQF_SHARED ,DRV_NAME , priv);if (err) {IWL_ERROR ("Error allocating IRQ %d\n" , pdev->irq);
@@ -8155,6 +8158,7 @@ static int iwl_pci_probe(struct pci_devsysfs_remove_group (&pdev->dev.kobj, &iwl_attribute_group); out_release_irq: +pci_disable_msi (pdev);free_irq (pdev->irq, priv); out_destroy_workqueue:
@@ -8224,6 +8228,8 @@ static void iwl_pci_remove(struct pci_dedestroy_workqueue (priv->workqueue); priv->workqueue =NULL ; +pci_disable_msi (pdev); +free_irq (pdev->irq, priv);iounmap (priv->hw_base);pci_release_regions (pdev);
Quoted 3 lines · Stephen Hemminger
Add Message Signal Interrupt support to iwlwifi. Tested on 3945.
Signed-off-by Stephen Hemminger <[email protected]>
looks good to me, though I will let our illustrious wireless maintainer merge it and push it upstream :)
Quoted 2 lines · On Wed, 13 Jun 2007 11:29:39 -0700 Stephen Hemminger wrote:
Add Message Signal Interrupt support to iwlwifi. Tested on 3945. Enable by default, but have parameter to disable for buggy platforms.
We prefer to use the system-wide capability to disable/enable MSI interrupts when it is a platform problem vs. an individual device problem. I.e., in general individual drivers should not be adding such options.
Quoted 42 lines
Signed-off-by Stephen Hemminger <[email protected]>drivers/net/wireless/mac80211/iwlwifi/base.c +9
-0@@ -80,6 +80,8 @@ int param_antenna = 0; /* def: 0 =int param_hwcrypto =0 ;/* def: using software encryption */ int param_qos_enable =0 ; +static int disable_msi; +/* * module name, copyright, version, etc. * NOTE: DRV_NAME is defined in iwlwifi.h for use by iwl-debug.h and printk @@ -8117,6 +8119,10 @@ static int iwl_pci_probe(struct pci_dev/* If power management is turned on, default to AC mode */ priv->power_mode =IWL_POWER_AC ; priv->user_txpower_limit =IWL_DEFAULT_TX_POWER ; + +if (!disable_msi) +pci_enable_msi (pdev); + err =request_irq (pdev->irq, iwl_isr,IRQF_SHARED ,DRV_NAME , priv);if (err) {IWL_ERROR ("Error allocating IRQ %d\n" , pdev->irq);@@ -8155,6 +8161,7 @@ static int iwl_pci_probe(struct pci_devsysfs_remove_group (&pdev->dev.kobj, &iwl_attribute_group); out_release_irq: +pci_disable_msi (pdev);free_irq (pdev->irq, priv); out_destroy_workqueue:@@ -8224,6 +8231,8 @@ static void iwl_pci_remove(struct pci_dedestroy_workqueue (priv->workqueue); priv->workqueue =NULL ; +pci_disable_msi (pdev); +free_irq (pdev->irq, priv);iounmap (priv->hw_base);pci_release_regions (pdev);
drivers/net/wireless/mac80211/iwlwifi/base.c static void __exit iwl_exit(void) · line 8369
Quoted 9 lines
drivers/net/wireless/mac80211/iwlwifi/base.c +3
-0@@ -8352,6 +8361,9 @@ static void __exit iwl_exit(void)pci_unregister_driver (&iwl_driver); } +module_param (disable_msi, int,0 ); +MODULE_PARM_DESC (disable_msi,"Disable Message Signaled Interrupt (MSI)" ); +module_param_named (antenna, param_antenna, int,0444 );MODULE_PARM_DESC (antenna,"select antenna (1=Main, 2=Aux, default 0 [both])" );module_param_named (disable, param_disable, int,0444 );
---
~Randy
*** Remember to use Documentation/SubmitChecklist when testing your code ***