xref: /openbmc/linux/drivers/scsi/ncr53c8xx.h (revision 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2)
1*1da177e4SLinus Torvalds /******************************************************************************
2*1da177e4SLinus Torvalds **  Device driver for the PCI-SCSI NCR538XX controller family.
3*1da177e4SLinus Torvalds **
4*1da177e4SLinus Torvalds **  Copyright (C) 1994  Wolfgang Stanglmeier
5*1da177e4SLinus Torvalds **
6*1da177e4SLinus Torvalds **  This program is free software; you can redistribute it and/or modify
7*1da177e4SLinus Torvalds **  it under the terms of the GNU General Public License as published by
8*1da177e4SLinus Torvalds **  the Free Software Foundation; either version 2 of the License, or
9*1da177e4SLinus Torvalds **  (at your option) any later version.
10*1da177e4SLinus Torvalds **
11*1da177e4SLinus Torvalds **  This program is distributed in the hope that it will be useful,
12*1da177e4SLinus Torvalds **  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*1da177e4SLinus Torvalds **  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*1da177e4SLinus Torvalds **  GNU General Public License for more details.
15*1da177e4SLinus Torvalds **
16*1da177e4SLinus Torvalds **  You should have received a copy of the GNU General Public License
17*1da177e4SLinus Torvalds **  along with this program; if not, write to the Free Software
18*1da177e4SLinus Torvalds **  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19*1da177e4SLinus Torvalds **
20*1da177e4SLinus Torvalds **-----------------------------------------------------------------------------
21*1da177e4SLinus Torvalds **
22*1da177e4SLinus Torvalds **  This driver has been ported to Linux from the FreeBSD NCR53C8XX driver
23*1da177e4SLinus Torvalds **  and is currently maintained by
24*1da177e4SLinus Torvalds **
25*1da177e4SLinus Torvalds **          Gerard Roudier              <groudier@free.fr>
26*1da177e4SLinus Torvalds **
27*1da177e4SLinus Torvalds **  Being given that this driver originates from the FreeBSD version, and
28*1da177e4SLinus Torvalds **  in order to keep synergy on both, any suggested enhancements and corrections
29*1da177e4SLinus Torvalds **  received on Linux are automatically a potential candidate for the FreeBSD
30*1da177e4SLinus Torvalds **  version.
31*1da177e4SLinus Torvalds **
32*1da177e4SLinus Torvalds **  The original driver has been written for 386bsd and FreeBSD by
33*1da177e4SLinus Torvalds **          Wolfgang Stanglmeier        <wolf@cologne.de>
34*1da177e4SLinus Torvalds **          Stefan Esser                <se@mi.Uni-Koeln.de>
35*1da177e4SLinus Torvalds **
36*1da177e4SLinus Torvalds **  And has been ported to NetBSD by
37*1da177e4SLinus Torvalds **          Charles M. Hannum           <mycroft@gnu.ai.mit.edu>
38*1da177e4SLinus Torvalds **
39*1da177e4SLinus Torvalds *******************************************************************************
40*1da177e4SLinus Torvalds */
41*1da177e4SLinus Torvalds 
42*1da177e4SLinus Torvalds #ifndef NCR53C8XX_H
43*1da177e4SLinus Torvalds #define NCR53C8XX_H
44*1da177e4SLinus Torvalds 
45*1da177e4SLinus Torvalds #include <scsi/scsi_host.h>
46*1da177e4SLinus Torvalds 
47*1da177e4SLinus Torvalds #include "sym53c8xx_defs.h"
48*1da177e4SLinus Torvalds 
49*1da177e4SLinus Torvalds /*
50*1da177e4SLinus Torvalds 	Build a scatter/gather entry.
51*1da177e4SLinus Torvalds 	see sym53c8xx_2/sym_hipd.h for more detailed sym_build_sge()
52*1da177e4SLinus Torvalds 	implementation ;)
53*1da177e4SLinus Torvalds  */
54*1da177e4SLinus Torvalds 
55*1da177e4SLinus Torvalds #define ncr_build_sge(np, data, badd, len)	\
56*1da177e4SLinus Torvalds do {						\
57*1da177e4SLinus Torvalds 	(data)->addr = cpu_to_scr(badd);	\
58*1da177e4SLinus Torvalds 	(data)->size = cpu_to_scr(len);		\
59*1da177e4SLinus Torvalds } while (0)
60*1da177e4SLinus Torvalds 
61*1da177e4SLinus Torvalds /*==========================================================
62*1da177e4SLinus Torvalds **
63*1da177e4SLinus Torvalds **	Structures used by the detection routine to transmit
64*1da177e4SLinus Torvalds **	device configuration to the attach function.
65*1da177e4SLinus Torvalds **
66*1da177e4SLinus Torvalds **==========================================================
67*1da177e4SLinus Torvalds */
68*1da177e4SLinus Torvalds struct ncr_slot {
69*1da177e4SLinus Torvalds 	u_long	base;
70*1da177e4SLinus Torvalds 	u_long	base_2;
71*1da177e4SLinus Torvalds 	u_long	base_c;
72*1da177e4SLinus Torvalds 	u_long	base_2_c;
73*1da177e4SLinus Torvalds 	void __iomem *base_v;
74*1da177e4SLinus Torvalds 	void __iomem *base_2_v;
75*1da177e4SLinus Torvalds 	int	irq;
76*1da177e4SLinus Torvalds /* port and reg fields to use INB, OUTB macros */
77*1da177e4SLinus Torvalds 	volatile struct ncr_reg	__iomem *reg;
78*1da177e4SLinus Torvalds };
79*1da177e4SLinus Torvalds 
80*1da177e4SLinus Torvalds /*==========================================================
81*1da177e4SLinus Torvalds **
82*1da177e4SLinus Torvalds **	Structure used by detection routine to save data on
83*1da177e4SLinus Torvalds **	each detected board for attach.
84*1da177e4SLinus Torvalds **
85*1da177e4SLinus Torvalds **==========================================================
86*1da177e4SLinus Torvalds */
87*1da177e4SLinus Torvalds struct ncr_device {
88*1da177e4SLinus Torvalds 	struct device  *dev;
89*1da177e4SLinus Torvalds 	struct ncr_slot  slot;
90*1da177e4SLinus Torvalds 	struct ncr_chip  chip;
91*1da177e4SLinus Torvalds 	u_char host_id;
92*1da177e4SLinus Torvalds 	u8 differential;
93*1da177e4SLinus Torvalds };
94*1da177e4SLinus Torvalds 
95*1da177e4SLinus Torvalds extern struct Scsi_Host *ncr_attach(struct scsi_host_template *tpnt, int unit, struct ncr_device *device);
96*1da177e4SLinus Torvalds extern int ncr53c8xx_release(struct Scsi_Host *host);
97*1da177e4SLinus Torvalds irqreturn_t ncr53c8xx_intr(int irq, void *dev_id, struct pt_regs * regs);
98*1da177e4SLinus Torvalds extern int ncr53c8xx_init(void);
99*1da177e4SLinus Torvalds extern void ncr53c8xx_exit(void);
100*1da177e4SLinus Torvalds 
101*1da177e4SLinus Torvalds #endif /* NCR53C8XX_H */
102