/* SPDX-License-Identifier: GPL-2.0-only */ /* * Copyright 2022 Google LLC. * * Author: Star Chang */ #ifndef _WLAN_PTRACKER_DEBUGFS_H #define _WLAN_PTRACKER_DEBUGFS_H #include #include #include #include #include struct wlan_ptracker_core; struct wlan_ptracker_debugfs { struct dentry *root; struct kobject kobj; u32 dscp; u32 ac; u32 action; u32 log_level; }; struct ptracker_kobj_attr { struct attribute attr; ssize_t (*show)(struct wlan_ptracker_debugfs *, char *); ssize_t (*store)(struct wlan_ptracker_debugfs *, const char *, size_t count); }; enum { FEATURE_FLAG_TWT, FEATURE_FLAG_MAX }; enum { ACTION_DSCP_UPDATE, ACTION_MAX, }; struct scene_statistic { u64 awake; u64 asleep; }; struct history_entry { u32 state; bool valid; struct timespec64 ts; }; #define MODULE_NAME_MAX 64 struct history_manager { char name[MODULE_NAME_MAX]; int cur; int round; int entry_count; int entry_size; struct mutex mutex; int (*priv_read)(struct wlan_ptracker_core *core, void *cur, void *next, char *buf, int len); u8 entries[0]; }; extern int wlan_ptracker_debugfs_init(struct wlan_ptracker_debugfs *debugfs); extern void wlan_ptracker_debugfs_exit(struct wlan_ptracker_debugfs *debugfs); extern struct history_manager *wlan_ptracker_history_create(int entry_count, int entry_size); extern void wlan_ptracker_history_destroy(struct history_manager *hm); extern void *wlan_ptracker_history_store(struct history_manager *hm, u32 state); extern size_t wlan_ptracker_history_read(struct wlan_ptracker_core *core, struct history_manager *hm, char *buf, int len); #endif /* _WLAN_PTRACKER_DEBUGFS_H */