From patchwork Thu Apr 21 21:38:36 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: dykmanj@linux.vnet.ibm.com X-Patchwork-Id: 92475 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 46F0FB6FDB for ; Fri, 22 Apr 2011 07:40:26 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755470Ab1DUVkS (ORCPT ); Thu, 21 Apr 2011 17:40:18 -0400 Received: from e5.ny.us.ibm.com ([32.97.182.145]:53575 "EHLO e5.ny.us.ibm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755214Ab1DUVkQ (ORCPT ); Thu, 21 Apr 2011 17:40:16 -0400 Received: from d01relay05.pok.ibm.com (d01relay05.pok.ibm.com [9.56.227.237]) by e5.ny.us.ibm.com (8.14.4/8.13.1) with ESMTP id p3LLE2Tg007805 for ; Thu, 21 Apr 2011 17:14:02 -0400 Received: from d01av01.pok.ibm.com (d01av01.pok.ibm.com [9.56.224.215]) by d01relay05.pok.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id p3LLdBAF158284 for ; Thu, 21 Apr 2011 17:39:20 -0400 Received: from d01av01.pok.ibm.com (loopback [127.0.0.1]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id p3LLd93J012515 for ; Thu, 21 Apr 2011 17:39:09 -0400 Received: from c250f05gpfs06.ppd.pok.ibm.com (c250f05gpfs06.ppd.pok.ibm.com [9.114.87.187]) by d01av01.pok.ibm.com (8.14.4/8.13.1/NCO v10.0 AVin) with ESMTP id p3LLd8uI012447; Thu, 21 Apr 2011 17:39:09 -0400 From: dykmanj@linux.vnet.ibm.com To: netdev@vger.kernel.org Cc: Jim Dykman , Piyush Chaudhary , Fu-Chung Chang , " William S. Cadden" , " Wen C. Chen" , Scot Sakolish , Jian Xiao , " Carol L. Soto" , " Sarah J. Sheppard" Subject: [PATCH v3 06/27] HFI: Add DD calls to START/STOP INTERFACE HCALLs Date: Thu, 21 Apr 2011 17:38:36 -0400 Message-Id: <1303421937-2325-7-git-send-email-dykmanj@linux.vnet.ibm.com> X-Mailer: git-send-email 1.7.3.5 In-Reply-To: <1303421937-2325-1-git-send-email-dykmanj@linux.vnet.ibm.com> References: <1303421937-2325-1-git-send-email-dykmanj@linux.vnet.ibm.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jim Dykman Signed-off-by: Piyush Chaudhary Signed-off-by: Jim Dykman Signed-off-by: Fu-Chung Chang Signed-off-by: William S. Cadden Signed-off-by: Wen C. Chen Signed-off-by: Scot Sakolish Signed-off-by: Jian Xiao Signed-off-by: Carol L. Soto Signed-off-by: Sarah J. Sheppard --- drivers/net/hfi/core/hfidd_init.c | 97 +++++++++++++++++++++++++++++++++++++ 1 files changed, 97 insertions(+), 0 deletions(-) diff --git a/drivers/net/hfi/core/hfidd_init.c b/drivers/net/hfi/core/hfidd_init.c index d181d97..bbfc477 100644 --- a/drivers/net/hfi/core/hfidd_init.c +++ b/drivers/net/hfi/core/hfidd_init.c @@ -318,6 +318,93 @@ hfidd_create_devices_error0: return rc; } +/* + * Disable message passing to each adapter by calling the + * Stop Interface hcall. + */ +static void hfidd_stop_adapter(void) +{ + int i; + + for (i = 0; i < MAX_HFIS; i++) { + hfidd_stop_interface(hfidd_global.p_acs[i], + hfidd_global.p_acs[i]->dds.hfi_id); + } +} + +/* + * Query the interface to check the logical state of HFI. + * Enable message passing to each adapter by calling Start + * Interface hcall. + */ +static int hfidd_start_adapter(void) +{ + unsigned long long hfi_state; + int i, j; + int rc = 0; + + for (i = 0; i < MAX_HFIS; i++) { + rc = hfidd_query_interface(hfidd_global.p_acs[i], COMP_QUERY, + hfidd_global.p_acs[i]->dds.hfi_id, &hfi_state); + if (hfi_state != NOT_STARTED) { + rc = hfidd_stop_interface(hfidd_global.p_acs[i], + hfidd_global.p_acs[i]->dds.hfi_id); + if (rc) { + dev_printk(KERN_ERR, + hfidd_global.p_acs[i]->hfidd_dev, + "%s: hfidd_start_adapter:" + " hfidd_stop_interface failed rc = " + " 0x%x\n", hfidd_global.p_acs[i]->name, + rc); + } + + rc = hfidd_query_interface(hfidd_global.p_acs[i], + COMP_QUERY, + hfidd_global.p_acs[i]->dds.hfi_id, + &hfi_state); + if (hfi_state != NOT_STARTED) { + dev_printk(KERN_ERR, + hfidd_global.p_acs[i]->hfidd_dev, + "%s: hfidd_start_adapter: query" + " interface bad state 0x%llx\n", + hfidd_global.p_acs[i]->name, hfi_state); + return -EIO; + } + } + + } + + for (i = 0; i < MAX_HFIS; i++) { + rc = hfidd_start_interface(hfidd_global.p_acs[i]); + if (rc) { + dev_printk(KERN_ERR, hfidd_global.p_acs[i]->hfidd_dev, + "%s: hfidd_start_adapter: " + "hfidd_start_interface failed rc = " + "%d\n", hfidd_global.p_acs[i]->name, rc); + goto hfidd_start_adapter_err; + } + + /* query interface to get src ISR */ + rc = hfidd_query_interface(hfidd_global.p_acs[i], COMP_QUERY, + hfidd_global.p_acs[i]->dds.hfi_id, &hfi_state); + if (rc) { + dev_printk(KERN_ERR, hfidd_global.p_acs[i]->hfidd_dev, + "%s: hfidd_start_adapter: " + "hfidd_query_interface failed rc = %d\n", + hfidd_global.p_acs[i]->name, rc); + goto hfidd_start_adapter_err; + } + } + return 0; + +hfidd_start_adapter_err: + for (j = 0; j < i; j++) { + hfidd_stop_interface(hfidd_global.p_acs[j], + hfidd_global.p_acs[j]->dds.hfi_id); + } + return rc; +} + static int __init hfidd_mod_init(void) { int rc = 0; @@ -338,9 +425,18 @@ static int __init hfidd_mod_init(void) goto error1; } + rc = hfidd_start_adapter(); + if (rc < 0) { + printk(KERN_ERR "%s: hfidd_mod_init: hfidd_start_adapter failed" + " rc = %d\n", HFIDD_DEV_NAME, rc); + goto error2; + } + printk(KERN_INFO "IBM hfi device driver loaded sucessfully\n"); return 0; +error2: + hfidd_destroy_devices(); error1: hfidd_destroy_class(); return rc; @@ -348,6 +444,7 @@ error1: static void __exit hfidd_mod_exit(void) { + hfidd_stop_adapter(); hfidd_destroy_devices(); hfidd_destroy_class(); }