1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 #ifndef PAGE_ACTOR_H 3 #define PAGE_ACTOR_H 4 /* 5 * Copyright (c) 2013 6 * Phillip Lougher <phillip@squashfs.org.uk> 7 */ 8 9 struct squashfs_page_actor { 10 union { 11 void **buffer; 12 struct page **page; 13 }; 14 void *pageaddr; 15 void *tmp_buffer; 16 void *(*squashfs_first_page)(struct squashfs_page_actor *); 17 void *(*squashfs_next_page)(struct squashfs_page_actor *); 18 void (*squashfs_finish_page)(struct squashfs_page_actor *); 19 int pages; 20 int length; 21 int next_page; 22 int alloc_buffer; 23 int returned_pages; 24 pgoff_t next_index; 25 }; 26 27 extern struct squashfs_page_actor *squashfs_page_actor_init(void **buffer, 28 int pages, int length); 29 extern struct squashfs_page_actor *squashfs_page_actor_init_special( 30 struct squashfs_sb_info *msblk, 31 struct page **page, int pages, int length); 32 static inline void *squashfs_first_page(struct squashfs_page_actor *actor) 33 { 34 return actor->squashfs_first_page(actor); 35 } 36 static inline void *squashfs_next_page(struct squashfs_page_actor *actor) 37 { 38 return actor->squashfs_next_page(actor); 39 } 40 static inline void squashfs_finish_page(struct squashfs_page_actor *actor) 41 { 42 actor->squashfs_finish_page(actor); 43 } 44 static inline void squashfs_actor_nobuff(struct squashfs_page_actor *actor) 45 { 46 actor->alloc_buffer = 0; 47 } 48 #endif 49