1*a61127c2SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */
2fdd78027SVasu Dev /*
3fdd78027SVasu Dev * Copyright(c) 2009 Intel Corporation. All rights reserved.
4fdd78027SVasu Dev *
5fdd78027SVasu Dev * Maintained at www.Open-FCoE.org
6fdd78027SVasu Dev */
7fdd78027SVasu Dev
8fdd78027SVasu Dev #ifndef _FCOE_H_
9fdd78027SVasu Dev #define _FCOE_H_
10fdd78027SVasu Dev
11fdd78027SVasu Dev #include <linux/skbuff.h>
12fdd78027SVasu Dev #include <linux/kthread.h>
13fdd78027SVasu Dev
14fdd78027SVasu Dev #define FCOE_MAX_QUEUE_DEPTH 256
158597ae8bSBhanu Prakash Gollapudi #define FCOE_MIN_QUEUE_DEPTH 32
16fdd78027SVasu Dev
17fdd78027SVasu Dev #define FCOE_WORD_TO_BYTE 4
18fdd78027SVasu Dev
19fdd78027SVasu Dev #define FCOE_VERSION "0.1"
20fdd78027SVasu Dev #define FCOE_NAME "fcoe"
21fdd78027SVasu Dev #define FCOE_VENDOR "Open-FCoE.org"
22fdd78027SVasu Dev
232171c225SRobert Love #define FCOE_MAX_LUN 0xFFFF
24fdd78027SVasu Dev #define FCOE_MAX_FCP_TARGET 256
25fdd78027SVasu Dev
26fdd78027SVasu Dev #define FCOE_MAX_OUTSTANDING_COMMANDS 1024
27fdd78027SVasu Dev
28d7179680SVasu Dev #define FCOE_MIN_XID 0x0000 /* the min xid supported by fcoe_sw */
29e4bc50beSVasu Dev #define FCOE_MAX_XID 0x0FFF /* the max xid supported by fcoe_sw */
30fdd78027SVasu Dev
317c9c6841SBart Van Assche extern unsigned int fcoe_debug_logging;
32d5488eb9SRobert Love
33d5488eb9SRobert Love #define FCOE_LOGGING 0x01 /* General logging, not categorized */
34d5488eb9SRobert Love #define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
35d5488eb9SRobert Love
36d5488eb9SRobert Love #define FCOE_CHECK_LOGGING(LEVEL, CMD) \
37d5488eb9SRobert Love do { \
38d5488eb9SRobert Love if (unlikely(fcoe_debug_logging & LEVEL)) \
39d5488eb9SRobert Love do { \
40d5488eb9SRobert Love CMD; \
41d5488eb9SRobert Love } while (0); \
42a69b06bcSJoe Eykholt } while (0)
43d5488eb9SRobert Love
44d5488eb9SRobert Love #define FCOE_DBG(fmt, args...) \
45d5488eb9SRobert Love FCOE_CHECK_LOGGING(FCOE_LOGGING, \
468e6c5363SRobert Love pr_info("fcoe: " fmt, ##args);)
47d5488eb9SRobert Love
48d5488eb9SRobert Love #define FCOE_NETDEV_DBG(netdev, fmt, args...) \
49d5488eb9SRobert Love FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING, \
508e6c5363SRobert Love pr_info("fcoe: %s: " fmt, \
51d5488eb9SRobert Love netdev->name, ##args);)
52d5488eb9SRobert Love
531875f27eSRobert Love /**
541875f27eSRobert Love * struct fcoe_interface - A FCoE interface
551875f27eSRobert Love * @list: Handle for a list of FCoE interfaces
561875f27eSRobert Love * @netdev: The associated net device
571875f27eSRobert Love * @fcoe_packet_type: FCoE packet type
581875f27eSRobert Love * @fip_packet_type: FIP packet type
591875f27eSRobert Love * @oem: The offload exchange manager for all local port
601875f27eSRobert Love * instances associated with this port
61433eba04SVasu Dev * @removed: Indicates fcoe interface removed from net device
6231c37a6fSNeerav Parikh * @priority: Priority for the FCoE packet (DCB)
63433eba04SVasu Dev * This structure is 1:1 with a net device.
64fdd78027SVasu Dev */
65014f5c3fSChris Leech struct fcoe_interface {
66fdd78027SVasu Dev struct list_head list;
6725024989SChris Leech struct net_device *netdev;
68d1483bb9SVasu Dev struct net_device *realdev;
69259ad85dSChris Leech struct packet_type fcoe_packet_type;
70259ad85dSChris Leech struct packet_type fip_packet_type;
71d242e668SHannes Reinecke struct packet_type fip_vlan_packet_type;
721875f27eSRobert Love struct fc_exch_mgr *oem;
73433eba04SVasu Dev u8 removed;
7431c37a6fSNeerav Parikh u8 priority;
75014f5c3fSChris Leech };
76014f5c3fSChris Leech
77619fe4beSRobert Love #define fcoe_to_ctlr(x) \
78619fe4beSRobert Love (struct fcoe_ctlr *)(((struct fcoe_ctlr *)(x)) - 1)
79619fe4beSRobert Love
80619fe4beSRobert Love #define fcoe_from_ctlr(x) \
81619fe4beSRobert Love ((struct fcoe_interface *)((x) + 1))
8297c8389dSJoe Eykholt
831875f27eSRobert Love /**
841875f27eSRobert Love * fcoe_netdev() - Return the net device associated with a local port
851875f27eSRobert Love * @lport: The local port to get the net device from
861875f27eSRobert Love */
fcoe_netdev(const struct fc_lport * lport)871875f27eSRobert Love static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
88fdd78027SVasu Dev {
898597ae8bSBhanu Prakash Gollapudi return ((struct fcoe_interface *)
908597ae8bSBhanu Prakash Gollapudi ((struct fcoe_port *)lport_priv(lport))->priv)->netdev;
91fdd78027SVasu Dev }
92fdd78027SVasu Dev
93fdd78027SVasu Dev #endif /* _FCOE_H_ */
94