MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mrvl_eth_dev_create

Function mrvl_eth_dev_create

dpdk/drivers/net/mvpp2/mrvl_ethdev.c:3121–3172  ·  view source on GitHub ↗

* Create device representing Ethernet port. * * @param name * Pointer to the port's name. * * @return * 0 on success, negative error value otherwise. */

Source from the content-addressed store, hash-verified

3119 * 0 on success, negative error value otherwise.
3120 */
3121static int
3122mrvl_eth_dev_create(struct rte_vdev_device *vdev, const char *name)
3123{
3124 int ret, fd = socket(AF_INET, SOCK_DGRAM, 0);
3125 struct rte_eth_dev *eth_dev;
3126 struct mrvl_priv *priv;
3127 struct ifreq req;
3128
3129 eth_dev = rte_eth_dev_allocate(name);
3130 if (!eth_dev)
3131 return -ENOMEM;
3132
3133 priv = mrvl_priv_create(name);
3134 if (!priv) {
3135 ret = -ENOMEM;
3136 goto out_free;
3137 }
3138 eth_dev->data->dev_private = priv;
3139
3140 eth_dev->data->mac_addrs =
3141 rte_zmalloc("mac_addrs",
3142 RTE_ETHER_ADDR_LEN * MRVL_MAC_ADDRS_MAX, 0);
3143 if (!eth_dev->data->mac_addrs) {
3144 MRVL_LOG(ERR, "Failed to allocate space for eth addrs");
3145 ret = -ENOMEM;
3146 goto out_free;
3147 }
3148
3149 memset(&req, 0, sizeof(req));
3150 strcpy(req.ifr_name, name);
3151 ret = ioctl(fd, SIOCGIFHWADDR, &req);
3152 if (ret)
3153 goto out_free;
3154
3155 memcpy(eth_dev->data->mac_addrs[0].addr_bytes,
3156 req.ifr_addr.sa_data, RTE_ETHER_ADDR_LEN);
3157
3158 eth_dev->device = &vdev->device;
3159 eth_dev->rx_pkt_burst = mrvl_rx_pkt_burst;
3160 mrvl_set_tx_function(eth_dev);
3161 eth_dev->dev_ops = &mrvl_ops;
3162 eth_dev->data->dev_flags |= RTE_ETH_DEV_AUTOFILL_QUEUE_XSTATS;
3163
3164 eth_dev->data->dev_link.link_status = RTE_ETH_LINK_UP;
3165
3166 rte_eth_dev_probing_finish(eth_dev);
3167 return 0;
3168out_free:
3169 rte_eth_dev_release_port(eth_dev);
3170
3171 return ret;
3172}
3173
3174/**
3175 * Callback used by rte_kvargs_process() during argument parsing.

Callers 1

rte_pmd_mrvl_probeFunction · 0.85

Calls 10

rte_eth_dev_allocateFunction · 0.85
mrvl_priv_createFunction · 0.85
rte_zmallocFunction · 0.85
memsetFunction · 0.85
mrvl_set_tx_functionFunction · 0.85
rte_eth_dev_release_portFunction · 0.85
socketClass · 0.50
ioctlFunction · 0.50
memcpyFunction · 0.50

Tested by

no test coverage detected