From patchwork Thu Apr 19 06:18:28 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 900602 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="NROqvMEN"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40RTMP4dhrz9s15 for ; Thu, 19 Apr 2018 16:18:41 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751110AbeDSGSf (ORCPT ); Thu, 19 Apr 2018 02:18:35 -0400 Received: from mail-bn3nam01on0071.outbound.protection.outlook.com ([104.47.33.71]:19808 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750716AbeDSGSd (ORCPT ); Thu, 19 Apr 2018 02:18:33 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=l8kQuIctOQUptFEd4b3m2k4mXFyNyp3byS2O4wlA9+I=; b=NROqvMENbwC1ld7KtLN33XzuMhEdVB66IU1PZP0hulxbQZ5FGrhHcI2BYBdtMOtglrT6xjHa6Tof0tMIrgcYqDYrexzlCDeXTkZh5PE9c2dxoRb4rCqR6st2QGtyO1BxM6CfE8nr5h4UEbwC+EPjEVhw2d3ND6fbv0jqZ6+JE1Y= Received: from localhost (50.233.148.156) by SN6PR07MB4224.namprd07.prod.outlook.com (2603:10b6:805:62::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.13; Thu, 19 Apr 2018 06:18:31 +0000 Date: Wed, 18 Apr 2018 23:18:28 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com, felix.manlunas@cavium.com, intiyaz.basha@cavium.com Subject: [PATCH net-next] liquidio: Added ndo_get_vf_stats support Message-ID: <20180419061828.GA4292@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: CO1PR15CA0086.namprd15.prod.outlook.com (2603:10b6:101:20::30) To SN6PR07MB4224.namprd07.prod.outlook.com (2603:10b6:805:62::17) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(5600026)(2017052603328)(7153060)(7193020); SRVR:SN6PR07MB4224; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4224; 3:TYwydkF3aLXKvcUJXF/RmFc8zRXos0GmHwEai1iRhlwdPNu896b0Cy2rQSSQEc4hE5LKrhifQ1f2VB8/PJSdGZ3rdXl4eM37Uj68uEXKyHvHAf46TK1KCrvicqwdt22VpzxonXCrDnd9Hp6b3lje0oYq+178Qod5+gOcQftyeder+0PWkDhpSY4kylXpaioBgCQ0cE6cpW+bYa8Lsahc/9KxsAwhY2s4BaddP6GsUtGWxEIVjdyNU65MS2v5wvq7; 25:fhlKN9Qk0LRu2X/BMrv54T1iYTWB9IBTkLs6txhzi3Q/DBrCd7RJXyGUW3Wz29ydQs5mN6nclKcetKw9GqxoPoobnul8FVYDip6/yuciAmvDwnbmO8vvwYP01bU0mh1DDlVCBN+2ezVEvCOREbQxUtSiyB3skIZPCRr6oedx5SghcUGVLyOw2D4uFTUM2gMM4XeOVbmvsROp+FSC2tWlSoyb7N52gg1idUq+TAGthXNk63CpRSdf/1UzlcCxBGk5kEnrbo3gSnVekJ04eC1DBH4/NNa+Vw9M4Gfr1VtUua2oUB6o20XiNDxihthhOjlxNDbYnqnG8sjONaGNrH7b8w==; 31:tY7Ghh0u6uG8lJbYGabB/tGFb60G5syqsEiDky6E9jwC+sWoNV+I4FVQLCp0aWPTrleytgxHJ1hNdU5OLFLl95p11ZxpoyRtQjkw7gDVYbMTRYJrJ8PBSG8+AXfedqbV9OZub33I8mLRpDveNEoLDyKapJ9Jj7ykzS0IuYDweshhMrTTe15YJFrZakwNq41rlKT0QEmLLVzQ0UZja2prImWJQ52sMJvQgT5h8EKGyRc= X-MS-TrafficTypeDiagnostic: SN6PR07MB4224: Authentication-Results: outbound.protection.outlook.com; spf=skipped (originating message); dkim=none (message not signed) header.d=none; dmarc=none action=none header.from=cavium.com; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4224; 20:gGswTozJGm9y5g5tYkqIHU8K9enrGXhm9SE3ujY2aj46J0ZPKJTRH5URgh2m+lrWVwbJNb8dVhz9Oi1OnORkvzzA/kT4XXUbLX0wlqkVXA7HXoix0rPmu3dtX/mW0Tjq4v4bMnh2kAtEHtSfyEw+huanw5NmY3N5I9l4GDofW15RiwtczdjCgzcim1YHQw1oK2aGr8gctYGOcAt1ceGISvOoumGPp/MNQMYr1Ia6aFXd9pRY5bFafV9sI4//nXlXUNlyB3wwt1tS+BwxQtdvP4qNYhDrqB7c0fw17UR43Ae0UQJlFi4xYc1BpmygUtckXdWtagSYkeuXqJoN3eLZK5BEzhMAnW/8EX0GeiKMGxbaSz7PKn2Wg+KjsQCt6/bWuseDWGNWggXZSqdv6fVDTpgORayu8UjOSfi2gdQqbNHM7ZQ3NuHimBmapH4XSGJ6xYN9DfU/m34u4f8xPVzeE+O2sYmDyqk2LdReUX6rZW8Ne+4QTr/sNKPUbb5p3Wpb; 4:MIku7npGxCeY6kGa53VVtMKdfK0f3BjfTHqxFYg8uVhch0PisXSVPxhGj11EfhCE036OSmk14rTIsRzIQCoMjSrDqn/d4HtP5ZWFtIbQBRwKIBKIeWxH8Lf+AgwAYEBIFzYv230c5lG02/gu9S/X51CIIiVBwJfSlioseuazYoAQrRxsHjJAynltVSR6flN95Hd2jdj/EOSacwji260dZ6lEYn7HDD50xaYUIPeimmX73EJTTHdUPLRipb6kF2g5FP4R5IGONk1MDxD0oVe1yg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(8121501046)(5005006)(3231232)(944501378)(52105095)(3002001)(10201501046)(93006095)(93001095)(6041310)(20161123560045)(20161123558120)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(6072148)(201708071742011); SRVR:SN6PR07MB4224; BCL:0; PCL:0; RULEID:; SRVR:SN6PR07MB4224; X-Forefront-PRVS: 0647963F84 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(376002)(366004)(39380400002)(39860400002)(396003)(346002)(16586007)(86362001)(478600001)(76506005)(72206003)(476003)(316002)(8676002)(25786009)(6916009)(53936002)(186003)(107886003)(23726003)(1076002)(2906002)(3846002)(8936002)(16526019)(26005)(956004)(2361001)(386003)(6116002)(305945005)(7736002)(33656002)(44832011)(50466002)(5660300001)(6496006)(52116002)(2351001)(6486002)(58126008)(4326008)(66066001)(81166006)(59450400001)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN6PR07MB4224; H:localhost; FPR:; SPF:None; LANG:en; MLV:sfv; X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4224; 23:Je1QpTagX1oZ6yzTER7eEYIZzeO9Bei8vvkXOtPRAQy2eDF7ZJTwqdMFrmGkjnwyJsOyLYArgd3JckyBZwTcwabagaNZ4yUHYSHZgqDcKvQ05ruZ6ye/DaCvdDNSX2RX0504uhw9OSlZOGeJkBhCp6dxlM6PzHNWOafN9ufzhMSYKrJWZVk3Oa05G4PsHLQxotXSBqQVlpolduHgJsRApZHL52Npqk4XizqqzA76RONBrCilC0EYRycQfMOMBp/qkFxkTGi36kUI0KVTnMrTECyNrzj62kYQK5by6LnuD+9gZH/7b4BGb6Q/xDEX4IKpICe30qdCrPScY/zzoM4Wotc5lJhPeODFOUQ2h9MfLp1KLmc+ipccb62hHIwAXJ3SD6Eo5zaMU7yEa9EGt/fy44r8/AQK0SMW7Zsu5YMViyK8WZS6+SoyPIribTxpXieRipFgIWaDMVrGMyNT3fuudMaF+1Rf8IRWHOAnRCXU+Wy3mdK6ykb2g4Irslln2ulqj3RhfB4JCr4B6i27MAHtcpAjYdtqh9Z2778+xvjuKLr9k0eTorpR8qY9WkWB8iKnbw89Dcc7nxIHl0oKKsmOX7wE3a0Ru8U0L1Hnw3v/TcYas9RbY3MDundyLfWDzEpc7t68iLXjLITFDHah2k0eAw4XUh16qziwNJ9gLMChOfmRE8UynxlnP5TDrxFCuknPTGjOUiMULsN5IE+QsnkV98FFePP2WrG3HFDbx4IxF3RRlpebFdjFmPuluE3PThX84fe3phgITLsVgN6nMovqvScn93F1lUfRqz2L2UXhiyBnrSMUrgznlOC+QZfWsIwD7AC2OjISBiAKhZpLfozYNwzcIK8GZ26uWZOVuB1gEpbnX1TreWh/zT+xzAPqk68snMLR6UilWVVXw4XfI6ZOy6ub/kKGMrUudVcRvKx37WQRyxodVCpar4fgBmdxNt37z8ORlAOV2ftsKat3LzyKrI5LforWztFLYIz3aPHNCT7B3VuWYkzZSI4nE8iqKm/Dv/8j3nP3sG7AYA9k7SHlYwbIox40kfpDP7wWow1ymmR4HbvxofADZxOjQKlwVJfd X-Microsoft-Antispam-Message-Info: lN09gcqAi/ftWryZ0BfqUv3U0lgH73suKj3U12QzwuKBc8e9dkecRLy9MaX2BxesK2kvq0VAlzMjKEqriSLSDmRFFON4g8WG4BaUzISTumvr4RTi2GZxwv8nZFKwrtaCS7dQNqgkQp3eiaLm+zo4nxFCIAO+hGKQuNSeiLchEj+gUSmDKbaE26ZOmSDkwB6s X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4224; 6:nrZu2y9tikPNehmpL+xltDu0PTMWjHe6ZjuSOH+RGyphi9RYr5fmxzXN+9jV8+/eVGs+a3AB32XuDHHTQTlMAxtqD6LNpw1BOi7+tVonKxVew1WccdE2ckJGC1RnSBzcRA1pmaSiGyV4/tE4sTDtLRbfWbT2GkkXTJZ+ds2OkCZk6wzyRtyx0EONcw2q+yL6xpwetKnCz0JOTH9KNbCeo8oQIemzhPc5jNMf/2D0F0ps0aj0zf4ZcS//gbK9n8vmB0/ZDS/RmrooyxwdxXD+b90QC3JrrSloiDtrvFwaop8F76cSg6tVq1Z4P5ihX8ZveS3GqGcvAX3VQbf7re4fKgsw++0tM+NqyPseqQkGOsA/iGiCVFFxjgyoZogb2nuDjwmOkKhkLe9LPWXAhDozm3DDxtr0DAyjJ1fJOki9HsjJc9ssggPDAdx3Yk/Jknkba7W70Vh10RKAlkbUAx/IrQ==; 5:qsI31wRL4YD/1DWYROs8v4pews08pJtmnUSIjISHNg6XtDsOxWb1kDqq+/FpbcByywjQ/2D4bu5e9PAssQwUhDDtKNkguESOGeHx2xOyTBPeS7bUUOXeHnQlkgrxSpqzcsJ0qqEsXVC7Mnx1CbcsVw0cGSv4l6EHsKQLtaFTTGI=; 24:qabQF6Ah6aTaEKcD/rLL3bhPftmZSNjLeC6C641tCSMnLSgGyuIIoqm3RdzoLvXKImXpyzCate9+9xoSgTrnZ3Y8d6jIztdF/qfkDitOoZA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN6PR07MB4224; 7:qiYBeNJKy2c8NL6b/l0O7NmKUPtaOdA1NH+68SBjA8SXXyN7JVTH+vjS9+2EOMMfa0QH0olUzyJ/IfZF0IsNAbkJj8hIp+J4ULYa62suqzW8q/i+A2WSEiYx4iEcmxRPH9j3Aaw/YIH4Fk+du72ybGVLqM3aMRjAaVdwbO2s77bu5GqHCDxe7YjxPyMhdJemeLbvXh9j9xIP0RznhDFVSphPZQ/USut8O3Hjki+yq3R9a88NUu7yJ6LLbBJ8Usiq X-MS-Office365-Filtering-Correlation-Id: 2d349331-ebeb-45ac-663e-08d5a5bd5fda X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Apr 2018 06:18:31.6624 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 2d349331-ebeb-45ac-663e-08d5a5bd5fda X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR07MB4224 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha Added the ndo to gather VF statistics through the PF. Collect VF statistics via mailbox from VF. Signed-off-by: Intiyaz Basha Signed-off-by: Felix Manlunas --- .../ethernet/cavium/liquidio/cn23xx_pf_device.c | 54 ++++++++++++++++++++++ .../ethernet/cavium/liquidio/cn23xx_pf_device.h | 12 +++++ drivers/net/ethernet/cavium/liquidio/lio_main.c | 26 +++++++++++ .../net/ethernet/cavium/liquidio/octeon_mailbox.c | 52 +++++++++++++++++++++ .../net/ethernet/cavium/liquidio/octeon_mailbox.h | 7 +++ 5 files changed, 151 insertions(+) diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c index e8b2904..bc9861c 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.c @@ -1497,3 +1497,57 @@ void cn23xx_tell_vf_its_macaddr_changed(struct octeon_device *oct, int vfidx, octeon_mbox_write(oct, &mbox_cmd); } } + +static void +cn23xx_get_vf_stats_callback(struct octeon_device *oct, + struct octeon_mbox_cmd *cmd, void *arg) +{ + struct oct_vf_stats_ctx *ctx = arg; + + memcpy(ctx->stats, cmd->data, sizeof(struct oct_vf_stats)); + atomic_set(&ctx->status, 1); +} + +int cn23xx_get_vf_stats(struct octeon_device *oct, int vfidx, + struct oct_vf_stats *stats) +{ + u32 timeout = HZ; // 1sec + struct octeon_mbox_cmd mbox_cmd; + struct oct_vf_stats_ctx ctx; + u32 count = 0, ret; + + if (!(oct->sriov_info.vf_drv_loaded_mask & (1ULL << vfidx))) + return -1; + + if (sizeof(struct oct_vf_stats) > sizeof(mbox_cmd.data)) + return -1; + + mbox_cmd.msg.u64 = 0; + mbox_cmd.msg.s.type = OCTEON_MBOX_REQUEST; + mbox_cmd.msg.s.resp_needed = 1; + mbox_cmd.msg.s.cmd = OCTEON_GET_VF_STATS; + mbox_cmd.msg.s.len = 1; + mbox_cmd.q_no = vfidx * oct->sriov_info.rings_per_vf; + mbox_cmd.recv_len = 0; + mbox_cmd.recv_status = 0; + mbox_cmd.fn = (octeon_mbox_callback_t)cn23xx_get_vf_stats_callback; + ctx.stats = stats; + atomic_set(&ctx.status, 0); + mbox_cmd.fn_arg = (void *)&ctx; + memset(mbox_cmd.data, 0, sizeof(mbox_cmd.data)); + octeon_mbox_write(oct, &mbox_cmd); + + do { + schedule_timeout_uninterruptible(1); + } while ((atomic_read(&ctx.status) == 0) && (count++ < timeout)); + + ret = atomic_read(&ctx.status); + if (ret == 0) { + octeon_mbox_cancel(oct, 0); + dev_err(&oct->pci_dev->dev, "Unable to get stats from VF-%d, timedout\n", + vfidx); + return -1; + } + + return 0; +} diff --git a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h index 2aba524..63b3de4 100644 --- a/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h +++ b/drivers/net/ethernet/cavium/liquidio/cn23xx_pf_device.h @@ -43,6 +43,15 @@ struct octeon_cn23xx_pf { #define CN23XX_SLI_DEF_BP 0x40 +struct oct_vf_stats { + u64 rx_packets; + u64 tx_packets; + u64 rx_bytes; + u64 tx_bytes; + u64 broadcast; + u64 multicast; +}; + int setup_cn23xx_octeon_pf_device(struct octeon_device *oct); int validate_cn23xx_pf_config_info(struct octeon_device *oct, @@ -56,4 +65,7 @@ int validate_cn23xx_pf_config_info(struct octeon_device *oct, void cn23xx_tell_vf_its_macaddr_changed(struct octeon_device *oct, int vfidx, u8 *mac); + +int cn23xx_get_vf_stats(struct octeon_device *oct, int ifidx, + struct oct_vf_stats *stats); #endif diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 603a144..6f2a5dd 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -3324,6 +3324,31 @@ static int liquidio_set_vf_link_state(struct net_device *netdev, int vfidx, .switchdev_port_attr_get = lio_pf_switchdev_attr_get, }; +static int liquidio_get_vf_stats(struct net_device *netdev, int vfidx, + struct ifla_vf_stats *vf_stats) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + struct oct_vf_stats stats; + int ret; + + if (vfidx < 0 || vfidx >= oct->sriov_info.num_vfs_alloced) + return -EINVAL; + + memset(&stats, 0, sizeof(struct oct_vf_stats)); + ret = cn23xx_get_vf_stats(oct, vfidx, &stats); + if (!ret) { + vf_stats->rx_packets = stats.rx_packets; + vf_stats->tx_packets = stats.tx_packets; + vf_stats->rx_bytes = stats.rx_bytes; + vf_stats->tx_bytes = stats.tx_bytes; + vf_stats->broadcast = stats.broadcast; + vf_stats->multicast = stats.multicast; + } + + return ret; +} + static const struct net_device_ops lionetdevops = { .ndo_open = liquidio_open, .ndo_stop = liquidio_stop, @@ -3346,6 +3371,7 @@ static int liquidio_set_vf_link_state(struct net_device *netdev, int vfidx, .ndo_get_vf_config = liquidio_get_vf_config, .ndo_set_vf_trust = liquidio_set_vf_trust, .ndo_set_vf_link_state = liquidio_set_vf_link_state, + .ndo_get_vf_stats = liquidio_get_vf_stats, }; /** \brief Entry point for the liquidio module diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c b/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c index 28e74ee..021d99c 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.c @@ -24,6 +24,7 @@ #include "octeon_device.h" #include "octeon_main.h" #include "octeon_mailbox.h" +#include "cn23xx_pf_device.h" /** * octeon_mbox_read: @@ -205,6 +206,26 @@ int octeon_mbox_write(struct octeon_device *oct, return ret; } +static void get_vf_stats(struct octeon_device *oct, + struct oct_vf_stats *stats) +{ + int i; + + for (i = 0; i < oct->num_iqs; i++) { + if (!oct->instr_queue[i]) + continue; + stats->tx_packets += oct->instr_queue[i]->stats.tx_done; + stats->tx_bytes += oct->instr_queue[i]->stats.tx_tot_bytes; + } + + for (i = 0; i < oct->num_oqs; i++) { + if (!oct->droq[i]) + continue; + stats->rx_packets += oct->droq[i]->stats.rx_pkts_received; + stats->rx_bytes += oct->droq[i]->stats.rx_bytes_received; + } +} + /** * octeon_mbox_process_cmd: * @mbox: Pointer mailbox @@ -250,6 +271,15 @@ static int octeon_mbox_process_cmd(struct octeon_mbox *mbox, mbox_cmd->msg.s.params); break; + case OCTEON_GET_VF_STATS: + dev_dbg(&oct->pci_dev->dev, "Got VF stats request. Sending data back\n"); + mbox_cmd->msg.s.type = OCTEON_MBOX_RESPONSE; + mbox_cmd->msg.s.resp_needed = 1; + mbox_cmd->msg.s.len = 1 + + sizeof(struct oct_vf_stats) / sizeof(u64); + get_vf_stats(oct, (struct oct_vf_stats *)mbox_cmd->data); + octeon_mbox_write(oct, mbox_cmd); + break; default: break; } @@ -322,3 +352,25 @@ int octeon_mbox_process_message(struct octeon_mbox *mbox) return 0; } + +int octeon_mbox_cancel(struct octeon_device *oct, int q_no) +{ + struct octeon_mbox *mbox = oct->mbox[q_no]; + struct octeon_mbox_cmd *mbox_cmd; + unsigned long flags = 0; + + spin_lock_irqsave(&mbox->lock, flags); + mbox_cmd = &mbox->mbox_resp; + + if (!(mbox->state & OCTEON_MBOX_STATE_RESPONSE_PENDING)) { + spin_unlock_irqrestore(&mbox->lock, flags); + return 1; + } + + mbox->state = OCTEON_MBOX_STATE_IDLE; + memset(mbox_cmd, 0, sizeof(*mbox_cmd)); + writeq(OCTEON_PFVFSIG, mbox->mbox_read_reg); + spin_unlock_irqrestore(&mbox->lock, flags); + + return 0; +} diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.h b/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.h index 1def22a..d92bd7e 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_mailbox.h @@ -25,6 +25,7 @@ #define OCTEON_VF_ACTIVE 0x1 #define OCTEON_VF_FLR_REQUEST 0x2 #define OCTEON_PF_CHANGED_VF_MACADDR 0x4 +#define OCTEON_GET_VF_STATS 0x8 /*Macro for Read acknowldgement*/ #define OCTEON_PFVFACK 0xffffffffffffffffULL @@ -107,9 +108,15 @@ struct octeon_mbox { }; +struct oct_vf_stats_ctx { + atomic_t status; + struct oct_vf_stats *stats; +}; + int octeon_mbox_read(struct octeon_mbox *mbox); int octeon_mbox_write(struct octeon_device *oct, struct octeon_mbox_cmd *mbox_cmd); int octeon_mbox_process_message(struct octeon_mbox *mbox); +int octeon_mbox_cancel(struct octeon_device *oct, int q_no); #endif