#define MODULE_BIT 0x00080000
#include "nv_std.h"
static void nv_init_for_3D(void);
static cmd_nv_rop5_solid* nv_rop5_solid_ptr;
static cmd_nv_image_black_rectangle* nv_image_black_rectangle_ptr;
static cmd_nv_image_pattern* nv_image_pattern_ptr;
static cmd_nv_image_blit* nv_image_blit_ptr;
static cmd_nv3_gdi_rectangle_text* nv3_gdi_rectangle_text_ptr;
status_t nv_acc_wait_idle()
{
while (ACCR(STATUS))
{
snooze (100);
}
return B_OK;
}
status_t nv_acc_init()
{
uint16 cnt;
NV_REG32(NV32_PWRUPCTRL) = 0xffff00ff;
snooze(1000);
NV_REG32(NV32_PWRUPCTRL) = 0xffffffff;
ACCW(PT_NUMERATOR, 0x00000008);
ACCW(PT_DENOMINATR, 0x00000003);
ACCW(PT_INTEN, 0x00000000);
ACCW(PT_INTSTAT, 0xffffffff);
if (si->ps.card_arch == NV04A)
{
NV_REG32(NV32_PFB_CONFIG_0) = 0x00001114;
}
ACCW(PF_CACHES, 0x00000000);
ACCW(PF_MODE, 0x00000000);
ACCW(PF_CACH1_PSH0, 0x00000000);
ACCW(PF_CACH1_PUL0, 0x00000000);
ACCW(PF_CACH1_PSH1, 0x00000000);
ACCW(PF_CACH1_DMAP, 0x00000000);
ACCW(PF_CACH1_DMAG, 0x00000000);
ACCW(PF_CACH1_DMAI, 0x00000000);
ACCW(PF_CACH0_PSH0, 0x00000000);
ACCW(PF_CACH0_PUL0, 0x00000000);
ACCW(PF_RAMHT, 0x03000100);
ACCW(PF_RAMFC, 0x00000110);
ACCW(PF_RAMRO, 0x00000112);
ACCW(PF_SIZE, 0x0000ffff);
ACCW(PF_CACH1_HASH, 0x0000ffff);
ACCW(PF_INTEN, 0x00000000);
ACCW(PF_INTSTAT, 0xffffffff);
ACCW(PF_CACH0_PUL1, 0x00000001);
ACCW(PF_CACH1_DMAC, 0x00000000);
ACCW(PF_CACH1_ENG, 0x00000000);
ACCW(PF_CACH1_DMAF, 0x000f0078);
ACCW(PF_CACH1_DMAS, 0x00000000);
ACCW(PF_CACH1_PSH0, 0x00000001);
ACCW(PF_CACH1_PUL0, 0x00000001);
ACCW(PF_CACH1_PUL1, 0x00000001);
ACCW(PF_CACHES, 0x00000001);
for(cnt = 0; cnt < 0x0400; cnt++)
NV_REG32(NVACC_HT_HANDL_00 + (cnt << 2)) = 0;
if (si->ps.card_arch >= NV40A)
{
ACCW(HT_HANDL_00, (0x80000000 | NV10_CONTEXT_SURFACES_2D));
ACCW(HT_VALUE_00, 0x0010114c);
ACCW(HT_HANDL_01, (0x80000000 | NV_IMAGE_BLIT));
ACCW(HT_VALUE_01, 0x00101148);
ACCW(HT_HANDL_02, (0x80000000 | NV4_GDI_RECTANGLE_TEXT));
ACCW(HT_VALUE_02, 0x0010114a);
ACCW(HT_HANDL_10, (0x80000000 | NV_ROP5_SOLID));
ACCW(HT_VALUE_10, 0x00101142);
ACCW(HT_HANDL_11, (0x80000000 | NV_IMAGE_BLACK_RECTANGLE));
ACCW(HT_VALUE_11, 0x00101144);
ACCW(HT_HANDL_12, (0x80000000 | NV_IMAGE_PATTERN));
ACCW(HT_VALUE_12, 0x00101146);
}
else
{
ACCW(HT_HANDL_00, (0x80000000 | NV4_SURFACE));
ACCW(HT_VALUE_00, 0x80011145);
ACCW(HT_HANDL_01, (0x80000000 | NV_IMAGE_BLIT));
ACCW(HT_VALUE_01, 0x80011146);
ACCW(HT_HANDL_02, (0x80000000 | NV4_GDI_RECTANGLE_TEXT));
ACCW(HT_VALUE_02, 0x80011147);
ACCW(HT_HANDL_03, (0x80000000 | NV4_CONTEXT_SURFACES_ARGB_ZS));
ACCW(HT_VALUE_03, 0x80011148);
ACCW(HT_HANDL_04, (0x80000000 | NV4_DX5_TEXTURE_TRIANGLE));
ACCW(HT_VALUE_04, 0x80011149);
ACCW(HT_HANDL_05, (0x80000000 | NV4_DX6_MULTI_TEXTURE_TRIANGLE));
ACCW(HT_VALUE_05, 0x8001114a);
ACCW(HT_HANDL_06, (0x80000000 | NV1_RENDER_SOLID_LIN));
ACCW(HT_VALUE_06, 0x8001114b);
ACCW(HT_HANDL_10, (0x80000000 | NV_ROP5_SOLID));
ACCW(HT_VALUE_10, 0x80011142);
ACCW(HT_HANDL_11, (0x80000000 | NV_IMAGE_BLACK_RECTANGLE));
ACCW(HT_VALUE_11, 0x80011143);
ACCW(HT_HANDL_12, (0x80000000 | NV_IMAGE_PATTERN));
ACCW(HT_VALUE_12, 0x80011144);
}
if (si->ps.card_arch >= NV40A)
{
ACCW(PR_CTX0_R, 0x00003000);
ACCW(PR_CTX1_R, (si->ps.memory_size - 1));
ACCW(PR_CTX2_R, ((0x00000000 & 0xfffff000) | 0x00000002));
ACCW(PR_CTX3_R, 0x00000002);
ACCW(PR_CTX0_0, 0x02080043);
ACCW(PR_CTX2_0, 0x00000000);
ACCW(PR_CTX3_0, 0x00000000);
ACCW(PR_CTX0_1, 0x00000000);
ACCW(PR_CTX1_1, 0x00000000);
ACCW(PR_CTX0_2, 0x02080019);
ACCW(PR_CTX2_2, 0x00000000);
ACCW(PR_CTX3_2, 0x00000000);
ACCW(PR_CTX0_3, 0x00000000);
ACCW(PR_CTX1_3, 0x00000000);
ACCW(PR_CTX0_4, 0x02080018);
ACCW(PR_CTX2_4, 0x00000000);
ACCW(PR_CTX3_4, 0x00000000);
ACCW(PR_CTX0_5, 0x00000000);
ACCW(PR_CTX1_5, 0x00000000);
ACCW(PR_CTX0_6, 0x0208005f);
ACCW(PR_CTX2_6, 0x00000000);
ACCW(PR_CTX3_6, 0x00000000);
ACCW(PR_CTX0_7, 0x00000000);
ACCW(PR_CTX1_7, 0x00000000);
ACCW(PR_CTX0_8, 0x0208004a);
ACCW(PR_CTX2_8, 0x00000000);
ACCW(PR_CTX3_8, 0x00000000);
ACCW(PR_CTX0_9, 0x00000000);
ACCW(PR_CTX1_9, 0x00000000);
ACCW(PR_CTX0_A, 0x02080062);
ACCW(PR_CTX2_A, 0x00001140);
ACCW(PR_CTX3_A, 0x00001140);
ACCW(PR_CTX0_B, 0x00000000);
ACCW(PR_CTX1_B, 0x00000000);
}
else
{
ACCW(PR_CTX0_R, 0x00003000);
ACCW(PR_CTX1_R, (si->ps.memory_size - 1));
ACCW(PR_CTX2_R, ((0x00000000 & 0xfffff000) | 0x00000002));
ACCW(PR_CTX3_R, 0x00000002);
ACCW(PR_CTX0_0, 0x01008043);
ACCW(PR_CTX2_0, 0x00000000);
ACCW(PR_CTX3_0, 0x00000000);
ACCW(PR_CTX0_1, 0x01008019);
ACCW(PR_CTX2_1, 0x00000000);
ACCW(PR_CTX3_1, 0x00000000);
ACCW(PR_CTX0_2, 0x01008018);
ACCW(PR_CTX2_2, 0x00000000);
ACCW(PR_CTX3_2, 0x00000000);
if(si->ps.card_arch >= NV10A)
{
ACCW(PR_CTX0_3, 0x01008062);
}
else
{
ACCW(PR_CTX0_3, 0x01008042);
}
ACCW(PR_CTX1_3, 0x00000000);
ACCW(PR_CTX2_3, 0x11401140);
ACCW(PR_CTX3_3, 0x00000000);
ACCW(PR_CTX0_4, 0x0100805f);
ACCW(PR_CTX2_4, 0x00000000);
ACCW(PR_CTX3_4, 0x00000000);
ACCW(PR_CTX0_5, 0x0100804a);
ACCW(PR_CTX2_5, 0x00000000);
ACCW(PR_CTX3_5, 0x00000000);
if (si->ps.card_arch != NV04A)
{
ACCW(PR_CTX0_6, 0x00000093);
}
else
{
ACCW(PR_CTX0_6, 0x00000053);
}
ACCW(PR_CTX2_6, 0x11401140);
ACCW(PR_CTX3_6, 0x00000000);
if (si->ps.card_arch != NV04A)
{
ACCW(PR_CTX0_7, 0x0300a094);
}
else
{
ACCW(PR_CTX0_7, 0x0300a054);
}
ACCW(PR_CTX1_7, 0x00000d01);
ACCW(PR_CTX2_7, 0x11401140);
ACCW(PR_CTX3_7, 0x00000000);
if (si->ps.card_arch != NV04A)
{
ACCW(PR_CTX0_8, 0x0300a095);
}
else
{
ACCW(PR_CTX0_8, 0x0300a055);
}
ACCW(PR_CTX1_8, 0x00000d01);
ACCW(PR_CTX2_8, 0x11401140);
ACCW(PR_CTX3_8, 0x00000000);
ACCW(PR_CTX0_9, 0x0300a01c);
ACCW(PR_CTX2_9, 0x11401140);
ACCW(PR_CTX3_9, 0x00000000);
}
switch (si->ps.card_arch)
{
case NV40A:
ACCW(DEBUG0, 0x0003ffff);
ACCW(DEBUG1, 0x401287c0);
ACCW(DEBUG2, 0x24f82ad9);
ACCW(DEBUG3, 0x60de8051);
ACCW(DEBUG0, 0x00000000);
ACCW(NV10_DEBUG4, 0x00008000);
ACCW(NV25_WHAT0, 0x00be3c5f);
switch (si->ps.card_type)
{
case NV40:
case NV45:
ACCW(NV40_WHAT0, 0x83280fff);
ACCW(NV40_WHAT1, 0x000000a0);
ACCW(NV40_WHAT2, 0x0078e366);
ACCW(NV40_WHAT3, 0x0000014c);
break;
case NV41:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV40P_WHAT2, 0x007596ff);
ACCW(NV40P_WHAT3, 0x00000108);
break;
case NV43:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV40P_WHAT2, 0x0072cb77);
ACCW(NV40P_WHAT3, 0x00000108);
break;
case NV44:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
ACCW(NV44_WHAT2, 0x00000000);
ACCW(NV44_WHAT3, 0x00000000);
NV_REG32(NV32_NV44_WHAT10) = NV_REG32(NV32_NV10STRAPINFO);
NV_REG32(NV32_NV44_WHAT11) = 0x00000000;
NV_REG32(NV32_NV44_WHAT12) = 0x00000000;
NV_REG32(NV32_NV44_WHAT13) = NV_REG32(NV32_NV10STRAPINFO);
break;
default:
ACCW(NV40P_WHAT0, 0x83280eff);
ACCW(NV40P_WHAT1, 0x000000a0);
break;
}
break;
case NV04A:
ACCW(DEBUG0, 0x1231c001);
ACCW(DEBUG1, 0x72111101);
ACCW(DEBUG2, 0x11d5f071);
ACCW(DEBUG3, 0x10d4ff31);
break;
default:
ACCW(DEBUG0, 0x0003ffff);
ACCW(DEBUG1, 0x00118701);
ACCW(DEBUG2, 0x24f82ad9);
ACCW(DEBUG3, 0x55de0030);
ACCW(DEBUG0, 0x00000000);
ACCW(NV10_DEBUG4, 0);
break;
}
ACCW(CACHE1_1, 0);
ACCW(CACHE1_2, 0);
ACCW(CACHE1_3, 0);
ACCW(CACHE1_4, 0);
ACCW(CACHE1_5, 0);
ACCW(CACHE2_1, 0);
ACCW(CACHE2_2, 0);
ACCW(CACHE2_3, 0);
ACCW(CACHE2_4, 0);
ACCW(CACHE2_5, 0);
ACCW(CACHE3_1, 0);
ACCW(CACHE3_2, 0);
ACCW(CACHE3_3, 0);
ACCW(CACHE3_4, 0);
ACCW(CACHE3_5, 0);
ACCW(CACHE4_1, 0);
ACCW(CACHE4_2, 0);
ACCW(CACHE4_3, 0);
ACCW(CACHE4_4, 0);
ACCW(CACHE4_5, 0);
if (si->ps.card_arch != NV04A)
ACCW(NV10_CACHE5_1, 0);
ACCW(CACHE5_2, 0);
ACCW(CACHE5_3, 0);
ACCW(CACHE5_4, 0);
ACCW(CACHE5_5, 0);
if (si->ps.card_arch != NV04A)
ACCW(NV10_CACHE6_1, 0);
ACCW(CACHE6_2, 0);
ACCW(CACHE6_3, 0);
ACCW(CACHE6_4, 0);
ACCW(CACHE6_5, 0);
if (si->ps.card_arch != NV04A)
ACCW(NV10_CACHE7_1, 0);
ACCW(CACHE7_2, 0);
ACCW(CACHE7_3, 0);
ACCW(CACHE7_4, 0);
ACCW(CACHE7_5, 0);
if (si->ps.card_arch != NV04A)
ACCW(NV10_CACHE8_1, 0);
ACCW(CACHE8_2, 0);
ACCW(CACHE8_3, 0);
ACCW(CACHE8_4, 0);
ACCW(CACHE8_5, 0);
if (si->ps.card_arch != NV04A)
{
ACCW(NV10_CTX_SW1, 0);
ACCW(NV10_CTX_SW2, 0);
ACCW(NV10_CTX_SW3, 0);
ACCW(NV10_CTX_SW4, 0);
ACCW(NV10_CTX_SW5, 0);
}
ACCW(BBASE0, 0x00000000);
ACCW(BBASE1, 0x00000000);
ACCW(BBASE2, 0x00000000);
ACCW(BBASE3, 0x00000000);
ACCW(BLIMIT0, (si->ps.memory_size - 1));
ACCW(BLIMIT1, (si->ps.memory_size - 1));
ACCW(BLIMIT2, (si->ps.memory_size - 1));
ACCW(BLIMIT3, (si->ps.memory_size - 1));
if (si->ps.card_arch >= NV10A)
{
ACCW(NV10_BBASE4, 0x00000000);
ACCW(NV10_BBASE5, 0x00000000);
ACCW(NV10_BLIMIT4, (si->ps.memory_size - 1));
ACCW(NV10_BLIMIT5, (si->ps.memory_size - 1));
}
if (si->ps.card_arch >= NV20A)
{
if ((si->ps.card_type > NV40) && (si->ps.card_type != NV45))
{
ACCW(NV40P_BLIMIT6, (si->ps.memory_size - 1));
ACCW(NV40P_BLIMIT7, (si->ps.memory_size - 1));
}
else
{
ACCW(NV20_BLIMIT6, (si->ps.memory_size - 1));
ACCW(NV20_BLIMIT7, (si->ps.memory_size - 1));
if (si->ps.card_type < NV40)
{
ACCW(NV20_BLIMIT8, (si->ps.memory_size - 1));
ACCW(NV20_BLIMIT9, (si->ps.memory_size - 1));
}
}
}
ACCW(ACC_INTE, 0x00000000);
ACCW(ACC_INTS, 0xffffffff);
if (si->ps.card_arch != NV04A)
{
ACCW(NV10_CTX_CTRL, 0x10010100);
ACCW(NV10_ACC_STAT, 0xffffffff);
}
else
{
ACCW(NV04_CTX_CTRL, 0x10010100);
ACCW(NV04_ACC_STAT, 0xffffffff);
}
ACCW(FIFO_EN, 0x00000001);
ACCW(PAT_SHP, 0x00000000);
if (si->ps.card_arch != NV04A)
{
ACCW(NV10_SURF_TYP, 0x00000001);
}
else
{
ACCW(NV04_SURF_TYP, 0x00000001);
}
switch(si->dm.space)
{
case B_CMAP8:
ACCW(FORMATS, 0x00001010);
if (si->ps.card_arch < NV30A)
ACCW(BPIXEL, 0x00111111);
else
ACCW(BPIXEL, 0x00000021);
ACCW(STRD_FMT, 0x03020202);
if (si->ps.card_arch < NV40A)
{
ACCW(PR_CTX1_0, 0x00000302);
ACCW(PR_CTX1_1, 0x00000302);
ACCW(PR_CTX1_2, 0x00000202);
ACCW(PR_CTX1_3, 0x00000302);
ACCW(PR_CTX1_4, 0x00000302);
ACCW(PR_CTX1_5, 0x00000302);
if (si->ps.card_arch == NV04A)
{
ACCW(PR_CTX1_6, 0x00000302);
}
else
{
ACCW(PR_CTX1_6, 0x00000000);
}
ACCW(PR_CTX1_9, 0x00000302);
}
else
{
ACCW(PR_CTX1_0, 0x00000000);
ACCW(PR_CTX1_2, 0x00000000);
ACCW(PR_CTX1_4, 0x02000000);
ACCW(PR_CTX1_6, 0x00000000);
ACCW(PR_CTX1_8, 0x02000000);
ACCW(PR_CTX1_A, 0x02000000);
}
break;
case B_RGB15_LITTLE:
ACCW(FORMATS, 0x00002071);
if (si->ps.card_arch < NV30A)
ACCW(BPIXEL, 0x00226222);
else
ACCW(BPIXEL, 0x00000042);
ACCW(STRD_FMT, 0x09080808);
ACCW(PR_CTX1_0, 0x00000902);
ACCW(PR_CTX1_1, 0x00000902);
ACCW(PR_CTX1_2, 0x00000802);
ACCW(PR_CTX1_3, 0x00000902);
ACCW(PR_CTX1_4, 0x00000902);
ACCW(PR_CTX1_5, 0x00000902);
ACCW(PR_CTX1_6, 0x00000902);
ACCW(PR_CTX1_9, 0x00000902);
break;
case B_RGB16_LITTLE:
ACCW(FORMATS, 0x000050C2);
if (si->ps.card_arch < NV30A)
ACCW(BPIXEL, 0x00556555);
else
ACCW(BPIXEL, 0x000000a5);
if (si->ps.card_arch == NV04A)
ACCW(STRD_FMT, 0x0c0b0b0b);
else
ACCW(STRD_FMT, 0x000b0b0c);
ACCW(PR_CTX1_0, 0x00000c02);
ACCW(PR_CTX1_1, 0x00000c02);
ACCW(PR_CTX1_2, 0x00000b02);
ACCW(PR_CTX1_3, 0x00000c02);
ACCW(PR_CTX1_4, 0x00000c02);
ACCW(PR_CTX1_5, 0x00000c02);
ACCW(PR_CTX1_6, 0x00000c02);
ACCW(PR_CTX1_9, 0x00000c02);
break;
case B_RGB32_LITTLE:
case B_RGBA32_LITTLE:
ACCW(FORMATS, 0x000070e5);
if (si->ps.card_arch < NV30A)
ACCW(BPIXEL, 0x0077d777);
else
ACCW(BPIXEL, 0x000000e7);
ACCW(STRD_FMT, 0x0e0d0d0d);
ACCW(PR_CTX1_0, 0x00000e02);
ACCW(PR_CTX1_1, 0x00000e02);
ACCW(PR_CTX1_2, 0x00000d02);
ACCW(PR_CTX1_3, 0x00000e02);
ACCW(PR_CTX1_4, 0x00000e02);
ACCW(PR_CTX1_5, 0x00000e02);
ACCW(PR_CTX1_6, 0x00000e02);
ACCW(PR_CTX1_9, 0x00000e02);
break;
default:
LOG(8,("ACC: init, invalid bit depth\n"));
return B_ERROR;
}
if (si->ps.card_arch >= NV30A)
{
ACCW(DEBUG3, (ACCR(DEBUG3) | 0x00000001));
ACCW(NV25_WHAT1, (ACCR(NV25_WHAT1) | 0x00040000));
}
switch (si->ps.card_arch)
{
case NV04A:
case NV10A:
ACCW(OFFSET0, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(OFFSET1, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(OFFSET2, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(OFFSET3, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(OFFSET4, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(OFFSET5, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(PITCH0, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(PITCH1, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(PITCH2, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(PITCH3, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(PITCH4, (si->fbc.bytes_per_row & 0x0000ffff));
break;
case NV20A:
case NV30A:
ACCW(NV20_OFFSET0, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_OFFSET1, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_OFFSET2, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_OFFSET3, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_PITCH0, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH1, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH2, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH3, (si->fbc.bytes_per_row & 0x0000ffff));
break;
case NV40A:
if ((si->ps.card_type == NV40) || (si->ps.card_type == NV45))
{
ACCW(NV20_OFFSET0, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_OFFSET1, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV20_PITCH0, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH1, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH2, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV20_PITCH3, (si->fbc.bytes_per_row & 0x0000ffff));
}
else
{
ACCW(NV40P_OFFSET0, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV40P_OFFSET1, ((uint8*)si->fbc.frame_buffer - (uint8*)si->framebuffer));
ACCW(NV40P_PITCH0, (si->fbc.bytes_per_row & 0x0000ffff));
ACCW(NV40P_PITCH1, (si->fbc.bytes_per_row & 0x0000ffff));
}
break;
}
if (si->ps.card_arch >= NV10A)
{
ACCW(NV10_FBTIL0AD, 0);
ACCW(NV10_FBTIL1AD, 0);
ACCW(NV10_FBTIL2AD, 0);
ACCW(NV10_FBTIL3AD, 0);
ACCW(NV10_FBTIL4AD, 0);
ACCW(NV10_FBTIL5AD, 0);
ACCW(NV10_FBTIL6AD, 0);
ACCW(NV10_FBTIL7AD, 0);
if (si->ps.card_arch >= NV20A)
{
if ((si->ps.card_type > NV40) && (si->ps.card_type != NV45))
{
ACCW(NV40P_WHAT_T0, NV_REG32(NV32_PFB_CONFIG_0));
ACCW(NV40P_WHAT_T1, NV_REG32(NV32_PFB_CONFIG_1));
ACCW(NV40P_WHAT_T2, NV_REG32(NV32_PFB_CONFIG_0));
ACCW(NV40P_WHAT_T3, NV_REG32(NV32_PFB_CONFIG_1));
}
else
{
ACCW(NV20_WHAT_T0, NV_REG32(NV32_PFB_CONFIG_0));
ACCW(NV20_WHAT_T1, NV_REG32(NV32_PFB_CONFIG_1));
if ((si->ps.card_type == NV40) || (si->ps.card_type == NV45))
{
ACCW(NV40_WHAT_T2, NV_REG32(NV32_PFB_CONFIG_0));
ACCW(NV40_WHAT_T3, NV_REG32(NV32_PFB_CONFIG_1));
}
}
}
ACCW(NV10_TIL0AD, ACCR(NV10_FBTIL0AD));
ACCW(NV10_TIL0ED, ACCR(NV10_FBTIL0ED));
ACCW(NV10_TIL0PT, ACCR(NV10_FBTIL0PT));
ACCW(NV10_TIL0ST, ACCR(NV10_FBTIL0ST));
ACCW(NV10_TIL1AD, ACCR(NV10_FBTIL1AD));
ACCW(NV10_TIL1ED, ACCR(NV10_FBTIL1ED));
ACCW(NV10_TIL1PT, ACCR(NV10_FBTIL1PT));
ACCW(NV10_TIL1ST, ACCR(NV10_FBTIL1ST));
ACCW(NV10_TIL2AD, ACCR(NV10_FBTIL2AD));
ACCW(NV10_TIL2ED, ACCR(NV10_FBTIL2ED));
ACCW(NV10_TIL2PT, ACCR(NV10_FBTIL2PT));
ACCW(NV10_TIL2ST, ACCR(NV10_FBTIL2ST));
ACCW(NV10_TIL3AD, ACCR(NV10_FBTIL3AD));
ACCW(NV10_TIL3ED, ACCR(NV10_FBTIL3ED));
if (si->ps.card_arch >= NV40A)
{
ACCW(NV10_TIL3PT, 0x2ffff800);
ACCW(NV10_TIL3ST, 0x00006000);
}
else
{
ACCW(NV10_TIL3PT, ACCR(NV10_FBTIL3PT));
ACCW(NV10_TIL3ST, ACCR(NV10_FBTIL3ST));
}
ACCW(NV10_TIL4AD, ACCR(NV10_FBTIL4AD));
ACCW(NV10_TIL4ED, ACCR(NV10_FBTIL4ED));
ACCW(NV10_TIL4PT, ACCR(NV10_FBTIL4PT));
ACCW(NV10_TIL4ST, ACCR(NV10_FBTIL4ST));
ACCW(NV10_TIL5AD, ACCR(NV10_FBTIL5AD));
ACCW(NV10_TIL5ED, ACCR(NV10_FBTIL5ED));
ACCW(NV10_TIL5PT, ACCR(NV10_FBTIL5PT));
ACCW(NV10_TIL5ST, ACCR(NV10_FBTIL5ST));
ACCW(NV10_TIL6AD, ACCR(NV10_FBTIL6AD));
ACCW(NV10_TIL6ED, ACCR(NV10_FBTIL6ED));
ACCW(NV10_TIL6PT, ACCR(NV10_FBTIL6PT));
ACCW(NV10_TIL6ST, ACCR(NV10_FBTIL6ST));
ACCW(NV10_TIL7AD, ACCR(NV10_FBTIL7AD));
ACCW(NV10_TIL7ED, ACCR(NV10_FBTIL7ED));
ACCW(NV10_TIL7PT, ACCR(NV10_FBTIL7PT));
ACCW(NV10_TIL7ST, ACCR(NV10_FBTIL7ST));
if (si->ps.card_arch >= NV40A)
{
ACCW(NV4X_WHAT1, 0x01000000);
ACCW(NV4X_DMA_SRC, 0x00000000);
}
ACCW(NV10_XFMOD0, 0x10000000);
ACCW(NV10_XFMOD1, 0x00000000);
ACCW(NV10_PIPEADR, 0x00000040);
ACCW(NV10_PIPEDAT, 0x00000008);
ACCW(NV10_PIPEADR, 0x00000200);
for (cnt = 0; cnt < (3 * 16); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00000040);
ACCW(NV10_PIPEDAT, 0x00000000);
if (si->ps.card_arch < NV40A)
{
ACCW(NV10_PIPEADR, 0x00000800);
for (cnt = 0; cnt < (16 * 16); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
}
ACCW(NV10_XFMOD0, 0x30000000);
ACCW(NV10_XFMOD1, 0x00000004);
ACCW(NV10_PIPEADR, 0x00006400);
for (cnt = 0; cnt < (59 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006800);
for (cnt = 0; cnt < (47 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006c00);
for (cnt = 0; cnt < (3 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00007000);
for (cnt = 0; cnt < (19 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00007400);
for (cnt = 0; cnt < (12 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00007800);
for (cnt = 0; cnt < (12 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00004400);
for (cnt = 0; cnt < (8 * 4); cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00000000);
for (cnt = 0; cnt < 16; cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00000040);
for (cnt = 0; cnt < 4; cnt++) ACCW(NV10_PIPEDAT, 0x00000000);
}
nv_init_for_3D();
si->engine.fifo.handle[0] = NV_ROP5_SOLID;
si->engine.fifo.handle[1] = NV_IMAGE_BLACK_RECTANGLE;
si->engine.fifo.handle[2] = NV_IMAGE_PATTERN;
si->engine.fifo.handle[3] = NV4_SURFACE;
si->engine.fifo.handle[4] = NV_IMAGE_BLIT;
si->engine.fifo.handle[5] = NV4_GDI_RECTANGLE_TEXT;
if (si->ps.card_arch < NV40A)
{
si->engine.fifo.handle[6] = NV1_RENDER_SOLID_LIN;
si->engine.fifo.handle[7] = NV4_DX5_TEXTURE_TRIANGLE;
}
for (cnt = 0; cnt < 0x20; cnt++)
{
si->engine.fifo.ch_ptr[cnt] = 0;
}
for (cnt = 0; cnt < 0x08; cnt++)
{
si->engine.fifo.ch_ptr[(si->engine.fifo.handle[cnt])] =
(NVACC_FIFO + (cnt * 0x00002000));
}
ACCW(FIFO_CH0, (0x80000000 | si->engine.fifo.handle[0]));
ACCW(FIFO_CH1, (0x80000000 | si->engine.fifo.handle[1]));
ACCW(FIFO_CH2, (0x80000000 | si->engine.fifo.handle[2]));
ACCW(FIFO_CH3, (0x80000000 | si->engine.fifo.handle[3]));
ACCW(FIFO_CH4, (0x80000000 | si->engine.fifo.handle[4]));
ACCW(FIFO_CH5, (0x80000000 | si->engine.fifo.handle[5]));
if (si->ps.card_arch < NV40A)
{
ACCW(FIFO_CH6, (0x80000000 | si->engine.fifo.handle[6]));
ACCW(FIFO_CH7, (0x80000000 | si->engine.fifo.handle[7]));
}
nv_acc_assert_fifo();
while (((nv_image_black_rectangle_ptr->FifoFree) >> 2) < 2)
{
snooze (10);
}
nv_image_black_rectangle_ptr->TopLeft = 0x00000000;
nv_image_black_rectangle_ptr->HeightWidth = 0x80008000;
return B_OK;
}
static void nv_init_for_3D(void)
{
if (si->ps.card_arch >= NV10A)
{
ACCW(PGWHAT_00, 0x00000000);
ACCW(PGWHAT_01, 0x00000000);
ACCW(PGWHAT_02, 0x00000000);
ACCW(PGWHAT_03, 0x00000000);
ACCW(PGWHAT_04, 0x00001000);
ACCW(PGWHAT_05, 0x00001000);
ACCW(PGWHAT_06, 0x4003ff80);
ACCW(PGWHAT_07, 0x00000000);
ACCW(PGWHAT_08, 0x00000000);
ACCW(PGWHAT_09, 0x00000000);
ACCW(PGWHAT_0A, 0x00000000);
ACCW(PGWHAT_0B, 0x00000000);
ACCW(PGWHAT_0C, 0x00080008);
ACCW(PGWHAT_0D, 0x00080008);
ACCW(PGWHAT_0E, 0x00000000);
ACCW(PGWHAT_0F, 0x00000000);
ACCW(PGWHAT_10, 0x00000000);
ACCW(PGWHAT_11, 0x00000000);
ACCW(PGWHAT_12, 0x00000000);
ACCW(PGWHAT_13, 0x00000000);
ACCW(PGWHAT_14, 0x00000000);
ACCW(PGWHAT_15, 0x00000000);
ACCW(PGWHAT_16, 0x00000000);
ACCW(PGWHAT_17, 0x00000000);
ACCW(PGWHAT_18, 0x00000000);
ACCW(PGWHAT_19, 0x10000000);
ACCW(PGWHAT_1A, 0x00000000);
ACCW(PGWHAT_1B, 0x00000000);
ACCW(PGWHAT_1C, 0x00000000);
ACCW(PGWHAT_1D, 0x00000000);
ACCW(PGWHAT_1E, 0x00000000);
ACCW(PGWHAT_1F, 0x00000000);
ACCW(PGWHAT_20, 0x00000000);
ACCW(PGWHAT_21, 0x00000000);
ACCW(PGWHAT_22, 0x08000000);
ACCW(PGWHAT_23, 0x00000000);
ACCW(PGWHAT_24, 0x00000000);
ACCW(PGWHAT_25, 0x00000000);
ACCW(PGWHAT_26, 0x00000000);
ACCW(PGWHAT_27, 0x4b7fffff);
ACCW(PGWHAT_28, 0x00000000);
ACCW(PGWHAT_29, 0x00000000);
ACCW(PGWHAT_2A, 0x00000000);
ACCW(WINCLIP_H_0, 0x07ff0800);
ACCW(WINCLIP_H_1, 0x07ff0800);
ACCW(WINCLIP_H_2, 0x07ff0800);
ACCW(WINCLIP_H_3, 0x07ff0800);
ACCW(WINCLIP_H_4, 0x07ff0800);
ACCW(WINCLIP_H_5, 0x07ff0800);
ACCW(WINCLIP_H_6, 0x07ff0800);
ACCW(WINCLIP_H_7, 0x07ff0800);
ACCW(WINCLIP_V_0, 0x07ff0800);
ACCW(WINCLIP_V_1, 0x07ff0800);
ACCW(WINCLIP_V_2, 0x07ff0800);
ACCW(WINCLIP_V_3, 0x07ff0800);
ACCW(WINCLIP_V_4, 0x07ff0800);
ACCW(WINCLIP_V_5, 0x07ff0800);
ACCW(WINCLIP_V_6, 0x07ff0800);
ACCW(WINCLIP_V_7, 0x07ff0800);
ACCW(NV10_XFMOD0, 0x10000000);
ACCW(NV10_XFMOD1, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006740);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEADR, 0x00006750);
ACCW(NV10_PIPEDAT, 0x40000000);
ACCW(NV10_PIPEDAT, 0x40000000);
ACCW(NV10_PIPEDAT, 0x40000000);
ACCW(NV10_PIPEDAT, 0x40000000);
ACCW(NV10_PIPEADR, 0x00006760);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006770);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006780);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x000067a0);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEADR, 0x00006ab0);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEADR, 0x00006ac0);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006c10);
ACCW(NV10_PIPEDAT, 0xbf800000);
ACCW(NV10_PIPEADR, 0x00007030);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007040);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007050);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007060);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007070);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007080);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00007090);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x000070a0);
ACCW(NV10_PIPEDAT, 0x7149f2ca);
ACCW(NV10_PIPEADR, 0x00006a80);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEADR, 0x00006aa0);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00000040);
ACCW(NV10_PIPEDAT, 0x00000005);
ACCW(NV10_PIPEADR, 0x00006400);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x4b7fffff);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006410);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006420);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x00006430);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x000064c0);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEDAT, 0x477fffff);
ACCW(NV10_PIPEDAT, 0x3f800000);
ACCW(NV10_PIPEADR, 0x000064d0);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0xc5000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x000064e0);
ACCW(NV10_PIPEDAT, 0xc4fff000);
ACCW(NV10_PIPEDAT, 0xc4fff000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEADR, 0x000064f0);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_PIPEDAT, 0x00000000);
ACCW(NV10_XFMOD0, 0x30000000);
ACCW(NV10_XFMOD1, 0x00000004);
ACCW(GLOB_STAT_0, 0x10000000);
ACCW(GLOB_STAT_1, 0x00000000);
}
}
void nv_acc_assert_fifo(void)
{
if (!si->engine.fifo.ch_ptr[NV_ROP5_SOLID] ||
!si->engine.fifo.ch_ptr[NV_IMAGE_BLACK_RECTANGLE] ||
!si->engine.fifo.ch_ptr[NV_IMAGE_PATTERN] ||
!si->engine.fifo.ch_ptr[NV_IMAGE_BLIT] ||
!si->engine.fifo.ch_ptr[NV4_GDI_RECTANGLE_TEXT])
{
uint16 cnt;
nv_acc_wait_idle();
si->engine.fifo.ch_ptr[si->engine.fifo.handle[0]] = 0;
si->engine.fifo.ch_ptr[si->engine.fifo.handle[1]] = 0;
si->engine.fifo.ch_ptr[si->engine.fifo.handle[2]] = 0;
si->engine.fifo.ch_ptr[si->engine.fifo.handle[4]] = 0;
si->engine.fifo.ch_ptr[si->engine.fifo.handle[5]] = 0;
si->engine.fifo.handle[0] = NV_ROP5_SOLID;
si->engine.fifo.handle[1] = NV_IMAGE_BLACK_RECTANGLE;
si->engine.fifo.handle[2] = NV_IMAGE_PATTERN;
si->engine.fifo.handle[4] = NV_IMAGE_BLIT;
si->engine.fifo.handle[5] = NV4_GDI_RECTANGLE_TEXT;
for (cnt = 0; cnt < 0x08; cnt++)
{
si->engine.fifo.ch_ptr[(si->engine.fifo.handle[cnt])] =
(NVACC_FIFO + (cnt * 0x00002000));
}
ACCW(FIFO_CH0, (0x80000000 | si->engine.fifo.handle[0]));
ACCW(FIFO_CH1, (0x80000000 | si->engine.fifo.handle[1]));
ACCW(FIFO_CH2, (0x80000000 | si->engine.fifo.handle[2]));
ACCW(FIFO_CH4, (0x80000000 | si->engine.fifo.handle[4]));
ACCW(FIFO_CH5, (0x80000000 | si->engine.fifo.handle[5]));
}
nv_rop5_solid_ptr = (cmd_nv_rop5_solid*)
&(regs[(si->engine.fifo.ch_ptr[NV_ROP5_SOLID]) >> 2]);
nv_image_black_rectangle_ptr = (cmd_nv_image_black_rectangle*)
&(regs[(si->engine.fifo.ch_ptr[NV_IMAGE_BLACK_RECTANGLE]) >> 2]);
nv_image_pattern_ptr = (cmd_nv_image_pattern*)
&(regs[(si->engine.fifo.ch_ptr[NV_IMAGE_PATTERN]) >> 2]);
nv_image_blit_ptr = (cmd_nv_image_blit*)
&(regs[(si->engine.fifo.ch_ptr[NV_IMAGE_BLIT]) >> 2]);
nv3_gdi_rectangle_text_ptr = (cmd_nv3_gdi_rectangle_text*)
&(regs[(si->engine.fifo.ch_ptr[NV4_GDI_RECTANGLE_TEXT]) >> 2]);
}
status_t nv_acc_setup_blit()
{
while (((nv_image_pattern_ptr->FifoFree) >> 2) < 5)
{
snooze (10);
}
nv_image_pattern_ptr->SetShape = 0x00000000;
nv_image_pattern_ptr->SetColor0 = 0xffffffff;
nv_image_pattern_ptr->SetColor1 = 0xffffffff;
nv_image_pattern_ptr->SetPattern[0] = 0xffffffff;
nv_image_pattern_ptr->SetPattern[1] = 0xffffffff;
while (((nv_rop5_solid_ptr->FifoFree) >> 2) < 1)
{
snooze (10);
}
nv_rop5_solid_ptr->SetRop5 = 0xcc;
return B_OK;
}
status_t nv_acc_blit(uint16 xs,uint16 ys,uint16 xd,uint16 yd,uint16 w,uint16 h)
{
while (((nv_image_blit_ptr->FifoFree) >> 2) < 3)
{
snooze (10);
}
nv_image_blit_ptr->SourceOrg = ((ys << 16) | xs);
nv_image_blit_ptr->DestOrg = ((yd << 16) | xd);
nv_image_blit_ptr->HeightWidth = (((h + 1) << 16) | (w + 1));
return B_OK;
}
status_t nv_acc_setup_rectangle(uint32 color)
{
while (((nv_image_pattern_ptr->FifoFree) >> 2) < 5)
{
snooze (10);
}
nv_image_pattern_ptr->SetShape = 0x00000000;
nv_image_pattern_ptr->SetColor0 = 0xffffffff;
nv_image_pattern_ptr->SetColor1 = 0xffffffff;
nv_image_pattern_ptr->SetPattern[0] = 0xffffffff;
nv_image_pattern_ptr->SetPattern[1] = 0xffffffff;
while (((nv_rop5_solid_ptr->FifoFree) >> 2) < 1)
{
snooze (10);
}
nv_rop5_solid_ptr->SetRop5 = 0xcc;
while (((nv3_gdi_rectangle_text_ptr->FifoFree) >> 2) < 1)
{
snooze (10);
}
nv3_gdi_rectangle_text_ptr->Color1A = color;
return B_OK;
}
status_t nv_acc_rectangle(uint32 xs,uint32 xe,uint32 ys,uint32 yl)
{
while (((nv3_gdi_rectangle_text_ptr->FifoFree) >> 2) < 2)
{
snooze (10);
}
nv3_gdi_rectangle_text_ptr->UnclippedRectangle[0].LeftTop =
((xs << 16) | (ys & 0x0000ffff));
nv3_gdi_rectangle_text_ptr->UnclippedRectangle[0].WidthHeight =
(((xe - xs) << 16) | (yl & 0x0000ffff));
return B_OK;
}
status_t nv_acc_setup_rect_invert()
{
while (((nv_image_pattern_ptr->FifoFree) >> 2) < 5)
{
snooze (10);
}
nv_image_pattern_ptr->SetShape = 0x00000000;
nv_image_pattern_ptr->SetColor0 = 0xffffffff;
nv_image_pattern_ptr->SetColor1 = 0xffffffff;
nv_image_pattern_ptr->SetPattern[0] = 0xffffffff;
nv_image_pattern_ptr->SetPattern[1] = 0xffffffff;
while (((nv_rop5_solid_ptr->FifoFree) >> 2) < 1)
{
snooze (10);
}
nv_rop5_solid_ptr->SetRop5 = 0x55;
while (((nv3_gdi_rectangle_text_ptr->FifoFree) >> 2) < 1)
{
snooze (10);
}
nv3_gdi_rectangle_text_ptr->Color1A = 0x00000000;
return B_OK;
}
status_t nv_acc_rectangle_invert(uint32 xs,uint32 xe,uint32 ys,uint32 yl)
{
while (((nv3_gdi_rectangle_text_ptr->FifoFree) >> 2) < 2)
{
snooze (10);
}
nv3_gdi_rectangle_text_ptr->UnclippedRectangle[0].LeftTop =
((xs << 16) | (ys & 0x0000ffff));
nv3_gdi_rectangle_text_ptr->UnclippedRectangle[0].WidthHeight =
(((xe - xs) << 16) | (yl & 0x0000ffff));
return B_OK;
}
status_t nv_acc_transparent_blit(uint16 xs,uint16 ys,uint16 xd,uint16 yd,uint16 w,uint16 h,uint32 colour)
{
return B_ERROR;
}
status_t nv_acc_video_blit(uint16 xs,uint16 ys,uint16 ws, uint16 hs,
uint16 xd,uint16 yd,uint16 wd,uint16 hd)
{
return B_ERROR;
}