2005-04-16 15:20:36 -07:00
# ifndef MMC_QUEUE_H
# define MMC_QUEUE_H
2013-03-14 15:17:13 +09:00
# define MMC_REQ_SPECIAL_MASK (REQ_DISCARD | REQ_FLUSH)
2005-04-16 15:20:36 -07:00
struct request ;
struct task_struct ;
2011-07-09 17:12:36 -04:00
struct mmc_blk_request {
struct mmc_request mrq ;
struct mmc_command sbc ;
struct mmc_command cmd ;
struct mmc_command stop ;
struct mmc_data data ;
} ;
2013-02-06 17:02:46 +09:00
enum mmc_packed_type {
MMC_PACKED_NONE = 0 ,
MMC_PACKED_WRITE ,
} ;
# define mmc_packed_cmd(type) ((type) != MMC_PACKED_NONE)
# define mmc_packed_wr(type) ((type) == MMC_PACKED_WRITE)
struct mmc_packed {
struct list_head list ;
u32 cmd_hdr [ 1024 ] ;
unsigned int blocks ;
u8 nr_entries ;
u8 retries ;
s16 idx_failure ;
} ;
2011-07-09 17:12:36 -04:00
struct mmc_queue_req {
struct request * req ;
struct mmc_blk_request brq ;
struct scatterlist * sg ;
char * bounce_buf ;
struct scatterlist * bounce_sg ;
unsigned int bounce_sg_len ;
2011-07-01 18:55:33 +02:00
struct mmc_async_req mmc_active ;
2013-02-06 17:02:46 +09:00
enum mmc_packed_type cmd_type ;
struct mmc_packed * packed ;
2011-07-09 17:12:36 -04:00
} ;
2005-04-16 15:20:36 -07:00
struct mmc_queue {
struct mmc_card * card ;
2006-11-13 20:23:52 +01:00
struct task_struct * thread ;
2005-04-16 15:20:36 -07:00
struct semaphore thread_sem ;
unsigned int flags ;
2013-01-14 14:28:17 -05:00
# define MMC_QUEUE_SUSPENDED (1 << 0)
# define MMC_QUEUE_NEW_REQUEST (1 << 1)
2005-04-16 15:20:36 -07:00
int ( * issue_fn ) ( struct mmc_queue * , struct request * ) ;
void * data ;
struct request_queue * queue ;
2011-07-01 18:55:31 +02:00
struct mmc_queue_req mqrq [ 2 ] ;
2011-07-09 17:12:36 -04:00
struct mmc_queue_req * mqrq_cur ;
2011-07-01 18:55:31 +02:00
struct mmc_queue_req * mqrq_prev ;
2005-04-16 15:20:36 -07:00
} ;
2011-06-23 13:40:28 +03:00
extern int mmc_init_queue ( struct mmc_queue * , struct mmc_card * , spinlock_t * ,
const char * ) ;
2005-04-16 15:20:36 -07:00
extern void mmc_cleanup_queue ( struct mmc_queue * ) ;
extern void mmc_queue_suspend ( struct mmc_queue * ) ;
extern void mmc_queue_resume ( struct mmc_queue * ) ;
2011-07-09 17:12:36 -04:00
extern unsigned int mmc_queue_map_sg ( struct mmc_queue * ,
struct mmc_queue_req * ) ;
extern void mmc_queue_bounce_pre ( struct mmc_queue_req * ) ;
extern void mmc_queue_bounce_post ( struct mmc_queue_req * ) ;
2007-05-12 00:26:16 +02:00
2013-02-06 17:02:46 +09:00
extern int mmc_packed_init ( struct mmc_queue * , struct mmc_card * ) ;
extern void mmc_packed_clean ( struct mmc_queue * ) ;
2005-04-16 15:20:36 -07:00
# endif