Lines Matching refs:host

21 #include <linux/mmc/host.h>
35 static void toshsd_init(struct toshsd_host *host)
38 pci_write_config_byte(host->pdev, SD_PCICFG_CLKSTOP,
40 pci_write_config_byte(host->pdev, SD_PCICFG_CARDDETECT, 2);
43 iowrite16(0, host->ioaddr + SD_SOFTWARERESET); /* assert */
45 iowrite16(1, host->ioaddr + SD_SOFTWARERESET); /* deassert */
49 iowrite16(0, host->ioaddr + SD_CARDCLOCKCTRL);
50 iowrite32(0, host->ioaddr + SD_CARDSTATUS);
51 iowrite32(0, host->ioaddr + SD_ERRORSTATUS0);
52 iowrite16(0, host->ioaddr + SD_STOPINTERNAL);
55 iowrite16(0x100, host->ioaddr + SDIO_BASE + SDIO_CLOCKNWAITCTRL);
58 pci_write_config_byte(host->pdev, SD_PCICFG_SDLED_ENABLE1,
60 pci_write_config_byte(host->pdev, SD_PCICFG_SDLED_ENABLE2,
68 host->ioaddr + SD_INTMASKCARD);
70 iowrite16(0x1000, host->ioaddr + SD_TRANSACTIONCTRL);
80 struct toshsd_host *host = mmc_priv(mmc);
92 pci_write_config_byte(host->pdev, SD_PCICFG_CLKMODE,
96 pci_write_config_byte(host->pdev, SD_PCICFG_CLKMODE, 0);
99 iowrite16(clk, host->ioaddr + SD_CARDCLOCKCTRL);
103 iowrite16(0, host->ioaddr + SD_CARDCLOCKCTRL);
107 pci_write_config_byte(host->pdev, SD_PCICFG_POWER1,
114 pci_write_config_byte(host->pdev, SD_PCICFG_POWER1,
116 pci_write_config_byte(host->pdev, SD_PCICFG_POWER2,
127 host->ioaddr + SD_CARDOPTIONSETUP);
133 host->ioaddr + SD_CARDOPTIONSETUP);
138 static void toshsd_set_led(struct toshsd_host *host, unsigned char state)
140 iowrite16(state, host->ioaddr + SDIO_BASE + SDIO_LEDCTRL);
143 static void toshsd_finish_request(struct toshsd_host *host)
145 struct mmc_request *mrq = host->mrq;
148 host->mrq = NULL;
149 host->cmd = NULL;
150 host->data = NULL;
152 toshsd_set_led(host, 0);
153 mmc_request_done(host->mmc, mrq);
158 struct toshsd_host *host = dev_id;
159 struct mmc_data *data = host->data;
160 struct sg_mapping_iter *sg_miter = &host->sg_miter;
166 dev_warn(&host->pdev->dev, "Spurious Data IRQ\n");
167 if (host->cmd) {
168 host->cmd->error = -EIO;
169 toshsd_finish_request(host);
173 spin_lock_irqsave(&host->lock, flags);
187 dev_dbg(&host->pdev->dev, "count: %08x, flags %08x\n", count,
192 ioread32_rep(host->ioaddr + SD_DATAPORT, buf, count >> 2);
194 iowrite32_rep(host->ioaddr + SD_DATAPORT, buf, count >> 2);
200 spin_unlock_irqrestore(&host->lock, flags);
205 static void toshsd_cmd_irq(struct toshsd_host *host)
207 struct mmc_command *cmd = host->cmd;
211 if (!host->cmd) {
212 dev_warn(&host->pdev->dev, "Spurious CMD irq\n");
216 host->cmd = NULL;
221 data = ioread16(host->ioaddr + SD_RESPONSE0);
224 data = ioread16(host->ioaddr + SD_RESPONSE1);
227 data = ioread16(host->ioaddr + SD_RESPONSE2);
230 data = ioread16(host->ioaddr + SD_RESPONSE3);
233 data = ioread16(host->ioaddr + SD_RESPONSE4);
236 data = ioread16(host->ioaddr + SD_RESPONSE5);
239 data = ioread16(host->ioaddr + SD_RESPONSE6);
242 data = ioread16(host->ioaddr + SD_RESPONSE7);
246 data = ioread16(host->ioaddr + SD_RESPONSE0);
249 data = ioread16(host->ioaddr + SD_RESPONSE1);
254 dev_dbg(&host->pdev->dev, "Command IRQ complete %d %d %x\n",
259 if (host->data)
262 toshsd_finish_request(host);
265 static void toshsd_data_end_irq(struct toshsd_host *host)
267 struct mmc_data *data = host->data;
269 host->data = NULL;
272 dev_warn(&host->pdev->dev, "Spurious data end IRQ\n");
281 dev_dbg(&host->pdev->dev, "Completed data request xfr=%d\n",
284 iowrite16(0, host->ioaddr + SD_STOPINTERNAL);
286 toshsd_finish_request(host);
291 struct toshsd_host *host = dev_id;
295 spin_lock(&host->lock);
296 int_status = ioread32(host->ioaddr + SD_CARDSTATUS);
297 int_mask = ioread32(host->ioaddr + SD_INTMASKCARD);
300 dev_dbg(&host->pdev->dev, "IRQ status:%x mask:%x\n",
311 dev_dbg(&host->pdev->dev, "Timeout\n");
314 dev_err(&host->pdev->dev, "BadCRC\n");
321 dev_err(&host->pdev->dev, "Buffer status error: { %s%s%s%s%s%s}\n",
329 detail = ioread32(host->ioaddr + SD_ERRORSTATUS0);
330 dev_err(&host->pdev->dev, "detail error status { %s%s%s%s%s%s%s%s%s%s%s%s%s}\n",
348 if (host->cmd)
349 host->cmd->error = error;
354 host->ioaddr + SD_CARDSTATUS);
356 toshsd_init(host);
357 __toshsd_set_ios(host->mmc, &host->mmc->ios);
366 host->ioaddr + SD_CARDSTATUS);
369 toshsd_init(host);
371 mmc_detect_change(host->mmc, 1);
378 host->ioaddr + SD_CARDSTATUS);
387 host->ioaddr + SD_CARDSTATUS);
388 toshsd_cmd_irq(host);
394 host->ioaddr + SD_CARDSTATUS);
395 toshsd_data_end_irq(host);
398 spin_unlock(&host->lock);
402 static void toshsd_start_cmd(struct toshsd_host *host, struct mmc_command *cmd)
404 struct mmc_data *data = host->data;
407 dev_dbg(&host->pdev->dev, "Command opcode: %d\n", cmd->opcode);
411 host->ioaddr + SD_STOPINTERNAL);
418 toshsd_finish_request(host);
441 dev_err(&host->pdev->dev, "Unknown response type %d\n",
446 host->cmd = cmd;
459 host->ioaddr + SD_STOPINTERNAL);
470 iowrite32(cmd->arg, host->ioaddr + SD_ARG0);
471 iowrite16(c, host->ioaddr + SD_CMD);
474 static void toshsd_start_data(struct toshsd_host *host, struct mmc_data *data)
478 dev_dbg(&host->pdev->dev, "setup data transfer: blocksize %08x nr_blocks %d, offset: %08x\n",
481 host->data = data;
488 sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);
491 iowrite16(data->blocks, host->ioaddr + SD_BLOCKCOUNT);
492 iowrite16(data->blksz, host->ioaddr + SD_CARDXFERDATALEN);
498 struct toshsd_host *host = mmc_priv(mmc);
502 if (!(ioread16(host->ioaddr + SD_CARDSTATUS) & SD_CARD_PRESENT_0)) {
508 spin_lock_irqsave(&host->lock, flags);
510 WARN_ON(host->mrq != NULL);
512 host->mrq = mrq;
515 toshsd_start_data(host, mrq->data);
517 toshsd_set_led(host, 1);
519 toshsd_start_cmd(host, mrq->cmd);
521 spin_unlock_irqrestore(&host->lock, flags);
526 struct toshsd_host *host = mmc_priv(mmc);
529 spin_lock_irqsave(&host->lock, flags);
531 spin_unlock_irqrestore(&host->lock, flags);
536 struct toshsd_host *host = mmc_priv(mmc);
539 return !(ioread16(host->ioaddr + SD_CARDSTATUS) & SD_CARD_WRITE_PROTECT);
544 struct toshsd_host *host = mmc_priv(mmc);
546 return !!(ioread16(host->ioaddr + SD_CARDSTATUS) & SD_CARD_PRESENT_0);
557 static void toshsd_powerdown(struct toshsd_host *host)
560 iowrite32(0xffffffff, host->ioaddr + SD_INTMASKCARD);
562 iowrite16(0x000, host->ioaddr + SDIO_BASE + SDIO_CLOCKNWAITCTRL);
563 iowrite16(0, host->ioaddr + SD_CARDCLOCKCTRL);
565 pci_write_config_byte(host->pdev, SD_PCICFG_POWER1, SD_PCICFG_PWR1_OFF);
567 pci_write_config_byte(host->pdev, SD_PCICFG_CLKSTOP, 0);
574 struct toshsd_host *host = pci_get_drvdata(pdev);
576 toshsd_powerdown(host);
589 struct toshsd_host *host = pci_get_drvdata(pdev);
598 toshsd_init(host);
607 struct toshsd_host *host;
621 host = mmc_priv(mmc);
622 host->mmc = mmc;
624 host->pdev = pdev;
625 pci_set_drvdata(pdev, host);
631 host->ioaddr = pci_iomap(pdev, 0, 0);
632 if (!host->ioaddr) {
637 /* Set MMC host parameters */
645 spin_lock_init(&host->lock);
647 toshsd_init(host);
650 IRQF_SHARED, DRIVER_NAME, host);
666 free_irq(pdev->irq, host);
668 pci_iounmap(pdev, host->ioaddr);
681 struct toshsd_host *host = pci_get_drvdata(pdev);
683 mmc_remove_host(host->mmc);
684 toshsd_powerdown(host);
685 free_irq(pdev->irq, host);
686 pci_iounmap(pdev, host->ioaddr);
688 mmc_free_host(host->mmc);