On 6/2/2019 4:24 PM, jerinj@marvell.com wrote:
> From: Vamsi Attunuru <vattunuru@marvell.com>
>
> Add firmware version get operation.
>
> Signed-off-by: Vamsi Attunuru <vattunuru@marvell.com>
<...>
> @@ -209,6 +209,28 @@ otx2_nix_tx_done_cleanup(void *txq, uint32_t free_cnt)
> return 0;
> }
>
> +int
> +otx2_nix_fw_version_get(struct rte_eth_dev *eth_dev, char *fw_version,
> + size_t fw_size)
> +{
> + struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
> + int rc = (int)fw_size;
> +
> + if (fw_size > sizeof(dev->mkex_pfl_name))
> + rc = sizeof(dev->mkex_pfl_name);
> +
> + rc = strlcpy(fw_version, (char *)dev->mkex_pfl_name, rc);
> +
> + rc += 1; /* Add the size of '\0' */
> + if (fw_size < (uint32_t)rc)
> + goto done;
> + else
> + return 0;
> +
> +done:
> + return rc;
> +}
Up to you but this can be done without a 'goto':
...
if (fw_size < (uint32_t)rc)
return rc;
return 0;
}
@@ -33,5 +33,6 @@ Rx descriptor status = Y
Basic stats = Y
Stats per queue = Y
Extended stats = Y
+FW version = Y
Module EEPROM dump = Y
Registers dump = Y
@@ -31,5 +31,6 @@ Rx descriptor status = Y
Basic stats = Y
Extended stats = Y
Stats per queue = Y
+FW version = Y
Module EEPROM dump = Y
Registers dump = Y
@@ -26,5 +26,6 @@ Rx descriptor status = Y
Basic stats = Y
Extended stats = Y
Stats per queue = Y
+FW version = Y
Module EEPROM dump = Y
Registers dump = Y
@@ -1335,6 +1335,7 @@ static const struct eth_dev_ops otx2_eth_dev_ops = {
.filter_ctrl = otx2_nix_dev_filter_ctrl,
.get_module_info = otx2_nix_get_module_info,
.get_module_eeprom = otx2_nix_get_module_eeprom,
+ .fw_version_get = otx2_nix_fw_version_get,
.flow_ctrl_get = otx2_nix_flow_ctrl_get,
.flow_ctrl_set = otx2_nix_flow_ctrl_set,
.timesync_enable = otx2_nix_timesync_enable,
@@ -216,6 +216,7 @@ struct otx2_eth_dev {
uint8_t lso_tsov4_idx;
uint8_t lso_tsov6_idx;
uint8_t mac_addr[RTE_ETHER_ADDR_LEN];
+ uint8_t mkex_pfl_name[MKEX_NAME_LEN];
uint8_t max_mac_entries;
uint8_t lf_tx_stats;
uint8_t lf_rx_stats;
@@ -320,6 +321,8 @@ void otx2_nix_info_get(struct rte_eth_dev *eth_dev,
int otx2_nix_dev_filter_ctrl(struct rte_eth_dev *eth_dev,
enum rte_filter_type filter_type,
enum rte_filter_op filter_op, void *arg);
+int otx2_nix_fw_version_get(struct rte_eth_dev *eth_dev, char *fw_version,
+ size_t fw_size);
int otx2_nix_get_module_info(struct rte_eth_dev *eth_dev,
struct rte_eth_dev_module_info *modinfo);
int otx2_nix_get_module_eeprom(struct rte_eth_dev *eth_dev,
@@ -209,6 +209,28 @@ otx2_nix_tx_done_cleanup(void *txq, uint32_t free_cnt)
return 0;
}
+int
+otx2_nix_fw_version_get(struct rte_eth_dev *eth_dev, char *fw_version,
+ size_t fw_size)
+{
+ struct otx2_eth_dev *dev = otx2_eth_pmd_priv(eth_dev);
+ int rc = (int)fw_size;
+
+ if (fw_size > sizeof(dev->mkex_pfl_name))
+ rc = sizeof(dev->mkex_pfl_name);
+
+ rc = strlcpy(fw_version, (char *)dev->mkex_pfl_name, rc);
+
+ rc += 1; /* Add the size of '\0' */
+ if (fw_size < (uint32_t)rc)
+ goto done;
+ else
+ return 0;
+
+done:
+ return rc;
+}
+
int
otx2_nix_pool_ops_supported(struct rte_eth_dev *eth_dev, const char *pool)
{
@@ -740,6 +740,7 @@ flow_fetch_kex_cfg(struct otx2_eth_dev *dev)
struct otx2_npc_flow_info *npc = &dev->npc_flow;
struct npc_get_kex_cfg_rsp *kex_rsp;
struct otx2_mbox *mbox = dev->mbox;
+ char mkex_pfl_name[MKEX_NAME_LEN];
struct otx2_idev_kex_cfg *idev;
int rc = 0;
@@ -761,6 +762,12 @@ flow_fetch_kex_cfg(struct otx2_eth_dev *dev)
sizeof(struct npc_get_kex_cfg_rsp));
}
+ otx2_mbox_memcpy(mkex_pfl_name,
+ idev->kex_cfg.mkex_pfl_name, MKEX_NAME_LEN);
+
+ strlcpy((char *)dev->mkex_pfl_name,
+ mkex_pfl_name, sizeof(dev->mkex_pfl_name));
+
flow_process_mkex_cfg(npc, &idev->kex_cfg);
done: