diff options
author | 2008-04-08 14:41:25 +0000 | |
---|---|---|
committer | 2008-04-08 14:41:25 +0000 | |
commit | 374400ca495df53dd88eb1c177be30860dfd41b3 (patch) | |
tree | 63ff6f6576c53258805fdbc35e03d07ed3723616 | |
parent | Updated Gentoo patch. (diff) | |
download | wolf31o2-374400ca495df53dd88eb1c177be30860dfd41b3.tar.gz wolf31o2-374400ca495df53dd88eb1c177be30860dfd41b3.tar.bz2 wolf31o2-374400ca495df53dd88eb1c177be30860dfd41b3.zip |
Fixing the Gentoo patch, since it was trying to remove hwsetup.c.orig, which doesn't exist.
svn path=/; revision=168
-rw-r--r-- | sys-apps/hwsetup/Manifest | 2 | ||||
-rw-r--r-- | sys-apps/hwsetup/files/1.2-7-gentoo.patch | 819 |
2 files changed, 1 insertions, 820 deletions
diff --git a/sys-apps/hwsetup/Manifest b/sys-apps/hwsetup/Manifest index 0145917..a1fcac3 100644 --- a/sys-apps/hwsetup/Manifest +++ b/sys-apps/hwsetup/Manifest @@ -2,7 +2,7 @@ AUX 1.2-3-dyn_blacklist.patch 1625 RMD160 bba78724a2a9d89309f8fd2a50d8d2525cc818 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 29142 RMD160 c946498a1ab92fdbdacd3ce7c817af01fd96363c SHA1 d7b42af3cac6e880cb86b7177f78b8b1b3a96e5e SHA256 c7cb6b193b1f0cfbd85e26ca4a87de4ed4331271076f6fdfcc14a6e0b83e1c40 +AUX 1.2-7-gentoo.patch 726 RMD160 4fee01b484f303d5a5b36099f72e18e31e165ca5 SHA1 bc793c3c496010db48f5b9ba6e6e6ae90c813676 SHA256 bd244624e9fc761c7c72ecd98a7aa4133e2d4858172ba336f5bc9596a67c8f51 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 1727 RMD160 115b3598de83bb68c208903fb06f0ebcad36eee0 SHA1 3b8e5747b6908d7f1bfa9a65d6627e0ca3480af6 SHA256 64aa9018379e4e91b3929484c3290c2a2e5e9e891ec89ecc6e2478adad9857f3 diff --git a/sys-apps/hwsetup/files/1.2-7-gentoo.patch b/sys-apps/hwsetup/files/1.2-7-gentoo.patch index 3b07911..cc78e27 100644 --- a/sys-apps/hwsetup/files/1.2-7-gentoo.patch +++ b/sys-apps/hwsetup/files/1.2-7-gentoo.patch @@ -19,822 +19,3 @@ diff -urN hwsetup-1.2.fastprobe/hwsetup.c hwsetup-1.2/hwsetup.c char *desc; unlink(name); if((f=fopen(name,"w"))==NULL) -diff -urN hwsetup-1.2.fastprobe/hwsetup.c.orig hwsetup-1.2/hwsetup.c.orig ---- hwsetup-1.2.fastprobe/hwsetup.c.orig 2008-04-07 19:09:03.000000000 -0700 -+++ hwsetup-1.2/hwsetup.c.orig 1969-12-31 16:00:00.000000000 -0800 -@@ -1,815 +0,0 @@ --/****************************************************************************\ --* 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); --} |