• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/scsi/be2iscsi/
1/**
2 * Copyright (C) 2005 - 2010 ServerEngines
3 * All rights reserved.
4 *
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License version 2
7 * as published by the Free Software Foundation.  The full GNU General
8 * Public License is included in this distribution in the file called COPYING.
9 *
10 * Written by: Jayamohan Kallickal (jayamohank@serverengines.com)
11 *
12 * Contact Information:
13 * linux-drivers@serverengines.com
14 *
15 * ServerEngines
16 * 209 N. Fair Oaks Ave
17 * Sunnyvale, CA 94085
18 *
19 */
20
21#ifndef _BEISCSI_MGMT_
22#define _BEISCSI_MGMT_
23
24#include <linux/types.h>
25#include <linux/list.h>
26#include "be_iscsi.h"
27#include "be_main.h"
28
29/**
30 * Pseudo amap definition in which each bit of the actual structure is defined
31 * as a byte: used to calculate offset/shift/mask of each field
32 */
33struct amap_mcc_sge {
34	u8 pa_lo[32];		/* dword 0 */
35	u8 pa_hi[32];		/* dword 1 */
36	u8 length[32];		/* DWORD 2 */
37} __packed;
38
39/**
40 * Pseudo amap definition in which each bit of the actual structure is defined
41 * as a byte: used to calculate offset/shift/mask of each field
42 */
43struct amap_mcc_wrb_payload {
44	union {
45		struct amap_mcc_sge sgl[19];
46		u8 embedded[59 * 32];	/* DWORDS 57 to 115 */
47	} u;
48} __packed;
49
50/**
51 * Pseudo amap definition in which each bit of the actual structure is defined
52 * as a byte: used to calculate offset/shift/mask of each field
53 */
54struct amap_mcc_wrb {
55	u8 embedded;		/* DWORD 0 */
56	u8 rsvd0[2];		/* DWORD 0 */
57	u8 sge_count[5];	/* DWORD 0 */
58	u8 rsvd1[16];		/* DWORD 0 */
59	u8 special[8];		/* DWORD 0 */
60	u8 payload_length[32];
61	u8 tag[64];		/* DWORD 2 */
62	u8 rsvd2[32];		/* DWORD 4 */
63	struct amap_mcc_wrb_payload payload;
64};
65
66struct mcc_sge {
67	u32 pa_lo;		/* dword 0 */
68	u32 pa_hi;		/* dword 1 */
69	u32 length;		/* DWORD 2 */
70} __packed;
71
72struct mcc_wrb_payload {
73	union {
74		struct mcc_sge sgl[19];
75		u32 embedded[59];	/* DWORDS 57 to 115 */
76	} u;
77} __packed;
78
79#define MCC_WRB_EMBEDDED_MASK                0x00000001
80
81struct mcc_wrb {
82	u32 dw[0];		/* DWORD 0 */
83	u32 payload_length;
84	u32 tag[2];		/* DWORD 2 */
85	u32 rsvd2[1];		/* DWORD 4 */
86	struct mcc_wrb_payload payload;
87};
88
89int mgmt_epfw_cleanup(struct beiscsi_hba *phba, unsigned short chute);
90int mgmt_open_connection(struct beiscsi_hba *phba,
91			 struct sockaddr *dst_addr,
92			 struct beiscsi_endpoint *beiscsi_ep,
93			 struct be_dma_mem *nonemb_cmd);
94
95unsigned int mgmt_upload_connection(struct beiscsi_hba *phba,
96				     unsigned short cid,
97				     unsigned int upload_flag);
98unsigned int mgmt_invalidate_icds(struct beiscsi_hba *phba,
99				struct invalidate_command_table *inv_tbl,
100				unsigned int num_invalidate, unsigned int cid,
101				struct be_dma_mem *nonemb_cmd);
102
103struct iscsi_invalidate_connection_params_in {
104	struct be_cmd_req_hdr hdr;
105	unsigned int session_handle;
106	unsigned short cid;
107	unsigned short unused;
108	unsigned short cleanup_type;
109	unsigned short save_cfg;
110} __packed;
111
112struct iscsi_invalidate_connection_params_out {
113	unsigned int session_handle;
114	unsigned short cid;
115	unsigned short unused;
116} __packed;
117
118union iscsi_invalidate_connection_params {
119	struct iscsi_invalidate_connection_params_in request;
120	struct iscsi_invalidate_connection_params_out response;
121} __packed;
122
123struct invalidate_commands_params_in {
124	struct be_cmd_req_hdr hdr;
125	unsigned int ref_handle;
126	unsigned int icd_count;
127	struct invalidate_command_table table[128];
128	unsigned short cleanup_type;
129	unsigned short unused;
130} __packed;
131
132struct invalidate_commands_params_out {
133	unsigned int ref_handle;
134	unsigned int icd_count;
135	unsigned int icd_status[128];
136} __packed;
137
138union invalidate_commands_params {
139	struct invalidate_commands_params_in request;
140	struct invalidate_commands_params_out response;
141} __packed;
142
143struct mgmt_hba_attributes {
144	u8 flashrom_version_string[32];
145	u8 manufacturer_name[32];
146	u32 supported_modes;
147	u8 seeprom_version_lo;
148	u8 seeprom_version_hi;
149	u8 rsvd0[2];
150	u32 fw_cmd_data_struct_version;
151	u32 ep_fw_data_struct_version;
152	u32 future_reserved[12];
153	u32 default_extended_timeout;
154	u8 controller_model_number[32];
155	u8 controller_description[64];
156	u8 controller_serial_number[32];
157	u8 ip_version_string[32];
158	u8 firmware_version_string[32];
159	u8 bios_version_string[32];
160	u8 redboot_version_string[32];
161	u8 driver_version_string[32];
162	u8 fw_on_flash_version_string[32];
163	u32 functionalities_supported;
164	u16 max_cdblength;
165	u8 asic_revision;
166	u8 generational_guid[16];
167	u8 hba_port_count;
168	u16 default_link_down_timeout;
169	u8 iscsi_ver_min_max;
170	u8 multifunction_device;
171	u8 cache_valid;
172	u8 hba_status;
173	u8 max_domains_supported;
174	u8 phy_port;
175	u32 firmware_post_status;
176	u32 hba_mtu[8];
177	u8 iscsi_features;
178	u8 future_u8[3];
179	u32 future_u32[3];
180} __packed;
181
182struct mgmt_controller_attributes {
183	struct mgmt_hba_attributes hba_attribs;
184	u16 pci_vendor_id;
185	u16 pci_device_id;
186	u16 pci_sub_vendor_id;
187	u16 pci_sub_system_id;
188	u8 pci_bus_number;
189	u8 pci_device_number;
190	u8 pci_function_number;
191	u8 interface_type;
192	u64 unique_identifier;
193	u8 netfilters;
194	u8 rsvd0[3];
195	u8 future_u32[4];
196} __packed;
197
198struct be_mgmt_controller_attributes {
199	struct be_cmd_req_hdr hdr;
200	struct mgmt_controller_attributes params;
201} __packed;
202
203struct be_mgmt_controller_attributes_resp {
204	struct be_cmd_resp_hdr hdr;
205	struct mgmt_controller_attributes params;
206} __packed;
207
208/* configuration management */
209
210#define GET_MGMT_CONTROLLER_WS(phba)    (phba->pmgmt_ws)
211
212/* MGMT CMD flags */
213
214#define MGMT_CMDH_FREE                (1<<0)
215
216/*  --- MGMT_ERROR_CODES --- */
217/*  Error Codes returned in the status field of the CMD response header */
218#define MGMT_STATUS_SUCCESS 0	/* The CMD completed without errors */
219#define MGMT_STATUS_FAILED 1	/* Error status in the Status field of */
220				/* the CMD_RESPONSE_HEADER  */
221
222#define ISCSI_GET_PDU_TEMPLATE_ADDRESS(pc, pa) {\
223    pa->lo = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
224					bus_address.u.a32.address_lo;  \
225    pa->hi = phba->init_mem[ISCSI_MEM_GLOBAL_HEADER].mem_array[0].\
226					bus_address.u.a32.address_hi;  \
227}
228
229struct beiscsi_endpoint {
230	struct beiscsi_hba *phba;
231	struct beiscsi_sess *sess;
232	struct beiscsi_conn *conn;
233	struct iscsi_endpoint *openiscsi_ep;
234	unsigned short ip_type;
235	char dst6_addr[ISCSI_ADDRESS_BUF_LEN];
236	unsigned long dst_addr;
237	unsigned short ep_cid;
238	unsigned int fw_handle;
239	u16 dst_tcpport;
240	u16 cid_vld;
241};
242
243int mgmt_get_fw_config(struct be_ctrl_info *ctrl,
244				 struct beiscsi_hba *phba);
245
246unsigned int mgmt_invalidate_connection(struct beiscsi_hba *phba,
247					 struct beiscsi_endpoint *beiscsi_ep,
248					 unsigned short cid,
249					 unsigned short issue_reset,
250					 unsigned short savecfg_flag);
251
252#endif
253