From patchwork Tue Sep 19 01:51:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Mody, Rasesh" X-Patchwork-Id: 28909 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 525501B027; Tue, 19 Sep 2017 03:52:11 +0200 (CEST) Received: from NAM02-SN1-obe.outbound.protection.outlook.com (mail-sn1nam02on0070.outbound.protection.outlook.com [104.47.36.70]) by dpdk.org (Postfix) with ESMTP id 2D5D1199AE for ; Tue, 19 Sep 2017 03:52:04 +0200 (CEST) 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=iNFzeKjF12tPlspt/JTEWEGXoNQ0w1FU0ze6yEyJF7g=; b=CWd9mnjv3vzeKSMcnOFwNoSRQfZ4CVQKBCJO3oim7N0D6XXX2iqxC0vaVjShXi+Evcy9sBOPUVaqRUFD3Xx1/7zZeQEjYHXf7aXGhM+qnvW8w+VQIk76b9pgxTjACaJ+k8KGAhCGvcsHZ9xai9zDz3lbt4D8h9kqgQw3Hmq5btE= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Rasesh.Mody@cavium.com; Received: from cavium.com (198.186.0.2) by DM5PR0701MB3832.namprd07.prod.outlook.com (2603:10b6:4:7f::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.56.11; Tue, 19 Sep 2017 01:52:02 +0000 From: Rasesh Mody To: dev@dpdk.org, ferruh.yigit@intel.com Cc: Rasesh Mody , Dept-EngDPDKDev@cavium.com Date: Mon, 18 Sep 2017 18:51:24 -0700 Message-Id: <1505785903-1741-5-git-send-email-rasesh.mody@cavium.com> X-Mailer: git-send-email 1.7.10.3 In-Reply-To: <1505785903-1741-1-git-send-email-rasesh.mody@cavium.com> References: <1505785903-1741-1-git-send-email-rasesh.mody@cavium.com> MIME-Version: 1.0 X-Originating-IP: [198.186.0.2] X-ClientProxiedBy: MWHPR14CA0048.namprd14.prod.outlook.com (2603:10b6:300:12b::34) To DM5PR0701MB3832.namprd07.prod.outlook.com (2603:10b6:4:7f::30) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b149f630-b3ab-4d65-1305-08d4ff010651 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR0701MB3832; X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3832; 3:q+PNkIHEhGZmfkTeN7qd/IxGBdk3kLqz0ye9KmfD818yUzrvAD2LTOpcPxPQqobNdxVvNhuNg8TLBlkzT9IPxqP2BqR2F1rd5lctkKiJ0T0evqDix0rJHWW37MJc0RBqbHulIWRuqJgxjA4NS3yu5X3a6XiLsCMyDePHrXZy3cnf/gk3ymWUCiOQ21KqMtOnKtYFI4MB7Gwk8X1byLYfovIjbPRiEzPlwLG7HrJLT4zr/yIoLVXwN48YAPTJnSNr; 25:TbOwTRXQyWe4QURHjDO1h2jFzRpZQlJ//yrFEM/V/CLMBYysUvHdVpbSyWqqTT75xay7FBZvWFO20GF+D1nrcARLkqvC4JO5ABhyqBsYhX8VjdShsP0Me8xqBVvmgYFs2uBcowf9L88sY9Tg2VA6IBpmi6feSTb9ExsZGA3e028zF6I/wm45nIIzJtobVt7529o8fi4MWTT0SDHV9ApYp9Q11IuAbBT05qOkMiffX267LOOC37BKI4m3YrhMu8sDsdR6L2y2FtpNdVdZcX3Q34EQ/Zhvm3ecqpN4wk/M3mOvOx87vKfjk+Jy2IXJf2Px6KyC8k4wQQ8idCRiZ+K3Ng==; 31:wV/UHtETAegt72JKJzLvtB85aLy3ar+EHmf/uUWKTMyjCJ3SiQqpwY9tjrGLDoPy+Cfwg+slSMyIe2zKurSHD4icobBOfAPtkT3TUUPNPXDye+c1Z2p60guH+OFEh3gLVogKDLGgmAP/W/5ZNdNhQ5xNLl2P8vWuPfMuWuoyhaAKQk629McZIWnqsAj0n8mNwLW7wwFkRREqPuPAcV08mF+grmnQ9bbZHIw77cXAZ1w= X-MS-TrafficTypeDiagnostic: DM5PR0701MB3832: X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3832; 20:Gj+Wm1ZsvzIpN5i3UMyd4siu9/MIRzHP2cvIzrrARrRJMw6jIf1OiCckMDwQdm9/K9jEt06VL40rXrA07D49QHpI1d1mLA2q6bJwNGOYfqGs2eVVYu7jr8HKOolG2bwbHjwYLSMhtJZ/WlR9j3gNlth8TXalFlGSZlnRZQNJFbfj4/yADztehi2wK+YEXJY22apQGt8n5McmP68O3fzNLyRN4lmdvsmPSftRd+k7CUzEVRGsX4ERK6NS3/nYf+WgfmsLNTs1X5e6LX4tDxdV3D1mhhSIy8+Z0BZpaklImsR3sgHJka2FjGM27fzCCEd0TkpmjgpMytJQNjQ0Gm565uvqQaFg9xsjWSBIVX8oxKgTNg6tQ95tOxuwumR4nLeVLVTKFFtKIFRSw/tW8uvAXpVPNul8ZH28B8CA+I5HoJhzDXwkNq/oHsdBqYPuyLKaWwBEQynabF1I0cDC2hDSRweo0BxNiPdEuS0ksO57mjtAMnBMshP+kxh8lVX0Xa8B; 4:mQLY7y2Vz62SDERxTpBzfvYr/YHKKI2Rc8DnmuxhDwc7IF4mje1uhd8zlYfiXuD7xjIB1JuGpz0CkIZJpJ9RuZvuQuJXu+ZXb44Nr8H6z83v2rqCjklNdETsokdYI9PQ/TkYf7SYAd5JbD2lzr+D9b+DyfjynZoaeDoWzpnFGsN7hdzCmQnzBU1Ry9l3vqAnn7vmdt1BG8NaK64WV7HbL7l06QW9bV2CJcQqWpcR/kEkXwkMwK8OKxSWOXGA7uIU X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(10201501046)(100000703101)(100105400095)(93006095)(93001095)(3002001)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR0701MB3832; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR0701MB3832; X-Forefront-PRVS: 04359FAD81 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6009001)(376002)(346002)(199003)(189002)(72206003)(106356001)(305945005)(105586002)(7736002)(36756003)(2950100002)(50226002)(478600001)(25786009)(6666003)(3846002)(4720700003)(55016002)(8676002)(189998001)(66066001)(5003940100001)(81166006)(81156014)(50986999)(107886003)(76176999)(316002)(5660300001)(16526017)(16586007)(47776003)(4326008)(6116002)(33646002)(21086003)(86362001)(8936002)(97736004)(575784001)(68736007)(69596002)(53936002)(50466002)(2906002)(48376002)(101416001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR0701MB3832; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR0701MB3832; 23:nSU9AVQ/AxsD/ZnzLfRBkl5KtaKg8rQrpbUwIok?= 18YlPAUAicNYJaRZXtCIwiWq8bDiQK1X8NrxurMf68kYmB1SJParsVB25QVe3wDji7r0w6mqF//oYJifK4eAQvBDzg7QKMVyiFv6Guygc5KMCR1TJxyzm960EdOqDJMwdn1tmlkAUI28ZXPFFj8woX7tmLncVmL4XHp3PwZhCt1JN0tNkX6vJfvTRw2DBoIJR3razDgzjNP73eEvC8gEV6rCiFlr8uoNNawoynwCI8ruYpiKUe9teBEQgHgjXYz1fFrpPhBf33tcfNaGk4ZMZFCgp55PxRzwa+0Wow/+BFUerZSwU9yEFgUTcHFNFzIEuQTk5pWGdhP0dhS1rwR0OZs0HwWqllpiFoIflqD+4qcxnSioNFkomzCql/zZiFF5KCv6RkTuj5r41LQDODrvLeZCZssm5Ul6MbsVuR7NUlkbHfHB8MubY/MTiZy/A6D99xOv7kPiHBudA96ejgg1Ve+h8y8tcds15e38etHe54610wIukXt7Iw5L0+iazgLKiXloFIWJXHQzgJ9iJLbyE+Hk4ACzoHz8dE0JL5B7Eoge9Lx4D25GkhcmpA/u+hAjVEKz+qIOW6h6zjzUqgC4sv3ffoDwhtMc7X51Sd7DZfkeS/i+Ms86zas4YNMuNtYCg8w2Il3zcIfe7fLyidEmHYcXRAwOFL/PVLN7HH8Yq4mMGSguxb8XITiZC+KzLMPjTrGBxalLctrFDz5wONN84l+ZELAYaZs2lPPsx4pCVuOjKICGrRoOpEDMgEGONx1MqUPk6bQlaixgWzEXGx4Y8Dg3zrl3XNXsqtFtYIsD7HOrFTPVWSvNWIRIDL93wctLoE4R/oKQjSwlNBNqzDM2Xca0NtAcilM0yJ/4t0Sua+cpUaTdpe34nU5/JO2cghMpy0tbDGGqGlJ/kqAeBkRtv3Nf3HxT+k6CcpcBdxzZAokQLb3Ln51XeohcMvXx/8bohMFSsFYDlWSAtftgJIlzLOUsZiIVF6NkFtCrEgsJEwsrZpu+ewKCNhcAc//Kdr02hhagC/ciG377T+Cm8CGbMpQK2wzw8mm+8S1edtW7YbjyGiA9wqXbcsGX2M4I2Klds+UFlMq7SNmsdS0UZOH+sg8D8 X-Microsoft-Exchange-Diagnostics: 1; DM5PR0701MB3832; 6:3yMdPTl8BoGL4Nj1YBPSvxKJ2fdFRzMJl3w1wslZCmqXxKvaJR8MFsvd9/6ybUIzhuxNTNt2bYQjU+Fz0wmPSbWwR4L2wKEZv33i7EUaHeADb0eYkvK1uHUxUIcNjf3QNIXF8A6ei9GmAz+oa2OGgCFV0YxZ3X1gmdhPOhgGeyWPjU7ZjOvX/riF0He2SbhIEl+2mHtPiZpDAFcg5qnMLMO1Lk6hUYqIhsKa6QMIKiyFYwoCwPISKarebWTmO1o7OWjTs3Z3WMZnrH+qCMIvcfJw7KwQyVlJHSCcOaB67iJ1qCXTjoNCl7KgRvpjHKewl5eefgpzX5v0ZxrSDI33Sg==; 5:5R9W8gJEQPz2Vx0WlmjG0q2EgmqZf81bJf4Q1Kbla3sJTb3SsldvmD7LEO82QffECcDNmCqJhWLJPccmJVehpJ0PP5JUJdAh5SigwiRc3EcFW0AV4Dm5E+zf5cKrAtXg6KwbZ4rdpLGIvch4cr42vA==; 24:bR65rzusCrb9hbpm4kyrGCL4wB8Uw1+u6Vvq0ZmeGxTtkA9kN6r6kx4AelFDE8PqCZ9Wyh2kqfzFklpmRIG6H0ii02LhVXmzgsIbVzRM6VU=; 7:kUt5kmHB5oZKw8GD2LhUE3shWroagUcDzou649apImem62lJ/ikB0nMGr0J6lX+jf5R1vYSh6CQd48LmcvxXytdD53u4xHxuWVFke/8p9rKL0XYeEH79i/0hdS/jlxzFIm9DB0ZPgBrAw5rwEtVISemM6+o1RTd4Ted/RFL8Q5H6XHONXq+lXu3GE0RwWVA9kwus23pjPpuowjXpXDglg3Hwvp9NgVx0jW41+4pIN9U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2017 01:52:02.7890 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR0701MB3832 Subject: [dpdk-dev] [PATCH 34/53] net/qede/base: use function pointers for spq async callback X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Change spq async callback to use function pointers instead of switch case on protocolid. Signed-off-by: Rasesh Mody --- drivers/net/qede/base/ecore_spq.c | 38 +++++++++++++++++++++++++++++------ drivers/net/qede/base/ecore_spq.h | 17 ++++++++++++++++ drivers/net/qede/base/ecore_sriov.c | 20 ++++++++++++++---- drivers/net/qede/base/ecore_sriov.h | 13 ------------ 4 files changed, 65 insertions(+), 23 deletions(-) diff --git a/drivers/net/qede/base/ecore_spq.c b/drivers/net/qede/base/ecore_spq.c index ee0f06c..a346166 100644 --- a/drivers/net/qede/base/ecore_spq.c +++ b/drivers/net/qede/base/ecore_spq.c @@ -271,12 +271,16 @@ static enum _ecore_status_t ecore_spq_hw_post(struct ecore_hwfn *p_hwfn, ecore_async_event_completion(struct ecore_hwfn *p_hwfn, struct event_ring_entry *p_eqe) { - switch (p_eqe->protocol_id) { - case PROTOCOLID_COMMON: - return ecore_sriov_eqe_event(p_hwfn, - p_eqe->opcode, - p_eqe->echo, &p_eqe->data); - default: + ecore_spq_async_comp_cb cb; + + if (!p_hwfn->p_spq || (p_eqe->protocol_id >= MAX_PROTOCOL_TYPE)) + return ECORE_INVAL; + + cb = p_hwfn->p_spq->async_comp_cb[p_eqe->protocol_id]; + if (cb) { + return cb(p_hwfn, p_eqe->opcode, p_eqe->echo, + &p_eqe->data, p_eqe->fw_return_code); + } else { DP_NOTICE(p_hwfn, true, "Unknown Async completion for protocol: %d\n", p_eqe->protocol_id); @@ -284,6 +288,28 @@ static enum _ecore_status_t ecore_spq_hw_post(struct ecore_hwfn *p_hwfn, } } +enum _ecore_status_t +ecore_spq_register_async_cb(struct ecore_hwfn *p_hwfn, + enum protocol_type protocol_id, + ecore_spq_async_comp_cb cb) +{ + if (!p_hwfn->p_spq || (protocol_id >= MAX_PROTOCOL_TYPE)) + return ECORE_INVAL; + + p_hwfn->p_spq->async_comp_cb[protocol_id] = cb; + return ECORE_SUCCESS; +} + +void +ecore_spq_unregister_async_cb(struct ecore_hwfn *p_hwfn, + enum protocol_type protocol_id) +{ + if (!p_hwfn->p_spq || (protocol_id >= MAX_PROTOCOL_TYPE)) + return; + + p_hwfn->p_spq->async_comp_cb[protocol_id] = OSAL_NULL; +} + /*************************************************************************** * EQ API ***************************************************************************/ diff --git a/drivers/net/qede/base/ecore_spq.h b/drivers/net/qede/base/ecore_spq.h index 31d8a3e..526cff0 100644 --- a/drivers/net/qede/base/ecore_spq.h +++ b/drivers/net/qede/base/ecore_spq.h @@ -86,6 +86,22 @@ struct ecore_consq { struct ecore_chain chain; }; +typedef enum _ecore_status_t +(*ecore_spq_async_comp_cb)(struct ecore_hwfn *p_hwfn, + u8 opcode, + u16 echo, + union event_ring_data *data, + u8 fw_return_code); + +enum _ecore_status_t +ecore_spq_register_async_cb(struct ecore_hwfn *p_hwfn, + enum protocol_type protocol_id, + ecore_spq_async_comp_cb cb); + +void +ecore_spq_unregister_async_cb(struct ecore_hwfn *p_hwfn, + enum protocol_type protocol_id); + struct ecore_spq { osal_spinlock_t lock; @@ -127,6 +143,7 @@ struct ecore_spq { u32 db_addr_offset; struct core_db_data db_data; + ecore_spq_async_comp_cb async_comp_cb[MAX_PROTOCOL_TYPE]; }; struct ecore_port; diff --git a/drivers/net/qede/base/ecore_sriov.c b/drivers/net/qede/base/ecore_sriov.c index 53d6b36..2b8e24c 100644 --- a/drivers/net/qede/base/ecore_sriov.c +++ b/drivers/net/qede/base/ecore_sriov.c @@ -27,6 +27,12 @@ #include "ecore_init_fw_funcs.h" #include "ecore_sp_commands.h" +static enum _ecore_status_t ecore_sriov_eqe_event(struct ecore_hwfn *p_hwfn, + u8 opcode, + __le16 echo, + union event_ring_data *data, + u8 fw_return_code); + const char *ecore_channel_tlvs_string[] = { "CHANNEL_TLV_NONE", /* ends tlv sequence */ "CHANNEL_TLV_ACQUIRE", @@ -591,6 +597,9 @@ enum _ecore_status_t ecore_iov_alloc(struct ecore_hwfn *p_hwfn) p_hwfn->pf_iov_info = p_sriov; + ecore_spq_register_async_cb(p_hwfn, PROTOCOLID_COMMON, + ecore_sriov_eqe_event); + return ecore_iov_allocate_vfdb(p_hwfn); } @@ -604,6 +613,8 @@ void ecore_iov_setup(struct ecore_hwfn *p_hwfn) void ecore_iov_free(struct ecore_hwfn *p_hwfn) { + ecore_spq_unregister_async_cb(p_hwfn, PROTOCOLID_COMMON); + if (IS_PF_SRIOV_ALLOC(p_hwfn)) { ecore_iov_free_vfdb(p_hwfn); OSAL_FREE(p_hwfn->p_dev, p_hwfn->pf_iov_info); @@ -4195,10 +4206,11 @@ static void ecore_sriov_vfpf_malicious(struct ecore_hwfn *p_hwfn, OSAL_PF_VF_MALICIOUS(p_hwfn, p_vf->relative_vf_id); } -enum _ecore_status_t ecore_sriov_eqe_event(struct ecore_hwfn *p_hwfn, - u8 opcode, - __le16 echo, - union event_ring_data *data) +static enum _ecore_status_t ecore_sriov_eqe_event(struct ecore_hwfn *p_hwfn, + u8 opcode, + __le16 echo, + union event_ring_data *data, + u8 OSAL_UNUSED fw_return_code) { switch (opcode) { case COMMON_EVENT_VF_PF_CHANNEL: diff --git a/drivers/net/qede/base/ecore_sriov.h b/drivers/net/qede/base/ecore_sriov.h index effeb69..31bdee1 100644 --- a/drivers/net/qede/base/ecore_sriov.h +++ b/drivers/net/qede/base/ecore_sriov.h @@ -254,19 +254,6 @@ void ecore_dp_tlv_list(struct ecore_hwfn *p_hwfn, void ecore_iov_free_hw_info(struct ecore_dev *p_dev); /** - * @brief ecore_sriov_eqe_event - handle async sriov event arrived on eqe. - * - * @param p_hwfn - * @param opcode - * @param echo - * @param data - */ -enum _ecore_status_t ecore_sriov_eqe_event(struct ecore_hwfn *p_hwfn, - u8 opcode, - __le16 echo, - union event_ring_data *data); - -/** * @brief Mark structs of vfs that have been FLR-ed. * * @param p_hwfn