Revision 42e4126b hw/pci.c
b/hw/pci.c | ||
---|---|---|
1108 | 1108 |
uint32_t address, int len) |
1109 | 1109 |
{ |
1110 | 1110 |
uint32_t val = 0; |
1111 |
assert(len == 1 || len == 2 || len == 4); |
|
1112 |
len = MIN(len, pci_config_size(d) - address); |
|
1111 |
|
|
1113 | 1112 |
memcpy(&val, d->config + address, len); |
1114 | 1113 |
return le32_to_cpu(val); |
1115 | 1114 |
} |
... | ... | |
1117 | 1116 |
void pci_default_write_config(PCIDevice *d, uint32_t addr, uint32_t val, int l) |
1118 | 1117 |
{ |
1119 | 1118 |
int i, was_irq_disabled = pci_irq_disabled(d); |
1120 |
uint32_t config_size = pci_config_size(d); |
|
1121 | 1119 |
|
1122 |
for (i = 0; i < l && addr + i < config_size; val >>= 8, ++i) {
|
|
1120 |
for (i = 0; i < l; val >>= 8, ++i) { |
|
1123 | 1121 |
uint8_t wmask = d->wmask[addr + i]; |
1124 | 1122 |
uint8_t w1cmask = d->w1cmask[addr + i]; |
1125 | 1123 |
assert(!(wmask & w1cmask)); |
Also available in: Unified diff