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