2013-11-18 02:59:12 +00:00
# ifndef PAGE_ACTOR_H
# define PAGE_ACTOR_H
/*
* Copyright ( c ) 2013
* Phillip Lougher < phillip @ squashfs . org . uk >
*
* This work is licensed under the terms of the GNU GPL , version 2. See
* the COPYING file in the top - level directory .
*/
2013-11-13 02:04:19 +00:00
# ifndef CONFIG_SQUASHFS_FILE_DIRECT
2013-11-18 02:59:12 +00:00
struct squashfs_page_actor {
void * * page ;
int pages ;
int length ;
int next_page ;
} ;
static inline struct squashfs_page_actor * squashfs_page_actor_init ( void * * page ,
int pages , int length )
{
struct squashfs_page_actor * actor = kmalloc ( sizeof ( * actor ) , GFP_KERNEL ) ;
if ( actor = = NULL )
return NULL ;
actor - > length = length ? : pages * PAGE_CACHE_SIZE ;
actor - > page = page ;
actor - > pages = pages ;
actor - > next_page = 0 ;
return actor ;
}
static inline void * squashfs_first_page ( struct squashfs_page_actor * actor )
{
actor - > next_page = 1 ;
return actor - > page [ 0 ] ;
}
static inline void * squashfs_next_page ( struct squashfs_page_actor * actor )
{
return actor - > next_page = = actor - > pages ? NULL :
actor - > page [ actor - > next_page + + ] ;
}
static inline void squashfs_finish_page ( struct squashfs_page_actor * actor )
{
/* empty */
}
2013-11-13 02:04:19 +00:00
# else
struct squashfs_page_actor {
union {
void * * buffer ;
struct page * * page ;
} ;
void * pageaddr ;
void * ( * squashfs_first_page ) ( struct squashfs_page_actor * ) ;
void * ( * squashfs_next_page ) ( struct squashfs_page_actor * ) ;
void ( * squashfs_finish_page ) ( struct squashfs_page_actor * ) ;
int pages ;
int length ;
int next_page ;
} ;
extern struct squashfs_page_actor * squashfs_page_actor_init ( void * * , int , int ) ;
extern struct squashfs_page_actor * squashfs_page_actor_init_special ( struct page
* * , int , int ) ;
static inline void * squashfs_first_page ( struct squashfs_page_actor * actor )
{
return actor - > squashfs_first_page ( actor ) ;
}
static inline void * squashfs_next_page ( struct squashfs_page_actor * actor )
{
return actor - > squashfs_next_page ( actor ) ;
}
static inline void squashfs_finish_page ( struct squashfs_page_actor * actor )
{
actor - > squashfs_finish_page ( actor ) ;
}
# endif
2013-11-18 02:59:12 +00:00
# endif