1 typedef unsigned int u32;
5 extern struct page *mem_map;
6 typedef struct pm_message {
20 unsigned int cmd_flags;
22 static inline __attribute__((always_inline)) void sg_set_buf(struct scatterlist *sg, const void *buf, unsigned int buflen) {
23 sg->page = (mem_map + ((((unsigned long)(buf)-0x80000000) >> 12) - ((0x0C000000 >> 12))));
24 sg->offset = ((unsigned long)(buf) & ~(~((1UL << 12)-1)));
26 static inline __attribute__((always_inline)) void sg_init_one(struct scatterlist *sg, const void *buf, unsigned int buflen) {
27 memset(sg, 0, sizeof(*sg));
28 sg_set_buf(sg, buf, buflen);
34 struct device_driver drv;
35 int (*probe)(struct mmc_card *);
36 void (*remove)(struct mmc_card *);
37 int (*suspend)(struct mmc_card *, pm_message_t);
38 int (*resume)(struct mmc_card *);
41 struct mmc_card *card;
42 int (*issue_fn)(struct mmc_queue *, struct request *);
46 struct mmc_queue queue;
48 static u32 mmc_sd_num_wr_blocks(struct mmc_card *card) {
50 struct scatterlist sg;
51 sg_init_one(&sg, &blocks, 4);
53 static int mmc_blk_issue_rq(struct mmc_queue *mq, struct request *req) {
54 struct mmc_blk_data *md = mq->data;
55 struct mmc_card *card = md->queue.card;
56 if (((req)->cmd_flags & 1) != 0 && ((card)->state & (1<<3))) {
58 blocks = mmc_sd_num_wr_blocks(card);
59 if (blocks != (u32)-1) {
67 static struct mmc_blk_data *mmc_blk_alloc(struct mmc_card *card) {
68 struct mmc_blk_data *md;
69 md->queue.issue_fn = mmc_blk_issue_rq;
71 static int mmc_blk_probe(struct mmc_card *card) {
72 struct mmc_blk_data *md;
73 md = mmc_blk_alloc(card);
75 static void mmc_blk_remove(struct mmc_card *card) {
77 static struct mmc_driver mmc_driver = {
80 , .probe = mmc_blk_probe, .remove = mmc_blk_remove, .suspend = ((void *)0), .resume = ((void *)0), };
81 static void __attribute__((__used__)) __attribute__ ((__section__(".exit.text"))) mmc_blk_exit(void) {
82 mmc_unregister_driver(&mmc_driver);