From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from tyo201.gate.nec.co.jp (TYO201.gate.nec.co.jp [210.143.35.51]) by dpdk.org (Postfix) with ESMTP id 380B83F9 for ; Fri, 6 Jun 2014 13:08:53 +0200 (CEST) Received: from mailgate3.nec.co.jp ([10.7.69.192]) by tyo201.gate.nec.co.jp (8.13.8/8.13.4) with ESMTP id s56B96Eq027954 for ; Fri, 6 Jun 2014 20:09:06 +0900 (JST) Received: from mailsv.nec.co.jp (imss62.nec.co.jp [10.7.69.157]) by mailgate3.nec.co.jp (8.11.7/3.7W-MAILGATE-NEC) with ESMTP id s56B96617278 for ; Fri, 6 Jun 2014 20:09:06 +0900 (JST) Received: from mail03.kamome.nec.co.jp (mail03.kamome.nec.co.jp [10.25.43.7]) by mailsv.nec.co.jp (8.13.8/8.13.4) with ESMTP id s56B96DC022538 for ; Fri, 6 Jun 2014 20:09:06 +0900 (JST) Received: from bpxc99gp.gisp.nec.co.jp ([10.38.151.144] [10.38.151.144]) by mail03.kamome.nec.co.jp with ESMTP id BT-MMP-82013; Fri, 6 Jun 2014 20:06:47 +0900 Received: from BPXM14GP.gisp.nec.co.jp ([169.254.1.238]) by BPXC16GP.gisp.nec.co.jp ([10.38.151.144]) with mapi id 14.02.0328.011; Fri, 6 Jun 2014 20:06:46 +0900 From: Hiroshi Shimamoto To: "dev@dpdk.org" Thread-Topic: [memnic PATCH 3/5] pmd: support variable frame size Thread-Index: Ac+Bd17YzhSvTQFKTQulMpg2jJARpw== Date: Fri, 6 Jun 2014 11:06:45 +0000 Message-ID: <7F861DC0615E0C47A872E6F3C5FCDDBD0110216D@BPXM14GP.gisp.nec.co.jp> Accept-Language: ja-JP, en-US Content-Language: ja-JP X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.205.5.123] Content-Type: text/plain; charset="iso-2022-jp" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: Hayato Momma Subject: [dpdk-dev] [memnic PATCH 3/5] pmd: support variable frame size X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Jun 2014 11:08:54 -0000 From: Hiroshi Shimamoto If the MEMNIC framework has the feature MEMNIC_FEAT_FRAME_SIZE and configured frame size, set request bit and frame size to support larger frame size on reset. Don't trust framesz of header in general usage, because host might change the value unexpectedly. Signed-off-by: Hiroshi Shimamoto Reviewed-by: Hayato Momma --- pmd/pmd_memnic.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/pmd/pmd_memnic.c b/pmd/pmd_memnic.c index 6b6bcb3..1f30a8c 100644 --- a/pmd/pmd_memnic.c +++ b/pmd/pmd_memnic.c @@ -100,15 +100,36 @@ static int memnic_dev_configure(__rte_unused struct r= te_eth_dev *dev) static int memnic_dev_start(struct rte_eth_dev *dev) { struct memnic_adapter *adapter =3D get_adapter(dev); + struct memnic_header *hdr =3D &adapter->nic->hdr; + uint32_t request; =20 /* invalidate */ - adapter->nic->hdr.valid =3D 0; + hdr->valid =3D 0; + + /* setup parameters */ + request =3D 0; + /* setup jumbo frame support, if any. */ + if (dev->data->dev_conf.rxmode.jumbo_frame =3D=3D 1) { + hdr->framesz =3D dev->data->dev_conf.rxmode.max_rx_pkt_len; + request |=3D MEMNIC_FEAT_FRAME_SIZE; + } else { + hdr->framesz =3D MEMNIC_MAX_FRAME_LEN; + } + hdr->request =3D request; + rte_mb(); /* reset */ - adapter->nic->hdr.reset =3D 1; - /* no need to wait here */ + hdr->reset =3D 1; + + /* wait */ + while (ACCESS_ONCE(hdr->reset)) + rte_pause(); + adapter->up_idx =3D adapter->down_idx =3D 0; + adapter->framesz =3D MEMNIC_MAX_FRAME_LEN; + if (request & MEMNIC_FEAT_FRAME_SIZE) + adapter->framesz =3D hdr->framesz; =20 return 0; } @@ -126,12 +147,18 @@ static void memnic_dev_stop(struct rte_eth_dev *dev) static void memnic_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) { + struct memnic_adapter *adapter =3D get_adapter(dev); + struct memnic_header *hdr =3D &adapter->nic->hdr; + dev_info->driver_name =3D dev->driver->pci_drv.name; dev_info->max_rx_queues =3D 1; dev_info->max_tx_queues =3D 1; dev_info->min_rx_bufsize =3D 60; dev_info->max_rx_pktlen =3D MEMNIC_MAX_FRAME_LEN; dev_info->max_mac_addrs =3D 1; + + if (hdr->features & MEMNIC_FEAT_FRAME_SIZE) + dev_info->max_rx_pktlen =3D MEMNIC_MAX_JUMBO_FRAME_LEN; } =20 static void memnic_dev_stats_get(struct rte_eth_dev *dev, --=20 1.8.4