diff options
| author | John W. Linville <linville@tuxdriver.com> | 2010-07-29 16:14:13 -0400 |
|---|---|---|
| committer | John W. Linville <linville@tuxdriver.com> | 2010-08-16 14:39:46 -0400 |
| commit | 4e6cbfd09c66893e5134c9896e9af353c2322b66 (patch) | |
| tree | 274e8374c2b097058a5152da3bf6cf62d99dbad7 /include/net | |
| parent | 68e887ef21dfd9adcf896ef92a9676bf9036a0aa (diff) | |
mac80211: support use of NAPI for bottom-half processing
This patch implement basic infrastructure to support use of NAPI by
mac80211-based hardware drivers.
Because mac80211 devices can support multiple netdevs, a dummy netdev
is used for interfacing with the NAPI code in the core of the network
stack. That structure is hidden from the hardware drivers, but the
actual napi_struct is exposed in the ieee80211_hw structure so that the
poll routines in drivers can retrieve that structure. Hardware drivers
can also specify their own weight value for NAPI polling.
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/net')
| -rw-r--r-- | include/net/mac80211.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h index b0787a1dea90..3f1e03b521ec 100644 --- a/include/net/mac80211.h +++ b/include/net/mac80211.h | |||
| @@ -1102,6 +1102,10 @@ enum ieee80211_hw_flags { | |||
| 1102 | * | 1102 | * |
| 1103 | * @max_rates: maximum number of alternate rate retry stages | 1103 | * @max_rates: maximum number of alternate rate retry stages |
| 1104 | * @max_rate_tries: maximum number of tries for each stage | 1104 | * @max_rate_tries: maximum number of tries for each stage |
| 1105 | * | ||
| 1106 | * @napi_weight: weight used for NAPI polling. You must specify an | ||
| 1107 | * appropriate value here if a napi_poll operation is provided | ||
| 1108 | * by your driver. | ||
| 1105 | */ | 1109 | */ |
| 1106 | struct ieee80211_hw { | 1110 | struct ieee80211_hw { |
| 1107 | struct ieee80211_conf conf; | 1111 | struct ieee80211_conf conf; |
| @@ -1113,6 +1117,7 @@ struct ieee80211_hw { | |||
| 1113 | int channel_change_time; | 1117 | int channel_change_time; |
| 1114 | int vif_data_size; | 1118 | int vif_data_size; |
| 1115 | int sta_data_size; | 1119 | int sta_data_size; |
| 1120 | int napi_weight; | ||
| 1116 | u16 queues; | 1121 | u16 queues; |
| 1117 | u16 max_listen_interval; | 1122 | u16 max_listen_interval; |
| 1118 | s8 max_signal; | 1123 | s8 max_signal; |
| @@ -1687,6 +1692,8 @@ enum ieee80211_ampdu_mlme_action { | |||
| 1687 | * switch operation for CSAs received from the AP may implement this | 1692 | * switch operation for CSAs received from the AP may implement this |
| 1688 | * callback. They must then call ieee80211_chswitch_done() to indicate | 1693 | * callback. They must then call ieee80211_chswitch_done() to indicate |
| 1689 | * completion of the channel switch. | 1694 | * completion of the channel switch. |
| 1695 | * | ||
| 1696 | * @napi_poll: Poll Rx queue for incoming data frames. | ||
| 1690 | */ | 1697 | */ |
| 1691 | struct ieee80211_ops { | 1698 | struct ieee80211_ops { |
| 1692 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); | 1699 | int (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb); |
| @@ -1752,6 +1759,7 @@ struct ieee80211_ops { | |||
| 1752 | void (*flush)(struct ieee80211_hw *hw, bool drop); | 1759 | void (*flush)(struct ieee80211_hw *hw, bool drop); |
| 1753 | void (*channel_switch)(struct ieee80211_hw *hw, | 1760 | void (*channel_switch)(struct ieee80211_hw *hw, |
| 1754 | struct ieee80211_channel_switch *ch_switch); | 1761 | struct ieee80211_channel_switch *ch_switch); |
| 1762 | int (*napi_poll)(struct ieee80211_hw *hw, int budget); | ||
| 1755 | }; | 1763 | }; |
| 1756 | 1764 | ||
| 1757 | /** | 1765 | /** |
| @@ -1897,6 +1905,22 @@ void ieee80211_free_hw(struct ieee80211_hw *hw); | |||
| 1897 | */ | 1905 | */ |
| 1898 | void ieee80211_restart_hw(struct ieee80211_hw *hw); | 1906 | void ieee80211_restart_hw(struct ieee80211_hw *hw); |
| 1899 | 1907 | ||
| 1908 | /** ieee80211_napi_schedule - schedule NAPI poll | ||
| 1909 | * | ||
| 1910 | * Use this function to schedule NAPI polling on a device. | ||
| 1911 | * | ||
| 1912 | * @hw: the hardware to start polling | ||
| 1913 | */ | ||
| 1914 | void ieee80211_napi_schedule(struct ieee80211_hw *hw); | ||
| 1915 | |||
| 1916 | /** ieee80211_napi_complete - complete NAPI polling | ||
| 1917 | * | ||
| 1918 | * Use this function to finish NAPI polling on a device. | ||
| 1919 | * | ||
| 1920 | * @hw: the hardware to stop polling | ||
| 1921 | */ | ||
| 1922 | void ieee80211_napi_complete(struct ieee80211_hw *hw); | ||
| 1923 | |||
| 1900 | /** | 1924 | /** |
| 1901 | * ieee80211_rx - receive frame | 1925 | * ieee80211_rx - receive frame |
| 1902 | * | 1926 | * |
