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 */
57