dtc.h 3.51 KB
Newer Older
Linus Torvalds's avatar
Linus Torvalds committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
/*
 * DTC controller, taken from T128 driver by...
 * Copyright 1993, Drew Eckhardt
 *	Visionary Computing
 *	(Unix and Linux consulting and custom programming)
 *	drew@colorado.edu
 *      +1 (303) 440-4894
 *
 * DISTRIBUTION RELEASE 2. 
 *
 * For more information, please consult 
 *
 * 
 * 
 * and 
 *
 * NCR 5380 Family
 * SCSI Protocol Controller
 * Databook
 *
 * NCR Microelectronics
 * 1635 Aeroplaza Drive
 * Colorado Springs, CO 80916
 * 1+ (719) 578-3400
 * 1+ (800) 334-5454
 */

#ifndef DTC3280_H
#define DTC3280_H

Alan Cox's avatar
Alan Cox committed
31
static int dtc_abort(Scsi_Cmnd *);
James Bottomley's avatar
James Bottomley committed
32
static int dtc_biosparam(struct scsi_device *, struct block_device *,
33
		         sector_t, int*);
Alan Cox's avatar
Alan Cox committed
34 35 36 37 38 39
static int dtc_detect(Scsi_Host_Template *);
static int dtc_queue_command(Scsi_Cmnd *, void (*done)(Scsi_Cmnd *));
static int dtc_bus_reset(Scsi_Cmnd *);
static int dtc_device_reset(Scsi_Cmnd *);
static int dtc_host_reset(Scsi_Cmnd *);
static int dtc_proc_info (char *buffer, char **start, off_t offset,
Linus Torvalds's avatar
Linus Torvalds committed
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
		   int length, int hostno, int inout);

#ifndef CMD_PER_LUN
#define CMD_PER_LUN 2
#endif

#ifndef CAN_QUEUE
#define CAN_QUEUE 32 
#endif

/* 
 * I hadn't thought of this with the earlier drivers - but to prevent
 * macro definition conflicts, we shouldn't define all of the internal
 * macros when this is being used solely for the host stub.
 */

Alan Cox's avatar
Alan Cox committed
56
#define DTC3x80 {						\
57 58 59 60 61 62 63 64 65 66 67 68 69
	.name				= "DTC 3180/3280 ",	\
	.detect				= dtc_detect,		\
	.queuecommand			= dtc_queue_command,	\
	.eh_abort_handler		= dtc_abort,		\
	.eh_bus_reset_handler		= dtc_bus_reset,		\
	.eh_device_reset_handler	= dtc_device_reset,	\
	.eh_host_reset_handler          = dtc_host_reset,		\
	.bios_param     = dtc_biosparam,				\
	.can_queue      = CAN_QUEUE,				\
	.this_id        = 7,					\
	.sg_tablesize   = SG_ALL,					\
	.cmd_per_lun    = CMD_PER_LUN ,				\
	.use_clustering = DISABLE_CLUSTERING}
Linus Torvalds's avatar
Linus Torvalds committed
70 71

#define NCR5380_implementation_fields \
Alan Cox's avatar
Alan Cox committed
72
    unsigned int base
Linus Torvalds's avatar
Linus Torvalds committed
73 74

#define NCR5380_local_declare() \
Alan Cox's avatar
Alan Cox committed
75
    unsigned int base
Linus Torvalds's avatar
Linus Torvalds committed
76 77 78 79 80 81 82

#define NCR5380_setup(instance) \
    base = (unsigned int)(instance)->base

#define DTC_address(reg) (base + DTC_5380_OFFSET + reg)

#define dbNCR5380_read(reg)                                              \
Linus Torvalds's avatar
Linus Torvalds committed
83
    (rval=isa_readb(DTC_address(reg)), \
Linus Torvalds's avatar
Linus Torvalds committed
84 85 86 87 88 89
     (((unsigned char) printk("DTC : read register %d at addr %08x is: %02x\n"\
    , (reg), (int)DTC_address(reg), rval)), rval ) )

#define dbNCR5380_write(reg, value) do {                                  \
    printk("DTC : write %02x to register %d at address %08x\n",         \
            (value), (reg), (int)DTC_address(reg));     \
Linus Torvalds's avatar
Linus Torvalds committed
90
    isa_writeb(value, DTC_address(reg));} while(0)
Linus Torvalds's avatar
Linus Torvalds committed
91 92 93


#if !(DTCDEBUG & DTCDEBUG_TRANSFER) 
Linus Torvalds's avatar
Linus Torvalds committed
94 95
#define NCR5380_read(reg) (isa_readb(DTC_address(reg)))
#define NCR5380_write(reg, value) (isa_writeb(value, DTC_address(reg)))
Linus Torvalds's avatar
Linus Torvalds committed
96
#else
Linus Torvalds's avatar
Linus Torvalds committed
97
#define NCR5380_read(reg) (isa_readb(DTC_address(reg)))
Linus Torvalds's avatar
Linus Torvalds committed
98 99
#define xNCR5380_read(reg)						\
    (((unsigned char) printk("DTC : read register %d at address %08x\n"\
Linus Torvalds's avatar
Linus Torvalds committed
100
    , (reg), DTC_address(reg))), isa_readb(DTC_address(reg)))
Linus Torvalds's avatar
Linus Torvalds committed
101 102 103 104

#define NCR5380_write(reg, value) do {					\
    printk("DTC : write %02x to register %d at address %08x\n", 	\
	    (value), (reg), (int)DTC_address(reg));	\
Linus Torvalds's avatar
Linus Torvalds committed
105
    isa_writeb(value, DTC_address(reg));} while(0)
Linus Torvalds's avatar
Linus Torvalds committed
106 107
#endif

Alan Cox's avatar
Alan Cox committed
108 109 110 111 112 113 114
#define NCR5380_intr			dtc_intr
#define NCR5380_queue_command		dtc_queue_command
#define NCR5380_abort			dtc_abort
#define NCR5380_bus_reset		dtc_bus_reset
#define NCR5380_device_reset		dtc_device_reset
#define NCR5380_host_reset		dtc_host_reset
#define NCR5380_proc_info		dtc_proc_info 
Linus Torvalds's avatar
Linus Torvalds committed
115 116 117 118 119 120 121 122

/* 15 12 11 10
   1001 1100 0000 0000 */

#define DTC_IRQS 0x9c00


#endif /* DTC3280_H */