^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * Copyright (C) 2004-2006 Thomas Kleffel, All Rights Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) enum s3cmci_waitfor {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) COMPLETION_NONE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) COMPLETION_FINALIZE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) COMPLETION_CMDSENT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) COMPLETION_RSPFIN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) COMPLETION_XFERFINISH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) COMPLETION_XFERFINISH_RSPFIN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) struct s3cmci_host {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) struct platform_device *pdev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) struct s3c24xx_mci_pdata *pdata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) struct mmc_host *mmc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) struct resource *mem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) struct clk *clk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) void __iomem *base;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) int irq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) int irq_cd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) struct dma_chan *dma;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) unsigned long clk_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) unsigned long clk_div;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) unsigned long real_rate;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) u8 prescaler;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) int is2440;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) unsigned sdiimsk;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) unsigned sdidata;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) bool irq_disabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) bool irq_enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) bool irq_state;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) int sdio_irqen;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) struct mmc_request *mrq;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) int cmd_is_stop;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) spinlock_t complete_lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) enum s3cmci_waitfor complete_what;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) int dma_complete;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) u32 pio_sgptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) u32 pio_bytes;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) u32 pio_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) u32 *pio_ptr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) #define XFER_NONE 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) #define XFER_READ 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) #define XFER_WRITE 2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) u32 pio_active;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) int bus_width;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) char dbgmsg_cmd[301];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) char dbgmsg_dat[301];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) char *status;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) unsigned int ccnt, dcnt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) struct tasklet_struct pio_tasklet;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) #ifdef CONFIG_DEBUG_FS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) struct dentry *debug_root;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) #ifdef CONFIG_ARM_S3C24XX_CPUFREQ
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) struct notifier_block freq_transition;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) };