11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/******************************************************************************
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*                  QLOGIC LINUX SOFTWARE
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* QLogic ISP1280 (Ultra2) /12160 (Ultra3) SCSI driver
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* Copyright (C) 2000 Qlogic Corporation
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* (www.qlogic.com)
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* This program is free software; you can redistribute it and/or modify it
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* under the terms of the GNU General Public License as published by the
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* Free Software Foundation; either version 2, or (at your option) any
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* later version.
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* This program is distributed in the hope that it will be useful, but
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* WITHOUT ANY WARRANTY; without even the implied warranty of
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds* General Public License for more details.
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds*
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds******************************************************************************/
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef	_QLA1280_H
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	_QLA1280_H
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Data bit definitions.
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_0	0x1
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_1	0x2
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_2	0x4
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_3	0x8
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_4	0x10
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_5	0x20
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_6	0x40
331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_7	0x80
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_8	0x100
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_9	0x200
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_10	0x400
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_11	0x800
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_12	0x1000
391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_13	0x2000
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_14	0x4000
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_15	0x8000
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_16	0x10000
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_17	0x20000
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_18	0x40000
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_19	0x80000
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_20	0x100000
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_21	0x200000
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_22	0x400000
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_23	0x800000
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_24	0x1000000
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_25	0x2000000
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_26	0x4000000
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_27	0x8000000
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_28	0x10000000
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_29	0x20000000
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_30	0x40000000
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIT_31	0x80000000
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#if MEMORY_MAPPED_IO
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RD_REG_WORD(addr)		readw_relaxed(addr)
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RD_REG_WORD_dmasync(addr)	readw(addr)
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WRT_REG_WORD(addr, data)	writew(data, addr)
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else				/* MEMORY_MAPPED_IO */
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RD_REG_WORD(addr)		inw((unsigned long)addr)
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RD_REG_WORD_dmasync(addr)	RD_REG_WORD(addr)
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WRT_REG_WORD(addr, data)	outw(data, (unsigned long)addr)
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif				/* MEMORY_MAPPED_IO */
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Host adapter default definitions.
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_BUSES	2	/* 2 */
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_B_BITS	1
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_TARGETS	16	/* 16 */
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_T_BITS	4	/* 4 */
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_LUNS	8	/* 32 */
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_L_BITS	3	/* 5 */
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Watchdog time quantum
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define QLA1280_WDG_TIME_QUANTUM	5	/* In seconds */
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Command retry count (0-65535) */
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMMAND_RETRY_COUNT		255
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* Maximum outstanding commands in ISP queues */
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_OUTSTANDING_COMMANDS	512
91413e6e18b483de272bdafa56e5c086c75f11d681Michael Reed#define COMPLETED_HANDLE		((unsigned char *) \
92413e6e18b483de272bdafa56e5c086c75f11d681Michael Reed					(MAX_OUTSTANDING_COMMANDS + 2))
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* ISP request and response entry counts (37-65535) */
9520d2d3afa87781fe2674ce17bfb16af08a436e81Johannes Dickgreber#define REQUEST_ENTRY_CNT		255 /* Number of request entries. */
9620d2d3afa87781fe2674ce17bfb16af08a436e81Johannes Dickgreber#define RESPONSE_ENTRY_CNT		63  /* Number of response entries. */
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SCSI Request Block structure  (sp)  that is placed
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * on cmd->SCp location of every I/O
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct srb {
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head list;		/* (8/16) LU queue */
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct scsi_cmnd *cmd;	/* (4/8) SCSI command block */
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* NOTE: the sp->cmd will be NULL when this completion is
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * called, so you should know the scsi_cmnd when using this */
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct completion *wait;
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dma_addr_t saved_dma_handle;	/* for unmap of single transfers */
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t flags;		/* (1) Status flags. */
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t dir;		/* direction of transfer */
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * SRB flag definitions
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB_TIMEOUT		(1 << 0)	/* Command timed out */
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB_SENT		(1 << 1)	/* Command sent to ISP */
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB_ABORT_PENDING	(1 << 2)	/* Command abort sent to device */
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SRB_ABORTED		(1 << 3)	/* Command aborted command already */
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  ISP I/O Register Set structure definitions.
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct device_reg {
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t id_l;		/* ID low */
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t id_h;		/* ID high */
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cfg_0;		/* Configuration 0 */
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_HWMSK   0x000f	/* Hardware revision mask */
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1020    BIT_0	/* ISP1020 */
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1020A	 BIT_1	/* ISP1020A */
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1040	 BIT_2	/* ISP1040 */
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1040A	 BIT_3	/* ISP1040A */
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1040B	 BIT_4	/* ISP1040B */
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG0_1040C	 BIT_5	/* ISP1040C */
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cfg_1;		/* Configuration 1 */
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_F128    BIT_6  /* 128-byte FIFO threshold */
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_F64     BIT_4|BIT_5 /* 128-byte FIFO threshold */
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_F32     BIT_5  /* 128-byte FIFO threshold */
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_F16     BIT_4  /* 128-byte FIFO threshold */
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_BENAB   BIT_2  /* Global Bus burst enable */
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_CFG1_SXP     BIT_0  /* SXP register select */
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ictrl;		/* Interface control */
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_RESET        BIT_0	/* ISP soft reset */
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_EN_INT       BIT_1	/* ISP enable interrupts. */
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_EN_RISC      BIT_2	/* ISP enable RISC interrupts. */
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_FLASH_ENABLE BIT_8	/* Flash BIOS Read/Write enable */
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ISP_FLASH_UPPER  BIT_9	/* Flash upper bank select */
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t istatus;	/* Interface status */
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_64BIT_SLOT   BIT_14	/* PCI 64-bit slot indicator. */
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RISC_INT         BIT_2	/* RISC interrupt */
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PCI_INT          BIT_1	/* PCI interrupt */
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t semaphore;	/* Semaphore */
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t nvram;		/* NVRAM register. */
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_DESELECT     0
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_CLOCK        BIT_0
1561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_SELECT       BIT_1
1571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_DATA_OUT     BIT_2
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_DATA_IN      BIT_3
1591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t flash_data;	/* Flash BIOS data */
1601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t flash_address;	/* Flash BIOS address */
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_1[0x06];
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* cdma_* and ddma_* are 1040 only */
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_cfg;
1661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CDMA_CONF_SENAB  BIT_3	/* SXP to DMA Data enable */
1671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CDMA_CONF_RIRQ   BIT_2	/* RISC interrupt enable */
1681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CDMA_CONF_BENAB  BIT_1	/* Bus burst enable */
1691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CDMA_CONF_DIR    BIT_0	/* DMA direction (0=fifo->host 1=host->fifo) */
1701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_ctrl;
1711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_status;
1721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_fifo_status;
1731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_count;
1741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_reserved;
1751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_address_count_0;
1761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_address_count_1;
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_address_count_2;
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t cdma_address_count_3;
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_2[0x06];
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_cfg;
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DDMA_CONF_SENAB  BIT_3	/* SXP to DMA Data enable */
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DDMA_CONF_RIRQ   BIT_2	/* RISC interrupt enable */
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DDMA_CONF_BENAB  BIT_1	/* Bus burst enable */
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define DDMA_CONF_DIR    BIT_0	/* DMA direction (0=fifo->host 1=host->fifo) */
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_ctrl;
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_status;
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_fifo_status;
1901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_xfer_count_low;
1911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_xfer_count_high;
1921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_addr_count_0;
1931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_addr_count_1;
1941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_addr_count_2;
1951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ddma_addr_count_3;
1961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_3[0x0e];
1981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox0;	/* Mailbox 0 */
2001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox1;	/* Mailbox 1 */
2011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox2;	/* Mailbox 2 */
2021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox3;	/* Mailbox 3 */
2031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox4;	/* Mailbox 4 */
2041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox5;	/* Mailbox 5 */
2051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox6;	/* Mailbox 6 */
2061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t mailbox7;	/* Mailbox 7 */
2071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_4[0x20];/* 0x80-0xbf Gap */
2091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t host_cmd;	/* Host command and control */
2111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HOST_INT      BIT_7	/* host interrupt bit */
2121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define BIOS_ENABLE   BIT_0
2131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_5[0x5];	/* 0xc2-0xcb Gap */
2151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t gpio_data;
2171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t gpio_enable;
2181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_6[0x11];	/* d0-f0 */
2201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t scsiControlPins;	/* f2 */
2211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
2221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAILBOX_REGISTER_COUNT	8
2241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  ISP product identification definitions in mailboxes after reset.
2271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROD_ID_1		0x4953
2291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROD_ID_2		0x0000
2301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROD_ID_2a		0x5020
2311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROD_ID_3		0x2020
2321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define PROD_ID_4		0x1
2331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP host command and control register command definitions
2361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_RESET_RISC		0x1000	/* Reset RISC */
2381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_PAUSE_RISC		0x2000	/* Pause RISC */
2391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_RELEASE_RISC		0x3000	/* Release RISC from reset. */
2401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_SET_HOST_INT		0x5000	/* Set host interrupt */
2411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_CLR_HOST_INT		0x6000	/* Clear HOST interrupt */
2421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_CLR_RISC_INT		0x7000	/* Clear RISC interrupt */
2431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define HC_DISABLE_BIOS		0x9000	/* Disable BIOS. */
2441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP mailbox Self-Test status codes
2471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_FRM_ALIVE		0	/* Firmware Alive. */
2491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_CHKSUM_ERR		1	/* Checksum Error. */
2501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_SHADOW_LD_ERR	2	/* Shadow Load Error. */
2511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_BUSY		4	/* Busy. */
2521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP mailbox command complete status codes
2551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_CMD_CMP		0x4000	/* Command Complete. */
2571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_INV_CMD		0x4001	/* Invalid Command. */
2581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_HOST_INF_ERR	0x4002	/* Host Interface Error. */
2591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_TEST_FAILED		0x4003	/* Test Failed. */
2601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_CMD_ERR		0x4005	/* Command Error. */
2611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBS_CMD_PARAM_ERR	0x4006	/* Command Parameter Error. */
2621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP mailbox asynchronous event status codes
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_ASYNC_EVENT		0x8000	/* Asynchronous event. */
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_BUS_RESET		0x8001	/* SCSI Bus Reset. */
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_SYSTEM_ERR		0x8002	/* System Error. */
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_REQ_TRANSFER_ERR	0x8003	/* Request Transfer Error. */
2701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_RSP_TRANSFER_ERR	0x8004	/* Response Transfer Error. */
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_WAKEUP_THRES	0x8005	/* Request Queue Wake-up. */
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_TIMEOUT_RESET	0x8006	/* Execution Timeout Reset. */
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_DEVICE_RESET	0x8007	/* Bus Device Reset. */
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_BUS_MODE_CHANGE	0x800E	/* SCSI bus mode transition. */
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBA_SCSI_COMPLETION	0x8020	/* Completion response. */
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP mailbox commands
2791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_NOP				0	/* No Operation */
2811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_LOAD_RAM			1	/* Load RAM */
2821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_EXECUTE_FIRMWARE		2	/* Execute firmware */
2831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_DUMP_RAM			3	/* Dump RAM contents */
2841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_WRITE_RAM_WORD		4	/* Write ram word */
2851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_READ_RAM_WORD		5	/* Read ram word */
2861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_MAILBOX_REGISTER_TEST	6	/* Wrap incoming mailboxes */
2871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_VERIFY_CHECKSUM		7	/* Verify checksum */
2881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_ABOUT_FIRMWARE		8	/* Get firmware revision */
2891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_INIT_REQUEST_QUEUE		0x10	/* Initialize request queue */
2901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_INIT_RESPONSE_QUEUE		0x11	/* Initialize response queue */
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_EXECUTE_IOCB		0x12	/* Execute IOCB command */
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_ABORT_COMMAND		0x15	/* Abort IOCB command */
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_ABORT_DEVICE		0x16	/* Abort device (ID/LUN) */
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_ABORT_TARGET		0x17	/* Abort target (ID) */
2951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_BUS_RESET			0x18	/* SCSI bus reset */
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_GET_RETRY_COUNT		0x22	/* Get retry count and delay */
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_GET_TARGET_PARAMETERS	0x28	/* Get target parameters */
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_INITIATOR_ID		0x30	/* Set initiator SCSI ID */
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_SELECTION_TIMEOUT	0x31	/* Set selection timeout */
3001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_RETRY_COUNT		0x32	/* Set retry count and delay */
3011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_TAG_AGE_LIMIT		0x33	/* Set tag age limit */
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_CLOCK_RATE		0x34	/* Set clock rate */
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_ACTIVE_NEGATION		0x35	/* Set active negation state */
3041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_ASYNC_DATA_SETUP	0x36	/* Set async data setup time */
3051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_PCI_CONTROL		0x37	/* Set BUS control parameters */
3061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_TARGET_PARAMETERS	0x38	/* Set target parameters */
3071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_DEVICE_QUEUE		0x39	/* Set device queue parameters */
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_RESET_DELAY_PARAMETERS	0x3A	/* Set reset delay parameters */
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_SYSTEM_PARAMETER	0x45	/* Set system parameter word */
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_FIRMWARE_FEATURES	0x4A	/* Set firmware feature word */
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_INIT_REQUEST_QUEUE_A64	0x52	/* Initialize request queue A64 */
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_INIT_RESPONSE_QUEUE_A64	0x53	/* Initialize response q A64 */
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_ENABLE_TARGET_MODE		0x55	/* Enable target mode */
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MBC_SET_DATA_OVERRUN_RECOVERY	0x5A	/* Set data overrun recovery mode */
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP Get/Set Target Parameters mailbox command control flags.
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_PPR			BIT_5	/* PPR */
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_RENEGOTIATE		BIT_8	/* Renegotiate on error. */
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_STOP_QUEUE           BIT_9	/* Stop que on check condition */
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_AUTO_REQUEST_SENSE   BIT_10	/* Automatic request sense. */
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_TAGGED_QUEUE         BIT_11	/* Tagged queuing. */
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_SYNC                 BIT_12	/* Synchronous data transfers. */
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_WIDE                 BIT_13	/* Wide data transfers. */
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_PARITY               BIT_14	/* Parity checking. */
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TP_DISCONNECT           BIT_15	/* Disconnect privilege. */
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * NVRAM Command values.
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_START_BIT		BIT_2
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_WRITE_OP		(BIT_26 | BIT_24)
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_READ_OP		(BIT_26 | BIT_25)
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_ERASE_OP		(BIT_26 | BIT_25 | BIT_24)
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_MASK_OP		(BIT_26 | BIT_25 | BIT_24)
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NV_DELAY_COUNT		10
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  QLogic ISP1280/ISP12160 NVRAM structure definition.
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nvram {
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t id0;		/* 0 */
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t id1;		/* 1 */
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t id2;		/* 2 */
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t id3;		/* 3 */
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t version;	/* 4 */
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct {
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t bios_configuration_mode:2;
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t bios_disable:1;
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t selectable_scsi_boot_enable:1;
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t cd_rom_boot_enable:1;
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t disable_loading_risc_code:1;
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t enable_64bit_addressing:1;
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_7:1;
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} cntr_flags_1;		/* 5 */
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct {
3601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t boot_lun_number:5;
3611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t scsi_bus_number:1;
3621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_6:1;
3631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_7:1;
3641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} cntr_flags_2l;	/* 7 */
3651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct {
3671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t boot_target_number:4;
3681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_12:1;
3691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_13:1;
3701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_14:1;
3711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_15:1;
3721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} cntr_flags_2h;	/* 8 */
3731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_8;	/* 8, 9 */
3751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_10;	/* 10, 11 */
3761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_12;	/* 12, 13 */
3771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_14;	/* 14, 15 */
3781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3790888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig	struct {
3800888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t reserved:2;
3810888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t burst_enable:1;
3820888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t reserved_1:1;
3830888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t fifo_threshold:4;
3841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} isp_config;		/* 16 */
3851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Termination
3871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 * 0 = Disable, 1 = high only, 3 = Auto term
3881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	 */
3890888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig	struct {
3900888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t scsi_bus_1_control:2;
3910888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t scsi_bus_0_control:2;
3920888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t unused_0:1;
3930888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t unused_1:1;
3940888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t unused_2:1;
3950888f4c3312847eec4814a6d7cdcaaaa9fbd3345Christoph Hellwig		uint8_t auto_term_support:1;
3961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} termination;		/* 17 */
3971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t isp_parameter;	/* 18, 19 */
3991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {
4011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t w;
4021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct {
4031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t enable_fast_posting:1;
4041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t report_lvd_bus_transition:1;
4051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_2:1;
4061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_3:1;
4071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t disable_iosbs_with_bus_reset_status:1;
4081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t disable_synchronous_backoff:1;
4091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_6:1;
4101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t synchronous_backoff_reporting:1;
4111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t disable_reselection_fairness:1;
4121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_9:1;
4131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_10:1;
4141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_11:1;
4151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_12:1;
4161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_13:1;
4171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_14:1;
4181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint16_t unused_15:1;
4191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} f;
4201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} firmware_feature;	/* 20, 21 */
4211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_22;	/* 22, 23 */
4231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct {
4251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct {
4261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t initiator_id:4;
4271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t scsi_reset_disable:1;
4281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t scsi_bus_size:1;
4291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t scsi_bus_type:1;
4301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t unused_7:1;
4311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} config_1;	/* 24 */
4321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t bus_reset_delay;	/* 25 */
4341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t retry_count;	/* 26 */
4351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t retry_delay;	/* 27 */
4361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct {
4381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t async_data_setup_time:4;
4391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t req_ack_active_negation:1;
4401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t data_line_active_negation:1;
4411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t unused_6:1;
4421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t unused_7:1;
4431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} config_2;	/* 28 */
4441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_29;	/* 29 */
4461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t selection_timeout;	/* 30, 31 */
4481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t max_queue_depth;	/* 32, 33 */
4491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t unused_34;	/* 34, 35 */
4511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t unused_36;	/* 36, 37 */
4521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint16_t unused_38;	/* 38, 39 */
4531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		struct {
4557a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig			struct {
4567a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t renegotiate_on_error:1;
4577a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t stop_queue_on_check:1;
4587a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t auto_request_sense:1;
4597a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t tag_queuing:1;
4607a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t enable_sync:1;
4617a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t enable_wide:1;
4627a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t parity_checking:1;
4637a34766fdcec0c619aa68ace203b934dd7cf9dbcChristoph Hellwig				uint8_t disconnect_allowed:1;
4641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			} parameter;	/* 40 */
4651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t execution_throttle;	/* 41 */
4671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t sync_period;	/* 42 */
4681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			union {		/* 43 */
4701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				uint8_t flags_43;
4711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct {
4721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t sync_offset:4;
4731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t device_enable:1;
4741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t lun_disable:1;
4751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t unused_6:1;
4761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t unused_7:1;
4771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				} flags1x80;
4781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct {
4791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t sync_offset:5;
4801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t device_enable:1;
4811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t unused_6:1;
4821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t unused_7:1;
4831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				} flags1x160;
4841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			} flags;
4851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			union {	/* PPR flags for the 1x160 controllers */
4861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				uint8_t unused_44;
4871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				struct {
4881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t ppr_options:4;
4891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t ppr_bus_width:2;
4901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t unused_8:1;
4911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					uint8_t enable_ppr:1;
4921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds				} flags;	/* 44 */
4931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			} ppr_1x160;
4941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds			uint8_t unused_45;	/* 45 */
4951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		} target[MAX_TARGETS];
4961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} bus[MAX_BUSES];
4971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
4981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t unused_248;	/* 248, 249 */
4991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t subsystem_id[2];	/* 250, 251, 252, 253 */
5011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	union {				/* 254 */
5031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t unused_254;
5041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint8_t system_id_pointer;
5051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} sysid_1x160;
5061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t chksum;		/* 255 */
5081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
5111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - command entry structure definition.
5121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MAX_CMDSZ	12		/* SCSI maximum CDB size. */
5141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct cmd_entry {
5151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;		/* Entry type. */
5161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMMAND_TYPE    1		/* Command entry */
5171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;		/* Entry count. */
5181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;		/* System defined. */
5191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;		/* Entry Status. */
5208d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 handle;			/* System handle. */
5211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;			/* SCSI LUN */
5221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target;			/* SCSI ID */
5238d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 cdb_len;			/* SCSI command length. */
5248d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 control_flags;		/* Control flags. */
5258d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved;
5268d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;			/* Command timeout. */
5278d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;		/* Data segment count. */
5281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_cdb[MAX_CMDSZ];	/* SCSI command words. */
5298d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address;		/* Data segment 0 address. */
5308d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;		/* Data segment 0 length. */
5318d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address;		/* Data segment 1 address. */
5328d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;		/* Data segment 1 length. */
5338d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_address;		/* Data segment 2 address. */
5348d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_length;		/* Data segment 2 length. */
5358d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_address;		/* Data segment 3 address. */
5368d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_length;		/* Data segment 3 length. */
5371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
5401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - continuation entry structure definition.
5411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct cont_entry {
5431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;		/* Entry type. */
5441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CONTINUE_TYPE   2		/* Continuation entry. */
5451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;		/* Entry count. */
5461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;		/* System defined. */
5471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;		/* Entry Status. */
5488d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved;		/* Reserved */
5498d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address;		/* Data segment 0 address. */
5508d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;		/* Data segment 0 length. */
5518d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address;		/* Data segment 1 address. */
5528d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;		/* Data segment 1 length. */
5538d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_address;		/* Data segment 2 address. */
5548d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_length;		/* Data segment 2 length. */
5558d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_address;		/* Data segment 3 address. */
5568d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_length;		/* Data segment 3 length. */
5578d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_4_address;		/* Data segment 4 address. */
5588d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_4_length;		/* Data segment 4 length. */
5598d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_5_address;		/* Data segment 5 address. */
5608d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_5_length;		/* Data segment 5 length. */
5618d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_6_address;		/* Data segment 6 address. */
5628d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_6_length;		/* Data segment 6 length. */
5631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
5661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - status entry structure definition.
5671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
5681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct response {
5691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
5701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define STATUS_TYPE     3	/* Status entry. */
5711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
5721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;	/* System defined. */
5731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
5741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RF_CONT         BIT_0	/* Continuation. */
5751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RF_FULL         BIT_1	/* Full */
5761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RF_BAD_HEADER   BIT_2	/* Bad header. */
5771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RF_BAD_PAYLOAD  BIT_3	/* Bad payload. */
5788d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 handle;		/* System handle. */
5798d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 scsi_status;	/* SCSI status. */
5808d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 comp_status;	/* Completion status. */
5818d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 state_flags;	/* State flags. */
5828d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_TRANSFER_CMPL	BIT_14	/* Transfer Complete. */
5838d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_GOT_SENSE	 	BIT_13	/* Got Sense */
5848d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_GOT_STATUS	 	BIT_12	/* Got Status */
5858d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_TRANSFERRED_DATA	BIT_11	/* Transferred data */
5868d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_SENT_CDB	 	BIT_10	/* Send CDB */
5878d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_GOT_TARGET	 	BIT_9	/*  */
5888d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig#define SF_GOT_BUS	 	BIT_8	/*  */
5898d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 status_flags;	/* Status flags. */
5908d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 time;		/* Time. */
5918d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 req_sense_length;/* Request sense data length. */
5928d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 residual_length;	/* Residual transfer length. */
5938d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved[4];
5941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t req_sense_data[32];	/* Request sense data. */
5951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
5961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
5971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
5981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - marker entry structure definition.
5991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
6001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct mrk_entry {
6011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
6021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MARKER_TYPE     4	/* Marker entry. */
6031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
6041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;	/* System defined. */
6051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
6068d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved;
6071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
6081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target;		/* SCSI ID */
6091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t modifier;	/* Modifier (7-0). */
6101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MK_SYNC_ID_LUN      0	/* Synchronize ID/LUN */
6111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MK_SYNC_ID          1	/* Synchronize ID */
6121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MK_SYNC_ALL         2	/* Synchronize all ID/LUN */
6131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1[53];
6141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
6171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - extended command entry structure definition.
6181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
6191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Unused by the driver!
6201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
6211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ecmd_entry {
6221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
6231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define EXTENDED_CMD_TYPE  5	/* Extended command entry. */
6241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
6251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;	/* System defined. */
6261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
6271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint32_t handle;	/* System handle. */
6281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
6291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target;		/* SCSI ID */
6308d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 cdb_len;		/* SCSI command length. */
6318d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 control_flags;	/* Control flags. */
6328d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved;
6338d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* Command timeout. */
6348d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
6351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_cdb[88];	/* SCSI command words. */
6361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
6391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - 64-Bit addressing, command entry structure definition.
6401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
6411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef struct {
6421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
6431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMMAND_A64_TYPE 9	/* Command A64 entry */
6441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
6451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;	/* System defined. */
6461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
6478d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 handle;	/* System handle. */
6481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
6491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target;		/* SCSI ID */
6508d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 cdb_len;	/* SCSI command length. */
6518d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 control_flags;	/* Control flags. */
6528d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved;
6538d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;	/* Command timeout. */
6548d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
6551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_cdb[MAX_CMDSZ];	/* SCSI command words. */
6568d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_1[2];	/* unused */
6578d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address[2];	/* Data segment 0 address. */
6588d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;	/* Data segment 0 length. */
6598d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address[2];	/* Data segment 1 address. */
6608d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;	/* Data segment 1 length. */
6611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} cmd_a64_entry_t, request_t;
6621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
6641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - 64-Bit addressing, continuation entry structure definition.
6651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
6661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct cont_a64_entry {
6671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
6681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CONTINUE_A64_TYPE 0xA	/* Continuation A64 entry. */
6691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
6701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sys_define;	/* System defined. */
6711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
6728d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address[2];	/* Data segment 0 address. */
6738d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;		/* Data segment 0 length. */
6748d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address[2];	/* Data segment 1 address. */
6758d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;		/* Data segment 1 length. */
6768d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_address[2];	/* Data segment 2 address. */
6778d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_length;		/* Data segment 2 length. */
6788d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_address[2];	/* Data segment 3 address. */
6798d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_length;		/* Data segment 3 length. */
6808d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_4_address[2];	/* Data segment 4 address. */
6818d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_4_length;		/* Data segment 4 length. */
6821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
6831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
6841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
6851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - enable LUN entry structure definition.
6861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
6871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct elun_entry {
6881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
6891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ENABLE_LUN_TYPE 0xB	/* Enable LUN entry. */
6901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
6911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
6921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status not used. */
6938d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
6948d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 lun;		/* Bit 15 is bus number. */
6958d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_4;
6968d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
6971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
6981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_5;
6991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t command_count;	/* Number of ATIOs allocated. */
7001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t immed_notify_count;	/* Number of Immediate Notify */
7011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* entries allocated. */
7021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t group_6_length;	/* SCSI CDB length for group 6 */
7031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* commands (2-26). */
7041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t group_7_length;	/* SCSI CDB length for group 7 */
7051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* commands (2-26). */
7068d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
7078d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_6[20];
7081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
7111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - modify LUN entry structure definition.
7121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
7131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Unused by the driver!
7141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
7151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct modify_lun_entry {
7161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
7171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MODIFY_LUN_TYPE 0xC	/* Modify LUN entry. */
7181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
7191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
7201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
7218d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
7221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
7231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
7241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t operators;
7251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_4;
7268d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
7271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
7281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_5;
7291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t command_count;	/* Number of ATIOs allocated. */
7301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t immed_notify_count;	/* Number of Immediate Notify */
7311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* entries allocated. */
7328d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_6;
7338d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
7348d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_7[20];
7351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
7381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - immediate notify entry structure definition.
7391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
7401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct notify_entry {
7411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
7421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define IMMED_NOTIFY_TYPE 0xD	/* Immediate notify entry. */
7431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
7441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
7451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
7468d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
7471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;
7481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
7491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
7501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
7518d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
7521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
7531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_4;
7541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
7551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
7561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* entries allocated. */
7578d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 seq_id;
7581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_msg[8];	/* SCSI message not handled by ISP */
7598d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_5[8];
7601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sense_data[18];
7611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
7641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - notify acknowledge entry structure definition.
7651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
7661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct nack_entry {
7671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
7681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define NOTIFY_ACK_TYPE 0xE	/* Notify acknowledge entry. */
7691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
7701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
7711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
7728d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
7731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;
7741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
7751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
7761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
7778d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
7781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
7791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t event;
7808d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 seq_id;
7818d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_4[22];
7821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
7831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
7841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
7851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - Accept Target I/O (ATIO) entry structure definition.
7861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
7871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct atio_entry {
7881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
7891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define ACCEPT_TGT_IO_TYPE 6	/* Accept target I/O entry. */
7901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
7911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
7921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
7938d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
7941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;
7951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
7961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t cdb_len;
7971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
7988d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
7991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
8001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_status;
8011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
8021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
8031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t cdb[26];
8041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sense_data[18];
8051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
8081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - Continue Target I/O (CTIO) entry structure definition.
8091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
8101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ctio_entry {
8111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
8121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CONTINUE_TGT_IO_TYPE 7	/* CTIO entry */
8131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
8141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
8151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
8168d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
8171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
8181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
8191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
8201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
8218d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
8221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
8231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_status;
8241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
8251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
8268d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 transfer_length;
8278d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 residual;
8288d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
8298d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
8308d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address;	/* Data segment 0 address. */
8318d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;	/* Data segment 0 length. */
8328d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address;	/* Data segment 1 address. */
8338d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;	/* Data segment 1 length. */
8348d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_address;	/* Data segment 2 address. */
8358d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_2_length;	/* Data segment 2 length. */
8368d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_address;	/* Data segment 3 address. */
8378d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_3_length;	/* Data segment 3 length. */
8381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
8411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - CTIO returned entry structure definition.
8421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
8431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ctio_ret_entry {
8441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
8451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTIO_RET_TYPE   7	/* CTIO return entry */
8461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
8471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
8481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
8498d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
8501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
8511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
8521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
8531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
8548d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
8551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
8561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_status;
8571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
8581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
8598d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 transfer_length;
8608d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 residual;
8618d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
8628d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
8638d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address;	/* Data segment 0 address. */
8648d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;	/* Data segment 0 length. */
8658d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address;	/* Data segment 1 address. */
8668d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_1_length;	/* Data segment 1 length. */
8671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sense_data[18];
8681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
8701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
8711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - CTIO A64 entry structure definition.
8721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
8731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ctio_a64_entry {
8741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
8751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTIO_A64_TYPE 0xF	/* CTIO A64 entry */
8761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
8771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
8781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
8798d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
8801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
8811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
8821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
8831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
8848d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
8851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
8861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_status;
8871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
8881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
8898d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 transfer_length;
8908d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 residual;
8918d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
8928d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
8938d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_4[2];
8948d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_address[2];/* Data segment 0 address. */
8958d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_0_length;	/* Data segment 0 length. */
8968d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_address[2];/* Data segment 1 address. */
8978d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 dseg_1_length;	/* Data segment 1 length. */
8981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
8991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
9011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP queue - CTIO returned entry structure definition.
9021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
9031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct ctio_a64_ret_entry {
9041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_type;	/* Entry type. */
9051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CTIO_A64_RET_TYPE 0xF	/* CTIO A64 returned entry */
9061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_count;	/* Entry count. */
9071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_1;
9081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t entry_status;	/* Entry Status. */
9098d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 reserved_2;
9101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t lun;		/* SCSI LUN */
9111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t initiator_id;
9121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reserved_3;
9131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t target_id;
9148d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 option_flags;
9151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t status;
9161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_status;
9171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_value;	/* Received queue tag message value */
9181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t tag_type;	/* Received queue tag message type */
9198d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 transfer_length;
9208d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le32 residual;
9218d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 timeout;		/* 0 = 30 seconds, 0xFFFF = disable */
9228d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 dseg_count;	/* Data segment count. */
9238d6810d33e5e43b11675190318a81303c601a568Christoph Hellwig	__le16 reserved_4[7];
9241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t sense_data[18];
9251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
9261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
9281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP request and response queue entry sizes
9291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
9301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define RESPONSE_ENTRY_SIZE	(sizeof(struct response))
9311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define REQUEST_ENTRY_SIZE	(sizeof(request_t))
9321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
9341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP status entry - completion status definitions.
9351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
9361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_COMPLETE         0x0	/* No errors */
9371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_INCOMPLETE       0x1	/* Incomplete transfer of cmd. */
9381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_DMA              0x2	/* A DMA direction error. */
9391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_TRANSPORT        0x3	/* Transport error. */
9401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_RESET            0x4	/* SCSI bus reset occurred */
9411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_ABORTED          0x5	/* System aborted command. */
9421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_TIMEOUT          0x6	/* Timeout error. */
9431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_DATA_OVERRUN     0x7	/* Data overrun. */
9441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_COMMAND_OVERRUN  0x8	/* Command Overrun. */
9451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_STATUS_OVERRUN   0x9	/* Status Overrun. */
9461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_BAD_MSG          0xA	/* Bad msg after status phase. */
9471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_NO_MSG_OUT       0xB	/* No msg out after selection. */
9481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_EXTENDED_ID      0xC	/* Extended ID failed. */
9491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_IDE_MSG          0xD	/* Target rejected IDE msg. */
9501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_ABORT_MSG        0xE	/* Target rejected abort msg. */
9511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_REJECT_MSG       0xF	/* Target rejected reject msg. */
9521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_NOP_MSG          0x10	/* Target rejected NOP msg. */
9531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_PARITY_MSG       0x11	/* Target rejected parity msg. */
9541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_DEV_RESET_MSG    0x12	/* Target rejected dev rst msg. */
9551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_ID_MSG           0x13	/* Target rejected ID msg. */
9561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_FREE             0x14	/* Unexpected bus free. */
9571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_DATA_UNDERRUN    0x15	/* Data Underrun. */
9581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_TRANACTION_1     0x18	/* Transaction error 1 */
9591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_TRANACTION_2     0x19	/* Transaction error 2 */
9601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_TRANACTION_3     0x1a	/* Transaction error 3 */
9611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_INV_ENTRY_TYPE   0x1b	/* Invalid entry type */
9621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_DEV_QUEUE_FULL   0x1c	/* Device queue full */
9631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_PHASED_SKIPPED   0x1d	/* SCSI phase skipped */
9641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_ARS_FAILED       0x1e	/* ARS failed */
9651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_LVD_BUS_ERROR    0x21	/* LVD bus error */
9661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_BAD_PAYLOAD      0x80	/* Driver defined */
9671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_UNKNOWN          0x81	/* Driver defined */
9681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define CS_RETRY            0x82	/* Driver defined */
9691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
9711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * ISP target entries - Option flags bit definitions.
9721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
9731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_ENABLE_TAG       BIT_1	/* Tagged queue action enable */
9741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_DATA_IN          BIT_6	/* Data in to initiator */
9751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					/*  (data from target to initiator) */
9761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_DATA_OUT         BIT_7	/* Data out from initiator */
9771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds					/*  (data from initiator to target) */
9781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_NO_DATA          (BIT_7 | BIT_6)
9791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_DISC_DISABLED    BIT_15	/* Disconnects disabled */
9801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_DISABLE_SDP      BIT_24	/* Disable sending save data ptr */
9811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_SEND_RDP         BIT_26	/* Send restore data pointers msg */
9821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_FORCE_DISC       BIT_30	/* Disconnects mandatory */
9831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define OF_SSTS             BIT_31	/* Send SCSI status */
9841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
9861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
9871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * BUS parameters/settings structure - UNUSED
9881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
9891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct bus_param {
9901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t id;		/* Host adapter SCSI id */
9911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t bus_reset_delay;	/* SCSI bus reset delay. */
9921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t failed_reset_count;	/* number of time reset failed */
9931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t unused;
9941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t device_enables;	/* Device enable bits. */
9951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t lun_disables;	/* LUN disable bits. */
9961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t qtag_enables;	/* Tag queue enables. */
9971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t hiwat;		/* High water mark per device. */
9981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t reset_marker:1;
9991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t disable_scsi_reset:1;
10001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t scsi_bus_dead:1;	/* SCSI Bus is Dead, when 5 back to back resets failed */
10011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
10021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct qla_driver_setup {
10051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint32_t no_sync:1;
10061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint32_t no_wide:1;
10071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint32_t no_ppr:1;
10081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint32_t no_nvram:1;
10091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t sync_mask;
10101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t wide_mask;
10111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t ppr_mask;
10121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
10131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
10161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Linux Host Adapter structure
10171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
10181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct scsi_qla_host {
10191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Linux adapter configuration data */
10201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct Scsi_Host *host;	/* pointer to host data */
10211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct scsi_qla_host *next;
10221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct device_reg __iomem *iobase;	/* Base Memory-mapped I/O address */
10231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned char __iomem *mmpbase;	/* memory mapped address */
10251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long host_no;
10261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct pci_dev *pdev;
10271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t devnum;
10281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t revision;
10291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint8_t ports;
10301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long actthreads;
10321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long isr_count;	/* Interrupt count */
10331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long spurious_int;
10341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Outstandings ISP commands. */
10361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct srb *outstanding_cmds[MAX_OUTSTANDING_COMMANDS];
10371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* BUS configuration data */
10391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct bus_param bus_settings[MAX_BUSES];
10401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	/* Received ISP mailbox data. */
10421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
10431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dma_addr_t request_dma;		/* Physical Address */
10451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	request_t *request_ring;	/* Base virtual address */
10461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	request_t *request_ring_ptr;	/* Current address. */
10471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t req_ring_index;	/* Current index. */
10481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t req_q_cnt;		/* Number of available entries. */
10491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	dma_addr_t response_dma;	/* Physical address. */
10511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct response *response_ring;	/* Base virtual address */
10521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct response *response_ring_ptr;	/* Current address. */
10531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	uint16_t rsp_ring_index;	/* Current index. */
10541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct list_head done_q;	/* Done queue */
10561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct completion *mailbox_wait;
10581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	volatile struct {
10601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t online:1;			/* 0 */
10611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t reset_marker:1;		/* 1 */
10621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t disable_host_adapter:1;	/* 2 */
10631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t reset_active:1;		/* 3 */
10641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t abort_isp_active:1;		/* 4 */
10651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t disable_risc_code_load:1;	/* 5 */
10661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef __ia64__
10671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		uint32_t use_pci_vchannel:1;
10681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
10691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	} flags;
10701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct nvram nvram;
10721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int nvram_valid;
10731bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput
10741bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput	/* Firmware Info */
10751bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput	unsigned short fwstart; /* start address for F/W   */
10761bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput	unsigned char fwver1;   /* F/W version first char  */
10771bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput	unsigned char fwver2;   /* F/W version second char */
10781bfa11db712cbf4af1ae037cd25fd4f781f0c215Jaswinder Singh Rajput	unsigned char fwver3;   /* F/W version third char  */
10791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
10801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _QLA1280_H */
1082