fcoe.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  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_LOW_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. * this percpu struct for fcoe
  60. */
  61. struct fcoe_percpu_s {
  62. struct task_struct *thread;
  63. struct sk_buff_head fcoe_rx_list;
  64. struct page *crc_eof_page;
  65. int crc_eof_offset;
  66. };
  67. /*
  68. * an FCoE interface, 1:1 with netdev
  69. */
  70. struct fcoe_interface {
  71. struct list_head list;
  72. struct net_device *netdev;
  73. struct packet_type fcoe_packet_type;
  74. struct packet_type fip_packet_type;
  75. struct fcoe_ctlr ctlr;
  76. struct fc_exch_mgr *oem; /* offload exchange manager */
  77. struct kref kref;
  78. };
  79. /*
  80. * the FCoE private structure that's allocated along with the
  81. * Scsi_Host and libfc fc_lport structures
  82. */
  83. struct fcoe_port {
  84. struct fcoe_interface *fcoe;
  85. struct fc_lport *lport;
  86. struct sk_buff_head fcoe_pending_queue;
  87. u8 fcoe_pending_queue_active;
  88. struct timer_list timer; /* queue timer */
  89. struct work_struct destroy_work; /* to prevent rtnl deadlocks */
  90. u8 data_src_addr[ETH_ALEN];
  91. };
  92. #define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
  93. static inline struct net_device *fcoe_netdev(const struct fc_lport *lp)
  94. {
  95. return ((struct fcoe_port *)lport_priv(lp))->fcoe->netdev;
  96. }
  97. #endif /* _FCOE_H_ */