• Home
  • Raw
  • Download

Lines Matching full:esp

3  * ESP front-end for Amiga ZORRO SCSI systems.
8 * migration to ESP SCSI core
13 * Copyright (C) 2017 Finn Thain for PIO code from Mac ESP driver adapted here
54 MODULE_DESCRIPTION("Amiga Zorro NCR5C9x (ESP) driver");
160 struct esp *esp; /* our ESP instance - for Scsi_host* */ member
168 * On all implementations except for the Oktagon, padding between ESP
175 static void zorro_esp_write8(struct esp *esp, u8 val, unsigned long reg) in zorro_esp_write8() argument
177 writeb(val, esp->regs + (reg * 4UL)); in zorro_esp_write8()
180 static u8 zorro_esp_read8(struct esp *esp, unsigned long reg) in zorro_esp_read8() argument
182 return readb(esp->regs + (reg * 4UL)); in zorro_esp_read8()
185 static dma_addr_t zorro_esp_map_single(struct esp *esp, void *buf, in zorro_esp_map_single() argument
188 return dma_map_single(esp->dev, buf, sz, dir); in zorro_esp_map_single()
191 static int zorro_esp_map_sg(struct esp *esp, struct scatterlist *sg, in zorro_esp_map_sg() argument
194 return dma_map_sg(esp->dev, sg, num_sg, dir); in zorro_esp_map_sg()
197 static void zorro_esp_unmap_single(struct esp *esp, dma_addr_t addr, in zorro_esp_unmap_single() argument
200 dma_unmap_single(esp->dev, addr, sz, dir); in zorro_esp_unmap_single()
203 static void zorro_esp_unmap_sg(struct esp *esp, struct scatterlist *sg, in zorro_esp_unmap_sg() argument
206 dma_unmap_sg(esp->dev, sg, num_sg, dir); in zorro_esp_unmap_sg()
209 static int zorro_esp_irq_pending(struct esp *esp) in zorro_esp_irq_pending() argument
211 /* check ESP status register; DMA has no status reg. */ in zorro_esp_irq_pending()
212 if (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR) in zorro_esp_irq_pending()
218 static int cyber_esp_irq_pending(struct esp *esp) in cyber_esp_irq_pending() argument
220 struct cyber_dma_registers __iomem *dregs = esp->dma_regs; in cyber_esp_irq_pending()
224 return ((zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR) && in cyber_esp_irq_pending()
228 static int fastlane_esp_irq_pending(struct esp *esp) in fastlane_esp_irq_pending() argument
230 struct fastlane_dma_registers __iomem *dregs = esp->dma_regs; in fastlane_esp_irq_pending()
238 /* Return non-zero if ESP requested IRQ */ in fastlane_esp_irq_pending()
242 (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR)); in fastlane_esp_irq_pending()
245 static u32 zorro_esp_dma_length_limit(struct esp *esp, u32 dma_addr, in zorro_esp_dma_length_limit() argument
251 static u32 fastlane_esp_dma_length_limit(struct esp *esp, u32 dma_addr, in fastlane_esp_dma_length_limit() argument
258 static void zorro_esp_reset_dma(struct esp *esp) in zorro_esp_reset_dma() argument
263 static void zorro_esp_dma_drain(struct esp *esp) in zorro_esp_dma_drain() argument
268 static void zorro_esp_dma_invalidate(struct esp *esp) in zorro_esp_dma_invalidate() argument
273 static void fastlane_esp_dma_invalidate(struct esp *esp) in fastlane_esp_dma_invalidate() argument
275 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in fastlane_esp_dma_invalidate()
276 struct fastlane_dma_registers __iomem *dregs = esp->dma_regs; in fastlane_esp_dma_invalidate()
288 static inline unsigned int zorro_esp_wait_for_fifo(struct esp *esp) in zorro_esp_wait_for_fifo() argument
293 unsigned int fbytes = zorro_esp_read8(esp, ESP_FFLAGS) in zorro_esp_wait_for_fifo()
303 zorro_esp_read8(esp, ESP_STATUS)); in zorro_esp_wait_for_fifo()
307 static inline int zorro_esp_wait_for_intr(struct esp *esp) in zorro_esp_wait_for_intr() argument
309 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_wait_for_intr()
313 esp->sreg = zorro_esp_read8(esp, ESP_STATUS); in zorro_esp_wait_for_intr()
314 if (esp->sreg & ESP_STAT_INTR) in zorro_esp_wait_for_intr()
320 pr_err("IRQ timeout (sreg %02x)\n", esp->sreg); in zorro_esp_wait_for_intr()
365 static void zorro_esp_send_pio_cmd(struct esp *esp, u32 addr, u32 esp_count, in zorro_esp_send_pio_cmd() argument
368 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_pio_cmd()
369 u8 __iomem *fifo = esp->regs + ESP_FDATA * 16; in zorro_esp_send_pio_cmd()
370 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_pio_cmd()
378 scsi_esp_cmd(esp, cmd); in zorro_esp_send_pio_cmd()
381 if (!zorro_esp_wait_for_fifo(esp)) in zorro_esp_send_pio_cmd()
384 *dst++ = zorro_esp_read8(esp, ESP_FDATA); in zorro_esp_send_pio_cmd()
390 if (zorro_esp_wait_for_intr(esp)) in zorro_esp_send_pio_cmd()
393 if ((esp->sreg & ESP_STAT_PMASK) != phase) in zorro_esp_send_pio_cmd()
396 esp->ireg = zorro_esp_read8(esp, ESP_INTRPT); in zorro_esp_send_pio_cmd()
397 if (esp->ireg & mask) { in zorro_esp_send_pio_cmd()
403 scsi_esp_cmd(esp, ESP_CMD_MOK); in zorro_esp_send_pio_cmd()
405 scsi_esp_cmd(esp, ESP_CMD_TI); in zorro_esp_send_pio_cmd()
408 scsi_esp_cmd(esp, ESP_CMD_FLUSH); in zorro_esp_send_pio_cmd()
415 scsi_esp_cmd(esp, cmd); in zorro_esp_send_pio_cmd()
420 if (zorro_esp_wait_for_intr(esp)) in zorro_esp_send_pio_cmd()
423 if ((esp->sreg & ESP_STAT_PMASK) != phase) in zorro_esp_send_pio_cmd()
426 esp->ireg = zorro_esp_read8(esp, ESP_INTRPT); in zorro_esp_send_pio_cmd()
427 if (esp->ireg & ~ESP_INTR_BSERV) { in zorro_esp_send_pio_cmd()
433 (zorro_esp_read8(esp, ESP_FFLAGS) & ESP_FF_FBYTES); in zorro_esp_send_pio_cmd()
444 scsi_esp_cmd(esp, ESP_CMD_TI); in zorro_esp_send_pio_cmd()
451 static void zorro_esp_send_blz1230_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_blz1230_dma_cmd() argument
454 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_blz1230_dma_cmd()
455 struct blz1230_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_blz1230_dma_cmd()
456 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_blz1230_dma_cmd()
460 * Use PIO if transferring message bytes to esp->command_block_dma. in zorro_esp_send_blz1230_dma_cmd()
461 * PIO requires a virtual address, so substitute esp->command_block in zorro_esp_send_blz1230_dma_cmd()
464 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_blz1230_dma_cmd()
465 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_blz1230_dma_cmd()
472 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz1230_dma_cmd()
476 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz1230_dma_cmd()
491 scsi_esp_cmd(esp, ESP_CMD_DMA); in zorro_esp_send_blz1230_dma_cmd()
492 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_blz1230_dma_cmd()
493 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_blz1230_dma_cmd()
495 scsi_esp_cmd(esp, cmd); in zorro_esp_send_blz1230_dma_cmd()
500 static void zorro_esp_send_blz1230II_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_blz1230II_dma_cmd() argument
503 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_blz1230II_dma_cmd()
504 struct blz1230II_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_blz1230II_dma_cmd()
505 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_blz1230II_dma_cmd()
508 /* Use PIO if transferring message bytes to esp->command_block_dma */ in zorro_esp_send_blz1230II_dma_cmd()
509 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_blz1230II_dma_cmd()
510 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_blz1230II_dma_cmd()
517 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz1230II_dma_cmd()
521 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz1230II_dma_cmd()
535 scsi_esp_cmd(esp, ESP_CMD_DMA); in zorro_esp_send_blz1230II_dma_cmd()
536 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_blz1230II_dma_cmd()
537 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_blz1230II_dma_cmd()
539 scsi_esp_cmd(esp, cmd); in zorro_esp_send_blz1230II_dma_cmd()
544 static void zorro_esp_send_blz2060_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_blz2060_dma_cmd() argument
547 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_blz2060_dma_cmd()
548 struct blz2060_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_blz2060_dma_cmd()
549 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_blz2060_dma_cmd()
552 /* Use PIO if transferring message bytes to esp->command_block_dma */ in zorro_esp_send_blz2060_dma_cmd()
553 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_blz2060_dma_cmd()
554 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_blz2060_dma_cmd()
561 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz2060_dma_cmd()
565 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_blz2060_dma_cmd()
579 scsi_esp_cmd(esp, ESP_CMD_DMA); in zorro_esp_send_blz2060_dma_cmd()
580 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_blz2060_dma_cmd()
581 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_blz2060_dma_cmd()
583 scsi_esp_cmd(esp, cmd); in zorro_esp_send_blz2060_dma_cmd()
588 static void zorro_esp_send_cyber_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_cyber_dma_cmd() argument
591 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_cyber_dma_cmd()
592 struct cyber_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_cyber_dma_cmd()
593 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_cyber_dma_cmd()
597 /* Use PIO if transferring message bytes to esp->command_block_dma */ in zorro_esp_send_cyber_dma_cmd()
598 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_cyber_dma_cmd()
599 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_cyber_dma_cmd()
604 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_cyber_dma_cmd()
605 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_cyber_dma_cmd()
609 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_cyber_dma_cmd()
614 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_cyber_dma_cmd()
633 scsi_esp_cmd(esp, cmd); in zorro_esp_send_cyber_dma_cmd()
638 static void zorro_esp_send_cyberII_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_cyberII_dma_cmd() argument
641 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_cyberII_dma_cmd()
642 struct cyberII_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_cyberII_dma_cmd()
643 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_cyberII_dma_cmd()
646 /* Use PIO if transferring message bytes to esp->command_block_dma */ in zorro_esp_send_cyberII_dma_cmd()
647 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_cyberII_dma_cmd()
648 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_cyberII_dma_cmd()
653 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_cyberII_dma_cmd()
654 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_cyberII_dma_cmd()
658 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_cyberII_dma_cmd()
663 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_cyberII_dma_cmd()
673 scsi_esp_cmd(esp, cmd); in zorro_esp_send_cyberII_dma_cmd()
678 static void zorro_esp_send_fastlane_dma_cmd(struct esp *esp, u32 addr, in zorro_esp_send_fastlane_dma_cmd() argument
681 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_send_fastlane_dma_cmd()
682 struct fastlane_dma_registers __iomem *dregs = esp->dma_regs; in zorro_esp_send_fastlane_dma_cmd()
683 u8 phase = esp->sreg & ESP_STAT_PMASK; in zorro_esp_send_fastlane_dma_cmd()
687 /* Use PIO if transferring message bytes to esp->command_block_dma */ in zorro_esp_send_fastlane_dma_cmd()
688 if (phase == ESP_MIP && addr == esp->command_block_dma) { in zorro_esp_send_fastlane_dma_cmd()
689 zorro_esp_send_pio_cmd(esp, (u32) esp->command_block, in zorro_esp_send_fastlane_dma_cmd()
694 zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW); in zorro_esp_send_fastlane_dma_cmd()
695 zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED); in zorro_esp_send_fastlane_dma_cmd()
699 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_fastlane_dma_cmd()
704 dma_sync_single_for_device(esp->dev, addr, esp_count, in zorro_esp_send_fastlane_dma_cmd()
723 scsi_esp_cmd(esp, cmd); in zorro_esp_send_fastlane_dma_cmd()
726 static int zorro_esp_dma_error(struct esp *esp) in zorro_esp_dma_error() argument
728 struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev); in zorro_esp_dma_error()
738 /* per-board ESP driver ops */
932 struct esp *esp; in zorro_esp_probe() local
968 * for presence of ESP chip later, but don't try to fix up yet. in zorro_esp_probe()
991 host = scsi_host_alloc(tpnt, sizeof(struct esp)); in zorro_esp_probe()
1002 esp = shost_priv(host); in zorro_esp_probe()
1003 esp->host = host; in zorro_esp_probe()
1004 esp->dev = &z->dev; in zorro_esp_probe()
1006 esp->scsi_id = host->this_id; in zorro_esp_probe()
1007 esp->scsi_id_mask = (1 << esp->scsi_id); in zorro_esp_probe()
1009 esp->cfreq = 40000000; in zorro_esp_probe()
1011 zep->esp = esp; in zorro_esp_probe()
1013 dev_set_drvdata(esp->dev, zep); in zorro_esp_probe()
1017 /* map full address space up to ESP base for DMA */ in zorro_esp_probe()
1030 esp->ops = zdd->esp_ops; in zorro_esp_probe()
1033 esp->regs = ioremap_nocache(ioaddr, 0x20); in zorro_esp_probe()
1036 esp->regs = ZTWO_VADDR(ioaddr); in zorro_esp_probe()
1038 if (!esp->regs) { in zorro_esp_probe()
1045 zorro_esp_write8(esp, (ESP_CONFIG1_PENABLE | 7), ESP_CFG1); in zorro_esp_probe()
1046 if (zorro_esp_read8(esp, ESP_CFG1) != (ESP_CONFIG1_PENABLE|7)) { in zorro_esp_probe()
1057 esp->dma_regs = ioremap_nocache(dmaaddr, in zorro_esp_probe()
1061 esp->dma_regs = ZTWO_VADDR(dmaaddr); in zorro_esp_probe()
1063 if (!esp->dma_regs) { in zorro_esp_probe()
1068 esp->command_block = dma_alloc_coherent(esp->dev, 16, in zorro_esp_probe()
1069 &esp->command_block_dma, in zorro_esp_probe()
1072 if (!esp->command_block) { in zorro_esp_probe()
1079 "Amiga Zorro ESP", esp); in zorro_esp_probe()
1086 err = scsi_esp_register(esp, &z->dev); in zorro_esp_probe()
1096 free_irq(host->irq, esp); in zorro_esp_probe()
1099 dma_free_coherent(esp->dev, 16, in zorro_esp_probe()
1100 esp->command_block, in zorro_esp_probe()
1101 esp->command_block_dma); in zorro_esp_probe()
1105 iounmap(esp->dma_regs); in zorro_esp_probe()
1109 iounmap(esp->regs); in zorro_esp_probe()
1130 struct esp *esp = zep->esp; in zorro_esp_remove() local
1131 struct Scsi_Host *host = esp->host; in zorro_esp_remove()
1133 scsi_esp_unregister(esp); in zorro_esp_remove()
1135 free_irq(host->irq, esp); in zorro_esp_remove()
1136 dma_free_coherent(esp->dev, 16, in zorro_esp_remove()
1137 esp->command_block, in zorro_esp_remove()
1138 esp->command_block_dma); in zorro_esp_remove()
1142 iounmap(esp->dma_regs); in zorro_esp_remove()
1146 iounmap(esp->regs); in zorro_esp_remove()