--- work/nvclock/src/backend/nv40.c 2006-04-04 22:44:45.000000000 +0200 +++ 7800/nv40.c 2006-02-20 21:45:06.000000000 +0100 @@ -105,9 +105,7 @@ / - NV41 0x1f07 6800 pci-e (is this correct?) / - NV43 0x0703 6200/6600 cards / - NV44 0x0703 6200(Go)/Turbocache cards -/ - NV46 0x0703 7300 (is this correct?) -/ - NV47/NV49 0xff3f 7800/7900 cards -/ - NV4B 0x1f07 7600 (is this correct?) +/ - NV47 0xff3f 7800 cards (Does it support modding??) */ static int nv40_get_default_mask() @@ -123,16 +121,11 @@ static int nv40_get_default_mask() break; case NV43: case NV44: - case NV46: mask = 0x703; break; case NV47: - case NV49: mask = 0xff3f; break; - case NV4B: - mask = 0x1f07; - break; } return mask; } @@ -179,8 +172,8 @@ static int nv40_get_hw_masked_units(char { if(byte) { - *pmask = masked_units & 0xff; /* pixel */ - *vmask = (masked_units >> 8) & 0xff; /* vertex */ + *pmask = masked_units & 0xff; /* pixel */ + *vmask = (masked_units >> 8) & 0xff; /* vertex */ } else { @@ -259,7 +252,7 @@ static int nv40_get_pixel_pipelines(char nv40_unit_mask_to_binary(pipe_cfg, nv40_get_default_mask() & 0xff, mask); /* NV44/NV46 use 2 pixel units per pipeline */ - if(nv_card->arch & (NV44 | NV46)) + if(nv_card->arch == NV44) *total = 2; else *total = 4; @@ -342,7 +335,8 @@ static float nv43_get_fanspeed() / can be controlled so that the fan turns slower or faster. / The value stored in the registers needs to be inverted, so a value of 10% means 90% and so on. (0xff means off, 0 means on) */ - float fanspeed = (0xff - (nv_card->PMC[0x15f4/4] & 0xff)) * 100/0xff; + /* On a 7800GS 5513 means 0 (?) interpolated from meassurements and 5% corresponds to 277 */ + float fanspeed = (5513 - (nv_card->PMC[0x15f4/4] & 0x1fff)) * 100/5513; return fanspeed; } @@ -354,7 +348,7 @@ static void nv43_set_fanspeed(float spee if(speed < 10 || speed > 100) return; - value = 0x80000000 + (int)((100 - speed) * 0xff/100); + value = 0x80000000 + (int)((100 - speed) * 5513/100); nv_card->PMC[0x15f4/4] = value; } @@ -687,7 +681,7 @@ void nv40_init(void) /* Temperature monitoring; all cards after the NV40 feature an internal temperature sensor. / Only it is disabled on most 6200/6600(GT) cards but we can re-enable it ;) */ - if((nv_card->arch & (NV43 | NV44 | NV46 | NV47 | NV49 | NV4B)) && !(nv_card->caps & GPU_TEMP_MONITORING)) + if((nv_card->arch & (NV43 | NV44 | NV47)) && !(nv_card->caps & GPU_TEMP_MONITORING)) { nv_card->caps |= GPU_TEMP_MONITORING; nv_card->sensor_name = (char*)strdup("GPU Internal Sensor");