1*1bb76ff1Sjsg /* SPDX-License-Identifier: MIT */ 2*1bb76ff1Sjsg /* 3*1bb76ff1Sjsg * Copyright © 2019 Intel Corporation 4*1bb76ff1Sjsg */ 5*1bb76ff1Sjsg 6*1bb76ff1Sjsg #ifndef INTEL_GT_DEBUGFS_H 7*1bb76ff1Sjsg #define INTEL_GT_DEBUGFS_H 8*1bb76ff1Sjsg 9*1bb76ff1Sjsg #include <linux/file.h> 10*1bb76ff1Sjsg 11*1bb76ff1Sjsg struct intel_gt; 12*1bb76ff1Sjsg 13*1bb76ff1Sjsg #define __GT_DEBUGFS_ATTRIBUTE_FOPS(__name) \ 14*1bb76ff1Sjsg static const struct file_operations __name ## _fops = { \ 15*1bb76ff1Sjsg .owner = THIS_MODULE, \ 16*1bb76ff1Sjsg .open = __name ## _open, \ 17*1bb76ff1Sjsg .read = seq_read, \ 18*1bb76ff1Sjsg .llseek = seq_lseek, \ 19*1bb76ff1Sjsg .release = single_release, \ 20*1bb76ff1Sjsg } 21*1bb76ff1Sjsg 22*1bb76ff1Sjsg #define DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE(__name) \ 23*1bb76ff1Sjsg static int __name ## _open(struct inode *inode, struct file *file) \ 24*1bb76ff1Sjsg { \ 25*1bb76ff1Sjsg return single_open(file, __name ## _show, inode->i_private); \ 26*1bb76ff1Sjsg } \ 27*1bb76ff1Sjsg __GT_DEBUGFS_ATTRIBUTE_FOPS(__name) 28*1bb76ff1Sjsg 29*1bb76ff1Sjsg #define DEFINE_INTEL_GT_DEBUGFS_ATTRIBUTE_WITH_SIZE(__name, __size_vf) \ 30*1bb76ff1Sjsg static int __name ## _open(struct inode *inode, struct file *file) \ 31*1bb76ff1Sjsg { \ 32*1bb76ff1Sjsg return single_open_size(file, __name ## _show, inode->i_private, \ 33*1bb76ff1Sjsg __size_vf(inode->i_private)); \ 34*1bb76ff1Sjsg } \ 35*1bb76ff1Sjsg __GT_DEBUGFS_ATTRIBUTE_FOPS(__name) 36*1bb76ff1Sjsg 37*1bb76ff1Sjsg void intel_gt_debugfs_register(struct intel_gt *gt); 38*1bb76ff1Sjsg 39*1bb76ff1Sjsg struct intel_gt_debugfs_file { 40*1bb76ff1Sjsg const char *name; 41*1bb76ff1Sjsg const struct file_operations *fops; 42*1bb76ff1Sjsg bool (*eval)(void *data); 43*1bb76ff1Sjsg }; 44*1bb76ff1Sjsg 45*1bb76ff1Sjsg #ifdef notyet 46*1bb76ff1Sjsg void intel_gt_debugfs_register_files(struct dentry *root, 47*1bb76ff1Sjsg const struct intel_gt_debugfs_file *files, 48*1bb76ff1Sjsg unsigned long count, void *data); 49*1bb76ff1Sjsg #endif 50*1bb76ff1Sjsg 51*1bb76ff1Sjsg /* functions that need to be accessed by the upper level non-gt interfaces */ 52*1bb76ff1Sjsg int intel_gt_debugfs_reset_show(struct intel_gt *gt, u64 *val); 53*1bb76ff1Sjsg void intel_gt_debugfs_reset_store(struct intel_gt *gt, u64 val); 54*1bb76ff1Sjsg 55*1bb76ff1Sjsg #endif /* INTEL_GT_DEBUGFS_H */ 56