1 /*
2  *  linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
3  *
4  *  Copyright (C) 2004-2006 Thomas Kleffel, All Rights Reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10 
11 enum s3cmci_waitfor {
12 	COMPLETION_NONE,
13 	COMPLETION_FINALIZE,
14 	COMPLETION_CMDSENT,
15 	COMPLETION_RSPFIN,
16 	COMPLETION_XFERFINISH,
17 	COMPLETION_XFERFINISH_RSPFIN,
18 };
19 
20 struct s3cmci_host {
21 	struct platform_device	*pdev;
22 	struct s3c24xx_mci_pdata *pdata;
23 	struct mmc_host		*mmc;
24 	struct resource		*mem;
25 	struct clk		*clk;
26 	void __iomem		*base;
27 	int			irq;
28 	int			irq_cd;
29 	int			dma;
30 
31 	unsigned long		clk_rate;
32 	unsigned long		clk_div;
33 	unsigned long		real_rate;
34 	u8			prescaler;
35 
36 	int			is2440;
37 	unsigned		sdiimsk;
38 	unsigned		sdidata;
39 	int			dodma;
40 	int			dmatogo;
41 
42 	bool			irq_disabled;
43 	bool			irq_enabled;
44 	bool			irq_state;
45 	int			sdio_irqen;
46 
47 	struct mmc_request	*mrq;
48 	int			cmd_is_stop;
49 
50 	spinlock_t		complete_lock;
51 	enum s3cmci_waitfor	complete_what;
52 
53 	int			dma_complete;
54 
55 	u32			pio_sgptr;
56 	u32			pio_bytes;
57 	u32			pio_count;
58 	u32			*pio_ptr;
59 #define XFER_NONE 0
60 #define XFER_READ 1
61 #define XFER_WRITE 2
62 	u32			pio_active;
63 
64 	int			bus_width;
65 
66 	char 			dbgmsg_cmd[301];
67 	char 			dbgmsg_dat[301];
68 	char			*status;
69 
70 	unsigned int		ccnt, dcnt;
71 	struct tasklet_struct	pio_tasklet;
72 
73 #ifdef CONFIG_DEBUG_FS
74 	struct dentry		*debug_root;
75 	struct dentry		*debug_state;
76 	struct dentry		*debug_regs;
77 #endif
78 
79 #ifdef CONFIG_CPU_FREQ
80 	struct notifier_block	freq_transition;
81 #endif
82 };
83