Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / scsi / fcoe / fcoe.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Copyright(c) 2009 Intel Corporation. All rights reserved.
4  *
5  * Maintained at www.Open-FCoE.org
6  */
7
8 #ifndef _FCOE_H_
9 #define _FCOE_H_
10
11 #include <linux/skbuff.h>
12 #include <linux/kthread.h>
13
14 #define FCOE_MAX_QUEUE_DEPTH    256
15 #define FCOE_MIN_QUEUE_DEPTH    32
16
17 #define FCOE_WORD_TO_BYTE       4
18
19 #define FCOE_VERSION    "0.1"
20 #define FCOE_NAME       "fcoe"
21 #define FCOE_VENDOR     "Open-FCoE.org"
22
23 #define FCOE_MAX_LUN            0xFFFF
24 #define FCOE_MAX_FCP_TARGET     256
25
26 #define FCOE_MAX_OUTSTANDING_COMMANDS   1024
27
28 #define FCOE_MIN_XID            0x0000  /* the min xid supported by fcoe_sw */
29 #define FCOE_MAX_XID            0x0FFF  /* the max xid supported by fcoe_sw */
30
31 extern unsigned int fcoe_debug_logging;
32
33 #define FCOE_LOGGING        0x01 /* General logging, not categorized */
34 #define FCOE_NETDEV_LOGGING 0x02 /* Netdevice logging */
35
36 #define FCOE_CHECK_LOGGING(LEVEL, CMD)                                  \
37 do {                                                                    \
38         if (unlikely(fcoe_debug_logging & LEVEL))                       \
39                 do {                                                    \
40                         CMD;                                            \
41                 } while (0);                                            \
42 } while (0)
43
44 #define FCOE_DBG(fmt, args...)                                          \
45         FCOE_CHECK_LOGGING(FCOE_LOGGING,                                \
46                            pr_info("fcoe: " fmt, ##args);)
47
48 #define FCOE_NETDEV_DBG(netdev, fmt, args...)                   \
49         FCOE_CHECK_LOGGING(FCOE_NETDEV_LOGGING,                 \
50                            pr_info("fcoe: %s: " fmt,            \
51                                    netdev->name, ##args);)
52
53 /**
54  * struct fcoe_interface - A FCoE interface
55  * @list:             Handle for a list of FCoE interfaces
56  * @netdev:           The associated net device
57  * @fcoe_packet_type: FCoE packet type
58  * @fip_packet_type:  FIP packet type
59  * @oem:              The offload exchange manager for all local port
60  *                    instances associated with this port
61  * @removed:          Indicates fcoe interface removed from net device
62  * @priority:         Priority for the FCoE packet (DCB)
63  * This structure is 1:1 with a net device.
64  */
65 struct fcoe_interface {
66         struct list_head   list;
67         struct net_device  *netdev;
68         struct net_device  *realdev;
69         struct packet_type fcoe_packet_type;
70         struct packet_type fip_packet_type;
71         struct packet_type fip_vlan_packet_type;
72         struct fc_exch_mgr *oem;
73         u8      removed;
74         u8      priority;
75 };
76
77 #define fcoe_to_ctlr(x)                                         \
78         (struct fcoe_ctlr *)(((struct fcoe_ctlr *)(x)) - 1)
79
80 #define fcoe_from_ctlr(x)                       \
81         ((struct fcoe_interface *)((x) + 1))
82
83 /**
84  * fcoe_netdev() - Return the net device associated with a local port
85  * @lport: The local port to get the net device from
86  */
87 static inline struct net_device *fcoe_netdev(const struct fc_lport *lport)
88 {
89         return ((struct fcoe_interface *)
90                         ((struct fcoe_port *)lport_priv(lport))->priv)->netdev;
91 }
92
93 #endif /* _FCOE_H_ */