bfa.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. /*
  2. * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
  3. * All rights reserved
  4. * www.brocade.com
  5. *
  6. * Linux driver for Brocade Fibre Channel Host Bus Adapter.
  7. *
  8. * This program is free software; you can redistribute it and/or modify it
  9. * under the terms of the GNU General Public License (GPL) Version 2 as
  10. * published by the Free Software Foundation
  11. *
  12. * This program is distributed in the hope that it will be useful, but
  13. * WITHOUT ANY WARRANTY; without even the implied warranty of
  14. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  15. * General Public License for more details.
  16. */
  17. #ifndef __BFA_H__
  18. #define __BFA_H__
  19. #include <bfa_os_inc.h>
  20. #include <cs/bfa_debug.h>
  21. #include <cs/bfa_q.h>
  22. #include <cs/bfa_trc.h>
  23. #include <cs/bfa_log.h>
  24. #include <cs/bfa_plog.h>
  25. #include <defs/bfa_defs_status.h>
  26. #include <defs/bfa_defs_ioc.h>
  27. #include <defs/bfa_defs_iocfc.h>
  28. #include <aen/bfa_aen.h>
  29. #include <bfi/bfi.h>
  30. struct bfa_s;
  31. #include <bfa_intr_priv.h>
  32. struct bfa_pcidev_s;
  33. /**
  34. * PCI devices supported by the current BFA
  35. */
  36. struct bfa_pciid_s {
  37. u16 device_id;
  38. u16 vendor_id;
  39. };
  40. extern char bfa_version[];
  41. /**
  42. * BFA Power Mgmt Commands
  43. */
  44. enum bfa_pm_cmd {
  45. BFA_PM_CTL_D0 = 0,
  46. BFA_PM_CTL_D1 = 1,
  47. BFA_PM_CTL_D2 = 2,
  48. BFA_PM_CTL_D3 = 3,
  49. };
  50. /**
  51. * BFA memory resources
  52. */
  53. enum bfa_mem_type {
  54. BFA_MEM_TYPE_KVA = 1, /*! Kernel Virtual Memory *(non-dma-able) */
  55. BFA_MEM_TYPE_DMA = 2, /*! DMA-able memory */
  56. BFA_MEM_TYPE_MAX = BFA_MEM_TYPE_DMA,
  57. };
  58. struct bfa_mem_elem_s {
  59. enum bfa_mem_type mem_type; /* see enum bfa_mem_type */
  60. u32 mem_len; /* Total Length in Bytes */
  61. u8 *kva; /* kernel virtual address */
  62. u64 dma; /* dma address if DMA memory */
  63. u8 *kva_curp; /* kva allocation cursor */
  64. u64 dma_curp; /* dma allocation cursor */
  65. };
  66. struct bfa_meminfo_s {
  67. struct bfa_mem_elem_s meminfo[BFA_MEM_TYPE_MAX];
  68. };
  69. #define bfa_meminfo_kva(_m) \
  70. ((_m)->meminfo[BFA_MEM_TYPE_KVA - 1].kva_curp)
  71. #define bfa_meminfo_dma_virt(_m) \
  72. ((_m)->meminfo[BFA_MEM_TYPE_DMA - 1].kva_curp)
  73. #define bfa_meminfo_dma_phys(_m) \
  74. ((_m)->meminfo[BFA_MEM_TYPE_DMA - 1].dma_curp)
  75. /**
  76. * Generic Scatter Gather Element used by driver
  77. */
  78. struct bfa_sge_s {
  79. u32 sg_len;
  80. void *sg_addr;
  81. };
  82. #define bfa_sge_to_be(__sge) do { \
  83. ((u32 *)(__sge))[0] = bfa_os_htonl(((u32 *)(__sge))[0]); \
  84. ((u32 *)(__sge))[1] = bfa_os_htonl(((u32 *)(__sge))[1]); \
  85. ((u32 *)(__sge))[2] = bfa_os_htonl(((u32 *)(__sge))[2]); \
  86. } while (0)
  87. /*
  88. * bfa stats interfaces
  89. */
  90. #define bfa_stats(_mod, _stats) ((_mod)->stats._stats++)
  91. #define bfa_ioc_get_stats(__bfa, __ioc_stats) \
  92. bfa_ioc_fetch_stats(&(__bfa)->ioc, __ioc_stats)
  93. #define bfa_ioc_clear_stats(__bfa) \
  94. bfa_ioc_clr_stats(&(__bfa)->ioc)
  95. /*
  96. * bfa API functions
  97. */
  98. void bfa_get_pciids(struct bfa_pciid_s **pciids, int *npciids);
  99. void bfa_cfg_get_default(struct bfa_iocfc_cfg_s *cfg);
  100. void bfa_cfg_get_min(struct bfa_iocfc_cfg_s *cfg);
  101. void bfa_cfg_get_meminfo(struct bfa_iocfc_cfg_s *cfg,
  102. struct bfa_meminfo_s *meminfo);
  103. void bfa_attach(struct bfa_s *bfa, void *bfad, struct bfa_iocfc_cfg_s *cfg,
  104. struct bfa_meminfo_s *meminfo,
  105. struct bfa_pcidev_s *pcidev);
  106. void bfa_init_trc(struct bfa_s *bfa, struct bfa_trc_mod_s *trcmod);
  107. void bfa_init_log(struct bfa_s *bfa, struct bfa_log_mod_s *logmod);
  108. void bfa_init_aen(struct bfa_s *bfa, struct bfa_aen_s *aen);
  109. void bfa_init_plog(struct bfa_s *bfa, struct bfa_plog_s *plog);
  110. void bfa_detach(struct bfa_s *bfa);
  111. void bfa_init(struct bfa_s *bfa);
  112. void bfa_start(struct bfa_s *bfa);
  113. void bfa_stop(struct bfa_s *bfa);
  114. void bfa_attach_fcs(struct bfa_s *bfa);
  115. void bfa_cb_init(void *bfad, bfa_status_t status);
  116. void bfa_cb_stop(void *bfad, bfa_status_t status);
  117. void bfa_cb_updateq(void *bfad, bfa_status_t status);
  118. bfa_boolean_t bfa_intx(struct bfa_s *bfa);
  119. void bfa_isr_enable(struct bfa_s *bfa);
  120. void bfa_isr_disable(struct bfa_s *bfa);
  121. void bfa_msix_getvecs(struct bfa_s *bfa, u32 *msix_vecs_bmap,
  122. u32 *num_vecs, u32 *max_vec_bit);
  123. #define bfa_msix(__bfa, __vec) ((__bfa)->msix.handler[__vec](__bfa, __vec))
  124. void bfa_comp_deq(struct bfa_s *bfa, struct list_head *comp_q);
  125. void bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q);
  126. void bfa_comp_free(struct bfa_s *bfa, struct list_head *comp_q);
  127. typedef void (*bfa_cb_ioc_t) (void *cbarg, enum bfa_status status);
  128. void bfa_iocfc_get_attr(struct bfa_s *bfa, struct bfa_iocfc_attr_s *attr);
  129. bfa_status_t bfa_iocfc_get_stats(struct bfa_s *bfa,
  130. struct bfa_iocfc_stats_s *stats,
  131. bfa_cb_ioc_t cbfn, void *cbarg);
  132. bfa_status_t bfa_iocfc_clear_stats(struct bfa_s *bfa,
  133. bfa_cb_ioc_t cbfn, void *cbarg);
  134. void bfa_get_attr(struct bfa_s *bfa, struct bfa_ioc_attr_s *ioc_attr);
  135. void bfa_adapter_get_attr(struct bfa_s *bfa,
  136. struct bfa_adapter_attr_s *ad_attr);
  137. u64 bfa_adapter_get_id(struct bfa_s *bfa);
  138. bfa_status_t bfa_iocfc_israttr_set(struct bfa_s *bfa,
  139. struct bfa_iocfc_intr_attr_s *attr);
  140. void bfa_iocfc_enable(struct bfa_s *bfa);
  141. void bfa_iocfc_disable(struct bfa_s *bfa);
  142. void bfa_ioc_auto_recover(bfa_boolean_t auto_recover);
  143. void bfa_cb_ioc_disable(void *bfad);
  144. void bfa_timer_tick(struct bfa_s *bfa);
  145. #define bfa_timer_start(_bfa, _timer, _timercb, _arg, _timeout) \
  146. bfa_timer_begin(&(_bfa)->timer_mod, _timer, _timercb, _arg, _timeout)
  147. /*
  148. * BFA debug API functions
  149. */
  150. bfa_status_t bfa_debug_fwtrc(struct bfa_s *bfa, void *trcdata, int *trclen);
  151. bfa_status_t bfa_debug_fwsave(struct bfa_s *bfa, void *trcdata, int *trclen);
  152. #include "bfa_priv.h"
  153. #endif /* __BFA_H__ */