fcoe.h 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /*
  2. * Copyright(c) 2009 Intel Corporation. All rights reserved.
  3. *
  4. * This program is free software; you can redistribute it and/or modify it
  5. * under the terms and conditions of the GNU General Public License,
  6. * version 2, as published by the Free Software Foundation.
  7. *
  8. * This program is distributed in the hope it will be useful, but WITHOUT
  9. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  10. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  11. * more details.
  12. *
  13. * You should have received a copy of the GNU General Public License along with
  14. * this program; if not, write to the Free Software Foundation, Inc.,
  15. * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
  16. *
  17. * Maintained at www.Open-FCoE.org
  18. */
  19. #ifndef _FCOE_H_
  20. #define _FCOE_H_
  21. #include <linux/skbuff.h>
  22. #include <linux/kthread.h>
  23. #define FCOE_MAX_QUEUE_DEPTH 256
  24. #define FCOE_MIN_QUEUE_DEPTH 32
  25. #define FCOE_WORD_TO_BYTE 4
  26. #define FCOE_VERSION "0.1"
  27. #define FCOE_NAME "fcoe"
  28. #define FCOE_VENDOR "Open-FCoE.org"
  29. #define FCOE_MAX_LUN 0xFFFF
  30. #define FCOE_MAX_FCP_TARGET 256
  31. #define FCOE_MAX_OUTSTANDING_COMMANDS 1024
  32. #define FCOE_MIN_XID 0x0000 /* the min xid supported by fcoe_sw */
  33. #define FCOE_MAX_XID 0x0FFF /* the max xid supported by fcoe_sw */
  34. unsigned int fcoe_debug_logging;
  35. module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR);
  36. MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels");
  37. #define FCOE_LOGGING 0x01 /* General logging, not categorized */
  38. #define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
  39. #define FCOE_CHECK_LOGGING(LEVEL, CMD) \
  40. do { \
  41. if (unlikely(fcoe_debug_logging & LEVEL)) \
  42. do { \
  43. CMD; \
  44. } while (0); \
  45. } while (0)
  46. #define FCOE_DBG(fmt, args...) \
  47. FCOE_CHECK_LOGGING(FCOE_LOGGING, \
  48. printk(KERN_INFO "fcoe: " fmt, ##args);)
  49. #define FCOE_NETDEV_DBG(netdev, fmt, args...) \
  50. FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING, \
  51. printk(KERN_INFO "fcoe: %s: " fmt, \
  52. netdev->name, ##args);)
  53. /**
  54. * struct fcoe_interface - A FCoE interface
  55. * @list: Handle for a list of FCoE interfaces
  56. * @netdev: The associated net device
  57. * @fcoe_packet_type: FCoE packet type
  58. * @fip_packet_type: FIP packet type
  59. * @ctlr: The FCoE controller (for FIP)
  60. * @oem: The offload exchange manager for all local port
  61. * instances associated with this port
  62. * @kref: The kernel reference
  63. *
  64. * This structure is 1:1 with a net devive.
  65. */
  66. struct fcoe_interface {
  67. struct list_head list;
  68. struct net_device *netdev;
  69. struct packet_type fcoe_packet_type;
  70. struct packet_type fip_packet_type;
  71. struct fcoe_ctlr ctlr;
  72. struct fc_exch_mgr *oem;
  73. struct kref kref;
  74. };
  75. #define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
  76. /**
  77. * fcoe_netdev() - Return the net device associated with a local port
  78. * @lport: The local port to get the net device from
  79. */
  80. static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
  81. {
  82. return ((struct fcoe_interface *)
  83. ((struct fcoe_port *)lport_priv(lport))->priv)->netdev;
  84. }
  85. static inline void wwn_to_str(u64 wwn, char *buf, int len)
  86. {
  87. u8 wwpn[8];
  88. u64_to_wwn(wwn, wwpn);
  89. snprintf(buf, len, "%02x%02x%02x%02x%02x%02x%02x%02x",
  90. wwpn[0], wwpn[1], wwpn[2], wwpn[3],
  91. wwpn[4], wwpn[5], wwpn[6], wwpn[7]);
  92. }
  93. #endif /* _FCOE_H_ */