| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * Shared Memory Communications Direct over loopback-ism device. |
| * |
| * SMC-D loopback-ism device structure definitions. |
| * |
| * Copyright (c) 2024, Alibaba Inc. |
| * |
| * Author: Wen Gu <guwen@linux.alibaba.com> |
| * Tony Lu <tonylu@linux.alibaba.com> |
| * |
| */ |
| |
| #ifndef _SMC_LOOPBACK_H |
| #define _SMC_LOOPBACK_H |
| |
| #include <linux/device.h> |
| #include <net/smc.h> |
| |
| #if IS_ENABLED(CONFIG_SMC_LO) |
| #define SMC_LO_MAX_DMBS 5000 |
| #define SMC_LO_DMBS_HASH_BITS 12 |
| #define SMC_LO_RESERVED_CHID 0xFFFF |
| |
| struct smc_lo_dmb_node { |
| struct hlist_node list; |
| u64 token; |
| u32 len; |
| u32 sba_idx; |
| void *cpu_addr; |
| dma_addr_t dma_addr; |
| refcount_t refcnt; |
| }; |
| |
| struct smc_lo_dev { |
| struct smcd_dev *smcd; |
| struct device dev; |
| u16 chid; |
| struct smcd_gid local_gid; |
| atomic_t dmb_cnt; |
| rwlock_t dmb_ht_lock; |
| DECLARE_BITMAP(sba_idx_mask, SMC_LO_MAX_DMBS); |
| DECLARE_HASHTABLE(dmb_ht, SMC_LO_DMBS_HASH_BITS); |
| wait_queue_head_t ldev_release; |
| }; |
| |
| int smc_loopback_init(void); |
| void smc_loopback_exit(void); |
| #else |
| static inline int smc_loopback_init(void) |
| { |
| return 0; |
| } |
| |
| static inline void smc_loopback_exit(void) |
| { |
| } |
| #endif |
| |
| #endif /* _SMC_LOOPBACK_H */ |