Цитата
в чем ошибся не соображу?
Для того, что бы обнаружить биты в BAR регистре, которые
можно установить, в них необходимо записать 1, а не надеяться на то, что она там будет сама по себе. Вы туда ничего не писали, соответственно все младшие нулевые биты адреса, которые туда записала ОС вы посчитали немодифицируемыми, а это не так
Вот, что должно быть:
Код
uint32_t barorg = PciReadConfigDWord(bus, dev, func, barnum);
PciWriteConfigDWord(bus, dev, func, barnum,-1);
uint32_t bartemp = PciReadConfigDWord(bus, dev, func, barnum);
PciWriteConfigDWord(bus, dev, func, barnum, barorg);
barstr.Value = barorg;
barstr.RangeStart = barorg&~7;
barstr.Size = -(bartemp&~7);
barstr.RangeEnd = barstr.RangeStart+barstr.Size;