diff options
author | Chris Gianelloni <wolf31o2@gentoo.org> | 2008-04-08 02:04:58 +0000 |
---|---|---|
committer | Chris Gianelloni <wolf31o2@gentoo.org> | 2008-04-08 02:04:58 +0000 |
commit | 9a5ec3051d4dc7bdd8b7828aa4762168774a4718 (patch) | |
tree | 9d0704e3ebbb45e410277a66f04534d443913bcb | |
parent | Commenting out fast probe patch for testing. (diff) | |
download | wolf31o2-9a5ec3051d4dc7bdd8b7828aa4762168774a4718.tar.gz wolf31o2-9a5ec3051d4dc7bdd8b7828aa4762168774a4718.tar.bz2 wolf31o2-9a5ec3051d4dc7bdd8b7828aa4762168774a4718.zip |
Updated patches for testing.
svn path=/; revision=166
-rw-r--r-- | sys-apps/hwsetup/Manifest | 12 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-3-dyn_blacklist.patch (renamed from sys-apps/hwsetup/files/hwsetup-1.2-dyn_blacklist.patch) | 7 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-3-fastprobe.patch (renamed from sys-apps/hwsetup/files/hwsetup-1.2-fastprobe.patch) | 0 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-3-gentoo.patch (renamed from sys-apps/hwsetup/files/hwsetup-1.2-gentoo.patch) | 0 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-7-dyn_blacklist.patch | 63 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-7-gentoo.patch | 912 | ||||
-rw-r--r-- | sys-apps/hwsetup/hwsetup-1.2-r1.ebuild | 6 | ||||
-rw-r--r-- | sys-apps/hwsetup/hwsetup-1.2.ebuild | 6 |
8 files changed, 988 insertions, 18 deletions
diff --git a/sys-apps/hwsetup/Manifest b/sys-apps/hwsetup/Manifest index 3b9c1b3..07351d9 100644 --- a/sys-apps/hwsetup/Manifest +++ b/sys-apps/hwsetup/Manifest @@ -1,9 +1,11 @@ -AUX hwsetup-1.2-dyn_blacklist.patch 1972 RMD160 d72fec23a306e71fbd9402b043bf2ac88413b353 SHA1 2ccdeb5f0f15c68821434a1e2b081dce229cdf70 SHA256 8fd9a2d691fd4b820ac12535c6fa5a1ba2ccbbc3e9025871ecd054bec454744b -AUX hwsetup-1.2-fastprobe.patch 2817 RMD160 5cadca96d654739d61db18287bf2a71f4d7a00ca SHA1 9d05f2542f4fc9b8ae4ace559bec8a9720ea77b5 SHA256 9a16e4ddaada2bc115a48a6d60b5cac72d49f33c7eecf245f6337df627a4a0d0 -AUX hwsetup-1.2-gentoo.patch 1430 RMD160 fae21df5ef10085fe6336c483b5b2c2145f1f787 SHA1 b17b2ae05a819c9be68145f8ba5054dddf276a6d SHA256 1d1b6b3199b4a395febe7a68fc85a59c090ab99918f6a5e02739210e7c182e83 +AUX 1.2-3-dyn_blacklist.patch 1625 RMD160 bba78724a2a9d89309f8fd2a50d8d2525cc818e2 SHA1 b94f2cb866e50b7f6d855e2aa512421a577f6f41 SHA256 87a3cf5452b96f069832b18d4fd7dfc0cac1a073f954937a0118e935cb9ad472 +AUX 1.2-3-fastprobe.patch 2817 RMD160 5cadca96d654739d61db18287bf2a71f4d7a00ca SHA1 9d05f2542f4fc9b8ae4ace559bec8a9720ea77b5 SHA256 9a16e4ddaada2bc115a48a6d60b5cac72d49f33c7eecf245f6337df627a4a0d0 +AUX 1.2-3-gentoo.patch 1430 RMD160 fae21df5ef10085fe6336c483b5b2c2145f1f787 SHA1 b17b2ae05a819c9be68145f8ba5054dddf276a6d SHA256 1d1b6b3199b4a395febe7a68fc85a59c090ab99918f6a5e02739210e7c182e83 +AUX 1.2-7-dyn_blacklist.patch 1996 RMD160 e299ee153e13f9a80d7a28209cf62268dfb9e8bd SHA1 192ea0961e02a1a84b6efc98a02b360d859d4ca1 SHA256 625c60827eea5f17b5d833276cf7924223e6ab1fa681f8518c4e8e1070465339 +AUX 1.2-7-gentoo.patch 31769 RMD160 49405be15eedfff89d2af2b070b5a7404c4c70fb SHA1 aa287eb653f5c894461686a68ad19f8192de2ce1 SHA256 48bebeb33d361d34b5ef9183d6850c0f8533931b7657ce0eb2d94189e7026760 DIST hwsetup_1.2-3.tar.gz 10828 RMD160 d3ce42ac74e5b0ccb9ae73fc0092f172b83a653a SHA1 101b42ee5016e250d69dbbfec7cd65e9d499eacd SHA256 faf346f5f342c0ab26631e31440632f6009ff206feafd1667a488e2f0ba4bb37 DIST hwsetup_1.2-7.tar.gz 10706 RMD160 7895b32c81254b2ca1575ab12dcc6fa39d011e17 SHA1 c91cb22c07755ecbfce8e9e6826e8e2580f103f8 SHA256 aa72b37ce306b5191cabd31eb5f19ab2a5e635697a263c6735d10c7bf99f9589 -EBUILD hwsetup-1.2-r1.ebuild 1718 RMD160 a93f70539911ee8f07fdc26f12729404d24d65a5 SHA1 1ce21b4a6018af3fa8c2bba6c6d2abea021d3774 SHA256 535d504ad882548a32f8869d28c7471fa65a4deb79ccd358214fb46f9e9ccf79 -EBUILD hwsetup-1.2.ebuild 1709 RMD160 45ec034ad8dda1ee17dbe4eca77a1c35a0f664bd SHA1 c8e20e55111d2a470a11637e562bfebf0615baf2 SHA256 c4b7f154cf0361bf34e5b2614a76e084031574abbf6b7e8dd43e072d90671954 +EBUILD hwsetup-1.2-r1.ebuild 1727 RMD160 115b3598de83bb68c208903fb06f0ebcad36eee0 SHA1 3b8e5747b6908d7f1bfa9a65d6627e0ca3480af6 SHA256 64aa9018379e4e91b3929484c3290c2a2e5e9e891ec89ecc6e2478adad9857f3 +EBUILD hwsetup-1.2.ebuild 1721 RMD160 f2627934a90ea0891e065e27ad013f18f37859e7 SHA1 db8bbe4bf125aca8be90ddac2916a2b5ed76129e SHA256 b4f859d778d2e7d3937c4ebdd2c7c61ac30033414f3d9b2e0ec5578c33932409 MISC ChangeLog 8645 RMD160 931cc933e4d80d6c47f7bcd12287d9148852740a SHA1 bd0d0d998907893ae06df4faa34bb4ccf9b63835 SHA256 2e048ff130e3350accd662f6e4bc830f841457a0630c072175793a9bf6e7447e MISC metadata.xml 159 RMD160 8db5ed254a6b9baf8f53368da9e71c5532a46073 SHA1 1e72098aafb1fa729eba6fc8357c7e732eb79dee SHA256 b6e17484225400d76c65d178bf5a10dc0a8da7f345993c2acc63d1093a77c90d diff --git a/sys-apps/hwsetup/files/hwsetup-1.2-dyn_blacklist.patch b/sys-apps/hwsetup/files/1.2-3-dyn_blacklist.patch index 7348993..bc50cd3 100644 --- a/sys-apps/hwsetup/files/hwsetup-1.2-dyn_blacklist.patch +++ b/sys-apps/hwsetup/files/1.2-3-dyn_blacklist.patch @@ -2,13 +2,6 @@ diff -urN hwsetup-1.2.orig/hwsetup.c hwsetup-1.2/hwsetup.c --- hwsetup-1.2.orig/hwsetup.c 2005-05-28 18:11:51.000000000 -0400 +++ hwsetup-1.2/hwsetup.c 2005-11-17 14:08:03.000000000 -0500 @@ -43,12 +43,39 @@ - /* Do not, under any circumstances, load these modules automatically, */ - /* even if in pcitable. (libkudzu may ignore this, and the KNOPPIX */ - /* autoconfig scripts may probe them, too) */ --char *blacklist[] = -+char blacklist[200][200] = - { "apm","agpgart","yenta_socket","i82092","i82365","tcic", - "pcmcia_core","ds","ohci1394","hisax", /* Winmodems, unusable, can block sound slot */ "snd-atiixp-modem", "snd-intel8x0m","snd-via82xx-modem" }; diff --git a/sys-apps/hwsetup/files/hwsetup-1.2-fastprobe.patch b/sys-apps/hwsetup/files/1.2-3-fastprobe.patch index 0122a6a..0122a6a 100644 --- a/sys-apps/hwsetup/files/hwsetup-1.2-fastprobe.patch +++ b/sys-apps/hwsetup/files/1.2-3-fastprobe.patch diff --git a/sys-apps/hwsetup/files/hwsetup-1.2-gentoo.patch b/sys-apps/hwsetup/files/1.2-3-gentoo.patch index 2cd8597..2cd8597 100644 --- a/sys-apps/hwsetup/files/hwsetup-1.2-gentoo.patch +++ b/sys-apps/hwsetup/files/1.2-3-gentoo.patch diff --git a/sys-apps/hwsetup/files/1.2-7-dyn_blacklist.patch b/sys-apps/hwsetup/files/1.2-7-dyn_blacklist.patch new file mode 100644 index 0000000..22092d2 --- /dev/null +++ b/sys-apps/hwsetup/files/1.2-7-dyn_blacklist.patch @@ -0,0 +1,63 @@ +diff -urN hwsetup-1.2.orig/hwsetup.c hwsetup-1.2/hwsetup.c +--- hwsetup-1.2.orig/hwsetup.c 2008-04-07 18:32:34.000000000 -0700 ++++ hwsetup-1.2/hwsetup.c 2008-04-07 18:49:20.000000000 -0700 +@@ -51,13 +51,40 @@ + /* Do not, under any circumstances, load these modules automatically, */ + /* even if in pcitable. (libkudzu may ignore this, and the KNOPPIX */ + /* autoconfig scripts may probe them, too) */ +-char *blacklist[] = ++char *blacklist[200][200] = + { "apm","agpgart","yenta_socket","i82092","i82365","tcic", + "pcmcia_core","ds","ohci1394","hisax", "hisax_fcpcipnp", + "hisax_isac","hisax_st5481", + /* Winmodems, unusable, can block sound slot */ + "snd-atiixp-modem", "snd-intel8x0m","snd-via82xx-modem" + }; ++ ++int blacklistsize = 13; ++void gen_blacklist(){ ++ int n = 13; ++ int size = 0; ++ char *comment; ++ char module[1024]; ++ FILE *stream; ++ ++ if((stream = fopen ("/usr/share/hwdata/blacklist", "r")) != (FILE *)0) { ++ while((fgets(module, 1023, stream)) != (char *)0 ) { ++ ++ comment = strchr(module, '#'); ++ if (comment != 0) *comment = '\0'; ++ comment = strchr(module, '\n'); ++ if (comment != 0) *comment = '\0'; ++ size = strlen(module); ++ if (size < 2) continue; ++ strcat (module , " \0"); ++ strcpy(blacklist[n] , module); ++ n++; ++ if ( n == 200 ) break; ++ //printf(module); ++ } ++ blacklistsize = n; ++ } ++} + #endif + + /* If a conflicting module in a row is already loaded, the new module will not be probed anymore */ +@@ -547,7 +574,7 @@ + char *cc; + if((m==NULL)||(!strcmp("unknown",m))||(!strcmp("ignore",m))|| check_loaded(m)) return 0; + #ifdef BLACKLIST +- for(i=0;i<(sizeof(blacklist)/sizeof(char*));i++) ++ for(i=0;i<blacklistsize;i++) + { + if(!modcmp(blacklist[i],m)) + { +@@ -781,5 +808,8 @@ + /* Allow SIGTERM, SIGINT: rmmod depends on this. */ + signal(SIGTERM,SIG_DFL); signal(SIGINT,SIG_DFL); + signal(SIGALRM,alarm_handler); alarm(MAX_TIME); ++#ifdef BLACKLIST ++ gen_blacklist(); ++#endif + return hw_setup(dc,verbose,probeonly,skip); + } diff --git a/sys-apps/hwsetup/files/1.2-7-gentoo.patch b/sys-apps/hwsetup/files/1.2-7-gentoo.patch new file mode 100644 index 0000000..5d85e99 --- /dev/null +++ b/sys-apps/hwsetup/files/1.2-7-gentoo.patch @@ -0,0 +1,912 @@ +diff -urN hwsetup-1.2.dyn_blacklist/hwsetup.c hwsetup-1.2/hwsetup.c +--- hwsetup-1.2.dyn_blacklist/hwsetup.c 2008-04-07 18:51:24.000000000 -0700 ++++ hwsetup-1.2/hwsetup.c 2008-04-07 19:00:42.000000000 -0700 +@@ -244,14 +244,15 @@ + + int syntax(char *option) + { +- printf(VERSION); ++ puts(VERSION); + if(option) fprintf(stderr,"hwsetup: Unknown option '%s'\n\n",option); +- printf("Usage: hwsetup\n" +- " -v be verbose\n" +- " -p print rotating prompt\n" +- " -a ignore audio devices\n" +- " -s ignore scsi controllers\n" +- " -n probe only, don't configure anything.\n"); ++ puts("Usage: hwsetup\n" ++ "\t\t-v\tbe verbose\n" ++ "\t\t-p\tprint rotating prompt\n" ++ "\t\t-a\tignore audio devices\n" ++ "\t\t-s\tignore scsi controllers\n" ++ "\t\t-n\tprobe only, don't configure anything.\n" ++ "\t\t-f\trun a fast probe."); + return option?1:0; + } + +@@ -387,7 +388,7 @@ + sprintf(fullpath,"%.90s%.32s",xpath,server[i]); + if(!exists(fullpath)) continue; + strncpy(xi.xserver,server[i],sizeof(xi.xserver)); +- } ++ } + } + } + if((xpos=strstr(d->driver,xorg))!=NULL) /* Check for Xorg */ +@@ -560,7 +561,7 @@ + { + signal(SIGALRM,SIG_IGN); + fprintf(stderr,"\nWARNING: Autodetection seems to hang,\n" +- "please check your computers BIOS settings.\n"); ++ "please check your computer's BIOS settings.\n"); + fflush(stderr); + if(wpid) { kill(wpid,SIGTERM); usleep(2500000); kill(wpid,SIGKILL); wpid=0; } + exit(1); /* exit program */ +@@ -652,7 +653,7 @@ + int writeconfig(char *name,struct device *d,int verbose) + { + FILE *f,*k; +- const char *kconfig="/etc/sysconfig/knoppix"; ++ const char *kconfig="/etc/sysconfig/gentoo"; + char *desc; + unlink(name); + if((f=fopen(name,"w"))==NULL) +@@ -733,12 +734,13 @@ + return 0; + } + +-int hw_setup(enum deviceClass dc, int verbose, int probeonly, int skip) ++int hw_setup(enum deviceClass dc, int verbose, int probeonly, int skip, int fastprobe) + { + int i,mouse=0,cdrom=0,modem=0,scanner=0; ++ int probeopt=fastprobe?PROBE_SAFE:PROBE_ALL; + struct device **currentDevs, *d, *serialmouse=NULL, *usbmouse=NULL; + if(verbose&VERBOSE_PROMPT) wpid=startwheel(); +- currentDevs=probeDevices(dc,BUS_UNSPEC,PROBE_ALL); ++ currentDevs=probeDevices(dc,BUS_UNSPEC,probeopt); + if(verbose&VERBOSE_PROMPT&&wpid>0) { kill(wpid,SIGTERM); wpid=0; usleep(160000); write(2,"\033[0m Done.\n",11); } + if(currentDevs==NULL) return -1; + check_proc_modules(); /* Get currently loaded module list */ +@@ -794,7 +796,7 @@ + + int main(int argc, char **argv) + { +- int i, verbose=0, probeonly=0, skip=0; ++ int i, verbose=0, probeonly=0, skip=0, fast=0; + enum deviceClass dc=CLASS_UNSPEC; + for(i=1;i<argc;i++) + { +@@ -803,6 +805,7 @@ + else if(!strcasecmp(argv[i],"-a")) skip|=SKIP_AUDIO; + else if(!strcasecmp(argv[i],"-s")) skip|=SKIP_SCSI; + else if(!strcasecmp(argv[i],"-n")) probeonly=1; ++ else if(!strcasecmp(argv[i],"-f")) fast=1; + else return syntax(argv[i]); + } + /* Allow SIGTERM, SIGINT: rmmod depends on this. */ +@@ -811,5 +814,5 @@ + #ifdef BLACKLIST + gen_blacklist(); + #endif +- return hw_setup(dc,verbose,probeonly,skip); ++ return hw_setup(dc,verbose,probeonly,skip,fast); + } +diff -urN hwsetup-1.2.dyn_blacklist/hwsetup.c.orig hwsetup-1.2/hwsetup.c.orig +--- hwsetup-1.2.dyn_blacklist/hwsetup.c.orig 1969-12-31 16:00:00.000000000 -0800 ++++ hwsetup-1.2/hwsetup.c.orig 2008-04-07 18:49:20.000000000 -0700 +@@ -0,0 +1,815 @@ ++/****************************************************************************\ ++* HWSETUP - non-interactive hardware detection and configuration * ++* loads modules, generates /dev links, no isapnp autoconfiguration (yet) * ++* needs kudzu-devel (ver. 0.23 and up) * ++* Author: Klaus Knopper <knopper@knopper.net> * ++\****************************************************************************/ ++ ++/* Needed for strcasestr */ ++#ifndef _GNU_SOURCE ++#define _GNU_SOURCE 1 ++#endif ++ ++#include <stdio.h> ++#include <string.h> ++#include <ctype.h> ++#include <unistd.h> ++#include <stdlib.h> ++#include <errno.h> ++#include <signal.h> ++#include <time.h> ++#include <sys/types.h> ++#include <sys/wait.h> ++#include <sys/stat.h> ++#include <pci/pci.h> ++#undef _i_wanna_build_this_crap_ ++/* #define _i_wanna_build_this_crap_ 1 */ /* Necessary for ISAPNP */ ++#include "kudzu.h" ++#if defined(_i_wanna_build_this_crap_) ++#include "isapnp.h" ++#endif ++ ++#define VERSION "HWSETUP 1.2, an automatic hardware configuration tool\n" \ ++ "(C) 2006 Klaus Knopper <knoppix@knopper.net>\n\n" ++ ++/* Note: These are for Xfree 4, not Xorg. */ ++#define CARDSDB "/usr/share/hwdata/Cards" ++#define XPATH "/usr/X11R6/bin/" ++#define XMODPATH "/usr/X11R6/lib/modules/drivers/" ++ ++#define VERBOSE_PRINT 1 ++#define VERBOSE_PROMPT 2 ++ ++#define SKIP_AUDIO 1 ++#define SKIP_SCSI 2 ++ ++#define MAX_TIME 180 /* Maximum of seconds to run, total */ ++#define MAX_TIME_MODULE 4 /* Maximum time in seconds to wait until a module */ ++ /* is successfully loaded before continuing */ ++ ++#ifdef BLACKLIST ++/* Do not, under any circumstances, load these modules automatically, */ ++/* even if in pcitable. (libkudzu may ignore this, and the KNOPPIX */ ++/* autoconfig scripts may probe them, too) */ ++char *blacklist[200][200] = ++{ "apm","agpgart","yenta_socket","i82092","i82365","tcic", ++ "pcmcia_core","ds","ohci1394","hisax", "hisax_fcpcipnp", ++ "hisax_isac","hisax_st5481", ++ /* Winmodems, unusable, can block sound slot */ ++ "snd-atiixp-modem", "snd-intel8x0m","snd-via82xx-modem" ++}; ++ ++int blacklistsize = 13; ++void gen_blacklist(){ ++ int n = 13; ++ int size = 0; ++ char *comment; ++ char module[1024]; ++ FILE *stream; ++ ++ if((stream = fopen ("/usr/share/hwdata/blacklist", "r")) != (FILE *)0) { ++ while((fgets(module, 1023, stream)) != (char *)0 ) { ++ ++ comment = strchr(module, '#'); ++ if (comment != 0) *comment = '\0'; ++ comment = strchr(module, '\n'); ++ if (comment != 0) *comment = '\0'; ++ size = strlen(module); ++ if (size < 2) continue; ++ strcat (module , " \0"); ++ strcpy(blacklist[n] , module); ++ n++; ++ if ( n == 200 ) break; ++ //printf(module); ++ } ++ blacklistsize = n; ++ } ++} ++#endif ++ ++/* If a conflicting module in a row is already loaded, the new module will not be probed anymore */ ++#define CONFLICT_SET 2 ++struct conflict { char *name; int loaded; } conflicts [][CONFLICT_SET] = ++{ ++ {{ "ad1848",0}, {"snd-nm256",0}}, ++ {{ "ali5455",0}, {"intel8x0",0}}, ++ {{ "cmpci",0}, {"snd-cmipci",0}}, ++ {{ "cs46xx",0}, {"snd-cs46xx",0}}, ++ {{ "cs4281",0}, {"snd-cs4281",0}}, ++ {{ "emu10k1",0}, {"snd-emu10k1",0}}, ++ {{ "es1370",0}, {"snd-ens1370",0}}, ++ {{ "es1371",0}, {"snd-ens1371",0}}, ++ {{ "esssolo1",0}, {"snd-es1938",0}}, ++ {{ "forte",0}, {"snd-fm801",0}}, ++ {{ "i810_audio",0}, {"snd-intel8x0",0}}, ++ {{ "maestro",0}, {"snd-es1960",0}}, ++ {{ "maestro3",0}, {"snd-maestro3",0}}, ++ {{ "nm256_audio",0}, {"snd-nm256",0}}, ++ {{ "rme96xx",0}, {"snd-rme9652",0}}, ++ {{ "sonicvibes",0}, {"snd-sonicvibes",0}}, ++ {{ "trident",0}, {"snd-trident",0}}, ++ {{ "via82cxxx_audio",0}, {"snd-via82xx",0}}, ++ {{ "ymfpci",0}, {"snd-ymfpci",0}}, ++ {{ "sk98lin",0}, {"skge",0}} ++}; ++ ++struct loaded_module { char *name; struct loaded_module *next; } *loaded_modules = NULL; ++ ++/* compare module names, case insensitive and with -/_ */ ++int modcmp(char *m1, char *m2) ++{ ++ if(!m1 || !m2) return 1; ++ for(;;) ++ { ++ int c1 = tolower(*m1); ++ int c2 = tolower(*m2); ++ if(c1 == '_') c1 = '-'; ++ if(c2 == '_') c2 = '-'; ++ if(c1 != c2) return 1; ++ if(!c1 || !c2) break; ++ m1++; m2++; ++ } ++ return 0; ++} ++ ++/* returns true if module already loaded */ ++int check_loaded(char *name) ++{ ++ struct loaded_module *curr = loaded_modules; ++ while(curr) ++ { ++ if(name && curr->name && !modcmp(name, curr->name)) return 1; ++ curr = curr->next; ++ } ++ return 0; ++} ++ ++/* Returns name of conflicting module, or NULL if no conflict */ ++char *check_conflict(char *name) ++{ ++ int i; ++ if(!name) return 0; ++ for(i=0; i<(sizeof(conflicts)/sizeof(struct conflict)/CONFLICT_SET); i++) ++ { ++ int j; ++ for(j=0; j<CONFLICT_SET; j++) ++ { ++ if(!modcmp(name,conflicts[i][j].name) && ++ conflicts[i][!j].loaded) return conflicts[i][!j].name; ++ } ++ } ++ return NULL; ++} ++ ++void set_conflict(char *name) ++{ ++ int i; ++ if(!name) return; ++ for(i=0; i<(sizeof(conflicts)/sizeof(struct conflict)/CONFLICT_SET); i++) ++ { ++ int j; ++ for(j=0; j<CONFLICT_SET; j++) ++ { ++ if(!modcmp(name,conflicts[i][j].name)) conflicts[i][j].loaded=1; ++ } ++ } ++} ++ ++void check_proc_modules(void) ++{ ++ struct loaded_module *curr = NULL, *new = NULL; ++ FILE *f = fopen("/proc/modules", "r"); ++ if(!f) return; ++ for(;;) ++ { ++ char buffer[1024], *name; ++ memset(buffer,0,sizeof(buffer)); ++ if(!fgets(buffer,1024, f) || ferror(f)) break; ++ new = (struct loaded_module *) malloc(sizeof(struct loaded_module)); ++ if(!new) { fclose(f); return; } ++ memset(new,0,sizeof(struct loaded_module)); ++ if(!loaded_modules) { loaded_modules = curr = new; } ++ else ++ { ++ curr->next = new; ++ curr = curr->next; ++ } ++ name = strtok(buffer," "); ++ if(!name) continue; ++ curr->name = strdup(name); ++ set_conflict(name); ++ } ++ fclose(f); ++} ++ ++char *get_description(struct device *d) ++{ ++ /* pci.ids lookup using the pci library, i.e. most likely /usr/share/misc/pci.ids */ ++ static char devbuf[128]; ++ ++ memset(devbuf,0,sizeof(devbuf)); ++ if(d) ++ { ++ static struct pci_access *pacc = NULL; ++ int vendorid, deviceid; ++ switch(d->bus) ++ { ++ case BUS_PCI: vendorid=((struct pciDevice *)d)->vendorId; ++ deviceid=((struct pciDevice *)d)->deviceId; ++ break; ++ case BUS_USB: vendorid=((struct usbDevice *)d)->vendorId; ++ deviceid=((struct usbDevice *)d)->deviceId; ++ break; ++ default: return d->desc; ++ } ++ if(!pacc) ++ { ++ if(!(pacc=pci_alloc())) return d->desc; ++ pci_init(pacc); ++ } ++ if(vendorid>0 && deviceid>0 && ++ pci_lookup_name(pacc, devbuf, sizeof(devbuf), ++ PCI_LOOKUP_VENDOR | PCI_LOOKUP_DEVICE, ++ vendorid, deviceid, 0, 0)) ++ { ++ devbuf[127]=0; ++ return devbuf; ++ } ++ } ++ return d->desc; ++} ++ ++/* These need to be global, so we can kill them in case of problems */ ++pid_t wpid=0; ++ ++int syntax(char *option) ++{ ++ printf(VERSION); ++ if(option) fprintf(stderr,"hwsetup: Unknown option '%s'\n\n",option); ++ printf("Usage: hwsetup\n" ++ " -v be verbose\n" ++ " -p print rotating prompt\n" ++ " -a ignore audio devices\n" ++ " -s ignore scsi controllers\n" ++ " -n probe only, don't configure anything.\n"); ++ return option?1:0; ++} ++ ++pid_t startwheel(void) /* Feedback while detecting hardware */ ++{ ++ char v[]="Autoconfiguring devices... "; ++ char r[]="/-\\|"; ++ char *b="\b"; ++ pid_t pid; ++ if((pid=fork())>0) return pid; /* return Child PID to Master process */ ++ else if(pid==0) ++ { ++ int i,j; ++ /* Allow killing of process */ ++ signal(SIGHUP,SIG_DFL); ++ signal(SIGINT,SIG_DFL); ++ signal(SIGTERM,SIG_DFL); ++ write(2,v,sizeof(v)-1); ++ for(i=j=0;;i++,j++) ++ { ++ if(j%8==7) write(2,"\033[42;32m \033[0m",13); /* a green space */ ++ write(2,&r[i%4],1); write(2,b,1); ++ usleep(40000); ++ } ++ exit(0); /* Exit child process */ ++ } ++ return 0; ++} ++ ++int exists(char *filename) ++{ ++ struct stat s; ++ return !stat(filename,&s); ++} ++ ++struct xinfo { ++char xserver[16]; ++char xmodule[16]; ++char xdesc[128]; ++char xopts[128]; ++}; ++ ++struct xinfo *getxinfo(struct device *d) ++{ ++ const char *xfree4="XFree86", *xorg="Xorg", *xvesa4="vesa"; ++ const char *xpath=XPATH; ++ static struct xinfo xi; ++ int rescanned=0; ++ memset(&xi,0,sizeof(struct xinfo)); ++ if(d->desc) strcpy(xi.xdesc, get_description(d)); ++ if(d->driver) ++ { ++ const char *server[]={"XF86_3DLabs", "XF86_Mach64", "XF86_Mach32", ++ "XF86_Mach8", "XF86_AGX", "XF86_P9000", "XF86_S3V", "XF86_S3V", ++ "XF86_S3", "XF86_W32", "XF86_8514", "XF86_I128", "XF86_SVGA", ++ xfree4, xorg, NULL}; ++ char *xpos; ++ if(!strncasecmp(d->driver,"Card:",5)) /* RedHat Cards-DB */ ++ { /* Kudzu "Cards" format */ ++ FILE *cardsdb; ++ char xfree3server[128]; ++ memset(xfree3server,0,sizeof(xfree3server)); ++ if((cardsdb=fopen(CARDSDB,"r"))!=NULL) ++ { /* Try to find Server and Module in /usr/share/kudzu/Cards */ ++ char buffer[1024]; ++ char searchfor[128]; ++ int found=0; ++ memset(searchfor,0,sizeof(searchfor)); ++ sscanf(&d->driver[5],"%127[^\r\n]",searchfor); ++ while(!found && !feof(cardsdb) && fgets(buffer,1024,cardsdb)) ++ { ++ char sfound[128]; ++ memset(sfound,0,sizeof(sfound)); ++ if(strncasecmp(buffer,"NAME ",5) || ++ (sscanf(&buffer[5],"%127[^\r\n]",sfound)!=1) || ++ strcasecmp(sfound,searchfor)) continue; ++ while(!feof(cardsdb) && fgets(buffer,1024,cardsdb)) ++ { ++ if(buffer[0]<32) break; /* End-of-line */ ++ if(!strncasecmp(buffer,"SERVER ",7)) ++ { ++ char x[20]=""; ++ if(sscanf(&buffer[7],"%19s",x)==1) ++ { ++ char xserver[32]; ++ char fullpath[128]; ++ char *xf[2]={"","XF86_"}; ++ int i; ++ for(i=0;i<2;i++) ++ { ++ sprintf(xserver,"%s%.24s",xf[i],x); ++ sprintf(fullpath,"%.90s%.32s",xpath,xserver); ++ if(exists(fullpath)) ++ { ++ strncpy(xfree3server,xserver,sizeof(xfree3server)); ++ break; /* for */ ++ } ++ } ++ } ++ } ++ else if(!strncasecmp(buffer,"DRIVER ",7)) ++ { ++ char xmodule[32]; ++ char fullpath[128]; ++ sscanf(&buffer[7],"%31s",xmodule); ++ sprintf(fullpath,XMODPATH"%.31s_drv.o",xmodule); ++ if(exists(fullpath)) ++ { ++ strncpy(xi.xmodule,xmodule,sizeof(xi.xmodule)); ++ } ++ } ++ else if(!strncasecmp(buffer,"SEE ",4)&&rescanned<10) ++ { /* rescan Cards-DB for other server */ ++ fseek(cardsdb,0L,SEEK_SET); ++rescanned; ++ memset(searchfor,0,sizeof(searchfor)); ++ sscanf(&buffer[4],"%127[^\r\n]",searchfor); ++ break; /* Continue with outer while() */ ++ } ++ } ++ } ++ fclose(cardsdb); ++ } ++ } ++ /* Card not found in Cards database -> Try to read "Xorg(module)" from driver */ ++ if(!*xi.xserver) ++ { ++ int i; ++ for(i=0;server[i]!=NULL;i++) ++ { ++ if(strstr(d->driver,server[i])) ++ { ++ char fullpath[128]; ++ sprintf(fullpath,"%.90s%.32s",xpath,server[i]); ++ if(!exists(fullpath)) continue; ++ strncpy(xi.xserver,server[i],sizeof(xi.xserver)); ++ } ++ } ++ } ++ if((xpos=strstr(d->driver,xorg))!=NULL) /* Check for Xorg */ ++ { ++ char xm[32]=""; ++ if(sscanf(xpos,"Xorg(%30[^)])",xm)==1) strcpy(xi.xmodule,xm); ++ } ++ else if((xpos=strstr(d->driver,xfree4))!=NULL) /* Check for XFree 4 */ ++ { ++ char xm[32]=""; ++ if(sscanf(xpos,"XFree86(%30[^)])",xm)==1) strcpy(xi.xmodule,xm); ++ } ++ } /* if -> driver */ ++ /* Special options required? */ ++ if(d->desc) ++ { ++ strncpy(xi.xdesc,get_description(d),128); ++ xi.xdesc[127] = 0; /* 0-terminate (strncpy is not safe) */ ++ } ++ /* Fallback values: Guess xorg driver from pci.ids description (or vendor-string) */ ++ if(!*xi.xserver) strcpy(xi.xserver,xorg); ++ if(!*xi.xmodule) ++ { ++ if(*xi.xdesc) ++ { /* first, the most common or "easy to guess" ones */ ++ if(strcasestr(xi.xdesc,"Riva") && strcasestr(xi.xdesc,"128")) strcpy(xi.xmodule,"riva128"); ++ else if(strcasestr(xi.xdesc,"NVidia")) strcpy(xi.xmodule,"nv"); ++ else if(strcasestr(xi.xdesc,"ATI ")) ++ { ++ if(strcasestr(xi.xdesc,"R128")) strcpy(xi.xmodule,"r128"); ++ else strcpy(xi.xmodule,"ati"); /* Will autoload "radeon" */ ++ } ++ else if(strcasestr(xi.xdesc,"Trident")) strcpy(xi.xmodule,"trident"); ++ else if(strcasestr(xi.xdesc,"Rendition")) strcpy(xi.xmodule,"rendition"); ++ else if(strcasestr(xi.xdesc,"Tseng")) strcpy(xi.xmodule,"tseng"); ++ else if(strcasestr(xi.xdesc,"Intel")) ++ { ++ if(strcasestr(xi.xdesc,"128")) strcpy(xi.xmodule,"i128"); ++ else if(strcasestr(xi.xdesc,"740")) strcpy(xi.xmodule,"i740"); ++ else if(strcasestr(xi.xdesc,"810")||strcasestr(xi.xdesc,"82")||strcasestr(xi.xdesc,"830")||strcasestr(xi.xdesc,"9")) strcpy(xi.xmodule,"i810"); ++ else strcpy(xi.xmodule,xvesa4); ++ } ++ else if(strcasestr(xi.xdesc,"Matrox")) strcpy(xi.xmodule,"mga"); ++ else if(strcasestr(xi.xdesc,"Neomagic")) strcpy(xi.xmodule,"neomagic"); ++ else if(strcasestr(xi.xdesc,"VMWare")) strcpy(xi.xmodule,"vmware"); ++ else if(strcasestr(xi.xdesc,"Savage")) ++ { ++ if(strcasestr(xi.xdesc,"S3Virge")) strcpy(xi.xmodule,"s3virge"); ++ else if(strcasestr(xi.xdesc,"S3")) strcpy(xi.xmodule,"s3"); ++ else strcpy(xi.xmodule,"savage"); ++ } ++ else if(strcasestr(xi.xdesc,"Cyrix")) strcpy(xi.xmodule,"cyrix"); ++ else if(strcasestr(xi.xdesc,"NSC ")) strcpy(xi.xmodule,"nsc"); ++ else if(strcasestr(xi.xdesc,"SIS ")) ++ { ++ if(strcasestr(xi.xdesc,"USB")) strcpy(xi.xmodule,"sisusb"); ++ else strcpy(xi.xmodule,"sis"); ++ } ++ else if(strcasestr(xi.xdesc,"Cirrus")) ++ { ++ if(strcasestr(xi.xdesc,"Alpine")) strcpy(xi.xmodule,"cirrus_alpine"); ++ if(strcasestr(xi.xdesc,"Laguna")) strcpy(xi.xmodule,"cirrus_laguna"); ++ else strcpy(xi.xmodule,"cirrus"); ++ } ++ else if(strcasestr(xi.xdesc,"Newport")) strcpy(xi.xmodule,"newport"); ++ else if(strcasestr(xi.xdesc,"Siliconmotion")||strcasestr(xi.xdesc,"Silicon Motion")) strcpy(xi.xmodule,"siliconmotion"); ++ else if(strcasestr(xi.xdesc,"Chips")) strcpy(xi.xmodule,"chips"); ++ else if(strcasestr(xi.xdesc,"VIA ")) strcpy(xi.xmodule,"via"); ++ } ++ else strcpy(xi.xmodule,xvesa4); ++ } ++ if(*xi.xdesc) ++ { ++ /* Handle special cards that require special options */ ++ if(strstr(xi.xdesc,"Trident")||strstr(xi.xdesc,"TGUI") ++ ||strstr(xi.xdesc,"Cirrus")||strstr(xi.xdesc,"clgd")) ++ { ++ if(!strcmp(xi.xserver,xfree4)||!strcmp(xi.xserver,xorg)) ++ strncpy(xi.xopts,"-depth 16",sizeof(xi.xopts)-1); ++ else ++ strncpy(xi.xopts,"-bpp 16",sizeof(xi.xopts)-1); ++ } ++ else if(strstr(xi.xdesc,"Savage 4")) /* S3 Inc.|Savage 4 */ ++ { ++ if(!strcmp(xi.xserver,xfree4)||!strcmp(xi.xserver,xorg)) ++ strncpy(xi.xopts,"-depth 32",sizeof(xi.xopts)-1); ++ else ++ strncpy(xi.xopts,"-bpp 32",sizeof(xi.xopts)-1); ++ } ++ } ++ return ξ ++} ++ ++void hw_info(struct device *d) ++{ ++ enum deviceClass class=d->type; ++ enum deviceBus bus=d->bus; ++ char *unknown="UNKNOWN"; ++ char *desc; ++ /* These used to be much easier when they were still arrays... */ ++ char *classname=class==CLASS_UNSPEC?"UNSPEC": class==CLASS_OTHER?"OTHER": ++ class==CLASS_NETWORK?"NETWORK":class==CLASS_SCSI?"SCSI": ++ class==CLASS_VIDEO?"VIDEO": class==CLASS_AUDIO?"AUDIO": ++ class==CLASS_MOUSE?"MOUSE": class==CLASS_MODEM?"MODEM": ++ class==CLASS_CDROM?"CDROM": class==CLASS_TAPE?"TAPE": ++ class==CLASS_FLOPPY?"FLOPPY": class==CLASS_SCANNER?"SCANNER": ++ class==CLASS_HD?"HD": class==CLASS_RAID?"RAID": ++ class==CLASS_PRINTER?"PRINTER":class==CLASS_CAPTURE?"CAPTURE": ++ class==CLASS_USB?"USB": class==CLASS_MONITOR?"MONITOR": ++ class==CLASS_KEYBOARD?"KEYBOARD":unknown; ++ char *busname= bus==BUS_OTHER?"OTHER": bus==BUS_PCI? "PCI": ++ bus==BUS_SBUS?"SBUS": bus==BUS_PSAUX?"PSAUX": ++ bus==BUS_SERIAL?"SERIAL":bus==BUS_PARALLEL?"PARALLEL": ++ bus==BUS_SCSI?"SCSI": bus==BUS_IDE?"IDE": ++ bus==BUS_DDC?"DDC": bus==BUS_USB?"USB": ++ bus==BUS_KEYBOARD?"KEYBOARD": ++#if defined(_i_wanna_build_this_crap_) ++ bus==BUS_ISAPNP?"ISAPNP": ++#endif ++ unknown; ++ desc = get_description(d); ++ printf( ++ "---\n" ++ "class: %s\n" ++ "bus: %s\n" ++ "device: %s\n" ++ "driver: %s\n" ++ "desc: %s\n",classname, busname, d->device?d->device:"(null)",d->driver, ++ desc?desc:"(empty)"); ++} ++ ++/* rename /dev/mouse -> /dev/mouse1, /dev/mouse1 -> /dev/mouse2 recursive */ ++int checkmoveup(char *filename, int oldnum) ++{ ++ int newnum=oldnum+1; ++ char srcname[64], dstname[64]; ++ struct stat buf; ++ sprintf(srcname,(oldnum>0)?"%.32s%d":"%.32s",filename,oldnum); ++ if(stat(srcname,&buf)) return 0; /* File does not exist, OK. */ ++ sprintf(dstname,"%.32s%d",filename,newnum); ++ /* recursive if file exists, otherwise just rename it */ ++ return (!stat(dstname,&buf) && checkmoveup(filename,newnum))?errno: ++ rename(srcname,dstname); ++} ++ ++int link_dev(struct device *d, char *target, int tnum, int verbose) ++{ ++ const char devdir[]="/dev/"; ++ if(d&&d->device) ++ { ++ char devname[64], dstname[64]; ++ sprintf(devname,"%s%.32s",devdir,d->device); ++ sprintf(dstname,"%s%.32s",devdir,target); ++ if(checkmoveup(dstname, tnum)) return -1; /* Read-only FS?! */ ++ if(tnum>0) sprintf(dstname,"%s%.32s%1d",devdir,target,tnum); ++ if(verbose&VERBOSE_PRINT) printf("symlink(%.32s,%.32s)\n",devname,dstname); ++ return symlink(devname,dstname); ++ } ++ return -1; ++} ++ ++void segfault_handler(int dummy) ++{ ++ signal(SIGSEGV,SIG_IGN); ++ fprintf(stderr,"\nWARNING: Caught signal SEGV while executing modprobe.\n"); ++ fflush(stderr); ++} ++ ++void alarm_handler(int dummy) ++{ ++ signal(SIGALRM,SIG_IGN); ++ fprintf(stderr,"\nWARNING: Autodetection seems to hang,\n" ++ "please check your computers BIOS settings.\n"); ++ fflush(stderr); ++ if(wpid) { kill(wpid,SIGTERM); usleep(2500000); kill(wpid,SIGKILL); wpid=0; } ++ exit(1); /* exit program */ ++} ++ ++int load_mod(char *m,int verbose) ++{ ++ int pstatus,i; ++ time_t now; ++ pid_t mpid; ++ char *cc; ++ if((m==NULL)||(!strcmp("unknown",m))||(!strcmp("ignore",m))|| check_loaded(m)) return 0; ++#ifdef BLACKLIST ++ for(i=0;i<blacklistsize;i++) ++ { ++ if(!modcmp(blacklist[i],m)) ++ { ++ if(verbose&VERBOSE_PRINT) printf("not loading module %.32s (is in blacklist)\n",m); ++ return 0; ++ } ++ } ++#endif ++ if((cc=check_conflict(m))!=NULL) ++ { ++ if(verbose&VERBOSE_PRINT) printf("not loading module %.32s (conflicts with loaded module '%.32s' for same device)\n", m, cc); ++ return 0; ++ } ++ if((mpid=fork())==0) ++ { /* child process */ ++ if(verbose&VERBOSE_PRINT) printf("modprobe(%.32s)\n",m); ++ signal(SIGSEGV,segfault_handler); ++ /* Send modprobe errors to /dev/null */ ++ if(!(verbose&VERBOSE_PRINT)) freopen("/dev/null","w",stderr); ++ execl("/sbin/modprobe","modprobe",m,NULL); ++ exit(1); ++ } ++ now=time(0); ++ do ++ { ++ usleep(125000); /* Delay 1/8s */ ++ /* We SHOULD wait for modprobe to finish! */ ++ if(waitpid(mpid,&pstatus,WNOHANG)) break; ++ } ++ while((time(0) - now) < MAX_TIME_MODULE); ++ set_conflict(m); ++ return pstatus; ++} ++ ++#if defined(_i_wanna_build_this_crap_) ++int configure_isapnp(struct device *dev,int verbose) ++{ ++ int io[64],io_max; ++ int irq[16],irq_max; ++ int dma[8],dma_max; ++ struct isapnpDevice *d=(struct isapnpDevice *)dev; ++ if(d->io) ++ { ++ if(verbose&VERBOSE_PRINT) printf("io: "); ++ for(io_max=0;io_max<64&&(io[io_max]=d->io[io_max])!=-1;io_max++) ++ if(verbose&VERBOSE_PRINT) printf("0x%x, ",(int)io[io_max]); ++ if(verbose&VERBOSE_PRINT) printf("\n"); ++ } ++ if(d->irq) ++ { ++ if(verbose&VERBOSE_PRINT) printf("irq: "); ++ for(irq_max=0;irq_max<16&&(irq[irq_max]=d->irq[irq_max])!=-1;irq_max++) ++ if(verbose&VERBOSE_PRINT) printf("0x%d, ",(int)irq[irq_max]); ++ if(verbose&VERBOSE_PRINT) printf("\n"); ++ } ++ if(d->dma) ++ { ++ if(verbose&VERBOSE_PRINT) printf("dma: "); ++ for(dma_max=0;dma_max<8&&(dma[dma_max]=d->dma[dma_max])!=-1;dma_max++) ++ if(verbose&VERBOSE_PRINT) printf("%d, ",(int)dma[dma_max]); ++ if(verbose&VERBOSE_PRINT) printf("\n"); ++ } ++ /* no configuration possible (yet) */ ++#if 0 ++ /* Hier müssten die freien Interrupts/IOs/DMAs untersucht werden, aber erst ++ NACHDEM alle anderen Treiber geladen wurden, anschließend eine ++ /etc/isapnp.conf mit den vermutlich richtigen Werten geschrieben und ++ mit isapnp geladen werden. Abschließend: */ ++ return modprobe(d->driver,free_io,free_irq,free_dma,verbose); ++#endif ++ return(0); ++} ++#endif ++ ++int writeconfig(char *name,struct device *d,int verbose) ++{ ++ FILE *f,*k; ++ const char *kconfig="/etc/sysconfig/knoppix"; ++ char *desc; ++ unlink(name); ++ if((f=fopen(name,"w"))==NULL) ++ { /* Read-only filesystem on /etc ?! */ ++ fprintf(stderr,"Can't write to '%s': %s",name,strerror(errno)); ++ return 1; ++ } ++ if((k=fopen(kconfig,"a"))==NULL) { fclose(f); return 1; } ++ if(verbose&VERBOSE_PRINT) ++ { ++ printf("write config(%s)\n",name); ++ printf("update config(%s)\n",kconfig); ++ } ++ desc = get_description(d); ++ switch(d->type) ++ { ++ case CLASS_AUDIO: ++ { ++ if(desc) fprintf(f,"FULLNAME=\"%s\"\n",desc), ++ fprintf(k,"SOUND_FULLNAME=\"%s\"\n",desc); ++ if(d->driver) ++ { ++ char *cc=check_conflict(d->driver); ++ fprintf(f,"DRIVER=\"%s\"\n",cc?cc:d->driver), ++ fprintf(k,"SOUND_DRIVER=\"%s\"\n",cc?cc:d->driver); ++ } ++ }; break; ++ case CLASS_MOUSE: ++ { ++ char *t1,*t2; ++ if(d->bus==BUS_PSAUX) { t1="ps2"; t2="PS/2"; } ++ else if(d->bus==BUS_USB) { t1="imps2"; t2="IMPS/2"; } ++ else { t1="ms"; t2="Microsoft"; } ++ fprintf(f,"MOUSETYPE=\"%s\"\nXMOUSETYPE=\"%s\"\n",t1,t2); ++ if(desc) fprintf(f,"FULLNAME=\"%s\"\n",desc), ++ fprintf(k,"MOUSE_FULLNAME=\"%s\"\n",desc); ++ if(d->device) fprintf(f,"DEVICE=\"/dev/%s\"\n",d->device), ++ fprintf(k,"MOUSE_DEVICE=\"/dev/%s\"\n",d->device); ++ }; break; ++ case CLASS_NETWORK: ++ { ++ if(desc) fprintf(f,"FULLNAME=\"%s\"\n",desc), ++ fprintf(k,"NETCARD_FULLNAME=\"%s\"\n",desc); ++ if(d->driver) fprintf(f,"DRIVER=\"%s\"\n",d->driver), ++ fprintf(k,"NETCARD_DRIVER=\"%s\"\n",d->driver); ++ }; break; ++ case CLASS_VIDEO: ++ { ++ const char *xserver="XSERVER=\"%s\"\n"; ++ const char *xmodule="XMODULE=\"%s\"\n"; ++ const char *xopts="XOPTIONS=\"%s\"\n"; ++ const char *xdesc="XDESC=\"%s\"\n"; ++ struct xinfo *xi=getxinfo(d); ++ if(xi) ++ { ++ if(*xi->xserver) ++ { fprintf(f,xserver,xi->xserver); fprintf(k,xserver,xi->xserver); } ++ if(*xi->xmodule) ++ { fprintf(f,xmodule,xi->xmodule); fprintf(k,xmodule,xi->xmodule); } ++ if(*xi->xopts) ++ { fprintf(f,xopts,xi->xopts); fprintf(k,xopts,xi->xopts); } ++ if(*xi->xdesc) ++ { fprintf(f,xdesc,xi->xdesc); fprintf(k,xdesc,xi->xdesc); } ++ } ++ }; break; ++ case CLASS_FLOPPY: ++ { ++ if(desc) fprintf(f,"FULLNAME='%s'\n",desc), ++ fprintf(k,"FLOPPY_FULLNAME='%s'\n",desc); ++ if(d->device) fprintf(f,"DEVICE=\"/dev/%s\"\n",d->device), ++ fprintf(k,"FLOPPY_DEVICE=\"/dev/%s\"\n",d->device); ++ if(d->driver) fprintf(f,"DRIVER=\"%s\"\n",d->driver), ++ fprintf(k,"FLOPPY_DRIVER=\"%s\"\n",d->driver); ++ }; break; ++ default: break; ++ } ++ fclose(f); fclose(k); ++ return 0; ++} ++ ++int hw_setup(enum deviceClass dc, int verbose, int probeonly, int skip) ++{ ++ int i,mouse=0,cdrom=0,modem=0,scanner=0; ++ struct device **currentDevs, *d, *serialmouse=NULL, *usbmouse=NULL; ++ if(verbose&VERBOSE_PROMPT) wpid=startwheel(); ++ currentDevs=probeDevices(dc,BUS_UNSPEC,PROBE_ALL); ++ if(verbose&VERBOSE_PROMPT&&wpid>0) { kill(wpid,SIGTERM); wpid=0; usleep(160000); write(2,"\033[0m Done.\n",11); } ++ if(currentDevs==NULL) return -1; ++ check_proc_modules(); /* Get currently loaded module list */ ++ for(i=0;(d=currentDevs[i]);i++) ++ { ++ if(verbose&VERBOSE_PRINT) hw_info(d); ++ if(!probeonly) ++ { ++#if defined(_i_wanna_build_this_crap_) ++ if(d->bus==BUS_ISAPNP&&configure_isapnp(d,verbose)) continue; ++#endif ++ switch(d->type) ++ { ++ case CLASS_MOUSE: /* Choose serial over PS2/USB mouse IF present */ ++ /* For some reason, PS/2 ALWAYS detects a mouse */ ++ if(d->bus==BUS_SERIAL) ++ { mouse=0; serialmouse=d; } ++ else if(d->bus==BUS_USB) /* Need usbdevfs for */ ++ { mouse=0; usbmouse=d; /* this to work */ ++ load_mod(d->driver,verbose); } ++ if(!mouse) ++ writeconfig("/etc/sysconfig/mouse",d,verbose); ++ link_dev(d,"mouse",mouse++,verbose); ++ break; ++ case CLASS_CDROM: if(d->bus==BUS_USB) load_mod(d->driver,verbose); ++ link_dev(d,"cdrom", cdrom++,verbose); break; ++ case CLASS_MODEM: if(d->bus==BUS_USB) load_mod(d->driver,verbose); ++ link_dev(d,"modem", modem++,verbose); break; ++ case CLASS_SCANNER: if(d->bus==BUS_USB) load_mod(d->driver,verbose); ++ link_dev(d,"scanner",scanner++,verbose); break; ++ case CLASS_VIDEO: writeconfig("/etc/sysconfig/xserver",d,verbose); ++ break; ++ case CLASS_AUDIO: if(skip&SKIP_AUDIO) break; ++ writeconfig("/etc/sysconfig/sound",d,verbose); ++ load_mod(d->driver,verbose); break; ++ case CLASS_NETWORK: writeconfig("/etc/sysconfig/netcard",d,verbose); ++ load_mod(d->driver,verbose); break; ++ case CLASS_FLOPPY: writeconfig("/etc/sysconfig/floppy",d,verbose); ++ load_mod(d->driver,verbose); break; ++ case CLASS_KEYBOARD:if(d->bus==BUS_USB) load_mod(d->driver,verbose); ++ break; ++ case CLASS_CAPTURE: /* Just load the module for these */ ++ case CLASS_SCSI: if(skip&SKIP_SCSI) break; ++ case CLASS_OTHER: /* Yet unsupported or "guessed" devices in kudzu. Module probe may hang here. */ ++ case CLASS_RAID: load_mod(d->driver,verbose); break; ++ case CLASS_SOCKET: /* yenta_socket or similar is handled by knoppix-autoconfig */ ++ default: /* do nothing */ break; ++ } ++ } ++ } ++ return 0; ++} ++ ++int main(int argc, char **argv) ++{ ++ int i, verbose=0, probeonly=0, skip=0; ++ enum deviceClass dc=CLASS_UNSPEC; ++ for(i=1;i<argc;i++) ++ { ++ if(!strcasecmp(argv[i],"-v")) verbose|=VERBOSE_PRINT; ++ else if(!strcasecmp(argv[i],"-p")) verbose|=VERBOSE_PROMPT; ++ else if(!strcasecmp(argv[i],"-a")) skip|=SKIP_AUDIO; ++ else if(!strcasecmp(argv[i],"-s")) skip|=SKIP_SCSI; ++ else if(!strcasecmp(argv[i],"-n")) probeonly=1; ++ else return syntax(argv[i]); ++ } ++ /* Allow SIGTERM, SIGINT: rmmod depends on this. */ ++ signal(SIGTERM,SIG_DFL); signal(SIGINT,SIG_DFL); ++ signal(SIGALRM,alarm_handler); alarm(MAX_TIME); ++#ifdef BLACKLIST ++ gen_blacklist(); ++#endif ++ return hw_setup(dc,verbose,probeonly,skip); ++} diff --git a/sys-apps/hwsetup/hwsetup-1.2-r1.ebuild b/sys-apps/hwsetup/hwsetup-1.2-r1.ebuild index c348723..8016efd 100644 --- a/sys-apps/hwsetup/hwsetup-1.2-r1.ebuild +++ b/sys-apps/hwsetup/hwsetup-1.2-r1.ebuild @@ -25,9 +25,9 @@ RDEPEND="${COMMON_DEPEND} src_unpack() { unpack ${A} epatch \ - "${FILESDIR}"/${P}-gentoo.patch -# "${FILESDIR}"/${P}-dyn_blacklist.patch \ -# "${FILESDIR}"/${P}-fastprobe.patch \ + "${FILESDIR}"/${MY_PV}-dyn_blacklist.patch \ + "${FILESDIR}"/${PV}-3-fastprobe.patch \ + "${FILESDIR}"/${MY_PV}-gentoo.patch } src_compile() { diff --git a/sys-apps/hwsetup/hwsetup-1.2.ebuild b/sys-apps/hwsetup/hwsetup-1.2.ebuild index 0903ed9..3c20a3c 100644 --- a/sys-apps/hwsetup/hwsetup-1.2.ebuild +++ b/sys-apps/hwsetup/hwsetup-1.2.ebuild @@ -25,9 +25,9 @@ RDEPEND="${COMMON_DEPEND} src_unpack() { unpack ${A} epatch \ - "${FILESDIR}"/${P}-dyn_blacklist.patch \ - "${FILESDIR}"/${P}-fastprobe.patch \ - "${FILESDIR}"/${P}-gentoo.patch + "${FILESDIR}"/${MY_PV}-dyn_blacklist.patch \ + "${FILESDIR}"/${MY_PV}-fastprobe.patch \ + "${FILESDIR}"/${MY_PV}-gentoo.patch } src_compile() { |