Lines Matching defs:vmd
32 struct vmd_adapter vmd[MAX_VMD_SUPPORTED];
41 return addr >= (uint64_t)bus->vmd->cfg_vaddr &&
42 addr < bus->vmd->cfgbar_size + (uint64_t)bus->vmd->cfg_vaddr;
46 vmd_align_base_addrs(struct vmd_adapter *vmd, uint32_t alignment)
53 if (vmd->physical_addr & (alignment - 1)) {
54 pad = alignment - (vmd->physical_addr & (alignment - 1));
55 vmd->physical_addr += pad;
56 vmd->current_addr_size -= pad;
159 SPDK_INFOLOG(vmd, "Unable to find free hotplug memory region of size:"
168 SPDK_INFOLOG(vmd, "Unable to find unused descriptor to store the "
185 * Allocates an address from vmd membar for the input memory size
186 * vmdAdapter - vmd adapter object
191 * Consider increasing the size of vmd membar if 0x0 is returned.
194 vmd_allocate_base_addr(struct vmd_adapter *vmd, struct vmd_pci_device *dev, uint32_t size)
217 if (vmd->physical_addr & (size - 1)) {
218 padding = size - (vmd->physical_addr & (size - 1));
222 if (vmd->current_addr_size >= size + padding) {
223 base_address = vmd->physical_addr + padding;
224 vmd->physical_addr += size + padding;
225 vmd->current_addr_size -= size + padding;
228 SPDK_INFOLOG(vmd, "allocated(size) %" PRIx64 " (%x)\n", base_address, size);
257 SPDK_INFOLOG(vmd, "base:limit = %x:%x\n", bridge->header->one.mem_base,
260 if (dev->bus->vmd->scan_completed) {
304 struct vmd_adapter *vmd = NULL;
310 vmd = dev->bus->vmd;
313 if (!vmd) {
317 vmd_align_base_addrs(vmd, ONE_MB);
334 if (vmd->scan_completed) {
337 dev->bar[i].start = vmd_allocate_base_addr(vmd, dev, dev->bar[i].size);
349 dev->bar[i].vaddr = ((uint64_t)vmd->mem_vaddr + (dev->bar[i].start - vmd->membar));
471 struct vmd_adapter *vmd_adapter = dev->bus->vmd;
483 SPDK_INFOLOG(vmd, "root_port_updated = %d\n",
485 SPDK_INFOLOG(vmd, "upper:limit = %x : %x\n",
490 SPDK_INFOLOG(vmd, "scan_completed = %d\n",
534 struct vmd_adapter *vmd = bus->vmd;
541 if (!vmd->scan_completed) {
542 hp->bar.start = vmd_allocate_base_addr(vmd, NULL, hp->bar.size);
550 hp->bar.vaddr = (uint64_t)vmd->mem_vaddr + (hp->bar.start - vmd->membar);
565 SPDK_INFOLOG(vmd, "%s: mem_base:mem_limit = %x : %x\n", __func__,
574 header = (volatile struct pci_header *)(bus->vmd->cfg_vaddr +
606 header = (struct pci_header * volatile)(bus->vmd->cfg_vaddr +
609 SPDK_INFOLOG(vmd, "PCI device found: %04x:%04x ***\n",
630 if (!dev->bus->vmd->scan_completed) {
655 new_bus->vmd = parent->vmd;
656 new_bus->config_bus_number = new_bus->bus_number - new_bus->vmd->vmd_bus.bus_start;
664 bridge->pci.addr.domain = parent->vmd->pci->addr.domain;
670 vmd_get_next_bus_number(struct vmd_adapter *vmd)
674 if ((vmd->next_bus_number + 1) < vmd->max_pci_bus) {
675 bus = vmd->next_bus_number;
676 vmd->next_bus_number++;
687 if (dev && dev->bus && dev->bus->vmd &&
688 ((dev->bus->vmd->next_bus_number + RESERVED_HOTPLUG_BUSES) < dev->bus->vmd->max_pci_bus)) {
690 dev->bus->vmd->next_bus_number += RESERVED_HOTPLUG_BUSES;
865 dev->pci.addr.domain = dev->bus->vmd->domain;
869 dev->pci.numa_id = spdk_pci_device_get_numa_id(dev->bus->vmd->pci);
872 dev->pci.type = "vmd";
887 struct vmd_adapter *vmd;
897 vmd_setup_msix(dev, &bus->vmd->msix_table[0]);
902 SPDK_INFOLOG(vmd, "Initializing NVMe device at %s\n", bdf);
903 dev->pci.parent = dev->bus->vmd->pci;
913 vmd = bus->vmd;
914 vmd->target[vmd->nvme_count] = dev;
915 vmd->nvme_count++;
973 new_bus_num = vmd_get_next_bus_number(bus->vmd);
994 SPDK_INFOLOG(vmd, "hotplug_capable/slot_implemented = "
1005 TAILQ_INSERT_TAIL(&bus->vmd->bus_list, new_bus, tailq);
1042 SPDK_INFOLOG(vmd, "PCI DEVICE: [%04X:%04X] type(%x) : %s\n",
1047 SPDK_INFOLOG(vmd, "PCI DEVICE: [%04X:%04X]\n",
1051 SPDK_INFOLOG(vmd, "\tDOMAIN:BDF: %04x:%02x:%02x:%x\n", dev->pci.addr.domain,
1055 SPDK_INFOLOG(vmd, "\tbase addr: %x : %p\n",
1060 SPDK_INFOLOG(vmd, "\tPrimary = %d, Secondary = %d, Subordinate = %d\n",
1063 SPDK_INFOLOG(vmd, "\tSlot implemented on this device.\n");
1065 SPDK_INFOLOG(vmd, "Device has HOT-PLUG capable slot.\n");
1074 SPDK_INFOLOG(vmd, "\tSN: %02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x\n",
1088 SPDK_INFOLOG(vmd, "vendor/device id:%x:%x\n", dev->header->common.vendor_id,
1097 SPDK_INFOLOG(vmd, "prefetch: %x:%x\n",
1122 header = (volatile void *)(bus->vmd->cfg_vaddr +
1140 TAILQ_INSERT_TAIL(&bus->vmd->bus_list, bus, tailq);
1141 bus->vmd->next_bus_number = bus->bus_number + 1;
1144 SPDK_INFOLOG(vmd, "VMD scan found %u devices\n", dev_cnt);
1145 SPDK_INFOLOG(vmd, "VMD scan found %u END DEVICES\n", g_end_device_count);
1147 SPDK_INFOLOG(vmd, "PCIe devices attached to VMD %04x:%02x:%02x:%x...\n",
1148 bus->vmd->pci->addr.domain, bus->vmd->pci->addr.bus,
1149 bus->vmd->pci->addr.dev, bus->vmd->pci->addr.func);
1151 TAILQ_FOREACH(bus_entry, &bus->vmd->bus_list, tailq) {
1166 vmd_domain_map_bar(struct vmd_adapter *vmd, uint32_t bar,
1172 rc = spdk_pci_device_map_bar(vmd->pci, bar, vaddr, &unused, size);
1182 rc = spdk_pci_device_cfg_read(vmd->pci, paddr, sizeof(*paddr),
1194 vmd_domain_map_bars(struct vmd_adapter *vmd)
1198 rc = vmd_domain_map_bar(vmd, 0, (void **)&vmd->cfg_vaddr,
1199 &vmd->cfgbar, &vmd->cfgbar_size);
1205 rc = vmd_domain_map_bar(vmd, 2, (void **)&vmd->mem_vaddr,
1206 &vmd->membar, &vmd->membar_size);
1212 vmd->physical_addr = vmd->membar;
1213 vmd->current_addr_size = vmd->membar_size;
1219 vmd_set_starting_bus_number(struct vmd_adapter *vmd, uint8_t *bus_start,
1225 spdk_pci_device_cfg_read32(vmd->pci, &vmd_cap, PCI_VMD_VMCAP);
1226 spdk_pci_device_cfg_read32(vmd->pci, &vmd_config, PCI_VMD_VMCONFIG);
1240 vmd_enumerate_devices(struct vmd_adapter *vmd)
1244 vmd->vmd_bus.vmd = vmd;
1245 vmd->vmd_bus.domain = vmd->pci->addr.domain;
1247 if (vmd->pci->id.device_id == PCI_DEVICE_ID_INTEL_VMD_ICX) {
1248 vmd_set_starting_bus_number(vmd, &bus_start, &max_bus);
1249 vmd->vmd_bus.bus_start = bus_start;
1250 vmd->vmd_bus.secondary_bus = vmd->vmd_bus.subordinate_bus = vmd->vmd_bus.bus_start;
1251 vmd->vmd_bus.primary_bus = vmd->vmd_bus.bus_number = vmd->vmd_bus.bus_start;
1252 vmd->max_pci_bus = max_bus;
1254 vmd->vmd_bus.bus_start = 0;
1255 vmd->vmd_bus.secondary_bus = vmd->vmd_bus.subordinate_bus = 0;
1256 vmd->vmd_bus.primary_bus = vmd->vmd_bus.bus_number = 0;
1257 vmd->max_pci_bus = PCI_MAX_BUS_NUMBER;
1260 return vmd_scan_pcibus(&vmd->vmd_bus);
1271 TAILQ_FOREACH(bus, &g_vmd_container.vmd[i].bus_list, tailq) {
1295 struct vmd_adapter *vmd = &vmd_c->vmd[vmd_c->count];
1302 SPDK_INFOLOG(vmd, "Found a VMD[ %d ] at %s\n", vmd_c->count, bdf);
1304 /* map vmd bars */
1305 vmd->pci = pci_dev;
1306 vmd->vmd_index = vmd_c->count;
1307 vmd->domain = (pci_dev->addr.bus << 16) | (pci_dev->addr.dev << 8) | pci_dev->addr.func;
1308 TAILQ_INIT(&vmd->bus_list);
1310 if (vmd_domain_map_bars(vmd) != 0) {
1314 SPDK_INFOLOG(vmd, "vmd config bar(%p) vaddr(%p) size(%x)\n",
1315 (void *)vmd->cfgbar, (void *)vmd->cfg_vaddr,
1316 (uint32_t)vmd->cfgbar_size);
1317 SPDK_INFOLOG(vmd, "vmd mem bar(%p) vaddr(%p) size(%x)\n",
1318 (void *)vmd->membar, (void *)vmd->mem_vaddr,
1319 (uint32_t)vmd->membar_size);
1322 vmd_enumerate_devices(vmd);
1340 if (spdk_pci_addr_compare(&vmd_addr, &g_vmd_container.vmd[i].pci->addr) == 0) {
1341 TAILQ_FOREACH(bus, &g_vmd_container.vmd[i].bus_list, tailq) {
1423 TAILQ_FOREACH(bus, &g_vmd_container.vmd[i].bus_list, tailq) {
1434 SPDK_INFOLOG(vmd, "Device hotplug detected on bus "
1438 SPDK_INFOLOG(vmd, "Device hotremove detected on bus "
1461 assert(strcmp(spdk_pci_device_get_type(&device->pci), "vmd") == 0);
1475 TAILQ_FOREACH(bus, &g_vmd_container.vmd[i].bus_list, tailq) {
1487 struct vmd_adapter *vmd;
1498 vmd = &g_vmd_container.vmd[i];
1499 if (vmd->domain != addr->domain) {
1503 TAILQ_FOREACH(bus, &vmd->bus_list, tailq) {
1537 assert(strcmp(spdk_pci_device_get_type(pci_dev), "vmd") == 0);
1544 .name = "vmd",
1549 SPDK_PCI_REGISTER_DEVICE_PROVIDER(vmd, &g_vmd_device_provider);
1563 spdk_pci_device_detach(g_vmd_container.vmd[i].pci);
1567 SPDK_LOG_REGISTER_COMPONENT(vmd)