mirror of https://gitee.com/openkylin/linux.git
mac80211: implement support for cfg80211_ops->{get,set}_ringparam
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
3677713b79
commit
38c091590f
|
@ -1804,6 +1804,10 @@ enum ieee80211_ampdu_mlme_action {
|
|||
* return value is 1, then the @remain_on_channel will be used with a
|
||||
* regular transmission (if supported.)
|
||||
* @offchannel_tx_cancel_wait: cancel wait associated with offchannel TX
|
||||
*
|
||||
* @set_ringparam: Set tx and rx ring sizes.
|
||||
*
|
||||
* @get_ringparam: Get tx and rx ring current and maximum sizes.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw, struct sk_buff *skb);
|
||||
|
@ -1888,6 +1892,9 @@ struct ieee80211_ops {
|
|||
enum nl80211_channel_type channel_type,
|
||||
unsigned int wait);
|
||||
int (*offchannel_tx_cancel_wait)(struct ieee80211_hw *hw);
|
||||
int (*set_ringparam)(struct ieee80211_hw *hw, u32 tx, u32 rx);
|
||||
void (*get_ringparam)(struct ieee80211_hw *hw,
|
||||
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -2012,6 +2012,21 @@ static int ieee80211_get_antenna(struct wiphy *wiphy, u32 *tx_ant, u32 *rx_ant)
|
|||
return drv_get_antenna(local, tx_ant, rx_ant);
|
||||
}
|
||||
|
||||
static int ieee80211_set_ringparam(struct wiphy *wiphy, u32 tx, u32 rx)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
|
||||
return drv_set_ringparam(local, tx, rx);
|
||||
}
|
||||
|
||||
static void ieee80211_get_ringparam(struct wiphy *wiphy,
|
||||
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max)
|
||||
{
|
||||
struct ieee80211_local *local = wiphy_priv(wiphy);
|
||||
|
||||
drv_get_ringparam(local, tx, tx_max, rx, rx_max);
|
||||
}
|
||||
|
||||
struct cfg80211_ops mac80211_config_ops = {
|
||||
.add_virtual_intf = ieee80211_add_iface,
|
||||
.del_virtual_intf = ieee80211_del_iface,
|
||||
|
@ -2069,4 +2084,6 @@ struct cfg80211_ops mac80211_config_ops = {
|
|||
.mgmt_frame_register = ieee80211_mgmt_frame_register,
|
||||
.set_antenna = ieee80211_set_antenna,
|
||||
.get_antenna = ieee80211_get_antenna,
|
||||
.set_ringparam = ieee80211_set_ringparam,
|
||||
.get_ringparam = ieee80211_get_ringparam,
|
||||
};
|
||||
|
|
|
@ -526,4 +526,30 @@ static inline int drv_offchannel_tx_cancel_wait(struct ieee80211_local *local)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static inline int drv_set_ringparam(struct ieee80211_local *local,
|
||||
u32 tx, u32 rx)
|
||||
{
|
||||
int ret = -ENOTSUPP;
|
||||
|
||||
might_sleep();
|
||||
|
||||
trace_drv_set_ringparam(local, tx, rx);
|
||||
if (local->ops->set_ringparam)
|
||||
ret = local->ops->set_ringparam(&local->hw, tx, rx);
|
||||
trace_drv_return_int(local, ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline void drv_get_ringparam(struct ieee80211_local *local,
|
||||
u32 *tx, u32 *tx_max, u32 *rx, u32 *rx_max)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
trace_drv_get_ringparam(local, tx, tx_max, rx, rx_max);
|
||||
if (local->ops->get_ringparam)
|
||||
local->ops->get_ringparam(&local->hw, tx, tx_max, rx, rx_max);
|
||||
trace_drv_return_void(local);
|
||||
}
|
||||
|
||||
#endif /* __MAC80211_DRIVER_OPS */
|
||||
|
|
|
@ -912,6 +912,58 @@ TRACE_EVENT(drv_offchannel_tx,
|
|||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_set_ringparam,
|
||||
TP_PROTO(struct ieee80211_local *local, u32 tx, u32 rx),
|
||||
|
||||
TP_ARGS(local, tx, rx),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
LOCAL_ENTRY
|
||||
__field(u32, tx)
|
||||
__field(u32, rx)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
LOCAL_ASSIGN;
|
||||
__entry->tx = tx;
|
||||
__entry->rx = rx;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT " tx:%d rx %d",
|
||||
LOCAL_PR_ARG, __entry->tx, __entry->rx
|
||||
)
|
||||
);
|
||||
|
||||
TRACE_EVENT(drv_get_ringparam,
|
||||
TP_PROTO(struct ieee80211_local *local, u32 *tx, u32 *tx_max,
|
||||
u32 *rx, u32 *rx_max),
|
||||
|
||||
TP_ARGS(local, tx, tx_max, rx, rx_max),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
LOCAL_ENTRY
|
||||
__field(u32, tx)
|
||||
__field(u32, tx_max)
|
||||
__field(u32, rx)
|
||||
__field(u32, rx_max)
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
LOCAL_ASSIGN;
|
||||
__entry->tx = *tx;
|
||||
__entry->tx_max = *tx_max;
|
||||
__entry->rx = *rx;
|
||||
__entry->rx_max = *rx_max;
|
||||
),
|
||||
|
||||
TP_printk(
|
||||
LOCAL_PR_FMT " tx:%d tx_max %d rx %d rx_max %d",
|
||||
LOCAL_PR_ARG,
|
||||
__entry->tx, __entry->tx_max, __entry->rx, __entry->rx_max
|
||||
)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(local_only_evt, drv_offchannel_tx_cancel_wait,
|
||||
TP_PROTO(struct ieee80211_local *local),
|
||||
TP_ARGS(local)
|
||||
|
|
Loading…
Reference in New Issue