1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
25c4e6f13SPierre Ossman /*
35c4e6f13SPierre Ossman * linux/drivers/mmc/sdio_ops.c
45c4e6f13SPierre Ossman *
55c4e6f13SPierre Ossman * Copyright 2006-2007 Pierre Ossman
65c4e6f13SPierre Ossman */
75c4e6f13SPierre Ossman
85c4e6f13SPierre Ossman #ifndef _MMC_SDIO_OPS_H
95c4e6f13SPierre Ossman #define _MMC_SDIO_OPS_H
105c4e6f13SPierre Ossman
11066185d6SUlf Hansson #include <linux/types.h>
12de98c556SHans de Goede #include <linux/mmc/sdio.h>
13de98c556SHans de Goede
14066185d6SUlf Hansson struct mmc_host;
15066185d6SUlf Hansson struct mmc_card;
1668269660SUlf Hansson struct work_struct;
17066185d6SUlf Hansson
185c4e6f13SPierre Ossman int mmc_send_io_op_cond(struct mmc_host *host, u32 ocr, u32 *rocr);
19b2bcc798SPierre Ossman int mmc_io_rw_direct(struct mmc_card *card, int write, unsigned fn,
20b2bcc798SPierre Ossman unsigned addr, u8 in, u8* out);
21112c9db9SPierre Ossman int mmc_io_rw_extended(struct mmc_card *card, int write, unsigned fn,
22eb659468SDavid Vrabel unsigned addr, int incr_addr, u8 *buf, unsigned blocks, unsigned blksz);
23516a8242SAlbert Herranz int sdio_reset(struct mmc_host *host);
2468269660SUlf Hansson void sdio_irq_work(struct work_struct *work);
255c4e6f13SPierre Ossman
sdio_is_io_busy(u32 opcode,u32 arg)26f328c76eSjiajie.hao@mediatek.com static inline bool sdio_is_io_busy(u32 opcode, u32 arg)
27de98c556SHans de Goede {
28f328c76eSjiajie.hao@mediatek.com u32 addr;
29f328c76eSjiajie.hao@mediatek.com
30f328c76eSjiajie.hao@mediatek.com addr = (arg >> 9) & 0x1FFFF;
31f328c76eSjiajie.hao@mediatek.com
32f328c76eSjiajie.hao@mediatek.com return (opcode == SD_IO_RW_EXTENDED ||
33f328c76eSjiajie.hao@mediatek.com (opcode == SD_IO_RW_DIRECT &&
34f328c76eSjiajie.hao@mediatek.com !(addr == SDIO_CCCR_ABORT || addr == SDIO_CCCR_SUSPEND)));
35de98c556SHans de Goede }
36de98c556SHans de Goede
375c4e6f13SPierre Ossman #endif
385c4e6f13SPierre Ossman
39