mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-17 09:28:24 +07:00
10428dd835
Usage of send buffer "sndbuf" is synced (a) before filling sndbuf for cpu access (b) after filling sndbuf for device access Usage of receive buffer "RMB" is synced (a) before reading RMB content for cpu access (b) after reading RMB content for device access Signed-off-by: Ursula Braun <ubraun@linux.vnet.ibm.com> Signed-off-by: David S. Miller <davem@davemloft.net>
78 lines
2.8 KiB
C
78 lines
2.8 KiB
C
/*
|
|
* Shared Memory Communications over RDMA (SMC-R) and RoCE
|
|
*
|
|
* Definitions for IB environment
|
|
*
|
|
* Copyright IBM Corp. 2016
|
|
*
|
|
* Author(s): Ursula Braun <Ursula Braun@linux.vnet.ibm.com>
|
|
*/
|
|
|
|
#ifndef _SMC_IB_H
|
|
#define _SMC_IB_H
|
|
|
|
#include <linux/interrupt.h>
|
|
#include <linux/if_ether.h>
|
|
#include <rdma/ib_verbs.h>
|
|
|
|
#define SMC_MAX_PORTS 2 /* Max # of ports */
|
|
#define SMC_GID_SIZE sizeof(union ib_gid)
|
|
|
|
#define SMC_IB_MAX_SEND_SGE 2
|
|
|
|
struct smc_ib_devices { /* list of smc ib devices definition */
|
|
struct list_head list;
|
|
spinlock_t lock; /* protects list of smc ib devices */
|
|
};
|
|
|
|
extern struct smc_ib_devices smc_ib_devices; /* list of smc ib devices */
|
|
|
|
struct smc_ib_device { /* ib-device infos for smc */
|
|
struct list_head list;
|
|
struct ib_device *ibdev;
|
|
struct ib_port_attr pattr[SMC_MAX_PORTS]; /* ib dev. port attrs */
|
|
struct ib_event_handler event_handler; /* global ib_event handler */
|
|
struct ib_cq *roce_cq_send; /* send completion queue */
|
|
struct ib_cq *roce_cq_recv; /* recv completion queue */
|
|
struct tasklet_struct send_tasklet; /* called by send cq handler */
|
|
struct tasklet_struct recv_tasklet; /* called by recv cq handler */
|
|
char mac[SMC_MAX_PORTS][ETH_ALEN];
|
|
/* mac address per port*/
|
|
union ib_gid gid[SMC_MAX_PORTS]; /* gid per port */
|
|
u8 initialized : 1; /* ib dev CQ, evthdl done */
|
|
struct work_struct port_event_work;
|
|
unsigned long port_event_mask;
|
|
};
|
|
|
|
struct smc_buf_desc;
|
|
struct smc_link;
|
|
|
|
int smc_ib_register_client(void) __init;
|
|
void smc_ib_unregister_client(void);
|
|
bool smc_ib_port_active(struct smc_ib_device *smcibdev, u8 ibport);
|
|
int smc_ib_remember_port_attr(struct smc_ib_device *smcibdev, u8 ibport);
|
|
int smc_ib_buf_map_sg(struct smc_ib_device *smcibdev,
|
|
struct smc_buf_desc *buf_slot,
|
|
enum dma_data_direction data_direction);
|
|
void smc_ib_buf_unmap_sg(struct smc_ib_device *smcibdev,
|
|
struct smc_buf_desc *buf_slot,
|
|
enum dma_data_direction data_direction);
|
|
void smc_ib_dealloc_protection_domain(struct smc_link *lnk);
|
|
int smc_ib_create_protection_domain(struct smc_link *lnk);
|
|
void smc_ib_destroy_queue_pair(struct smc_link *lnk);
|
|
int smc_ib_create_queue_pair(struct smc_link *lnk);
|
|
int smc_ib_ready_link(struct smc_link *lnk);
|
|
int smc_ib_modify_qp_rts(struct smc_link *lnk);
|
|
int smc_ib_modify_qp_reset(struct smc_link *lnk);
|
|
long smc_ib_setup_per_ibdev(struct smc_ib_device *smcibdev);
|
|
int smc_ib_get_memory_region(struct ib_pd *pd, int access_flags,
|
|
struct smc_buf_desc *buf_slot);
|
|
void smc_ib_put_memory_region(struct ib_mr *mr);
|
|
void smc_ib_sync_sg_for_cpu(struct smc_ib_device *smcibdev,
|
|
struct smc_buf_desc *buf_slot,
|
|
enum dma_data_direction data_direction);
|
|
void smc_ib_sync_sg_for_device(struct smc_ib_device *smcibdev,
|
|
struct smc_buf_desc *buf_slot,
|
|
enum dma_data_direction data_direction);
|
|
#endif
|