summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Plattner <aplattner@nvidia.com>2014-08-06 07:43:15 -0700
committerAaron Plattner <aplattner@nvidia.com>2014-08-06 07:43:15 -0700
commitf15421e12307422e3f870a42330124d49ce7b94d (patch)
tree06f5328a916cdc3b2d2b5afb4f5d78e1e0e2831f
parent55d05b67db79bc990db62556e154ccadfc07cfd7 (diff)
343.13343.13
-rw-r--r--backup.c49
-rw-r--r--backup.h1
-rw-r--r--common-utils/gen-manpage-opts-helper.c21
-rw-r--r--files.c24
-rw-r--r--files.h4
-rw-r--r--install-from-cwd.c2
-rw-r--r--kernel.c14
-rw-r--r--nvLegacy.h281
-rw-r--r--nvidia-installer.c14
-rw-r--r--nvidia-installer.h1
-rw-r--r--version.mk2
11 files changed, 385 insertions, 28 deletions
diff --git a/backup.c b/backup.c
index 50dfd2a..0f8945d 100644
--- a/backup.c
+++ b/backup.c
@@ -149,7 +149,7 @@ int init_backup(Options *op, Package *p)
/* create the backup directory, with perms only for owner */
- if (!mkdir_with_log(op, BACKUP_DIRECTORY, BACKUP_DIRECTORY_PERMS, FALSE)) {
+ if (!mkdir_recursive(op, BACKUP_DIRECTORY, BACKUP_DIRECTORY_PERMS, FALSE)) {
return FALSE;
}
@@ -507,7 +507,7 @@ int log_mkdir(Options *op, const char *dirs)
* the existence of BACKUP_DIRECTORY
*/
if (!directory_exists(op, BACKUP_DIRECTORY) &&
- !mkdir_with_log(op, BACKUP_DIRECTORY, BACKUP_DIRECTORY_PERMS, FALSE)) {
+ !mkdir_recursive(op, BACKUP_DIRECTORY, BACKUP_DIRECTORY_PERMS, FALSE)) {
return FALSE;
}
@@ -1414,6 +1414,51 @@ int uninstall_existing_driver(Options *op, const int interactive)
/*
+ * run_existing_uninstaller() - attempt to run `nvidia-uninstall` if it
+ * exists; if it does not exist or fails, fall back to normal uninstallation.
+ */
+int run_existing_uninstaller(Options *op)
+{
+ char *uninstaller = find_system_util("nvidia-uninstall");
+
+ if (uninstaller) {
+ /* Run the uninstaller non-interactively, and explicitly log to the
+ * uninstall log location: older installers may not do so implicitly. */
+ char *uninstall_cmd = nvstrcat(uninstaller, " -s --log-file-name="
+ DEFAULT_UNINSTALL_LOG_FILE_NAME, NULL);
+ char *data;
+ int ret;
+
+ ui_log(op, "Uninstalling the previous installation with %s.",
+ uninstaller);
+
+ ret = run_command(op, uninstall_cmd, &data, FALSE, 0, TRUE);
+
+ nvfree(uninstall_cmd);
+
+ /* if nvidia-uninstall succeeded, return early; otherwise, fall back to
+ * uninstalling via the backup log file. */
+ if (ret == 0) {
+ nvfree(data);
+ return TRUE;
+ } else {
+ ui_log(op, "%s failed; see %s for more details.", uninstaller,
+ DEFAULT_UNINSTALL_LOG_FILE_NAME);
+ if (data && strlen(data)) {
+ ui_log(op, "The output from %s was:\n%s", uninstaller, data);
+ }
+ nvfree(data);
+ }
+
+ nvfree(uninstaller);
+ }
+
+ return uninstall_existing_driver(op, FALSE);
+}
+
+
+
+/*
* report_driver_information() - report basic information about the
* currently installed driver.
*/
diff --git a/backup.h b/backup.h
index 6d1be66..47c0bbc 100644
--- a/backup.h
+++ b/backup.h
@@ -33,6 +33,7 @@ int log_install_file (Options*, const char*);
int log_create_symlink (Options*, const char*, const char*);
int check_for_existing_driver (Options*, Package*);
int uninstall_existing_driver (Options*, const int);
+int run_existing_uninstaller (Options*);
int report_driver_information (Options*);
int get_installed_driver_version_and_descr(Options *, char **, char **);
diff --git a/common-utils/gen-manpage-opts-helper.c b/common-utils/gen-manpage-opts-helper.c
index c05ef38..84bac62 100644
--- a/common-utils/gen-manpage-opts-helper.c
+++ b/common-utils/gen-manpage-opts-helper.c
@@ -90,7 +90,9 @@ static void print_option(const NVGetoptOption *o)
* '&' : toggles italics on and off
* '^' : toggles bold on and off
* '-' : is backslashified: "\-"
+ * '\n': resets the first character flag
* '.' : must not be the first character of a line
+ * '\'': must not be the first character of a line
*
* Trailing whitespace is omitted when italics or bold is on
*/
@@ -110,8 +112,8 @@ static void print_option(const NVGetoptOption *o)
printf("\n.I ");
}
omitWhiteSpace = italics;
+ firstchar = italics;
italics = !italics;
- firstchar = TRUE;
break;
case '^':
if (bold) {
@@ -120,8 +122,8 @@ static void print_option(const NVGetoptOption *o)
printf("\n.B ");
}
omitWhiteSpace = bold;
+ firstchar = bold;
bold = !bold;
- firstchar = TRUE;
break;
case '-':
printf("\\-");
@@ -134,6 +136,11 @@ static void print_option(const NVGetoptOption *o)
firstchar = FALSE;
}
break;
+ case '\n':
+ printf("\n");
+ omitWhiteSpace = FALSE;
+ firstchar = TRUE;
+ break;
case '.':
if (firstchar) {
fprintf(stderr, "Error: *roff can't start a line with '.' "
@@ -144,6 +151,16 @@ static void print_option(const NVGetoptOption *o)
exit(1);
}
/* fall through */
+ case '\'':
+ if (firstchar) {
+ fprintf(stderr, "Error: *roff can't start a line with '\''. "
+ "If you started a line with '\'' in the description "
+ "of the '%s' option, please add some text at the "
+ "beginning of the sentence, so that a valid manpage "
+ "can be generated.\n", o->name);
+ exit(1);
+ }
+ /* fall through */
default:
printf("%c", *s);
omitWhiteSpace = FALSE;
diff --git a/files.c b/files.c
index 6d52237..5d8b8e6 100644
--- a/files.c
+++ b/files.c
@@ -1220,7 +1220,7 @@ int confirm_path(Options *op, const char *path)
if (ui_multiple_choice(op, choices, 2, 0, "The directory '%s' does not "
"exist; would you like to create it, or would you "
"prefer to abort installation?", path) == 0) {
- if (mkdir_recursive(op, path, 0755)) {
+ if (mkdir_with_log(op, path, 0755)) {
return TRUE;
} else {
return FALSE;
@@ -1237,12 +1237,12 @@ int confirm_path(Options *op, const char *path)
/*
- * mkdir_with_log() - create the path specified, also creating parent
+ * mkdir_recursive() - create the path specified, also creating parent
* directories as needed; this is equivalent to `mkdir -p`. Log created
* directories if the "log" parameter is set.
*/
-int mkdir_with_log(Options *op, const char *path, const mode_t mode, int log)
+int mkdir_recursive(Options *op, const char *path, const mode_t mode, int log)
{
char *c, *tmp, ch, *list, *tmplist;
@@ -1284,19 +1284,19 @@ int mkdir_with_log(Options *op, const char *path, const mode_t mode, int log)
free(tmp);
return TRUE;
-} /* mkdir_with_log */
+}
/*
- * mkdir_recursive() - Wrap mkdir_with_log() to create the path specified
+ * mkdir_with_log() - Wrap mkdir_recursive() to create the path specified
* with any needed parent directories.
*/
-int mkdir_recursive(Options *op, const char *path, const mode_t mode)
+int mkdir_with_log(Options *op, const char *path, const mode_t mode)
{
- return mkdir_with_log(op, path, mode, TRUE);
-} /* mkdir_recursive() */
+ return mkdir_recursive(op, path, mode, TRUE);
+}
@@ -1397,7 +1397,7 @@ int install_file(Options *op, const char *srcfile,
dirc = nvstrdup(dstfile);
dname = dirname(dirc);
- if (!mkdir_recursive(op, dname, 0755)) {
+ if (!mkdir_with_log(op, dname, 0755)) {
free(dirc);
return FALSE;
}
@@ -1423,7 +1423,7 @@ int install_symlink(Options *op, const char *linkname, const char *dstfile)
dirc = nvstrdup(dstfile);
dname = dirname(dirc);
- if (!mkdir_recursive(op, dname, 0755)) {
+ if (!mkdir_with_log(op, dname, 0755)) {
free(dirc);
return FALSE;
}
@@ -1509,7 +1509,7 @@ char *make_tmpdir(Options *op)
remove_directory(op, tmpdir);
}
- if (!mkdir_recursive(op, tmpdir, 0655)) {
+ if (!mkdir_recursive(op, tmpdir, 0655, FALSE)) {
return NULL;
}
@@ -1692,7 +1692,7 @@ int pack_precompiled_files(Options *op, Package *p, int num_files,
/* make sure the precompiled_kernel_interface_directory exists */
- mkdir_recursive(op, p->precompiled_kernel_interface_directory, 0755);
+ mkdir_recursive(op, p->precompiled_kernel_interface_directory, 0755, FALSE);
/* use the time in the output string... should be fairly unique */
diff --git a/files.h b/files.h
index 5b28b80..397c17c 100644
--- a/files.h
+++ b/files.h
@@ -43,8 +43,8 @@ int mode_string_to_mode(Options *op, char *s, mode_t *mode);
char *mode_to_permission_string(mode_t mode);
int directory_exists(Options *op, const char *dir);
int confirm_path(Options *op, const char *path);
-int mkdir_with_log(Options *op, const char *path, const mode_t mode, int log);
-int mkdir_recursive(Options *op, const char *path, const mode_t mode);
+int mkdir_recursive(Options *op, const char *path, const mode_t mode, int log);
+int mkdir_with_log(Options *op, const char *path, const mode_t mode);
char *get_symlink_target(Options *op, const char *filename);
char *get_resolved_symlink_target(Options *op, const char *filename);
int install_file(Options *op, const char *srcfile,
diff --git a/install-from-cwd.c b/install-from-cwd.c
index c107014..523cb57 100644
--- a/install-from-cwd.c
+++ b/install-from-cwd.c
@@ -260,7 +260,7 @@ int install_from_cwd(Options *op)
*/
if (!op->kernel_module_only) {
- if (!uninstall_existing_driver(op, FALSE)) goto failed;
+ if (!run_existing_uninstaller(op)) goto failed;
}
/*
diff --git a/kernel.c b/kernel.c
index 082eba2..4819489 100644
--- a/kernel.c
+++ b/kernel.c
@@ -152,7 +152,7 @@ int determine_kernel_module_installation_path(Options *op)
}
}
- if (!mkdir_recursive(op, op->kernel_module_installation_path, 0755))
+ if (!mkdir_with_log(op, op->kernel_module_installation_path, 0755))
return FALSE;
ui_expert(op, "Kernel module installation path: %s",
@@ -1050,7 +1050,7 @@ int build_kernel_interface(Options *op, Package *p,
uvmdir = nvstrcat(tmpdir, "/" UVM_SUBDIR, NULL);
if (op->install_uvm) {
- if (!mkdir_recursive(op, uvmdir, 0655)) {
+ if (!mkdir_recursive(op, uvmdir, 0655, FALSE)) {
ui_error(op, "Unable to create a temporary subdirectory for the "
"Unified Memory kernel module build.");
goto failed;
@@ -1478,6 +1478,7 @@ int test_kernel_module(Options *op, Package *p)
if (fd >= 0) {
if (read(fd, &old_loglevel, 1) == 1) {
new_loglevel = '2'; /* KERN_CRIT */
+ lseek(fd, 0, SEEK_SET);
write(fd, &new_loglevel, 1);
}
} else {
@@ -1600,12 +1601,15 @@ test_exit:
nvfree(data);
if (fd >= 0) {
- if (new_loglevel != 0)
+ if (new_loglevel != 0) {
+ lseek(fd, 0, SEEK_SET);
write(fd, &old_loglevel, 1);
+ }
close(fd);
} else {
- if (new_loglevel != 0)
+ if (new_loglevel != 0) {
sysctl(name, 2, NULL, 0, &old_loglevel, len);
+ }
}
/*
@@ -1811,7 +1815,7 @@ PrecompiledInfo *find_precompiled_kernel_interface(Options *op, Package *p)
/* make sure the target directory exists */
- if (!mkdir_recursive(op, p->kernel_module_build_directory, 0755))
+ if (!mkdir_recursive(op, p->kernel_module_build_directory, 0755, FALSE))
goto failed;
memset(search_filelist, 0, sizeof(search_filelist));
diff --git a/nvLegacy.h b/nvLegacy.h
index e910cba..c409a87 100644
--- a/nvLegacy.h
+++ b/nvLegacy.h
@@ -39,6 +39,7 @@ typedef struct _LEGACY_STRINGS {
* This table describes how we should refer to legacy branches.
*/
static const LEGACY_STRINGS LegacyStrings[] = {
+ { 5, "340.xx" },
{ 4, "304.xx" },
{ 3, "173.14.xx" },
{ 2, "96.43.xx" },
@@ -155,6 +156,12 @@ static const LEGACY_INFO LegacyList[] = {
{ 0x018A, 2, "Quadro NVS 280 SD" },
{ 0x018B, 2, "Quadro4 380 XGL" },
{ 0x018C, 2, "Quadro NVS 50 PCI" },
+ { 0x0191, 5, "GeForce 8800 GTX" },
+ { 0x0193, 5, "GeForce 8800 GTS" },
+ { 0x0194, 5, "GeForce 8800 Ultra" },
+ { 0x0197, 5, "Tesla C870" },
+ { 0x019D, 5, "Quadro FX 5600" },
+ { 0x019E, 5, "Quadro FX 4600" },
{ 0x01A0, 2, "GeForce2 Integrated GPU" },
{ 0x01D0, 4, "GeForce 7350 LE" },
{ 0x01D1, 4, "GeForce 7300 LE" },
@@ -274,16 +281,288 @@ static const LEGACY_INFO LegacyList[] = {
{ 0x03D2, 4, "GeForce 6100 nForce 400" },
{ 0x03D5, 4, "GeForce 6100 nForce 420" },
{ 0x03D6, 4, "GeForce 7025 / nForce 630a" },
+ { 0x0400, 5, "GeForce 8600 GTS" },
+ { 0x0401, 5, "GeForce 8600 GT" },
+ { 0x0402, 5, "GeForce 8600 GT" },
+ { 0x0403, 5, "GeForce 8600 GS" },
+ { 0x0404, 5, "GeForce 8400 GS" },
+ { 0x0405, 5, "GeForce 9500M GS" },
+ { 0x0406, 5, "GeForce 8300 GS" },
+ { 0x0407, 5, "GeForce 8600M GT" },
+ { 0x0408, 5, "GeForce 9650M GS" },
+ { 0x0409, 5, "GeForce 8700M GT" },
+ { 0x040A, 5, "Quadro FX 370" },
+ { 0x040B, 5, "Quadro NVS 320M" },
+ { 0x040C, 5, "Quadro FX 570M" },
+ { 0x040D, 5, "Quadro FX 1600M" },
+ { 0x040E, 5, "Quadro FX 570" },
+ { 0x040F, 5, "Quadro FX 1700" },
+ { 0x0410, 5, "GeForce GT 330" },
+ { 0x0420, 5, "GeForce 8400 SE" },
+ { 0x0421, 5, "GeForce 8500 GT" },
+ { 0x0422, 5, "GeForce 8400 GS" },
+ { 0x0423, 5, "GeForce 8300 GS" },
+ { 0x0424, 5, "GeForce 8400 GS" },
+ { 0x0425, 5, "GeForce 8600M GS" },
+ { 0x0426, 5, "GeForce 8400M GT" },
+ { 0x0427, 5, "GeForce 8400M GS" },
+ { 0x0428, 5, "GeForce 8400M G" },
+ { 0x0429, 5, "Quadro NVS 140M" },
+ { 0x042A, 5, "Quadro NVS 130M" },
+ { 0x042B, 5, "Quadro NVS 135M" },
+ { 0x042C, 5, "GeForce 9400 GT" },
+ { 0x042D, 5, "Quadro FX 360M" },
+ { 0x042E, 5, "GeForce 9300M G" },
+ { 0x042F, 5, "Quadro NVS 290" },
{ 0x0531, 4, "GeForce 7150M / nForce 630M" },
{ 0x0533, 4, "GeForce 7000M / nForce 610M" },
{ 0x053A, 4, "GeForce 7050 PV / nForce 630a" },
{ 0x053B, 4, "GeForce 7050 PV / nForce 630a" },
{ 0x053E, 4, "GeForce 7025 / nForce 630a" },
+ { 0x05E0, 5, "GeForce GTX 295" },
+ { 0x05E1, 5, "GeForce GTX 280" },
+ { 0x05E2, 5, "GeForce GTX 260" },
+ { 0x05E3, 5, "GeForce GTX 285" },
+ { 0x05E6, 5, "GeForce GTX 275" },
+ { 0x05E7, 5, "Tesla C1060" },
+ { 0x05E7, 5, "Tesla T10 Processor" },
+ { 0x05E7, 5, "Tesla T10 Processor" },
+ { 0x05E7, 5, "Tesla M1060" },
+ { 0x05E7, 5, "Tesla M1060" },
+ { 0x05E7, 5, "Tesla M1060" },
+ { 0x05EA, 5, "GeForce GTX 260" },
+ { 0x05EB, 5, "GeForce GTX 295" },
+ { 0x05ED, 5, "Quadroplex 2200 D2" },
+ { 0x05F8, 5, "Quadroplex 2200 S4" },
+ { 0x05F9, 5, "Quadro CX" },
+ { 0x05FD, 5, "Quadro FX 5800" },
+ { 0x05FE, 5, "Quadro FX 4800" },
+ { 0x05FF, 5, "Quadro FX 3800" },
+ { 0x0600, 5, "GeForce 8800 GTS 512" },
+ { 0x0601, 5, "GeForce 9800 GT" },
+ { 0x0602, 5, "GeForce 8800 GT" },
+ { 0x0603, 5, "GeForce GT 230" },
+ { 0x0604, 5, "GeForce 9800 GX2" },
+ { 0x0605, 5, "GeForce 9800 GT" },
+ { 0x0606, 5, "GeForce 8800 GS" },
+ { 0x0607, 5, "GeForce GTS 240" },
+ { 0x0608, 5, "GeForce 9800M GTX" },
+ { 0x0609, 5, "GeForce 8800M GTS" },
+ { 0x0609, 5, "GeForce 8800 GS" },
+ { 0x060A, 5, "GeForce GTX 280M" },
+ { 0x060B, 5, "GeForce 9800M GT" },
+ { 0x060C, 5, "GeForce 8800M GTX" },
+ { 0x060D, 5, "GeForce 8800 GS" },
+ { 0x060F, 5, "GeForce GTX 285M" },
+ { 0x0610, 5, "GeForce 9600 GSO" },
+ { 0x0611, 5, "GeForce 8800 GT" },
+ { 0x0612, 5, "GeForce 9800 GTX/9800 GTX+" },
+ { 0x0613, 5, "GeForce 9800 GTX+" },
+ { 0x0614, 5, "GeForce 9800 GT" },
+ { 0x0615, 5, "GeForce GTS 250" },
+ { 0x0617, 5, "GeForce 9800M GTX" },
+ { 0x0618, 5, "GeForce GTX 260M" },
+ { 0x0619, 5, "Quadro FX 4700 X2" },
+ { 0x061A, 5, "Quadro FX 3700" },
+ { 0x061B, 5, "Quadro VX 200" },
+ { 0x061C, 5, "Quadro FX 3600M" },
+ { 0x061D, 5, "Quadro FX 2800M" },
+ { 0x061E, 5, "Quadro FX 3700M" },
+ { 0x061F, 5, "Quadro FX 3800M" },
+ { 0x0621, 5, "GeForce GT 230" },
+ { 0x0622, 5, "GeForce 9600 GT" },
+ { 0x0623, 5, "GeForce 9600 GS" },
+ { 0x0625, 5, "GeForce 9600 GSO 512" },
+ { 0x0626, 5, "GeForce GT 130" },
+ { 0x0627, 5, "GeForce GT 140" },
+ { 0x0628, 5, "GeForce 9800M GTS" },
+ { 0x062A, 5, "GeForce 9700M GTS" },
+ { 0x062B, 5, "GeForce 9800M GS" },
+ { 0x062C, 5, "GeForce 9800M GTS" },
+ { 0x062D, 5, "GeForce 9600 GT" },
+ { 0x062E, 5, "GeForce 9600 GT" },
+ { 0x062E, 5, "GeForce GT 130" },
+ { 0x0630, 5, "GeForce 9700 S" },
+ { 0x0631, 5, "GeForce GTS 160M" },
+ { 0x0632, 5, "GeForce GTS 150M" },
+ { 0x0635, 5, "GeForce 9600 GSO" },
+ { 0x0637, 5, "GeForce 9600 GT" },
+ { 0x0638, 5, "Quadro FX 1800" },
+ { 0x063A, 5, "Quadro FX 2700M" },
+ { 0x0640, 5, "GeForce 9500 GT" },
+ { 0x0641, 5, "GeForce 9400 GT" },
+ { 0x0643, 5, "GeForce 9500 GT" },
+ { 0x0644, 5, "GeForce 9500 GS" },
+ { 0x0645, 5, "GeForce 9500 GS" },
+ { 0x0646, 5, "GeForce GT 120" },
+ { 0x0647, 5, "GeForce 9600M GT" },
+ { 0x0648, 5, "GeForce 9600M GS" },
+ { 0x0649, 5, "GeForce 9600M GT" },
+ { 0x0649, 5, "GeForce GT 220M" },
+ { 0x064A, 5, "GeForce 9700M GT" },
+ { 0x064B, 5, "GeForce 9500M G" },
+ { 0x064C, 5, "GeForce 9650M GT" },
+ { 0x0651, 5, "GeForce G 110M" },
+ { 0x0652, 5, "GeForce GT 130M" },
+ { 0x0652, 5, "GeForce GT 240M LE" },
+ { 0x0653, 5, "GeForce GT 120M" },
+ { 0x0654, 5, "GeForce GT 220M" },
+ { 0x0654, 5, "GeForce GT 320M" },
+ { 0x0654, 5, "GeForce GT 320M" },
+ { 0x0655, 5, "GeForce GT 120" },
+ { 0x0656, 5, "GeForce GT 120" },
+ { 0x0658, 5, "Quadro FX 380" },
+ { 0x0659, 5, "Quadro FX 580" },
+ { 0x065A, 5, "Quadro FX 1700M" },
+ { 0x065B, 5, "GeForce 9400 GT" },
+ { 0x065C, 5, "Quadro FX 770M" },
+ { 0x06E0, 5, "GeForce 9300 GE" },
+ { 0x06E1, 5, "GeForce 9300 GS" },
+ { 0x06E2, 5, "GeForce 8400" },
+ { 0x06E3, 5, "GeForce 8400 SE" },
+ { 0x06E4, 5, "GeForce 8400 GS" },
+ { 0x06E5, 5, "GeForce 9300M GS" },
+ { 0x06E6, 5, "GeForce G100" },
+ { 0x06E7, 5, "GeForce 9300 SE" },
+ { 0x06E8, 5, "GeForce 9200M GS" },
+ { 0x06E8, 5, "GeForce 9200M GE" },
+ { 0x06E9, 5, "GeForce 9300M GS" },
+ { 0x06EA, 5, "Quadro NVS 150M" },
+ { 0x06EB, 5, "Quadro NVS 160M" },
+ { 0x06EC, 5, "GeForce G 105M" },
+ { 0x06EF, 5, "GeForce G 103M" },
+ { 0x06F1, 5, "GeForce G105M" },
+ { 0x06F8, 5, "Quadro NVS 420" },
+ { 0x06F9, 5, "Quadro FX 370 LP" },
+ { 0x06F9, 5, "Quadro FX 370 Low Profile" },
+ { 0x06FA, 5, "Quadro NVS 450" },
+ { 0x06FB, 5, "Quadro FX 370M" },
+ { 0x06FD, 5, "Quadro NVS 295" },
+ { 0x06FF, 5, "HICx16 + Graphics" },
+ { 0x06FF, 5, "HICx8 + Graphics" },
{ 0x07E0, 4, "GeForce 7150 / nForce 630i" },
{ 0x07E1, 4, "GeForce 7100 / nForce 630i" },
{ 0x07E2, 4, "GeForce 7050 / nForce 630i" },
{ 0x07E3, 4, "GeForce 7050 / nForce 610i" },
- { 0x07E5, 4, "GeForce 7050 / nForce 620i" }
+ { 0x07E5, 4, "GeForce 7050 / nForce 620i" },
+ { 0x0840, 5, "GeForce 8200M" },
+ { 0x0844, 5, "GeForce 9100M G" },
+ { 0x0845, 5, "GeForce 8200M G" },
+ { 0x0846, 5, "GeForce 9200" },
+ { 0x0847, 5, "GeForce 9100" },
+ { 0x0848, 5, "GeForce 8300" },
+ { 0x0849, 5, "GeForce 8200" },
+ { 0x084A, 5, "nForce 730a" },
+ { 0x084B, 5, "GeForce 9200" },
+ { 0x084C, 5, "nForce 980a/780a SLI" },
+ { 0x084D, 5, "nForce 750a SLI" },
+ { 0x084F, 5, "GeForce 8100 / nForce 720a" },
+ { 0x0860, 5, "GeForce 9400" },
+ { 0x0861, 5, "GeForce 9400" },
+ { 0x0862, 5, "GeForce 9400M G" },
+ { 0x0863, 5, "GeForce 9400M" },
+ { 0x0864, 5, "GeForce 9300" },
+ { 0x0865, 5, "ION" },
+ { 0x0866, 5, "GeForce 9400M G" },
+ { 0x0866, 5, "GeForce 9400M" },
+ { 0x0867, 5, "GeForce 9400" },
+ { 0x0868, 5, "nForce 760i SLI" },
+ { 0x0869, 5, "GeForce 9400" },
+ { 0x086A, 5, "GeForce 9400" },
+ { 0x086C, 5, "GeForce 9300 / nForce 730i" },
+ { 0x086D, 5, "GeForce 9200" },
+ { 0x086E, 5, "GeForce 9100M G" },
+ { 0x086F, 5, "GeForce 8200M G" },
+ { 0x0870, 5, "GeForce 9400M" },
+ { 0x0871, 5, "GeForce 9200" },
+ { 0x0872, 5, "GeForce G102M" },
+ { 0x0872, 5, "GeForce G205M" },
+ { 0x0873, 5, "GeForce G102M" },
+ { 0x0873, 5, "GeForce G205M" },
+ { 0x0874, 5, "ION" },
+ { 0x0876, 5, "ION" },
+ { 0x087A, 5, "GeForce 9400" },
+ { 0x087D, 5, "ION" },
+ { 0x087E, 5, "ION LE" },
+ { 0x087F, 5, "ION LE" },
+ { 0x08A0, 5, "GeForce 320M" },
+ { 0x08A2, 5, "GeForce 320M" },
+ { 0x08A3, 5, "GeForce 320M" },
+ { 0x08A4, 5, "GeForce 320M" },
+ { 0x08A5, 5, "GeForce 320M" },
+ { 0x0A20, 5, "GeForce GT 220" },
+ { 0x0A22, 5, "GeForce 315" },
+ { 0x0A23, 5, "GeForce 210" },
+ { 0x0A26, 5, "GeForce 405" },
+ { 0x0A27, 5, "GeForce 405" },
+ { 0x0A28, 5, "GeForce GT 230M" },
+ { 0x0A29, 5, "GeForce GT 330M" },
+ { 0x0A2A, 5, "GeForce GT 230M" },
+ { 0x0A2B, 5, "GeForce GT 330M" },
+ { 0x0A2C, 5, "NVS 5100M" },
+ { 0x0A2D, 5, "GeForce GT 320M" },
+ { 0x0A32, 5, "GeForce GT 415" },
+ { 0x0A34, 5, "GeForce GT 240M" },
+ { 0x0A35, 5, "GeForce GT 325M" },
+ { 0x0A38, 5, "Quadro 400" },
+ { 0x0A3C, 5, "Quadro FX 880M" },
+ { 0x0A60, 5, "GeForce G210" },
+ { 0x0A62, 5, "GeForce 205" },
+ { 0x0A63, 5, "GeForce 310" },
+ { 0x0A64, 5, "Second Generation ION" },
+ { 0x0A65, 5, "GeForce 210" },
+ { 0x0A66, 5, "GeForce 310" },
+ { 0x0A67, 5, "GeForce 315" },
+ { 0x0A68, 5, "GeForce G105M" },
+ { 0x0A69, 5, "GeForce G105M" },
+ { 0x0A6A, 5, "NVS 2100M" },
+ { 0x0A6C, 5, "NVS 3100M" },
+ { 0x0A6E, 5, "GeForce 305M" },
+ { 0x0A6E, 5, "Second Generation ION" },
+ { 0x0A6F, 5, "Second Generation ION" },
+ { 0x0A70, 5, "GeForce 310M" },
+ { 0x0A70, 5, "Second Generation ION" },
+ { 0x0A70, 5, "Second Generation ION" },
+ { 0x0A71, 5, "GeForce 305M" },
+ { 0x0A72, 5, "GeForce 310M" },
+ { 0x0A73, 5, "GeForce 305M" },
+ { 0x0A73, 5, "Second Generation ION" },
+ { 0x0A73, 5, "Second Generation ION" },
+ { 0x0A74, 5, "GeForce G210M" },
+ { 0x0A74, 5, "GeForce G210" },
+ { 0x0A75, 5, "GeForce 310M" },
+ { 0x0A75, 5, "Second Generation ION" },
+ { 0x0A76, 5, "Second Generation ION" },
+ { 0x0A78, 5, "Quadro FX 380 LP" },
+ { 0x0A7A, 5, "GeForce 315M" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405M" },
+ { 0x0A7A, 5, "GeForce 405M" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7A, 5, "GeForce 405" },
+ { 0x0A7C, 5, "Quadro FX 380M" },
+ { 0x0CA0, 5, "GeForce GT 330" },
+ { 0x0CA2, 5, "GeForce GT 320" },
+ { 0x0CA3, 5, "GeForce GT 240" },
+ { 0x0CA4, 5, "GeForce GT 340" },
+ { 0x0CA5, 5, "GeForce GT 220" },
+ { 0x0CA7, 5, "GeForce GT 330" },
+ { 0x0CA8, 5, "GeForce GTS 260M" },
+ { 0x0CA9, 5, "GeForce GTS 250M" },
+ { 0x0CAC, 5, "GeForce GT 220" },
+ { 0x0CAF, 5, "GeForce GT 335M" },
+ { 0x0CB0, 5, "GeForce GTS 350M" },
+ { 0x0CB1, 5, "GeForce GTS 360M" },
+ { 0x0CBC, 5, "Quadro FX 1800M" },
+ { 0x10C0, 5, "GeForce 9300 GS" },
+ { 0x10C3, 5, "GeForce 8400GS" },
+ { 0x10C5, 5, "GeForce 405" },
+ { 0x10D8, 5, "NVS 300" }
};
#endif /* __NV_LEGACY_H */
diff --git a/nvidia-installer.c b/nvidia-installer.c
index db336b0..2a45222 100644
--- a/nvidia-installer.c
+++ b/nvidia-installer.c
@@ -131,7 +131,6 @@ static Options *load_default_options(void)
/* statically initialized strings */
op->proc_mount_point = DEFAULT_PROC_MOUNT_POINT;
- op->log_file_name = DEFAULT_LOG_FILE_NAME;
op->ftp_site = DEFAULT_FTP_SITE;
op->tmpdir = get_tmpdir(op);
@@ -498,7 +497,18 @@ static void parse_commandline(int argc, char *argv[], Options *op)
if (!op->installer_prefix) {
op->installer_prefix = op->utility_prefix;
}
-
+
+ /*
+ * Set the default log file path. This is deferred until after the
+ * command line has been parsed so that the installer has a chance
+ * to determine whether it should be run in uninstall mode.
+ */
+
+ if (!op->log_file_name) {
+ op->log_file_name = op->uninstall ? DEFAULT_UNINSTALL_LOG_FILE_NAME :
+ DEFAULT_LOG_FILE_NAME;
+ }
+
return;
fail:
diff --git a/nvidia-installer.h b/nvidia-installer.h
index e947c87..fdb1ddf 100644
--- a/nvidia-installer.h
+++ b/nvidia-installer.h
@@ -497,6 +497,7 @@ typedef struct __package {
#define LICENSE_FILE "LICENSE"
#define DEFAULT_LOG_FILE_NAME "/var/log/nvidia-installer.log"
+#define DEFAULT_UNINSTALL_LOG_FILE_NAME "/var/log/nvidia-uninstall.log"
#define NUM_TIMES_QUESTIONS_ASKED 3
diff --git a/version.mk b/version.mk
index a7b8a27..043e890 100644
--- a/version.mk
+++ b/version.mk
@@ -1 +1 @@
-NVIDIA_VERSION = 340.24
+NVIDIA_VERSION = 343.13