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