1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef _LINUX_PAGE_REPORTING_H 3*4882a593Smuzhiyun #define _LINUX_PAGE_REPORTING_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/mmzone.h> 6*4882a593Smuzhiyun #include <linux/scatterlist.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* This value should always be a power of 2, see page_reporting_cycle() */ 9*4882a593Smuzhiyun #define PAGE_REPORTING_CAPACITY 32 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun struct page_reporting_dev_info { 12*4882a593Smuzhiyun /* function that alters pages to make them "reported" */ 13*4882a593Smuzhiyun int (*report)(struct page_reporting_dev_info *prdev, 14*4882a593Smuzhiyun struct scatterlist *sg, unsigned int nents); 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* work struct for processing reports */ 17*4882a593Smuzhiyun struct delayed_work work; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* Current state of page reporting */ 20*4882a593Smuzhiyun atomic_t state; 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* Tear-down and bring-up for page reporting devices */ 24*4882a593Smuzhiyun void page_reporting_unregister(struct page_reporting_dev_info *prdev); 25*4882a593Smuzhiyun int page_reporting_register(struct page_reporting_dev_info *prdev); 26*4882a593Smuzhiyun #endif /*_LINUX_PAGE_REPORTING_H */ 27