OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [scsi/] [amiga7xx.c] - Blame information for rev 1774

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
2
 * Detection routine for the NCR53c710 based Amiga SCSI Controllers for Linux.
3
 *              Amiga MacroSystemUS WarpEngine SCSI controller.
4
 *              Amiga Technologies A4000T SCSI controller.
5
 *              Amiga Technologies/DKB A4091 SCSI controller.
6
 *
7
 * Written 1997 by Alan Hourihane <alanh@fairlite.demon.co.uk>
8
 * plus modifications of the 53c7xx.c driver to support the Amiga.
9
 */
10
#include <linux/types.h>
11
#include <linux/mm.h>
12
#include <linux/blk.h>
13
#include <linux/sched.h>
14
#include <linux/version.h>
15
#include <linux/config.h>
16
#include <linux/zorro.h>
17
#include <linux/stat.h>
18
 
19
#include <asm/setup.h>
20
#include <asm/page.h>
21
#include <asm/pgtable.h>
22
#include <asm/amigaints.h>
23
#include <asm/amigahw.h>
24
#include <asm/irq.h>
25
 
26
#include "scsi.h"
27
#include "hosts.h"
28
#include "53c7xx.h"
29
#include "amiga7xx.h"
30
 
31
 
32
static int amiga7xx_register_one(Scsi_Host_Template *tpnt,
33
                                 unsigned long address)
34
{
35
    long long options;
36
    int clock;
37
 
38
    if (!request_mem_region(address, 0x1000, "ncr53c710"))
39
        return 0;
40
 
41
    address = (unsigned long)z_ioremap(address, 0x1000);
42
    options = OPTION_MEMORY_MAPPED | OPTION_DEBUG_TEST1 | OPTION_INTFLY |
43
              OPTION_SYNCHRONOUS | OPTION_ALWAYS_SYNCHRONOUS |
44
              OPTION_DISCONNECT;
45
    clock = 50000000;   /* 50 MHz SCSI Clock */
46
    ncr53c7xx_init(tpnt, 0, 710, address, 0, IRQ_AMIGA_PORTS, DMA_NONE,
47
                   options, clock);
48
    return 1;
49
}
50
 
51
 
52
#ifdef CONFIG_ZORRO
53
 
54
static struct {
55
    zorro_id id;
56
    unsigned long offset;
57
    int absolute;       /* offset is absolute address */
58
} amiga7xx_table[] = {
59
    { .id = ZORRO_PROD_PHASE5_BLIZZARD_603E_PLUS, .offset = 0xf40000,
60
      .absolute = 1 },
61
    { .id = ZORRO_PROD_MACROSYSTEMS_WARP_ENGINE_40xx, .offset = 0x40000 },
62
    { .id = ZORRO_PROD_CBM_A4091_1, .offset = 0x800000 },
63
    { .id = ZORRO_PROD_CBM_A4091_2, .offset = 0x800000 },
64
    { .id = ZORRO_PROD_GVP_GFORCE_040_060, .offset = 0x40000 },
65
    { 0 }
66
};
67
 
68
static int __init amiga7xx_zorro_detect(Scsi_Host_Template *tpnt)
69
{
70
    int num = 0, i;
71
    struct zorro_dev *z = NULL;
72
    unsigned long address;
73
 
74
    while ((z = zorro_find_device(ZORRO_WILDCARD, z))) {
75
        for (i = 0; amiga7xx_table[i].id; i++)
76
            if (z->id == amiga7xx_table[i].id)
77
                break;
78
        if (!amiga7xx_table[i].id)
79
            continue;
80
        if (amiga7xx_table[i].absolute)
81
            address = amiga7xx_table[i].offset;
82
        else
83
            address = z->resource.start + amiga7xx_table[i].offset;
84
        num += amiga7xx_register_one(tpnt, address);
85
    }
86
    return num;
87
}
88
 
89
#endif /* CONFIG_ZORRO */
90
 
91
 
92
int __init amiga7xx_detect(Scsi_Host_Template *tpnt)
93
{
94
    static unsigned char called = 0;
95
    int num = 0;
96
 
97
    if (called || !MACH_IS_AMIGA)
98
        return 0;
99
 
100
    tpnt->proc_name = "Amiga7xx";
101
 
102
    if (AMIGAHW_PRESENT(A4000_SCSI))
103
        num += amiga7xx_register_one(tpnt, 0xdd0040);
104
 
105
#ifdef CONFIG_ZORRO
106
    num += amiga7xx_zorro_detect(tpnt);
107
#endif
108
 
109
    called = 1;
110
    return num;
111
}
112
 
113
static Scsi_Host_Template driver_template = AMIGA7XX_SCSI;
114
#include "scsi_module.c"

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.