Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Description: updates from upstream CVS up to 2009-06-22
- This patch includes all changes between the 0.8b4 tarball and the upstream
- CVS repository as of 2009-06-22 (date of last commit).
- Origin: upstream, http://nvclock.cvs.sourceforge.net/viewvc/nvclock/
- Last-Update: 2010-06-05
- Index: b/Makefile.in
- ===================================================================
- --- a/Makefile.in 2010-06-05 14:45:33.624537043 +0200
- +++ b/Makefile.in 2010-06-05 14:46:24.936536570 +0200
- @@ -1,10 +1,14 @@
- INSTALL=@INSTALL@
- +DESTDIR =
- +prefix=@prefix@
- +docdir=@docdir@
- +mandir=@mandir@
- -prefix=$(DESTDIR)@prefix@
- -docdir=${prefix}/share/doc/nvclock
- -mandir=${prefix}/man
- DOCS= ABOUT AUTHORS ChangeLog FAQ README
- +CFLAGS=@CFLAGS@
- +CXXFLAGS=@CXXFLAGS@
- +
- all:
- $(MAKE) -C src all
- @@ -21,7 +25,7 @@
- install-docs:
- @documentations='$(DOCS)'; \
- for doc in $$documentations; do \
- - destdir=$(docdir); \
- + destdir=$(DESTDIR)$(docdir); \
- name=`echo $$doc` \
- dir=$$destdir; \
- mkdir -p $$dir; \
- @@ -30,14 +34,14 @@
- done
- install-desktop-shortcut:
- - mkdir -p $(prefix)/share/applications
- - mkdir -p $(prefix)/share/icons/hicolor/48x48/apps
- - cp nvclock.desktop $(prefix)/share/applications
- - cp nvclock.png $(prefix)/share/icons/hicolor/48x48/apps
- + mkdir -p $(DESTDIR)$(prefix)/share/applications
- + mkdir -p $(DESTDIR)$(prefix)/share/icons/hicolor/48x48/apps
- + cp nvclock.desktop $(DESTDIR)$(prefix)/share/applications
- + cp nvclock.png $(DESTDIR)$(prefix)/share/icons/hicolor/48x48/apps
- install-man:
- - mkdir -p $(mandir)/man1
- - cp nvclock.1 $(mandir)/man1
- + mkdir -p $(DESTDIR)$(mandir)/man1
- + cp nvclock.1 $(DESTDIR)$(mandir)/man1
- uninstall: uninstall-docs uninstall-man uninstall-desktop-shortcut
- $(MAKE) -C src uninstall
- @@ -45,7 +49,7 @@
- uninstall-docs:
- @documentations='$(DOCS)'; \
- for doc in $$documentations; do \
- - destdir=$(docdir); \
- + destdir=$(DESTDIR)$(docdir); \
- name=`echo $$doc` \
- dir=$$destdir; \
- rm -f $$dir/$$name; \
- @@ -53,11 +57,12 @@
- done
- uninstall-desktop-shortcut:
- - rm -f $(prefix)/share/applications/nvclock.desktop
- - echo "removing $$prefix/share/applications/nvclock.desktop" ; \
- - rm -f $(prefix)/share/icons/hicolor/48x48/apps/nvclock.png
- - echo "removing $$prefix/share/icons/hicolor/48x48/apps/nvclock.png" ; \
- + rm -f $(DESTDIR)$(prefix)/share/applications/nvclock.desktop
- + echo "removing $$(DESTDIR)$$prefix/share/applications/nvclock.desktop" ; \
- + rm -f $(DESTDIR)$(prefix)/share/icons/hicolor/48x48/apps/nvclock.png
- + echo "removing $$(DESTDIR)$$prefix/share/icons/hicolor/48x48/apps/nvclock.png" ; \
- uninstall-man:
- - rm -f $(mandir)/man1/nvclock.1
- - echo "removing $$mandir/man1/nvclock.1" ; \
- + rm -f $$(DESTDIR)$(mandir)/man1/nvclock.1
- + echo "removing $$(DESTDIR)$$mandir/man1/nvclock.1" ; \
- +
- Index: b/configure.in
- ===================================================================
- --- a/configure.in 2010-06-05 14:45:33.628537683 +0200
- +++ b/configure.in 2010-06-05 14:46:24.936536570 +0200
- @@ -12,7 +12,6 @@
- AC_HEADER_STDC
- -CFLAGS=
- HAVE_GTK2=no
- HAVE_QT=no
- HAVE_NVCONTROL=no
- Index: b/src/nvclock.c
- ===================================================================
- --- a/src/nvclock.c 2010-06-05 14:45:33.628537683 +0200
- +++ b/src/nvclock.c 2010-06-05 14:46:24.936536570 +0200
- @@ -117,7 +117,7 @@
- char *mask_to_device(int mask)
- {
- - char *res;
- + char *res = NULL;
- int i=0;
- if(mask & NV_CRT)
- {
- @@ -942,7 +942,7 @@
- if(fanspeed_opt && force_opt)
- {
- - float dutycycle;
- + float dutycycle = 0.0;
- if(!(nv_card->caps & (GPU_FANSPEED_MONITORING | I2C_FANSPEED_MONITORING)))
- {
- Index: b/src/Makefile.in
- ===================================================================
- --- a/src/Makefile.in 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/Makefile.in 2010-06-05 14:46:24.936536570 +0200
- @@ -1,5 +1,6 @@
- CC=@CC@
- INSTALL=@INSTALL@
- +CFLAGS=@CFLAGS@
- nvclock_SOURCES=nvclock.c
- smartdimmer_SOURCES=smartdimmer.c
- @@ -8,9 +9,9 @@
- libbackend=./backend/libbackend.a
- libnvcontrol=./nvcontrol/libnvcontrol.a
- -prefix=$(DESTDIR)@prefix@
- -exec_prefix=$(DESTDIR)@exec_prefix@
- -bindir=$(DESTDIR)@bindir@
- +prefix=@prefix@
- +exec_prefix=@exec_prefix@
- +bindir=@bindir@
- ifeq ($(HAVE_NVCONTROL), yes)
- DEPS=$(libbackend) $(libnvcontrol)
- @@ -31,10 +32,10 @@
- nvclock: $(DEPS) $(LIB) nvclock.c
- - $(CC) -o nvclock $(nvclock_SOURCES) $(INCLUDES) $(LIBS)
- + $(CC) $(CFLAGS) -o nvclock $(nvclock_SOURCES) $(INCLUDES) $(LIBS)
- smartdimmer: $(DEPS) $(LIB) smartdimmer.c
- - $(CC) -o smartdimmer $(smartdimmer_SOURCES) $(INCLUDES) $(LIBS)
- + $(CC) $(CFLAGS) -o smartdimmer $(smartdimmer_SOURCES) $(INCLUDES) $(LIBS)
- clean: clean-recursive clean-app
- @@ -56,7 +57,8 @@
- uninstall: uninstall-recursive uninstall-app
- uninstall-app:
- - rm -f $(bindir)/smartdimmer
- + rm -f $(DESTDIR)$(bindir)/nvclock
- + rm -f $(DESTDIR)$(bindir)/smartdimmer
- # Walk through the sub directories and do what is requested
- Index: b/src/nvcontrol/libnvcontrol.h
- ===================================================================
- --- a/src/nvcontrol/libnvcontrol.h 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/nvcontrol/libnvcontrol.h 2010-06-05 14:46:24.940536861 +0200
- @@ -164,7 +164,7 @@
- #define NVGetReq(name, req) \
- WORD64ALIGN\
- if ((dpy->bufptr + SIZEOF(xNV##name##Req)) > dpy->bufmax)\
- - _XFlush(dpy);\
- + XFlush(dpy);\
- req = (xNV##name##Req *)(dpy->last_req = dpy->bufptr);\
- req->reqType = dpyinfo->codes->major_opcode;\
- req->nvReqType = nv_##name; \
- Index: b/src/nvcontrol/Makefile.in
- ===================================================================
- --- a/src/nvcontrol/Makefile.in 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/nvcontrol/Makefile.in 2010-06-05 14:46:24.940536861 +0200
- @@ -2,7 +2,8 @@
- AR=ar
- RANLIB=@RANLIB@
- system=@system@
- -CFLAGS=@X11_CFLAGS@ -I../backend
- +CFLAGS=@CFLAGS@
- +CFLAGS+=@X11_CFLAGS@ -I../backend
- HAVE_X11=@HAVE_NVCONTROL@
- OBJECTS=libnvcontrol.o nvcontrol.o
- @@ -26,4 +27,4 @@
- rm -f Makefile
- install:
- -uninstall:
- \ No newline at end of file
- +uninstall:
- Index: b/src/nvcontrol/libnvcontrol.c
- ===================================================================
- --- a/src/nvcontrol/libnvcontrol.c 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/nvcontrol/libnvcontrol.c 2010-06-05 14:46:24.940536861 +0200
- @@ -278,7 +278,7 @@
- SyncHandle();
- }
- /* make sure the attribute is indeed set */
- - _XFlush(dpy);
- + XFlush(dpy);
- }
- #define X_NVSelectNotify 6
- Index: b/src/qt/Makefile.in
- ===================================================================
- --- a/src/qt/Makefile.in 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/qt/Makefile.in 2010-06-05 14:46:24.940536861 +0200
- @@ -3,28 +3,27 @@
- MOC=@MOC@
- OBJECTS=main.o qt_nvclock.o qt_nvclock.moc.o qt_xfree.o qt_xfree.moc.o
- -CXXFLAGS=@QT_CFLAGS@ -I../backend
- +CXXFLAGS=@CXXFLAGS@
- +CXXFLAGS+=@QT_CFLAGS@ @X11_CFLAGS@ -I../backend
- HAVE_NVCONTROL=@HAVE_NVCONTROL@
- HAVE_QT=@HAVE_QT@
- libbackend=../backend/libbackend.a
- -prefix=$(DESTDIR)@prefix@
- -exec_prefix=$(DESTDIR)@exec_prefix@
- -bindir=$(DESTDIR)@bindir@
- +prefix=@prefix@
- +exec_prefix=@exec_prefix@
- +bindir=@bindir@
- ifeq ($(HAVE_QT), yes)
- PROGRAM=nvclock_qt
- - INSTALL_APP=mkdir -p $(bindir); $(INSTALL) -c $(PROGRAM) $(bindir)/$(PROGRAM)
- - UNINSTALL_APP=rm -f $(bindir)/$(PROGRAM)
- + INSTALL_APP=mkdir -p $(DESTDIR)$(bindir); $(INSTALL) -c $(PROGRAM) $(DESTDIR)$(bindir)/$(PROGRAM)
- + UNINSTALL_APP=rm -f $(DESTDIR)$(bindir)/$(PROGRAM)
- endif
- ifeq ($(HAVE_NVCONTROL), yes)
- DEPS=$(libbackend) $(libnvcontrol)
- - INCLUDES=@X11_CFLAGS@ -I./backend -I./nvcontrol -I.. -I../..
- LIBS=@QT_LIBS@ -L../backend -lbackend -L../nvcontrol -lnvcontrol
- else
- DEPS=$(libbackend)
- - INCLUDES=@X11_CFLAGS@ -I./backend -I.. -I../..
- LIBS=@QT_LIBS@ -L../backend -lbackend
- endif
- @@ -32,7 +31,7 @@
- all: $(PROGRAM)
- nvclock_qt: $(DEPS) qt_nvclock.moc qt_xfree.moc $(OBJECTS)
- - $(CXX) -o nvclock_qt $(CXXFLAGS) $(OBJECTS) $(LIBS)
- + $(CXX) $(CXXFLAGS) -o nvclock_qt $(CXXFLAGS) $(OBJECTS) $(LIBS)
- clean:
- rm -f nvclock_qt *.core *.moc *.o
- Index: b/src/gtk/Makefile.in
- ===================================================================
- --- a/src/gtk/Makefile.in 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/gtk/Makefile.in 2010-06-05 14:46:24.940536861 +0200
- @@ -1,30 +1,29 @@
- CC=@CC@
- INSTALL=@INSTALL@
- -CFLAGS=@GTK_CFLAGS@ -I../backend -I../nvcontrol -I../..
- +CFLAGS=@CFLAGS@
- +CFLAGS+=@GTK_CFLAGS@ @X11_CFLAGS@ -I../backend -I../nvcontrol -I../..
- HAVE_GTK2=@HAVE_GTK2@
- HAVE_NVCONTROL=@HAVE_NVCONTROL@
- libbackend=../backend/libbackend.a
- libnvcontrol=../nvcontrol/libnvcontrol.a
- -prefix=$(DESTDIR)@prefix@
- -exec_prefix=$(DESTDIR)@exec_prefix@
- -bindir=$(DESTDIR)@bindir@
- +prefix=@prefix@
- +exec_prefix=@exec_prefix@
- +bindir=@bindir@
- ifeq ($(HAVE_GTK2), yes)
- PROGRAM=nvclock_gtk
- - INSTALL_APP=mkdir -p $(bindir); $(INSTALL) -c $(PROGRAM) $(bindir)/$(PROGRAM)
- - UNINSTALL_APP=rm -f $(bindir)/$(PROGRAM)
- + INSTALL_APP=mkdir -p $(DESTDIR)$(bindir); $(INSTALL) -c $(PROGRAM) $(DESTDIR)$(bindir)/$(PROGRAM)
- + UNINSTALL_APP=rm -f $(DESTDIR)$(bindir)/$(PROGRAM)
- endif
- ifeq ($(HAVE_NVCONTROL), yes)
- DEPS=$(libbackend) $(libnvcontrol)
- - INCLUDES=@X11_CFLAGS@ -I./backend -I./nvcontrol -I.. -I../..
- LIBS=@GTK_LIBS@ -L../backend -lbackend -L../nvcontrol -lnvcontrol
- OBJECTS=banner.o gl.o hw.o main.o settings.o
- else
- DEPS=$(libbackend)
- - INCLUDES=-I./backend -I./nvcontrol -I.. -I../..
- LIBS=@GTK_LIBS@ -L../backend -lbackend
- OBJECTS=banner.o hw.o main.o settings.o
- endif
- @@ -34,7 +33,7 @@
- all: $(PROGRAM)
- nvclock_gtk: $(DEPS) $(OBJECTS)
- - $(CC) -o nvclock_gtk $(OBJECTS) $(libbackend) $(LIBS)
- + $(CC) $(CFLAGS) -o nvclock_gtk $(OBJECTS) $(libbackend) $(LIBS)
- clean:
- rm -f nvclock_gtk *.core *.o *.exe
- Index: b/src/gtk/gl.c
- ===================================================================
- --- a/src/gtk/gl.c 2010-06-05 14:45:33.668537657 +0200
- +++ b/src/gtk/gl.c 2010-06-05 14:46:24.940536861 +0200
- @@ -146,7 +146,7 @@
- if(initialize && conf->save_opengl_changes)
- {
- NVOptionList *opt = nvcontrol_lookup_option(option);
- - char *name;
- + char *name = NULL;
- /* Fsaa/Aniso application control aren't stored in our database,
- / so if the requested option can't be found check if it is one
- @@ -196,7 +196,7 @@
- if(conf->save_opengl_changes)
- {
- NVOptionList *opt = nvcontrol_lookup_option(option);
- - char *name;
- + char *name = NULL;
- /* Fsaa/Aniso application control aren't stored in our database,
- / so if the requested option can't be found check if it is one
- @@ -395,8 +395,8 @@
- GtkWidget *nv_opengl_new(Display* dpy, int screen)
- {
- NVOpengl *opengl = g_object_new(NV_TYPE_OPENGL, NULL);
- - char *glx_vendor, *glx_version, *glx_direct;
- - char *gl_vendor, *gl_renderer, *gl_version;
- + char *glx_vendor=NULL, *glx_version=NULL, *glx_direct=NULL;
- + char *gl_vendor=NULL, *gl_renderer=NULL, *gl_version=NULL;
- Window win;
- Window root;
- @@ -441,7 +441,7 @@
- {
- glx_vendor = (char*)pglXQueryServerString(dpy, screen, GLX_VENDOR);
- glx_version = (char*)pglXQueryServerString(dpy, screen, GLX_VERSION);
- - glx_direct = (char*)(pglXIsDirect(dpy, ctx) ? "Yes" : "No");
- + glx_direct = (pglXIsDirect(dpy, ctx) ? (char*)"Yes" : (char*)"No");
- gl_vendor = (char*)pglGetString(GL_VENDOR);
- gl_renderer = (char*)pglGetString(GL_RENDERER);
- gl_version = (char*)pglGetString(GL_VERSION);
- Index: b/src/gtk/hw.c
- ===================================================================
- --- a/src/gtk/hw.c 2010-06-05 14:45:33.672537694 +0200
- +++ b/src/gtk/hw.c 2010-06-05 14:46:24.940536861 +0200
- @@ -719,7 +719,6 @@
- /* Sets all Nvidia bios info */
- void set_bios_info(GtkWidget *widget)
- {
- - char *tmp;
- int i;
- NVBios *bios = NV_BIOS(widget);
- GtkTreeIter iter;
- @@ -943,7 +942,7 @@
- {
- desc = g_strdup_printf("-");
- masked = g_strdup_printf("-");
- - state = g_strdup_printf("");
- + state = g_strdup_printf("Unknown");
- }
- if((i >= 8) && (mask & 1<<i))
- @@ -963,7 +962,7 @@
- {
- desc = g_strdup_printf("-");
- masked = g_strdup_printf("-");
- - state = g_strdup_printf("");
- + state = g_strdup_printf("Unknown");
- }
- gtk_tree_store_append(pipeline->store, &iter, NULL);
- gtk_tree_store_set(pipeline->store, &iter,
- @@ -1623,7 +1622,6 @@
- {
- NVThermal *thermal = g_object_new(NV_TYPE_THERMAL, NULL);
- GtkWidget *hbox;
- - int have_ambient;
- thermal->card = card;
- thermal->conf = conf;
- @@ -1748,7 +1746,6 @@
- /* If opengl stuff isn't supported don't show it on the gui */
- if(init_nvcontrol(dpy))
- {
- - int tmp;
- NVGetAttribute(dpy, 0, 0, NV_IRQ, &irq);
- }
- #else
- Index: b/src/gtk/main.c
- ===================================================================
- --- a/src/gtk/main.c 2010-06-05 14:45:33.672537694 +0200
- +++ b/src/gtk/main.c 2010-06-05 14:46:24.940536861 +0200
- @@ -25,6 +25,7 @@
- #include <stdlib.h>
- #include <gtk/gtk.h>
- +#include <X11/Xlib.h>
- #include "banner.h"
- #include "interface.h"
- Index: b/src/smartdimmer.c
- ===================================================================
- --- a/src/smartdimmer.c 2010-06-05 14:45:33.700536566 +0200
- +++ b/src/smartdimmer.c 2010-06-05 14:46:24.940536861 +0200
- @@ -35,6 +35,7 @@
- * Erik Waling <erikw@acc.umu.se> *
- ******************************************************************************/
- +#include <ctype.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <getopt.h>
- Index: b/src/backend/utils.c
- ===================================================================
- --- a/src/backend/utils.c 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/utils.c 2010-06-05 14:46:24.940536861 +0200
- @@ -20,6 +20,7 @@
- */
- #include <stdio.h>
- +#include "nvclock.h"
- /* Convert the gpu architecture to a string using NVxx/Gxx naming */
- int convert_gpu_architecture(short arch, char *buf)
- @@ -78,3 +79,163 @@
- }
- buf[len] = 0;
- }
- +
- +/* Internal gpu architecture function which sets
- +/ a device to a specific architecture. This architecture
- +/ doesn't have to be the real architecture. It is mainly
- +/ used to choose codepaths inside nvclock.
- +*/
- +int get_gpu_arch(int device_id)
- +{
- + int arch;
- + switch(device_id & 0xff0)
- + {
- + case 0x20:
- + arch = NV5;
- + break;
- + case 0x100:
- + case 0x110:
- + case 0x150:
- + case 0x1a0:
- + arch = NV10;
- + break;
- + case 0x170:
- + case 0x180:
- + case 0x1f0:
- + arch = NV17;
- + break;
- + case 0x200:
- + arch = NV20;
- + break;
- + case 0x250:
- + case 0x280:
- + case 0x320: /* We don't treat the FX5200/FX5500 as FX cards */
- + arch = NV25;
- + break;
- + case 0x300:
- + arch = NV30;
- + break;
- + case 0x330:
- + arch = NV35; /* Similar to NV30 but fanspeed stuff works differently */
- + break;
- + /* Give a seperate arch to FX5600/FX5700 cards as they need different code than other FX cards */
- + case 0x310:
- + case 0x340:
- + arch = NV31;
- + break;
- + case 0x40:
- + case 0x120:
- + case 0x130:
- + case 0x210:
- + case 0x230:
- + arch = NV40;
- + break;
- + case 0xc0:
- + arch = NV41;
- + break;
- + case 0x140:
- + arch = NV43; /* Similar to NV40 but with different fanspeed code */
- + break;
- + case 0x160:
- + case 0x220:
- + arch = NV44;
- + break;
- + case 0x1d0:
- + arch = NV46;
- + break;
- + case 0x90:
- + arch = NV47;
- + break;
- + case 0x290:
- + arch = NV49; /* 7900 */
- + break;
- + case 0x390:
- + arch = NV4B; /* 7600 */
- + break;
- + case 0x190:
- + arch = NV50; /* 8800 'NV50 / G80' */
- + break;
- + case 0x400: /* 8600 'G84' */
- + arch = G84;
- + break;
- + case 0x420: /* 8500 'G86' */
- + arch = G86;
- + break;
- + case 0x5e0: /* GT2x0 */
- + case 0x5f0: /* GT2x0 */
- + arch = GT200;
- + break;
- + case 0x6e0: /* G98 */
- + case 0x6f0: /* G98 */
- + case 0x840: /* C7x */
- + case 0x850: /* C7x */
- + case 0x860: /* C79 */
- + case 0x870: /* C7x */
- + arch = G86;
- + break;
- + case 0x600: /* G92 */
- + case 0x610: /* G92 */
- + arch = G92;
- + break;
- + case 0x620: /* 9600GT 'G94' */
- + arch = G94;
- + break;
- + case 0x640: /* 9500GT */
- + arch = G96;
- + break;
- + case 0x240:
- + case 0x3d0: /* not sure if this is a C51 too */
- + case 0x530: /* not sure if the 70xx is C51 too */
- + arch = C51;
- + break;
- + case 0x2e0:
- + case 0xf0:
- + /* The code above doesn't work for pci-express cards as multiple architectures share one id-range */
- + switch(device_id)
- + {
- + case 0xf0: /* 6800 */
- + case 0xf9: /* 6800Ultra */
- + arch = NV40;
- + break;
- + case 0xf6: /* 6800GS/XT */
- + arch = NV41;
- + break;
- + case 0xf1: /* 6600/6600GT */
- + case 0xf2: /* 6600GT */
- + case 0xf3: /* 6200 */
- + case 0xf4: /* 6600LE */
- + arch = NV43;
- + break;
- + case 0xf5: /* 7800GS */
- + arch = NV47;
- + break;
- + case 0xfa: /* PCX5700 */
- + arch = NV31;
- + break;
- + case 0xf8: /* QuadroFX 3400 */
- + case 0xfb: /* PCX5900 */
- + arch = NV35;
- + break;
- + case 0xfc: /* PCX5300 */
- + case 0xfd: /* Quadro NVS280/FX330, FX5200 based? */
- + case 0xff: /* PCX4300 */
- + arch = NV25;
- + break;
- + case 0xfe: /* Quadro 1300, has the same id as a FX3000 */
- + arch = NV35;
- + break;
- + case 0x2e0: /* Geforce 7600GT AGP (at least Leadtek uses this id) */
- + case 0x2e1: /* Geforce 7600GS AGP (at least BFG uses this id) */
- + case 0x2e2: /* Geforce 7300GT AGP (at least a Galaxy 7300GT uses this id) */
- + arch = NV4B;
- + break;
- + case 0x2e4: /* Geforce 7950 GT AGP */
- + arch = NV49;
- + break;
- + }
- + break;
- + default:
- + arch = UNKNOWN;
- + }
- + return arch;
- +}
- Index: b/src/backend/Makefile.in
- ===================================================================
- --- a/src/backend/Makefile.in 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/Makefile.in 2010-06-05 14:46:24.940536861 +0200
- @@ -11,9 +11,13 @@
- OBJECTS+=back_bsd.o
- else
- ifeq ($(system), Win32)
- - OBJECTS+=back_win32.o
- + OBJECTS+=back_win32.o
- else
- - OBJECTS+=back_linux.o
- + ifeq ($(system), SunOS)
- + OBJECTS+=back_solaris.o
- + else
- + OBJECTS+=back_linux.o
- + endif
- endif
- endif
- Index: b/src/backend/config.c
- ===================================================================
- --- a/src/backend/config.c 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/config.c 2010-06-05 14:46:24.940536861 +0200
- @@ -319,6 +319,11 @@
- cfg_entry *pCfg = NULL;
- pCfg = cfg;
- + if(!fp)
- + {
- + fprintf(stderr, "Unable to write configuration file to '%s'. Do you have sufficient permissions?\n", file);
- + return;
- + }
- fprintf(fp, "#This is NVClock's config file. Don't edit the hw and general section!\n");
- while(pCfg != NULL)
- Index: b/src/backend/nvreg.h
- ===================================================================
- --- a/src/backend/nvreg.h 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/nvreg.h 2010-06-05 14:46:24.940536861 +0200
- @@ -26,6 +26,7 @@
- # define PCI_VENDOR_ID_SANYO 0x144d /* Samsung laptops use the Sanyo vendor id */
- # define PCI_VENDOR_ID_SONY 0x104d
- # define PCI_VENDOR_ID_ZEPTO 0x1a46
- +# define PCI_VENDOR_ID_NVIDIA 0x10de
- #define PCI_DEVICE_ID 0x2 /* 16-bit */
- #define PCI_SUBSYSTEM_VENDOR_ID 0x2c /* 16-bit */
- #define PCI_SUBSYSTEM_ID 0x2e /* 16-bit */
- @@ -58,6 +59,7 @@
- #define PCIE_LINKSTATUS 0x12
- # define PCIE_LINK_SPEED_MASK 0x3f0
- # define PCIE_LINK_SPEED_SHIFT 4
- +#define PCI_CLASS_VGA 0x3
- /* PMC */
- #define NV_PMC_BOOT_0 0x0
- Index: b/src/backend/nv40.c
- ===================================================================
- --- a/src/backend/nv40.c 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/nv40.c 2010-06-05 14:46:24.940536861 +0200
- @@ -68,6 +68,7 @@
- #include <stdio.h>
- #include <string.h>
- +#include <unistd.h>
- #include "backend.h"
- /*
- Index: b/src/backend/backend.c
- ===================================================================
- --- a/src/backend/backend.c 2010-06-05 14:45:33.704537660 +0200
- +++ b/src/backend/backend.c 2010-06-05 14:46:24.940536861 +0200
- @@ -1,6 +1,6 @@
- /* NVClock 0.8 - Linux overclocker for NVIDIA cards
- *
- - * Copyright(C) 2001-2007 Roderick Colenbrander
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- *
- * site: http://nvclock.sourceforge.net
- *
- @@ -29,6 +29,48 @@
- #endif
- #include "backend.h"
- +int map_mem(const char *dev_name)
- +{
- + dev_handle_t *fd = open_dev(dev_name);
- +
- + if(!fd) /* open_dev has already set the error */
- + return 0;
- +
- + /* Map the registers of the nVidia chip */
- + nv_card->PEXTDEV = map_dev_mem(fd, nv_card->reg_address + 0x101000, 0x1000);
- + nv_card->PFB = map_dev_mem(fd, nv_card->reg_address + 0x100000, 0x1000);
- + /* normally pmc is till 0x2000 but extended it for nv40 */
- + nv_card->PMC = map_dev_mem(fd, nv_card->reg_address + 0x000000, 0x2ffff);
- + nv_card->PCIO = map_dev_mem(fd, nv_card->reg_address + 0x601000, 0x2000);
- + nv_card->PDISPLAY = map_dev_mem(fd, nv_card->reg_address + NV_PDISPLAY_OFFSET, NV_PDISPLAY_SIZE);
- + nv_card->PRAMDAC = map_dev_mem(fd, nv_card->reg_address + 0x680000, 0x2000);
- + nv_card->PRAMIN = map_dev_mem(fd, nv_card->reg_address + NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE);
- + nv_card->PROM = map_dev_mem(fd, nv_card->reg_address + 0x300000, 0xffff);
- +
- + /* On Geforce 8xxx cards it appears that the pci config header has been moved */
- + if(nv_card->arch & NV5X)
- + nv_card->PBUS = map_dev_mem(fd, nv_card->reg_address + 0x88000, 0x100);
- + else
- + nv_card->PBUS = nv_card->PMC + 0x1800/4;
- +
- + nv_card->mem_mapped = 1;
- +
- + close_dev(fd);
- + return 1;
- +}
- +
- +void unmap_mem()
- +{
- + unmap_dev_mem((unsigned long)nv_card->PEXTDEV, 0x1000);
- + unmap_dev_mem((unsigned long)nv_card->PFB, 0x1000);
- + unmap_dev_mem((unsigned long)nv_card->PMC, 0x2ffff);
- + unmap_dev_mem((unsigned long)nv_card->PCIO, 0x2000);
- + unmap_dev_mem((unsigned long)nv_card->PDISPLAY, NV_PDISPLAY_SIZE);
- + unmap_dev_mem((unsigned long)nv_card->PRAMDAC, 0x2000);
- + unmap_dev_mem((unsigned long)nv_card->PRAMIN, NV_PRAMIN_SIZE);
- + unmap_dev_mem((unsigned long)nv_card->PROM, 0xffff);
- +}
- +
- /* Read a byte from the pci bus */
- unsigned char nv_read_pbus8(int offset)
- {
- Index: b/src/backend/back_bsd.c
- ===================================================================
- --- a/src/backend/back_bsd.c 2010-06-05 14:45:33.708537666 +0200
- +++ b/src/backend/back_bsd.c 2010-06-05 14:46:24.940536861 +0200
- @@ -2,7 +2,7 @@
- *
- * Site: http://nvclock.sourceforge.net
- *
- - * Copyright(C) 2001-2005 Roderick Colenbrander
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- * Portions Copyright(C) 2003 Samy Al Bahra <samy@kerneled.com>
- *
- * This program is free software; you can redistribute it and/or modify
- @@ -41,8 +41,6 @@
- # include <sys/pciio.h>
- #endif
- -#define NV_VENDOR 0x10de
- -#define VGA 0x03
- #define SIZE 255
- NVClock nvclock;
- @@ -90,8 +88,8 @@
- memset(&pcidev,0,sizeof(pcidev));
- pcidev.pat_buf_len=sizeof(patterns);
- - patterns.pc_vendor=NV_VENDOR;
- - patterns.pc_class=VGA;
- + patterns.pc_vendor=PCI_VENDOR_ID_NVIDIA;
- + patterns.pc_class=PCI_CLASS_VGA;
- patterns.flags=PCI_GETCONF_MATCH_VENDOR|PCI_GETCONF_MATCH_CLASS;
- pcidev.patterns=&patterns;
- pcidev.num_patterns=1;
- @@ -183,8 +181,10 @@
- return pi.pi_data;
- }
- -int map_mem(const char *dev_name)
- +/* Retrieve a handle to /dev/mem or /dev/nvidiaX */
- +dev_handle_t* open_dev(const char *dev_name)
- {
- + dev_handle_t *dev;
- int fd;
- if( (fd = open(dev_name, O_RDWR)) == -1 )
- @@ -192,48 +192,29 @@
- char err[80];
- sprintf(err, "Can't open %s", dev_name);
- set_error_str(err);
- - return 0;
- + return NULL;
- }
- -
- - /* Map the registers of the nVidia chip */
- - nv_card->PEXTDEV = map_dev_mem(fd, nv_card->reg_address + 0x101000, 0x1000);
- - nv_card->PFB = map_dev_mem(fd, nv_card->reg_address + 0x100000, 0x1000);
- - /* normally pmc is till 0x2000 but extended it for nv40 */
- - nv_card->PMC = map_dev_mem(fd, nv_card->reg_address + 0x000000, 0x2ffff);
- - nv_card->PCIO = map_dev_mem(fd, nv_card->reg_address + 0x601000, 0x2000);
- - nv_card->PDISPLAY = map_dev_mem(fd, nv_card->reg_address + NV_PDISPLAY_OFFSET, NV_PDISPLAY_SIZE);
- - nv_card->PRAMDAC = map_dev_mem(fd, nv_card->reg_address + 0x680000, 0x2000);
- - nv_card->PRAMIN = map_dev_mem(fd, nv_card->reg_address + NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE);
- - nv_card->PROM = map_dev_mem(fd, nv_card->reg_address + 0x300000, 0xffff);
- -
- - /* On Geforce 8xxx cards it appears that the pci config header has been moved */
- - if(nv_card->arch & NV5X)
- - nv_card->PBUS = map_dev_mem(fd, nv_card->reg_address + 0x88000, 0x100);
- - else
- - nv_card->PBUS = nv_card->PMC + 0x1800/4;
- - nv_card->mem_mapped = 1;
- - close(fd);
- - return 1;
- + dev = (dev_handle_t*)calloc(1, sizeof(dev_handle_t));
- + dev->fd = fd;
- + return dev;
- }
- -void unmap_mem()
- +/* Close the devide handle */
- +void close_dev(dev_handle_t *dev)
- {
- - unmap_dev_mem((unsigned long)nv_card->PEXTDEV, 0x1000);
- - unmap_dev_mem((unsigned long)nv_card->PFB, 0x1000);
- - unmap_dev_mem((unsigned long)nv_card->PMC, 0xffff);
- - unmap_dev_mem((unsigned long)nv_card->PCIO, 0x2000);
- - unmap_dev_mem((unsigned long)nv_card->PDISPLAY, NV_PDISPLAY_SIZE);
- - unmap_dev_mem((unsigned long)nv_card->PRAMDAC, 0x2000);
- - unmap_dev_mem((unsigned long)nv_card->PRAMIN, NV_PRAMIN_SIZE);
- - unmap_dev_mem((unsigned long)nv_card->PROM, 0xffff);
- + if(!dev)
- + return;
- +
- + close(dev->fd);
- + free(dev);
- }
- /* -------- mmap on devices -------- */
- /* This piece of code is from nvtv a linux program for tvout */
- /* The author of nvtv got this from xfree86's os-support/linux/lnx_video.c */
- /* and he modified it a little */
- -static void *map_dev_mem (int fd, unsigned long Base, unsigned long Size)
- +void *map_dev_mem (dev_handle_t *dev, unsigned long Base, unsigned long Size)
- {
- void *base;
- int mapflags = MAP_SHARED;
- @@ -243,10 +224,11 @@
- alignOff = Base - realBase;
- base = mmap((caddr_t)0, Size + alignOff, PROT_READ|PROT_WRITE,
- - mapflags, fd, (off_t)realBase);
- + mapflags, dev->fd, (off_t)realBase);
- return (void *) ((char *)base + alignOff);
- }
- +
- static void unmap_dev_mem (unsigned long Base, unsigned long Size)
- {
- unsigned long alignOff = Base - (Base & ~(getpagesize() - 1));
- Index: b/src/backend/info.c
- ===================================================================
- --- a/src/backend/info.c 2010-06-05 14:45:33.708537666 +0200
- +++ b/src/backend/info.c 2010-06-05 14:46:24.944536740 +0200
- @@ -334,6 +334,7 @@
- { 0x5e0, "nvidia GeForce GT200-400", DESKTOP },
- { 0x5e1, "nvidia GeForce GTX 280", DESKTOP },
- { 0x5e2, "nvidia GeForce GTX 260", DESKTOP },
- + { 0x5e3, "nvidia GeForce GTX 285", DESKTOP },
- { 0x5e7, "nvidia Tesla C1060", DESKTOP },
- { 0x5ed, "nvidia Quadroplex 2200 D2", DESKTOP },
- { 0x5f8, "nvidia Quadroplex 2200 S4", DESKTOP },
- @@ -351,11 +352,13 @@
- { 0x611, "nVidia Geforce 8800GT", DESKTOP },
- { 0x612, "nVidia Geforce 9800GTX", DESKTOP },
- { 0x614, "nVidia Geforce 9800GT", DESKTOP },
- + { 0x615, "nVidia GeForce GTS 250", DESKTOP },
- { 0x61a, "nVidia QuadroFX 3700", DESKTOP },
- { 0x61c, "nVidia QuadroFX 3600M", MOBILE },
- { 0x622, "nVidia Geforce 9600GT", DESKTOP },
- { 0x623, "nVidia Geforce 9600GS", DESKTOP },
- { 0x640, "nVidia Geforce 9500GT", DESKTOP },
- + { 0x641, "nVidia Geforce 9400GT", DESKTOP },
- { 0x643, "nVidia Geforce 9500GT", DESKTOP },
- { 0x647, "nVidia Geforce 9600M GT", MOBILE },
- { 0x648, "nVidia Geforce 9600M GS", MOBILE },
- @@ -398,6 +401,15 @@
- { 0x863, "nVidia Geforce 9400M", MOBILE },
- { 0x864, "nVidia Geforce 9300", DESKTOP },
- { 0x865, "nVidia Geforce 9300", DESKTOP },
- + { 0x870, "NVIDIA GeForce 9400M", MOBILE },
- + { 0x871, "NVIDIA GeForce 9200", MOBILE },
- + { 0x872, "NVIDIA GeForce G102M", MOBILE },
- + { 0x873, "NVIDIA GeForce G102M", MOBILE },
- + { 0x874, "NVIDIA ION", NFORCE },
- + { 0x876, "NVIDIA ION", NFORCE },
- + { 0x87a, "NVIDIA Quadro FX 470", MOBILE },
- + { 0x87d, "NVIDIA ION", NFORCE },
- + { 0x87f, "NVIDIA MCP79", NFORCE },
- { 0, NULL, UNKNOWN }
- };
- @@ -421,163 +433,6 @@
- return "Unknown Nvidia card";
- }
- -/* Internal gpu architecture function which sets
- -/ a device to a specific architecture. This architecture
- -/ doesn't have to be the real architecture. It is mainly
- -/ used to choose codepaths inside nvclock.
- -*/
- -int get_gpu_arch(int device_id)
- -{
- - int arch;
- - switch(device_id & 0xff0)
- - {
- - case 0x20:
- - arch = NV5;
- - break;
- - case 0x100:
- - case 0x110:
- - case 0x150:
- - case 0x1a0:
- - arch = NV10;
- - break;
- - case 0x170:
- - case 0x180:
- - case 0x1f0:
- - arch = NV17;
- - break;
- - case 0x200:
- - arch = NV20;
- - break;
- - case 0x250:
- - case 0x280:
- - case 0x320: /* We don't treat the FX5200/FX5500 as FX cards */
- - arch = NV25;
- - break;
- - case 0x300:
- - arch = NV30;
- - break;
- - case 0x330:
- - arch = NV35; /* Similar to NV30 but fanspeed stuff works differently */
- - break;
- - /* Give a seperate arch to FX5600/FX5700 cards as they need different code than other FX cards */
- - case 0x310:
- - case 0x340:
- - arch = NV31;
- - break;
- - case 0x40:
- - case 0x120:
- - case 0x130:
- - case 0x210:
- - case 0x230:
- - arch = NV40;
- - break;
- - case 0xc0:
- - arch = NV41;
- - break;
- - case 0x140:
- - arch = NV43; /* Similar to NV40 but with different fanspeed code */
- - break;
- - case 0x160:
- - case 0x220:
- - arch = NV44;
- - break;
- - case 0x1d0:
- - arch = NV46;
- - break;
- - case 0x90:
- - arch = NV47;
- - break;
- - case 0x290:
- - arch = NV49; /* 7900 */
- - break;
- - case 0x390:
- - arch = NV4B; /* 7600 */
- - break;
- - case 0x190:
- - arch = NV50; /* 8800 'NV50 / G80' */
- - break;
- - case 0x400: /* 8600 'G84' */
- - arch = G84;
- - break;
- - case 0x420: /* 8500 'G86' */
- - arch = G86;
- - break;
- - case 0x5e0: /* GT2x0 */
- - case 0x5f0: /* GT2x0 */
- - arch = GT200;
- - break;
- - case 0x6e0: /* G98 */
- - case 0x6f0: /* G98 */
- - case 0x860: /* C79 */
- - arch = G86;
- - break;
- - case 0x600: /* G92 */
- - case 0x610: /* G92 */
- - arch = G92;
- - break;
- - case 0x620: /* 9600GT 'G94' */
- - arch = G94;
- - break;
- - case 0x640: /* 9500GT */
- - arch = G96;
- - break;
- - case 0x240:
- - case 0x3d0: /* not sure if this is a C51 too */
- - case 0x530: /* not sure if the 70xx is C51 too */
- - arch = C51;
- - break;
- - case 0x2e0:
- - case 0xf0:
- - /* The code above doesn't work for pci-express cards as multiple architectures share one id-range */
- - switch(device_id)
- - {
- - case 0xf0: /* 6800 */
- - case 0xf9: /* 6800Ultra */
- - arch = NV40;
- - break;
- - case 0xf6: /* 6800GS/XT */
- - arch = NV41;
- - break;
- - case 0xf1: /* 6600/6600GT */
- - case 0xf2: /* 6600GT */
- - case 0xf3: /* 6200 */
- - case 0xf4: /* 6600LE */
- - arch = NV43;
- - break;
- - case 0xf5: /* 7800GS */
- - arch = NV47;
- - break;
- - case 0xfa: /* PCX5700 */
- - arch = NV31;
- - break;
- - case 0xf8: /* QuadroFX 3400 */
- - case 0xfb: /* PCX5900 */
- - arch = NV35;
- - break;
- - case 0xfc: /* PCX5300 */
- - case 0xfd: /* Quadro NVS280/FX330, FX5200 based? */
- - case 0xff: /* PCX4300 */
- - arch = NV25;
- - break;
- - case 0xfe: /* Quadro 1300, has the same id as a FX3000 */
- - arch = NV35;
- - break;
- - case 0x2e0: /* Geforce 7600GT AGP (at least Leadtek uses this id) */
- - case 0x2e1: /* Geforce 7600GS AGP (at least BFG uses this id) */
- - case 0x2e2: /* Geforce 7300GT AGP (at least a Galaxy 7300GT uses this id) */
- - arch = NV4B;
- - break;
- - case 0x2e4: /* Geforce 7950 GT AGP */
- - arch = NV49;
- - break;
- - }
- - break;
- - default:
- - arch = UNKNOWN;
- - }
- - return arch;
- -}
- -
- /* Receive the real gpu architecture */
- static short get_gpu_architecture()
- {
- Index: b/src/backend/back_solaris.c
- ===================================================================
- --- /dev/null 1970-01-01 00:00:00.000000000 +0000
- +++ b/src/backend/back_solaris.c 2010-06-05 14:46:24.944536740 +0200
- @@ -0,0 +1,205 @@
- +/* NVClock 0.8 - OpenSolaris overclocker for NVIDIA cards
- + *
- + * Site: http://nvclock.sourceforge.net
- + *
- + * Solaris Backend: Copyright 2009 Bernd Markgraf <markgraf@med.ovgu.de>
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- + *
- + * This program is free software; you can redistribute it and/or modify
- + * it under the terms of the GNU General Public License as published by
- + * the Free Software Foundation; either version 2 of the License, or
- + * (at your option) any later version.
- + *
- + * This program is distributed in the hope that it will be useful,
- + * but WITHOUT ANY WARRANTY; without even the implied warranty of
- + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- + * GNU General Public License for more details.
- + *
- + * You should have received a copy of the GNU General Public License
- + * along with this program; if not, write to the Free Software
- + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- + */
- +
- +#include <errno.h>
- +#include <fcntl.h>
- +#include <stdio.h>
- +#include <stdlib.h>
- +#include <stdint.h>
- +#include <string.h>
- +#include <sys/types.h>
- +#include <sys/ioctl.h>
- +#include <sys/param.h>
- +#include <sys/mman.h>
- +#include <pciaccess.h>
- +#include <sys/pci.h>
- +
- +#include "backend.h"
- +
- +#define SIZE 255
- +#define DEBUG 0
- +
- +NVClock nvclock;
- +NVCard *nv_card = NULL;
- +
- +static int probe_devices();
- +
- +int init_nvclock()
- +{
- + /* Check if the user is root */
- + if(getuid() != 0 && geteuid() != 0)
- + {
- + set_error(NV_ERR_NOT_ENOUGH_PERMISSIONS);
- + return 0;
- + }
- +
- + /* Detect all nvidia cards; this needs to be done before creating directory and config file as that code needs card access */
- + if(!probe_devices())
- + {
- + /* probe_devices takes care of the error as it isn't certain it failed because of there are no nvidia cards */
- + return 0;
- + }
- +
- + if(!open_config())
- + return 0;
- +
- + return 1;
- +}
- +
- +static int probe_devices()
- +{
- + struct pci_device *pcidev;
- + struct pci_id_match *patterns;
- + struct pci_device_iterator *iter;
- +
- + int counter=0;
- +
- + pcidev=calloc(1, sizeof(struct pci_device));
- + patterns=calloc(1,sizeof(struct pci_id_match));
- +
- + patterns->vendor_id=PCI_VENDOR_ID_NVIDIA;
- + patterns->device_class=PCI_CLASS_VGA<<16;
- + patterns->device_id=PCI_MATCH_ANY;
- + patterns->subdevice_id=PCI_MATCH_ANY;
- + patterns->subvendor_id=PCI_MATCH_ANY;
- + patterns->device_class_mask=PCI_MATCH_ANY;
- +
- + pci_system_init();
- + iter = pci_id_match_iterator_create(patterns);
- + while (( pcidev = pci_device_next( iter )) != NULL )
- + {
- +#if DEBUG
- + printf("count %d, vend 0x%x, dev 0x%x, class 0x%x\n",counter,pcidev->vendor_id,pcidev->device_id,pcidev->device_class>>16);
- +#endif
- + nvclock.card[counter].device_id=pcidev->device_id;
- + nvclock.card[counter].dev_name= "/dev/xsvc";
- + nvclock.card[counter].card_name = (char*)get_card_name(nvclock.card[counter].device_id, &nvclock.card[counter].gpu);
- + nvclock.card[counter].arch = get_gpu_arch(nvclock.card[counter].device_id);
- + nvclock.card[counter].number = counter;
- + nvclock.card[counter].state = 0;
- + nvclock.card[counter].devbusfn = PCI_GET_DEVBUSFN(pcidev->dev, pcidev->bus, pcidev->func);
- + pci_device_probe( pcidev );
- +#if DEBUG
- + int i;
- + for ( i = 0 ; i < 6 ; i++ )
- + {
- + if ( pcidev->regions[i].base_addr != 0 )
- + {
- + printf( " BASE%u 0x%08x addr 0x%08x %s",
- + i,
- + 0,
- + (intptr_t) pcidev->regions[i].base_addr,
- + (pcidev->regions[i].is_IO) ? "I/O" : "MEM" );
- +
- + if ( ! pcidev->regions[i].is_IO )
- + {
- + if ( pcidev->regions[i].is_prefetchable )
- + {
- + printf( " PREFETCHABLE" );
- + }
- + }
- +
- + printf( "\n" );
- + }
- + }
- +#endif
- + nvclock.card[counter].reg_address=pcidev->regions[0].base_addr;
- + counter++;
- + }
- +
- + nvclock.num_cards = counter;
- +
- + pci_system_cleanup();
- +
- + return 1;
- +}
- +
- +int32_t pciReadLong(unsigned short devbusfn, long offset)
- +{
- + struct pci_device *pcidev;
- + int32_t data;
- +
- + pci_system_init();
- + pcidev=pci_device_find_by_slot(0,PCI_GET_BUS(devbusfn),PCI_GET_DEVICE(devbusfn),PCI_GET_FUNCTION(devbusfn));
- +#if DEBUG
- + printf("pciReadLong vend 0x%x, dev 0x%x, class 0x%x\n",pcidev->vendor_id,pcidev->device_id,pcidev->device_class>>16);
- +#endif
- +
- + pci_device_cfg_read_u32(pcidev,&data,offset);
- +
- + pci_system_cleanup();
- + return data;
- +}
- +
- +
- +/* -------- mmap on devices -------- */
- +/* This piece of code is from nvtv a linux program for tvout */
- +/* The author of nvtv got this from xfree86's os-support/linux/lnx_video.c */
- +/* and he modified it a little */
- +void *map_dev_mem (dev_handle_t *dev, unsigned long Base, unsigned long Size)
- +{
- + void *base;
- + int mapflags = MAP_SHARED;
- + unsigned long realBase, alignOff;
- +
- + realBase = Base & ~(getpagesize() - 1);
- + alignOff = Base - realBase;
- +
- + base = mmap((caddr_t)0, Size + alignOff, PROT_READ|PROT_WRITE, mapflags, dev->fd, (off_t)realBase);
- + return (void *) ((char *)base + alignOff);
- +}
- +
- +void unmap_dev_mem (unsigned long Base, unsigned long Size)
- +{
- + unsigned long alignOff = Base - (Base & ~(getpagesize() - 1));
- + munmap((caddr_t)(Base - alignOff), (Size + alignOff));
- + nv_card->mem_mapped = 0;
- +}
- +
- +/* Retrieve a handle to /dev/mem or /dev/nvidiaX */
- +dev_handle_t* open_dev(const char *dev_name)
- +{
- + dev_handle_t *dev;
- + int fd;
- +
- + if( (fd = open(dev_name, O_RDWR)) == -1 )
- + {
- + char err[80];
- + sprintf(err, "Can't open %s", dev_name);
- + set_error_str(err);
- + return NULL;
- + }
- +
- + dev = (dev_handle_t*)calloc(1, sizeof(dev_handle_t));
- + dev->fd = fd;
- + return dev;
- +}
- +
- +/* Close the devide handle */
- +void close_dev(dev_handle_t *dev)
- +{
- + if(!dev)
- + return;
- +
- + close(dev->fd);
- + free(dev);
- +}
- Index: b/src/backend/backend.h
- ===================================================================
- --- a/src/backend/backend.h 2010-06-05 14:45:33.708537666 +0200
- +++ b/src/backend/backend.h 2010-06-05 14:46:24.944536740 +0200
- @@ -1,6 +1,6 @@
- /* NVClock 0.8 - Linux overclocker for NVIDIA cards
- *
- - * Copyright(C) 2001-2005 Roderick Colenbrander
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- *
- * site: http://nvclock.sourceforge.net
- *
- @@ -42,12 +42,20 @@
- /* Set the card object to the requested card */
- int set_card(int number);
- +/* This structure is used to abstract file descriptors away for mmap/unmmap. It will make sense when win32 support will be reactivated */
- +typedef struct dev_handle
- +{
- + int fd;
- +} dev_handle_t;
- +
- /* Some internally needed functions */
- const char* get_card_name(int device_id, gpu_type *gpu);
- int get_gpu_arch(int device_id);
- int set_card_info(int number); /* Basic version of set_card */
- -int map_mem(const char* dev_name);
- -void unmap_mem();
- +dev_handle_t* open_dev(const char *dev_name);
- +void close_dev(dev_handle_t *dev);
- +void *map_dev_mem (dev_handle_t *dev, unsigned long Base, unsigned long Size);
- +void unmap_dev_mem (unsigned long Base, unsigned long Size);
- int32_t pciReadLong(unsigned short devbusfn, long offset);
- /* Bios related stuff */
- Index: b/src/backend/bios.c
- ===================================================================
- --- a/src/backend/bios.c 2010-06-05 14:45:33.712537072 +0200
- +++ b/src/backend/bios.c 2010-06-05 14:46:24.944536740 +0200
- @@ -48,6 +48,8 @@
- static unsigned int locate(char *rom, char *str, int offset);
- struct nvbios *read_bios(const char *file);
- static struct nvbios *parse_bios(char *rom);
- +int load_bios_file(const char* filename, char *data);
- +int load_bios_prom(char *data);
- typedef struct
- {
- @@ -101,7 +103,6 @@
- short i, num_entries;
- unsigned char start;
- unsigned char size;
- - int tmp = 0;
- /* read how far away the start is */
- start = rom[offset];
- @@ -377,45 +378,12 @@
- static void parse_bit_init_script_table(struct nvbios *bios, char *rom, int init_offset, int len)
- {
- int i,offset;
- - int done=0;
- unsigned char id;
- + /* Read all init tables and print some debug info */
- /* Table 1 */
- offset = READ_SHORT(rom, init_offset);
- - /* For pipeline modding purposes we cache 0x1540 and for PLL generation the PLLs */
- - id = rom[offset];
- - while(id != 'q')
- - {
- - offset = bit_init_script_table_get_next_entry(rom, offset);
- - /* Break out of the loop if we find an unknown entry id */
- - if(!offset)
- - break;
- - id = rom[offset];
- -
- - if(id == 'z')
- - {
- - int reg = READ_INT(rom, offset+1);
- - unsigned int val = READ_INT(rom, offset+5);
- - switch(reg)
- - {
- - case 0x1540:
- - bios->pipe_cfg = val;
- - break;
- - case 0x4000:
- - bios->nvpll = val;
- - break;
- - case 0x4020:
- - bios->mpll = val;
- - break;
- - }
- - }
- - }
- -
- -#if DEBUG /* Read all init tables and print some debug info */
- -/* Table 1 */
- - offset = READ_SHORT(rom, init_offset);
- -
- for(i=0; i<=len; i+=2)
- {
- /* Not all tables have to exist */
- @@ -426,7 +394,9 @@
- continue;
- }
- +#if DEBUG
- printf("Init script table %d\n", i/2+1);
- +#endif
- id = rom[offset];
- while(id != 'q')
- @@ -435,10 +405,33 @@
- if(!offset)
- break;
- +#if DEBUG
- if(!(id == 'K' || id == 'n' || id == 'x' || id == 'y' || id == 'z'))
- printf("'%c' (%x)\n", id, id);
- +#endif
- offset = bit_init_script_table_get_next_entry(rom, offset);
- id = rom[offset];
- +
- + if(id == 'z')
- + {
- + int reg = READ_INT(rom, offset+1);
- + unsigned int val = READ_INT(rom, offset+5);
- + switch(reg)
- + {
- + case 0x1540:
- + bios->pipe_cfg = val;
- + break;
- + case 0x4000:
- + bios->nvpll = val;
- + break;
- + case 0x4020:
- + bios->mpll = val;
- + break;
- + case (NV_PDISPLAY_OFFSET + NV_PDISPLAY_SOR0_REGS_BRIGHTNESS):
- + bios->pdisplay_brightness = val;
- + break;
- + }
- + }
- }
- /* Pointer to next init table */
- @@ -446,8 +439,6 @@
- /* Get location of next table */
- offset = READ_SHORT(rom, init_offset);
- }
- -#endif
- -
- }
- @@ -881,55 +872,6 @@
- return 0;
- }
- -
- -#if DEBUG
- -int main(int argc, char **argv)
- -{
- - read_bios("bios.rom");
- - return 0;
- -}
- -
- -
- -#else
- -void dump_bios(const char *filename)
- -{
- - int i;
- - FILE *fp = NULL;
- - char *rom = calloc(NV_PROM_SIZE, sizeof(char));
- -
- - if(!rom)
- - {
- - fprintf(stderr, "Unable to allocate memory for shadowing the bios image\n");
- - return;
- - }
- -
- - /* Try to obtain a copy of the bios first from PRAMIN later from the (slow) ROM.
- - / Dumping from ROM might fail on laptops as for some reason there is no ROM on some laptops.
- - */
- - if(!load_bios_pramin(rom))
- - {
- - if(!load_bios_prom(rom))
- - {
- - fprintf(stderr, "Unable to shadow the video bios\n");
- - free(rom);
- - return;
- - }
- - }
- -
- - /* Try to dump the bios to a file */
- - fp = fopen(filename, "w+");
- - if(!fp) return;
- -
- - for(i=0; i<NV_PROM_SIZE; i++)
- - {
- - fprintf(fp, "%c", rom[i]);
- - }
- - fclose(fp);
- -
- - free(rom);
- -}
- -#endif
- -
- /* Verify if we are dealing with a valid bios image */
- int verify_bios(char *rom)
- {
- @@ -946,7 +888,6 @@
- int load_bios_file(const char* filename, char *data)
- {
- int fd = 0;
- - int i = 0;
- char *rom = NULL;
- if((fd = open(filename, O_RDONLY)) == -1)
- @@ -969,10 +910,10 @@
- return 0;
- }
- +#ifndef DEBUG
- /* Load the bios from video memory. Note it might not be cached there at all times. */
- int load_bios_pramin(char *data)
- {
- - int i;
- char *bios;
- uint32_t old_bar0_pramin = 0;
- @@ -1041,6 +982,7 @@
- else
- return 0;
- }
- +#endif
- /* This function tries to read a copy of the bios from harddrive. If that doesn't
- exist it will dump the bios and then read it. You might wonder why we don't read the bios from
- @@ -1055,6 +997,13 @@
- if(!rom)
- return NULL;
- +#if DEBUG
- + if(!load_bios_file(file, rom))
- + {
- + free(rom);
- + return NULL;
- + }
- +#else
- if(!load_bios_pramin(rom))
- {
- if(!load_bios_file(file, rom))
- @@ -1063,6 +1012,7 @@
- return NULL;
- }
- }
- +#endif
- /* Do the actual bios parsing */
- res = parse_bios(rom);
- @@ -1098,7 +1048,7 @@
- device_id = READ_SHORT(rom, pcir_offset + 6);
- if(get_gpu_arch(device_id) & (NV4X | NV5X))
- {
- - /* For NV40 card the BIT structure is used instead of the BMP structure (last one doesn't exist anymore on 6600/6800le cards). */
- + /* For NV40 card the BIT structure is used instead of the BMP structure (last one doesn't exist anymore on 6600/6800le cards). */
- if(!(bit_offset = locate(rom, "BIT", 0)))
- return NULL;
- @@ -1189,3 +1139,49 @@
- #endif
- return bios;
- }
- +
- +#if DEBUG
- +int main(int argc, char **argv)
- +{
- + read_bios("bios.rom");
- + return 0;
- +}
- +#else
- +void dump_bios(const char *filename)
- +{
- + int i;
- + FILE *fp = NULL;
- + char *rom = calloc(NV_PROM_SIZE, sizeof(char));
- +
- + if(!rom)
- + {
- + fprintf(stderr, "Unable to allocate memory for shadowing the bios image\n");
- + return;
- + }
- +
- + /* Try to obtain a copy of the bios first from PRAMIN later from the (slow) ROM.
- + / Dumping from ROM might fail on laptops as for some reason there is no ROM on some laptops.
- + */
- + if(!load_bios_pramin(rom))
- + {
- + if(!load_bios_prom(rom))
- + {
- + fprintf(stderr, "Unable to shadow the video bios\n");
- + free(rom);
- + return;
- + }
- + }
- +
- + /* Try to dump the bios to a file */
- + fp = fopen(filename, "w+");
- + if(!fp) return;
- +
- + for(i=0; i<NV_PROM_SIZE; i++)
- + {
- + fprintf(fp, "%c", rom[i]);
- + }
- + fclose(fp);
- +
- + free(rom);
- +}
- +#endif
- Index: b/src/backend/nvclock.h
- ===================================================================
- --- a/src/backend/nvclock.h 2010-06-05 14:45:33.712537072 +0200
- +++ b/src/backend/nvclock.h 2010-06-05 14:46:24.944536740 +0200
- @@ -179,6 +179,8 @@
- unsigned int spll;
- unsigned int pipe_cfg; /* Used to cache the NV4x pipe_cfg register */
- +
- + unsigned int pdisplay_brightness; /* Used for NV5x smartdimmer */
- };
- typedef struct {
- @@ -248,7 +250,7 @@
- /* Hardware monitoring */
- short num_busses; /* Number of available i2c busses */
- - I2CBusPtr busses[3]; /* I2C busses on the videocard; this bus is needed for communication with sensor chips */
- + I2CBusPtr busses[4]; /* I2C busses on the videocard; this bus is needed for communication with sensor chips */
- I2CDevPtr sensor; /* When a sensor chip is available, this device pointer can be used to access it */
- char *sensor_name; /* Name of the sensor; although sensor contains the name too, we add sensor_name because of the builtin temperature sensor used on various NV4x cards */
- int (*get_board_temp)(I2CDevPtr dev); /* Temperature of the sensor chip or for example the ram chips */
- Index: b/src/backend/back_linux.c
- ===================================================================
- --- a/src/backend/back_linux.c 2010-06-05 14:45:33.720536632 +0200
- +++ b/src/backend/back_linux.c 2010-06-05 14:46:24.944536740 +0200
- @@ -1,6 +1,6 @@
- /* NVClock 0.8 - Linux overclocker for NVIDIA cards
- *
- - * Copyright(C) 2001-2007 Roderick Colenbrander
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- *
- * site: http://nvclock.sourceforge.net
- *
- @@ -37,8 +37,6 @@
- static int IsVideoCard(unsigned short devbusfn);
- static int probe_devices();
- -static void *map_dev_mem (int fd, unsigned long Base, unsigned long Size);
- -static void unmap_dev_mem (unsigned long Base, unsigned long Size);
- /* Check if we are using the closed source Nvidia drivers */
- static int check_driver()
- @@ -62,7 +60,7 @@
- / For various versions the driver isn't initialized when X hasn't
- / been started and it can crash then.
- */
- - if(sscanf(buffer,"%s %d %d",&name, &size, &used) != 3) continue;
- + if(sscanf(buffer,"%s %d %d", name, &size, &used) != 3) continue;
- {
- if(strcmp(name, "NVdriver") == 0)
- {
- @@ -131,7 +129,7 @@
- if(sscanf(buf,"%hx %x %x %x",&devbusfn, &dev, &irq, ®_addr) != 4) continue;
- /* Check if the card contains an Nvidia chipset */
- - if((dev>>16) == 0x10de)
- + if((dev>>16) == PCI_VENDOR_ID_NVIDIA)
- {
- /*
- When we enter this block of code we know that the device contains some
- @@ -199,8 +197,8 @@
- static int IsVideoCard(unsigned short devbusfn)
- {
- int32_t pci_class = pciReadLong(devbusfn, 0x9);
- - /* When the id isn't 0x03 the card isn't a vga card return 0 */
- - if(((htonl(pci_class) >> 8) & 0xf) != 0x03)
- + /* When the id isn't PCI_CLASS_VGA the card isn't a vga card return 0 */
- + if(((htonl(pci_class) >> 8) & 0xf) != PCI_CLASS_VGA)
- return 0;
- else
- return 1;
- @@ -228,8 +226,10 @@
- return -1;
- }
- -int map_mem(const char *dev_name)
- +/* Retrieve a handle to /dev/mem or /dev/nvidiaX */
- +dev_handle_t* open_dev(const char *dev_name)
- {
- + dev_handle_t *dev;
- int fd;
- if( (fd = open(dev_name, O_RDWR)) == -1 )
- @@ -237,48 +237,29 @@
- char err[80];
- sprintf(err, "Can't open %s", dev_name);
- set_error_str(err);
- - return 0;
- + return NULL;
- }
- -
- - /* Map the registers of the nVidia chip */
- - nv_card->PEXTDEV = map_dev_mem(fd, nv_card->reg_address + 0x101000, 0x1000);
- - nv_card->PFB = map_dev_mem(fd, nv_card->reg_address + 0x100000, 0x1000);
- - /* normally pmc is till 0x2000 but extended it for nv40 */
- - nv_card->PMC = map_dev_mem(fd, nv_card->reg_address + 0x000000, 0x2ffff);
- - nv_card->PCIO = map_dev_mem(fd, nv_card->reg_address + 0x601000, 0x2000);
- - nv_card->PDISPLAY = map_dev_mem(fd, nv_card->reg_address + NV_PDISPLAY_OFFSET, NV_PDISPLAY_SIZE);
- - nv_card->PRAMDAC = map_dev_mem(fd, nv_card->reg_address + 0x680000, 0x2000);
- - nv_card->PRAMIN = map_dev_mem(fd, nv_card->reg_address + NV_PRAMIN_OFFSET, NV_PRAMIN_SIZE);
- - nv_card->PROM = map_dev_mem(fd, nv_card->reg_address + 0x300000, 0xffff);
- -
- - /* On Geforce 8xxx cards it appears that the pci config header has been moved */
- - if(nv_card->arch & NV5X)
- - nv_card->PBUS = map_dev_mem(fd, nv_card->reg_address + 0x88000, 0x100);
- - else
- - nv_card->PBUS = nv_card->PMC + 0x1800/4;
- - nv_card->mem_mapped = 1;
- - close(fd);
- - return 1;
- + dev = (dev_handle_t*)calloc(1, sizeof(dev_handle_t));
- + dev->fd = fd;
- + return dev;
- }
- -void unmap_mem()
- +/* Close the devide handle */
- +void close_dev(dev_handle_t *dev)
- {
- - unmap_dev_mem((unsigned long)nv_card->PEXTDEV, 0x1000);
- - unmap_dev_mem((unsigned long)nv_card->PFB, 0x1000);
- - unmap_dev_mem((unsigned long)nv_card->PMC, 0xffff);
- - unmap_dev_mem((unsigned long)nv_card->PCIO, 0x2000);
- - unmap_dev_mem((unsigned long)nv_card->PDISPLAY, NV_PDISPLAY_SIZE);
- - unmap_dev_mem((unsigned long)nv_card->PRAMDAC, 0x2000);
- - unmap_dev_mem((unsigned long)nv_card->PRAMIN, NV_PRAMIN_SIZE);
- - unmap_dev_mem((unsigned long)nv_card->PROM, 0xffff);
- + if(!dev)
- + return;
- +
- + close(dev->fd);
- + free(dev);
- }
- /* -------- mmap on devices -------- */
- /* This piece of code is from nvtv a linux program for tvout */
- /* The author of nvtv got this from xfree86's os-support/linux/lnx_video.c */
- /* and he modified it a little */
- -static void *map_dev_mem (int fd, unsigned long Base, unsigned long Size)
- +void *map_dev_mem (dev_handle_t *dev, unsigned long Base, unsigned long Size)
- {
- void *base;
- int mapflags = MAP_SHARED;
- @@ -288,11 +269,11 @@
- alignOff = Base - realBase;
- base = mmap((caddr_t)0, Size + alignOff, PROT_READ|PROT_WRITE,
- - mapflags, fd, (off_t)realBase);
- + mapflags, dev->fd, (off_t)realBase);
- return (void *) ((char *)base + alignOff);
- }
- -static void unmap_dev_mem (unsigned long Base, unsigned long Size)
- +void unmap_dev_mem (unsigned long Base, unsigned long Size)
- {
- unsigned long alignOff = Base - (Base & ~(getpagesize() - 1));
- munmap((caddr_t)(Base - alignOff), (Size + alignOff));
- Index: b/src/backend/back_win32.c
- ===================================================================
- --- a/src/backend/back_win32.c 2010-06-05 14:45:33.720536632 +0200
- +++ b/src/backend/back_win32.c 2010-06-05 14:46:24.944536740 +0200
- @@ -1,6 +1,6 @@
- /* NVClock 0.8 - Linux overclocker for NVIDIA cards
- *
- - * Copyright(C) 2001-2007 Roderick Colenbrander
- + * Copyright(C) 2001-2009 Roderick Colenbrander
- *
- * site: http://nvclock.sourceforge.net
- *
- @@ -57,7 +57,7 @@
- if(lib_memacc == NULL)
- {
- set_error_str("Can't open MemAcc.dll\n");
- - return 0;
- + return 0;
- }
- pOpenLibrary = (void*)GetProcAddress(lib_memacc, "maOpenLibrary");
- @@ -100,7 +100,7 @@
- /* Check whether the vendor is nvidia and the BaseClass == VGA */
- if(vendor_id == 0x10de && pCfg.BaseClass == 0x3)
- {
- - printf("Found VendorID: 0x%x DeviceID: 0x%x\r\n", vendor_id, device_id);
- +// printf("Found VendorID: 0x%x DeviceID: 0x%x\r\n", vendor_id, device_id);
- nvclock.card[i].device_id = device_id;
- nvclock.card[i].arch = get_gpu_arch(nvclock.card[i].device_id);
- @@ -126,38 +126,30 @@
- return -1;
- }
- -int map_mem(const char *dev_name)
- +/* Retrieve a handle to /dev/mem or /dev/nvidiaX */
- +dev_handle_t* open_dev(const char *dev_name)
- +{
- + dev_handle_t *dev;
- +
- + dev = (dev_handle_t*)calloc(1, sizeof(dev_handle_t));
- +// dev->fd = fd;
- + return dev;
- +}
- +
- +/* Close the devide handle */
- +void close_dev(dev_handle_t *dev)
- {
- - void *hmem; // do nothing with this for now
- - /* Map the registers of the nVidia chip */
- - nv_card->PEXTDEV = pMapPhysToLinear(nv_card->reg_address + 0x101000, 0x1000, &hmem);
- - nv_card->PFB = pMapPhysToLinear(nv_card->reg_address + 0x100000, 0x1000, &hmem);
- - /* normally pmc is till 0x2000 but extended it for nv40 */
- - nv_card->PMC = pMapPhysToLinear(nv_card->reg_address + 0x000000, 0x2ffff, &hmem);
- - nv_card->PCIO = pMapPhysToLinear(nv_card->reg_address + 0x601000, 0x2000, &hmem);
- - nv_card->PDISPLAY = pMapPhysToLinear(nv_card->reg_address + NV_PDISPLAY, NV_PDISPLAY_LENGTH, &hmem);
- - nv_card->PRAMDAC = pMapPhysToLinear(nv_card->reg_address + 0x680000, 0x2000, &hmem);
- - nv_card->PROM = pMapPhysToLinear(nv_card->reg_address + 0x300000, 0xffff, &hmem);
- -
- - /* On Geforce 8xxx cards it appears that the pci config header has been moved */
- - if(nv_card->arch & NV5X)
- - nv_card->PBUS = pMapPhysToLinear(nv_card->reg_address + 0x88000, 0x100, &hmem);
- - else
- - nv_card->PBUS = nv_card->PMC + 0x1800/4;
- - nv_card->mem_mapped = 1;
- - return 1;
- }
- -void unmap_mem()
- +void *map_dev_mem(dev_handle_t *dev, unsigned long Base, unsigned long Size)
- {
- -#if 0
- - pUnMapIO(winio, (void*)nv_card->PEXTDEV);
- - pUnMapIO(winio, (void*)nv_card->PFB);
- - pUnMapIO(winio, (void*)nv_card->PMC);
- - pUnMapIO(winio, (void*)nv_card->PCIO);
- - pUnMapIO(winio, (void*)nv_card->PRAMDAC);
- - pUnMapIO(winio, (void*)nv_card->PROM);
- - nv_card->mem_mapped = 0;
- -#endif
- + void *hmem;
- + return pMapPhysToLinear(Base, Size, &hmem);
- +}
- +
- +
- +void unmap_dev_mem(unsigned long Base, unsigned long Size)
- +{
- +
- }
- Index: b/src/backend/w83781d.c
- ===================================================================
- --- a/src/backend/w83781d.c 2010-06-05 14:45:33.728536611 +0200
- +++ b/src/backend/w83781d.c 2010-06-05 14:46:24.944536740 +0200
- @@ -73,9 +73,11 @@
- float w83781d_get_fanspeed_pwm(I2CDevPtr dev)
- {
- + return 0.0;
- }
- int w83781d_set_fanspeed_pwm(I2CDevPtr dev, float speed)
- {
- + return 0;
- }
- Index: b/src/backend/nv30.c
- ===================================================================
- --- a/src/backend/nv30.c 2010-06-05 14:45:33.736536575 +0200
- +++ b/src/backend/nv30.c 2010-06-05 14:46:24.944536740 +0200
- @@ -178,7 +178,7 @@
- static void nv30_set_gpu_speed(unsigned int nvclk)
- {
- unsigned int PLL=0;
- - int m1, m2, n1, n2, p;
- + unsigned int m1, m2, n1, n2, p;
- nvclk *= 1000;
- p = NV30_PLL_P(nv_card->PRAMDAC[0x500/4]);
- @@ -200,7 +200,7 @@
- static void nv31_set_gpu_speed(unsigned int nvclk)
- {
- unsigned int PLL, PLL2;
- - int m1, m2, n1, n2, p;
- + unsigned int m1, m2, n1, n2, p;
- nvclk *= 1000;
- p = NV30_PLL_P(nv_card->PRAMDAC[0x500/4]);
- @@ -241,7 +241,7 @@
- static void nv30_set_memory_speed(unsigned int memclk)
- {
- unsigned int PLL=0;
- - int m1, m2, n1, n2, p;
- + unsigned int m1, m2, n1, n2, p;
- memclk *= 1000;
- p = NV30_PLL_P(nv_card->PRAMDAC[0x500/4]);
- @@ -260,7 +260,7 @@
- static void nv31_set_memory_speed(unsigned int memclk)
- {
- unsigned int PLL, PLL2;
- - int m1, m2, n1, n2, p;
- + unsigned int m1, m2, n1, n2, p;
- memclk *= 1000;
- p = NV30_PLL_P(nv_card->PRAMDAC[0x500/4]);
- Index: b/src/backend/nv50.c
- ===================================================================
- --- a/src/backend/nv50.c 2010-06-05 14:45:33.736536575 +0200
- +++ b/src/backend/nv50.c 2010-06-05 14:46:24.944536740 +0200
- @@ -166,13 +166,18 @@
- if(speed < 10 || speed > 100)
- return;
- + /* Note Oxe300 is also related to the fanspeed. By default it seems to contain 0x100 on
- + / 9600GT and other cards. Setting this value to 0x300 seems to set the fanspeed to a fixed
- + / value. Apparently 0xe300 acts like a multiplexer?
- + / On some boards this magical bit9 (0x200) is set by the drivers sometimes which prevents
- + / fanspeed adjustment. Clear this bet when needed.
- + */
- + if(nv_card->PMC[0xe300/4] & (1<<9))
- + nv_card->PMC[0xe300/4] &= ~(1<<9);
- +
- /* Bit31 must be set else the hardware doesn't seem to do anything with the changes
- / Bit30-16 contain some magical bits on 9500GT and other cards which we should preserve.
- / On a 9500gt the contents of 0xe120 could be e.g. 0x0300010e with a pwm_divider of 0x21d.
- - /
- - / Note Oxe300 is also related to the fanspeed. By default it seems to contain 0x100 on
- - / 9600GT and other cards. Setting this value to 0x300 seems to set the fanspeed to a fixed
- - / value. Apparently 0xe300 acts like a multiplexer?
- */
- value = 0x80000000 | (nv_card->PMC[0xe120/4] & 0x7fff0000) | (((int)(100 - speed) * pwm_divider/100) & 0x7fff);
- nv_card->PMC[0xe120/4] = value;
- @@ -404,12 +409,16 @@
- / FZ21E, FZ21M, FZ470E, FZ340E, FZ190N, FZ18M, FZ31E, FZ18E, FZ31Z, FZ21Z, FZ31S, AR51SU, AR71S
- / - Zepto (unknown model), Geforce 9600M, dev=0x649, subvendor=0x1a46,
- */
- +#if 0
- if((nv_card->gpu == MOBILE) &&
- ((nv_card->subvendor_id == PCI_VENDOR_ID_APPLE) ||
- (nv_card->subvendor_id == PCI_VENDOR_ID_HP) ||
- (nv_card->subvendor_id == PCI_VENDOR_ID_SANYO) ||
- (nv_card->subvendor_id == PCI_VENDOR_ID_SONY) ||
- (nv_card->subvendor_id == PCI_VENDOR_ID_ZEPTO)))
- +#endif
- + /* Detect the presence of smartdimmer depending on whether the bios initialized the register */
- + if(nv_card->bios && nv_card->bios->pdisplay_brightness)
- {
- nv_card->caps |= SMARTDIMMER;
- nv_card->get_smartdimmer = nv50_mobile_get_smartdimmer;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement