This driver hasn't seen any recent bug fixing and is one of the last
drivers using the scsi_module.c infrastruture that has been deprecated
15 years ago.

Signed-off-by: Christoph Hellwig <h...@lst.de>
---
 drivers/scsi/Kconfig        |  14 -
 drivers/scsi/Makefile       |   1 -
 drivers/scsi/eata_generic.h | 401 ------------------
 drivers/scsi/eata_pio.c     | 966 --------------------------------------------
 drivers/scsi/eata_pio.h     |  54 ---
 5 files changed, 1436 deletions(-)
 delete mode 100644 drivers/scsi/eata_generic.h
 delete mode 100644 drivers/scsi/eata_pio.c
 delete mode 100644 drivers/scsi/eata_pio.h

diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig
index 8647ca9199b3..51efb947537d 100644
--- a/drivers/scsi/Kconfig
+++ b/drivers/scsi/Kconfig
@@ -688,20 +688,6 @@ config SCSI_EATA_MAX_TAGS
          by the driver for each probed SCSI device is reported at boot time.
          This is equivalent to the "eata=mq:8" boot option.
 
-config SCSI_EATA_PIO
-       tristate "EATA-PIO (old DPT PM2001, PM2012A) support"
-       depends on (ISA || EISA || PCI) && SCSI && BROKEN
-       ---help---
-         This driver supports all EATA-PIO protocol compliant SCSI Host
-         Adapters like the DPT PM2001 and the PM2012A.  EATA-DMA compliant
-         host adapters could also use this driver but are discouraged from
-         doing so, since this driver only supports hard disks and lacks
-         numerous features.  You might want to have a look at the SCSI-HOWTO,
-         available from <http://www.tldp.org/docs.html#howto>.
-
-         To compile this driver as a module, choose M here: the
-         module will be called eata_pio.
-
 config SCSI_FUTURE_DOMAIN
        tristate "Future Domain 16xx SCSI/AHA-2920A support"
        depends on (ISA || PCI) && SCSI
diff --git a/drivers/scsi/Makefile b/drivers/scsi/Makefile
index fcfd28d2884c..738d02a2a455 100644
--- a/drivers/scsi/Makefile
+++ b/drivers/scsi/Makefile
@@ -93,7 +93,6 @@ obj-$(CONFIG_SCSI_HPSA)               += hpsa.o
 obj-$(CONFIG_SCSI_SMARTPQI)    += smartpqi/
 obj-$(CONFIG_SCSI_SYM53C8XX_2) += sym53c8xx_2/
 obj-$(CONFIG_SCSI_ZALON)       += zalon7xx.o
-obj-$(CONFIG_SCSI_EATA_PIO)    += eata_pio.o
 obj-$(CONFIG_SCSI_EATA)                += eata.o
 obj-$(CONFIG_SCSI_DC395x)      += dc395x.o
 obj-$(CONFIG_SCSI_AM53C974)    += esp_scsi.o   am53c974.o
diff --git a/drivers/scsi/eata_generic.h b/drivers/scsi/eata_generic.h
deleted file mode 100644
index 1a396c5e7f73..000000000000
--- a/drivers/scsi/eata_generic.h
+++ /dev/null
@@ -1,401 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/********************************************************
-* Header file for eata_dma.c and eata_pio.c            *
-* Linux EATA SCSI drivers                              *
-* (c) 1993-96 Michael Neuffer                           *
-*             m...@i-connect.net                        *
-*             neuf...@mail.uni-mainz.de                 *
-*********************************************************
-* last change: 96/08/14                                 *
-********************************************************/
-
-
-#ifndef _EATA_GENERIC_H
-#define _EATA_GENERIC_H
-
-
-
-/*********************************************
- * Misc. definitions                        *
- *********************************************/
-
-#define R_LIMIT 0x20000
-
-#define MAXISA    4
-#define MAXEISA          16  
-#define MAXPCI   16
-#define MAXIRQ   16 
-#define MAXTARGET 16
-#define MAXCHANNEL 3
-
-#define IS_ISA    'I'
-#define IS_EISA           'E'
-#define IS_PCI    'P'
-
-#define BROKEN_INQUIRY 1
-
-#define BUSMASTER       0xff
-#define PIO             0xfe
-
-#define EATA_SIGNATURE 0x45415441     /* BIG ENDIAN coded "EATA" sig.   */
-
-#define DPT_ID1         0x12
-#define DPT_ID2         0x14
-
-#define ATT_ID1         0x06
-#define ATT_ID2         0x94
-#define ATT_ID3         0x0
-
-#define NEC_ID1         0x38
-#define NEC_ID2         0xa3
-#define NEC_ID3         0x82
-
- 
-#define EATA_CP_SIZE    44
-
-#define MAX_PCI_DEVICES  32           /* Maximum # Of Devices Per Bus   */
-#define MAX_METHOD_2    16            /* Max Devices For Method 2       */
-#define MAX_PCI_BUS     16            /* Maximum # Of Busses Allowed    */
-
-#define SG_SIZE                 64 
-#define SG_SIZE_BIG     252           /* max. 8096 elements, 64k */
-
-#define UPPER_DEVICE_QUEUE_LIMIT 64    /* The limit we have to set for the 
-                                       * device queue to keep the broken 
-                                       * midlevel SCSI code from producing
-                                       * bogus timeouts
-                                       */
-
-#define TYPE_DISK_QUEUE  16
-#define TYPE_TAPE_QUEUE  4
-#define TYPE_ROM_QUEUE   4
-#define TYPE_OTHER_QUEUE 2
-
-#define FREE            0
-#define OK              0
-#define NO_TIMEOUT       0
-#define USED            1
-#define TIMEOUT                 2
-#define RESET           4
-#define LOCKED          8
-#define ABORTED          16
-
-#define READ             0
-#define WRITE            1
-#define OTHER            2
-
-#define HD(cmd)         ((hostdata *)&(cmd->device->host->hostdata))
-#define CD(cmd)         ((struct eata_ccb *)(cmd->host_scribble))
-#define SD(host) ((hostdata *)&(host->hostdata))
-
-/***********************************************
- *    EATA Command & Register definitions      *
- ***********************************************/
-#define PCI_REG_DPTconfig       0x40    
-#define PCI_REG_PumpModeAddress         0x44    
-#define PCI_REG_PumpModeData    0x48    
-#define PCI_REG_ConfigParam1    0x50    
-#define PCI_REG_ConfigParam2    0x54    
-
-
-#define EATA_CMD_PIO_SETUPTEST  0xc6
-#define EATA_CMD_PIO_READ_CONFIG 0xf0
-#define EATA_CMD_PIO_SET_CONFIG         0xf1
-#define EATA_CMD_PIO_SEND_CP    0xf2
-#define EATA_CMD_PIO_RECEIVE_SP         0xf3
-#define EATA_CMD_PIO_TRUNC      0xf4
-
-#define EATA_CMD_RESET          0xf9
-#define EATA_CMD_IMMEDIATE      0xfa
-
-#define EATA_CMD_DMA_READ_CONFIG 0xfd
-#define EATA_CMD_DMA_SET_CONFIG         0xfe
-#define EATA_CMD_DMA_SEND_CP    0xff
-
-#define ECS_EMULATE_SENSE       0xd4
-
-#define EATA_GENERIC_ABORT       0x00 
-#define EATA_SPECIFIC_RESET      0x01
-#define EATA_BUS_RESET           0x02
-#define EATA_SPECIFIC_ABORT      0x03
-#define EATA_QUIET_INTR          0x04
-#define EATA_COLD_BOOT_HBA       0x06     /* Only as a last resort     */
-#define EATA_FORCE_IO            0x07
-
-#define HA_CTRLREG     0x206       /* control register for HBA    */
-#define HA_CTRL_DISINT 0x02        /* CTRLREG: disable interrupts */
-#define HA_CTRL_RESCPU 0x04        /* CTRLREG: reset processor    */
-#define HA_CTRL_8HEADS 0x08        /* CTRLREG: set for drives with* 
-                                   * >=8 heads (WD1003 rudimentary :-) */
-
-#define HA_WCOMMAND    0x07       /* command register offset   */
-#define HA_WIFC        0x06       /* immediate command offset  */
-#define HA_WCODE       0x05 
-#define HA_WCODE2      0x04 
-#define HA_WDMAADDR    0x02       /* DMA address LSB offset    */  
-#define HA_RAUXSTAT    0x08       /* aux status register offset*/
-#define HA_RSTATUS     0x07       /* status register offset    */
-#define HA_RDATA       0x00       /* data register (16bit)     */
-#define HA_WDATA       0x00       /* data register (16bit)     */
-
-#define HA_ABUSY       0x01       /* aux busy bit              */
-#define HA_AIRQ               0x02        /* aux IRQ pending bit       */
-#define HA_SERROR      0x01       /* pr. command ended in error*/
-#define HA_SMORE       0x02       /* more data soon to come    */
-#define HA_SCORR       0x04       /* data corrected            */
-#define HA_SDRQ               0x08        /* data request active       */
-#define HA_SSC        0x10        /* seek complete             */
-#define HA_SFAULT      0x20       /* write fault               */
-#define HA_SREADY      0x40       /* drive ready               */
-#define HA_SBUSY       0x80       /* drive busy                */
-#define HA_SDRDY       HA_SSC+HA_SREADY+HA_SDRQ 
-
-/**********************************************
- * Message definitions                       *
- **********************************************/
-
-#define HA_NO_ERROR     0x00   /* No Error                             */
-#define HA_ERR_SEL_TO   0x01   /* Selection Timeout                    */
-#define HA_ERR_CMD_TO   0x02   /* Command Timeout                      */
-#define HA_BUS_RESET    0x03   /* SCSI Bus Reset Received              */
-#define HA_INIT_POWERUP         0x04   /* Initial Controller Power-up          
*/
-#define HA_UNX_BUSPHASE         0x05   /* Unexpected Bus Phase                 
*/
-#define HA_UNX_BUS_FREE         0x06   /* Unexpected Bus Free                  
*/
-#define HA_BUS_PARITY   0x07   /* Bus Parity Error                     */
-#define HA_SCSI_HUNG    0x08   /* SCSI Hung                            */
-#define HA_UNX_MSGRJCT  0x09   /* Unexpected Message Rejected          */
-#define HA_RESET_STUCK  0x0a   /* SCSI Bus Reset Stuck                 */
-#define HA_RSENSE_FAIL  0x0b   /* Auto Request-Sense Failed            */
-#define HA_PARITY_ERR   0x0c   /* Controller Ram Parity Error          */
-#define HA_CP_ABORT_NA  0x0d   /* Abort Message sent to non-active cmd */
-#define HA_CP_ABORTED   0x0e   /* Abort Message sent to active cmd     */
-#define HA_CP_RESET_NA  0x0f   /* Reset Message sent to non-active cmd */
-#define HA_CP_RESET     0x10   /* Reset Message sent to active cmd     */
-#define HA_ECC_ERR      0x11   /* Controller Ram ECC Error             */
-#define HA_PCI_PARITY   0x12   /* PCI Parity Error                     */
-#define HA_PCI_MABORT   0x13   /* PCI Master Abort                     */
-#define HA_PCI_TABORT   0x14   /* PCI Target Abort                     */
-#define HA_PCI_STABORT  0x15   /* PCI Signaled Target Abort            */
-
-/**********************************************
- *  Other  definitions                       *
- **********************************************/
-
-struct reg_bit {      /* reading this one will clear the interrupt    */
-    __u8 error:1;     /* previous command ended in an error          */
-    __u8 more:1;      /* more DATA coming soon, poll BSY & DRQ (PIO)  */
-    __u8 corr:1;      /* data read was successfully corrected with ECC*/
-    __u8 drq:1;              /* data request active  */     
-    __u8 sc:1;       /* seek complete        */
-    __u8 fault:1;     /* write fault         */
-    __u8 ready:1;     /* drive ready         */
-    __u8 busy:1;      /* controller busy      */
-};
-
-struct reg_abit {     /* reading this won't clear the interrupt */
-    __u8 abusy:1;     /* auxiliary busy                                */
-    __u8 irq:1;              /* set when drive interrupt is asserted   */
-    __u8 dummy:6;
-};
-
-struct eata_register {     /* EATA register set */
-    __u8 data_reg[2];      /* R, couldn't figure this one out          */
-    __u8 cp_addr[4];       /* W, CP address register                   */
-    union { 
-       __u8 command;       /* W, command code: [read|set] conf, send CP*/
-       struct reg_bit status;  /* R, see register_bit1                 */
-       __u8 statusbyte;
-    } ovr;   
-    struct reg_abit aux_stat; /* R, see register_bit2                  */
-};
-
-struct get_conf {            /* Read Configuration Array               */
-    __u32  len;                      /* Should return 0x22, 0x24, etc          
*/
-    __u32 signature;         /* Signature MUST be "EATA"               */
-    __u8    version2:4,
-            version:4;       /* EATA Version level                     */
-    __u8 OCS_enabled:1,              /* Overlap Command Support enabled        
*/
-        TAR_support:1,       /* SCSI Target Mode supported             */
-             TRNXFR:1,       /* Truncate Transfer Cmd not necessary    *
-                              * Only used in PIO Mode                  */
-       MORE_support:1,       /* MORE supported (only PIO Mode)         */
-        DMA_support:1,       /* DMA supported Driver uses only         *
-                              * this mode                              */
-          DMA_valid:1,       /* DRQ value in Byte 30 is valid          */
-                ATA:1,       /* ATA device connected (not supported)   */
-          HAA_valid:1;       /* Hostadapter Address is valid           */
-
-    __u16 cppadlen;          /* Number of pad bytes send after CD data *
-                              * set to zero for DMA commands           */
-    __u8 scsi_id[4];         /* SCSI ID of controller 2-0 Byte 0 res.  *
-                              * if not, zero is returned               */
-    __u32  cplen;            /* CP length: number of valid cp bytes    */
-    __u32  splen;            /* Number of bytes returned after         * 
-                              * Receive SP command                     */
-    __u16 queuesiz;          /* max number of queueable CPs            */
-    __u16 dummy;
-    __u16 SGsiz;             /* max number of SG table entries         */
-    __u8    IRQ:4,           /* IRQ used this HA                       */
-        IRQ_TR:1,            /* IRQ Trigger: 0=edge, 1=level           */
-        SECOND:1,            /* This is a secondary controller         */
-    DMA_channel:2;           /* DRQ index, DRQ is 2comp of DRQX        */
-    __u8 sync;               /* device at ID 7 tru 0 is running in     *
-                              * synchronous mode, this will disappear  */
-    __u8   DSBLE:1,          /* ISA i/o addressing is disabled         */
-        FORCADR:1,           /* i/o address has been forced            */
-         SG_64K:1,
-         SG_UAE:1,
-               :4;
-    __u8  MAX_ID:5,          /* Max number of SCSI target IDs          */
-       MAX_CHAN:3;           /* Number of SCSI busses on HBA           */
-    __u8 MAX_LUN;            /* Max number of LUNs                     */
-    __u8       :3,
-        AUTOTRM:1,
-        M1_inst:1,
-        ID_qest:1,           /* Raidnum ID is questionable             */
-         is_PCI:1,           /* HBA is PCI                             */
-        is_EISA:1;           /* HBA is EISA                            */
-    __u8 RAIDNUM;             /* unique HBA identifier                  */
-    __u8 unused[474]; 
-};
-
-struct eata_sg_list
-{
-    __u32 data;
-    __u32 len;
-};
-
-struct eata_ccb {            /* Send Command Packet structure      */
- 
-    __u8 SCSI_Reset:1,       /* Cause a SCSI Bus reset on the cmd      */
-          HBA_Init:1,        /* Cause Controller to reinitialize       */
-       Auto_Req_Sen:1,       /* Do Auto Request Sense on errors        */
-           scatter:1,        /* Data Ptr points to a SG Packet         */
-            Resrvd:1,        /* RFU                                    */
-         Interpret:1,        /* Interpret the SCSI cdb of own use      */
-           DataOut:1,        /* Data Out phase with command            */
-            DataIn:1;        /* Data In phase with command             */
-    __u8 reqlen;             /* Request Sense Length                   * 
-                              * Valid if Auto_Req_Sen=1                */
-    __u8 unused[3];
-    __u8  FWNEST:1,          /* send cmd to phys RAID component        */
-        unused2:7;
-    __u8 Phsunit:1,          /* physical unit on mirrored pair         */
-           I_AT:1,           /* inhibit address translation            */
-        I_HBA_C:1,           /* HBA inhibit caching                    */
-        unused3:5;
-
-    __u8     cp_id:5,        /* SCSI Device ID of target               */ 
-       cp_channel:3;         /* SCSI Channel # of HBA                  */
-    __u8    cp_lun:3,
-                 :2,
-        cp_luntar:1,         /* CP is for target ROUTINE               */
-        cp_dispri:1,         /* Grant disconnect privilege             */
-       cp_identify:1;        /* Always TRUE                            */
-    __u8 cp_msg1;            /* Message bytes 0-3                      */
-    __u8 cp_msg2;
-    __u8 cp_msg3;
-    __u8 cp_cdb[12];         /* Command Descriptor Block               */
-    __u32 cp_datalen;        /* Data Transfer Length                   *
-                              * If scatter=1 len of sg package         */
-    void *cp_viraddr;        /* address of this ccb                    */
-    __u32 cp_dataDMA;        /* Data Address, if scatter=1             *
-                              * address of scatter packet              */
-    __u32 cp_statDMA;        /* address for Status Packet              */ 
-    __u32 cp_reqDMA;         /* Request Sense Address, used if         *
-                              * CP command ends with error             */
-    /* Additional CP info begins here */
-    __u32 timestamp;         /* Needed to measure command latency      */
-    __u32 timeout;
-    __u8 sizeindex;
-    __u8 rw_latency;
-    __u8 retries;
-    __u8 status;             /* status of this queueslot               */
-    struct scsi_cmnd *cmd;    /* address of cmd                                
*/
-    struct eata_sg_list *sg_list;
-};
-
-
-struct eata_sp {
-    __u8 hba_stat:7,         /* HBA status                             */
-             EOC:1;          /* True if command finished               */
-    __u8 scsi_stat;          /* Target SCSI status                     */
-    __u8 reserved[2];
-    __u32  residue_len;              /* Number of bytes not transferred        
*/
-    struct eata_ccb *ccb;     /* Address set in COMMAND PACKET         */
-    __u8 msg[12];
-};
-
-typedef struct hstd {
-    __u8   vendor[9];
-    __u8   name[18];
-    __u8   revision[6];
-    __u8   EATA_revision;
-    __u32  firmware_revision;
-    __u8   HBA_number;
-    __u8   bustype;             /* bustype of HBA             */
-    __u8   channel;             /* # of avail. scsi channels  */
-    __u8   state;               /* state of HBA               */
-    __u8   primary;             /* true if primary            */
-    __u8        more_support:1,  /* HBA supports MORE flag     */
-           immediate_support:1,  /* HBA supports IMMEDIATE CMDs*/
-              broken_INQUIRY:1;         /* This is an EISA HBA with   *
-                                 * broken INQUIRY             */
-    __u8   do_latency;          /* Latency measurement flag   */
-    __u32  reads[13];
-    __u32  writes[13];
-    __u32  reads_lat[12][4];
-    __u32  writes_lat[12][4];
-    __u32  all_lat[4];
-    __u8   resetlevel[MAXCHANNEL]; 
-    __u32  last_ccb;            /* Last used ccb              */
-    __u32  cplen;               /* size of CP in words        */
-    __u16  cppadlen;            /* pad length of cp in words  */
-    __u16  queuesize;
-    __u16  sgsize;               /* # of entries in the SG list*/
-    __u16  devflags;            /* bits set for detected devices */
-    __u8   hostid;              /* SCSI ID of HBA             */
-    __u8   moresupport;                 /* HBA supports MORE flag     */
-    struct Scsi_Host *next;        
-    struct Scsi_Host *prev;
-    struct pci_dev *pdev;      /* PCI device or NULL for non PCI */
-    struct eata_sp sp;          /* status packet              */ 
-    struct eata_ccb ccb[0];     /* ccb array begins here      */
-}hostdata;
-
-/* structure for max. 2 emulated drives */
-struct drive_geom_emul {
-    __u8  trans;                /* translation flag 1=transl */
-    __u8  channel;              /* SCSI channel number       */
-    __u8  HBA;                  /* HBA number (prim/sec)     */
-    __u8  id;                   /* drive id                  */
-    __u8  lun;                  /* drive lun                 */
-    __u32 heads;                /* number of heads           */
-    __u32 sectors;              /* number of sectors         */
-    __u32 cylinder;             /* number of cylinders       */
-};
-
-struct geom_emul {
-    __u8 bios_drives;           /* number of emulated drives */
-    struct drive_geom_emul drv[2]; /* drive structures       */
-};
-
-#endif /* _EATA_GENERIC_H */
-
-/*
- * Overrides for Emacs so that we almost follow Linus's tabbing style.
- * Emacs will notice this stuff at the end of the file and automatically
- * adjust the settings for this buffer only.  This must remain at the end
- * of the file.
- * ---------------------------------------------------------------------------
- * Local variables:
- * c-indent-level: 4
- * c-brace-imaginary-offset: 0
- * c-brace-offset: -4
- * c-argdecl-indent: 4
- * c-label-offset: -4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: 0
- * tab-width: 8
- * End:
- */
diff --git a/drivers/scsi/eata_pio.c b/drivers/scsi/eata_pio.c
deleted file mode 100644
index 4299fa485622..000000000000
--- a/drivers/scsi/eata_pio.c
+++ /dev/null
@@ -1,966 +0,0 @@
-/************************************************************
- *                                                          *
- *               Linux EATA SCSI PIO driver                 *
- *                                                          *
- *  based on the CAM document CAM/89-004 rev. 2.0c,         *
- *  DPT's driver kit, some internal documents and source,   *
- *  and several other Linux scsi drivers and kernel docs.   *
- *                                                          *
- *  The driver currently:                                   *
- *      -supports all EATA-PIO boards                       *
- *      -only supports DASD devices                         *
- *                                                          *
- *  (c)1993-96 Michael Neuffer, Alfred Arnold               *
- *             neuf...@goofy.zdv.uni-mainz.de               *
- *             a.arn...@kfa-juelich.de                      * 
- *                                                          *
- *  Updated 2002 by Alan Cox <a...@lxorguk.ukuu.org.uk> for *
- *   Linux 2.5.x and the newer locking and error handling   *
- *                                                          *
- *  This program is free software; you can redistribute it  *
- *  and/or modify it under the terms of the GNU General     *
- *  Public License as published by the Free Software        *
- *  Foundation; either version 2 of the License, or         *
- *  (at your option) any later version.                     *
- *                                                          *
- *  This program is distributed in the hope that it will be *
- *  useful, but WITHOUT ANY WARRANTY; without even the      *
- *  implied warranty of MERCHANTABILITY or FITNESS FOR A    *
- *  PARTICULAR PURPOSE.  See the GNU General Public License *
- *  for more details.                                       *
- *                                                          *
- *  You should have received a copy of the GNU General      *
- *  Public License along with this kernel; if not, write to *
- *  the Free Software Foundation, Inc., 675 Mass Ave,       *
- *  Cambridge, MA 02139, USA.                               *
- *                                                         *
- *  For the avoidance of doubt the "preferred form" of this *
- *  code is one which is in an open non patent encumbered   *
- *  format. Where cryptographic key signing forms part of   *
- *  the process of creating an executable the information   *
- *  including keys needed to generate an equivalently       *
- *  functional executable are deemed to be part of the             *
- *  source code are deemed to be part of the source code.   *
- *                                                          *
- ************************************************************
- *  last change: 2002/11/02               OS: Linux 2.5.45  *
- ************************************************************/
-
-#include <linux/module.h>
-#include <linux/kernel.h>
-#include <linux/string.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/pci.h>
-#include <linux/proc_fs.h>
-#include <linux/interrupt.h>
-#include <linux/blkdev.h>
-#include <linux/spinlock.h>
-#include <linux/delay.h>
-
-#include <asm/io.h>
-
-#include <scsi/scsi.h>
-#include <scsi/scsi_cmnd.h>
-#include <scsi/scsi_device.h>
-#include <scsi/scsi_host.h>
-
-#include "eata_generic.h"
-#include "eata_pio.h"
-
-
-static unsigned int ISAbases[MAXISA] = {
-        0x1F0, 0x170, 0x330, 0x230
-};
-
-static unsigned int ISAirqs[MAXISA] = {
-       14, 12, 15, 11
-};
-
-static unsigned char EISAbases[] = { 
-       1, 1, 1, 1, 1, 1, 1, 1,
-       1, 1, 1, 1, 1, 1, 1, 1 
-};
-
-static unsigned int registered_HBAs;
-static struct Scsi_Host *last_HBA;
-static struct Scsi_Host *first_HBA;
-static unsigned char reg_IRQ[16];
-static unsigned char reg_IRQL[16];
-static unsigned long int_counter;
-static unsigned long queue_counter;
-
-static struct scsi_host_template driver_template;
-
-static int eata_pio_show_info(struct seq_file *m, struct Scsi_Host *shost)
-{
-       seq_printf(m, "EATA (Extended Attachment) PIO driver version: "
-                  "%d.%d%s\n",VER_MAJOR, VER_MINOR, VER_SUB);
-       seq_printf(m, "queued commands:     %10ld\n"
-                  "processed interrupts:%10ld\n", queue_counter, int_counter);
-       seq_printf(m, "\nscsi%-2d: HBA %.10s\n",
-                  shost->host_no, SD(shost)->name);
-       seq_printf(m, "Firmware revision: v%s\n",
-                  SD(shost)->revision);
-       seq_puts(m, "IO: PIO\n");
-       seq_printf(m, "Base IO : %#.4x\n", (u32) shost->base);
-       seq_printf(m, "Host Bus: %s\n",
-                  (SD(shost)->bustype == 'P')?"PCI ":
-                  (SD(shost)->bustype == 'E')?"EISA":"ISA ");
-       return 0;
-}
-
-static int eata_pio_release(struct Scsi_Host *sh)
-{
-       hostdata *hd = SD(sh);
-       if (sh->irq && reg_IRQ[sh->irq] == 1)
-               free_irq(sh->irq, NULL);
-       else
-               reg_IRQ[sh->irq]--;
-       if (SD(sh)->channel == 0) {
-               if (sh->io_port && sh->n_io_port)
-                       release_region(sh->io_port, sh->n_io_port);
-       }
-       /* At this point the PCI reference can go */
-       if (hd->pdev)
-               pci_dev_put(hd->pdev);
-       return 1;
-}
-
-static void IncStat(struct scsi_pointer *SCp, unsigned int Increment)
-{
-       SCp->ptr += Increment;
-       if ((SCp->this_residual -= Increment) == 0) {
-               if ((--SCp->buffers_residual) == 0)
-                       SCp->Status = 0;
-               else {
-                       SCp->buffer++;
-                       SCp->ptr = sg_virt(SCp->buffer);
-                       SCp->this_residual = SCp->buffer->length;
-               }
-       }
-}
-
-static irqreturn_t eata_pio_int_handler(int irq, void *dev_id);
-
-static irqreturn_t do_eata_pio_int_handler(int irq, void *dev_id)
-{
-       unsigned long flags;
-       struct Scsi_Host *dev = dev_id;
-       irqreturn_t ret;
-
-       spin_lock_irqsave(dev->host_lock, flags);
-       ret = eata_pio_int_handler(irq, dev_id);
-       spin_unlock_irqrestore(dev->host_lock, flags);
-       return ret;
-}
-
-static irqreturn_t eata_pio_int_handler(int irq, void *dev_id)
-{
-       unsigned int eata_stat = 0xfffff;
-       struct scsi_cmnd *cmd;
-       hostdata *hd;
-       struct eata_ccb *cp;
-       unsigned long base;
-       unsigned int x, z;
-       struct Scsi_Host *sh;
-       unsigned short zwickel = 0;
-       unsigned char stat, odd;
-       irqreturn_t ret = IRQ_NONE;
-
-       for (x = 1, sh = first_HBA; x <= registered_HBAs; x++, sh = 
SD(sh)->prev) 
-       {
-               if (sh->irq != irq)
-                       continue;
-               if (inb(sh->base + HA_RSTATUS) & HA_SBUSY)
-                       continue;
-
-               int_counter++;
-               ret = IRQ_HANDLED;
-
-               hd = SD(sh);
-
-               cp = &hd->ccb[0];
-               cmd = cp->cmd;
-               base = cmd->device->host->base;
-
-               do {
-                       stat = inb(base + HA_RSTATUS);
-                       if (stat & HA_SDRQ) {
-                               if (cp->DataIn) {
-                                       z = 256;
-                                       odd = 0;
-                                       while ((cmd->SCp.Status) && ((z > 0) || 
(odd))) {
-                                               if (odd) {
-                                                       *(cmd->SCp.ptr) = 
zwickel >> 8;
-                                                       IncStat(&cmd->SCp, 1);
-                                                       odd = 0;
-                                               }
-                                               x = min_t(unsigned int, z, 
cmd->SCp.this_residual / 2);
-                                               insw(base + HA_RDATA, 
cmd->SCp.ptr, x);
-                                               z -= x;
-                                               IncStat(&cmd->SCp, 2 * x);
-                                               if ((z > 0) && 
(cmd->SCp.this_residual == 1)) {
-                                                       zwickel = inw(base + 
HA_RDATA);
-                                                       *(cmd->SCp.ptr) = 
zwickel & 0xff;
-                                                       IncStat(&cmd->SCp, 1);
-                                                       z--;
-                                                       odd = 1;
-                                               }
-                                       }
-                                       while (z > 0) {
-                                               zwickel = inw(base + HA_RDATA);
-                                               z--;
-                                       }
-                               } else {        /* cp->DataOut */
-
-                                       odd = 0;
-                                       z = 256;
-                                       while ((cmd->SCp.Status) && ((z > 0) || 
(odd))) {
-                                               if (odd) {
-                                                       zwickel += 
*(cmd->SCp.ptr) << 8;
-                                                       IncStat(&cmd->SCp, 1);
-                                                       outw(zwickel, base + 
HA_RDATA);
-                                                       z--;
-                                                       odd = 0;
-                                               }
-                                               x = min_t(unsigned int, z, 
cmd->SCp.this_residual / 2);
-                                               outsw(base + HA_RDATA, 
cmd->SCp.ptr, x);
-                                               z -= x;
-                                               IncStat(&cmd->SCp, 2 * x);
-                                               if ((z > 0) && 
(cmd->SCp.this_residual == 1)) {
-                                                       zwickel = 
*(cmd->SCp.ptr);
-                                                       zwickel &= 0xff;
-                                                       IncStat(&cmd->SCp, 1);
-                                                       odd = 1;
-                                               }
-                                       }
-                                       while (z > 0 || odd) {
-                                               outw(zwickel, base + HA_RDATA);
-                                               z--;
-                                               odd = 0;
-                                       }
-                               }
-                       }
-               }
-               while ((stat & HA_SDRQ) || ((stat & HA_SMORE) && 
hd->moresupport));
-
-               /* terminate handler if HBA goes busy again, i.e. transfers
-                * more data */
-
-               if (stat & HA_SBUSY)
-                       break;
-
-               /* OK, this is quite stupid, but I haven't found any correct
-                * way to get HBA&SCSI status so far */
-
-               if (!(inb(base + HA_RSTATUS) & HA_SERROR)) {
-                       cmd->result = (DID_OK << 16);
-                       hd->devflags |= (1 << cp->cp_id);
-               } else if (hd->devflags & (1 << cp->cp_id))
-                       cmd->result = (DID_OK << 16) + 0x02;
-               else
-                       cmd->result = (DID_NO_CONNECT << 16);
-
-               if (cp->status == LOCKED) {
-                       cp->status = FREE;
-                       eata_stat = inb(base + HA_RSTATUS);
-                       printk(KERN_CRIT "eata_pio: int_handler, freeing locked 
" "queueslot\n");
-                       return ret;
-               }
-#if DBG_INTR2
-               if (stat != 0x50)
-                       printk(KERN_DEBUG "stat: %#.2x, result: %#.8x\n", stat, 
cmd->result);
-#endif
-
-               cp->status = FREE;      /* now we can release the slot  */
-
-               cmd->scsi_done(cmd);
-       }
-
-       return ret;
-}
-
-static inline unsigned int eata_pio_send_command(unsigned long base, unsigned 
char command)
-{
-       unsigned int loop = 50;
-
-       while (inb(base + HA_RSTATUS) & HA_SBUSY)
-               if (--loop == 0)
-                       return 1;
-
-       /* Enable interrupts for HBA.  It is not the best way to do it at this
-        * place, but I hope that it doesn't interfere with the IDE driver 
-        * initialization this way */
-
-       outb(HA_CTRL_8HEADS, base + HA_CTRLREG);
-
-       outb(command, base + HA_WCOMMAND);
-       return 0;
-}
-
-static int eata_pio_queue_lck(struct scsi_cmnd *cmd,
-               void (*done)(struct scsi_cmnd *))
-{
-       unsigned int x, y;
-       unsigned long base;
-
-       hostdata *hd;
-       struct Scsi_Host *sh;
-       struct eata_ccb *cp;
-
-       queue_counter++;
-
-       hd = HD(cmd);
-       sh = cmd->device->host;
-       base = sh->base;
-
-       /* use only slot 0, as 2001 can handle only one cmd at a time */
-
-       y = x = 0;
-
-       if (hd->ccb[y].status != FREE) {
-
-               DBG(DBG_QUEUE, printk(KERN_EMERG "can_queue %d, x %d, y %d\n", 
sh->can_queue, x, y));
-#if DEBUG_EATA
-               panic(KERN_EMERG "eata_pio: run out of queue slots cmdno:%ld " 
"intrno: %ld\n", queue_counter, int_counter);
-#else
-               panic(KERN_EMERG "eata_pio: run out of queue slots....\n");
-#endif
-       }
-
-       cp = &hd->ccb[y];
-
-       memset(cp, 0, sizeof(struct eata_ccb));
-
-       cp->status = USED;      /* claim free slot */
-
-       DBG(DBG_QUEUE, scmd_printk(KERN_DEBUG, cmd,
-               "eata_pio_queue 0x%p, y %d\n", cmd, y));
-
-       cmd->scsi_done = (void *) done;
-
-       if (cmd->sc_data_direction == DMA_TO_DEVICE)
-               cp->DataOut = 1;        /* Output mode */
-       else
-               cp->DataIn = 0; /* Input mode  */
-
-       cp->Interpret = (cmd->device->id == hd->hostid);
-       cp->cp_datalen = cpu_to_be32(scsi_bufflen(cmd));
-       cp->Auto_Req_Sen = 0;
-       cp->cp_reqDMA = 0;
-       cp->reqlen = 0;
-
-       cp->cp_id = cmd->device->id;
-       cp->cp_lun = cmd->device->lun;
-       cp->cp_dispri = 0;
-       cp->cp_identify = 1;
-       memcpy(cp->cp_cdb, cmd->cmnd, COMMAND_SIZE(*cmd->cmnd));
-
-       cp->cp_statDMA = 0;
-
-       cp->cp_viraddr = cp;
-       cp->cmd = cmd;
-       cmd->host_scribble = (char *) &hd->ccb[y];
-
-       if (!scsi_bufflen(cmd)) {
-               cmd->SCp.buffers_residual = 1;
-               cmd->SCp.ptr = NULL;
-               cmd->SCp.this_residual = 0;
-               cmd->SCp.buffer = NULL;
-       } else {
-               cmd->SCp.buffer = scsi_sglist(cmd);
-               cmd->SCp.buffers_residual = scsi_sg_count(cmd);
-               cmd->SCp.ptr = sg_virt(cmd->SCp.buffer);
-               cmd->SCp.this_residual = cmd->SCp.buffer->length;
-       }
-       cmd->SCp.Status = (cmd->SCp.this_residual != 0);        /* TRUE as long 
as bytes 
-                                                                * are to 
transfer */
-
-       if (eata_pio_send_command(base, EATA_CMD_PIO_SEND_CP)) {
-               cmd->result = DID_BUS_BUSY << 16;
-               scmd_printk(KERN_NOTICE, cmd,
-                       "eata_pio_queue pid 0x%p, HBA busy, "
-                       "returning DID_BUS_BUSY, done.\n", cmd);
-               done(cmd);
-               cp->status = FREE;
-               return 0;
-       }
-       /* FIXME: timeout */
-       while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
-               cpu_relax();
-       outsw(base + HA_RDATA, cp, hd->cplen);
-       outb(EATA_CMD_PIO_TRUNC, base + HA_WCOMMAND);
-       for (x = 0; x < hd->cppadlen; x++)
-               outw(0, base + HA_RDATA);
-
-       DBG(DBG_QUEUE, scmd_printk(KERN_DEBUG, cmd,
-               "Queued base %#.4lx cmd: 0x%p "
-               "slot %d irq %d\n", sh->base, cmd, y, sh->irq));
-
-       return 0;
-}
-
-static DEF_SCSI_QCMD(eata_pio_queue)
-
-static int eata_pio_abort(struct scsi_cmnd *cmd)
-{
-       unsigned int loop = 100;
-
-       DBG(DBG_ABNORM, scmd_printk(KERN_WARNING, cmd,
-               "eata_pio_abort called pid: 0x%p\n", cmd));
-
-       while (inb(cmd->device->host->base + HA_RAUXSTAT) & HA_ABUSY)
-               if (--loop == 0) {
-                       printk(KERN_WARNING "eata_pio: abort, timeout 
error.\n");
-                       return FAILED;
-               }
-       if (CD(cmd)->status == FREE) {
-               DBG(DBG_ABNORM, printk(KERN_WARNING "Returning: 
SCSI_ABORT_NOT_RUNNING\n"));
-               return FAILED;
-       }
-       if (CD(cmd)->status == USED) {
-               DBG(DBG_ABNORM, printk(KERN_WARNING "Returning: 
SCSI_ABORT_BUSY\n"));
-               /* We want to sleep a bit more here */
-               return FAILED;          /* SNOOZE */
-       }
-       if (CD(cmd)->status == RESET) {
-               printk(KERN_WARNING "eata_pio: abort, command reset error.\n");
-               return FAILED;
-       }
-       if (CD(cmd)->status == LOCKED) {
-               DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio: abort, queue 
slot " "locked.\n"));
-               return FAILED;
-       }
-       panic("eata_pio: abort: invalid slot status\n");
-}
-
-static int eata_pio_host_reset(struct scsi_cmnd *cmd)
-{
-       unsigned int x, limit = 0;
-       unsigned char success = 0;
-       struct scsi_cmnd *sp;
-       struct Scsi_Host *host = cmd->device->host;
-
-       DBG(DBG_ABNORM, scmd_printk(KERN_WARNING, cmd,
-               "eata_pio_reset called\n"));
-
-       spin_lock_irq(host->host_lock);
-
-       if (HD(cmd)->state == RESET) {
-               printk(KERN_WARNING "eata_pio_reset: exit, already in 
reset.\n");
-               spin_unlock_irq(host->host_lock);
-               return FAILED;
-       }
-
-       /* force all slots to be free */
-
-       for (x = 0; x < cmd->device->host->can_queue; x++) {
-
-               if (HD(cmd)->ccb[x].status == FREE)
-                       continue;
-
-               sp = HD(cmd)->ccb[x].cmd;
-               HD(cmd)->ccb[x].status = RESET;
-               printk(KERN_WARNING "eata_pio_reset: slot %d in reset.\n", x);
-
-               if (sp == NULL)
-                       panic("eata_pio_reset: slot %d, sp==NULL.\n", x);
-       }
-
-       /* hard reset the HBA  */
-       outb(EATA_CMD_RESET, cmd->device->host->base + HA_WCOMMAND);
-
-       DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: board reset 
done.\n"));
-       HD(cmd)->state = RESET;
-
-       spin_unlock_irq(host->host_lock);
-       msleep(3000);
-       spin_lock_irq(host->host_lock);
-
-       DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: interrupts 
disabled, " "loops %d.\n", limit));
-
-       for (x = 0; x < cmd->device->host->can_queue; x++) {
-
-               /* Skip slots already set free by interrupt */
-               if (HD(cmd)->ccb[x].status != RESET)
-                       continue;
-
-               sp = HD(cmd)->ccb[x].cmd;
-               sp->result = DID_RESET << 16;
-
-               /* This mailbox is terminated */
-               printk(KERN_WARNING "eata_pio_reset: reset ccb %d.\n", x);
-               HD(cmd)->ccb[x].status = FREE;
-
-               sp->scsi_done(sp);
-       }
-
-       HD(cmd)->state = 0;
-
-       spin_unlock_irq(host->host_lock);
-
-       if (success) {          /* hmmm... */
-               DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: exit, 
success.\n"));
-               return SUCCESS;
-       } else {
-               DBG(DBG_ABNORM, printk(KERN_WARNING "eata_pio_reset: exit, 
wakeup.\n"));
-               return FAILED;
-       }
-}
-
-static char *get_pio_board_data(unsigned long base, unsigned int irq, unsigned 
int id, unsigned long cplen, unsigned short cppadlen)
-{
-       struct eata_ccb cp;
-       static char buff[256];
-       int z;
-
-       memset(&cp, 0, sizeof(struct eata_ccb));
-       memset(buff, 0, sizeof(buff));
-
-       cp.DataIn = 1;
-       cp.Interpret = 1;       /* Interpret command */
-
-       cp.cp_datalen = cpu_to_be32(254);
-       cp.cp_dataDMA = cpu_to_be32(0);
-
-       cp.cp_id = id;
-       cp.cp_lun = 0;
-
-       cp.cp_cdb[0] = INQUIRY;
-       cp.cp_cdb[1] = 0;
-       cp.cp_cdb[2] = 0;
-       cp.cp_cdb[3] = 0;
-       cp.cp_cdb[4] = 254;
-       cp.cp_cdb[5] = 0;
-
-       if (eata_pio_send_command(base, EATA_CMD_PIO_SEND_CP))
-               return NULL;
-
-       while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
-               cpu_relax();
-
-       outsw(base + HA_RDATA, &cp, cplen);
-       outb(EATA_CMD_PIO_TRUNC, base + HA_WCOMMAND);
-       for (z = 0; z < cppadlen; z++)
-               outw(0, base + HA_RDATA);
-
-       while (inb(base + HA_RSTATUS) & HA_SBUSY)
-               cpu_relax();
-
-       if (inb(base + HA_RSTATUS) & HA_SERROR)
-               return NULL;
-       else if (!(inb(base + HA_RSTATUS) & HA_SDRQ))
-               return NULL;
-       else {
-               insw(base + HA_RDATA, &buff, 127);
-               while (inb(base + HA_RSTATUS) & HA_SDRQ)
-                       inw(base + HA_RDATA);
-               return buff;
-       }
-}
-
-static int get_pio_conf_PIO(unsigned long base, struct get_conf *buf)
-{
-       unsigned long loop = HZ / 2;
-       int z;
-       unsigned short *p;
-
-       if (!request_region(base, 9, "eata_pio"))
-               return 0;
-
-       memset(buf, 0, sizeof(struct get_conf));
-
-       while (inb(base + HA_RSTATUS) & HA_SBUSY)
-               if (--loop == 0)
-                       goto fail;
-
-       DBG(DBG_PIO && DBG_PROBE, printk(KERN_DEBUG "Issuing PIO READ CONFIG to 
HBA at %#lx\n", base));
-       eata_pio_send_command(base, EATA_CMD_PIO_READ_CONFIG);
-
-       loop = 50;
-       for (p = (unsigned short *) buf; (long) p <= ((long) buf + 
(sizeof(struct get_conf) / 2)); p++) {
-               while (!(inb(base + HA_RSTATUS) & HA_SDRQ))
-                       if (--loop == 0)
-                               goto fail;
-
-               loop = 50;
-               *p = inw(base + HA_RDATA);
-       }
-       if (inb(base + HA_RSTATUS) & HA_SERROR) {
-               DBG(DBG_PROBE, printk("eata_dma: get_conf_PIO, error during "
-                                       "transfer for HBA at %lx\n", base));
-               goto fail;
-       }
-
-       if (cpu_to_be32(EATA_SIGNATURE) != buf->signature)
-               goto fail;
-
-       DBG(DBG_PIO && DBG_PROBE, printk(KERN_NOTICE "EATA Controller found "
-                               "at %#4lx EATA Level: %x\n",
-                               base, (unsigned int) (buf->version)));
-
-       while (inb(base + HA_RSTATUS) & HA_SDRQ)
-               inw(base + HA_RDATA);
-
-       if (!ALLOW_DMA_BOARDS) {
-               for (z = 0; z < MAXISA; z++)
-                       if (base == ISAbases[z]) {
-                               buf->IRQ = ISAirqs[z];
-                               break;
-                       }
-       }
-
-       return 1;
-
- fail:
-       release_region(base, 9);
-       return 0;
-}
-
-static void print_pio_config(struct get_conf *gc)
-{
-       printk("Please check values: (read config data)\n");
-       printk("LEN: %d ver:%d OCS:%d TAR:%d TRNXFR:%d MORES:%d\n", 
be32_to_cpu(gc->len), gc->version, gc->OCS_enabled, gc->TAR_support, 
gc->TRNXFR, gc->MORE_support);
-       printk("HAAV:%d SCSIID0:%d ID1:%d ID2:%d QUEUE:%d SG:%d SEC:%d\n", 
gc->HAA_valid, gc->scsi_id[3], gc->scsi_id[2], gc->scsi_id[1], 
be16_to_cpu(gc->queuesiz), be16_to_cpu(gc->SGsiz), gc->SECOND);
-       printk("IRQ:%d IRQT:%d FORCADR:%d MCH:%d RIDQ:%d\n", gc->IRQ, 
gc->IRQ_TR, gc->FORCADR, gc->MAX_CHAN, gc->ID_qest);
-}
-
-static unsigned int print_selftest(unsigned int base)
-{
-       unsigned char buffer[512];
-#ifdef VERBOSE_SETUP
-       int z;
-#endif
-
-       printk("eata_pio: executing controller self test & setup...\n");
-       while (inb(base + HA_RSTATUS) & HA_SBUSY);
-       outb(EATA_CMD_PIO_SETUPTEST, base + HA_WCOMMAND);
-       do {
-               while (inb(base + HA_RSTATUS) & HA_SBUSY)
-                       /* nothing */ ;
-               if (inb(base + HA_RSTATUS) & HA_SDRQ) {
-                       insw(base + HA_RDATA, &buffer, 256);
-#ifdef VERBOSE_SETUP
-                       /* no beeps please... */
-                       for (z = 0; z < 511 && buffer[z]; z++)
-                               if (buffer[z] != 7)
-                                       printk("%c", buffer[z]);
-#endif
-               }
-       } while (inb(base + HA_RSTATUS) & (HA_SBUSY | HA_SDRQ));
-
-       return (!(inb(base + HA_RSTATUS) & HA_SERROR));
-}
-
-static int register_pio_HBA(long base, struct get_conf *gc, struct pci_dev 
*pdev)
-{
-       unsigned long size = 0;
-       char *buff;
-       unsigned long cplen;
-       unsigned short cppadlen;
-       struct Scsi_Host *sh;
-       hostdata *hd;
-
-       DBG(DBG_REGISTER, print_pio_config(gc));
-
-       if (gc->DMA_support) {
-               printk("HBA at %#.4lx supports DMA. Please use EATA-DMA 
driver.\n", base);
-               if (!ALLOW_DMA_BOARDS)
-                       return 0;
-       }
-
-       if ((buff = get_pio_board_data(base, gc->IRQ, gc->scsi_id[3], cplen = 
(cpu_to_be32(gc->cplen) + 1) / 2, cppadlen = (cpu_to_be16(gc->cppadlen) + 1) / 
2)) == NULL) {
-               printk("HBA at %#lx didn't react on INQUIRY. Sorry.\n", base);
-               return 0;
-       }
-
-       if (!print_selftest(base) && !ALLOW_DMA_BOARDS) {
-               printk("HBA at %#lx failed while performing self test & 
setup.\n", base);
-               return 0;
-       }
-
-       size = sizeof(hostdata) + (sizeof(struct eata_ccb) * 
be16_to_cpu(gc->queuesiz));
-
-       sh = scsi_register(&driver_template, size);
-       if (sh == NULL)
-               return 0;
-
-       if (!reg_IRQ[gc->IRQ]) {        /* Interrupt already registered ? */
-               if (!request_irq(gc->IRQ, do_eata_pio_int_handler, 0, 
"EATA-PIO", sh)) {
-                       reg_IRQ[gc->IRQ]++;
-                       if (!gc->IRQ_TR)
-                               reg_IRQL[gc->IRQ] = 1;  /* IRQ is edge 
triggered */
-               } else {
-                       printk("Couldn't allocate IRQ %d, Sorry.\n", gc->IRQ);
-                       return 0;
-               }
-       } else {                /* More than one HBA on this IRQ */
-               if (reg_IRQL[gc->IRQ]) {
-                       printk("Can't support more than one HBA on this IRQ,\n" 
"  if the IRQ is edge triggered. Sorry.\n");
-                       return 0;
-               } else
-                       reg_IRQ[gc->IRQ]++;
-       }
-
-       hd = SD(sh);
-
-       memset(hd->ccb, 0, (sizeof(struct eata_ccb) * 
be16_to_cpu(gc->queuesiz)));
-       memset(hd->reads, 0, sizeof(hd->reads));
-
-       strlcpy(SD(sh)->vendor, &buff[8], sizeof(SD(sh)->vendor));
-       strlcpy(SD(sh)->name, &buff[16], sizeof(SD(sh)->name));
-       SD(sh)->revision[0] = buff[32];
-       SD(sh)->revision[1] = buff[33];
-       SD(sh)->revision[2] = buff[34];
-       SD(sh)->revision[3] = '.';
-       SD(sh)->revision[4] = buff[35];
-       SD(sh)->revision[5] = 0;
-
-       switch (be32_to_cpu(gc->len)) {
-       case 0x1c:
-               SD(sh)->EATA_revision = 'a';
-               break;
-       case 0x1e:
-               SD(sh)->EATA_revision = 'b';
-               break;
-       case 0x22:
-               SD(sh)->EATA_revision = 'c';
-               break;
-       case 0x24:
-               SD(sh)->EATA_revision = 'z';
-               break;
-       default:
-               SD(sh)->EATA_revision = '?';
-       }
-
-       if (be32_to_cpu(gc->len) >= 0x22) {
-               if (gc->is_PCI)
-                       hd->bustype = IS_PCI;
-               else if (gc->is_EISA)
-                       hd->bustype = IS_EISA;
-               else
-                       hd->bustype = IS_ISA;
-       } else {
-               if (buff[21] == '4')
-                       hd->bustype = IS_PCI;
-               else if (buff[21] == '2')
-                       hd->bustype = IS_EISA;
-               else
-                       hd->bustype = IS_ISA;
-       }
-
-       SD(sh)->cplen = cplen;
-       SD(sh)->cppadlen = cppadlen;
-       SD(sh)->hostid = gc->scsi_id[3];
-       SD(sh)->devflags = 1 << gc->scsi_id[3];
-       SD(sh)->moresupport = gc->MORE_support;
-       sh->unique_id = base;
-       sh->base = base;
-       sh->io_port = base;
-       sh->n_io_port = 9;
-       sh->irq = gc->IRQ;
-       sh->dma_channel = PIO;
-       sh->this_id = gc->scsi_id[3];
-       sh->can_queue = 1;
-       sh->cmd_per_lun = 1;
-       sh->sg_tablesize = SG_ALL;
-
-       hd->channel = 0;
-
-       hd->pdev = pci_dev_get(pdev);   /* Keep a PCI reference */
-
-       sh->max_id = 8;
-       sh->max_lun = 8;
-
-       if (gc->SECOND)
-               hd->primary = 0;
-       else
-               hd->primary = 1;
-
-       hd->next = NULL;        /* build a linked list of all HBAs */
-       hd->prev = last_HBA;
-       if (hd->prev != NULL)
-               SD(hd->prev)->next = sh;
-       last_HBA = sh;
-       if (first_HBA == NULL)
-               first_HBA = sh;
-       registered_HBAs++;
-       return (1);
-}
-
-static void find_pio_ISA(struct get_conf *buf)
-{
-       int i;
-
-       for (i = 0; i < MAXISA; i++) {
-               if (!ISAbases[i])
-                       continue;
-               if (!get_pio_conf_PIO(ISAbases[i], buf))
-                       continue;
-               if (!register_pio_HBA(ISAbases[i], buf, NULL))
-                       release_region(ISAbases[i], 9);
-               else
-                       ISAbases[i] = 0;
-       }
-       return;
-}
-
-static void find_pio_EISA(struct get_conf *buf)
-{
-       u32 base;
-       int i;
-
-#ifdef CHECKPAL
-       u8 pal1, pal2, pal3;
-#endif
-
-       for (i = 0; i < MAXEISA; i++) {
-               if (EISAbases[i]) {     /* Still a possibility ?          */
-
-                       base = 0x1c88 + (i * 0x1000);
-#ifdef CHECKPAL
-                       pal1 = inb((u16) base - 8);
-                       pal2 = inb((u16) base - 7);
-                       pal3 = inb((u16) base - 6);
-
-                       if (((pal1 == 0x12) && (pal2 == 0x14)) || ((pal1 == 
0x38) && (pal2 == 0xa3) && (pal3 == 0x82)) || ((pal1 == 0x06) && (pal2 == 0x94) 
&& (pal3 == 0x24))) {
-                               DBG(DBG_PROBE, printk(KERN_NOTICE "EISA EATA id 
tags found: " "%x %x %x \n", (int) pal1, (int) pal2, (int) pal3));
-#endif
-                               if (get_pio_conf_PIO(base, buf)) {
-                                       DBG(DBG_PROBE && DBG_EISA, 
print_pio_config(buf));
-                                       if (buf->IRQ) {
-                                               if (!register_pio_HBA(base, 
buf, NULL))
-                                                       release_region(base, 9);
-                                       } else {
-                                               printk(KERN_NOTICE "eata_dma: 
No valid IRQ. HBA " "removed from list\n");
-                                               release_region(base, 9);
-                                       }
-                               }
-                               /* Nothing found here so we take it from the 
list */
-                               EISAbases[i] = 0;
-#ifdef CHECKPAL
-                       }
-#endif
-               }
-       }
-       return;
-}
-
-static void find_pio_PCI(struct get_conf *buf)
-{
-#ifndef CONFIG_PCI
-       printk("eata_dma: kernel PCI support not enabled. Skipping scan for PCI 
HBAs.\n");
-#else
-       struct pci_dev *dev = NULL;
-       unsigned long base, x;
-
-       while ((dev = pci_get_device(PCI_VENDOR_ID_DPT, PCI_DEVICE_ID_DPT, 
dev)) != NULL) {
-               DBG(DBG_PROBE && DBG_PCI, printk("eata_pio: find_PCI, HBA at 
%s\n", pci_name(dev)));
-               if (pci_enable_device(dev))
-                       continue;
-               pci_set_master(dev);
-               base = pci_resource_flags(dev, 0);
-               if (base & IORESOURCE_MEM) {
-                       printk("eata_pio: invalid base address of device %s\n", 
pci_name(dev));
-                       continue;
-               }
-               base = pci_resource_start(dev, 0);
-               /* EISA tag there ? */
-               if ((inb(base) == 0x12) && (inb(base + 1) == 0x14))
-                       continue;       /* Jep, it's forced, so move on  */
-               base += 0x10;   /* Now, THIS is the real address */
-               if (base != 0x1f8) {
-                       /* We didn't find it in the primary search */
-                       if (get_pio_conf_PIO(base, buf)) {
-                               if (buf->FORCADR) {     /* If the address is 
forced */
-                                       release_region(base, 9);
-                                       continue;       /* we'll find it later  
    */
-                               }
-
-                               /* OK. We made it till here, so we can go now  
-                                * and register it. We  only have to check and 
-                                * eventually remove it from the EISA and ISA 
list 
-                                */
-
-                               if (!register_pio_HBA(base, buf, dev)) {
-                                       release_region(base, 9);
-                                       continue;
-                               }
-
-                               if (base < 0x1000) {
-                                       for (x = 0; x < MAXISA; ++x) {
-                                               if (ISAbases[x] == base) {
-                                                       ISAbases[x] = 0;
-                                                       break;
-                                               }
-                                       }
-                               } else if ((base & 0x0fff) == 0x0c88) {
-                                       x = (base >> 12) & 0x0f;
-                                       EISAbases[x] = 0;
-                               }
-                       }
-#ifdef CHECK_BLINK
-                       else if (check_blink_state(base)) {
-                               printk("eata_pio: HBA is in BLINK state.\n" 
"Consult your HBAs manual to correct this.\n");
-                       }
-#endif
-               }
-       }
-#endif                         /* #ifndef CONFIG_PCI */
-}
-
-static int eata_pio_detect(struct scsi_host_template *tpnt)
-{
-       struct Scsi_Host *HBA_ptr;
-       struct get_conf gc;
-       int i;
-
-       find_pio_PCI(&gc);
-       find_pio_EISA(&gc);
-       find_pio_ISA(&gc);
-
-       for (i = 0; i < MAXIRQ; i++)
-               if (reg_IRQ[i])
-                       request_irq(i, do_eata_pio_int_handler, 0, "EATA-PIO", 
NULL);
-
-       HBA_ptr = first_HBA;
-
-       if (registered_HBAs != 0) {
-               printk("EATA (Extended Attachment) PIO driver version: 
%d.%d%s\n"
-                      "(c) 1993-95 Michael Neuffer, 
neuf...@goofy.zdv.uni-mainz.de\n" "            Alfred Arnold,   
a.arn...@kfa-juelich.de\n" "This release only supports DASD devices 
(harddisks)\n", VER_MAJOR, VER_MINOR, VER_SUB);
-
-               printk("Registered HBAs:\n");
-               printk("HBA no. Boardtype: Revis: EATA: Bus: BaseIO: IRQ: Ch: 
ID: Pr:" " QS: SG: CPL:\n");
-               for (i = 1; i <= registered_HBAs; i++) {
-                       printk("scsi%-2d: %.10s v%s 2.0%c  %s %#.4lx   %2d   %d 
  %d   %c"
-                              "  %2d  %2d  %2d\n",
-                              HBA_ptr->host_no, SD(HBA_ptr)->name, 
SD(HBA_ptr)->revision,
-                              SD(HBA_ptr)->EATA_revision, 
(SD(HBA_ptr)->bustype == 'P') ?
-                              "PCI " : (SD(HBA_ptr)->bustype == 'E') ? "EISA" 
: "ISA ",
-                              HBA_ptr->base, HBA_ptr->irq, 
SD(HBA_ptr)->channel, HBA_ptr->this_id,
-                              SD(HBA_ptr)->primary ? 'Y' : 'N', 
HBA_ptr->can_queue,
-                              HBA_ptr->sg_tablesize, HBA_ptr->cmd_per_lun);
-                       HBA_ptr = SD(HBA_ptr)->next;
-               }
-       }
-       return (registered_HBAs);
-}
-
-static struct scsi_host_template driver_template = {
-       .proc_name              = "eata_pio",
-       .name                   = "EATA (Extended Attachment) PIO driver",
-       .show_info              = eata_pio_show_info,
-       .detect                 = eata_pio_detect,
-       .release                = eata_pio_release,
-       .queuecommand           = eata_pio_queue,
-       .eh_abort_handler       = eata_pio_abort,
-       .eh_host_reset_handler  = eata_pio_host_reset,
-       .use_clustering         = ENABLE_CLUSTERING,
-};
-
-MODULE_AUTHOR("Michael Neuffer, Alfred Arnold");
-MODULE_DESCRIPTION("EATA SCSI PIO driver");
-MODULE_LICENSE("GPL");
-
-#include "scsi_module.c"
diff --git a/drivers/scsi/eata_pio.h b/drivers/scsi/eata_pio.h
deleted file mode 100644
index 5b5e3d13670b..000000000000
--- a/drivers/scsi/eata_pio.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* SPDX-License-Identifier: GPL-2.0 */
-/********************************************************
-* Header file for eata_pio.c Linux EATA-PIO SCSI driver *
-* (c) 1993-96 Michael Neuffer                                  *
-*********************************************************
-* last change: 2002/11/02                              *
-********************************************************/
-
-
-#ifndef _EATA_PIO_H
-#define _EATA_PIO_H
-
-#define VER_MAJOR 0
-#define VER_MINOR 0
-#define VER_SUB          "1b"
-
-/************************************************************************
- * Here you can switch parts of the code on and of                     *
- ************************************************************************/
-
-#define VERBOSE_SETUP          /* show startup screen of 2001 */
-#define ALLOW_DMA_BOARDS 1
-
-/************************************************************************
- * Debug options.                                                      * 
- * Enable DEBUG and whichever options you require.                     *
- ************************************************************************/
-#define DEBUG_EATA     1       /* Enable debug code.                       */
-#define DPT_DEBUG      0       /* Bobs special                             */
-#define DBG_DELAY      0       /* Build in delays so debug messages can be
-                                * be read before they vanish of the top of
-                                * the screen!
-                                */
-#define DBG_PROBE      0       /* Debug probe routines.                    */
-#define DBG_ISA                0       /* Trace ISA routines                   
    */
-#define DBG_EISA       0       /* Trace EISA routines                      */
-#define DBG_PCI                0       /* Trace PCI routines                   
    */
-#define DBG_PIO                0       /* Trace get_config_PIO                 
    */
-#define DBG_COM                0       /* Trace command call                   
    */
-#define DBG_QUEUE      0       /* Trace command queueing.                  */
-#define DBG_INTR       0       /* Trace interrupt service routine.         */
-#define DBG_INTR2      0       /* Trace interrupt service routine.         */
-#define DBG_PROC       0       /* Debug proc-fs related statistics         */
-#define DBG_PROC_WRITE 0
-#define DBG_REGISTER   0       /* */
-#define DBG_ABNORM     1       /* Debug abnormal actions (reset, abort)    */
-
-#if DEBUG_EATA
-#define DBG(x, y)   if ((x)) {y;}
-#else
-#define DBG(x, y)
-#endif
-
-#endif                         /* _EATA_PIO_H */
-- 
2.14.2

Reply via email to