t128.h 2.9 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5 6 7 8 9 10
/*
 * Trantor T128/T128F/T228 defines
 *	Note : architecturally, the T100 and T128 are different and won't work
 *
 * Copyright 1993, Drew Eckhardt
 *	Visionary Computing
 *	(Unix and Linux consulting and custom programming)
 *	drew@colorado.edu
 *      +1 (303) 440-4894
 *
H
Henne 已提交
11
 * For more information, please consult
L
Linus Torvalds 已提交
12 13 14 15
 *
 * Trantor Systems, Ltd.
 * T128/T128F/T228 SCSI Host Adapter
 * Hardware Specifications
H
Henne 已提交
16 17
 *
 * Trantor Systems, Ltd.
L
Linus Torvalds 已提交
18 19 20 21 22 23 24 25 26
 * 5415 Randall Place
 * Fremont, CA 94538
 * 1+ (415) 770-1400, FAX 1+ (415) 770-9910
 */

#ifndef T128_H
#define T128_H

/*
H
Henne 已提交
27
 * The trantor boards are memory mapped. They use an NCR5380 or
L
Linus Torvalds 已提交
28
 * equivalent (my sample board had part second sourced from ZILOG).
H
Henne 已提交
29
 * NCR's recommended "Pseudo-DMA" architecture is used, where
L
Linus Torvalds 已提交
30
 * a PAL drives the DMA signals on the 5380 allowing fast, blind
H
Henne 已提交
31
 * transfers with proper handshaking.
L
Linus Torvalds 已提交
32 33 34
 */

/*
H
Henne 已提交
35
 * Note : a boot switch is provided for the purpose of informing the
L
Linus Torvalds 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
 * firmware to boot or not boot from attached SCSI devices.  So, I imagine
 * there are fewer people who've yanked the ROM like they do on the Seagate
 * to make bootup faster, and I'll probably use this for autodetection.
 */
#define T_ROM_OFFSET		0

/*
 * Note : my sample board *WAS NOT* populated with the SRAM, so this
 * can't be used for autodetection without a ROM present.
 */
#define T_RAM_OFFSET		0x1800

/*
 * All of the registers are allocated 32 bytes of address space, except
 * for the data register (read/write to/from the 5380 in pseudo-DMA mode)
 */ 
#define T_CONTROL_REG_OFFSET	0x1c00	/* rw */
#define T_CR_INT		0x10	/* Enable interrupts */
#define T_CR_CT			0x02	/* Reset watchdog timer */

#define T_STATUS_REG_OFFSET	0x1c20	/* ro */
#define T_ST_BOOT		0x80	/* Boot switch */
#define T_ST_S3			0x40	/* User settable switches, */
#define T_ST_S2			0x20	/* read 0 when switch is on, 1 off */
#define T_ST_S1			0x10
#define T_ST_PS2		0x08	/* Set for Microchannel 228 */
#define T_ST_RDY		0x04	/* 5380 DRQ */
#define T_ST_TIM		0x02	/* indicates 40us watchdog timer fired */
#define T_ST_ZERO		0x01	/* Always zero */

#define T_5380_OFFSET		0x1d00	/* 8 registers here, see NCR5380.h */

#define T_DATA_REG_OFFSET	0x1e00	/* rw 512 bytes long */

#define NCR5380_implementation_fields \
    void __iomem *base

73 74
#define T128_address(reg) \
	(((struct NCR5380_hostdata *)shost_priv(instance))->base + T_5380_OFFSET + ((reg) * 0x20))
L
Linus Torvalds 已提交
75 76 77 78

#define NCR5380_read(reg) readb(T128_address(reg))
#define NCR5380_write(reg, value) writeb((value),(T128_address(reg)))

79 80
#define NCR5380_dma_xfer_len(instance, cmd, phase)	(cmd->transfersize)

L
Linus Torvalds 已提交
81 82 83 84
#define NCR5380_intr t128_intr
#define NCR5380_queue_command t128_queue_command
#define NCR5380_abort t128_abort
#define NCR5380_bus_reset t128_bus_reset
F
Finn Thain 已提交
85
#define NCR5380_info t128_info
A
Al Viro 已提交
86 87
#define NCR5380_show_info t128_show_info
#define NCR5380_write_info t128_write_info
L
Linus Torvalds 已提交
88

H
Henne 已提交
89
/* 15 14 12 10 7 5 3
L
Linus Torvalds 已提交
90
   1101 0100 1010 1000 */
H
Henne 已提交
91 92

#define T128_IRQS 0xc4a8
L
Linus Torvalds 已提交
93 94

#endif /* T128_H */