SDIO WiFi (Libertas : Marvell 88W8686)

Hi everyone,

I try to porting Libertas driver of linux (http://linuxwireless.org/en/users/Drivers/libertas) last week.
After several days working , the driver work now (2.6.26 with muru patch).
But the performance of driver is bad. The ping RTT is ~25ms , and the ftp throughput below 100KB/s.

I know the key problem of performance is SDIO card interrupt is not supported by current omap
mmc host implementation (2.6.26).

I try to modify the host driver to support SDIO irq.
But the card interrupt never occur after the new initialize code to enable SDIO card interrupt.

According the MMC/SD/SDIO manual of OMAP35X (sprfd2d.pdf) page 28,29.
I modified the host driver at following part mail. But that don’t work now.

Do anyone have OMAP3430/OMAP3530 for WinCE BSP could provide the exmaple to enable/disable/handle
SDIO card interrupt or provide any workable patch for my experiment ?

Thanks for your advice.

Claud Yu

-------------- Enable/Disable SDIO function ------------------
#define CIRQ_ENABLE (1<<8)
static void omap_mmc_enable_sdio_irq(
struct mmc_host *mmc, int enable)
{
struct mmc_omap_host *host = mmc_priv(mmc);
unsigned long flags;
u32 reg;

reg = INT_EN_MASK;
reg &= ~CIRQ_ENABLE;

if (enable)
reg |= CIRQ_ENABLE;

OMAP_HSMMC_WRITE(host->base, ISE, reg);
OMAP_HSMMC_WRITE(host->base, IE, reg);

mmiowb();
}

-------------- Handle code of static irqreturn_t mmc_omap_irq ----------------

if (status & (CIRQ_ENABLE)) {
printk(“MMC: Card Interrupt.\n”);
mmc_signal_sdio_irq(host->mmc);
}