bfi_ioc.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  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 __BFI_IOC_H__
  18. #define __BFI_IOC_H__
  19. #include "bfi.h"
  20. #include <defs/bfa_defs_ioc.h>
  21. #pragma pack(1)
  22. enum bfi_ioc_h2i_msgs {
  23. BFI_IOC_H2I_ENABLE_REQ = 1,
  24. BFI_IOC_H2I_DISABLE_REQ = 2,
  25. BFI_IOC_H2I_GETATTR_REQ = 3,
  26. BFI_IOC_H2I_DBG_SYNC = 4,
  27. BFI_IOC_H2I_DBG_DUMP = 5,
  28. };
  29. enum bfi_ioc_i2h_msgs {
  30. BFI_IOC_I2H_ENABLE_REPLY = BFA_I2HM(1),
  31. BFI_IOC_I2H_DISABLE_REPLY = BFA_I2HM(2),
  32. BFI_IOC_I2H_GETATTR_REPLY = BFA_I2HM(3),
  33. BFI_IOC_I2H_READY_EVENT = BFA_I2HM(4),
  34. BFI_IOC_I2H_HBEAT = BFA_I2HM(5),
  35. };
  36. /**
  37. * BFI_IOC_H2I_GETATTR_REQ message
  38. */
  39. struct bfi_ioc_getattr_req_s {
  40. struct bfi_mhdr_s mh;
  41. union bfi_addr_u attr_addr;
  42. };
  43. struct bfi_ioc_attr_s {
  44. wwn_t mfg_wwn;
  45. mac_t mfg_mac;
  46. u16 rsvd_a;
  47. char brcd_serialnum[STRSZ(BFA_MFG_SERIALNUM_SIZE)];
  48. u8 pcie_gen;
  49. u8 pcie_lanes_orig;
  50. u8 pcie_lanes;
  51. u8 rx_bbcredit; /* receive buffer credits */
  52. u32 adapter_prop; /* adapter properties */
  53. u16 maxfrsize; /* max receive frame size */
  54. char asic_rev;
  55. u8 rsvd_b;
  56. char fw_version[BFA_VERSION_LEN];
  57. char optrom_version[BFA_VERSION_LEN];
  58. struct bfa_mfg_vpd_s vpd;
  59. };
  60. /**
  61. * BFI_IOC_I2H_GETATTR_REPLY message
  62. */
  63. struct bfi_ioc_getattr_reply_s {
  64. struct bfi_mhdr_s mh; /* Common msg header */
  65. u8 status; /* cfg reply status */
  66. u8 rsvd[3];
  67. };
  68. /**
  69. * Firmware memory page offsets
  70. */
  71. #define BFI_IOC_SMEM_PG0_CB (0x40)
  72. #define BFI_IOC_SMEM_PG0_CT (0x180)
  73. /**
  74. * Firmware trace offset
  75. */
  76. #define BFI_IOC_TRC_OFF (0x4b00)
  77. #define BFI_IOC_TRC_ENTS 256
  78. #define BFI_IOC_FW_SIGNATURE (0xbfadbfad)
  79. #define BFI_IOC_MD5SUM_SZ 4
  80. struct bfi_ioc_image_hdr_s {
  81. u32 signature; /* constant signature */
  82. u32 rsvd_a;
  83. u32 exec; /* exec vector */
  84. u32 param; /* parameters */
  85. u32 rsvd_b[4];
  86. u32 md5sum[BFI_IOC_MD5SUM_SZ];
  87. };
  88. /**
  89. * BFI_IOC_I2H_READY_EVENT message
  90. */
  91. struct bfi_ioc_rdy_event_s {
  92. struct bfi_mhdr_s mh; /* common msg header */
  93. u8 init_status; /* init event status */
  94. u8 rsvd[3];
  95. };
  96. struct bfi_ioc_hbeat_s {
  97. struct bfi_mhdr_s mh; /* common msg header */
  98. u32 hb_count; /* current heart beat count */
  99. };
  100. /**
  101. * IOC hardware/firmware state
  102. */
  103. enum bfi_ioc_state {
  104. BFI_IOC_UNINIT = 0, /* not initialized */
  105. BFI_IOC_INITING = 1, /* h/w is being initialized */
  106. BFI_IOC_HWINIT = 2, /* h/w is initialized */
  107. BFI_IOC_CFG = 3, /* IOC configuration in progress */
  108. BFI_IOC_OP = 4, /* IOC is operational */
  109. BFI_IOC_DISABLING = 5, /* IOC is being disabled */
  110. BFI_IOC_DISABLED = 6, /* IOC is disabled */
  111. BFI_IOC_CFG_DISABLED = 7, /* IOC is being disabled;transient */
  112. BFI_IOC_HBFAIL = 8, /* IOC heart-beat failure */
  113. BFI_IOC_MEMTEST = 9, /* IOC is doing memtest */
  114. };
  115. #define BFI_IOC_ENDIAN_SIG 0x12345678
  116. enum {
  117. BFI_ADAPTER_TYPE_FC = 0x01, /* FC adapters */
  118. BFI_ADAPTER_TYPE_MK = 0x0f0000, /* adapter type mask */
  119. BFI_ADAPTER_TYPE_SH = 16, /* adapter type shift */
  120. BFI_ADAPTER_NPORTS_MK = 0xff00, /* number of ports mask */
  121. BFI_ADAPTER_NPORTS_SH = 8, /* number of ports shift */
  122. BFI_ADAPTER_SPEED_MK = 0xff, /* adapter speed mask */
  123. BFI_ADAPTER_SPEED_SH = 0, /* adapter speed shift */
  124. BFI_ADAPTER_PROTO = 0x100000, /* prototype adapaters */
  125. BFI_ADAPTER_TTV = 0x200000, /* TTV debug capable */
  126. BFI_ADAPTER_UNSUPP = 0x400000, /* unknown adapter type */
  127. };
  128. #define BFI_ADAPTER_GETP(__prop, __adap_prop) \
  129. (((__adap_prop) & BFI_ADAPTER_ ## __prop ## _MK) >> \
  130. BFI_ADAPTER_ ## __prop ## _SH)
  131. #define BFI_ADAPTER_SETP(__prop, __val) \
  132. ((__val) << BFI_ADAPTER_ ## __prop ## _SH)
  133. #define BFI_ADAPTER_IS_PROTO(__adap_type) \
  134. ((__adap_type) & BFI_ADAPTER_PROTO)
  135. #define BFI_ADAPTER_IS_TTV(__adap_type) \
  136. ((__adap_type) & BFI_ADAPTER_TTV)
  137. #define BFI_ADAPTER_IS_UNSUPP(__adap_type) \
  138. ((__adap_type) & BFI_ADAPTER_UNSUPP)
  139. #define BFI_ADAPTER_IS_SPECIAL(__adap_type) \
  140. ((__adap_type) & (BFI_ADAPTER_TTV | BFI_ADAPTER_PROTO | \
  141. BFI_ADAPTER_UNSUPP))
  142. /**
  143. * BFI_IOC_H2I_ENABLE_REQ & BFI_IOC_H2I_DISABLE_REQ messages
  144. */
  145. struct bfi_ioc_ctrl_req_s {
  146. struct bfi_mhdr_s mh;
  147. u8 ioc_class;
  148. u8 rsvd[3];
  149. };
  150. /**
  151. * BFI_IOC_I2H_ENABLE_REPLY & BFI_IOC_I2H_DISABLE_REPLY messages
  152. */
  153. struct bfi_ioc_ctrl_reply_s {
  154. struct bfi_mhdr_s mh; /* Common msg header */
  155. u8 status; /* enable/disable status */
  156. u8 rsvd[3];
  157. };
  158. #define BFI_IOC_MSGSZ 8
  159. /**
  160. * H2I Messages
  161. */
  162. union bfi_ioc_h2i_msg_u {
  163. struct bfi_mhdr_s mh;
  164. struct bfi_ioc_ctrl_req_s enable_req;
  165. struct bfi_ioc_ctrl_req_s disable_req;
  166. struct bfi_ioc_getattr_req_s getattr_req;
  167. u32 mboxmsg[BFI_IOC_MSGSZ];
  168. };
  169. /**
  170. * I2H Messages
  171. */
  172. union bfi_ioc_i2h_msg_u {
  173. struct bfi_mhdr_s mh;
  174. struct bfi_ioc_rdy_event_s rdy_event;
  175. u32 mboxmsg[BFI_IOC_MSGSZ];
  176. };
  177. #pragma pack()
  178. #endif /* __BFI_IOC_H__ */