WMI and debugfs calls for TWT dialogs
v5 cover WMI and debugfs calls for TWT dialogs
This patchset adds support for TWT dialogs using debugfs. Individual patch files show changes in V5.
John Crispin (2):
ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
ath11k: add debugfs for TWT debug calls
drivers/net/wireless/ath/ath11k/core.h | 4 + drivers/net/wireless/ath/ath11k/debug.c | 224 ++++++++++++++++++++++++ drivers/net/wireless/ath/ath11k/debug.h | 13 ++ drivers/net/wireless/ath/ath11k/mac.c | 3 + drivers/net/wireless/ath/ath11k/wmi.c | 218 ++++++++++++++++++++++- drivers/net/wireless/ath/ath11k/wmi.h | 114 ++++++++++++ 6 files changed, 572 insertions(+), 4 deletions(-)
base-commit: f5242d42da02730c67d517a7402015c13f59deee
Signature · 7 lines
2.25.0 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
PATCH v5 1/2 ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
From: John Crispin <[email protected]>
These calls are used for debugging and will be required for WFA certification tests.
---
Changes in V5
* Setting and resetting of twt_enabled in WMI functions
* ath11k_dbg() instead of ath11k_info() in ath11k_wmi_twt_add_dialog_event()
* Made WMI error messages more readable
--- drivers/net/wireless/ath/ath11k/core.h | 1 + drivers/net/wireless/ath/ath11k/wmi.c | 218 ++++++++++++++++++++++++- drivers/net/wireless/ath/ath11k/wmi.h | 114 +++++++++++++ 3 files changed, 329 insertions(+), 4 deletions(-)
drivers/net/wireless/ath/ath11k/core.h +1 -0
@@ -564,6 +564,7 @@ struct ath11k {#endif bool dfs_block_radar_events;struct ath11k_thermal thermal; +u8 twt_enabled; };struct ath11k_band_cap {
drivers/net/wireless/ath/ath11k/wmi.c +214 -4
253 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/wmi.h +114 -0
126 lines not on this page · raw message
Signature · 7 lines
2.25.0 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH V5 1/2] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
Quoted 7 lines · Aloka Dixit
These calls are used for debugging and will be required for WFA certification tests.
Signed-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>Signed-off-by Kalle Valo <[email protected]>
This patchset had new warnings:
drivers/net/wireless/ath/ath11k/debugfs.c:16:15: warning: symbol 'debugfs_ath11k' was not declared. Should it be static? drivers/net/wireless/ath/ath11k/wmi.c:7143: char * array declaration might be better as static const
Signature · 9 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH V5 1/2] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
In reply to Aloka DixitQuoted 7 lines · Aloka Dixit
These calls are used for debugging and will be required for WFA certification tests.
Signed-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>Signed-off-by Kalle Valo <[email protected]>
This patchset had new warnings:
drivers/net/wireless/ath/ath11k/debugfs.c:16:15: warning: symbol 'debugfs_ath11k' was not declared. Should it be static? drivers/net/wireless/ath/ath11k/wmi.c:7143: char * array declaration might be better as static const
Signature · 3 lines
https://patchwork.kernel.org/project/linux-wireless/patch/[email protected]/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches
Re: [PATCH V5 1/2] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
In reply to Aloka DixitQuoted 8 lines · Aloka Dixit
From: John Crispin <[email protected]>
These calls are used for debugging and will be required for WFA certification tests.
Signed-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>
[...]
Quoted 30 lines
drivers/net/wireless/ath/ath11k/wmi.c +30
-0+int ath11k_wmi_send_twt_add_dialog_cmd (struct ath11k *ar, +struct wmi_twt_add_dialog_params *params) +{ +struct ath11k_pdev_wmi *wmi = ar->wmi; +struct ath11k_base *ab = wmi->wmi_ab->ab; +struct wmi_twt_add_dialog_params_cmd *cmd; +struct sk_buff *skb; +int ret, len; + + len =sizeof (*cmd); + + skb =ath11k_wmi_alloc_skb (wmi->wmi_ab, len); +if (!skb) +return -ENOMEM ; + + cmd = (struct wmi_twt_add_dialog_params_cmd *)skb->data; + cmd->tlv_header =FIELD_PREP (WMI_TLV_TAG ,WMI_TAG_TWT_ADD_DIALOG_CMD ) | +FIELD_PREP (WMI_TLV_LEN , len -TLV_HDR_SIZE ); + + cmd->vdev_id = params->vdev_id; +ether_addr_copy (cmd->peer_macaddr.addr, params->peer_macaddr); + cmd->dialog_id = params->dialog_id; + cmd->wake_intvl_us = params->wake_intvl_us; + cmd->wake_intvl_mantis = params->wake_intvl_mantis; + cmd->wake_dura_us = params->wake_dura_us; + cmd->sp_offset_us = params->sp_offset_us; + cmd->flags = params->twt_cmd; +if (params->flag_bcast) + cmd->flags |=WMI_TWT_ADD_DIALOG_FLAG_BCAST ; +if (params->flag_trigger)
drivers/net/wireless/ath/ath11k/wmi.c ath11k_wmi_send_twt_disable_cmd(struct ath11k *ar, u32 pdev_id) · line 2979
Quoted 10 lines
drivers/net/wireless/ath/ath11k/wmi.c +10
-0+ cmd->flags |=WMI_TWT_ADD_DIALOG_FLAG_TRIGGER ; +if (params->flag_flow_type) + cmd->flags |=WMI_TWT_ADD_DIALOG_FLAG_FLOW_TYPE ; +if (params->flag_protection) + cmd->flags |=WMI_TWT_ADD_DIALOG_FLAG_PROTECTION ; + + ath11k_dbg(ar->ab, ATH11K_DBG_WMI, + "WMI add TWT dialog, vdev %u, dialog id %u,\n" + "wake interval %u, mantissa %u, wake duration %u,\n" + "service period offset %u, flags 0x%x\n",
In debug messages please use all lower case, and no commas nor \n (ie. all in one line).
drivers/net/wireless/ath/ath11k/wmi.c ath11k_wmi_send_twt_disable_cmd(struct ath11k *ar, u32 pdev_id) · line 2988
Quoted 5 lines
drivers/net/wireless/ath/ath11k/wmi.c +5
-0+ ret =ath11k_wmi_cmd_send (wmi, skb,WMI_TWT_ADD_DIALOG_CMDID ); + +if (ret) { +ath11k_warn (ab, +"Failed to send WMI command to add TWT dialog\n" );
Warning and error messages should follow style:
"failed to send add TWT dialog WMI command: %d", ret
Quoted 19 lines
drivers/net/wireless/ath/ath11k/wmi.c +19
-0+static void ath11k_wmi_twt_add_dialog_event (struct ath11k_base *ab, +struct sk_buff *skb) +{ +const char *status[] = { +"OK" ,"TWT_NOT_ENABLED" ,"USED_DIALOG_ID" ,"INVALID_PARAM" , +"NOT_READY" ,"NO_RESOURCE" ,"NO_ACK" ,"NO_RESPONSE" , +"DENIED" ,"UNKNOWN_ERROR" + }; +const void **tb; +const struct wmi_twt_add_dialog_event *ev; +int ret; + + tb =ath11k_wmi_tlv_parse_alloc (ab, skb->data, skb->len,GFP_ATOMIC ); +if (IS_ERR (tb)) { + ret =PTR_ERR (tb); +ath11k_warn (ab, +"failed to parse TWT add dialog status event tlv: %d\n" , ret); +return ; + }
drivers/net/wireless/ath/ath11k/wmi.c static void ath11k_wmi_event_wow_wakeup_host(struct ath11k_base *ab, struct sk_b · line 7184
Quoted 10 lines
drivers/net/wireless/ath/ath11k/wmi.c +10
-0+ + ev = tb[WMI_TAG_TWT_ADD_DIALOG_COMPLETE_EVENT ]; +if (!ev) { +ath11k_warn (ab,"failed to fetch TWT add dialog event\n" ); + goto exit; + } + +ath11k_dbg (ab,ATH11K_DBG_WMI , +"TWT Add Dialog Event - vdev: %d, dialog id: %d, status: %s\n" , + ev->vdev_id, ev->dialog_id, status[ev->status]);
You are not checking that status array is not used out of bounds. I would just remove the string conversion to keep things simple, but if you want to print in strings please add a helper function to do the conversion and add status values as enum to wmi.h.
Signature · 8 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
A message that is not in the archive (sent off-list or not yet received): [email protected]
Re: [PATCH V5 1/2] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
Quoted 10 lines · Kalle Valo
Quoted 7 lines · Aloka Dixit
These calls are used for debugging and will be required for WFA certification tests.
Signed-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Quoted 4 lines
This patchset had new warnings:
drivers/net/wireless/ath/ath11k/debugfs.c:16:15: warning: symbol 'debugfs_ath11k' was not declared. Should it be static?
This patch-set doesn't add any reference to 'debugfs_ath11k', so don't know why this warning came up.
Quoted 2 lines
drivers/net/wireless/ath/ath11k/wmi.c:7143: char * array declaration might be better as static const
Will remove this array as per your other comment regarding adding a helper function.
Signature · 3 lines
ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH V5 1/2] ath11k: add WMI calls to manually add/del/pause/resume TWT dialogs
Quoted 11 lines · Aloka Dixit
Quoted 10 lines · Kalle Valo
Quoted 7 lines · Aloka Dixit
These calls are used for debugging and will be required for WFA certification tests.
Signed-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>Signed-off-by Kalle Valo <[email protected]>
Quoted 7 lines
Quoted 4 lines
This patchset had new warnings:
drivers/net/wireless/ath/ath11k/debugfs.c:16:15: warning: symbol 'debugfs_ath11k' was not declared. Should it be static?This patch-set doesn't add any reference to '
debugfs_ath11k', so don't know why this warning came up.
Ah, sorry. That's coming from Anil's debugfs patch.
Signature · 8 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
PATCH v5 2/2 ath11k: add debugfs for TWT debug calls
In reply to Aloka DixitFrom: John Crispin <[email protected]>
New debugfs files to manually add/delete/pause/resume TWT dialogs for test/debug purposes.
The debugfs files expect the following parameters
(1) Add dialog
echo '<Peer_MAC> <Dialog_ID> <Wake_Interval_Usec> <Wake_Interval_Mantis> <Wake_Duration_Usec> <First_SP_Offset> <TWT_Command> <1:Broadcast / 0:Individual> <1:Triggered / 0:Untriggered> <1:Unannounced / 0:Announced> <1:Protected / 0:Unprotected>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/add_dialog
Example (Non-triggered and un-announced):
echo '00:03:7F:20:13:52 1 102400 100 30720 20480 4 0 0 1 0' > /sys/kernel/debug/ieee80211/phy0/netdev:wlan0/twt/add_dialog
(2) Delete dialog
echo '<Peer_MAC> <Dialog_ID>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/del_dialog
(3) Pause dialog
echo '<Peer_MAC> <Dialog_ID>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/pause_dialog
(4) Resume dialog
echo '<Peer_MAC> <Dialog_ID> <SP_Offset_Usec> <Next_TWT_Size>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/resume_dialog
Example:
echo '00:03:7F:20:13:52 1 2000000 3' > /sys/kernel/debug/ieee80211/phy0/netdev:wlan0/twt/resume_dialog
---
Changes in V5
* TWT directory created during ath11k_mac_op_add_interface() instead
* of during TWT enable command.
* File write operation check for twt_enabled.
* Used CONFIG_ATH11K_DEBUGFS instead of CONFIG_MAC80211_DEBUGFS.
* Example commands in commit description.
--- drivers/net/wireless/ath/ath11k/core.h | 3 + drivers/net/wireless/ath/ath11k/debug.c | 224 ++++++++++++++++++++++++ drivers/net/wireless/ath/ath11k/debug.h | 13 ++ drivers/net/wireless/ath/ath11k/mac.c | 3 + 4 files changed, 243 insertions(+)
drivers/net/wireless/ath/ath11k/core.h +3 -0
@@ -241,6 +241,9 @@ struct ath11k_vif {bool rsnie_present;bool wpaie_present;struct ieee80211_chanctx_conf chanctx; +#ifdef CONFIG_ATH11K_DEBUGFS +struct dentry *debugfs_twt; +#endif /* CONFIG_ATH11K_DEBUGFS */ };struct ath11k_vif_iter {
drivers/net/wireless/ath/ath11k/debug.c +224 -0
227 lines not on this page · raw message
drivers/net/wireless/ath/ath11k/debug.h +13 -0
@@ -64,4 +64,17 @@ do { \ __ath11k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \ } while (0) +#ifdef CONFIG_ATH11K_DEBUGFS +void ath11k_debugfs_add_interface (struct ath11k_vif *arvif); +void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif); +#else /* CONFIG_ATH11K_DEBUGFS */ +static inline void ath11k_debugfs_add_interface (struct ath11k_vif *arvif) +{ +} + +static inline void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif) +{ +} +#endif /* CONFIG_ATH11K_DEBUGFS */ +#endif /* _ATH11K_DEBUG_H_ */
drivers/net/wireless/ath/ath11k/mac.c +3 -0
@@ -4766,6 +4766,7 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw, }ath11k_dp_vdev_tx_attach (ar, arvif); +ath11k_debugfs_add_interface (arvif);mutex_unlock (&ar->conf_mutex);
@@ -4885,6 +4886,8 @@ static void ath11k_mac_op_remove_interface(struct ieee80211_hw *hw,/* TODO: recal traffic pause state based on the available vdevs */ +ath11k_debugfs_remove_interface (arvif); +mutex_unlock (&ar->conf_mutex); }
Signature · 7 lines
2.25.0 -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k
Re: [PATCH V5 2/2] ath11k: add debugfs for TWT debug calls
Quoted 36 lines · Aloka Dixit
From: John Crispin <[email protected]>
New debugfs files to manually add/delete/pause/resume TWT dialogs for test/debug purposes.
The debugfs files expect the following parameters
(1) Add dialog
echo '<Peer_MAC> <Dialog_ID> <Wake_Interval_Usec> <Wake_Interval_Mantis> <Wake_Duration_Usec> <First_SP_Offset> <TWT_Command> <1:Broadcast / 0:Individual> <1:Triggered / 0:Untriggered> <1:Unannounced / 0:Announced> <1:Protected / 0:Unprotected>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/add_dialogExample (Non-triggered and un-announced):
echo '00:03:7F:20:13:52 1 102400 100 30720 20480 4 0 0 1 0' > /sys/kernel/debug/ieee80211/phy0/netdev:wlan0/twt/add_dialog(2) Delete dialog
echo '<Peer_MAC> <Dialog_ID>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/del_dialog(3) Pause dialog
echo '<Peer_MAC> <Dialog_ID>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/pause_dialog(4) Resume dialog
echo '<Peer_MAC> <Dialog_ID> <SP_Offset_Usec> <Next_TWT_Size>' > /sys/kernel/debug/ieee80211/phyX/netdev:wlanX/twt/resume_dialogExample:
echo '00:03:7F:20:13:52 1 2000000 3' > /sys/kernel/debug/ieee80211/phy0/netdev:wlan0/twt/resume_dialogSigned-off-by John Crispin <[email protected]>Co-developed-by Aloka Dixit <[email protected]>Signed-off-by Aloka Dixit <[email protected]>
[...]
Quoted 220 lines
drivers/net/wireless/ath/ath11k/debug.c +214
-0@@ -104,3 +104,227 @@ void ath11k_dbg_dump(struct ath11k_base *ab,EXPORT_SYMBOL (ath11k_dbg_dump);#endif /* CONFIG_ATH11K_DEBUG */ + +#ifdef CONFIG_ATH11K_DEBUGFS +static ssize_t ath11k_write_twt_add_dialog (struct file *file, +const char __user *ubuf, +size_t count,loff_t *ppos) +{ +struct ath11k_vif *arvif = file->private_data; +struct wmi_twt_add_dialog_params params = {0 }; +u8 buf[128 ] = {0 }; +int ret; + +if (arvif->ar->twt_enabled ==0 ) { +ath11k_err (arvif->ar->ab,"TWT support is not enabled\n" ); +return -EOPNOTSUPP ; + } + + ret =simple_write_to_buffer (buf,sizeof (buf) -1 , ppos, ubuf, count); +if (ret <0 ) +return ret; + + buf[ret] ='\0' ; + ret =sscanf (buf, +"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx %u %u %u %u %u %hhu %hhu %hhu %hhu %hhu" , + ¶ms.peer_macaddr[0 ], + ¶ms.peer_macaddr[1 ], + ¶ms.peer_macaddr[2 ], + ¶ms.peer_macaddr[3 ], + ¶ms.peer_macaddr[4 ], + ¶ms.peer_macaddr[5 ], + ¶ms.dialog_id, + ¶ms.wake_intvl_us, + ¶ms.wake_intvl_mantis, + ¶ms.wake_dura_us, + ¶ms.sp_offset_us, + ¶ms.twt_cmd, + ¶ms.flag_bcast, + ¶ms.flag_trigger, + ¶ms.flag_flow_type, + ¶ms.flag_protection); +if (ret !=16 ) +return -EINVAL ; + + params.vdev_id = arvif->vdev_id; + + ret =ath11k_wmi_send_twt_add_dialog_cmd (arvif->ar, ¶ms); +if (ret) +return ret; + +return count; +} + +static ssize_t ath11k_write_twt_del_dialog (struct file *file, +const char __user *ubuf, +size_t count,loff_t *ppos) +{ +struct ath11k_vif *arvif = file->private_data; +struct wmi_twt_del_dialog_params params = {0 }; +u8 buf[64 ] = {0 }; +int ret; + +if (arvif->ar->twt_enabled ==0 ) { +ath11k_err (arvif->ar->ab,"TWT support is not enabled\n" ); +return -EOPNOTSUPP ; + } + + ret =simple_write_to_buffer (buf,sizeof (buf) -1 , ppos, ubuf, count); +if (ret <0 ) +return ret; + + buf[ret] ='\0' ; + ret =sscanf (buf,"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx %u" , + ¶ms.peer_macaddr[0 ], + ¶ms.peer_macaddr[1 ], + ¶ms.peer_macaddr[2 ], + ¶ms.peer_macaddr[3 ], + ¶ms.peer_macaddr[4 ], + ¶ms.peer_macaddr[5 ], + ¶ms.dialog_id); +if (ret !=7 ) +return -EINVAL ; + + params.vdev_id = arvif->vdev_id; + + ret =ath11k_wmi_send_twt_del_dialog_cmd (arvif->ar, ¶ms); +if (ret) +return ret; + +return count; +} + +static ssize_t ath11k_write_twt_pause_dialog (struct file *file, +const char __user *ubuf, +size_t count,loff_t *ppos) +{ +struct ath11k_vif *arvif = file->private_data; +struct wmi_twt_pause_dialog_params params = {0 }; +u8 buf[64 ] = {0 }; +int ret; + +if (arvif->ar->twt_enabled ==0 ) { +ath11k_err (arvif->ar->ab,"TWT support is not enabled\n" ); +return -EOPNOTSUPP ; + } + + ret =simple_write_to_buffer (buf,sizeof (buf) -1 , ppos, ubuf, count); +if (ret <0 ) +return ret; + + buf[ret] ='\0' ; + ret =sscanf (buf,"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx %u" , + ¶ms.peer_macaddr[0 ], + ¶ms.peer_macaddr[1 ], + ¶ms.peer_macaddr[2 ], + ¶ms.peer_macaddr[3 ], + ¶ms.peer_macaddr[4 ], + ¶ms.peer_macaddr[5 ], + ¶ms.dialog_id); +if (ret !=7 ) +return -EINVAL ; + + params.vdev_id = arvif->vdev_id; + + ret =ath11k_wmi_send_twt_pause_dialog_cmd (arvif->ar, ¶ms); +if (ret) +return ret; + +return count; +} + +static ssize_t ath11k_write_twt_resume_dialog (struct file *file, +const char __user *ubuf, +size_t count,loff_t *ppos) +{ +struct ath11k_vif *arvif = file->private_data; +struct wmi_twt_resume_dialog_params params = {0 }; +u8 buf[64 ] = {0 }; +int ret; + +if (arvif->ar->twt_enabled ==0 ) { +ath11k_err (arvif->ar->ab,"TWT support is not enabled\n" ); +return -EOPNOTSUPP ; + } + + ret =simple_write_to_buffer (buf,sizeof (buf) -1 , ppos, ubuf, count); +if (ret <0 ) +return ret; + + buf[ret] ='\0' ; + ret =sscanf (buf,"%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx %u %u %u" , + ¶ms.peer_macaddr[0 ], + ¶ms.peer_macaddr[1 ], + ¶ms.peer_macaddr[2 ], + ¶ms.peer_macaddr[3 ], + ¶ms.peer_macaddr[4 ], + ¶ms.peer_macaddr[5 ], + ¶ms.dialog_id, + ¶ms.sp_offset_us, + ¶ms.next_twt_size); +if (ret !=9 ) +return -EINVAL ; + + params.vdev_id = arvif->vdev_id; + + ret =ath11k_wmi_send_twt_resume_dialog_cmd (arvif->ar, ¶ms); +if (ret) +return ret; + +return count; +} + +static const struct file_operations ath11k_fops_twt_add_dialog = { + .write = ath11k_write_twt_add_dialog, + .open = simple_open +}; + +static const struct file_operations ath11k_fops_twt_del_dialog = { + .write = ath11k_write_twt_del_dialog, + .open = simple_open +}; + +static const struct file_operations ath11k_fops_twt_pause_dialog = { + .write = ath11k_write_twt_pause_dialog, + .open = simple_open +}; + +static const struct file_operations ath11k_fops_twt_resume_dialog = { + .write = ath11k_write_twt_resume_dialog, + .open = simple_open +}; + +void ath11k_debugfs_add_interface (struct ath11k_vif *arvif) +{ +if (arvif->vif->type ==NL80211_IFTYPE_AP && !arvif->debugfs_twt) { + arvif->debugfs_twt =debugfs_create_dir ("twt" , + arvif->vif->debugfs_dir); +if (IS_ERR_OR_NULL (arvif->debugfs_twt)) { +ath11k_warn (arvif->ar->ab, +"failed to create twt debugfs: %p\n" , + arvif->debugfs_twt); + arvif->debugfs_twt =NULL ; +return ; + } + +debugfs_create_file ("add_dialog" ,0200 , arvif->debugfs_twt, + arvif, &ath11k_fops_twt_add_dialog); + +debugfs_create_file ("del_dialog" ,0200 , arvif->debugfs_twt, + arvif, &ath11k_fops_twt_del_dialog); + +debugfs_create_file ("pause_dialog" ,0200 , arvif->debugfs_twt, + arvif, &ath11k_fops_twt_pause_dialog); + +debugfs_create_file ("resume_dialog" ,0200 , arvif->debugfs_twt, + arvif, &ath11k_fops_twt_resume_dialog);
drivers/net/wireless/ath/ath11k/debug.c void ath11k_dbg_dump(struct ath11k_base *ab, · line 330
Quoted 10 lines
drivers/net/wireless/ath/ath11k/debug.c +10
-0+ } +} + +void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif) +{ +debugfs_remove_recursive (arvif->debugfs_twt); + arvif->debugfs_twt =NULL ; +} + +#endif /* CONFIG_ATH11K_DEBUGFS */
Shouldn't these functions be in debugfs.c?
Quoted 10 lines
drivers/net/wireless/ath/ath11k/debug.h +2
-0@@ -64,4 +64,17 @@ do { \ __ath11k_dbg(ar, dbg_mask, fmt, ##__VA_ARGS__); \ } while (0) +#ifdef CONFIG_ATH11K_DEBUGFS +void ath11k_debugfs_add_interface (struct ath11k_vif *arvif);
drivers/net/wireless/ath/ath11k/debug.h do { \ · line 78
Quoted 10 lines
drivers/net/wireless/ath/ath11k/debug.h +10
-0+void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif); +#else /* CONFIG_ATH11K_DEBUGFS */ +static inline void ath11k_debugfs_add_interface (struct ath11k_vif *arvif) +{ +} + +static inline void ath11k_debugfs_remove_interface (struct ath11k_vif *arvif) +{ +} +#endif /* CONFIG_ATH11K_DEBUGFS */
And these in debugfs.h?
Signature · 8 lines
https://patchwork.kernel.org/project/linux-wireless/list/ https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches -- ath11k mailing list [email protected] http://lists.infradead.org/mailman/listinfo/ath11k