File Index
Files and directories
Sign in
FILE

bfa_fcbuild.h

File preview with syntax highlighting.

linux-6.19.14/drivers/scsi/bfa/bfa_fcbuild.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
  4 * Copyright (c) 2014- QLogic Corporation.
  5 * All rights reserved
  6 * www.qlogic.com
  7 *
  8 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
  9 */
 10/*
 11 * fcbuild.h - FC link service frame building and parsing routines
 12 */
 13
 14#ifndef __FCBUILD_H__
 15#define __FCBUILD_H__
 16
 17#include "bfad_drv.h"
 18#include "bfa_fc.h"
 19#include "bfa_defs_fcs.h"
 20
 21/*
 22 * Utility Macros/functions
 23 */
 24
 25#define wwn_is_equal(_wwn1, _wwn2)		\
 26	(memcmp(&(_wwn1), &(_wwn2), sizeof(wwn_t)) == 0)
 27
 28#define fc_roundup(_l, _s) (((_l) + ((_s) - 1)) & ~((_s) - 1))
 29
 30/*
 31 * Given the fc response length, this routine will return
 32 * the length of the actual payload bytes following the CT header.
 33 *
 34 * Assumes the input response length does not include the crc, eof, etc.
 35 */
 36static inline   u32
 37fc_get_ctresp_pyld_len(u32 resp_len)
 38{
 39	return resp_len - sizeof(struct ct_hdr_s);
 40}
 41
 42/*
 43 * Convert bfa speed to rpsc speed value.
 44 */
 45static inline  enum bfa_port_speed
 46fc_rpsc_operspeed_to_bfa_speed(enum fc_rpsc_op_speed speed)
 47{
 48	switch (speed) {
 49
 50	case RPSC_OP_SPEED_1G:
 51		return BFA_PORT_SPEED_1GBPS;
 52
 53	case RPSC_OP_SPEED_2G:
 54		return BFA_PORT_SPEED_2GBPS;
 55
 56	case RPSC_OP_SPEED_4G:
 57		return BFA_PORT_SPEED_4GBPS;
 58
 59	case RPSC_OP_SPEED_8G:
 60		return BFA_PORT_SPEED_8GBPS;
 61
 62	case RPSC_OP_SPEED_16G:
 63		return BFA_PORT_SPEED_16GBPS;
 64
 65	case RPSC_OP_SPEED_10G:
 66		return BFA_PORT_SPEED_10GBPS;
 67
 68	default:
 69		return BFA_PORT_SPEED_UNKNOWN;
 70	}
 71}
 72
 73/*
 74 * Convert RPSC speed to bfa speed value.
 75 */
 76static inline   enum fc_rpsc_op_speed
 77fc_bfa_speed_to_rpsc_operspeed(enum bfa_port_speed op_speed)
 78{
 79	switch (op_speed) {
 80
 81	case BFA_PORT_SPEED_1GBPS:
 82		return RPSC_OP_SPEED_1G;
 83
 84	case BFA_PORT_SPEED_2GBPS:
 85		return RPSC_OP_SPEED_2G;
 86
 87	case BFA_PORT_SPEED_4GBPS:
 88		return RPSC_OP_SPEED_4G;
 89
 90	case BFA_PORT_SPEED_8GBPS:
 91		return RPSC_OP_SPEED_8G;
 92
 93	case BFA_PORT_SPEED_16GBPS:
 94		return RPSC_OP_SPEED_16G;
 95
 96	case BFA_PORT_SPEED_10GBPS:
 97		return RPSC_OP_SPEED_10G;
 98
 99	default:
100		return RPSC_OP_SPEED_NOT_EST;
101	}
102}
103
104enum fc_parse_status {
105	FC_PARSE_OK = 0,
106	FC_PARSE_FAILURE = 1,
107	FC_PARSE_BUSY = 2,
108	FC_PARSE_LEN_INVAL,
109	FC_PARSE_ACC_INVAL,
110	FC_PARSE_PWWN_NOT_EQUAL,
111	FC_PARSE_NWWN_NOT_EQUAL,
112	FC_PARSE_RXSZ_INVAL,
113	FC_PARSE_NOT_FCP,
114	FC_PARSE_OPAFLAG_INVAL,
115	FC_PARSE_RPAFLAG_INVAL,
116	FC_PARSE_OPA_INVAL,
117	FC_PARSE_RPA_INVAL,
118
119};
120
121struct fc_templates_s {
122	struct fchs_s fc_els_req;
123	struct fchs_s fc_bls_req;
124	struct fc_logi_s plogi;
125	struct fc_rrq_s rrq;
126};
127
128void            fcbuild_init(void);
129
130u16        fc_flogi_acc_build(struct fchs_s *fchs, struct fc_logi_s *flogi,
131				   u32 s_id, __be16 ox_id,
132				   wwn_t port_name, wwn_t node_name,
133				   u16 pdu_size,
134				   u16 local_bb_credits, u8 bb_scn);
135
136u16        fc_plogi_build(struct fchs_s *fchs, void *pld, u32 d_id,
137			       u32 s_id, u16 ox_id, wwn_t port_name,
138			       wwn_t node_name, u16 pdu_size, u16 bb_cr);
139
140enum fc_parse_status fc_plogi_parse(struct fchs_s *fchs);
141
142u16        fc_rspnid_build(struct fchs_s *fchs, void *pld, u32 s_id,
143				u16 ox_id, u8 *name);
144u16	fc_rsnn_nn_build(struct fchs_s *fchs, void *pld, u32 s_id,
145				wwn_t node_name, u8 *name);
146
147u16        fc_rftid_build(struct fchs_s *fchs, void *pld, u32 s_id,
148			       u16 ox_id, enum bfa_lport_role role);
149
150u16	fc_rffid_build(struct fchs_s *fchs, void *pyld, u32 s_id,
151			u16 ox_id, u8 fc4_type, u8 fc4_ftrs);
152
153u16        fc_gidpn_build(struct fchs_s *fchs, void *pyld, u32 s_id,
154			       u16 ox_id, wwn_t port_name);
155
156u16        fc_gpnid_build(struct fchs_s *fchs, void *pld, u32 s_id,
157			       u16 ox_id, u32 port_id);
158
159u16	fc_gs_rjt_build(struct fchs_s *fchs, struct ct_hdr_s *cthdr,
160			u32 d_id, u32 s_id, u16 ox_id,
161			u8 reason_code, u8 reason_code_expl);
162
163u16        fc_scr_build(struct fchs_s *fchs, struct fc_scr_s *scr,
164			u8 set_br_reg, u32 s_id, u16 ox_id);
165
166u16        fc_plogi_acc_build(struct fchs_s *fchs, void *pld, u32 d_id,
167				   u32 s_id, u16 ox_id,
168				   wwn_t port_name, wwn_t node_name,
169				   u16 pdu_size, u16 bb_cr);
170
171u16        fc_adisc_build(struct fchs_s *fchs, struct fc_adisc_s *adisc,
172			u32 d_id, u32 s_id, __be16 ox_id, wwn_t port_name,
173			       wwn_t node_name);
174
175enum fc_parse_status fc_adisc_rsp_parse(struct fc_adisc_s *adisc, int len,
176				 wwn_t port_name, wwn_t node_name);
177
178u16        fc_adisc_acc_build(struct fchs_s *fchs, struct fc_adisc_s *adisc,
179				   u32 d_id, u32 s_id, __be16 ox_id,
180				   wwn_t port_name, wwn_t node_name);
181u16        fc_ls_rjt_build(struct fchs_s *fchs, struct fc_ls_rjt_s *ls_rjt,
182				u32 d_id, u32 s_id, __be16 ox_id,
183				u8 reason_code, u8 reason_code_expl);
184u16        fc_ls_acc_build(struct fchs_s *fchs, struct fc_els_cmd_s *els_cmd,
185				u32 d_id, u32 s_id, __be16 ox_id);
186u16        fc_prli_build(struct fchs_s *fchs, void *pld, u32 d_id,
187			      u32 s_id, u16 ox_id);
188
189enum fc_parse_status fc_prli_rsp_parse(struct fc_prli_s *prli, int len);
190
191u16        fc_prli_acc_build(struct fchs_s *fchs, void *pld, u32 d_id,
192				  u32 s_id, __be16 ox_id,
193				  enum bfa_lport_role role);
194
195u16        fc_rnid_acc_build(struct fchs_s *fchs,
196			struct fc_rnid_acc_s *rnid_acc, u32 d_id, u32 s_id,
197			__be16 ox_id, u32 data_format,
198			struct fc_rnid_common_id_data_s *common_id_data,
199			struct fc_rnid_general_topology_data_s *gen_topo_data);
200
201u16	fc_rpsc2_build(struct fchs_s *fchs, struct fc_rpsc2_cmd_s *rps2c,
202			u32 d_id, u32 s_id, u32 *pid_list, u16 npids);
203u16        fc_rpsc_acc_build(struct fchs_s *fchs,
204			struct fc_rpsc_acc_s *rpsc_acc, u32 d_id, u32 s_id,
205			__be16 ox_id, struct fc_rpsc_speed_info_s *oper_speed);
206u16        fc_gid_ft_build(struct fchs_s *fchs, void *pld, u32 s_id,
207				u8 fc4_type);
208
209u16        fc_rnnid_build(struct fchs_s *fchs, void *pyld, u32 s_id,
210			       u32 port_id, wwn_t node_name);
211
212u16        fc_logo_build(struct fchs_s *fchs, struct fc_logo_s *logo, u32 d_id,
213			      u32 s_id, u16 ox_id, wwn_t port_name);
214
215u16        fc_logo_acc_build(struct fchs_s *fchs, void *pld, u32 d_id,
216				  u32 s_id, __be16 ox_id);
217
218u16        fc_fdmi_reqhdr_build(struct fchs_s *fchs, void *pyld, u32 s_id,
219				     u16 cmd_code);
220u16	fc_gmal_req_build(struct fchs_s *fchs, void *pyld, u32 s_id, wwn_t wwn);
221u16	fc_gfn_req_build(struct fchs_s *fchs, void *pyld, u32 s_id, wwn_t wwn);
222
223void		fc_get_fc4type_bitmask(u8 fc4_type, u8 *bit_mask);
224
225void		fc_els_req_build(struct fchs_s *fchs, u32 d_id, u32 s_id,
226					 __be16 ox_id);
227
228u16 fc_ba_acc_build(struct fchs_s *fchs, struct fc_ba_acc_s *ba_acc, u32 d_id,
229		u32 s_id, __be16 ox_id, u16 rx_id);
230
231int fc_logout_params_pages(struct fchs_s *fc_frame, u8 els_code);
232
233u16 fc_prlo_acc_build(struct fchs_s *fchs, struct fc_prlo_acc_s *prlo_acc,
234		u32 d_id, u32 s_id, __be16 ox_id, int num_pages);
235
236u16 fc_tprlo_build(struct fchs_s *fchs, u32 d_id, u32 s_id,
237		u16 ox_id, int num_pages, enum fc_tprlo_type tprlo_type,
238		u32 tpr_id);
239
240#endif
~/ Read-only file preview.