Lines 105-113
Link Here
|
105 |
/ - NV41 0x1f07 6800 pci-e (is this correct?) |
105 |
/ - NV41 0x1f07 6800 pci-e (is this correct?) |
106 |
/ - NV43 0x0703 6200/6600 cards |
106 |
/ - NV43 0x0703 6200/6600 cards |
107 |
/ - NV44 0x0703 6200(Go)/Turbocache cards |
107 |
/ - NV44 0x0703 6200(Go)/Turbocache cards |
108 |
/ - NV46 0x0703 7300 (is this correct?) |
108 |
/ - NV47 0xff3f 7800 cards (Does it support modding??) |
109 |
/ - NV47/NV49 0xff3f 7800/7900 cards |
|
|
110 |
/ - NV4B 0x1f07 7600 (is this correct?) |
111 |
*/ |
109 |
*/ |
112 |
|
110 |
|
113 |
static int nv40_get_default_mask() |
111 |
static int nv40_get_default_mask() |
Lines 123-138
static int nv40_get_default_mask()
Link Here
|
123 |
break; |
121 |
break; |
124 |
case NV43: |
122 |
case NV43: |
125 |
case NV44: |
123 |
case NV44: |
126 |
case NV46: |
|
|
127 |
mask = 0x703; |
124 |
mask = 0x703; |
128 |
break; |
125 |
break; |
129 |
case NV47: |
126 |
case NV47: |
130 |
case NV49: |
|
|
131 |
mask = 0xff3f; |
127 |
mask = 0xff3f; |
132 |
break; |
128 |
break; |
133 |
case NV4B: |
|
|
134 |
mask = 0x1f07; |
135 |
break; |
136 |
} |
129 |
} |
137 |
return mask; |
130 |
return mask; |
138 |
} |
131 |
} |
Lines 179-186
static int nv40_get_hw_masked_units(char
Link Here
|
179 |
{ |
172 |
{ |
180 |
if(byte) |
173 |
if(byte) |
181 |
{ |
174 |
{ |
182 |
*pmask = masked_units & 0xff; /* pixel */ |
175 |
*pmask = masked_units & 0xff; /* pixel */ |
183 |
*vmask = (masked_units >> 8) & 0xff; /* vertex */ |
176 |
*vmask = (masked_units >> 8) & 0xff; /* vertex */ |
184 |
} |
177 |
} |
185 |
else |
178 |
else |
186 |
{ |
179 |
{ |
Lines 259-265
static int nv40_get_pixel_pipelines(char
Link Here
|
259 |
nv40_unit_mask_to_binary(pipe_cfg, nv40_get_default_mask() & 0xff, mask); |
252 |
nv40_unit_mask_to_binary(pipe_cfg, nv40_get_default_mask() & 0xff, mask); |
260 |
|
253 |
|
261 |
/* NV44/NV46 use 2 pixel units per pipeline */ |
254 |
/* NV44/NV46 use 2 pixel units per pipeline */ |
262 |
if(nv_card->arch & (NV44 | NV46)) |
255 |
if(nv_card->arch == NV44) |
263 |
*total = 2; |
256 |
*total = 2; |
264 |
else |
257 |
else |
265 |
*total = 4; |
258 |
*total = 4; |
Lines 342-348
static float nv43_get_fanspeed()
Link Here
|
342 |
/ can be controlled so that the fan turns slower or faster. |
335 |
/ can be controlled so that the fan turns slower or faster. |
343 |
/ 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) |
336 |
/ 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) |
344 |
*/ |
337 |
*/ |
345 |
float fanspeed = (0xff - (nv_card->PMC[0x15f4/4] & 0xff)) * 100/0xff; |
338 |
/* On a 7800GS 5513 means 0 (?) interpolated from meassurements and 5% corresponds to 277 */ |
|
|
339 |
float fanspeed = (5513 - (nv_card->PMC[0x15f4/4] & 0x1fff)) * 100/5513; |
346 |
return fanspeed; |
340 |
return fanspeed; |
347 |
} |
341 |
} |
348 |
|
342 |
|
Lines 354-360
static void nv43_set_fanspeed(float spee
Link Here
|
354 |
if(speed < 10 || speed > 100) |
348 |
if(speed < 10 || speed > 100) |
355 |
return; |
349 |
return; |
356 |
|
350 |
|
357 |
value = 0x80000000 + (int)((100 - speed) * 0xff/100); |
351 |
value = 0x80000000 + (int)((100 - speed) * 5513/100); |
358 |
nv_card->PMC[0x15f4/4] = value; |
352 |
nv_card->PMC[0x15f4/4] = value; |
359 |
} |
353 |
} |
360 |
|
354 |
|
Lines 687-693
void nv40_init(void)
Link Here
|
687 |
/* Temperature monitoring; all cards after the NV40 feature an internal temperature sensor. |
681 |
/* Temperature monitoring; all cards after the NV40 feature an internal temperature sensor. |
688 |
/ Only it is disabled on most 6200/6600(GT) cards but we can re-enable it ;) |
682 |
/ Only it is disabled on most 6200/6600(GT) cards but we can re-enable it ;) |
689 |
*/ |
683 |
*/ |
690 |
if((nv_card->arch & (NV43 | NV44 | NV46 | NV47 | NV49 | NV4B)) && !(nv_card->caps & GPU_TEMP_MONITORING)) |
684 |
if((nv_card->arch & (NV43 | NV44 | NV47)) && !(nv_card->caps & GPU_TEMP_MONITORING)) |
691 |
{ |
685 |
{ |
692 |
nv_card->caps |= GPU_TEMP_MONITORING; |
686 |
nv_card->caps |= GPU_TEMP_MONITORING; |
693 |
nv_card->sensor_name = (char*)strdup("GPU Internal Sensor"); |
687 |
nv_card->sensor_name = (char*)strdup("GPU Internal Sensor"); |