WriteReg32
void WriteReg32(uint32 addr, uint32 value);
WriteReg32(PRI_STREAM_STRIDE,
WriteReg32(S3_GLOBAL_GBD_REG, bci_enable | S3_LITTLE_ENDIAN | S3_BD64);
WriteReg32(ADVANCED_FUNC_CTRL, ulTmp);
WriteReg32(PRI_STREAM_FBUF_ADDR0, si.frameBufferOffset & 0x7fffff);
WriteReg32(PRI_STREAM_FBUF_ADDR1, si.frameBufferOffset & 0x7fffff);
WriteReg32(PRI_STREAM2_FBUF_ADDR0, si.frameBufferOffset & 0x7fffff);
WriteReg32(PRI_STREAM2_FBUF_ADDR1, si.frameBufferOffset & 0x7fffff);
WriteReg32(PRI_STREAM_STRIDE,
WriteReg32(PRI_STREAM2_STRIDE,
WriteReg32(S3_GLOBAL_GBD_REG, bci_enable | S3_LITTLE_ENDIAN | S3_BD64);
WriteReg32(PRI_STREAM_STRIDE,
WriteReg32(PRI_STREAM2_STRIDE,
WriteReg32(PRI_STREAM_FBUF_ADDR0, si.frameBufferOffset);
WriteReg32(PRI_STREAM_FBUF_ADDR1, 0x80000000);
WriteReg32(PRI_STREAM2_FBUF_ADDR0, (si.frameBufferOffset & 0xfffffffc) | 0x80000000);
WriteReg32(PRI_STREAM2_FBUF_ADDR1, si.frameBufferOffset & 0xfffffffc);
WriteReg32(S3_GLOBAL_GBD_REG, bci_enable | S3_BD64 | 0x10000000);
WriteReg32(PRI_STREAM_FBUF_ADDR0, si.frameBufferOffset);
WriteReg32(PRI_STREAM2_FBUF_ADDR0, si.frameBufferOffset);
WriteReg32(PRI_STREAM_STRIDE, ((mode.bytesPerRow << 4) & 0x7ff0));
WriteReg32(PRI_STREAM2_STRIDE, ((mode.bytesPerRow << 4) & 0x7ff0));
WriteReg32(S3_GLOBAL_GBD_REG, bci_enable | S3_BD64 | 0x10000000);
WriteReg32(0x8128, ~0); // enable all write planes
WriteReg32(0x812C, ~0); // enable all read planes
WriteReg32(0x48C18, ReadReg32(0x48C18) & 0x3FF0); // Disable BCI
WriteReg32(0x48C14, (si.cobOffset >> 11) | (si.cobSizeIndex << 29));
WriteReg32(0x48C10, 0x78207220);
WriteReg32(0x48C0C, 0);
WriteReg32(0x48C18, ReadReg32(0x48C18) | 0x0C);
WriteReg32(0x48C18, ReadReg32(0x48C18) & 0x3FF0); // Disable BCI
WriteReg32(0x48C10, 0x00700040);
WriteReg32(0x48C0C, 0);
WriteReg32(0x48C18, ReadReg32(0x48C18) | 0x08); // enable BCI without COB
WriteReg32(0x48C18, 0);
WriteReg32(0x48C18, (si.cobOffset >> 7) | (si.cobSizeIndex));
WriteReg32(0x48A30, 0);
WriteReg32(0x48C18, ReadReg32(0x48C18) | 0x00280000);
WriteReg32(DEST_SRC_STR, mode.bytesPerRow << 16 | mode.bytesPerRow);
WriteReg32(SRC_BASE, 0);
WriteReg32(DEST_BASE, 0);
WriteReg32(CLIP_L_R, ((0) << 16) | mode.timing.h_display);
WriteReg32(CLIP_T_B, ((0) << 16) | mode.timing.v_display);
WriteReg32(MONO_PAT_0, ~0);
WriteReg32(MONO_PAT_1, ~0);
WriteReg32(PRI_STREAM_FBUF_ADDR0, 0);
WriteReg32(PRI_STREAM_FBUF_ADDR1, 0);
WriteReg32(PRI_STREAM_STRIDE,
WriteReg32(S3_GLOBAL_GBD_REG, bci_enable | S3_LITTLE_ENDIAN | S3_BD64);
WriteReg32(ADVANCED_FUNC_CTRL, ulTmp);
WriteReg32(PRI_STREAM_FBUF_ADDR0, address & 0xFFFFFFFC);
WriteReg32(PRI_STREAM_FBUF_ADDR1, address & 0xFFFFFFFC);
WriteReg32(PRI_STREAM_FBUF_ADDR0, 0x80000000);
WriteReg32(PRI_STREAM_FBUF_ADDR1, address & 0xFFFFFFF8);
WriteReg32(PRI_STREAM_FBUF_ADDR0, (address & 0xFFFFFFF8));
WriteReg32(PRI_STREAM2_FBUF_ADDR0, (address & 0xFFFFFFF8));
WriteReg32(PRI_STREAM_FBUF_ADDR0, address | 0xFFFFFFFC);
WriteReg32(PRI_STREAM_FBUF_ADDR1, address | 0x80000000);
WriteReg32(PRI_STREAM_FBUF_ADDR0, 0);
WriteReg32(PRI_STREAM_FBUF_ADDR1, 0);
WriteReg32(FRGD_COLOR, color);
WriteReg32(FRGD_COLOR, color);
WriteReg32(WRT_MASK, ~0); // enable all planes
WriteReg32(RWIDTH_HEIGHT, ((w - 1) << 16) + h);
WriteReg32(RDEST_XY, (x << 16) | y);
WriteReg32(CMD_SET, cmd);
WriteReg32(RWIDTH_HEIGHT, ((width) << 16) | (height + 1));
WriteReg32(RSRC_XY, (src_x << 16) | src_y);
WriteReg32(RDEST_XY, (dest_x << 16) | dest_y);
WriteReg32(CMD_SET, cmd);
WriteReg32(PAT_FG_CLR, color);
WriteReg32(RWIDTH_HEIGHT, ((w - 1) << 16) | h);
WriteReg32(RDEST_XY, (x << 16) | y);
WriteReg32(CMD_SET, cmd);
WriteReg32(PAT_FG_CLR, color);
WriteReg32(RWIDTH_HEIGHT, ((w - 1) << 16) | 1);
WriteReg32(RDEST_XY, (x << 16) | y);
WriteReg32(CMD_SET, cmd);
WriteReg32(DEST_SRC_STR, mode.bytesPerRow << 16 | mode.bytesPerRow);
WriteReg32(DEST_SRC_STR, mode.bytesPerRow << 16 | mode.bytesPerRow);
WriteReg32(SRC_BASE, 0);
WriteReg32(DEST_BASE, 0);
WriteReg32(CLIP_L_R, ((0) << 16) | mode.timing.h_display);
WriteReg32(CLIP_T_B, ((0) << 16) | mode.timing.v_display);
WriteReg32(MONO_PAT_0, ~0);
WriteReg32(MONO_PAT_1, ~0);
WriteReg32(FIFO_CONTROL_REG, 0xC000);
WriteReg32(CMD_SET, CMD_NOP); // turn off auto-execute
WriteReg32(SRC_BASE, 0);
WriteReg32(DEST_BASE, 0);
WriteReg32(DEST_SRC_STR, mode.bytesPerRow | (mode.bytesPerRow << 16));
WriteReg32(CLIP_L_R, ((0) << 16) | mode.timing.h_display);
WriteReg32(CLIP_T_B, ((0) << 16) | mode.timing.v_display);
WriteReg32(CMD_SET, CMD_NOP);
WriteReg32(UHCI_FRBASEADD, (uint32)physicalAddress);
inline void WriteReg32(uint32 reg, uint32 value);