hw/rdma: Initialize node_guid from vmxnet3 mac address
node_guid should be set once device is load. Make node_guid be GID format (32 bit) of PCI function 0 vmxnet3 device's MAC. A new function was added to do the conversion. So for example the MAC 56:b6:44:e9:62:dc will be converted to GID 54b6:44ff:fee9:62dc. Signed-off-by: Yuval Shaia <yuval.shaia@oracle.com> Reviewed-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com> Signed-off-by: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
This commit is contained in:
parent
d961ead16e
commit
028c3f93d6
|
@ -63,4 +63,13 @@ extern unsigned long pr_dbg_cnt;
|
||||||
void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen);
|
void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t plen);
|
||||||
void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len);
|
void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len);
|
||||||
|
|
||||||
|
static inline void addrconf_addr_eui48(uint8_t *eui, const char *addr)
|
||||||
|
{
|
||||||
|
memcpy(eui, addr, 3);
|
||||||
|
eui[3] = 0xFF;
|
||||||
|
eui[4] = 0xFE;
|
||||||
|
memcpy(eui + 5, addr + 3, 3);
|
||||||
|
eui[0] ^= 2;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -592,16 +592,6 @@ static int create_bind(PVRDMADev *dev, union pvrdma_cmd_req *req,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TODO: Since drivers stores node_guid at load_dsr phase then this
|
|
||||||
* assignment is not relevant, i need to figure out a way how to
|
|
||||||
* retrieve MAC of our netdev */
|
|
||||||
if (!cmd->index) {
|
|
||||||
dev->node_guid =
|
|
||||||
dev->rdma_dev_res.ports[0].gid_tbl[0].gid.global.interface_id;
|
|
||||||
pr_dbg("dev->node_guid=0x%llx\n",
|
|
||||||
(long long unsigned int)be64_to_cpu(dev->node_guid));
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -264,7 +264,7 @@ static void init_dsr_dev_caps(PVRDMADev *dev)
|
||||||
dsr->caps.sys_image_guid = 0;
|
dsr->caps.sys_image_guid = 0;
|
||||||
pr_dbg("sys_image_guid=%" PRIx64 "\n", dsr->caps.sys_image_guid);
|
pr_dbg("sys_image_guid=%" PRIx64 "\n", dsr->caps.sys_image_guid);
|
||||||
|
|
||||||
dsr->caps.node_guid = cpu_to_be64(dev->node_guid);
|
dsr->caps.node_guid = dev->node_guid;
|
||||||
pr_dbg("node_guid=%" PRIx64 "\n", be64_to_cpu(dsr->caps.node_guid));
|
pr_dbg("node_guid=%" PRIx64 "\n", be64_to_cpu(dsr->caps.node_guid));
|
||||||
|
|
||||||
dsr->caps.phys_port_cnt = MAX_PORTS;
|
dsr->caps.phys_port_cnt = MAX_PORTS;
|
||||||
|
@ -588,6 +588,9 @@ static void pvrdma_realize(PCIDevice *pdev, Error **errp)
|
||||||
}
|
}
|
||||||
dev->func0 = VMXNET3(func0);
|
dev->func0 = VMXNET3(func0);
|
||||||
|
|
||||||
|
addrconf_addr_eui48((unsigned char *)&dev->node_guid,
|
||||||
|
(const char *)&dev->func0->conf.macaddr.a);
|
||||||
|
|
||||||
memdev_root = object_resolve_path("/objects", NULL);
|
memdev_root = object_resolve_path("/objects", NULL);
|
||||||
if (memdev_root) {
|
if (memdev_root) {
|
||||||
object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared);
|
object_child_foreach(memdev_root, pvrdma_check_ram_shared, &ram_shared);
|
||||||
|
|
Loading…
Reference in a new issue