1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Shared Memory Communications over RDMA (SMC-R) and RoCE 4 * 5 * PNET table queries 6 * 7 * Copyright IBM Corp. 2016 8 * 9 * Author(s): Thomas Richter <tmricht@linux.vnet.ibm.com> 10 */ 11 12 #ifndef _SMC_PNET_H 13 #define _SMC_PNET_H 14 15 #include <net/smc.h> 16 17 #if IS_ENABLED(CONFIG_HAVE_PNETID) 18 #include <asm/pnet.h> 19 #endif 20 21 struct smc_ib_device; 22 struct smcd_dev; 23 struct smc_init_info; 24 struct smc_link_group; 25 26 /** 27 * struct smc_pnettable - SMC PNET table anchor 28 * @lock: Lock for list action 29 * @pnetlist: List of PNETIDs 30 */ 31 struct smc_pnettable { 32 struct mutex lock; 33 struct list_head pnetlist; 34 }; 35 36 struct smc_pnetids_ndev { /* list of pnetids for net devices in UP state*/ 37 struct list_head list; 38 rwlock_t lock; 39 }; 40 41 struct smc_pnetids_ndev_entry { 42 struct list_head list; 43 u8 pnetid[SMC_MAX_PNETID_LEN]; 44 refcount_t refcnt; 45 }; 46 47 static inline int smc_pnetid_by_dev_port(struct device *dev, 48 unsigned short port, u8 *pnetid) 49 { 50 #if IS_ENABLED(CONFIG_HAVE_PNETID) 51 return pnet_id_by_dev_port(dev, port, pnetid); 52 #else 53 return -ENOENT; 54 #endif 55 } 56 57 int smc_pnet_init(void) __init; 58 int smc_pnet_net_init(struct net *net); 59 void smc_pnet_exit(void); 60 void smc_pnet_net_exit(struct net *net); 61 void smc_pnet_find_roce_resource(struct sock *sk, struct smc_init_info *ini); 62 void smc_pnet_find_ism_resource(struct sock *sk, struct smc_init_info *ini); 63 int smc_pnetid_by_table_ib(struct smc_ib_device *smcibdev, u8 ib_port); 64 int smc_pnetid_by_table_smcd(struct smcd_dev *smcd); 65 void smc_pnet_find_alt_roce(struct smc_link_group *lgr, 66 struct smc_init_info *ini, 67 struct smc_ib_device *known_dev); 68 bool smc_pnet_is_ndev_pnetid(struct net *net, u8 *pnetid); 69 bool smc_pnet_is_pnetid_set(u8 *pnetid); 70 #endif 71