hptiop.h revision db9b6e89ea8dc3f32dea1125c672de1a9710be7c
1ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team/*
2ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * HighPoint RR3xxx controller driver for Linux
3db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team * Copyright (C) 2006-2007 HighPoint Technologies, Inc. All Rights Reserved.
4ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team *
5ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * This program is free software; you can redistribute it and/or modify
6ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * it under the terms of the GNU General Public License as published by
7ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * the Free Software Foundation; version 2 of the License.
8ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team *
9ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * This program is distributed in the hope that it will be useful,
10ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * but WITHOUT ANY WARRANTY; without even the implied warranty of
11ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * GNU General Public License for more details.
13ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team *
14ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * Please report bugs/comments/suggestions to linux@highpoint-tech.com
15ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team *
16ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team * For more information, visit http://www.highpoint-tech.com
17ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team */
18ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#ifndef _HPTIOP_H_
19ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define _HPTIOP_H_
20ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
21ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iopmu
22ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
23ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 resrved0[4];
24ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_msgaddr0;
25ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_msgaddr1;
26ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_msgaddr0;
27ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_msgaddr1;
28ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_doorbell;
29ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_intstatus;
30ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_intmask;
31ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_doorbell;
32ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_intstatus;
33ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_intmask;
34ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 reserved1[2];
35ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbound_queue;
36ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbound_queue;
37ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
38ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
39ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_EMPTY            0xffffffff
40ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_MASK_HOST_BITS   0xf0000000
41ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_QUEUE_ADDR_HOST_BIT    0x80000000
42db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team#define IOPMU_QUEUE_REQUEST_SIZE_BIT    0x40000000
43db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team#define IOPMU_QUEUE_REQUEST_RESULT_BIT   0x40000000
44ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
45ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_MSG0      1
46ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_MSG1      2
47ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_DOORBELL  4
48ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_POSTQUEUE 8
49ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_OUTBOUND_INT_PCI       0x10
50ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
51ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_MSG0       1
52ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_MSG1       2
53ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_DOORBELL   4
54ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_ERROR      8
55ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOPMU_INBOUND_INT_POSTQUEUE  0x10
56ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
57ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iopmu_message {
58ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	/* host-to-iop messages */
59ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_NOP = 0,
60ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_RESET,
61ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_FLUSH,
62ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_SHUTDOWN,
63ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_STOP_BACKGROUND_TASK,
64ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_START_BACKGROUND_TASK,
65ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_INBOUND_MSG0_MAX = 0xff,
66ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	/* iop-to-host messages */
67ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_0 = 0x100,
68ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_REGISTER_DEVICE_MAX = 0x1ff,
69ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_0 = 0x200,
70ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_UNREGISTER_DEVICE_MAX = 0x2ff,
71ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_0 = 0x300,
72ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOPMU_OUTBOUND_MSG0_REVALIDATE_DEVICE_MAX = 0x3ff,
73ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
74ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
75ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_header
76ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
77ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 size;
78ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 type;
79ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 flags;
80ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 result;
81ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 context; /* host context */
82ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 context_hi32;
83ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
84ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
85ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_SYNC_REQUEST 1
86ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_BIST_REQUEST 2
87ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_REMAPPED     4
88ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_REQUEST_FLAG_OUTPUT_CONTEXT 8
89ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
90ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iop_request_type {
91ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_GET_CONFIG = 0,
92ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_SET_CONFIG,
93ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_BLOCK_COMMAND,
94ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_SCSI_COMMAND,
95ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_IOCTL_COMMAND,
96ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_REQUEST_TYPE_MAX
97ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
98ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
99ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamenum hpt_iop_result_type {
100ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_PENDING = 0,
101ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_SUCCESS,
102ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_FAIL,
103ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_BUSY,
104ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_RESET,
105ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_INVALID_REQUEST,
106ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_BAD_TARGET,
107ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	IOP_RESULT_MODE_SENSE_CHECK_CONDITION,
108ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
109ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
110ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_get_config
111ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
112ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iop_request_header header;
113ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 interface_version;
114ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 firmware_version;
115ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 max_requests;
116ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 request_size;
117ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 max_sg_count;
118ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 data_transfer_length;
119ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 alignment_mask;
120ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 max_devices;
121ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 sdram_size;
122ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
123ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
124ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_set_config
125ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
126ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iop_request_header header;
127ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 iop_id;
128db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	__le16 vbus_id;
129db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	__le16 max_host_request_size;
130ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 reserve[6];
131ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
132ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
133ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iopsg
134ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
135ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 size;
136ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 eot; /* non-zero: end of table */
137ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le64 pci_address;
138ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
139ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
140ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_block_command
141ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
142ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iop_request_header header;
143ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     channel;
144ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     target;
145ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     lun;
146ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     pad1;
147ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le16 command; /* IOP_BLOCK_COMMAND_{READ,WRITE} */
148ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le16 sectors;
149ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le64 lba;
150ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iopsg sg_list[1];
151ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
152ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
153ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_READ     1
154ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_WRITE    2
155ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_VERIFY   3
156ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_FLUSH    4
157ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define IOP_BLOCK_COMMAND_SHUTDOWN 5
158ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
159ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_scsi_command
160ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
161ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iop_request_header header;
162ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     channel;
163ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     target;
164ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     lun;
165ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     pad1;
166ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     cdb[16];
167ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 dataxfer_length;
168ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iopsg sg_list[1];
169ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
170ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
171ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_iop_request_ioctl_command
172ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
173ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iop_request_header header;
174ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 ioctl_code;
175ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 inbuf_size;
176ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 outbuf_size;
177ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	__le32 bytes_returned;
178ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u8     buf[1];
179ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	/* out data should be put at buf[(inbuf_size+3)&~3] */
180ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
181ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
182ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPTIOP_MAX_REQUESTS  256u
183ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
184ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hptiop_request {
185ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hptiop_request * next;
186ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	void *                  req_virt;
187ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32                     req_shifted_phy;
188ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct scsi_cmnd *      scp;
189ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	int                     index;
190ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
191ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
192ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_scsi_pointer {
193ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	int mapped;
194ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	int sgcnt;
195ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	dma_addr_t dma_handle;
196ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
197ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
198ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_SCP(scp) ((struct hpt_scsi_pointer *)&(scp)->SCp)
199ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
200ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hptiop_hba {
201ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hpt_iopmu __iomem * iop;
202ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct Scsi_Host * host;
203ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct pci_dev * pcidev;
204ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
205ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	/* IOP config info */
206db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	u32     interface_version;
207ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     firmware_version;
208ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     sdram_size;
209ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     max_devices;
210ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     max_requests;
211ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     max_request_size;
212ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     max_sg_descriptors;
213ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
214ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32     req_size; /* host-allocated request buffer size */
215db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team
216db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	int     iopintf_v2: 1;
217db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	int     initialized: 1;
218db9b6e89ea8dc3f32dea1125c672de1a9710be7cHighPoint Linux Team	int     msg_done: 1;
219ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
220ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hptiop_request * req_list;
221ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hptiop_request reqs[HPTIOP_MAX_REQUESTS];
222ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
223ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	/* used to free allocated dma area */
224ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	void *      dma_coherent;
225ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	dma_addr_t  dma_coherent_handle;
226ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
227ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	atomic_t    reset_count;
228ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	atomic_t    resetting;
229ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
230ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	wait_queue_head_t reset_wq;
231ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	wait_queue_head_t ioctl_wq;
232ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
233ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
234ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Teamstruct hpt_ioctl_k
235ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team{
236ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	struct hptiop_hba * hba;
237ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32    ioctl_code;
238ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32    inbuf_size;
239ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32    outbuf_size;
240ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	void * inbuf;
241ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	void * outbuf;
242ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	u32  * bytes_returned;
243ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	void (*done)(struct hpt_ioctl_k *);
244ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team	int    result; /* HPT_IOCTL_RESULT_ */
245ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team};
246ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
247ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_IOCTL_RESULT_OK         0
248ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define HPT_IOCTL_RESULT_FAILED     (-1)
249ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
250ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#if 0
251ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define dprintk(fmt, args...) do { printk(fmt, ##args); } while(0)
252ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#else
253ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#define dprintk(fmt, args...)
254ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#endif
255ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team
256ede1e6f8b43246a9796583346839669b1f4b77d4HighPoint Linux Team#endif
257