#include <linux/device.h>
#include <linux/types.h>
#include <net/smc.h>
#include "smc_cdc.h"
#include "smc_ism.h"
#include "smc_loopback.h"
#define SMC_LO_V2_CAPABLE …
#define SMC_LO_SUPPORT_NOCOPY …
#define SMC_DMA_ADDR_INVALID …
static const char smc_lo_dev_name[] = …;
static struct smc_lo_dev *lo_dev;
static void smc_lo_generate_ids(struct smc_lo_dev *ldev)
{ … }
static int smc_lo_query_rgid(struct smcd_dev *smcd, struct smcd_gid *rgid,
u32 vid_valid, u32 vid)
{ … }
static int smc_lo_register_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb,
void *client_priv)
{ … }
static void __smc_lo_unregister_dmb(struct smc_lo_dev *ldev,
struct smc_lo_dmb_node *dmb_node)
{ … }
static int smc_lo_unregister_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb)
{ … }
static int smc_lo_support_dmb_nocopy(struct smcd_dev *smcd)
{ … }
static int smc_lo_attach_dmb(struct smcd_dev *smcd, struct smcd_dmb *dmb)
{ … }
static int smc_lo_detach_dmb(struct smcd_dev *smcd, u64 token)
{ … }
static int smc_lo_move_data(struct smcd_dev *smcd, u64 dmb_tok,
unsigned int idx, bool sf, unsigned int offset,
void *data, unsigned int size)
{ … }
static int smc_lo_supports_v2(void)
{ … }
static void smc_lo_get_local_gid(struct smcd_dev *smcd,
struct smcd_gid *smcd_gid)
{ … }
static u16 smc_lo_get_chid(struct smcd_dev *smcd)
{ … }
static struct device *smc_lo_get_dev(struct smcd_dev *smcd)
{ … }
static const struct smcd_ops lo_ops = …;
static struct smcd_dev *smcd_lo_alloc_dev(const struct smcd_ops *ops,
int max_dmbs)
{ … }
static int smcd_lo_register_dev(struct smc_lo_dev *ldev)
{ … }
static void smcd_lo_unregister_dev(struct smc_lo_dev *ldev)
{ … }
static int smc_lo_dev_init(struct smc_lo_dev *ldev)
{ … }
static void smc_lo_dev_exit(struct smc_lo_dev *ldev)
{ … }
static void smc_lo_dev_release(struct device *dev)
{ … }
static int smc_lo_dev_probe(void)
{ … }
static void smc_lo_dev_remove(void)
{ … }
int smc_loopback_init(void)
{ … }
void smc_loopback_exit(void)
{ … }