fcoe.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  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. /*
  35. * Max MTU for FCoE: 14 (FCoE header) + 24 (FC header) + 2112 (max FC payload)
  36. * + 4 (FC CRC) + 4 (FCoE trailer) = 2158 bytes
  37. */
  38. #define FCOE_MTU 2158
  39. unsigned int fcoe_debug_logging;
  40. module_param_named(debug_logging, fcoe_debug_logging, int, S_IRUGO|S_IWUSR);
  41. MODULE_PARM_DESC(debug_logging, "a bit mask of logging levels");
  42. #define FCOE_LOGGING 0x01 /* General logging, not categorized */
  43. #define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
  44. #define FCOE_CHECK_LOGGING(LEVEL, CMD) \
  45. do { \
  46. if (unlikely(fcoe_debug_logging & LEVEL)) \
  47. do { \
  48. CMD; \
  49. } while (0); \
  50. } while (0)
  51. #define FCOE_DBG(fmt, args...) \
  52. FCOE_CHECK_LOGGING(FCOE_LOGGING, \
  53. printk(KERN_INFO "fcoe: " fmt, ##args);)
  54. #define FCOE_NETDEV_DBG(netdev, fmt, args...) \
  55. FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING, \
  56. printk(KERN_INFO "fcoe: %s: " fmt, \
  57. netdev->name, ##args);)
  58. /**
  59. * struct fcoe_interface - A FCoE interface
  60. * @list: Handle for a list of FCoE interfaces
  61. * @netdev: The associated net device
  62. * @fcoe_packet_type: FCoE packet type
  63. * @fip_packet_type: FIP packet type
  64. * @ctlr: The FCoE controller (for FIP)
  65. * @oem: The offload exchange manager for all local port
  66. * instances associated with this port
  67. * @kref: The kernel reference
  68. *
  69. * This structure is 1:1 with a net devive.
  70. */
  71. struct fcoe_interface {
  72. struct list_head list;
  73. struct net_device *netdev;
  74. struct packet_type fcoe_packet_type;
  75. struct packet_type fip_packet_type;
  76. struct fcoe_ctlr ctlr;
  77. struct fc_exch_mgr *oem;
  78. struct kref kref;
  79. };
  80. #define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
  81. /**
  82. * fcoe_netdev() - Return the net device associated with a local port
  83. * @lport: The local port to get the net device from
  84. */
  85. static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
  86. {
  87. return ((struct fcoe_interface *)
  88. ((struct fcoe_port *)lport_priv(lport))->priv)->netdev;
  89. }
  90. #endif /* _FCOE_H_ */