xref: /openbmc/linux/include/net/mctpdevice.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1583be982SJeremy Kerr /* SPDX-License-Identifier: GPL-2.0 */
2583be982SJeremy Kerr /*
3583be982SJeremy Kerr  * Management Component Transport Protocol (MCTP) - device
4583be982SJeremy Kerr  * definitions.
5583be982SJeremy Kerr  *
6583be982SJeremy Kerr  * Copyright (c) 2021 Code Construct
7583be982SJeremy Kerr  * Copyright (c) 2021 Google
8583be982SJeremy Kerr  */
9583be982SJeremy Kerr 
10583be982SJeremy Kerr #ifndef __NET_MCTPDEVICE_H
11583be982SJeremy Kerr #define __NET_MCTPDEVICE_H
12583be982SJeremy Kerr 
13583be982SJeremy Kerr #include <linux/list.h>
14583be982SJeremy Kerr #include <linux/types.h>
15583be982SJeremy Kerr #include <linux/refcount.h>
16583be982SJeremy Kerr 
17*67737c45SJeremy Kerr struct mctp_sk_key;
18*67737c45SJeremy Kerr 
19583be982SJeremy Kerr struct mctp_dev {
20583be982SJeremy Kerr 	struct net_device	*dev;
21583be982SJeremy Kerr 
2243f55f23SJeremy Kerr 	refcount_t		refs;
2343f55f23SJeremy Kerr 
24583be982SJeremy Kerr 	unsigned int		net;
25583be982SJeremy Kerr 
26*67737c45SJeremy Kerr 	const struct mctp_netdev_ops *ops;
27*67737c45SJeremy Kerr 
28583be982SJeremy Kerr 	/* Only modified under RTNL. Reads have addrs_lock held */
29583be982SJeremy Kerr 	u8			*addrs;
30583be982SJeremy Kerr 	size_t			num_addrs;
31583be982SJeremy Kerr 	spinlock_t		addrs_lock;
32583be982SJeremy Kerr 
33583be982SJeremy Kerr 	struct rcu_head		rcu;
34583be982SJeremy Kerr };
35583be982SJeremy Kerr 
36*67737c45SJeremy Kerr struct mctp_netdev_ops {
37*67737c45SJeremy Kerr 	void			(*release_flow)(struct mctp_dev *dev,
38*67737c45SJeremy Kerr 						struct mctp_sk_key *key);
39*67737c45SJeremy Kerr };
40*67737c45SJeremy Kerr 
41583be982SJeremy Kerr #define MCTP_INITIAL_DEFAULT_NET	1
42583be982SJeremy Kerr 
43583be982SJeremy Kerr struct mctp_dev *mctp_dev_get_rtnl(const struct net_device *dev);
44583be982SJeremy Kerr struct mctp_dev *__mctp_dev_get(const struct net_device *dev);
45583be982SJeremy Kerr 
46*67737c45SJeremy Kerr int mctp_register_netdev(struct net_device *dev,
47*67737c45SJeremy Kerr 			 const struct mctp_netdev_ops *ops);
48*67737c45SJeremy Kerr void mctp_unregister_netdev(struct net_device *dev);
49*67737c45SJeremy Kerr 
5043f55f23SJeremy Kerr void mctp_dev_hold(struct mctp_dev *mdev);
5143f55f23SJeremy Kerr void mctp_dev_put(struct mctp_dev *mdev);
5243f55f23SJeremy Kerr 
53*67737c45SJeremy Kerr void mctp_dev_set_key(struct mctp_dev *dev, struct mctp_sk_key *key);
54*67737c45SJeremy Kerr void mctp_dev_release_key(struct mctp_dev *dev, struct mctp_sk_key *key);
55*67737c45SJeremy Kerr 
56583be982SJeremy Kerr #endif /* __NET_MCTPDEVICE_H */
57