// gcc -O -o write-cfgreg-with-ioport write-cfgreg-with-ioport.c #include #include #include typedef unsigned long u32; int main(int argc, char *argv[]){ int i; unsigned int data; if(argc < 2){ printf("USAGE: %s data\n", argv[0]); return 1; } data = strtoul(argv[1], NULL, 16); printf("data=%08X\n", data); iopl(3); u32 bus = 4, dev = 9; u32 adr = (bus << 16) | (dev << 11); outl(adr|0x80000000, 0xcf8); outl(0x00000000 | ((data & 0x3) << 2) , 0xcfc); outl(adr|0x80000004, 0xcf8); outl(0x00000000 | data & 0xC, 0xcfc); outl(adr|0x80000008, 0xcf8); outl(0x00000000 | data >> 2 & 0xC, 0xcfc); outl(adr|0x8000000C, 0xcf8); outl(0x00000000 | data >> 4 & 0xC, 0xcfc); outl(0x00000000, 0xcf8); iopl(0); return 0; }