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