Open
Description
Both IO and MEM bars can have 0 in its address bits, but size is always given. In those cases we must allocate the area ourselves (probably).
Also, we can be given 64-bit mem BARs, however they support high bits being 0, so 32-bit addresses are supported.
Finally, in the case of virtio, we may not even be given a membar for virtio rings and must allocate that from scratch? Not sure. One of the BARs is used for MSI-x vectors, and I think its the 0x1000 one, but its not easy to tell. I seem to remember that we get an index into membars and use that to determine which is uses for msi-x, so, it may be necessary to allocate all bars before initializing msix just to make sure the indexing turns out correct.