Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6314536imu; Sun, 2 Dec 2018 15:12:26 -0800 (PST) X-Google-Smtp-Source: AFSGD/Vrbnn+TfplMtCmSumcprocj/YxCdhHiCsC5ETnAGxn8sxYeQAt74LUn9afyWTMoDRccimD X-Received: by 2002:a17:902:24d:: with SMTP id 71mr13344954plc.225.1543792346170; Sun, 02 Dec 2018 15:12:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543792346; cv=none; d=google.com; s=arc-20160816; b=CerFN+2AHOqRu8pVWSfPIuhDOcp//BAeETlFpCUGfqkn/bDZ3WCyHyrpcffv4czOHL E4S9J/HANxvRpniYIYtssTykmCAgUte/SoiFXbmhXkCjy6qQRLHnU+cRjDoLU7NG57Ff AN/Cxj3Lph9sgGlqH9u6j9gT5bwGV8SYDarqCLT1gGxeW4MM/8mSX7+Nd1GPT0U+pmkt Fas6AkZCTS8DgV8xE4D6VyK9sKkMoMfQ0bYjl5Sni+5IWUfo6NtbYHITjqsntPSyItq+ eQCak4Ea8plThfCwk4nSSv0PtwENIzdTRB7BOsW0AI/RqjI/Fx4eNiViQgAOZ+NrWPh1 Gdrw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=/OWEPzTGkrXMVhgrnFvsTiceHJTTYsrgVKfujEcQzpQ=; b=kw5D8Am/ntEjVQSZx87rfsnZFKhMedrjWJia8VlvpKgqfbK8ySTVR488CAw7KNc7V8 JecV5s7aPJbEsgtLzMoloRmEonDi0es5vYuD+bSIPJw7CL4v8OHGwcaKk0D/OGsTSjxY KtvjJAAdmmeffsQunTCSbiD7TCQQkaAGY9thYcxuYI12t2Ub+hXeYlog6LxgycXPMfA6 bd93w1RhSGjtPT4pxRa7m/EYdmWe4jjyt7zHAYA2C4HQM9ISUNSujVK5P4cdFmofjRrs Mus4KkqUbm71gBvnBDu9r9ZeGUd91GOu9nhdLK6OmRaWcW0XtPWC2gg3TS3K725fyqge 4xDQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d16si11975492pfn.169.2018.12.02.15.12.11; Sun, 02 Dec 2018 15:12:26 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725908AbeLBXLW (ORCPT + 99 others); Sun, 2 Dec 2018 18:11:22 -0500 Received: from szxga07-in.huawei.com ([45.249.212.35]:52072 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725825AbeLBXLW (ORCPT ); Sun, 2 Dec 2018 18:11:22 -0500 Received: from DGGEMS403-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 2C24E1FFDE532; Mon, 3 Dec 2018 07:11:18 +0800 (CST) Received: from S00293818-DELL1.china.huawei.com (10.47.90.156) by DGGEMS403-HUB.china.huawei.com (10.3.19.203) with Microsoft SMTP Server id 14.3.408.0; Mon, 3 Dec 2018 07:11:11 +0800 From: Salil Mehta To: CC: , , , , , , , liuzhongzhu Subject: [RFC net-next 3/9] net: hns3: Add "port vlan table" information query function Date: Sun, 2 Dec 2018 23:09:27 +0000 Message-ID: <20181202230933.15560-4-salil.mehta@huawei.com> X-Mailer: git-send-email 2.8.3 In-Reply-To: <20181202230933.15560-1-salil.mehta@huawei.com> References: <20181202230933.15560-1-salil.mehta@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.47.90.156] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: liuzhongzhu This patch prints port vlan table information. debugfs command: echo dump port vlan tbl > cmd Sample Command: root@(none)# echo dump port vlan tbl > cmd vlan | port filter bitMap: 0000 | 00000000:00000000:00000000:00000000:00000000:00000001 root@(none)# Signed-off-by: liuzhongzhu Signed-off-by: Salil Mehta --- drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c | 1 + .../ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c | 80 ++++++++++++++++++++++ .../ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h | 3 + 3 files changed, 84 insertions(+) diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c index e59591b1258b..51af55f34e55 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_debugfs.c @@ -211,6 +211,7 @@ static void hns3_dbg_help(struct hnae3_handle *h) dev_info(&h->pdev->dev, "dump qos pri map\n"); dev_info(&h->pdev->dev, "dump qos buf cfg\n"); dev_info(&h->pdev->dev, "dump mac tbl\n"); + dev_info(&h->pdev->dev, "dump port vlan tbl\n"); } static ssize_t hns3_dbg_cmd_read(struct file *filp, char __user *buffer, diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c index 19b76f5e93d7..4a034a59fcb2 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.c @@ -530,6 +530,84 @@ static void hclge_dbg_dump_mac_table(struct hclge_dev *hdev) kfree(mc_mac_tbl); } +static void hclge_dbg_dump_port_vlan_table(struct hclge_dev *hdev) +{ + struct hclge_vlan_filter_pf_cfg_cmd *req; + char printf_buf[HCLGE_DBG_BUF_LEN]; + struct hclge_desc desc; + u32 *vlan_bitmap; + u8 vlan_byte_val; + u8 vlan_offset; + u8 vlan_byte; + int vlan_len; + u32 vlan_id; + int ret, i; + bool flag; + + vlan_len = HCLGE_DBG_VLAN_ID_MAX / 8; + vlan_bitmap = kzalloc(vlan_len, GFP_KERNEL); + if (!vlan_bitmap) { + dev_err(&hdev->pdev->dev, + "port vlan table alloc memory failed\n"); + return; + } + + for (vlan_id = 0; vlan_id < HCLGE_DBG_VLAN_ID_MAX; vlan_id++) { + /* Prevent long-term occupation of the command channel. */ + if ((vlan_id % 100) == 0) + msleep(100); + + hclge_cmd_setup_basic_desc(&desc, + HCLGE_OPC_VLAN_FILTER_PF_CFG, true); + + vlan_offset = vlan_id / 160; + vlan_byte = (vlan_id % 160) / 8; + vlan_byte_val = 1 << (vlan_id % 8); + + req = (struct hclge_vlan_filter_pf_cfg_cmd *)desc.data; + req->vlan_offset = vlan_offset; + req->vlan_offset_bitmap[vlan_byte] = vlan_byte_val; + + ret = hclge_cmd_send(&hdev->hw, &desc, 1); + if (ret) { + dev_err(&hdev->pdev->dev, + "call hclge_cmd_send fail, ret = %d\n", ret); + kfree(vlan_bitmap); + return; + } + + if (req->vlan_cfg != 0) + continue; + + vlan_bitmap[(u32)(vlan_id / 32)] |= 1 << (vlan_id % 32); + } + + dev_info(&hdev->pdev->dev, "vlan | port filter bitMap:\n"); + + for (vlan_id = 0; vlan_id < HCLGE_DBG_VLAN_ID_MAX / 32; + vlan_id += 8) { + memset(printf_buf, 0, HCLGE_DBG_BUF_LEN); + snprintf(printf_buf, HCLGE_DBG_BUF_LEN, + "%04d | ", vlan_id * 32); + flag = false; + + for (i = 7; i >= 0; i--) { + snprintf(printf_buf + strlen(printf_buf), + HCLGE_DBG_BUF_LEN - strlen(printf_buf), + "%08x:", vlan_bitmap[(u32)(vlan_id + i)]); + + if (vlan_bitmap[(u32)(vlan_id + i)] > 0) + flag = true; + } + + printf_buf[strlen(printf_buf) - 1] = '\n'; + if (flag) + dev_info(&hdev->pdev->dev, "%s", printf_buf); + } + + kfree(vlan_bitmap); +} + static void hclge_dbg_fd_tcam_read(struct hclge_dev *hdev, u8 stage, bool sel_x, u32 loc) { @@ -603,6 +681,8 @@ int hclge_dbg_run_cmd(struct hnae3_handle *handle, char *cmd_buf) hclge_dbg_dump_qos_buf_cfg(hdev); } else if (strncmp(cmd_buf, "dump mac tbl", 12) == 0) { hclge_dbg_dump_mac_table(hdev); + } else if (strncmp(cmd_buf, "dump port vlan tbl", 18) == 0) { + hclge_dbg_dump_port_vlan_table(hdev); } else { dev_info(&hdev->pdev->dev, "unknown command\n"); return -EINVAL; diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h index b5a784506b9a..f0c7ad535fcc 100644 --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_debugfs.h @@ -14,6 +14,9 @@ #define HCLGE_DBG_MAC_TBL_E_PORT 0x3FF #define HCLGE_DBG_MAC_TBL_E_PORT_B BIT(11) +#define HCLGE_DBG_VLAN_ID_MAX 4096 +#define HCLGE_DBG_MNG_TBL_MAX 64 + #pragma pack(1) struct hclge_qos_pri_map_cmd { -- 2.11.0