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  	struct dma_chan		*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  
40  	bool			irq_disabled;
41  	bool			irq_enabled;
42  	bool			irq_state;
43  	int			sdio_irqen;
44  
45  	struct mmc_request	*mrq;
46  	int			cmd_is_stop;
47  
48  	spinlock_t		complete_lock;
49  	enum s3cmci_waitfor	complete_what;
50  
51  	int			dma_complete;
52  
53  	u32			pio_sgptr;
54  	u32			pio_bytes;
55  	u32			pio_count;
56  	u32			*pio_ptr;
57  #define XFER_NONE 0
58  #define XFER_READ 1
59  #define XFER_WRITE 2
60  	u32			pio_active;
61  
62  	int			bus_width;
63  
64  	char 			dbgmsg_cmd[301];
65  	char 			dbgmsg_dat[301];
66  	char			*status;
67  
68  	unsigned int		ccnt, dcnt;
69  	struct tasklet_struct	pio_tasklet;
70  
71  #ifdef CONFIG_DEBUG_FS
72  	struct dentry		*debug_root;
73  	struct dentry		*debug_state;
74  	struct dentry		*debug_regs;
75  #endif
76  
77  #ifdef CONFIG_ARM_S3C24XX_CPUFREQ
78  	struct notifier_block	freq_transition;
79  #endif
80  };
81