xref: /openbmc/linux/drivers/scsi/fcoe/fcoe.h (revision 75bf465f0bc33e9b776a46d6a1b9b990f5fb7c37)
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