1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright (C) 2021 Broadcom. All Rights Reserved. The term 4 * “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. 5 */ 6 7 #ifndef __EFC_ELS_H__ 8 #define __EFC_ELS_H__ 9 10 #define EFC_STATUS_INVALID INT_MAX 11 #define EFC_ELS_IO_POOL_SZ 1024 12 13 struct efc_els_io_req { 14 struct list_head list_entry; 15 struct kref ref; 16 void (*release)(struct kref *arg); 17 struct efc_node *node; 18 void *cb; 19 u32 els_retries_remaining; 20 bool els_req_free; 21 struct timer_list delay_timer; 22 23 const char *display_name; 24 25 struct efc_disc_io io; 26 }; 27 28 typedef int(*efc_hw_srrs_cb_t)(void *arg, u32 length, int status, 29 u32 ext_status); 30 31 void _efc_els_io_free(struct kref *arg); 32 struct efc_els_io_req * 33 efc_els_io_alloc(struct efc_node *node, u32 reqlen); 34 struct efc_els_io_req * 35 efc_els_io_alloc_size(struct efc_node *node, u32 reqlen, u32 rsplen); 36 void efc_els_io_free(struct efc_els_io_req *els); 37 38 /* ELS command send */ 39 typedef void (*els_cb_t)(struct efc_node *node, 40 struct efc_node_cb *cbdata, void *arg); 41 int 42 efc_send_plogi(struct efc_node *node); 43 int 44 efc_send_flogi(struct efc_node *node); 45 int 46 efc_send_fdisc(struct efc_node *node); 47 int 48 efc_send_prli(struct efc_node *node); 49 int 50 efc_send_prlo(struct efc_node *node); 51 int 52 efc_send_logo(struct efc_node *node); 53 int 54 efc_send_adisc(struct efc_node *node); 55 int 56 efc_send_pdisc(struct efc_node *node); 57 int 58 efc_send_scr(struct efc_node *node); 59 int 60 efc_ns_send_rftid(struct efc_node *node); 61 int 62 efc_ns_send_rffid(struct efc_node *node); 63 int 64 efc_ns_send_gidpt(struct efc_node *node); 65 void 66 efc_els_io_cleanup(struct efc_els_io_req *els, int evt, void *arg); 67 68 /* ELS acc send */ 69 int 70 efc_send_ls_acc(struct efc_node *node, u32 ox_id); 71 int 72 efc_send_ls_rjt(struct efc_node *node, u32 ox_id, u32 reason_cod, 73 u32 reason_code_expl, u32 vendor_unique); 74 int 75 efc_send_flogi_p2p_acc(struct efc_node *node, u32 ox_id, u32 s_id); 76 int 77 efc_send_flogi_acc(struct efc_node *node, u32 ox_id, u32 is_fport); 78 int 79 efc_send_plogi_acc(struct efc_node *node, u32 ox_id); 80 int 81 efc_send_prli_acc(struct efc_node *node, u32 ox_id); 82 int 83 efc_send_logo_acc(struct efc_node *node, u32 ox_id); 84 int 85 efc_send_prlo_acc(struct efc_node *node, u32 ox_id); 86 int 87 efc_send_adisc_acc(struct efc_node *node, u32 ox_id); 88 89 int 90 efc_bls_send_acc_hdr(struct efc *efc, struct efc_node *node, 91 struct fc_frame_header *hdr); 92 int 93 efc_bls_send_rjt_hdr(struct efc_els_io_req *io, struct fc_frame_header *hdr); 94 95 int 96 efc_els_io_list_empty(struct efc_node *node, struct list_head *list); 97 98 /* CT */ 99 int 100 efc_send_ct_rsp(struct efc *efc, struct efc_node *node, u16 ox_id, 101 struct fc_ct_hdr *ct_hdr, u32 cmd_rsp_code, u32 reason_code, 102 u32 reason_code_explanation); 103 104 int 105 efc_send_bls_acc(struct efc_node *node, struct fc_frame_header *hdr); 106 107 #endif /* __EFC_ELS_H__ */ 108