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