Merge tag 'erofs-for-5.16-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel...
[platform/kernel/linux-starfive.git] / include / net / mctpdevice.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Management Component Transport Protocol (MCTP) - device
4  * definitions.
5  *
6  * Copyright (c) 2021 Code Construct
7  * Copyright (c) 2021 Google
8  */
9
10 #ifndef __NET_MCTPDEVICE_H
11 #define __NET_MCTPDEVICE_H
12
13 #include <linux/list.h>
14 #include <linux/types.h>
15 #include <linux/refcount.h>
16
17 struct mctp_sk_key;
18
19 struct mctp_dev {
20         struct net_device       *dev;
21
22         refcount_t              refs;
23
24         unsigned int            net;
25
26         const struct mctp_netdev_ops *ops;
27
28         /* Only modified under RTNL. Reads have addrs_lock held */
29         u8                      *addrs;
30         size_t                  num_addrs;
31         spinlock_t              addrs_lock;
32
33         struct rcu_head         rcu;
34 };
35
36 struct mctp_netdev_ops {
37         void                    (*release_flow)(struct mctp_dev *dev,
38                                                 struct mctp_sk_key *key);
39 };
40
41 #define MCTP_INITIAL_DEFAULT_NET        1
42
43 struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
44 struct mctp_dev *__mctp_dev_get(const struct net_device *dev);
45
46 int mctp_register_netdev(struct net_device *dev,
47                          const struct mctp_netdev_ops *ops);
48 void mctp_unregister_netdev(struct net_device *dev);
49
50 void mctp_dev_hold(struct mctp_dev *mdev);
51 void mctp_dev_put(struct mctp_dev *mdev);
52
53 void mctp_dev_set_key(struct mctp_dev *dev, struct mctp_sk_key *key);
54 void mctp_dev_release_key(struct mctp_dev *dev, struct mctp_sk_key *key);
55
56 #endif /* __NET_MCTPDEVICE_H */