efc_els.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. #ifndef __EFC_ELS_H__
  7. #define __EFC_ELS_H__
  8. #define EFC_STATUS_INVALID INT_MAX
  9. #define EFC_ELS_IO_POOL_SZ 1024
  10. struct efc_els_io_req {
  11. struct list_head list_entry;
  12. struct kref ref;
  13. void (*release)(struct kref *arg);
  14. struct efc_node *node;
  15. void *cb;
  16. u32 els_retries_remaining;
  17. bool els_req_free;
  18. struct timer_list delay_timer;
  19. const char *display_name;
  20. struct efc_disc_io io;
  21. };
  22. typedef int(*efc_hw_srrs_cb_t)(void *arg, u32 length, int status,
  23. u32 ext_status);
  24. void _efc_els_io_free(struct kref *arg);
  25. struct efc_els_io_req *
  26. efc_els_io_alloc(struct efc_node *node, u32 reqlen);
  27. struct efc_els_io_req *
  28. efc_els_io_alloc_size(struct efc_node *node, u32 reqlen, u32 rsplen);
  29. void efc_els_io_free(struct efc_els_io_req *els);
  30. /* ELS command send */
  31. typedef void (*els_cb_t)(struct efc_node *node,
  32. struct efc_node_cb *cbdata, void *arg);
  33. int
  34. efc_send_plogi(struct efc_node *node);
  35. int
  36. efc_send_flogi(struct efc_node *node);
  37. int
  38. efc_send_fdisc(struct efc_node *node);
  39. int
  40. efc_send_prli(struct efc_node *node);
  41. int
  42. efc_send_prlo(struct efc_node *node);
  43. int
  44. efc_send_logo(struct efc_node *node);
  45. int
  46. efc_send_adisc(struct efc_node *node);
  47. int
  48. efc_send_pdisc(struct efc_node *node);
  49. int
  50. efc_send_scr(struct efc_node *node);
  51. int
  52. efc_ns_send_rftid(struct efc_node *node);
  53. int
  54. efc_ns_send_rffid(struct efc_node *node);
  55. int
  56. efc_ns_send_gidpt(struct efc_node *node);
  57. void
  58. efc_els_io_cleanup(struct efc_els_io_req *els, int evt, void *arg);
  59. /* ELS acc send */
  60. int
  61. efc_send_ls_acc(struct efc_node *node, u32 ox_id);
  62. int
  63. efc_send_ls_rjt(struct efc_node *node, u32 ox_id, u32 reason_cod,
  64. u32 reason_code_expl, u32 vendor_unique);
  65. int
  66. efc_send_flogi_p2p_acc(struct efc_node *node, u32 ox_id, u32 s_id);
  67. int
  68. efc_send_flogi_acc(struct efc_node *node, u32 ox_id, u32 is_fport);
  69. int
  70. efc_send_plogi_acc(struct efc_node *node, u32 ox_id);
  71. int
  72. efc_send_prli_acc(struct efc_node *node, u32 ox_id);
  73. int
  74. efc_send_logo_acc(struct efc_node *node, u32 ox_id);
  75. int
  76. efc_send_prlo_acc(struct efc_node *node, u32 ox_id);
  77. int
  78. efc_send_adisc_acc(struct efc_node *node, u32 ox_id);
  79. int
  80. efc_bls_send_acc_hdr(struct efc *efc, struct efc_node *node,
  81. struct fc_frame_header *hdr);
  82. int
  83. efc_bls_send_rjt_hdr(struct efc_els_io_req *io, struct fc_frame_header *hdr);
  84. int
  85. efc_els_io_list_empty(struct efc_node *node, struct list_head *list);
  86. /* CT */
  87. int
  88. efc_send_ct_rsp(struct efc *efc, struct efc_node *node, u16 ox_id,
  89. struct fc_ct_hdr *ct_hdr, u32 cmd_rsp_code, u32 reason_code,
  90. u32 reason_code_explanation);
  91. int
  92. efc_send_bls_acc(struct efc_node *node, struct fc_frame_header *hdr);
  93. #endif /* __EFC_ELS_H__ */