#include <linux/pci.h>
#include <linux/module.h>
#include <linux/dma-mapping.h>
#include <linux/highmem.h>
#include <linux/delay.h>
#include <linux/interrupt.h>
#include <linux/mmc/host.h>
#include <linux/workqueue.h>
#define DRV_NAME …
#define PCI_DEVICE_ID_VIA_9530 …
#define VIA_CRDR_SDC_OFF …
#define VIA_CRDR_DDMA_OFF …
#define VIA_CRDR_PCICTRL_OFF …
#define VIA_CRDR_MIN_CLOCK …
#define VIA_CRDR_MAX_CLOCK …
#define VIA_CRDR_PCI_WORK_MODE …
#define VIA_CRDR_PCI_DBG_MODE …
#define VIA_CRDR_SDCTRL …
#define VIA_CRDR_SDCTRL_START …
#define VIA_CRDR_SDCTRL_WRITE …
#define VIA_CRDR_SDCTRL_SINGLE_WR …
#define VIA_CRDR_SDCTRL_SINGLE_RD …
#define VIA_CRDR_SDCTRL_MULTI_WR …
#define VIA_CRDR_SDCTRL_MULTI_RD …
#define VIA_CRDR_SDCTRL_STOP …
#define VIA_CRDR_SDCTRL_RSP_NONE …
#define VIA_CRDR_SDCTRL_RSP_R1 …
#define VIA_CRDR_SDCTRL_RSP_R2 …
#define VIA_CRDR_SDCTRL_RSP_R3 …
#define VIA_CRDR_SDCTRL_RSP_R1B …
#define VIA_CRDR_SDCARG …
#define VIA_CRDR_SDBUSMODE …
#define VIA_CRDR_SDMODE_4BIT …
#define VIA_CRDR_SDMODE_CLK_ON …
#define VIA_CRDR_SDBLKLEN …
#define VIA_CRDR_SDBLKLEN_GPIDET …
#define VIA_CRDR_SDBLKLEN_INTEN …
#define VIA_CRDR_MAX_BLOCK_COUNT …
#define VIA_CRDR_MAX_BLOCK_LENGTH …
#define VIA_CRDR_SDRESP0 …
#define VIA_CRDR_SDRESP1 …
#define VIA_CRDR_SDRESP2 …
#define VIA_CRDR_SDRESP3 …
#define VIA_CRDR_SDCURBLKCNT …
#define VIA_CRDR_SDINTMASK …
#define VIA_CRDR_SDINTMASK_MBDIE …
#define VIA_CRDR_SDINTMASK_BDDIE …
#define VIA_CRDR_SDINTMASK_CIRIE …
#define VIA_CRDR_SDINTMASK_CRDIE …
#define VIA_CRDR_SDINTMASK_CRTOIE …
#define VIA_CRDR_SDINTMASK_ASCRDIE …
#define VIA_CRDR_SDINTMASK_DTIE …
#define VIA_CRDR_SDINTMASK_SCIE …
#define VIA_CRDR_SDINTMASK_RCIE …
#define VIA_CRDR_SDINTMASK_WCIE …
#define VIA_CRDR_SDACTIVE_INTMASK …
#define VIA_CRDR_SDSTATUS …
#define VIA_CRDR_SDSTS_CECC …
#define VIA_CRDR_SDSTS_WP …
#define VIA_CRDR_SDSTS_SLOTD …
#define VIA_CRDR_SDSTS_SLOTG …
#define VIA_CRDR_SDSTS_MBD …
#define VIA_CRDR_SDSTS_BDD …
#define VIA_CRDR_SDSTS_CD …
#define VIA_CRDR_SDSTS_CIR …
#define VIA_CRDR_SDSTS_IO …
#define VIA_CRDR_SDSTS_CRD …
#define VIA_CRDR_SDSTS_CRTO …
#define VIA_CRDR_SDSTS_ASCRDIE …
#define VIA_CRDR_SDSTS_DT …
#define VIA_CRDR_SDSTS_SC …
#define VIA_CRDR_SDSTS_RC …
#define VIA_CRDR_SDSTS_WC …
#define VIA_CRDR_SDSTS_IGN_MASK …
#define VIA_CRDR_SDSTS_INT_MASK …
#define VIA_CRDR_SDSTS_W1C_MASK …
#define VIA_CRDR_SDSTS_CMD_MASK …
#define VIA_CRDR_SDSTS_DATA_MASK …
#define VIA_CRDR_SDSTATUS2 …
#define VIA_CRDR_SDSTS_CFE …
#define VIA_CRDR_SDRSPTMO …
#define VIA_CRDR_SDCLKSEL …
#define VIA_CRDR_SDEXTCTRL …
#define VIS_CRDR_SDEXTCTRL_AUTOSTOP_SD …
#define VIS_CRDR_SDEXTCTRL_SHIFT_9 …
#define VIS_CRDR_SDEXTCTRL_MMC_8BIT …
#define VIS_CRDR_SDEXTCTRL_RELD_BLK …
#define VIS_CRDR_SDEXTCTRL_BAD_CMDA …
#define VIS_CRDR_SDEXTCTRL_BAD_DATA …
#define VIS_CRDR_SDEXTCTRL_AUTOSTOP_SPI …
#define VIA_CRDR_SDEXTCTRL_HISPD …
#define VIA_CRDR_DMABASEADD …
#define VIA_CRDR_DMACOUNTER …
#define VIA_CRDR_DMACTRL …
#define VIA_CRDR_DMACTRL_DIR …
#define VIA_CRDR_DMACTRL_ENIRQ …
#define VIA_CRDR_DMACTRL_SFTRST …
#define VIA_CRDR_DMASTS …
#define VIA_CRDR_DMASTART …
#define VIA_CRDR_PCICLKGATT …
#define VIA_CRDR_PCICLKGATT_SFTRST …
#define VIA_CRDR_PCICLKGATT_3V3 …
#define VIA_CRDR_PCICLKGATT_PAD_PWRON …
#define VIA_CRDR_PCISDCCLK …
#define VIA_CRDR_PCIDMACLK …
#define VIA_CRDR_PCIDMACLK_SDC …
#define VIA_CRDR_PCIINTCTRL …
#define VIA_CRDR_PCIINTCTRL_SDCIRQEN …
#define VIA_CRDR_PCIINTSTATUS …
#define VIA_CRDR_PCIINTSTATUS_SDC …
#define VIA_CRDR_PCITMOCTRL …
#define VIA_CRDR_PCITMOCTRL_NO …
#define VIA_CRDR_PCITMOCTRL_32US …
#define VIA_CRDR_PCITMOCTRL_256US …
#define VIA_CRDR_PCITMOCTRL_1024US …
#define VIA_CRDR_PCITMOCTRL_256MS …
#define VIA_CRDR_PCITMOCTRL_512MS …
#define VIA_CRDR_PCITMOCTRL_1024MS …
enum PCI_HOST_CLK_CONTROL { … };
struct sdhcreg { … };
struct pcictrlreg { … };
struct via_crdr_mmc_host { … };
#define VIA_CRDR_QUIRK_300MS_PWRDELAY …
#define VIA_CMD_TIMEOUT_MS …
static const struct pci_device_id via_ids[] = …;
MODULE_DEVICE_TABLE(pci, via_ids);
static void via_print_sdchc(struct via_crdr_mmc_host *host)
{ … }
static void via_print_pcictrl(struct via_crdr_mmc_host *host)
{ … }
static void via_save_pcictrlreg(struct via_crdr_mmc_host *host)
{ … }
static void via_restore_pcictrlreg(struct via_crdr_mmc_host *host)
{ … }
static void via_save_sdcreg(struct via_crdr_mmc_host *host)
{ … }
static void via_restore_sdcreg(struct via_crdr_mmc_host *host)
{ … }
static void via_pwron_sleep(struct via_crdr_mmc_host *sdhost)
{ … }
static void via_set_ddma(struct via_crdr_mmc_host *host,
dma_addr_t dmaaddr, u32 count, int dir, int enirq)
{ … }
static void via_sdc_preparedata(struct via_crdr_mmc_host *host,
struct mmc_data *data)
{ … }
static void via_sdc_get_response(struct via_crdr_mmc_host *host,
struct mmc_command *cmd)
{ … }
static void via_sdc_send_command(struct via_crdr_mmc_host *host,
struct mmc_command *cmd)
{ … }
static void via_sdc_finish_data(struct via_crdr_mmc_host *host)
{ … }
static void via_sdc_finish_command(struct via_crdr_mmc_host *host)
{ … }
static void via_sdc_request(struct mmc_host *mmc, struct mmc_request *mrq)
{ … }
static void via_sdc_set_power(struct via_crdr_mmc_host *host,
unsigned short power, unsigned int on)
{ … }
static void via_sdc_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
{ … }
static int via_sdc_get_ro(struct mmc_host *mmc)
{ … }
static const struct mmc_host_ops via_sdc_ops = …;
static void via_reset_pcictrl(struct via_crdr_mmc_host *host)
{ … }
static void via_sdc_cmd_isr(struct via_crdr_mmc_host *host, u16 intmask)
{ … }
static void via_sdc_data_isr(struct via_crdr_mmc_host *host, u16 intmask)
{ … }
static irqreturn_t via_sdc_isr(int irq, void *dev_id)
{ … }
static void via_sdc_timeout(struct timer_list *t)
{ … }
static void via_sdc_finish_bh_work(struct work_struct *t)
{ … }
static void via_sdc_card_detect(struct work_struct *work)
{ … }
static void via_init_mmc_host(struct via_crdr_mmc_host *host)
{ … }
static int via_sd_probe(struct pci_dev *pcidev,
const struct pci_device_id *id)
{ … }
static void via_sd_remove(struct pci_dev *pcidev)
{ … }
static void __maybe_unused via_init_sdc_pm(struct via_crdr_mmc_host *host)
{ … }
static int __maybe_unused via_sd_suspend(struct device *dev)
{ … }
static int __maybe_unused via_sd_resume(struct device *dev)
{ … }
static SIMPLE_DEV_PM_OPS(via_sd_pm_ops, via_sd_suspend, via_sd_resume);
static struct pci_driver via_sd_driver = …;
module_pci_driver(…) …;
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;