1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * QLogic qlcnic NIC Driver |
4 | * Copyright (c) 2009-2013 QLogic Corporation |
5 | */ |
6 | |
7 | #ifndef __QLCNIC_DCBX_H |
8 | #define __QLCNIC_DCBX_H |
9 | |
10 | #define QLCNIC_DCB_STATE 0 |
11 | #define QLCNIC_DCB_AEN_MODE 1 |
12 | |
13 | #ifdef CONFIG_QLCNIC_DCB |
14 | int qlcnic_register_dcb(struct qlcnic_adapter *); |
15 | #else |
16 | static inline int qlcnic_register_dcb(struct qlcnic_adapter *adapter) |
17 | { return 0; } |
18 | #endif |
19 | |
20 | struct qlcnic_dcb; |
21 | |
22 | struct qlcnic_dcb_ops { |
23 | int (*query_hw_capability) (struct qlcnic_dcb *, char *); |
24 | int (*get_hw_capability) (struct qlcnic_dcb *); |
25 | int (*query_cee_param) (struct qlcnic_dcb *, char *, u8); |
26 | void (*init_dcbnl_ops) (struct qlcnic_dcb *); |
27 | void (*aen_handler) (struct qlcnic_dcb *, void *); |
28 | int (*get_cee_cfg) (struct qlcnic_dcb *); |
29 | void (*get_info) (struct qlcnic_dcb *); |
30 | int (*attach) (struct qlcnic_dcb *); |
31 | void (*free) (struct qlcnic_dcb *); |
32 | }; |
33 | |
34 | struct qlcnic_dcb { |
35 | struct qlcnic_dcb_mbx_params *param; |
36 | struct qlcnic_adapter *adapter; |
37 | struct delayed_work aen_work; |
38 | struct workqueue_struct *wq; |
39 | const struct qlcnic_dcb_ops *ops; |
40 | struct qlcnic_dcb_cfg *cfg; |
41 | unsigned long state; |
42 | }; |
43 | |
44 | static inline int qlcnic_dcb_get_hw_capability(struct qlcnic_dcb *dcb) |
45 | { |
46 | if (dcb && dcb->ops->get_hw_capability) |
47 | return dcb->ops->get_hw_capability(dcb); |
48 | |
49 | return -EOPNOTSUPP; |
50 | } |
51 | |
52 | static inline void qlcnic_dcb_free(struct qlcnic_dcb *dcb) |
53 | { |
54 | if (dcb && dcb->ops->free) |
55 | dcb->ops->free(dcb); |
56 | } |
57 | |
58 | static inline int qlcnic_dcb_attach(struct qlcnic_dcb *dcb) |
59 | { |
60 | if (dcb && dcb->ops->attach) |
61 | return dcb->ops->attach(dcb); |
62 | |
63 | return -EOPNOTSUPP; |
64 | } |
65 | |
66 | static inline int |
67 | qlcnic_dcb_query_hw_capability(struct qlcnic_dcb *dcb, char *buf) |
68 | { |
69 | if (dcb && dcb->ops->query_hw_capability) |
70 | return dcb->ops->query_hw_capability(dcb, buf); |
71 | |
72 | return -EOPNOTSUPP; |
73 | } |
74 | |
75 | static inline void qlcnic_dcb_get_info(struct qlcnic_dcb *dcb) |
76 | { |
77 | if (dcb && dcb->ops->get_info) |
78 | dcb->ops->get_info(dcb); |
79 | } |
80 | |
81 | static inline int |
82 | qlcnic_dcb_query_cee_param(struct qlcnic_dcb *dcb, char *buf, u8 type) |
83 | { |
84 | if (dcb && dcb->ops->query_cee_param) |
85 | return dcb->ops->query_cee_param(dcb, buf, type); |
86 | |
87 | return -EOPNOTSUPP; |
88 | } |
89 | |
90 | static inline int qlcnic_dcb_get_cee_cfg(struct qlcnic_dcb *dcb) |
91 | { |
92 | if (dcb && dcb->ops->get_cee_cfg) |
93 | return dcb->ops->get_cee_cfg(dcb); |
94 | |
95 | return -EOPNOTSUPP; |
96 | } |
97 | |
98 | static inline void qlcnic_dcb_aen_handler(struct qlcnic_dcb *dcb, void *msg) |
99 | { |
100 | if (dcb && dcb->ops->aen_handler) |
101 | dcb->ops->aen_handler(dcb, msg); |
102 | } |
103 | |
104 | static inline void qlcnic_dcb_init_dcbnl_ops(struct qlcnic_dcb *dcb) |
105 | { |
106 | if (dcb && dcb->ops->init_dcbnl_ops) |
107 | dcb->ops->init_dcbnl_ops(dcb); |
108 | } |
109 | |
110 | static inline int qlcnic_dcb_enable(struct qlcnic_dcb *dcb) |
111 | { |
112 | return dcb ? qlcnic_dcb_attach(dcb) : 0; |
113 | } |
114 | #endif |
115 | |