fcoe.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. * struct fcoe_percpu_s - The per-CPU context for FCoE receive threads
  60. * @thread: The thread context
  61. * @fcoe_rx_list: The queue of pending packets to process
  62. * @page: The memory page for calculating frame trailer CRCs
  63. * @crc_eof_offset: The offset into the CRC page pointing to available
  64. * memory for a new trailer
  65. */
  66. struct fcoe_percpu_s {
  67. struct task_struct *thread;
  68. struct sk_buff_head fcoe_rx_list;
  69. struct page *crc_eof_page;
  70. int crc_eof_offset;
  71. };
  72. /**
  73. * struct fcoe_interface - A FCoE interface
  74. * @list: Handle for a list of FCoE interfaces
  75. * @netdev: The associated net device
  76. * @fcoe_packet_type: FCoE packet type
  77. * @fip_packet_type: FIP packet type
  78. * @ctlr: The FCoE controller (for FIP)
  79. * @oem: The offload exchange manager for all local port
  80. * instances associated with this port
  81. * @kref: The kernel reference
  82. *
  83. * This structure is 1:1 with a net devive.
  84. */
  85. struct fcoe_interface {
  86. struct list_head list;
  87. struct net_device *netdev;
  88. struct packet_type fcoe_packet_type;
  89. struct packet_type fip_packet_type;
  90. struct fcoe_ctlr ctlr;
  91. struct fc_exch_mgr *oem;
  92. struct kref kref;
  93. };
  94. /**
  95. * struct fcoe_port - The FCoE private structure
  96. * @fcoe: The associated fcoe interface
  97. * @lport: The associated local port
  98. * @fcoe_pending_queue: The pending Rx queue of skbs
  99. * @fcoe_pending_queue_active: Indicates if the pending queue is active
  100. * @timer: The queue timer
  101. * @destroy_work: Handle for work context
  102. * (to prevent RTNL deadlocks)
  103. * @data_srt_addr: Source address for data
  104. *
  105. * An instance of this structure is to be allocated along with the
  106. * Scsi_Host and libfc fc_lport structures.
  107. */
  108. struct fcoe_port {
  109. struct fcoe_interface *fcoe;
  110. struct fc_lport *lport;
  111. struct sk_buff_head fcoe_pending_queue;
  112. u8 fcoe_pending_queue_active;
  113. struct timer_list timer;
  114. struct work_struct destroy_work;
  115. u8 data_src_addr[ETH_ALEN];
  116. };
  117. #define fcoe_from_ctlr(fip) container_of(fip, struct fcoe_interface, ctlr)
  118. /**
  119. * fcoe_netdev() - Return the net device associated with a local port
  120. * @lport: The local port to get the net device from
  121. */
  122. static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
  123. {
  124. return ((struct fcoe_port *)lport_priv(lport))->fcoe->netdev;
  125. }
  126. #endif /* _FCOE_H_ */