From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id 2FB7FC35E for ; Tue, 2 Jun 2015 17:08:11 +0200 (CEST) Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP; 02 Jun 2015 08:07:16 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.13,540,1427785200"; d="scan'208";a="719376843" Received: from orsmsx106.amr.corp.intel.com ([10.22.225.133]) by fmsmga001.fm.intel.com with ESMTP; 02 Jun 2015 08:07:16 -0700 Received: from fmsmsx114.amr.corp.intel.com (10.18.116.8) by ORSMSX106.amr.corp.intel.com (10.22.225.133) with Microsoft SMTP Server (TLS) id 14.3.224.2; Tue, 2 Jun 2015 08:07:16 -0700 Received: from FMSMSX110.amr.corp.intel.com ([169.254.14.46]) by FMSMSX114.amr.corp.intel.com ([10.18.116.8]) with mapi id 14.03.0224.002; Tue, 2 Jun 2015 08:07:15 -0700 From: "Wang, Liang-min" To: Stephen Hemminger , Thomas Monjalon Thread-Topic: [dpdk-dev] [PATCH 1/2] ethdev: add api to set default mac address Thread-Index: AQHQmkVyPbWTzZzMFkK+j70RQx9Qf52ZhTwAgAAZZgCAACl7AP//jBgw Date: Tue, 2 Jun 2015 15:07:15 +0000 Message-ID: References: <1432927612-12244-1-git-send-email-liang-min.wang@intel.com> <1432927612-12244-2-git-send-email-liang-min.wang@intel.com> <2601191342CEEE43887BDE71AB977258214345AB@irsmsx105.ger.corp.intel.com> <1821700.XUk45KJcQp@xps13> <20150602075150.4139cdaf@urahara> In-Reply-To: <20150602075150.4139cdaf@urahara> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.200.106] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH 1/2] ethdev: add api to set default mac address 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: Tue, 02 Jun 2015 15:08:12 -0000 >On Tue, 02 Jun 2015 14:23:22 +0200 >Thomas Monjalon wrote: >> 2015-06-02 10:52, Ananyev, Konstantin: > >> From: Wang, Liang-min > > >> int > > >>+rte_eth_dev_default_mac_addr_set(uint8_t port_id, struct=20 > > >> +ether_addr *addr) { > > >> + struct rte_eth_dev *dev; > > >> + > > >> + if (!rte_eth_dev_is_valid_port(port_id)) { > > >> + PMD_DEBUG_TRACE("Invalid port_id=3D%d\n", port_id); > > >> + return -ENODEV; > > >> + } > > >> + > > >> + dev =3D &rte_eth_devices[port_id]; > > >> + FUNC_PTR_OR_ERR_RET(*dev->dev_ops->mac_addr_set, -ENOTSUP); > > >> + > > >> + return (*dev->dev_ops->mac_addr_set)(dev, addr); } > >>=20 > >> As I can see mac_addr_set() is implemented now only for virtio. > >> Which means that for all Intel HW your new=20 > >> rte_eth_dev_default_mac_addr_set() > >> would not work right now? > >> Probably rte_eth_dev_default_mac_addr_set() should combine both approa= ches: > >> If mac_addr_set() is implemented by dev, then use it, otherwise try=20 > >> to use addr_remove()/addr_add() (as your first version did)? > >> Konstantin =20 >>=20 >> Not sure it is a good idea to use remove/add to set the default unicast = mac address. >> It would be clearer to add comments to remove/add functions to specify=20 >> that they don't apply to the default adress but only to secondary=20 >> ones. Then use the same logic for both API and driver ops. >> It is the responsibility of the driver implementation to use common=20 >> functions for default_set and remove/add functions. >Only vmxnet3 and virtio need special treatment. virtio is already covered. >Here is patch for vmxnet3. We have used this for several releases. To be consistent with implementation of ethdev API, rte_eth_macaddr_get, sh= ould mac_addr_set ops in both virtio and vmxnet3 update dev->data->mac_addrs[0]. So, the mac_addr_set and mac_addr_get are consist= ent. >>From eef188102338c5687b9075d468eabbe87693b075 Mon Sep 17 00:00:00 2001 >From: Stephen Hemminger >Date: Tue, 2 Jun 2015 07:49:53 -0700 >Subject: [PATCH] vmxnet3: support setting primary MAC address > >This allows setting primary MAC address on VMXNET3. > >Signed-off-by: Stephen Hemminger >--- > drivers/net/vmxnet3/vmxnet3_ethdev.c | 45 +++++++++++++++++++++++++------= ----- > 1 file changed, 31 insertions(+), 14 deletions(-) > >diff --git a/drivers/net/vmxnet3/vmxnet3_ethdev.c b/drivers/net/vmxnet3/vm= xnet3_ethdev.c >index 1685ce4..6515f74 100644 >--- a/drivers/net/vmxnet3/vmxnet3_ethdev.c >+++ b/drivers/net/vmxnet3/vmxnet3_ethdev.c >@@ -85,6 +85,9 @@ static void vmxnet3_dev_stats_get(struct rte_eth_dev *de= v, > struct rte_eth_stats *stats); > static void vmxnet3_dev_info_get(struct rte_eth_dev *dev, > struct rte_eth_dev_info *dev_info); >+static void vmxnet3_mac_addr_set(struct rte_eth_dev *dev, >+ struct ether_addr *mac_addr); >+ > #if PROCESS_SYS_EVENTS =3D=3D 1 > static void vmxnet3_process_events(struct vmxnet3_hw *); #endif @@ -110,= 6 +113,7 @@ static const struct eth_dev_ops vmxnet3_eth_dev_ops =3D { > .allmulticast_disable =3D vmxnet3_dev_allmulticast_disable, > .link_update =3D vmxnet3_dev_link_update, > .stats_get =3D vmxnet3_dev_stats_get, >+ .mac_addr_set =3D vmxnet3_mac_addr_set, > .dev_infos_get =3D vmxnet3_dev_info_get, > .rx_queue_setup =3D vmxnet3_dev_rx_queue_setup, > .rx_queue_release =3D vmxnet3_dev_rx_queue_release, >@@ -359,6 +363,23 @@ vmxnet3_dev_configure(struct rte_eth_dev *dev) > return 0; > } >=20 >+static void >+vmxnet3_write_mac(struct vmxnet3_hw *hw, const uint8_t *addr) { >+ uint32_t val; >+ >+ PMD_INIT_LOG(DEBUG, >+ "Writing MAC Address : %02x:%02x:%02x:%02x:%02x:%02x", >+ addr[0], addr[1], addr[2], >+ addr[3], addr[4], addr[5]); >+ >+ val =3D *(const uint32_t *)addr; >+ VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_MACL, val); >+ >+ val =3D (addr[5] << 8) | addr[4]; >+ VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_MACH, val); } >+ > static int > vmxnet3_setup_driver_shared(struct rte_eth_dev *dev) { @@ -366,8 +387,7 = @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev) > struct vmxnet3_hw *hw =3D dev->data->dev_private; > Vmxnet3_DriverShared *shared =3D hw->shared; > Vmxnet3_DSDevRead *devRead =3D &shared->devRead; >- uint32_t *mac_ptr; >- uint32_t val, i; >+ uint32_t i; > int ret; >=20 > shared->magic =3D VMXNET3_REV1_MAGIC; >@@ -459,18 +479,7 @@ vmxnet3_setup_driver_shared(struct rte_eth_dev *dev) > return ret; > } >=20 >- PMD_INIT_LOG(DEBUG, >- "Writing MAC Address : %02x:%02x:%02x:%02x:%02x:%02x", >- hw->perm_addr[0], hw->perm_addr[1], hw->perm_addr[2], >- hw->perm_addr[3], hw->perm_addr[4], hw->perm_addr[5]); >- >- /* Write MAC Address back to device */ >- mac_ptr =3D (uint32_t *)hw->perm_addr; >- val =3D *mac_ptr; >- VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_MACL, val); >- >- val =3D (hw->perm_addr[5] << 8) | hw->perm_addr[4]; >- VMXNET3_WRITE_BAR1_REG(hw, VMXNET3_REG_MACH, val); >+ vmxnet3_write_mac(hw, hw->perm_addr); >=20 > return VMXNET3_SUCCESS; > } >@@ -645,6 +654,14 @@ vmxnet3_dev_info_get(__attribute__((unused))struct rt= e_eth_dev *dev, struct rte_ > dev_info->flow_type_rss_offloads =3D VMXNET3_RSS_OFFLOAD_ALL; } >=20 >+static void >+vmxnet3_mac_addr_set(struct rte_eth_dev *dev, struct ether_addr=20 >+*mac_addr) { >+ struct vmxnet3_hw *hw =3D dev->data->dev_private; >+ >+ vmxnet3_write_mac(hw, mac_addr->addr_bytes); } >+ >/* return 0 means link status changed, -1 means not changed */ static int= vmxnet3_dev_link_update(struct rte_eth_dev *dev, __attribute__((unused)) = int wait_to_complete) -- 2.1.4