mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-22 10:34:55 +08:00
c225889375
The controller supports SDIO IRQ detection so add support for hardware assisted SDIO interrupt detection for the SDIO core. This improves the response time for SDIO interrupts and thus the transfer rate from devices such as the Marvel 8686. As a note, it does seem that the controller will miss an IRQ than is held asserted, so there are some manual checks to see if the SDIO interrupt is active after a transfer. Major testing on the S3C2440. Signed-off-by: Ben Dooks <ben@simtec.co.uk> Cc: <linux-mmc@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
86 lines
1.6 KiB
C
86 lines
1.6 KiB
C
/*
|
|
* linux/drivers/mmc/s3cmci.h - Samsung S3C MCI driver
|
|
*
|
|
* Copyright (C) 2004-2006 Thomas Kleffel, All Rights Reserved.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*/
|
|
|
|
/* FIXME: DMA Resource management ?! */
|
|
#define S3CMCI_DMA 0
|
|
|
|
enum s3cmci_waitfor {
|
|
COMPLETION_NONE,
|
|
COMPLETION_FINALIZE,
|
|
COMPLETION_CMDSENT,
|
|
COMPLETION_RSPFIN,
|
|
COMPLETION_XFERFINISH,
|
|
COMPLETION_XFERFINISH_RSPFIN,
|
|
};
|
|
|
|
struct s3cmci_host {
|
|
struct platform_device *pdev;
|
|
struct s3c24xx_mci_pdata *pdata;
|
|
struct mmc_host *mmc;
|
|
struct resource *mem;
|
|
struct clk *clk;
|
|
void __iomem *base;
|
|
int irq;
|
|
int irq_cd;
|
|
int dma;
|
|
|
|
unsigned long clk_rate;
|
|
unsigned long clk_div;
|
|
unsigned long real_rate;
|
|
u8 prescaler;
|
|
|
|
int is2440;
|
|
unsigned sdiimsk;
|
|
unsigned sdidata;
|
|
int dodma;
|
|
int dmatogo;
|
|
|
|
bool irq_disabled;
|
|
bool irq_enabled;
|
|
bool irq_state;
|
|
int sdio_irqen;
|
|
|
|
struct mmc_request *mrq;
|
|
int cmd_is_stop;
|
|
|
|
spinlock_t complete_lock;
|
|
enum s3cmci_waitfor complete_what;
|
|
|
|
int dma_complete;
|
|
|
|
u32 pio_sgptr;
|
|
u32 pio_bytes;
|
|
u32 pio_count;
|
|
u32 *pio_ptr;
|
|
#define XFER_NONE 0
|
|
#define XFER_READ 1
|
|
#define XFER_WRITE 2
|
|
u32 pio_active;
|
|
|
|
int bus_width;
|
|
|
|
char dbgmsg_cmd[301];
|
|
char dbgmsg_dat[301];
|
|
char *status;
|
|
|
|
unsigned int ccnt, dcnt;
|
|
struct tasklet_struct pio_tasklet;
|
|
|
|
#ifdef CONFIG_DEBUG_FS
|
|
struct dentry *debug_root;
|
|
struct dentry *debug_state;
|
|
struct dentry *debug_regs;
|
|
#endif
|
|
|
|
#ifdef CONFIG_CPU_FREQ
|
|
struct notifier_block freq_transition;
|
|
#endif
|
|
};
|