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