From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 4EE828E8C for ; Sun, 13 Dec 2015 05:58:00 +0100 (CET) Received: from fmsmga002.fm.intel.com ([10.253.24.26]) by fmsmga103.fm.intel.com with ESMTP; 12 Dec 2015 20:57:59 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.20,420,1444719600"; d="scan'208";a="872514061" Received: from shilc102.sh.intel.com ([10.239.39.44]) by fmsmga002.fm.intel.com with ESMTP; 12 Dec 2015 20:57:59 -0800 Received: from shecgisg003.sh.intel.com (shecgisg003.sh.intel.com [10.239.29.90]) by shilc102.sh.intel.com with ESMTP id tBD4vv86003199; Sun, 13 Dec 2015 12:57:57 +0800 Received: from shecgisg003.sh.intel.com (localhost [127.0.0.1]) by shecgisg003.sh.intel.com (8.13.6/8.13.6/SuSE Linux 0.8) with ESMTP id tBD4vsLC004426; Sun, 13 Dec 2015 12:57:56 +0800 Received: (from yliu84x@localhost) by shecgisg003.sh.intel.com (8.13.6/8.13.6/Submit) id tBD4vsHZ004422; Sun, 13 Dec 2015 12:57:54 +0800 From: Yong Liu To: dts@dpdk.org Date: Sun, 13 Dec 2015 12:57:40 +0800 Message-Id: <1449982664-4362-5-git-send-email-yong.liu@intel.com> X-Mailer: git-send-email 1.7.4.1 In-Reply-To: <1449982664-4362-1-git-send-email-yong.liu@intel.com> References: <1449982664-4362-1-git-send-email-yong.liu@intel.com> Subject: [dts] [PATCH 4/8] nics: add fm10k module for RedRockCanYou family nic X-BeenThere: dts@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: test suite reviews and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 13 Dec 2015 04:58:01 -0000 From: Marvin Liu This module will support fm10k family nics. These nics required special testpoint for internal switch initialization. Some nics like BulderRapid must start up testpoint after bound to igb_uio. Most features like vlan need special configured in testpoint. Those functions will be realized in fm10k module. Signed-off-by: Marvin Liu diff --git a/nics/fm10k.py b/nics/fm10k.py new file mode 100644 index 0000000..ab35981 --- /dev/null +++ b/nics/fm10k.py @@ -0,0 +1,164 @@ +# BSD LICENSE +# +# Copyright(c) 2010-2014 Intel Corporation. All rights reserved. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Intel Corporation nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +from crb import Crb +from config import PortConf, PORTCONF +from exception import PortConfigParseException +from utils import GREEN +from net_device import NetDevice + +DEF_PASSWD = 's' +TP_BINARY = 'TestPoint' + + +class CtrlCrb(Crb): + """ + Simplified Crb class for RedRockCanyou control session + """ + + def __init__(self, crb): + self.crb = crb + self.NAME = 'dut_RRC_CONTROL' + super(CtrlCrb, self).__init__(crb, None, self.NAME) + + def get_ip_address(self): + return self.crb['IP'] + + def get_password(self): + return self.crb['pass'] + + +class RedRockCanyou(NetDevice): + """ + Class for RedRockCanyou, inherit from NetDevice class + """ + + def __init__(self, host, bus_id, devfun_id): + super(RedRockCanyou, self).__init__(host, bus_id, devfun_id) + self.tp_path = "~" + self.sec_port = False + self.host = host + + # load port config + portconf = PortConf(PORTCONF) + portconf.load_ports_config(host.crb['IP']) + pci_addr = ':'.join((bus_id, devfun_id)) + if not portconf.check_port_available(pci_addr): + raise PortConfigParseException("RRC must configured") + + port_cfg = portconf.get_ports_config()[pci_addr] + + # secondary port do not need reinitialize + if 'sec_port' in port_cfg.keys(): + print GREEN("Skip init second port test point session") + if 'first_port' not in port_cfg.keys(): + raise PortConfigParseException("RRC second port must configure first port") + # find net_device by pci_addr + first_addr = port_cfg['first_port'] + port_info = self.host.get_port_info(first_addr) + if port_info is None: + raise PortConfigParseException("RRC first port not found") + # get addtional session + netdev = port_info['port'] + self.ctrl_crb = netdev.get_control() + self.sec_port = True + return + + if 'tp_ip' not in port_cfg.keys(): + raise PortConfigParseException("RRC must configure test point ip") + + crb = {} + crb['IP'] = port_cfg['tp_ip'] + if 'passwd' not in port_cfg.keys(): + crb['pass'] = DEF_PASSWD + else: + crb['pass'] = port_cfg['passwd'] + + if 'tp_path' in port_cfg.keys(): + self.tp_path = port_cfg['tp_path'] + + # create addtional session + self.ctrl_crb = CtrlCrb(crb) + + def setup(self): + # setup function should be called after bind to igb_uio + self.start_testpoint() + + def close(self): + # second port do not need any operation + if self.sec_port: + return + + # stop testpoint + self.stop_testpoint() + # close session + if self.ctrl_crb.session: + self.ctrl_crb.session.close() + self.ctrl_crb.session = None + if self.ctrl_crb.alt_session: + self.ctrl_crb.alt_session.close() + self.ctrl_crb.alt_session = None + + def start_testpoint(self): + """ + Before any execution, must enable test point first + """ + if self.sec_port: + print GREEN("Skip start second port testpoint") + return + self.ctrl_crb.send_expect("cd %s" % self.tp_path, "# ") + if self.tp_path != "~": + command = './' + TP_BINARY + else: + command = TP_BINARY + + self.ctrl_crb.send_expect("%s" % command, "<0>%", 120) + + def stop_testpoint(self): + """ + Exit test point + """ + self.ctrl_crb.send_expect("quit", "# ") + + def get_control(self): + return self.ctrl_crb + + def enable_vlan(self, vlan_id=0): + self.ctrl_crb.send_expect("create vlan %d" % vlan_id, "<0>%") + self.ctrl_crb.send_expect("add vlan port %d 1,5,20,22" % vlan_id, "<0>%") + + def disable_vlan(self, vlan_id=0): + self.ctrl_crb.send_expect("del vlan port %d 1,5,20,22" % vlan_id, "<0>%") + self.ctrl_crb.send_expect("del vlan %d" % vlan_id, "<0>%") + + def enable_jumbo(self): + NotImplemented -- 1.9.3