97 lines
2.3 KiB
C
97 lines
2.3 KiB
C
|
#ifndef _AU1XMMC_H_
|
||
|
#define _AU1XMMC_H_
|
||
|
|
||
|
/* Hardware definitions */
|
||
|
|
||
|
#define AU1XMMC_DESCRIPTOR_COUNT 1
|
||
|
#define AU1XMMC_DESCRIPTOR_SIZE 2048
|
||
|
|
||
|
#define AU1XMMC_OCR ( MMC_VDD_27_28 | MMC_VDD_28_29 | MMC_VDD_29_30 | \
|
||
|
MMC_VDD_30_31 | MMC_VDD_31_32 | MMC_VDD_32_33 | \
|
||
|
MMC_VDD_33_34 | MMC_VDD_34_35 | MMC_VDD_35_36)
|
||
|
|
||
|
/* Easy access macros */
|
||
|
|
||
|
#define HOST_STATUS(h) ((h)->iobase + SD_STATUS)
|
||
|
#define HOST_CONFIG(h) ((h)->iobase + SD_CONFIG)
|
||
|
#define HOST_ENABLE(h) ((h)->iobase + SD_ENABLE)
|
||
|
#define HOST_TXPORT(h) ((h)->iobase + SD_TXPORT)
|
||
|
#define HOST_RXPORT(h) ((h)->iobase + SD_RXPORT)
|
||
|
#define HOST_CMDARG(h) ((h)->iobase + SD_CMDARG)
|
||
|
#define HOST_BLKSIZE(h) ((h)->iobase + SD_BLKSIZE)
|
||
|
#define HOST_CMD(h) ((h)->iobase + SD_CMD)
|
||
|
#define HOST_CONFIG2(h) ((h)->iobase + SD_CONFIG2)
|
||
|
#define HOST_TIMEOUT(h) ((h)->iobase + SD_TIMEOUT)
|
||
|
#define HOST_DEBUG(h) ((h)->iobase + SD_DEBUG)
|
||
|
|
||
|
#define DMA_CHANNEL(h) \
|
||
|
( ((h)->flags & HOST_F_XMIT) ? (h)->tx_chan : (h)->rx_chan)
|
||
|
|
||
|
/* This gives us a hard value for the stop command that we can write directly
|
||
|
* to the command register
|
||
|
*/
|
||
|
|
||
|
#define STOP_CMD (SD_CMD_RT_1B|SD_CMD_CT_7|(0xC << SD_CMD_CI_SHIFT)|SD_CMD_GO)
|
||
|
|
||
|
/* This is the set of interrupts that we configure by default */
|
||
|
|
||
|
#if 0
|
||
|
#define AU1XMMC_INTERRUPTS (SD_CONFIG_SC | SD_CONFIG_DT | SD_CONFIG_DD | \
|
||
|
SD_CONFIG_RAT | SD_CONFIG_CR | SD_CONFIG_I)
|
||
|
#endif
|
||
|
|
||
|
#define AU1XMMC_INTERRUPTS (SD_CONFIG_SC | SD_CONFIG_DT | \
|
||
|
SD_CONFIG_RAT | SD_CONFIG_CR | SD_CONFIG_I)
|
||
|
/* The poll event (looking for insert/remove events runs twice a second */
|
||
|
#define AU1XMMC_DETECT_TIMEOUT (HZ/2)
|
||
|
|
||
|
struct au1xmmc_host {
|
||
|
struct mmc_host *mmc;
|
||
|
struct mmc_request *mrq;
|
||
|
|
||
|
u32 id;
|
||
|
|
||
|
u32 flags;
|
||
|
u32 iobase;
|
||
|
u32 clock;
|
||
|
u32 bus_width;
|
||
|
u32 power_mode;
|
||
|
|
||
|
int status;
|
||
|
|
||
|
struct {
|
||
|
int len;
|
||
|
int dir;
|
||
|
} dma;
|
||
|
|
||
|
struct {
|
||
|
int index;
|
||
|
int offset;
|
||
|
int len;
|
||
|
} pio;
|
||
|
|
||
|
u32 tx_chan;
|
||
|
u32 rx_chan;
|
||
|
|
||
|
struct timer_list timer;
|
||
|
struct tasklet_struct finish_task;
|
||
|
struct tasklet_struct data_task;
|
||
|
|
||
|
spinlock_t lock;
|
||
|
};
|
||
|
|
||
|
/* Status flags used by the host structure */
|
||
|
|
||
|
#define HOST_F_XMIT 0x0001
|
||
|
#define HOST_F_RECV 0x0002
|
||
|
#define HOST_F_DMA 0x0010
|
||
|
#define HOST_F_ACTIVE 0x0100
|
||
|
#define HOST_F_STOP 0x1000
|
||
|
|
||
|
#define HOST_S_IDLE 0x0001
|
||
|
#define HOST_S_CMD 0x0002
|
||
|
#define HOST_S_DATA 0x0003
|
||
|
#define HOST_S_STOP 0x0004
|
||
|
|
||
|
#endif
|