1f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/*
2f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * Marvell UMI head file
3f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  *
4f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * Copyright 2011 Marvell. <jyli@marvell.com>
5f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  *
6f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * This file is licensed under GPLv2.
7f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  *
8f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * This program is free software; you can redistribute it and/or
9f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * modify it under the terms of the GNU General Public License as
10f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * published by the Free Software Foundation; version 2 of the
11f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * License.
12f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  *
13f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * This program is distributed in the hope that it will be useful,
14f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * General Public License for more details.
17f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  *
18f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * You should have received a copy of the GNU General Public License
19f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * along with this program; if not, write to the Free Software
20f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li  * USA
22f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */
23f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
24f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#ifndef MVUMI_H
25f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_H
26f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
27f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MAX_BASE_ADDRESS	6
28f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
29f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_MAJOR		1
30f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_MINOR		1
31f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_OEM			0
32f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define VER_BUILD		1500
33f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
34f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MV_DRIVER_NAME			"mvumi"
35f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define PCI_VENDOR_ID_MARVELL_2		0x1b4b
36f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define PCI_DEVICE_ID_MARVELL_MV9143	0x9143
37f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
38f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_INTERNAL_CMD_WAIT_TIME	45
39f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
40f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define IS_DMA64			(sizeof(dma_addr_t) == 8)
41f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
42f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum mvumi_qc_result {
43f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	MV_QUEUE_COMMAND_RESULT_SENT	= 0,
44f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	MV_QUEUE_COMMAND_RESULT_NO_RESOURCE,
45f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
46f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
47f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum {
48f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/*******************************************/
49f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
50f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* ARM Mbus Registers Map	*/
51f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
52f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/*******************************************/
53f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_MAIN_INT_CAUSE_REG	= 0x20200,
54f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_MAIN_IRQ_MASK_REG	= 0x20204,
55f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_MAIN_FIQ_MASK_REG	= 0x20208,
56f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ENPOINTA_MASK_REG	= 0x2020C,
57f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ENPOINTB_MASK_REG	= 0x20210,
58f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
59f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMAERR		= 1 << 6,
60f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMAIN		= 1 << 7,
61f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMAOUT		= 1 << 8,
62f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMBERR		= 1 << 9,
63f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMBIN		= 1 << 10,
64f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMBOUT		= 1 << 11,
65f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
66f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMAINT	= (INT_MAP_COMAOUT | INT_MAP_COMAERR),
67f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_COMBINT	= (INT_MAP_COMBOUT | INT_MAP_COMBIN | INT_MAP_COMBERR),
68f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
69f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_DL_PCIEA2CPU	= 1 << 0,
70f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_DL_CPU2PCIEA	= 1 << 1,
71f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
72f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/***************************************/
73f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
74f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* ARM Doorbell Registers Map		*/
75f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
76f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/***************************************/
77f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_PCIEA_TO_ARM_DRBL_REG	= 0x20400,
78f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_PCIEA_TO_ARM_MASK_REG	= 0x20404,
79f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ARM_TO_PCIEA_DRBL_REG	= 0x20408,
80f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ARM_TO_PCIEA_MASK_REG	= 0x2040C,
81f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
82f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_HANDSHAKE			= 1 << 0,
83f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_SOFT_RESET			= 1 << 1,
84f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_BUS_CHANGE			= 1 << 2,
85f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_EVENT_NOTIFY		= 1 << 3,
86f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_MU_RESET			= 1 << 4,
87f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	DRBL_HANDSHAKE_ISR		= DRBL_HANDSHAKE,
88f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
89f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_PCIEA_TO_ARM_MSG0		= 0x20430,
90f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_PCIEA_TO_ARM_MSG1		= 0x20434,
91f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ARM_TO_PCIEA_MSG0		= 0x20438,
92f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CPU_ARM_TO_PCIEA_MSG1		= 0x2043C,
93f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
94f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/*******************************************/
95f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
96f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* ARM Communication List Registers Map    */
97f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
98f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/*******************************************/
99f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_LIST_BASEL		= 0x500,
100f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_LIST_BASEH		= 0x504,
101f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_AVAL_COUNT_BASEL	= 0x508,
102f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_AVAL_COUNT_BASEH	= 0x50C,
103f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_DESTI_LIST_BASEL	= 0x510,
104f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_DESTI_LIST_BASEH	= 0x514,
105f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_WRITE_POINTER		= 0x518,
106f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_INB_READ_POINTER		= 0x51C,
107f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
108f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_LIST_BASEL		= 0x530,
109f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_LIST_BASEH		= 0x534,
110f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_SOURCE_LIST_BASEL	= 0x538,
111f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_SOURCE_LIST_BASEH	= 0x53C,
112f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_COPY_POINTER		= 0x544,
113f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_OUTB_READ_POINTER		= 0x548,
114f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
115f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_ISR_CAUSE			= 0x560,
116f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLA_ISR_MASK			= 0x564,
117f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
118f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	INT_MAP_MU		= (INT_MAP_DL_CPU2PCIEA | INT_MAP_COMAINT),
119f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
120f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CL_POINTER_TOGGLE		= 1 << 12,
121f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
122f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLIC_IN_IRQ			= 1 << 0,
123f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLIC_OUT_IRQ			= 1 << 1,
124f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLIC_IN_ERR_IRQ			= 1 << 8,
125f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CLIC_OUT_ERR_IRQ		= 1 << 12,
126f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
127f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CL_SLOT_NUM_MASK		= 0xFFF,
128f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
129f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/*
130f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	* Command flag is the flag for the CDB command itself
131f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	*/
132f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* 1-non data; 0-data command */
133f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CMD_FLAG_NON_DATA		= 1 << 0,
134f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CMD_FLAG_DMA			= 1 << 1,
135f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CMD_FLAG_PIO			= 1 << 2,
136f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* 1-host read data */
137f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CMD_FLAG_DATA_IN		= 1 << 3,
138f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* 1-host write data */
139f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CMD_FLAG_DATA_OUT		= 1 << 4,
140f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
141f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	SCSI_CMD_MARVELL_SPECIFIC	= 0xE1,
142f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	CDB_CORE_SHUTDOWN		= 0xB,
143f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
144f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
145f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define APICDB0_EVENT			0xF4
146f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define APICDB1_EVENT_GETEVENT		0
147f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MAX_EVENTS_RETURNED		6
148f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
149f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_driver_event {
150f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	time_stamp;
151f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	sequence_no;
152f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	event_id;
153f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	severity;
154f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	param_count;
155f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16	device_id;
156f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	params[4];
157f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	sense_data_length;
158f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	Reserved1;
159f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	sense_data[30];
160f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
161f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
162f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_event_req {
163f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char	count;
164f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char	reserved[3];
165f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_driver_event  events[MAX_EVENTS_RETURNED];
166f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
167f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
168f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_events_wq {
169f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct work_struct work_q;
170f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_hba *mhba;
171f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int event;
172f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *param;
173f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
174f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
175f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_MAX_SG_ENTRY	32
176f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define SGD_EOT			(1L << 27)
177f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
178f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_sgl {
179f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	baseaddr_l;
180f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	baseaddr_h;
181f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	flags;
182f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	size;
183f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
184f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
185f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_res {
186f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head entry;
187f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t bus_addr;
188f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *virt_addr;
189f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int size;
190f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short type;	/* enum Resource_Type */
191f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
192f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
193f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* Resource type */
194f0c568a478f03536602b1730b9473ee86d61d836Jianyun Lienum resource_type {
195f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	RESOURCE_CACHED_MEMORY = 0,
196f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	RESOURCE_UNCACHED_MEMORY
197f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
198f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
199f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_sense_data {
200f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 error_eode:7;
201f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 valid:1;
202f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 segment_number;
203f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 sense_key:4;
204f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 reserved:1;
205f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 incorrect_length:1;
206f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 end_of_media:1;
207f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 file_mark:1;
208f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 information[4];
209f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 additional_sense_length;
210f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 command_specific_information[4];
211f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 additional_sense_code;
212f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 additional_sense_code_qualifier;
213f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 field_replaceable_unit_code;
214f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 sense_key_specific[3];
215f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
216f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
217f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* Request initiator must set the status to REQ_STATUS_PENDING. */
218f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define REQ_STATUS_PENDING		0x80
219f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
220f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_cmd {
221f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head queue_pointer;
222f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_msg_frame *frame;
223f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct scsi_cmnd *scmd;
224f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	atomic_t sync_cmd;
225f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *data_buf;
226f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short request_id;
227f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char cmd_status;
228f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
229f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
230f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/*
231f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the function type of the in bound frame
232f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */
233f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_FUN_SCSI_CMD			0x1
234f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
235f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_msg_frame {
236f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 device_id;
237f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 tag;
238f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cmd_flag;
239f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 req_function;
240f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cdb_length;
241f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 sg_counts;
242f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 data_transfer_length;
243f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 request_id;
244f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 reserved1;
245f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cdb[MAX_COMMAND_SIZE];
246f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 payload[1];
247f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
248f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
249f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/*
250f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the respond flag for data_payload of the out bound frame
251f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */
252f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_RSP_FLAG_NODATA		0x0
253f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define CL_RSP_FLAG_SENSEDATA		0x1
254f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
255f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_rsp_frame {
256f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 device_id;
257f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 tag;
258f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 req_status;
259f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 rsp_flag;	/* Indicates the type of Data_Payload.*/
260f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 request_id;
261f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 payload[1];
262f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
263f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
264f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_ob_data {
265f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head list;
266f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char data[0];
267f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
268f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
269f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct version_info {
270f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ver_major;
271f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ver_minor;
272f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ver_oem;
273f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ver_build;
274f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
275f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
276f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_MAX_DELAY			30
277f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_BUSY			(1U << 0)
278f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_ATTACH			(1U << 1)
279f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define MVUMI_FW_ALLOC			(1U << 2)
280f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
281f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/*
282f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * State is the state of the MU
283f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */
284f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_IDLE			0
285f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_STARTING		1
286f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_HANDSHAKING		2
287f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_STARTED		3
288f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define FW_STATE_ABORT			4
289f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
290f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_SIGNATURE		0x5A5A5A5AL
291f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_READYSTATE		0x55AA5AA5L
292f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HANDSHAKE_DONESTATE		0x55AAA55AL
293f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
294f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* HandShake Status definition */
295f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_OK			1
296f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_ERR			2
297f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_STATUS_INVALID		3
298f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
299f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* HandShake State/Cmd definition */
300f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_START			1
301f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_RESET			2
302f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_PAGE_ADDR			3
303f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_QUERY_PAGE			4
304f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_SEND_PAGE			5
305f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_END			6
306f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_S_ABORT			7
307f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_VERIFY_SIZE		128
308f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
309f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_GET_STATE(a)			(a & 0xFFFF)
310f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_GET_STATUS(a)		((a & 0xFFFF0000) >> 16)
311f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_SET_STATE(a, b)		(a |= (b & 0xFFFF))
312f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_SET_STATUS(a, b)		(a |= ((b & 0xFFFF) << 16))
313f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
314f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* handshake frame */
315f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_frame {
316f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 size;
317f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* host information */
318f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 host_type;
319f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 reserved_1[1];
320f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct version_info host_ver; /* bios or driver version */
321f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
322f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* controller information */
323f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 system_io_bus;
324f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 slot_number;
325f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 intr_level;
326f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 intr_vector;
327f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
328f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* communication list configuration */
329f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ib_baseaddr_l;
330f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ib_baseaddr_h;
331f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ob_baseaddr_l;
332f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 ob_baseaddr_h;
333f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
334f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 ib_entry_size;
335f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 ob_entry_size;
336f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 ob_depth;
337f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 ib_depth;
338f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
339f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	/* system time */
340f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u64 seconds_since1970;
341f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
342f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
343f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_header {
344f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	page_code;
345f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	checksum;
346f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16	frame_length;
347f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	frame_content[1];
348f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
349f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
350f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/*
351f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li * the page code type of the handshake header
352f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li */
353f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_FIRM_CAP	0x1
354f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_HOST_INFO	0x2
355f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_FIRM_CTL	0x3
356f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_CL_INFO		0x4
357f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HS_PAGE_TOTAL		0x5
358f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
359f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HSP_SIZE(i)	sizeof(struct mvumi_hs_page##i)
360f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
361f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#define HSP_MAX_SIZE ({					\
362f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	int size, m1, m2;				\
363f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	m1 = max(HSP_SIZE(1), HSP_SIZE(3));		\
364f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	m2 = max(HSP_SIZE(2), HSP_SIZE(4));		\
365f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	size = max(m1, m2);				\
366f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	size;						\
367f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li})
368f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
369f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for Firmware capability */
370f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page1 {
371f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 pagecode;
372f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 checksum;
373f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 frame_length;
374f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
375f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 number_of_ports;
376f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 max_devices_support;
377f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 max_io_support;
378f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 umi_ver;
379f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 max_transfer_size;
380f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct version_info fw_ver;
381f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cl_in_max_entry_size;
382f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cl_out_max_entry_size;
383f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 cl_inout_list_depth;
384f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 total_pages;
385f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 capability;
386f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 reserved1;
387f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
388f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
389f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for Host information */
390f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page2 {
391f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 pagecode;
392f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 checksum;
393f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16 frame_length;
394f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
395f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 host_type;
396f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8 reserved[3];
397f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct version_info host_ver;
398f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 system_io_bus;
399f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 slot_number;
400f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 intr_level;
401f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32 intr_vector;
402f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u64 seconds_since1970;
403f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
404f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
405f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li/* The format of the page code for firmware control  */
406f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page3 {
407f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	pagecode;
408f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	checksum;
409f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16	frame_length;
410f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16	control;
411f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	reserved[2];
412f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	host_bufferaddr_l;
413f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	host_bufferaddr_h;
414f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	host_eventaddr_l;
415f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	host_eventaddr_h;
416f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
417f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
418f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hs_page4 {
419f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	pagecode;
420f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	checksum;
421f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u16	frame_length;
422f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	ib_baseaddr_l;
423f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	ib_baseaddr_h;
424f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	ob_baseaddr_l;
425f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u32	ob_baseaddr_h;
426f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	ib_entry_size;
427f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	ob_entry_size;
428f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	ob_depth;
429f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	u8	ib_depth;
430f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
431f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
432f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_tag {
433f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short *stack;
434f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short top;
435f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short size;
436f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
437f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
438f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_hba {
439f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *base_addr[MAX_BASE_ADDRESS];
440f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *mmio;
441f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head cmd_pool;
442f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct Scsi_Host *shost;
443f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	wait_queue_head_t int_cmd_wait_q;
444f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct pci_dev *pdev;
445f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int unique_id;
446f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	atomic_t fw_outstanding;
447f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_instance_template *instancet;
448f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
449f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *ib_list;
450f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t ib_list_phys;
451f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
452f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *ob_list;
453f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t ob_list_phys;
454f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
455f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *ib_shadow;
456f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t ib_shadow_phys;
457f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
458f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *ob_shadow;
459f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t ob_shadow_phys;
460f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
461f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void *handshake_page;
462f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	dma_addr_t handshake_page_phys;
463f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
464f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int global_isr;
465f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int isr_status;
466f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
467f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short max_sge;
468f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short max_target_id;
469f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char *target_map;
470f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int max_io;
471f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int list_num_io;
472f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ib_max_size;
473f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ob_max_size;
474f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ib_max_size_setting;
475f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ob_max_size_setting;
476f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int max_transfer_size;
477f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char hba_total_pages;
478f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char fw_flag;
479f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned char request_id_enabled;
480f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short hba_capability;
481f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned short io_seq;
482f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
483f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ib_cur_slot;
484f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int ob_cur_slot;
485f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int fw_state;
486f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
487f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head ob_data_list;
488f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head free_ob_list;
489f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head res_list;
490f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct list_head waiting_req_list;
491f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
492f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_tag tag_pool;
493f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	struct mvumi_cmd **tag_cmd;
494f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
495f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
496f0c568a478f03536602b1730b9473ee86d61d836Jianyun Listruct mvumi_instance_template {
497f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void (*fire_cmd)(struct mvumi_hba *, struct mvumi_cmd *);
498f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void (*enable_intr)(void *) ;
499f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	void (*disable_intr)(void *);
500f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	int (*clear_intr)(void *);
501f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li	unsigned int (*read_fw_status_reg)(void *);
502f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li};
503f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li
504f0c568a478f03536602b1730b9473ee86d61d836Jianyun Liextern struct timezone sys_tz;
505f0c568a478f03536602b1730b9473ee86d61d836Jianyun Li#endif
506