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

Subversion Repositories or1k_old

[/] [or1k_old/] [trunk/] [uclinux/] [uClinux-2.0.x/] [drivers/] [scsi/] [t128.h] - Blame information for rev 1782

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
/*
2
 * Trantor T128/T128F/T228 defines
3
 *      Note : architecturally, the T100 and T128 are different and won't work
4
 *
5
 * Copyright 1993, Drew Eckhardt
6
 *      Visionary Computing
7
 *      (Unix and Linux consulting and custom programming)
8
 *      drew@colorado.edu
9
 *      +1 (303) 440-4894
10
 *
11
 * DISTRIBUTION RELEASE 3.
12
 *
13
 * For more information, please consult
14
 *
15
 * Trantor Systems, Ltd.
16
 * T128/T128F/T228 SCSI Host Adapter
17
 * Hardware Specifications
18
 *
19
 * Trantor Systems, Ltd.
20
 * 5415 Randall Place
21
 * Fremont, CA 94538
22
 * 1+ (415) 770-1400, FAX 1+ (415) 770-9910
23
 *
24
 * and
25
 *
26
 * NCR 5380 Family
27
 * SCSI Protocol Controller
28
 * Databook
29
 *
30
 * NCR Microelectronics
31
 * 1635 Aeroplaza Drive
32
 * Colorado Springs, CO 80916
33
 * 1+ (719) 578-3400
34
 * 1+ (800) 334-5454
35
 */
36
 
37
/*
38
 * $Log: not supported by cvs2svn $
39
 * Revision 1.1.1.1  2001/07/02 17:58:27  simons
40
 * Initial revision
41
 *
42
 */
43
 
44
#ifndef T128_H
45
#define T128_H
46
 
47
#define T128_PUBLIC_RELEASE 3
48
 
49
#define TDEBUG_INIT     0x1
50
#define TDEBUG_TRANSFER 0x2
51
 
52
/*
53
 * The trantor boards are memory mapped. They use an NCR5380 or
54
 * equivalent (my sample board had part second sourced from ZILOG).
55
 * NCR's recommended "Pseudo-DMA" architecture is used, where
56
 * a PAL drives the DMA signals on the 5380 allowing fast, blind
57
 * transfers with proper handshaking.
58
 */
59
 
60
/*
61
 * Note : a boot switch is provided for the purpose of informing the
62
 * firmware to boot or not boot from attached SCSI devices.  So, I imagine
63
 * there are fewer people who've yanked the ROM like they do on the Seagate
64
 * to make bootup faster, and I'll probably use this for autodetection.
65
 */
66
#define T_ROM_OFFSET            0
67
 
68
/*
69
 * Note : my sample board *WAS NOT* populated with the SRAM, so this
70
 * can't be used for autodetection without a ROM present.
71
 */
72
#define T_RAM_OFFSET            0x1800
73
 
74
/*
75
 * All of the registers are allocated 32 bytes of address space, except
76
 * for the data register (read/write to/from the 5380 in pseudo-DMA mode)
77
 */
78
#define T_CONTROL_REG_OFFSET    0x1c00  /* rw */
79
#define T_CR_INT                0x10    /* Enable interrupts */
80
#define T_CR_CT                 0x02    /* Reset watchdog timer */
81
 
82
#define T_STATUS_REG_OFFSET     0x1c20  /* ro */
83
#define T_ST_BOOT               0x80    /* Boot switch */
84
#define T_ST_S3                 0x40    /* User settable switches, */
85
#define T_ST_S2                 0x20    /* read 0 when switch is on, 1 off */
86
#define T_ST_S1                 0x10
87
#define T_ST_PS2                0x08    /* Set for Microchannel 228 */
88
#define T_ST_RDY                0x04    /* 5380 DRQ */
89
#define T_ST_TIM                0x02    /* indicates 40us watchdog timer fired */
90
#define T_ST_ZERO               0x01    /* Always zero */
91
 
92
#define T_5380_OFFSET           0x1d00  /* 8 registers here, see NCR5380.h */
93
 
94
#define T_DATA_REG_OFFSET       0x1e00  /* rw 512 bytes long */
95
 
96
#ifndef ASM
97
int t128_abort(Scsi_Cmnd *);
98
int t128_biosparam(Disk *, kdev_t, int*);
99
int t128_detect(Scsi_Host_Template *);
100
int t128_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
101
int t128_reset(Scsi_Cmnd *, unsigned int reset_flags);
102
int t128_proc_info (char *buffer, char **start, off_t offset,
103
                   int length, int hostno, int inout);
104
 
105
#ifndef NULL
106
#define NULL 0
107
#endif
108
 
109
#ifndef CMD_PER_LUN
110
#define CMD_PER_LUN 2
111
#endif
112
 
113
#ifndef CAN_QUEUE
114
#define CAN_QUEUE 32 
115
#endif
116
 
117
/*
118
 * I hadn't thought of this with the earlier drivers - but to prevent
119
 * macro definition conflicts, we shouldn't define all of the internal
120
 * macros when this is being used solely for the host stub.
121
 */
122
 
123
#if defined(HOSTS_C) || defined(MODULE)
124
 
125
#define TRANTOR_T128 {NULL, NULL, NULL, NULL, \
126
        "Trantor T128/T128F/T228", t128_detect, NULL,  \
127
        NULL,                                                   \
128
        NULL, t128_queue_command, t128_abort, t128_reset, NULL,         \
129
        t128_biosparam,                                                 \
130
        /* can queue */ CAN_QUEUE, /* id */ 7, SG_ALL,                  \
131
        /* cmd per lun */ CMD_PER_LUN , 0, 0, DISABLE_CLUSTERING}
132
 
133
#endif
134
 
135
#ifndef HOSTS_C
136
 
137
#define NCR5380_implementation_fields \
138
    volatile unsigned char *base
139
 
140
#define NCR5380_local_declare() \
141
    volatile unsigned char *base
142
 
143
#define NCR5380_setup(instance) \
144
    base = (volatile unsigned char *) (instance)->base
145
 
146
#define T128_address(reg) (base + T_5380_OFFSET + ((reg) * 0x20))
147
 
148
#if !(TDEBUG & TDEBUG_TRANSFER) 
149
#define NCR5380_read(reg) (*(T128_address(reg)))
150
#define NCR5380_write(reg, value) (*(T128_address(reg)) = (value))
151
#else
152
#define NCR5380_read(reg)                                               \
153
    (((unsigned char) printk("scsi%d : read register %d at address %08x\n"\
154
    , instance->hostno, (reg), T128_address(reg))), *(T128_address(reg)))
155
 
156
#define NCR5380_write(reg, value) {                                     \
157
    printk("scsi%d : write %02x to register %d at address %08x\n",      \
158
            instance->hostno, (value), (reg), T128_address(reg));       \
159
    *(T128_address(reg)) = (value);                                     \
160
}
161
#endif
162
 
163
#define NCR5380_intr t128_intr
164
#define NCR5380_queue_command t128_queue_command
165
#define NCR5380_abort t128_abort
166
#define NCR5380_reset t128_reset
167
#define NCR5380_proc_info t128_proc_info
168
 
169
/* 15 14 12 10 7 5 3
170
   1101 0100 1010 1000 */
171
 
172
#define T128_IRQS 0xc4a8 
173
 
174
#endif /* else def HOSTS_C */
175
#endif /* ndef ASM */
176
#endif /* T128_H */

powered by: WebSVN 2.1.0

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