> -----Original Message----- > From: Ferruh Yigit <ferruh.yi...@amd.com> > Sent: Monday, October 24, 2022 18:51 > To: Guo, Junfeng <junfeng....@intel.com>; Zhang, Qi Z > <qi.z.zh...@intel.com>; Wu, Jingjing <jingjing...@intel.com>; > ferruh.yi...@xilinx.com; Xing, Beilei <beilei.x...@intel.com> > Cc: dev@dpdk.org; Li, Xiaoyun <xiaoyun...@intel.com>; > awogbem...@google.com; Richardson, Bruce > <bruce.richard...@intel.com>; hemant.agra...@nxp.com; > step...@networkplumber.org; Xia, Chenbo <chenbo....@intel.com>; > Zhang, Helin <helin.zh...@intel.com>; Wang, Haiyue > <haiyue.w...@intel.com> > Subject: Re: [PATCH v7 1/8] net/gve/base: introduce base code > > On 10/21/2022 10:19 AM, Junfeng Guo wrote: > > +int gve_adminq_describe_device(struct gve_priv *priv) > > +{ > > + struct gve_device_option_jumbo_frames > *dev_op_jumbo_frames = NULL; > > + struct gve_device_option_gqi_rda *dev_op_gqi_rda = NULL; > > + struct gve_device_option_gqi_qpl *dev_op_gqi_qpl = NULL; > > + struct gve_device_option_dqo_rda *dev_op_dqo_rda = NULL; > > + struct gve_device_descriptor *descriptor; > > + struct gve_dma_mem descriptor_dma_mem; > > + u32 supported_features_mask = 0; > > + union gve_adminq_command cmd; > > + int err = 0; > > + u8 *mac; > > + u16 mtu; > > + > > + memset(&cmd, 0, sizeof(cmd)); > > + descriptor = gve_alloc_dma_mem(&descriptor_dma_mem, > PAGE_SIZE); > > + if (!descriptor) > > + return -ENOMEM; > > + cmd.opcode = cpu_to_be32(GVE_ADMINQ_DESCRIBE_DEVICE); > > + cmd.describe_device.device_descriptor_addr = > > + > cpu_to_be64(descriptor_dma_mem.pa); > > + cmd.describe_device.device_descriptor_version = > > + > cpu_to_be32(GVE_ADMINQ_DEVICE_DESCRIPTOR_VERSION); > > + cmd.describe_device.available_length = cpu_to_be32(PAGE_SIZE); > > + > > + err = gve_adminq_execute_cmd(priv, &cmd); > > + if (err) > > + goto free_device_descriptor; > > + > > + err = gve_process_device_options(priv, descriptor, > &dev_op_gqi_rda, > > + &dev_op_gqi_qpl, > &dev_op_dqo_rda, > > + &dev_op_jumbo_frames); > > + if (err) > > + goto free_device_descriptor; > > + > > + /* If the GQI_RAW_ADDRESSING option is not enabled and the > queue format > > + * is not set to GqiRda, choose the queue format in a priority > order: > > + * DqoRda, GqiRda, GqiQpl. Use GqiQpl as default. > > + */ > > + if (dev_op_dqo_rda) { > > + priv->queue_format = GVE_DQO_RDA_FORMAT; > > + PMD_DRV_LOG(INFO, "Driver is running with DQO RDA > queue format."); > > + supported_features_mask = > > + be32_to_cpu(dev_op_dqo_rda- > >supported_features_mask); > > + } else if (dev_op_gqi_rda) { > > + priv->queue_format = GVE_GQI_RDA_FORMAT; > > + PMD_DRV_LOG(INFO, "Driver is running with GQI RDA > queue format."); > > + supported_features_mask = > > + be32_to_cpu(dev_op_gqi_rda- > >supported_features_mask); > > + } else if (priv->queue_format == GVE_GQI_RDA_FORMAT) { > > + PMD_DRV_LOG(INFO, "Driver is running with GQI RDA > queue format."); > > + } else { > > + priv->queue_format = GVE_GQI_QPL_FORMAT; > > + if (dev_op_gqi_qpl) > > + supported_features_mask = > > + be32_to_cpu(dev_op_gqi_qpl- > >supported_features_mask); > > + PMD_DRV_LOG(INFO, "Driver is running with GQI QPL > queue format."); > > + } > > + if (gve_is_gqi(priv)) { > > + err = gve_set_desc_cnt(priv, descriptor); > > + } else { > > + /* DQO supports LRO. */ > > + err = gve_set_desc_cnt_dqo(priv, descriptor, > dev_op_dqo_rda); > > + } > > + if (err) > > + goto free_device_descriptor; > > + > > + priv->max_registered_pages = > > + be64_to_cpu(descriptor- > >max_registered_pages); > > + mtu = be16_to_cpu(descriptor->mtu); > > + if (mtu < ETH_MIN_MTU) { > > + PMD_DRV_LOG(ERR, "MTU %d below minimum MTU", > mtu); > > + err = -EINVAL; > > + goto free_device_descriptor; > > + } > > + priv->max_mtu = mtu; > > + priv->num_event_counters = be16_to_cpu(descriptor->counters); > > + rte_memcpy(priv->dev_addr.addr_bytes, descriptor->mac, > ETH_ALEN); > > + mac = descriptor->mac; > > + PMD_DRV_LOG(INFO, "MAC > addr: %02x:%02x:%02x:%02x:%02x:%02x", > > + mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); > > > There are 'RTE_ETHER_ADDR_PRT_FMT' & 'RTE_ETHER_ADDR_BYTES' > macros for > this purpose, you can use it like: > > PMD_DRV_LOG(INFO, "MAC addr" RTE_ETHER_ADDR_PRT_FMT, > RTE_ETHER_ADDR_BYTES(priv->dev_addr)); > > So can get rid of 'mac' variable.
Thanks for the advice! Will try this in the coming version.