From patchwork Wed Sep 11 02:07:26 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: WanRenyong X-Patchwork-Id: 143919 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D69814595A; Wed, 11 Sep 2024 04:08:31 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 585DB42EEB; Wed, 11 Sep 2024 04:08:12 +0200 (CEST) Received: from lf-1-13.ptr.blmpb.com (lf-1-13.ptr.blmpb.com [103.149.242.13]) by mails.dpdk.org (Postfix) with ESMTP id BC41C40E1D for ; Wed, 11 Sep 2024 04:08:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; s=feishu2403070942; d=yunsilicon.com; t=1726020479; h=from:subject: mime-version:from:date:message-id:subject:to:cc:reply-to:content-type: mime-version:in-reply-to:message-id; bh=UQFXlln2H4zYVk7jPk0wYBZ7kImYllTxsBbb1Kdcub8=; b=ac3hvIsWCQVxAFZxd8U6I1MH/7Og/txJvYTSe1GZJjZRwbZX1ptQDq9yFD5L2NNLw6ny0B 2MEua7XyK0M1hlIeeXqU3JGbVvhroo2b0awLcF+LaYYApXU1otDCrmqu2d2H3gbYBqcBhz X7c2vrC6B8CBXItCzYid2Qg7wcIcf3cGOWKz74se+dGZATvw1J/y/7TBD+4UGA9mFA1Xyj Sjx2Pa8s9UWFsyoQ8hn34tby7wrJO8vEDe8w3ZMjwik1Dh2azMnzOkyhqy/8n30rUEnlsv ZlbhtoC5ISLDYGbtAu0S0IwAfKnUBDKlwDm+kHu2yKhEra90ynfzvbRWAagUeQ== X-Original-From: WanRenyong Received: from ubuntu-liun.yunsilicon.com ([58.34.192.114]) by smtp.feishu.cn with ESMTPS; Wed, 11 Sep 2024 10:07:58 +0800 To: From: "WanRenyong" Mime-Version: 1.0 X-Mailer: git-send-email 2.25.1 Date: Wed, 11 Sep 2024 10:07:26 +0800 Message-Id: <20240911020740.3950704-6-wanry@yunsilicon.com> Cc: , , "WanRenyong" X-Lms-Return-Path: Subject: [PATCH v2 05/19] net/xsc: add ioctl command interface X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org IOCTL command interface is one of methods used to interact with firmware by PMD. By using ioctl interface, PMD sends command to the kernel module, then the kernel module translates the command and sends it to firmware, at last, the kernel module send back PDM the result from firmware. Signed-off-by: WanRenyong --- drivers/net/xsc/meson.build | 1 + drivers/net/xsc/xsc_ctrl.c | 56 ++++++++++++++++++++++++ drivers/net/xsc/xsc_ctrl.h | 86 +++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+) create mode 100644 drivers/net/xsc/xsc_ctrl.c create mode 100644 drivers/net/xsc/xsc_ctrl.h diff --git a/drivers/net/xsc/meson.build b/drivers/net/xsc/meson.build index 8bf6ee7b47..f38ebdfe0f 100644 --- a/drivers/net/xsc/meson.build +++ b/drivers/net/xsc/meson.build @@ -10,6 +10,7 @@ sources = files( 'xsc_ethdev.c', 'xsc_dev.c', 'xsc_utils.c', + 'xsc_ctrl.c', ) libnames = ['ibverbs'] diff --git a/drivers/net/xsc/xsc_ctrl.c b/drivers/net/xsc/xsc_ctrl.c new file mode 100644 index 0000000000..3e37bd914e --- /dev/null +++ b/drivers/net/xsc/xsc_ctrl.c @@ -0,0 +1,56 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2024 Yunsilicon Technology Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "xsc_log.h" +#include "xsc_dev.h" +#include "xsc_ctrl.h" + +int +xsc_ioctl(struct xsc_dev *dev, int cmd, int opcode, + void *data_in, int in_len, void *data_out, int out_len) +{ + struct xsc_ioctl_hdr *hdr; + int data_len = RTE_MAX(in_len, out_len); + int alloc_len = sizeof(struct xsc_ioctl_hdr) + data_len; + int ret = 0; + + hdr = rte_zmalloc(NULL, alloc_len, RTE_CACHE_LINE_SIZE); + if (hdr == NULL) { + PMD_DRV_LOG(ERR, "Failed to allocate xsc ioctl cmd memory"); + return -ENOMEM; + } + + hdr->check_field = XSC_IOCTL_CHECK_FIELD; + hdr->attr.opcode = opcode; + hdr->attr.length = data_len; + hdr->attr.error = 0; + + if (data_in != NULL && in_len > 0) + rte_memcpy(hdr + 1, data_in, in_len); + + ret = ioctl(dev->ctrl_fd, cmd, hdr); + if (ret == 0) { + if (hdr->attr.error != 0) + ret = hdr->attr.error; + else if (data_out != NULL && out_len > 0) + rte_memcpy(data_out, hdr + 1, out_len); + } + + rte_free(hdr); + return ret; +} diff --git a/drivers/net/xsc/xsc_ctrl.h b/drivers/net/xsc/xsc_ctrl.h new file mode 100644 index 0000000000..d343e1b1a7 --- /dev/null +++ b/drivers/net/xsc/xsc_ctrl.h @@ -0,0 +1,86 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright 2024 Yunsilicon Technology Co., Ltd. + */ + +#ifndef _XSC_CTRL_H_ +#define _XSC_CTRL_H_ + +#include + +#define XSC_IOCTL_CHECK_FIELD 0x01234567 + +#define XSC_IOCTL_MAGIC 0x1b +#define XSC_IOCTL_CMDQ \ + _IOWR(XSC_IOCTL_MAGIC, 1, struct xsc_ioctl_hdr) +#define XSC_IOCTL_DRV_GET \ + _IOR(XSC_IOCTL_MAGIC, 2, struct xsc_ioctl_hdr) +#define XSC_IOCTL_CMDQ_RAW \ + _IOWR(XSC_IOCTL_MAGIC, 5, struct xsc_ioctl_hdr) + +enum xsc_ioctl_opcode { + XSC_IOCTL_GET_HW_INFO = 0x100, +}; + +enum xsc_ioctl_opmod { + XSC_IOCTL_OP_GET_LOCAL, +}; + +struct xsc_ioctl_attr { + uint16_t opcode; /* ioctl cmd */ + uint16_t length; /* data length */ + uint32_t error; /* ioctl error info */ + uint8_t data[0]; /* specific table info */ +}; + +struct xsc_ioctl_hdr { + uint32_t check_field; + uint32_t domain; + uint32_t bus; + uint32_t devfn; + struct xsc_ioctl_attr attr; +}; + +struct xsc_ioctl_data_tl { + uint16_t table; + uint16_t opmod; + uint16_t length; + uint16_t rsvd; +}; + +struct xsc_ioctl_get_hwinfo { + uint32_t domain; + uint32_t bus; + uint32_t devfn; + uint32_t pcie_no; + uint32_t func_id; + uint32_t pcie_host; + uint32_t mac_phy_port; + uint32_t funcid_to_logic_port_off; + uint16_t lag_id; + uint16_t raw_qp_id_base; + uint16_t raw_rss_qp_id_base; + uint16_t pf0_vf_funcid_base; + uint16_t pf0_vf_funcid_top; + uint16_t pf1_vf_funcid_base; + uint16_t pf1_vf_funcid_top; + uint16_t pcie0_pf_funcid_base; + uint16_t pcie0_pf_funcid_top; + uint16_t pcie1_pf_funcid_base; + uint16_t pcie1_pf_funcid_top; + uint16_t lag_port_start; + uint16_t raw_tpe_qp_num; + int send_seg_num; + int recv_seg_num; + uint8_t on_chip_tbl_vld; + uint8_t dma_rw_tbl_vld; + uint8_t pct_compress_vld; + uint32_t chip_version; + uint32_t hca_core_clock; + uint8_t mac_bit; + uint8_t esw_mode; +}; + +int xsc_ioctl(struct xsc_dev *dev, int cmd, int opcode, + void *data_in, int in_len, void *data_out, int out_len); + +#endif /* _XSC_CTRL_H_ */