summaryrefslogtreecommitdiffstats
path: root/drivers/scsi/eata_dma.h
diff options
context:
space:
mode:
authorRalf Baechle <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
committer <ralf@linux-mips.org>1997-01-07 02:33:00 +0000
commitbeb116954b9b7f3bb56412b2494b562f02b864b1 (patch)
tree120e997879884e1b9d93b265221b939d2ef1ade1 /drivers/scsi/eata_dma.h
parent908d4681a1dc3792ecafbe64265783a86c4cccb6 (diff)
Import of Linux/MIPS 2.1.14
Diffstat (limited to 'drivers/scsi/eata_dma.h')
-rw-r--r--drivers/scsi/eata_dma.h442
1 files changed, 81 insertions, 361 deletions
diff --git a/drivers/scsi/eata_dma.h b/drivers/scsi/eata_dma.h
index 025dcc790..a23931bf9 100644
--- a/drivers/scsi/eata_dma.h
+++ b/drivers/scsi/eata_dma.h
@@ -1,408 +1,128 @@
/********************************************************
* Header file for eata_dma.c Linux EATA-DMA SCSI driver *
-* (c) 1993,94,95 Michael Neuffer *
+* (c) 1993-96 Michael Neuffer *
+* mike@i-Connect.Net *
+* neuffer@mail.uni-mainz.de *
*********************************************************
-* last change: 95/04/10 *
+* last change: 96/10/14 *
********************************************************/
-
#ifndef _EATA_DMA_H
#define _EATA_DMA_H
-#define VER_MAJOR 2
-#define VER_MINOR 3
-#define VER_SUB "5r"
+#ifndef HOSTS_C
-/************************************************************************
- * Here you can configure your drives that are using a non-standard *
- * geometry. *
- * To enable this set HARDCODED to 1 *
- * If you have only one drive that need reconfiguration, set ID1 to -1 *
- ************************************************************************/
-#define HARDCODED 0 /* Here are drives running in emu. mode */
+#include "eata_generic.h"
+
+
+#define VER_MAJOR 2
+#define VER_MINOR 5
+#define VER_SUB "9b"
-#define ID0 0 /* SCSI ID of "IDE" drive mapped to C:
- * If you're not sure check your config
- * utility that came with your controller
- */
-#define HEADS0 13 /* Number of emulated heads of this drive */
-#define SECTORS0 38 /* Number of emulated sectors */
-#define CYLINDER0 719 /* Number of emulated cylinders */
-
-#define ID1 1 /* SCSI ID of "IDE" drive mapped to D: */
-#define HEADS1 16 /* Number of emulated heads of this drive */
-#define SECTORS1 62 /* Number of emulated sectors */
-#define CYLINDER1 1024 /* Number of emulated cylinders */
/************************************************************************
* Here you can switch parts of the code on and of *
************************************************************************/
#define CHECKPAL 0 /* EISA pal checking on/off */
-#define EATA_DMA_PROC 0 /* proc-fs support */
+#define CHECK_BLINK 1 /* Switch Blink state check off, might *
+ * be nessessary for some MIPS machines*/
+#define CRIPPLE_QUEUE 0 /* Only enable this if the interrupt
+ * controller on your motherboard is
+ * broken and you are experiencing
+ * massive interrupt losses */
/************************************************************************
* Debug options. *
* Enable DEBUG and whichever options you require. *
************************************************************************/
-#define DEBUG_EATA 1 /* Enable debug code. */
+#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
+#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. */
+ * the screen! */
+#define DBG_PROBE 0 /* Debug probe routines. */
#define DBG_PCI 0 /* Trace PCI routines */
#define DBG_EISA 0 /* Trace EISA routines */
#define DBG_ISA 0 /* Trace ISA routines */
#define DBG_BLINK 0 /* Trace Blink check */
#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_INTR3 0 /* Trace interrupt service routine. */
+#define DBG_COM 0 /* Trace command call */
+#define DBG_QUEUE 0 /* Trace command queueing. */
+#define DBG_QUEUE2 0 /* Trace command queueing SG. */
+#define DBG_INTR 0 /* Trace interrupt service routine. */
+#define DBG_INTR2 0 /* Trace interrupt service routine. */
+#define DBG_INTR3 0 /* Trace get_board_data interrupts. */
+#define DBG_REQSENSE 0 /* Trace request sense commands */
+#define DBG_RESET 0 /* Trace reset calls */
+#define DBG_STATUS 0 /* Trace status generation */
#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)*/
+#define DBG_ABNORM 1 /* Debug abnormal actions (reset, abort)*/
#if DEBUG_EATA
-#define DBG(x, y) if ((x)) {y;}
+#define DBG(x, y) if ((x)) {y;}
#else
#define DBG(x, y)
#endif
-
-#define EATA_DMA { \
- NULL, NULL, \
- "EATA (Extended Attachment) driver", \
- eata_detect, \
- eata_release, \
- eata_info, \
- eata_command, \
- eata_queue, \
- eata_abort, \
- eata_reset, \
- NULL, /* Slave attach */ \
- scsicam_bios_param, \
- 0, /* Canqueue */ \
- 0, /* this_id */ \
- 0, /* sg_tablesize */ \
- 0, /* cmd_per_lun */ \
- 0, /* present */ \
- 1, /* True if ISA */ \
- ENABLE_CLUSTERING }
+#endif /* !HOSTS_C */
int eata_detect(Scsi_Host_Template *);
const char *eata_info(struct Scsi_Host *);
int eata_command(Scsi_Cmnd *);
-int eata_queue(Scsi_Cmnd *, void *(done)(Scsi_Cmnd *));
+int eata_queue(Scsi_Cmnd *, void (* done)(Scsi_Cmnd *));
int eata_abort(Scsi_Cmnd *);
-int eata_reset(Scsi_Cmnd *);
+int eata_reset(Scsi_Cmnd *, unsigned int);
+int eata_proc_info(char *, char **, off_t, int, int, int);
+#ifdef MODULE
int eata_release(struct Scsi_Host *);
-
-/*********************************************
- * Misc. definitions *
- *********************************************/
-
-#ifndef TRUE
-# define TRUE 1
-#endif
-#ifndef FALSE
-# define FALSE 0
+#else
+#define eata_release NULL
#endif
-#define R_LIMIT 0x20000
-
-#define MAXISA 4
-#define MAXEISA 16
-#define MAXPCI 16
-#define MAXIRQ 16
-#define MAXTARGET 8
-
-#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 C_P_L_CURRENT_MAX 16 /* Until this limit in the mm is removed
- * Kernels < 1.1.86 died horrible deaths
- * if you used values >2. The memory management
- * since pl1.1.86 seems to cope with up to 10
- * queued commands per device.
- * Since 1.2.0 the memory management seems to
- * have no more problems......
- */
-#define C_P_L_DIV 3 /* 1 <= C_P_L_DIV <= 8
- * You can use this parameter to fine-tune
- * the driver. Depending on the number of
- * devices and their speed and ability to queue
- * commands, you will get the best results with a
- * value
- * ~= numdevices-(devices_unable_to_queue_commands/2)
- * The reason for this is that the disk driver
- * tends to flood the queue, so that other
- * drivers have problems to queue commands
- * themselves. This can for example result in
- * the effect that the tape stops during disk
- * accesses.
- */
-
-#define FREE 0
-#define USED 1
-#define TIMEOUT 2
-#define RESET 4
-#define LOCKED 8
-
-#define HD(cmd) ((hostdata *)&(cmd->host->hostdata))
-#define CD(cmd) ((struct eata_ccb *)(cmd->host_scribble))
-#define SD(host) ((hostdata *)&(host->hostdata))
-
-#define DELAY(x) { int i; i = jiffies + x; while (jiffies < i); }
-#define DEL2(x) { ulong i; for (i = 0; i < 0xffff*x; i++); }
-
-/***********************************************
- * 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_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
+#include <scsi/scsicam.h>
-#define EATA_CMD_RESET 0xf9
-
-#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 HA_WCOMMAND 0x07 /* command register offset */
-#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_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
-
-#define HA_NO_ERROR 0x00
-#define HA_ERR_SEL_TO 0x01
-#define HA_ERR_CMD_TO 0x02
-#define HA_ERR_RESET 0x03
-#define HA_INIT_POWERUP 0x04
-#define HA_UNX_BUSPHASE 0x05
-#define HA_UNX_BUS_FREE 0x06
-#define HA_BUS_PARITY 0x07
-#define HA_SCSI_HUNG 0x08
-#define HA_UNX_MSGRJCT 0x09
-#define HA_RESET_STUCK 0x0a
-#define HA_RSENSE_FAIL 0x0b
-#define HA_PARITY_ERR 0x0c
-#define HA_CP_ABORT_NA 0x0d
-#define HA_CP_ABORTED 0x0e
-#define HA_CP_RESET_NA 0x0f
-#define HA_CP_RESET 0x10
-
-/**********************************************
- * Message definitions *
- **********************************************/
-
-struct reg_bit { /* reading this one will clear the interrupt */
- unchar error:1; /* previous command ended in an error */
- unchar more:1; /* more DATA coming soon, poll BSY & DRQ (PIO) */
- unchar corr:1; /* data read was successfully corrected with ECC*/
- unchar drq:1; /* data request active */
- unchar sc:1; /* seek complete */
- unchar fault:1; /* write fault */
- unchar ready:1; /* drive ready */
- unchar busy:1; /* controller busy */
-};
-
-struct reg_abit { /* reading this won't clear the interrupt */
- unchar abusy:1; /* auxiliary busy */
- unchar irq:1; /* set when drive interrupt is asserted */
- unchar dummy:6;
-};
-
-struct eata_register { /* EATA register set */
- unchar data_reg[2]; /* R, couldn't figure this one out */
- unchar cp_addr[4]; /* W, CP address register */
- union {
- unchar command; /* W, command code: [read|set] conf, send CP*/
- struct reg_bit status; /* R, see register_bit1 */
- unchar statusunchar;
- } ovr;
- struct reg_abit aux_stat; /* R, see register_bit2 */
-};
-
-/**********************************************
- * Other definitions *
- **********************************************/
-
-struct eata_sg_list
-{
- ulong data;
- ulong len;
-};
-
-struct get_conf { /* Read Configuration Array */
- ulong len; /* Should return 0x22 */
- unchar sig[4]; /* Signature MUST be "EATA" */
- unchar version2:4,
- version:4; /* EATA Version level */
- unchar 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 */
-
- ushort cppadlen; /* Number of pad unchars send after CD data */
- /* set to zero for DMA commands */
- unchar scsi_id[4]; /* SCSI ID of controller 2-0 Byte 0 res. */
- /* if not, zero is returned */
- ulong cplen; /* CP length: number of valid cp unchars */
- ulong splen; /* Number of unchars returned after */
- /* Receive SP command */
- ushort queuesiz; /* max number of queueable CPs */
- ushort dummy;
- ushort SGsiz; /* max number of SG table entries */
- unchar 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 */
- unchar sync; /* device at ID 7 tru 0 is running in */
- /* synchronous mode, this will disappear */
- unchar DSBLE:1, /* ISA i/o addressing is disabled */
- FORCADR:1, /* i/o address has been forced */
- :6;
- unchar MAX_ID:5, /* Max number of SCSI target IDs */
- MAX_CHAN:3; /* Number of SCSI busses on HBA */
- unchar MAX_LUN; /* Max number of LUNs */
- unchar :5,
- ID_qest:1, /* Raidnum ID is questionable */
- is_PCI:1, /* HBA is PCI */
- is_EISA:1; /* HBA is EISA */
- unchar unused[478];
-};
-
-struct eata_ccb { /* Send Command Packet structure */
-
- unchar 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 */
- unchar reqlen; /* Request Sense Length */
- /* Valid if Auto_Req_Sen=1 */
- unchar unused[3];
- unchar FWNEST:1, /* send cmd to phys RAID component*/
- unused2:7;
- unchar Phsunit:1, /* physical unit on mirrored pair */
- I_AT:1, /* inhibit address translation */
- I_HBA_C:1, /* HBA Inhibit caching */
- unused3:5;
-
- unchar cp_id; /* SCSI Device ID of target */
- unchar cp_lun:3,
- :2,
- cp_luntar:1, /* CP is for target ROUTINE */
- cp_dispri:1, /* Grant disconnect privilege */
- cp_identify:1; /* Always TRUE */
- unchar cp_msg1; /* Message bytes 0-3 */
- unchar cp_msg2;
- unchar cp_msg3;
- unchar cp_cdb[12]; /* Command Descriptor Block */
- ulong cp_datalen; /* Data Transfer Length */
- /* If scatter=1 len of sg package */
- void *cp_viraddr; /* address of this ccb */
- ulong cp_dataDMA; /* Data Address, if scatter=1 */
- /* address of scatter packet */
- ulong cp_statDMA; /* address for Status Packet */
- ulong cp_reqDMA; /* Request Sense Address, used if */
- /* CP command ends with error */
-
- ulong timeout;
- unchar retries;
- unchar status; /* status of this queueslot */
- struct eata_sg_list sg_list[SG_SIZE];
- Scsi_Cmnd *cmd; /* address of cmd */
-};
-
-
-struct eata_sp {
- unchar hba_stat:7, /* HBA status */
- EOC:1; /* True if command finished */
- unchar scsi_stat; /* Target SCSI status */
- unchar reserved[2];
- ulong residue_len; /* Number of unchars not transferred */
- struct eata_ccb *ccb; /* Address set in COMMAND PACKET */
- unchar msg[12];
-};
-
-typedef struct hstd {
- char vendor[9];
- char name[18];
- char revision[6];
- char EATA_revision;
- unchar bustype; /* bustype of HBA */
- unchar channel; /* no. of scsi channel */
- unchar state; /* state of HBA */
- unchar primary; /* true if primary */
- ulong reads[13];
- ulong writes[13];
- unchar t_state[MAXTARGET]; /* state of Target (RESET,..) */
- uint t_timeout[MAXTARGET]; /* timeouts on target */
- uint last_ccb; /* Last used ccb */
- struct Scsi_Host *next;
- struct Scsi_Host *prev;
- 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 {
- unchar trans; /* translation flag 1=transl */
- unchar channel; /* SCSI channel number */
- unchar HBA; /* HBA number (prim/sec) */
- unchar id; /* drive id */
- unchar lun; /* drive lun */
- uint heads; /* number of heads */
- uint sectors; /* number of sectors */
- uint cylinder; /* number of cylinders */
-};
+#define EATA_DMA { \
+ NULL, NULL, \
+ NULL, /* proc_dir_entry */ \
+ eata_proc_info, /* procinfo */ \
+ "EATA (Extended Attachment) HBA driver", \
+ eata_detect, \
+ eata_release, \
+ NULL, NULL, \
+ eata_queue, \
+ eata_abort, \
+ eata_reset, \
+ NULL, /* Slave attach */ \
+ scsicam_bios_param, \
+ 0, /* Canqueue */ \
+ 0, /* this_id */ \
+ 0, /* sg_tablesize */ \
+ 0, /* cmd_per_lun */ \
+ 0, /* present */ \
+ 1, /* True if ISA */ \
+ ENABLE_CLUSTERING }
-struct geom_emul {
- int bios_drives; /* number of emulated drives */
- struct drive_geom_emul drv[2]; /* drive structures */
-};
-#endif /* _EATA_H */
+#endif /* _EATA_DMA_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
+ * indent-tabs-mode: nil
+ * tab-width: 8
+ * End:
+ */