cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

zorro_esp.c (25336B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * ESP front-end for Amiga ZORRO SCSI systems.
      4 *
      5 * Copyright (C) 1996 Jesper Skov (jskov@cygnus.co.uk)
      6 *
      7 * Copyright (C) 2011,2018 Michael Schmitz (schmitz@debian.org) for
      8 *               migration to ESP SCSI core
      9 *
     10 * Copyright (C) 2013 Tuomas Vainikka (tuomas.vainikka@aalto.fi) for
     11 *               Blizzard 1230 DMA and probe function fixes
     12 */
     13/*
     14 * ZORRO bus code from:
     15 */
     16/*
     17 * Detection routine for the NCR53c710 based Amiga SCSI Controllers for Linux.
     18 *		Amiga MacroSystemUS WarpEngine SCSI controller.
     19 *		Amiga Technologies/DKB A4091 SCSI controller.
     20 *
     21 * Written 1997 by Alan Hourihane <alanh@fairlite.demon.co.uk>
     22 * plus modifications of the 53c7xx.c driver to support the Amiga.
     23 *
     24 * Rewritten to use 53c700.c by Kars de Jong <jongk@linux-m68k.org>
     25 */
     26
     27#define pr_fmt(fmt)        KBUILD_MODNAME ": " fmt
     28
     29#include <linux/module.h>
     30#include <linux/init.h>
     31#include <linux/interrupt.h>
     32#include <linux/dma-mapping.h>
     33#include <linux/scatterlist.h>
     34#include <linux/delay.h>
     35#include <linux/zorro.h>
     36#include <linux/slab.h>
     37#include <linux/pgtable.h>
     38
     39#include <asm/page.h>
     40#include <asm/cacheflush.h>
     41#include <asm/amigahw.h>
     42#include <asm/amigaints.h>
     43
     44#include <scsi/scsi_host.h>
     45#include <scsi/scsi_transport_spi.h>
     46#include <scsi/scsi_device.h>
     47#include <scsi/scsi_tcq.h>
     48
     49#include "esp_scsi.h"
     50
     51MODULE_AUTHOR("Michael Schmitz <schmitz@debian.org>");
     52MODULE_DESCRIPTION("Amiga Zorro NCR5C9x (ESP) driver");
     53MODULE_LICENSE("GPL");
     54
     55/* per-board register layout definitions */
     56
     57/* Blizzard 1230 DMA interface */
     58
     59struct blz1230_dma_registers {
     60	unsigned char dma_addr;		/* DMA address      [0x0000] */
     61	unsigned char dmapad2[0x7fff];
     62	unsigned char dma_latch;	/* DMA latch        [0x8000] */
     63};
     64
     65/* Blizzard 1230II DMA interface */
     66
     67struct blz1230II_dma_registers {
     68	unsigned char dma_addr;		/* DMA address      [0x0000] */
     69	unsigned char dmapad2[0xf];
     70	unsigned char dma_latch;	/* DMA latch        [0x0010] */
     71};
     72
     73/* Blizzard 2060 DMA interface */
     74
     75struct blz2060_dma_registers {
     76	unsigned char dma_led_ctrl;	/* DMA led control   [0x000] */
     77	unsigned char dmapad1[0x0f];
     78	unsigned char dma_addr0;	/* DMA address (MSB) [0x010] */
     79	unsigned char dmapad2[0x03];
     80	unsigned char dma_addr1;	/* DMA address       [0x014] */
     81	unsigned char dmapad3[0x03];
     82	unsigned char dma_addr2;	/* DMA address       [0x018] */
     83	unsigned char dmapad4[0x03];
     84	unsigned char dma_addr3;	/* DMA address (LSB) [0x01c] */
     85};
     86
     87/* DMA control bits */
     88#define DMA_WRITE 0x80000000
     89
     90/* Cyberstorm DMA interface */
     91
     92struct cyber_dma_registers {
     93	unsigned char dma_addr0;	/* DMA address (MSB) [0x000] */
     94	unsigned char dmapad1[1];
     95	unsigned char dma_addr1;	/* DMA address       [0x002] */
     96	unsigned char dmapad2[1];
     97	unsigned char dma_addr2;	/* DMA address       [0x004] */
     98	unsigned char dmapad3[1];
     99	unsigned char dma_addr3;	/* DMA address (LSB) [0x006] */
    100	unsigned char dmapad4[0x3fb];
    101	unsigned char cond_reg;		/* DMA cond    (ro)  [0x402] */
    102#define ctrl_reg  cond_reg		/* DMA control (wo)  [0x402] */
    103};
    104
    105/* DMA control bits */
    106#define CYBER_DMA_WRITE  0x40	/* DMA direction. 1 = write */
    107#define CYBER_DMA_Z3     0x20	/* 16 (Z2) or 32 (CHIP/Z3) bit DMA transfer */
    108
    109/* DMA status bits */
    110#define CYBER_DMA_HNDL_INTR 0x80	/* DMA IRQ pending? */
    111
    112/* The CyberStorm II DMA interface */
    113struct cyberII_dma_registers {
    114	unsigned char cond_reg;		/* DMA cond    (ro)  [0x000] */
    115#define ctrl_reg  cond_reg		/* DMA control (wo)  [0x000] */
    116	unsigned char dmapad4[0x3f];
    117	unsigned char dma_addr0;	/* DMA address (MSB) [0x040] */
    118	unsigned char dmapad1[3];
    119	unsigned char dma_addr1;	/* DMA address       [0x044] */
    120	unsigned char dmapad2[3];
    121	unsigned char dma_addr2;	/* DMA address       [0x048] */
    122	unsigned char dmapad3[3];
    123	unsigned char dma_addr3;	/* DMA address (LSB) [0x04c] */
    124};
    125
    126/* Fastlane DMA interface */
    127
    128struct fastlane_dma_registers {
    129	unsigned char cond_reg;		/* DMA status  (ro) [0x0000] */
    130#define ctrl_reg  cond_reg		/* DMA control (wo) [0x0000] */
    131	char dmapad1[0x3f];
    132	unsigned char clear_strobe;	/* DMA clear   (wo) [0x0040] */
    133};
    134
    135/*
    136 * The controller registers can be found in the Z2 config area at these
    137 * offsets:
    138 */
    139#define FASTLANE_ESP_ADDR	0x1000001
    140
    141/* DMA status bits */
    142#define FASTLANE_DMA_MINT	0x80
    143#define FASTLANE_DMA_IACT	0x40
    144#define FASTLANE_DMA_CREQ	0x20
    145
    146/* DMA control bits */
    147#define FASTLANE_DMA_FCODE	0xa0
    148#define FASTLANE_DMA_MASK	0xf3
    149#define FASTLANE_DMA_WRITE	0x08	/* 1 = write */
    150#define FASTLANE_DMA_ENABLE	0x04	/* Enable DMA */
    151#define FASTLANE_DMA_EDI	0x02	/* Enable DMA IRQ ? */
    152#define FASTLANE_DMA_ESI	0x01	/* Enable SCSI IRQ */
    153
    154/*
    155 * private data used for driver
    156 */
    157struct zorro_esp_priv {
    158	struct esp *esp;		/* our ESP instance - for Scsi_host* */
    159	void __iomem *board_base;	/* virtual address (Zorro III board) */
    160	int zorro3;			/* board is Zorro III */
    161	unsigned char ctrl_data;	/* shadow copy of ctrl_reg */
    162};
    163
    164/*
    165 * On all implementations except for the Oktagon, padding between ESP
    166 * registers is three bytes.
    167 * On Oktagon, it is one byte - use a different accessor there.
    168 *
    169 * Oktagon needs PDMA - currently unsupported!
    170 */
    171
    172static void zorro_esp_write8(struct esp *esp, u8 val, unsigned long reg)
    173{
    174	writeb(val, esp->regs + (reg * 4UL));
    175}
    176
    177static u8 zorro_esp_read8(struct esp *esp, unsigned long reg)
    178{
    179	return readb(esp->regs + (reg * 4UL));
    180}
    181
    182static int zorro_esp_irq_pending(struct esp *esp)
    183{
    184	/* check ESP status register; DMA has no status reg. */
    185	if (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR)
    186		return 1;
    187
    188	return 0;
    189}
    190
    191static int cyber_esp_irq_pending(struct esp *esp)
    192{
    193	struct cyber_dma_registers __iomem *dregs = esp->dma_regs;
    194	unsigned char dma_status = readb(&dregs->cond_reg);
    195
    196	/* It's important to check the DMA IRQ bit in the correct way! */
    197	return ((zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR) &&
    198		(dma_status & CYBER_DMA_HNDL_INTR));
    199}
    200
    201static int fastlane_esp_irq_pending(struct esp *esp)
    202{
    203	struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
    204	unsigned char dma_status;
    205
    206	dma_status = readb(&dregs->cond_reg);
    207
    208	if (dma_status & FASTLANE_DMA_IACT)
    209		return 0;	/* not our IRQ */
    210
    211	/* Return non-zero if ESP requested IRQ */
    212	return (
    213	   (dma_status & FASTLANE_DMA_CREQ) &&
    214	   (!(dma_status & FASTLANE_DMA_MINT)) &&
    215	   (zorro_esp_read8(esp, ESP_STATUS) & ESP_STAT_INTR));
    216}
    217
    218static u32 zorro_esp_dma_length_limit(struct esp *esp, u32 dma_addr,
    219					u32 dma_len)
    220{
    221	return dma_len > (1U << 16) ? (1U << 16) : dma_len;
    222}
    223
    224static u32 fastlane_esp_dma_length_limit(struct esp *esp, u32 dma_addr,
    225					u32 dma_len)
    226{
    227	/* The old driver used 0xfffc as limit, so do that here too */
    228	return dma_len > 0xfffc ? 0xfffc : dma_len;
    229}
    230
    231static void zorro_esp_reset_dma(struct esp *esp)
    232{
    233	/* nothing to do here */
    234}
    235
    236static void zorro_esp_dma_drain(struct esp *esp)
    237{
    238	/* nothing to do here */
    239}
    240
    241static void zorro_esp_dma_invalidate(struct esp *esp)
    242{
    243	/* nothing to do here */
    244}
    245
    246static void fastlane_esp_dma_invalidate(struct esp *esp)
    247{
    248	struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
    249	struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
    250	unsigned char *ctrl_data = &zep->ctrl_data;
    251
    252	*ctrl_data = (*ctrl_data & FASTLANE_DMA_MASK);
    253	writeb(0, &dregs->clear_strobe);
    254	z_writel(0, zep->board_base);
    255}
    256
    257/* Blizzard 1230/60 SCSI-IV DMA */
    258
    259static void zorro_esp_send_blz1230_dma_cmd(struct esp *esp, u32 addr,
    260			u32 esp_count, u32 dma_count, int write, u8 cmd)
    261{
    262	struct blz1230_dma_registers __iomem *dregs = esp->dma_regs;
    263	u8 phase = esp->sreg & ESP_STAT_PMASK;
    264
    265	/*
    266	 * Use PIO if transferring message bytes to esp->command_block_dma.
    267	 * PIO requires a virtual address, so substitute esp->command_block
    268	 * for addr.
    269	 */
    270	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    271		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    272				 dma_count, write, cmd);
    273		return;
    274	}
    275
    276	/* Clear the results of a possible prior esp->ops->send_dma_cmd() */
    277	esp->send_cmd_error = 0;
    278	esp->send_cmd_residual = 0;
    279
    280	if (write)
    281		/* DMA receive */
    282		dma_sync_single_for_device(esp->dev, addr, esp_count,
    283				DMA_FROM_DEVICE);
    284	else
    285		/* DMA send */
    286		dma_sync_single_for_device(esp->dev, addr, esp_count,
    287				DMA_TO_DEVICE);
    288
    289	addr >>= 1;
    290	if (write)
    291		addr &= ~(DMA_WRITE);
    292	else
    293		addr |= DMA_WRITE;
    294
    295	writeb((addr >> 24) & 0xff, &dregs->dma_latch);
    296	writeb((addr >> 24) & 0xff, &dregs->dma_addr);
    297	writeb((addr >> 16) & 0xff, &dregs->dma_addr);
    298	writeb((addr >>  8) & 0xff, &dregs->dma_addr);
    299	writeb(addr & 0xff, &dregs->dma_addr);
    300
    301	scsi_esp_cmd(esp, ESP_CMD_DMA);
    302	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    303	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    304
    305	scsi_esp_cmd(esp, cmd);
    306}
    307
    308/* Blizzard 1230-II DMA */
    309
    310static void zorro_esp_send_blz1230II_dma_cmd(struct esp *esp, u32 addr,
    311			u32 esp_count, u32 dma_count, int write, u8 cmd)
    312{
    313	struct blz1230II_dma_registers __iomem *dregs = esp->dma_regs;
    314	u8 phase = esp->sreg & ESP_STAT_PMASK;
    315
    316	/* Use PIO if transferring message bytes to esp->command_block_dma */
    317	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    318		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    319				 dma_count, write, cmd);
    320		return;
    321	}
    322
    323	esp->send_cmd_error = 0;
    324	esp->send_cmd_residual = 0;
    325
    326	if (write)
    327		/* DMA receive */
    328		dma_sync_single_for_device(esp->dev, addr, esp_count,
    329				DMA_FROM_DEVICE);
    330	else
    331		/* DMA send */
    332		dma_sync_single_for_device(esp->dev, addr, esp_count,
    333				DMA_TO_DEVICE);
    334
    335	addr >>= 1;
    336	if (write)
    337		addr &= ~(DMA_WRITE);
    338	else
    339		addr |= DMA_WRITE;
    340
    341	writeb((addr >> 24) & 0xff, &dregs->dma_latch);
    342	writeb((addr >> 16) & 0xff, &dregs->dma_addr);
    343	writeb((addr >>  8) & 0xff, &dregs->dma_addr);
    344	writeb(addr & 0xff, &dregs->dma_addr);
    345
    346	scsi_esp_cmd(esp, ESP_CMD_DMA);
    347	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    348	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    349
    350	scsi_esp_cmd(esp, cmd);
    351}
    352
    353/* Blizzard 2060 DMA */
    354
    355static void zorro_esp_send_blz2060_dma_cmd(struct esp *esp, u32 addr,
    356			u32 esp_count, u32 dma_count, int write, u8 cmd)
    357{
    358	struct blz2060_dma_registers __iomem *dregs = esp->dma_regs;
    359	u8 phase = esp->sreg & ESP_STAT_PMASK;
    360
    361	/* Use PIO if transferring message bytes to esp->command_block_dma */
    362	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    363		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    364				 dma_count, write, cmd);
    365		return;
    366	}
    367
    368	esp->send_cmd_error = 0;
    369	esp->send_cmd_residual = 0;
    370
    371	if (write)
    372		/* DMA receive */
    373		dma_sync_single_for_device(esp->dev, addr, esp_count,
    374				DMA_FROM_DEVICE);
    375	else
    376		/* DMA send */
    377		dma_sync_single_for_device(esp->dev, addr, esp_count,
    378				DMA_TO_DEVICE);
    379
    380	addr >>= 1;
    381	if (write)
    382		addr &= ~(DMA_WRITE);
    383	else
    384		addr |= DMA_WRITE;
    385
    386	writeb(addr & 0xff, &dregs->dma_addr3);
    387	writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
    388	writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
    389	writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
    390
    391	scsi_esp_cmd(esp, ESP_CMD_DMA);
    392	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    393	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    394
    395	scsi_esp_cmd(esp, cmd);
    396}
    397
    398/* Cyberstorm I DMA */
    399
    400static void zorro_esp_send_cyber_dma_cmd(struct esp *esp, u32 addr,
    401			u32 esp_count, u32 dma_count, int write, u8 cmd)
    402{
    403	struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
    404	struct cyber_dma_registers __iomem *dregs = esp->dma_regs;
    405	u8 phase = esp->sreg & ESP_STAT_PMASK;
    406	unsigned char *ctrl_data = &zep->ctrl_data;
    407
    408	/* Use PIO if transferring message bytes to esp->command_block_dma */
    409	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    410		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    411				 dma_count, write, cmd);
    412		return;
    413	}
    414
    415	esp->send_cmd_error = 0;
    416	esp->send_cmd_residual = 0;
    417
    418	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    419	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    420
    421	if (write) {
    422		/* DMA receive */
    423		dma_sync_single_for_device(esp->dev, addr, esp_count,
    424				DMA_FROM_DEVICE);
    425		addr &= ~(1);
    426	} else {
    427		/* DMA send */
    428		dma_sync_single_for_device(esp->dev, addr, esp_count,
    429				DMA_TO_DEVICE);
    430		addr |= 1;
    431	}
    432
    433	writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
    434	writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
    435	writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
    436	writeb(addr & 0xff, &dregs->dma_addr3);
    437
    438	if (write)
    439		*ctrl_data &= ~(CYBER_DMA_WRITE);
    440	else
    441		*ctrl_data |= CYBER_DMA_WRITE;
    442
    443	*ctrl_data &= ~(CYBER_DMA_Z3);	/* Z2, do 16 bit DMA */
    444
    445	writeb(*ctrl_data, &dregs->ctrl_reg);
    446
    447	scsi_esp_cmd(esp, cmd);
    448}
    449
    450/* Cyberstorm II DMA */
    451
    452static void zorro_esp_send_cyberII_dma_cmd(struct esp *esp, u32 addr,
    453			u32 esp_count, u32 dma_count, int write, u8 cmd)
    454{
    455	struct cyberII_dma_registers __iomem *dregs = esp->dma_regs;
    456	u8 phase = esp->sreg & ESP_STAT_PMASK;
    457
    458	/* Use PIO if transferring message bytes to esp->command_block_dma */
    459	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    460		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    461				 dma_count, write, cmd);
    462		return;
    463	}
    464
    465	esp->send_cmd_error = 0;
    466	esp->send_cmd_residual = 0;
    467
    468	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    469	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    470
    471	if (write) {
    472		/* DMA receive */
    473		dma_sync_single_for_device(esp->dev, addr, esp_count,
    474				DMA_FROM_DEVICE);
    475		addr &= ~(1);
    476	} else {
    477		/* DMA send */
    478		dma_sync_single_for_device(esp->dev, addr, esp_count,
    479				DMA_TO_DEVICE);
    480		addr |= 1;
    481	}
    482
    483	writeb((addr >> 24) & 0xff, &dregs->dma_addr0);
    484	writeb((addr >> 16) & 0xff, &dregs->dma_addr1);
    485	writeb((addr >>  8) & 0xff, &dregs->dma_addr2);
    486	writeb(addr & 0xff, &dregs->dma_addr3);
    487
    488	scsi_esp_cmd(esp, cmd);
    489}
    490
    491/* Fastlane DMA */
    492
    493static void zorro_esp_send_fastlane_dma_cmd(struct esp *esp, u32 addr,
    494			u32 esp_count, u32 dma_count, int write, u8 cmd)
    495{
    496	struct zorro_esp_priv *zep = dev_get_drvdata(esp->dev);
    497	struct fastlane_dma_registers __iomem *dregs = esp->dma_regs;
    498	u8 phase = esp->sreg & ESP_STAT_PMASK;
    499	unsigned char *ctrl_data = &zep->ctrl_data;
    500
    501	/* Use PIO if transferring message bytes to esp->command_block_dma */
    502	if (phase == ESP_MIP && addr == esp->command_block_dma) {
    503		esp_send_pio_cmd(esp, (u32)esp->command_block, esp_count,
    504				 dma_count, write, cmd);
    505		return;
    506	}
    507
    508	esp->send_cmd_error = 0;
    509	esp->send_cmd_residual = 0;
    510
    511	zorro_esp_write8(esp, (esp_count >> 0) & 0xff, ESP_TCLOW);
    512	zorro_esp_write8(esp, (esp_count >> 8) & 0xff, ESP_TCMED);
    513
    514	if (write) {
    515		/* DMA receive */
    516		dma_sync_single_for_device(esp->dev, addr, esp_count,
    517				DMA_FROM_DEVICE);
    518		addr &= ~(1);
    519	} else {
    520		/* DMA send */
    521		dma_sync_single_for_device(esp->dev, addr, esp_count,
    522				DMA_TO_DEVICE);
    523		addr |= 1;
    524	}
    525
    526	writeb(0, &dregs->clear_strobe);
    527	z_writel(addr, ((addr & 0x00ffffff) + zep->board_base));
    528
    529	if (write) {
    530		*ctrl_data = (*ctrl_data & FASTLANE_DMA_MASK) |
    531				FASTLANE_DMA_ENABLE;
    532	} else {
    533		*ctrl_data = ((*ctrl_data & FASTLANE_DMA_MASK) |
    534				FASTLANE_DMA_ENABLE |
    535				FASTLANE_DMA_WRITE);
    536	}
    537
    538	writeb(*ctrl_data, &dregs->ctrl_reg);
    539
    540	scsi_esp_cmd(esp, cmd);
    541}
    542
    543static int zorro_esp_dma_error(struct esp *esp)
    544{
    545	return esp->send_cmd_error;
    546}
    547
    548/* per-board ESP driver ops */
    549
    550static const struct esp_driver_ops blz1230_esp_ops = {
    551	.esp_write8		= zorro_esp_write8,
    552	.esp_read8		= zorro_esp_read8,
    553	.irq_pending		= zorro_esp_irq_pending,
    554	.dma_length_limit	= zorro_esp_dma_length_limit,
    555	.reset_dma		= zorro_esp_reset_dma,
    556	.dma_drain		= zorro_esp_dma_drain,
    557	.dma_invalidate		= zorro_esp_dma_invalidate,
    558	.send_dma_cmd		= zorro_esp_send_blz1230_dma_cmd,
    559	.dma_error		= zorro_esp_dma_error,
    560};
    561
    562static const struct esp_driver_ops blz1230II_esp_ops = {
    563	.esp_write8		= zorro_esp_write8,
    564	.esp_read8		= zorro_esp_read8,
    565	.irq_pending		= zorro_esp_irq_pending,
    566	.dma_length_limit	= zorro_esp_dma_length_limit,
    567	.reset_dma		= zorro_esp_reset_dma,
    568	.dma_drain		= zorro_esp_dma_drain,
    569	.dma_invalidate		= zorro_esp_dma_invalidate,
    570	.send_dma_cmd		= zorro_esp_send_blz1230II_dma_cmd,
    571	.dma_error		= zorro_esp_dma_error,
    572};
    573
    574static const struct esp_driver_ops blz2060_esp_ops = {
    575	.esp_write8		= zorro_esp_write8,
    576	.esp_read8		= zorro_esp_read8,
    577	.irq_pending		= zorro_esp_irq_pending,
    578	.dma_length_limit	= zorro_esp_dma_length_limit,
    579	.reset_dma		= zorro_esp_reset_dma,
    580	.dma_drain		= zorro_esp_dma_drain,
    581	.dma_invalidate		= zorro_esp_dma_invalidate,
    582	.send_dma_cmd		= zorro_esp_send_blz2060_dma_cmd,
    583	.dma_error		= zorro_esp_dma_error,
    584};
    585
    586static const struct esp_driver_ops cyber_esp_ops = {
    587	.esp_write8		= zorro_esp_write8,
    588	.esp_read8		= zorro_esp_read8,
    589	.irq_pending		= cyber_esp_irq_pending,
    590	.dma_length_limit	= zorro_esp_dma_length_limit,
    591	.reset_dma		= zorro_esp_reset_dma,
    592	.dma_drain		= zorro_esp_dma_drain,
    593	.dma_invalidate		= zorro_esp_dma_invalidate,
    594	.send_dma_cmd		= zorro_esp_send_cyber_dma_cmd,
    595	.dma_error		= zorro_esp_dma_error,
    596};
    597
    598static const struct esp_driver_ops cyberII_esp_ops = {
    599	.esp_write8		= zorro_esp_write8,
    600	.esp_read8		= zorro_esp_read8,
    601	.irq_pending		= zorro_esp_irq_pending,
    602	.dma_length_limit	= zorro_esp_dma_length_limit,
    603	.reset_dma		= zorro_esp_reset_dma,
    604	.dma_drain		= zorro_esp_dma_drain,
    605	.dma_invalidate		= zorro_esp_dma_invalidate,
    606	.send_dma_cmd		= zorro_esp_send_cyberII_dma_cmd,
    607	.dma_error		= zorro_esp_dma_error,
    608};
    609
    610static const struct esp_driver_ops fastlane_esp_ops = {
    611	.esp_write8		= zorro_esp_write8,
    612	.esp_read8		= zorro_esp_read8,
    613	.irq_pending		= fastlane_esp_irq_pending,
    614	.dma_length_limit	= fastlane_esp_dma_length_limit,
    615	.reset_dma		= zorro_esp_reset_dma,
    616	.dma_drain		= zorro_esp_dma_drain,
    617	.dma_invalidate		= fastlane_esp_dma_invalidate,
    618	.send_dma_cmd		= zorro_esp_send_fastlane_dma_cmd,
    619	.dma_error		= zorro_esp_dma_error,
    620};
    621
    622/* Zorro driver config data */
    623
    624struct zorro_driver_data {
    625	const char *name;
    626	unsigned long offset;
    627	unsigned long dma_offset;
    628	int absolute;	/* offset is absolute address */
    629	int scsi_option;
    630	const struct esp_driver_ops *esp_ops;
    631};
    632
    633/* board types */
    634
    635enum {
    636	ZORRO_BLZ1230,
    637	ZORRO_BLZ1230II,
    638	ZORRO_BLZ2060,
    639	ZORRO_CYBER,
    640	ZORRO_CYBERII,
    641	ZORRO_FASTLANE,
    642};
    643
    644/* per-board config data */
    645
    646static const struct zorro_driver_data zorro_esp_boards[] = {
    647	[ZORRO_BLZ1230] = {
    648				.name		= "Blizzard 1230",
    649				.offset		= 0x8000,
    650				.dma_offset	= 0x10000,
    651				.scsi_option	= 1,
    652				.esp_ops	= &blz1230_esp_ops,
    653	},
    654	[ZORRO_BLZ1230II] = {
    655				.name		= "Blizzard 1230II",
    656				.offset		= 0x10000,
    657				.dma_offset	= 0x10021,
    658				.scsi_option	= 1,
    659				.esp_ops	= &blz1230II_esp_ops,
    660	},
    661	[ZORRO_BLZ2060] = {
    662				.name		= "Blizzard 2060",
    663				.offset		= 0x1ff00,
    664				.dma_offset	= 0x1ffe0,
    665				.esp_ops	= &blz2060_esp_ops,
    666	},
    667	[ZORRO_CYBER] = {
    668				.name		= "CyberStormI",
    669				.offset		= 0xf400,
    670				.dma_offset	= 0xf800,
    671				.esp_ops	= &cyber_esp_ops,
    672	},
    673	[ZORRO_CYBERII] = {
    674				.name		= "CyberStormII",
    675				.offset		= 0x1ff03,
    676				.dma_offset	= 0x1ff43,
    677				.scsi_option	= 1,
    678				.esp_ops	= &cyberII_esp_ops,
    679	},
    680	[ZORRO_FASTLANE] = {
    681				.name		= "Fastlane",
    682				.offset		= 0x1000001,
    683				.dma_offset	= 0x1000041,
    684				.esp_ops	= &fastlane_esp_ops,
    685	},
    686};
    687
    688static const struct zorro_device_id zorro_esp_zorro_tbl[] = {
    689	{	/* Blizzard 1230 IV */
    690		.id = ZORRO_ID(PHASE5, 0x11, 0),
    691		.driver_data = ZORRO_BLZ1230,
    692	},
    693	{	/* Blizzard 1230 II (Zorro II) or Fastlane (Zorro III) */
    694		.id = ZORRO_ID(PHASE5, 0x0B, 0),
    695		.driver_data = ZORRO_BLZ1230II,
    696	},
    697	{	/* Blizzard 2060 */
    698		.id = ZORRO_ID(PHASE5, 0x18, 0),
    699		.driver_data = ZORRO_BLZ2060,
    700	},
    701	{	/* Cyberstorm */
    702		.id = ZORRO_ID(PHASE5, 0x0C, 0),
    703		.driver_data = ZORRO_CYBER,
    704	},
    705	{	/* Cyberstorm II */
    706		.id = ZORRO_ID(PHASE5, 0x19, 0),
    707		.driver_data = ZORRO_CYBERII,
    708	},
    709	{ 0 }
    710};
    711MODULE_DEVICE_TABLE(zorro, zorro_esp_zorro_tbl);
    712
    713static int zorro_esp_probe(struct zorro_dev *z,
    714				       const struct zorro_device_id *ent)
    715{
    716	struct scsi_host_template *tpnt = &scsi_esp_template;
    717	struct Scsi_Host *host;
    718	struct esp *esp;
    719	const struct zorro_driver_data *zdd;
    720	struct zorro_esp_priv *zep;
    721	unsigned long board, ioaddr, dmaaddr;
    722	int err;
    723
    724	board = zorro_resource_start(z);
    725	zdd = &zorro_esp_boards[ent->driver_data];
    726
    727	pr_info("%s found at address 0x%lx.\n", zdd->name, board);
    728
    729	zep = kzalloc(sizeof(*zep), GFP_KERNEL);
    730	if (!zep) {
    731		pr_err("Can't allocate device private data!\n");
    732		return -ENOMEM;
    733	}
    734
    735	/* let's figure out whether we have a Zorro II or Zorro III board */
    736	if ((z->rom.er_Type & ERT_TYPEMASK) == ERT_ZORROIII) {
    737		if (board > 0xffffff)
    738			zep->zorro3 = 1;
    739	} else {
    740		/*
    741		 * Even though most of these boards identify as Zorro II,
    742		 * they are in fact CPU expansion slot boards and have full
    743		 * access to all of memory. Fix up DMA bitmask here.
    744		 */
    745		z->dev.coherent_dma_mask = DMA_BIT_MASK(32);
    746	}
    747
    748	/*
    749	 * If Zorro III and ID matches Fastlane, our device table entry
    750	 * contains data for the Blizzard 1230 II board which does share the
    751	 * same ID. Fix up device table entry here.
    752	 * TODO: Some Cyberstom060 boards also share this ID but would need
    753	 * to use the Cyberstorm I driver data ... we catch this by checking
    754	 * for presence of ESP chip later, but don't try to fix up yet.
    755	 */
    756	if (zep->zorro3 && ent->driver_data == ZORRO_BLZ1230II) {
    757		pr_info("%s at address 0x%lx is Fastlane Z3, fixing data!\n",
    758			zdd->name, board);
    759		zdd = &zorro_esp_boards[ZORRO_FASTLANE];
    760	}
    761
    762	if (zdd->absolute) {
    763		ioaddr  = zdd->offset;
    764		dmaaddr = zdd->dma_offset;
    765	} else {
    766		ioaddr  = board + zdd->offset;
    767		dmaaddr = board + zdd->dma_offset;
    768	}
    769
    770	if (!zorro_request_device(z, zdd->name)) {
    771		pr_err("cannot reserve region 0x%lx, abort\n",
    772		       board);
    773		err = -EBUSY;
    774		goto fail_free_zep;
    775	}
    776
    777	host = scsi_host_alloc(tpnt, sizeof(struct esp));
    778
    779	if (!host) {
    780		pr_err("No host detected; board configuration problem?\n");
    781		err = -ENOMEM;
    782		goto fail_release_device;
    783	}
    784
    785	host->base		= ioaddr;
    786	host->this_id		= 7;
    787
    788	esp			= shost_priv(host);
    789	esp->host		= host;
    790	esp->dev		= &z->dev;
    791
    792	esp->scsi_id		= host->this_id;
    793	esp->scsi_id_mask	= (1 << esp->scsi_id);
    794
    795	esp->cfreq = 40000000;
    796
    797	zep->esp = esp;
    798
    799	dev_set_drvdata(esp->dev, zep);
    800
    801	/* additional setup required for Fastlane */
    802	if (zep->zorro3 && ent->driver_data == ZORRO_BLZ1230II) {
    803		/* map full address space up to ESP base for DMA */
    804		zep->board_base = ioremap(board, FASTLANE_ESP_ADDR - 1);
    805		if (!zep->board_base) {
    806			pr_err("Cannot allocate board address space\n");
    807			err = -ENOMEM;
    808			goto fail_free_host;
    809		}
    810		/* initialize DMA control shadow register */
    811		zep->ctrl_data = (FASTLANE_DMA_FCODE |
    812				  FASTLANE_DMA_EDI | FASTLANE_DMA_ESI);
    813	}
    814
    815	esp->ops = zdd->esp_ops;
    816
    817	if (ioaddr > 0xffffff)
    818		esp->regs = ioremap(ioaddr, 0x20);
    819	else
    820		/* ZorroII address space remapped nocache by early startup */
    821		esp->regs = ZTWO_VADDR(ioaddr);
    822
    823	if (!esp->regs) {
    824		err = -ENOMEM;
    825		goto fail_unmap_fastlane;
    826	}
    827
    828	esp->fifo_reg = esp->regs + ESP_FDATA * 4;
    829
    830	/* Check whether a Blizzard 12x0 or CyberstormII really has SCSI */
    831	if (zdd->scsi_option) {
    832		zorro_esp_write8(esp, (ESP_CONFIG1_PENABLE | 7), ESP_CFG1);
    833		if (zorro_esp_read8(esp, ESP_CFG1) != (ESP_CONFIG1_PENABLE|7)) {
    834			err = -ENODEV;
    835			goto fail_unmap_regs;
    836		}
    837	}
    838
    839	if (zep->zorro3) {
    840		/*
    841		 * Only Fastlane Z3 for now - add switch for correct struct
    842		 * dma_registers size if adding any more
    843		 */
    844		esp->dma_regs = ioremap(dmaaddr,
    845					sizeof(struct fastlane_dma_registers));
    846	} else
    847		/* ZorroII address space remapped nocache by early startup */
    848		esp->dma_regs = ZTWO_VADDR(dmaaddr);
    849
    850	if (!esp->dma_regs) {
    851		err = -ENOMEM;
    852		goto fail_unmap_regs;
    853	}
    854
    855	esp->command_block = dma_alloc_coherent(esp->dev, 16,
    856						&esp->command_block_dma,
    857						GFP_KERNEL);
    858
    859	if (!esp->command_block) {
    860		err = -ENOMEM;
    861		goto fail_unmap_dma_regs;
    862	}
    863
    864	host->irq = IRQ_AMIGA_PORTS;
    865	err = request_irq(host->irq, scsi_esp_intr, IRQF_SHARED,
    866			  "Amiga Zorro ESP", esp);
    867	if (err < 0) {
    868		err = -ENODEV;
    869		goto fail_free_command_block;
    870	}
    871
    872	/* register the chip */
    873	err = scsi_esp_register(esp);
    874
    875	if (err) {
    876		err = -ENOMEM;
    877		goto fail_free_irq;
    878	}
    879
    880	return 0;
    881
    882fail_free_irq:
    883	free_irq(host->irq, esp);
    884
    885fail_free_command_block:
    886	dma_free_coherent(esp->dev, 16,
    887			  esp->command_block,
    888			  esp->command_block_dma);
    889
    890fail_unmap_dma_regs:
    891	if (zep->zorro3)
    892		iounmap(esp->dma_regs);
    893
    894fail_unmap_regs:
    895	if (ioaddr > 0xffffff)
    896		iounmap(esp->regs);
    897
    898fail_unmap_fastlane:
    899	if (zep->zorro3)
    900		iounmap(zep->board_base);
    901
    902fail_free_host:
    903	scsi_host_put(host);
    904
    905fail_release_device:
    906	zorro_release_device(z);
    907
    908fail_free_zep:
    909	kfree(zep);
    910
    911	return err;
    912}
    913
    914static void zorro_esp_remove(struct zorro_dev *z)
    915{
    916	struct zorro_esp_priv *zep = dev_get_drvdata(&z->dev);
    917	struct esp *esp	= zep->esp;
    918	struct Scsi_Host *host = esp->host;
    919
    920	scsi_esp_unregister(esp);
    921
    922	free_irq(host->irq, esp);
    923	dma_free_coherent(esp->dev, 16,
    924			  esp->command_block,
    925			  esp->command_block_dma);
    926
    927	if (zep->zorro3) {
    928		iounmap(zep->board_base);
    929		iounmap(esp->dma_regs);
    930	}
    931
    932	if (host->base > 0xffffff)
    933		iounmap(esp->regs);
    934
    935	scsi_host_put(host);
    936
    937	zorro_release_device(z);
    938
    939	kfree(zep);
    940}
    941
    942static struct zorro_driver zorro_esp_driver = {
    943	.name	  = KBUILD_MODNAME,
    944	.id_table = zorro_esp_zorro_tbl,
    945	.probe	  = zorro_esp_probe,
    946	.remove	  = zorro_esp_remove,
    947};
    948
    949static int __init zorro_esp_scsi_init(void)
    950{
    951	return zorro_register_driver(&zorro_esp_driver);
    952}
    953
    954static void __exit zorro_esp_scsi_exit(void)
    955{
    956	zorro_unregister_driver(&zorro_esp_driver);
    957}
    958
    959module_init(zorro_esp_scsi_init);
    960module_exit(zorro_esp_scsi_exit);