VIAPM_OUTB
VIAPM_OUTB(SMBSCTRL, VIAPM_INB(SMBSCTRL) & ~SMBSCTRL_ENABLE);
VIAPM_OUTB(SMBHCTRL, VIAPM_INB(SMBHCTRL) | SMBHCTRL_ENABLE);
VIAPM_OUTB(GPIO_DIR, VIAPM_INB(GPIO_DIR) | VIAPM_SCL | VIAPM_SDA);
VIAPM_OUTB(GPIO_VAL, val);
VIAPM_OUTB(GPIO_VAL, val);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_KILL);
VIAPM_OUTB(SMBHST, SMBHST_FAILED | SMBHST_COLLID |
VIAPM_OUTB(SMBHADDR, slave & ~LSB);
VIAPM_OUTB(SMBHADDR, slave | LSB);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_QUICK);
VIAPM_OUTB(SMBHADDR, slave & ~ LSB);
VIAPM_OUTB(SMBHCMD, byte);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV);
VIAPM_OUTB(SMBHADDR, slave | LSB);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_SENDRECV);
VIAPM_OUTB(SMBHADDR, slave & ~ LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHDATA0, byte);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE);
VIAPM_OUTB(SMBHADDR, slave | LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BYTE);
VIAPM_OUTB(SMBHADDR, slave & ~ LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHDATA0, word & 0x00ff);
VIAPM_OUTB(SMBHDATA1, (word & 0xff00) >> 8);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD);
VIAPM_OUTB(SMBHADDR, slave | LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_WORD);
VIAPM_OUTB(SMBHADDR, slave & ~LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHDATA0, count);
VIAPM_OUTB(SMBHBLOCK, buf[i]);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK);
VIAPM_OUTB(SMBHADDR, slave | LSB);
VIAPM_OUTB(SMBHCMD, cmd);
VIAPM_OUTB(SMBHCTRL, SMBHCTRL_START | SMBHCTRL_BLOCK);