11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/********************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* Header file for eata_dma.c and eata_pio.c		*
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* Linux EATA SCSI drivers				*
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* (c) 1993-96 Michael Neuffer                           *
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*             mike@i-Connect.Net                        *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*             neuffer@mail.uni-mainz.de                 *
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*********************************************************
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* last change: 96/08/14                                 *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds********************************************************/
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _EATA_GENERIC_H
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _EATA_GENERIC_H
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*********************************************
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Misc. definitions			     *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *********************************************/
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define R_LIMIT 0x20000
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXISA	   4
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXEISA	  16
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXPCI	  16
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXIRQ	  16
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXTARGET 16
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAXCHANNEL 3
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IS_ISA	   'I'
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IS_EISA	   'E'
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IS_PCI	   'P'
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BROKEN_INQUIRY	1
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BUSMASTER       0xff
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PIO             0xfe
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_SIGNATURE	0x45415441     /* BIG ENDIAN coded "EATA" sig.	 */
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DPT_ID1         0x12
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DPT_ID2         0x14
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ATT_ID1         0x06
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ATT_ID2         0x94
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ATT_ID3         0x0
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NEC_ID1         0x38
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NEC_ID2         0xa3
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NEC_ID3         0x82
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CP_SIZE	 44
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_PCI_DEVICES  32	       /* Maximum # Of Devices Per Bus	 */
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_METHOD_2	 16	       /* Max Devices For Method 2	 */
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_PCI_BUS	 16	       /* Maximum # Of Busses Allowed	 */
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SG_SIZE		 64
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SG_SIZE_BIG	 252	       /* max. 8096 elements, 64k */
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define UPPER_DEVICE_QUEUE_LIMIT 64    /* The limit we have to set for the
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					* device queue to keep the broken
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					* midlevel SCSI code from producing
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					* bogus timeouts
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					*/
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TYPE_DISK_QUEUE  16
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TYPE_TAPE_QUEUE  4
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TYPE_ROM_QUEUE   4
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TYPE_OTHER_QUEUE 2
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FREE	         0
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OK	         0
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NO_TIMEOUT       0
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define USED	         1
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TIMEOUT	         2
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESET	         4
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define LOCKED	         8
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ABORTED          16
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define READ             0
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WRITE            1
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OTHER            2
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HD(cmd)	 ((hostdata *)&(cmd->device->host->hostdata))
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CD(cmd)	 ((struct eata_ccb *)(cmd->host_scribble))
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SD(host) ((hostdata *)&(host->hostdata))
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/***********************************************
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *    EATA Command & Register definitions      *
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ***********************************************/
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_REG_DPTconfig	 0x40
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_REG_PumpModeAddress	 0x44
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_REG_PumpModeData	 0x48
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_REG_ConfigParam1	 0x50
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_REG_ConfigParam2	 0x54
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_SETUPTEST	 0xc6
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_READ_CONFIG 0xf0
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_SET_CONFIG	 0xf1
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_SEND_CP	 0xf2
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_RECEIVE_SP	 0xf3
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_PIO_TRUNC	 0xf4
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_RESET		 0xf9
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_IMMEDIATE	 0xfa
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_DMA_READ_CONFIG 0xfd
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_DMA_SET_CONFIG	 0xfe
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_CMD_DMA_SEND_CP	 0xff
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ECS_EMULATE_SENSE	 0xd4
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_GENERIC_ABORT       0x00
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_SPECIFIC_RESET      0x01
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_BUS_RESET           0x02
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_SPECIFIC_ABORT      0x03
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_QUIET_INTR          0x04
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_COLD_BOOT_HBA       0x06	   /* Only as a last resort	*/
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EATA_FORCE_IO            0x07
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CTRLREG     0x206       /* control register for HBA    */
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CTRL_DISINT 0x02        /* CTRLREG: disable interrupts */
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CTRL_RESCPU 0x04        /* CTRLREG: reset processor    */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CTRL_8HEADS 0x08        /* CTRLREG: set for drives with*
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				    * >=8 heads (WD1003 rudimentary :-) */
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WCOMMAND    0x07	   /* command register offset	*/
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WIFC        0x06	   /* immediate command offset  */
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WCODE       0x05
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WCODE2      0x04
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WDMAADDR    0x02	   /* DMA address LSB offset	*/
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_RAUXSTAT    0x08	   /* aux status register offset*/
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_RSTATUS     0x07	   /* status register offset	*/
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_RDATA       0x00	   /* data register (16bit)	*/
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_WDATA       0x00	   /* data register (16bit)	*/
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_ABUSY       0x01	   /* aux busy bit		*/
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_AIRQ	       0x02	   /* aux IRQ pending bit	*/
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SERROR      0x01	   /* pr. command ended in error*/
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SMORE       0x02	   /* more data soon to come	*/
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SCORR       0x04	   /* data corrected		*/
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SDRQ	       0x08	   /* data request active	*/
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SSC	       0x10	   /* seek complete		*/
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SFAULT      0x20	   /* write fault		*/
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SREADY      0x40	   /* drive ready		*/
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SBUSY       0x80	   /* drive busy		*/
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SDRDY       HA_SSC+HA_SREADY+HA_SDRQ
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**********************************************
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Message definitions			      *
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds **********************************************/
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_NO_ERROR	 0x00	/* No Error				*/
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_ERR_SEL_TO	 0x01	/* Selection Timeout			*/
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_ERR_CMD_TO	 0x02	/* Command Timeout			*/
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_BUS_RESET	 0x03	/* SCSI Bus Reset Received		*/
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_INIT_POWERUP	 0x04	/* Initial Controller Power-up		*/
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_UNX_BUSPHASE	 0x05	/* Unexpected Bus Phase			*/
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_UNX_BUS_FREE	 0x06	/* Unexpected Bus Free			*/
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_BUS_PARITY	 0x07	/* Bus Parity Error			*/
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_SCSI_HUNG	 0x08	/* SCSI Hung				*/
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_UNX_MSGRJCT	 0x09	/* Unexpected Message Rejected		*/
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_RESET_STUCK	 0x0a	/* SCSI Bus Reset Stuck			*/
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_RSENSE_FAIL	 0x0b	/* Auto Request-Sense Failed		*/
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_PARITY_ERR	 0x0c	/* Controller Ram Parity Error		*/
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CP_ABORT_NA	 0x0d	/* Abort Message sent to non-active cmd */
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CP_ABORTED	 0x0e	/* Abort Message sent to active cmd	*/
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CP_RESET_NA	 0x0f	/* Reset Message sent to non-active cmd */
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_CP_RESET	 0x10	/* Reset Message sent to active cmd	*/
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_ECC_ERR	 0x11	/* Controller Ram ECC Error		*/
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_PCI_PARITY	 0x12	/* PCI Parity Error			*/
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_PCI_MABORT	 0x13	/* PCI Master Abort			*/
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_PCI_TABORT	 0x14	/* PCI Target Abort			*/
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HA_PCI_STABORT	 0x15	/* PCI Signaled Target Abort		*/
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/**********************************************
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Other  definitions			      *
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds **********************************************/
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct reg_bit {      /* reading this one will clear the interrupt    */
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 error:1;     /* previous command ended in an error	      */
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 more:1;      /* more DATA coming soon, poll BSY & DRQ (PIO)  */
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 corr:1;      /* data read was successfully corrected with ECC*/
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 drq:1;	      /* data request active  */
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 sc:1;	      /* seek complete	      */
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 fault:1;     /* write fault	      */
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 ready:1;     /* drive ready	      */
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 busy:1;      /* controller busy      */
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct reg_abit {     /* reading this won't clear the interrupt */
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 abusy:1;     /* auxiliary busy				*/
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 irq:1;	      /* set when drive interrupt is asserted	*/
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 dummy:6;
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eata_register {	    /* EATA register set */
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 data_reg[2];	    /* R, couldn't figure this one out		*/
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 cp_addr[4];	    /* W, CP address register			*/
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    union {
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u8 command;	    /* W, command code: [read|set] conf, send CP*/
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct reg_bit status;	/* R, see register_bit1			*/
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	__u8 statusbyte;
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    } ovr;
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct reg_abit aux_stat; /* R, see register_bit2			*/
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct get_conf {	      /* Read Configuration Array		*/
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  len;		      /* Should return 0x22, 0x24, etc		*/
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 signature;	      /* Signature MUST be "EATA"		*/
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8    version2:4,
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	     version:4;	      /* EATA Version level			*/
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 OCS_enabled:1,	      /* Overlap Command Support enabled	*/
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 TAR_support:1,	      /* SCSI Target Mode supported		*/
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	      TRNXFR:1,	      /* Truncate Transfer Cmd not necessary	*
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * Only used in PIO Mode			*/
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	MORE_support:1,	      /* MORE supported (only PIO Mode)		*/
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 DMA_support:1,	      /* DMA supported Driver uses only		*
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * this mode				*/
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   DMA_valid:1,	      /* DRQ value in Byte 30 is valid		*/
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 ATA:1,	      /* ATA device connected (not supported)	*/
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   HAA_valid:1;	      /* Hostadapter Address is valid		*/
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16 cppadlen;	      /* Number of pad bytes send after CD data *
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * set to zero for DMA commands		*/
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 scsi_id[4];	      /* SCSI ID of controller 2-0 Byte 0 res.	*
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * if not, zero is returned		*/
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  cplen;	      /* CP length: number of valid cp bytes	*/
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  splen;	      /* Number of bytes returned after		*
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * Receive SP command			*/
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16 queuesiz;	      /* max number of queueable CPs		*/
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16 dummy;
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16 SGsiz;	      /* max number of SG table entries		*/
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8    IRQ:4,	      /* IRQ used this HA			*/
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 IRQ_TR:1,	      /* IRQ Trigger: 0=edge, 1=level		*/
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 SECOND:1,	      /* This is a secondary controller		*/
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    DMA_channel:2;	      /* DRQ index, DRQ is 2comp of DRQX	*/
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 sync;		      /* device at ID 7 tru 0 is running in	*
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * synchronous mode, this will disappear	*/
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   DSBLE:1,	      /* ISA i/o addressing is disabled		*/
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 FORCADR:1,	      /* i/o address has been forced		*/
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  SG_64K:1,
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  SG_UAE:1,
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		:4;
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  MAX_ID:5,	      /* Max number of SCSI target IDs		*/
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	MAX_CHAN:3;	      /* Number of SCSI busses on HBA		*/
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 MAX_LUN;	      /* Max number of LUNs			*/
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8	:3,
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 AUTOTRM:1,
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 M1_inst:1,
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 ID_qest:1,	      /* Raidnum ID is questionable		*/
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  is_PCI:1,	      /* HBA is PCI				*/
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 is_EISA:1;	      /* HBA is EISA				*/
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 RAIDNUM;             /* unique HBA identifier                  */
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 unused[474];
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eata_sg_list
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 data;
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 len;
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eata_ccb {	      /* Send Command Packet structure	    */
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 SCSI_Reset:1,	      /* Cause a SCSI Bus reset on the cmd	*/
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	   HBA_Init:1,	      /* Cause Controller to reinitialize	*/
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       Auto_Req_Sen:1,	      /* Do Auto Request Sense on errors	*/
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    scatter:1,	      /* Data Ptr points to a SG Packet		*/
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	     Resrvd:1,	      /* RFU					*/
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	  Interpret:1,	      /* Interpret the SCSI cdb of own use	*/
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    DataOut:1,	      /* Data Out phase with command		*/
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	     DataIn:1;	      /* Data In phase with command		*/
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 reqlen;	      /* Request Sense Length			*
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * Valid if Auto_Req_Sen=1		*/
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 unused[3];
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  FWNEST:1,	      /* send cmd to phys RAID component	*/
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 unused2:7;
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 Phsunit:1,	      /* physical unit on mirrored pair		*/
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	    I_AT:1,	      /* inhibit address translation		*/
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 I_HBA_C:1,	      /* HBA inhibit caching			*/
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 unused3:5;
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8     cp_id:5,	      /* SCSI Device ID of target		*/
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	cp_channel:3;	      /* SCSI Channel # of HBA			*/
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8    cp_lun:3,
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		  :2,
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 cp_luntar:1,	      /* CP is for target ROUTINE		*/
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 cp_dispri:1,	      /* Grant disconnect privilege		*/
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds       cp_identify:1;	      /* Always TRUE				*/
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 cp_msg1;	      /* Message bytes 0-3			*/
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 cp_msg2;
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 cp_msg3;
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 cp_cdb[12];	      /* Command Descriptor Block		*/
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 cp_datalen;	      /* Data Transfer Length			*
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * If scatter=1 len of sg package		*/
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    void *cp_viraddr;	      /* address of this ccb			*/
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 cp_dataDMA;	      /* Data Address, if scatter=1		*
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * address of scatter packet		*/
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 cp_statDMA;	      /* address for Status Packet		*/
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 cp_reqDMA;	      /* Request Sense Address, used if		*
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			       * CP command ends with error		*/
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    /* Additional CP info begins here */
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 timestamp;	      /* Needed to measure command latency	*/
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 timeout;
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 sizeindex;
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 rw_latency;
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 retries;
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 status;	      /* status of this queueslot		*/
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct scsi_cmnd *cmd;    /* address of cmd				*/
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct eata_sg_list *sg_list;
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct eata_sp {
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 hba_stat:7,	      /* HBA status				*/
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	      EOC:1;	      /* True if command finished		*/
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 scsi_stat;	      /* Target SCSI status			*/
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 reserved[2];
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  residue_len;	      /* Number of bytes not transferred	*/
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct eata_ccb *ccb;     /* Address set in COMMAND PACKET		*/
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 msg[12];
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct hstd {
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   vendor[9];
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   name[18];
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   revision[6];
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   EATA_revision;
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  firmware_revision;
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   HBA_number;
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   bustype;		 /* bustype of HBA	       */
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   channel;		 /* # of avail. scsi channels  */
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   state;		 /* state of HBA	       */
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   primary;		 /* true if primary	       */
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8        more_support:1,  /* HBA supports MORE flag     */
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds           immediate_support:1,  /* HBA supports IMMEDIATE CMDs*/
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds              broken_INQUIRY:1;	 /* This is an EISA HBA with   *
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				  * broken INQUIRY	       */
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   do_latency;		 /* Latency measurement flag   */
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  reads[13];
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  writes[13];
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  reads_lat[12][4];
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  writes_lat[12][4];
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  all_lat[4];
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   resetlevel[MAXCHANNEL];
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  last_ccb;		 /* Last used ccb	       */
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32  cplen;		 /* size of CP in words	       */
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16  cppadlen;		 /* pad length of cp in words  */
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16  queuesize;
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16  sgsize;               /* # of entries in the SG list*/
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u16  devflags;		 /* bits set for detected devices */
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   hostid;		 /* SCSI ID of HBA	       */
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8   moresupport;		 /* HBA supports MORE flag     */
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct Scsi_Host *next;
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct Scsi_Host *prev;
3601a68d41a334a406d4bd35999f0be4d47f193e477Alan Cox    struct pci_dev *pdev;	/* PCI device or NULL for non PCI */
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct eata_sp sp;		 /* status packet	       */
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct eata_ccb ccb[0];	 /* ccb array begins here      */
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}hostdata;
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* structure for max. 2 emulated drives */
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct drive_geom_emul {
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  trans;		 /* translation flag 1=transl */
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  channel;		 /* SCSI channel number	      */
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  HBA;			 /* HBA number (prim/sec)     */
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  id;			 /* drive id		      */
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8  lun;			 /* drive lun		      */
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 heads;		 /* number of heads	      */
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 sectors;		 /* number of sectors	      */
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u32 cylinder;		 /* number of cylinders	      */
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct geom_emul {
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    __u8 bios_drives;		 /* number of emulated drives */
3791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds    struct drive_geom_emul drv[2]; /* drive structures	      */
3801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _EATA_GENERIC_H */
3831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Overrides for Emacs so that we almost follow Linus's tabbing style.
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Emacs will notice this stuff at the end of the file and automatically
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * adjust the settings for this buffer only.  This must remain at the end
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the file.
3891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ---------------------------------------------------------------------------
3901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Local variables:
3911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-indent-level: 4
3921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-brace-imaginary-offset: 0
3931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-brace-offset: -4
3941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-argdecl-indent: 4
3951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-label-offset: -4
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-continued-statement-offset: 4
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * c-continued-brace-offset: 0
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * tab-width: 8
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * End:
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
401