- for(i=0; i<op->num_values; i++)
- {
- if (verbose)
- {
- putchar(' ');
- printf(m, op->values[i]);
- }
- if (demo_mode)
- continue;
- switch (op->width)
- {
- case 1:
- pci_write_byte(dev, addr, op->values[i]);
- break;
- case 2:
- pci_write_word(dev, addr, op->values[i]);
- break;
- default:
- pci_write_long(dev, addr, op->values[i]);
- break;
- }
- addr += op->width;
- }
+ {
+ for(i=0; i<op->num_values; i++)
+ {
+ if ((op->values[i].mask & max_values[width]) == max_values[width])
+ {
+ x = op->values[i].value;
+ if (verbose)
+ {
+ putchar(' ');
+ printf(formats[width], op->values[i].value);
+ }
+ }
+ else
+ {
+ switch (width)
+ {
+ case 1:
+ y = pci_read_byte(dev, addr);
+ break;
+ case 2:
+ y = pci_read_word(dev, addr);
+ break;
+ default:
+ y = pci_read_long(dev, addr);
+ break;
+ }
+ x = (y & ~op->values[i].mask) | op->values[i].value;
+ if (verbose)
+ {
+ putchar(' ');
+ printf(mask_formats[width], y, op->values[i].value, op->values[i].mask, x);
+ }
+ }
+ if (!demo_mode)
+ {
+ switch (width)
+ {
+ case 1:
+ pci_write_byte(dev, addr, x);
+ break;
+ case 2:
+ pci_write_word(dev, addr, x);
+ break;
+ default:
+ pci_write_long(dev, addr, x);
+ break;
+ }
+ }
+ addr += width;
+ }
+ if (verbose)
+ putchar('\n');
+ }