Commit 5f85590f authored by Weibo Zhao's avatar Weibo Zhao Committed by JiangShui
Browse files

hns3 udma: add support of mmap direct wqe page

driver inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/I85R2F


CVE: NA

----------------------------------------------

Direct wqe address start at bar45 and each qp
mmap 65536B of memory.

Signed-off-by: default avatarWeibo Zhao <zhaoweibo3@huawei.com>
parent 3ef7a94b
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -19,6 +19,9 @@
#include <linux/types.h>

#define MAP_COMMAND_MASK		0xff
#define MAP_INDEX_MASK			0xffffff
#define MAP_INDEX_SHIFT			8
#define UDMA_DWQE_PAGE_SIZE		65536
#define UDMA_JETTY_X_PREFIX_BIT_NUM	2
#define UDMA_JFR_QPN_PREFIX		0x1
#define UDMA_ADDR_4K_MASK		0xfffUL
@@ -26,6 +29,7 @@

enum {
	UDMA_MMAP_UAR_PAGE,
	UDMA_MMAP_DWQE_PAGE,
};

enum udma_jfc_init_attr_mask {
+16 −0
Original line number Diff line number Diff line
@@ -145,9 +145,16 @@ static int get_mmap_cmd(struct vm_area_struct *vma)
	return (vma->vm_pgoff & MAP_COMMAND_MASK);
}

static uint64_t get_mmap_idx(struct vm_area_struct *vma)
{
	return ((vma->vm_pgoff >> MAP_INDEX_SHIFT) & MAP_INDEX_MASK);
}

static int udma_mmap(struct ubcore_ucontext *uctx, struct vm_area_struct *vma)
{
	struct udma_dev *udma_dev = to_udma_dev(uctx->ub_dev);
	uint64_t address;
	uint64_t qpn;
	int cmd;

	if (((vma->vm_end - vma->vm_start) % PAGE_SIZE) != 0) {
@@ -165,6 +172,15 @@ static int udma_mmap(struct ubcore_ucontext *uctx, struct vm_area_struct *vma)
				       PAGE_SIZE, vma->vm_page_prot))
			return -EAGAIN;
		break;
	case UDMA_MMAP_DWQE_PAGE:
		vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
		qpn = get_mmap_idx(vma);
		address = udma_dev->dwqe_page + qpn * UDMA_DWQE_PAGE_SIZE;
		if (io_remap_pfn_range(vma, vma->vm_start,
				       address >> PAGE_SHIFT,
				       UDMA_DWQE_PAGE_SIZE, vma->vm_page_prot))
			return -EAGAIN;
		break;
	default:
		dev_err(udma_dev->dev,
			"mmap failed, cmd(%d) not support\n", cmd);