SPARC bootable CD-ROM: CRK Linux 2.2.25 Sparc` ^;; ھ@SILO0.98!0h )@ !@L!] @?!!@4 S@:!! :  2O * a* * !@6!]  , 4@6!] 0  $!*@- ] 0@!@ I@! $ L2@!@$$, h!!@ u !u ($u 0! u h u uu u @ u u ou (finddevicegetpropbootpathstdoutopencloseseekreadwrite/chosenexit`!)@@a S2``*``(*` 0@ ,*` 0 +   0<$ )*4$`$`$ :  * * a**@$  g ,g`,,4` 0`, ?`@ I  L @ `"`(@`t@`\@,`` CD001LINUX CRK Linux 2.2.25 Sparc C$$C  "f  ) CRK-2003110301 stock CRK Linux 2.2.25 Sparc 2006042507332000200604250733200000000000000000002006042507332000 CD001LINUX CRK Linux 2.2.25C$$C%/@"kkf  ) CRK-2003110301 stock CRK Linux 2.2.25 Sparc 006042507332000200604250733200000000000000000002006042507332000 CD001XBOOTYDEVZETCMODULES[SBIN\UTILS )DOCUMENTATIONSPARCJSPARC64dSPARC]SPARC64DARM6CDROMBFB /FILESYSTEMSAI3867ISDNCKBUILD9M68K 1NETWORKING:POWERPCFS390<SOUND;SYSCTL GTELEPHONYHUSB ?VIDEO4LINUX 2.2K 2.2e BINf LIBg ROOTh SBINi USR^ BIN_ LIB` ROOTa SBINb USRE NWFPE5IP_MASQ@BTTVBLOCK'FC4#FS!IPV4(MISC NET"SCSILBLOCKUFC4QFSOIPV4VMISCMNETPSCSIj#LIBc(LIBXBOOTYDEVZETCMODULES[SBIN\UTILS )DOCUMENTATIONSPARCJSPARC64dSPARC]SPARC64DARM6CDROMBFB /FILESYSTEMSAI3867ISDNCKBUILD9M68K 1NETWORKING:POWERPCFS390<SOUND;SYSCTL GTELEPHONYHUSB ?VIDEO4LINUX 2.2K 2.2e BINf LIBg ROOTh SBINi USR^ BIN_ LIB` ROOTa SBINb USRE NWFPE5IP_MASQ@BTTVBLOCK'FC4#FS!IPV4(MISC NET"SCSILBLOCKUFC4QFSOIPV4VMISCMNETPSCSIj#LIBc(LIBkbootdevetclmodulessbin utilswDocumentation msparcsparc64 sparcsparc64arm ~cdromfbzfilesystemsi386isdn kbuildm68k{networkingpowerpcs390 sound sysctltelephonyusbvideo4linux n 2.2.25 2.2.25 bin lib root sbin usr bin lib root sbin usr nwfpe}ip_masqbttv oblockufc4sfsqipv4vmiscpnetrscsi blockfc4fsipv4miscnetscsi#lib(libkbootdevetclmodulessbin utilswDocumentation msparcsparc64 sparcsparc64arm ~cdromfbzfilesystemsi386isdn kbuildm68k{networkingpowerpcs390 sound sysctltelephonyusbvideo4linux n 2.2.25 2.2.25 bin lib root sbin usr bin lib root sbin usr nwfpe}ip_masqbttv oblockufc4sfsqipv4vmiscpnetrscsi blockfc4fsipv4miscnetscsi#lib(libf  )SPRRPX$mAAmTFf  )j!jCEff  )RRPX$mAAmTFf  )j!jrXXf  94BOOTRRNM bootPX$mAAmTFf  94jj pYYe 5"DEVRRNMdevPX$mAAmTFe 5"jj pZZjETCRRNMetcPX$mAAmTFjjjxg (,MODULESRRNM modulesPX$mAAmTFg (,jj r[[jSBINRRNM sbinPX$mAAmTFjjjt\\f  2UTILSRRNM utilsPX$mAAmTFf  2jjfg (,RRPX$mAAmTFg (,j!j ff  )RRPX$mAAmTFf  )j!j))00g/ DOCUMENTATIONRRNMDocumentationPX$mAAmTFg/jj |AhhAd# MAKEDEV.;1RRNM MAKEDEVPX$mmTFd#jj tg '4SPARCRRNM sparcPX$mAAmTFg '4jj xJJg !4SPARC64RRNM sparc64PX$mAAmTFg !4jj fg '4RRPX$mAAmTFg '4j!j fg (,RRPX$mAAmTFg (,j!j rg ):2.2RRNM 2.2.25PX$mAAm TFg ):jj fg ):RRPX$mAAm TFg ):j!j fg '4RRPX$mAAmTFg '4j!j tg )4BLOCKRRNM blockPX$mAAmTFg )4jjp''g )8FC4RRNMfc4PX$mAAmTFg )8jj n## g )8FSRRNMfsPX$mAAmTFg )8jj r!!g )5IPV4RRNM ipv4PX$mAAmTFg )5jjr((g ):MISCRRNM miscPX$mAAmTFg ):jj p g )5NETRRNMnetPX$mAAmTFg )5jjr""g )6SCSIRRNM scsiPX$mAAmTFg )6jjfg )4RRPX$mAAmTFg )4j!jfg ):RRPX$mAAm TFg ):j!j | g )4 LINEAR.O;1RRNM linear.oPX$$$TFg )4jjx,44,g )4LOOP.O;1RRNM loop.oPX$$$TFg )4jjvX((Xg )4NBD.O;1RRNM nbd.oPX$$$TFg )4jjzʈg )4 RAID0.O;1RRNM raid0.oPX$$$TFg )4jjzͬ00g )4 RAID1.O;1RRNM raid1.oPX$$$TFg )4jjz^^g )4 RAID5.O;1RRNM raid5.oPX$$$TFg )4jjf g )5RRPX$mAAmTFg )5j!jfg ):RRPX$mAAm TFg ):j!j ~g )5 BONDING.O;1RRNMbonding.oPX$$$TFg )5jjg )4 BSD_COMP.O;1RRNMbsd_comp.oPX$$$TFg )4jjz g )5 DUMMY.O;1RRNM dummy.oPX$$$TFg )5jj44g )5 MYRI_SBUS.O;1RRNMmyri_sbus.oPX$$$TFg )5jjvTTg )4PPP.O;1RRNM ppp.oPX$$$TFg )4jj33``g )5PPP_DEFLATE.O;1RRNMppp_deflate.oPX$$$TFg )5jjxJJg )5SLHC.O;1RRNM slhc.oPX$$$TFg )5jjxNN4CC4g )5SLIP.O;1RRNM slip.oPX$$$TFg )5jj~WWJJg )5 SUNBMAC.O;1RRNMsunbmac.oPX$$$TFg )5jj|aag )5 SUNHME.O;1RRNM sunhme.oPX$$$TFg )5jjz88g )5 SUNQE.O;1RRNM sunqe.oPX$$$TFg )5jjf!!g )5RRPX$mAAmTFg )5j!jfg ):RRPX$mAAm TFg ):j!j x++g )5IPIP.O;1RRNM ipip.oPX$$$TFg )5jj|44g )5 IP_GRE.O;1RRNM ip_gre.oPX$$$TFg )5jjDDg )5IP_MASQ_AUTOFW.O;1RRNMip_masq_autofw.oPX$$$TFg )5jj g )5IP_MASQ_CUSEEME.O;1RRNMip_masq_cuseeme.oPX$$$TFg )5jjg )5IP_MASQ_FTP.O;1RRNMip_masq_ftp.oPX$$$TFg )5jjg )5IP_MASQ_IRC.O;1RRNMip_masq_irc.oPX$$$TFg )5jjP""Pg )5IP_MASQ_MFW.O;1RRNMip_masq_mfw.oPX$$$TFg )5jjg )5IP_MASQ_PORTFW.O;1RRNMip_masq_portfw.oPX$$$TFg )5jjddg )5IP_MASQ_QUAKE.O;1RRNMip_masq_quake.oPX$$$TFg )5jjg )5IP_MASQ_RAUDIO.O;1RRNMip_masq_raudio.oPX$$$TFg )5jj88g )5IP_MASQ_USER.O;1RRNMip_masq_user.oPX$$$TFg )5jjg )5IP_MASQ_VDOLIVE.O;1RRNMip_masq_vdolive.oPX$$$TFg )5jjxg )5RARP.O;1RRNM rarp.oPX$$$TFg )5jjf""g )6RRPX$mAAmTFg )6j!jfg ):RRPX$mAAm TFg ):j!j xg )6FCAL.O;1RRNM fcal.oPX$$$TFg )6jjzg )6 PLUTO.O;1RRNM pluto.oPX$$$TFg )6jjƈg )6 QLOGICPTI.O;1RRNMqlogicpti.oPX$$$TFg )6jjt$\\$g )6SG.O;1RRNM sg.oPX$$$TFg )6jjtؑg )6ST.O;1RRNM st.oPX$$$TFg )6jjf## g )8RRPX$mAAmTFg )8j!j fg ):RRPX$mAAm TFg ):j!j |FFg )7 AUTOFS.O;1RRNM autofs.oPX$$$TFg )7jj  g )7BINFMT_JAVA.O;1RRNMbinfmt_java.oPX$$$TFg )7jj 0##0g )7BINFMT_MISC.O;1RRNMbinfmt_misc.oPX$$$TFg )7jj xg )6CODA.O;1RRNM coda.oPX$$$TFg )6jjv;;[[g )6FAT.O;1RRNM fat.oPX$$$TFg )6jjxWW@@g )7HPFS.O;1RRNM hpfs.oPX$$$TFg )7jj z``DDg )6 MINIX.O;1RRNM minix.oPX$$$TFg )6jjzuu00g )6 MSDOS.O;1RRNM msdos.oPX$$$TFg )6jjz||Ƥg )7 NCPFS.O;1RRNM ncpfs.oPX$$$TFg )7jj xg )7NFSD.O;1RRNM nfsd.oPX$$$TFg )7jj``g )7 NLS_CP437.O;1RRNMnls_cp437.oPX$$$TFg )7jj g )7 NLS_CP737.O;1RRNMnls_cp737.oPX$$$TFg )7jj g )7 NLS_CP775.O;1RRNMnls_cp775.oPX$$$TFg )7jj g )7 NLS_CP850.O;1RRNMnls_cp850.oPX$$$TFg )7jj g )7 NLS_CP852.O;1RRNMnls_cp852.oPX$$$TFg )7jj g )7 NLS_CP855.O;1RRNMnls_cp855.oPX$$$TFg )7jj g )7 NLS_CP857.O;1RRNMnls_cp857.oPX$$$TFg )7jj <>g ): CS4231.O;1RRNM cs4231.oPX$$$TFg ):jj xeeg ):DBRI.O;1RRNM dbri.oPX$$$TFg ):jj vL!!Lg ):DMY.O;1RRNM dmy.oPX$$$TFg ):jj vvvg ):IPX.O;1RRNM ipx.oPX$$$TFg ):jj D))Dg ): OPENPROM.O;1RRNMopenprom.oPX$$$TFg ):jj ~ppg ): SOFTDOG.O;1RRNMsoftdog.oPX$$$TFg ):jj f))00g/RRPX$mAAmTFg/j!j fg (,RRPX$mAAmTFg (,j!j |IIe: 00-INDEX.;1RRNM 00-INDEXPX$$$TFe:jj pDDf ARMRRNMarmPX$mAAmTFf jj NNe%BINFMT_MISC.TXT;1RRNMbinfmt_misc.txtPX$$$TFe%jj   ppe9BUG-HUNTING.;1RRNMBUG-HUNTINGPX$$$TFe9jj ~  --e ' CCISS.TXT;1RRNMcciss.txtPX$$$TFe 'jj t66f CDROMRRNM cdromPX$mAAmTFf jj |  kke% CHANGES.;1RRNM ChangesPX$$$TFe%jj 99>e 'DEBUGGING390.TXT;1RRNMDebugging390.txtPX$$$TFe 'jj kke% DEVICES.TXT;1RRNMdevices.txtPX$$$TFe%jj a%%ae:DIGIBOARD.TXT;1RRNMdigiboard.txtPX$$$TFe:jj e:DIGIEPCA.TXT;1RRNMdigiepca.txtPX$$$TFe:jj S//Se:EXCEPTION.TXT;1RRNMexception.txtPX$$$TFe:jj nBBf FBRRNMfbPX$mAAmTFf jj //f  FILESYSTEMSRRNMfilesystemsPX$mAAmTFf jj ~11e: FTAPE.TXT;1RRNMftape.txtPX$$$TFe:jj e:HAYES-ESP.TXT;1RRNMhayes-esp.txtPX$$$TFe:jj rAAf I386RRNM i386PX$mAAmTFf jj e 'I810_RNG.TXT;1RRNMi810_rng.txtPX$$$TFe 'jj z&bb&e: IDE.TXT;1RRNM ide.txtPX$$$TFe:jj --e: INITRD.TXT;1RRNMinitrd.txtPX$$$TFe:jj e: IO-APIC.TXT;1RRNMIO-APIC.txtPX$$$TFe:jj e:IO-MAPPING.TXT;1RRNMIO-mapping.txtPX$$$TFe:jj e 'IOCTL-NUMBER.TXT;1RRNMioctl-number.txtPX$$$TFe 'jj r77f ISDNRRNM isdnPX$mAAmTFf jj |  e: JAVA.TXT;1RRNM java.txtPX$$$TFe:jj bssbe8JOYSTICK.TXT;1RRNMjoystick.txtPX$$$TFe8jj %%e;JOYSTICK-API.TXT;1RRNMjoystick-api.txtPX$$$TFe;jj ""OOe;JOYSTICK-PARPORT.TXT;1RRNMjoystick-parport.txtPX$$$TFe;jj vCCf KBUILDRRNM kbuildPX$mAAmTFf jj ,,ppe%KERNEL-DOCS.TXT;1RRNMkernel-docs.txtPX$$$TFe%jj ;;e;KERNEL-PARAMETERS.TXT;1RRNMkernel-parameters.txtPX$$$TFe;jj |??e; KMOD.TXT;1RRNM kmod.txtPX$$$TFe;jj ~@@ e: KNFSD.TXT;1RRNMknfsd.txtPX$$$TFe:jj ~BB e: LOCKS.TXT;1RRNMlocks.txtPX$$$TFe:jj |DD??e: LOGO.GIF;1RRNM logo.gifPX$$$TFe:jj |LL33e: LOGO.TXT;1RRNM logo.txtPX$$$TFe:jj r99f M68KRRNM m68kPX$mAAmTFf jj MMeee:MAGIC-NUMBER.TXT;1RRNMmagic-number.txtPX$$$TFe:jj PPtte:MANDATORY.TXT;1RRNMmandatory.txtPX$$$TFe:jj zTT..e: MCA.TXT;1RRNM mca.txtPX$$$TFe:jj xZZ@@e:MD.TXT;1RRNM md.txtPX$$$TFe:jj [[L Le: MEMORY.TXT;1RRNMmemory.txtPX$$$TFe:jj ]]e; MKDEV.CCISS;1RRNMmkdev.ccissPX$$$TFe;jj ~^^  e; MKDEV.IDA;1RRNMmkdev.idaPX$$$TFe;jj __r""re8 MODULES.TXT;1RRNMmodules.txtPX$$$TFe8jj ddoAAoe;MOXA-SMARTIO.;1RRNMmoxa-smartioPX$$$TFe;jj |mm##e; MTRR.TXT;1RRNM mtrr.txtPX$$$TFe;jj zrr e: NBD.TXT;1RRNM nbd.txtPX$$$TFe:jj ~11 f  NETWORKINGRRNMnetworkingPX$mAAmTFf jj ttZ Ze: NFSROOT.TXT;1RRNMnfsroot.txtPX$$$TFe:jj yy@@e;NMI_WATCHDOG.TXT;1RRNMnmi_watchdog.txtPX$$$TFe;jj zzd%%de:OOPS-TRACING.TXT;1RRNMoops-tracing.txtPX$$$TFe:jj BBe: PARIDE.TXT;1RRNMparide.txtPX$$$TFe:jj e ' PARPORT.TXT;1RRNMparport.txtPX$$$TFe 'jj ze; PCI.TXT;1RRNM pci.txtPX$$$TFe;jj cce:PCWD-WATCHDOG.TXT;1RRNMpcwd-watchdog.txtPX$$$TFe:jj x::f POWERPCRRNM powerpcPX$mAAmTFf jj |e ' PROC.TXT;1RRNM proc.txtPX$$$TFe 'jj !!e9 RAMDISK.TXT;1RRNMramdisk.txtPX$$$TFe9jj e 'README.DAC960;1RRNMREADME.DAC960PX$$$TFe 'jj e; README.MOXA;1RRNMREADME.moxaPX$$$TFe;jj rre: RISCOM8.TXT;1RRNMriscom8.txtPX$$$TFe:jj z* *e% RTC.TXT;1RRNM rtc.txtPX$$$TFe%jj rFFf S390RRNM s390PX$mAAmTFf jj |e8 SCSI.TXT;1RRNM scsi.txtPX$$$TFe8jj f fe:SERIAL-CONSOLE.TXT;1RRNMserial-console.txtPX$$$TFe:jj ʦe;SGI-VISWS.TXT;1RRNMsgi-visws.txtPX$$$TFe;jj k ke:SMART-CONFIG.TXT;1RRNMsmart-config.txtPX$$$TFe:jj zWWe; SMP.000;1RRNM smp.txtPX$$$TFe;jj zEEe9 SMP.TEX;1RRNM smp.texPX$$$TFe9jj ze8 SMP.TXT;1RRNM SMP.txtPX$$$TFe8jj t<<f SOUNDRRNM soundPX$mAAmTFf jj 2;;2e:SPECIALIX.TXT;1RRNMspecialix.txtPX$$$TFe:jj   e:SPINLOCKS.TXT;1RRNMspinlocks.txtPX$$$TFe:jj GGe:STALLION.TXT;1RRNMstallion.txtPX$$$TFe:jj [[f "SUBMITTINGDRIVERS.;1RRNMSubmittingDriversPX$$$TFf "jj |B88Be: SVGA.TXT;1RRNM svga.txtPX$$$TFe:jj xM,,Me;SX.TXT;1RRNM sx.txtPX$$$TFe;jj v;;f SYSCTLRRNM sysctlPX$mAAmTFf jj ~e: SYSRQ.TXT;1RRNMsysrq.txtPX$$$TFe:jj |GGf  TELEPHONYRRNMtelephonyPX$mAAmTFf jj ((e8 UNICODE.TXT;1RRNMunicode.txtPX$$$TFe8jj pHHf  USBRRNMusbPX$mAAmTFf  jj e:VGA-SOFTCURSOR.TXT;1RRNMVGA-softcursor.txtPX$$$TFe:jj ??f  VIDEO4LINUXRRNMvideo4linuxPX$mAAmTFf jj & &e9WATCHDOG.TXT;1RRNMwatchdog.txtPX$$$TFe9jj  e:XTERM-LINUX.XPM;1RRNMxterm-linux.xpmPX$$$TFe:jj f//f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j |  e8 00-INDEX.;1RRNM 00-INDEXPX$$$TFe8jj |  e8 ADFS.TXT;1RRNM adfs.txtPX$$$TFe8jj |   e8 AFFS.TXT;1RRNM affs.txtPX$$$TFe8jj |==e8 CODA.TXT;1RRNM coda.txtPX$$$TFe8jj **((e ' FAT_CVF.TXT;1RRNMfat_cvf.txtPX$$$TFe 'jj |00e8 HPFS.TXT;1RRNM hpfs.txtPX$$$TFe8jj ~11e8 ISOFS.TXT;1RRNMisofs.txtPX$$$TFe8jj 22e%MINIX-PART.TXT;1RRNMminix-part.txtPX$$$TFe%jj ~33zze8 NCPFS.TXT;1RRNMncpfs.txtPX$$$TFe8jj |44iie8 NTFS.TXT;1RRNM ntfs.txtPX$$$TFe8jj ~55!!e8 ROMFS.TXT;1RRNMromfs.txtPX$$$TFe8jj ~:: e8 SMBFS.TXT;1RRNMsmbfs.txtPX$$$TFe8jj <<e8 SYSV-FS.TXT;1RRNMsysv-fs.txtPX$$$TFe8jj z==e8 UFS.TXT;1RRNM ufs.txtPX$$$TFe8jj >>V Ve8 UMSDOS.TXT;1RRNMumsdos.txtPX$$$TFe8jj |@@ )) e8 VFAT.TXT;1RRNM vfat.txtPX$$$TFe8jj zFFGGe ' VFS.TXT;1RRNM vfs.txtPX$$$TFe 'jj f11 f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j |OOO Oe9 00-INDEX.;1RRNM 00-INDEXPX$$$TFe9jj ~QQiie9 3C505.TXT;1RRNM3c505.txtPX$$$TFe9jj ~RRe9 6PACK.TXT;1RRNM6pack.txtPX$$$TFe9jj ~VVe9 ALIAS.TXT;1RRNMalias.txtPX$$$TFe9jj WW]]e9 ARCNET.TXT;1RRNMarcnet.txtPX$$$TFe9jj ccMMe9ARCNET-HARDWARE.TXT;1RRNMarcnet-hardware.txtPX$$$TFe9jj |e9 AX25.TXT;1RRNM ax25.txtPX$$$TFe9jj {{e9 BAYCOM.TXT;1RRNMbaycom.txtPX$$$TFe9jj cce9 BONDING.TXT;1RRNMbonding.txtPX$$$TFe9jj |((e9 COMX.TXT;1RRNM comx.txtPX$$$TFe9jj vve9CONFIGURABLE.;1RRNMConfigurablePX$$$TFe9jj | e9 COPS.TXT;1RRNM cops.txtPX$$$TFe9jj YYe% CS89X0.TXT;1RRNMcs89x0.txtPX$$$TFe%jj ~!!e9 DE4X5.TXT;1RRNMde4x5.txtPX$$$TFe9jj ~e9 DEPCA.TXT;1RRNMdepca.txtPX$$$TFe9jj |e9 DGRS.TXT;1RRNM dgrs.txtPX$$$TFe9jj ~e9 DLINK.TXT;1RRNMDLINK.txtPX$$$TFe9jj |u ue9 DMFE.TXT;1RRNM dmfe.txtPX$$$TFe9jj z`55`e9 EQL.TXT;1RRNM eql.txtPX$$$TFe9jj  e9ETHERTAP.TXT;1RRNMethertap.txtPX$$$TFe9jj ~77e9 EWRK3.TXT;1RRNMewrk3.txtPX$$$TFe9jj e9 FILTER.TXT;1RRNMfilter.txtPX$$$TFe9jj єe9FRAMERELAY.TXT;1RRNMframerelay.txtPX$$$TFe9jj ӭe 'IP-SYSCTL.TXT;1RRNMip-sysctl.txtPX$$$TFe 'jj ~ e9 IPDDP.TXT;1RRNMipddp.txtPX$$$TFe9jj ٳe9IP_DYNADDR.TXT;1RRNMip_dynaddr.txtPX$$$TFe9jj x55f IP_MASQRRNM ip_masqPX$mAAmTFf jj |``e9 IRDA.TXT;1RRNM irda.txtPX$$$TFe9jj ۲%%e9LAPB-MODULE.TXT;1RRNMlapb-module.txtPX$$$TFe9jj |e9 LTPC.TXT;1RRNM ltpc.txtPX$$$TFe9jj e9MULTICAST.TXT;1RRNMmulticast.txtPX$$$TFe9jj @@e9NCSA-TELNET.;1RRNMncsa-telnetPX$$$TFe9jj ''e9NET-MODULES.TXT;1RRNMnet-modules.txtPX$$$TFe9jj F Fe9 OLYMPIC.TXT;1RRNMolympic.txtPX$$$TFe9jj |lle9 PLIP.TXT;1RRNM PLIP.txtPX$$$TFe9jj e9POLICY-ROUTING.TXT;1RRNMpolicy-routing.txtPX$$$TFe9jj ze9 PPP.TXT;1RRNM ppp.txtPX$$$TFe9jj x e9PT.TXT;1RRNM pt.txtPX$$$TFe9jj %%e9README.SB1000;1RRNMREADME.sb1000PX$$$TFe9jj wwe9README.XPEED;1RRNMREADME.xpeedPX$$$TFe9jj   e9 ROUTING.TXT;1RRNMrouting.txtPX$$$TFe9jj XXe9 SHAPER.TXT;1RRNMshaper.txtPX$$$TFe9jj l%%le9 SIS900.TXT;1RRNMsis900.txtPX$$$TFe9jj 'EE'e ' SK98LIN.TXT;1RRNMsk98lin.txtPX$$$TFe 'jj |  e9 SKFP.TXT;1RRNM skfp.txtPX$$$TFe9jj |HHe9 SKTR.TXT;1RRNM sktr.txtPX$$$TFe9jj |;;e9 SMC9.TXT;1RRNM smc9.txtPX$$$TFe9jj  e9SOUNDMODEM.TXT;1RRNMsoundmodem.txtPX$$$TFe9jj ze9 TCP.TXT;1RRNM tcp.txtPX$$$TFe9jj | e9 TLAN.TXT;1RRNM tlan.txtPX$$$TFe9jj ~e9 TULIP.TXT;1RRNMtulip.txtPX$$$TFe9jj ,,e% VORTEX.TXT;1RRNMvortex.txtPX$$$TFe%jj ##2**2e9WAN-ROUTER.TXT;1RRNMwan-router.txtPX$$$TFe9jj ))6$$6e9 WANPIPE.TXT;1RRNMwanpipe.txtPX$$$TFe9jj ..66e9 WAVELAN.TXT;1RRNMwavelan.txtPX$$$TFe9jj z//%%e9 X25.TXT;1RRNM x25.txtPX$$$TFe9jj 11e9X25-IFACE.TXT;1RRNMx25-iface.txtPX$$$TFe9jj 22PPe8Z8530DRV.TXT;1RRNMz8530drv.txtPX$$$TFe8jj f55f RRPX$mAAmTFf j!j f11 f RRPX$mAAmTFf j!j ==e9IP_MASQ-API-EX.C;1RRNMip_masq-API-ex.cPX$$$TFe9jj ~>>f fe% RC.MASQFW;1RRNMrc.masqfwPX$$$TFe%jj f66f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j |@@e9 00-INDEX.;1RRNM 00-INDEXPX$$$TFe9jj xAAwwe9AZTCD.;1RRNM aztcdPX$$$TFe9jj WWʬe9CDROM-STANDARD.TEX;1RRNMcdrom-standard.texPX$$$TFe9jj xqqe9 CDU31A.;1RRNM cdu31aPX$$$TFe9jj xuu22e9CM206.;1RRNM cm206PX$$$TFe9jj txxe9GSCD.;1RRNM gscdPX$$$TFe9jj xzzPPe9 IDE-CD.;1RRNM ide-cdPX$$$TFe9jj xGGe9ISP16.;1RRNM isp16PX$$$TFe9jj |e9 MAKEFILE.;1RRNM MakefilePX$$$TFe9jj te9MCD.;1RRNMmcdPX$$$TFe9jj trre9MCDX.;1RRNM mcdxPX$$$TFe9jj xe9OPTCD.;1RRNM optcdPX$$$TFe9jj xe9SBPCD.;1RRNM sbpcdPX$$$TFe9jj t_ _e9SJCD.;1RRNM sjcdPX$$$TFe9jj e9 SONYCD535.;1RRNMsonycd535PX$$$TFe9jj f77f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j |e% 00-INDEX.;1RRNM 00-INDEXPX$$$TFe%jj |e: CREDITS.;1RRNM CREDITSPX$$$TFe:jj e ' HISAX.CERT;1RRNMHiSax.certPX$$$TFe 'jj ]oo]f " INTERFACE.;1RRNMINTERFACEPX$$$TFf "jj f "INTERFACE.FAX;1RRNMINTERFACE.faxPX$$$TFf "jj xqqe: README.;1RRNM READMEPX$$$TFe:jj  f "README.ACT2000;1RRNMREADME.act2000PX$$$TFf "jj AAf "README.AUDIO;1RRNMREADME.audioPX$$$TFf "jj ))e:README.AVMB1;1RRNMREADME.avmb1PX$$$TFe:jj ))f "README.CONCAP;1RRNMREADME.concapPX$$$TFf "jj OOe%README.DIVERSION;1RRNMREADME.diversionPX$$$TFe%jj  f "README.EICON;1RRNMREADME.eiconPX$$$TFf "jj e: README.FAQ;1RRNMREADME.FAQPX$$$TFe:jj WWe% README.FAX;1RRNMREADME.faxPX$$$TFe%jj e%README.HFC-PCI;1RRNMREADME.hfc-pciPX$$$TFe%jj ߞZZe 'README.HISAX;1RRNMREADME.HiSaxPX$$$TFe 'jj   f "README.HYSDN;1RRNMREADME.hysdnPX$$$TFf "jj f " README.ICN;1RRNMREADME.icnPX$$$TFf "jj e:README.PCBIT;1RRNMREADME.pcbitPX$$$TFe:jj ~~//~e: README.SC;1RRNMREADME.scPX$$$TFe:jj wwe:README.SYNCPPP;1RRNMREADME.syncpppPX$$$TFe:jj qqe: README.X25;1RRNMREADME.x25PX$$$TFe:jj e: SYNCPPP.FAQ;1RRNMsyncPPP.FAQPX$$$TFe:jj f99f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | e: 00-INDEX.;1RRNM 00-INDEXPX$$$TFe:jj  e:KERNEL-OPTIONS.TXT;1RRNMkernel-options.txtPX$$$TFe:jj f::f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | e% 00-INDEX.;1RRNM 00-INDEXPX$$$TFe%jj  e%PPC_HTAB.TXT;1RRNMppc_htab.txtPX$$$TFe%jj z iie% SMP.TXT;1RRNM smp.txtPX$$$TFe%jj ~ H He% SOUND.TXT;1RRNMsound.txtPX$$$TFe%jj  qqe%ZIMAGE_LAYOUT.TXT;1RRNMzImage_layout.txtPX$$$TFe%jj f;;f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j x   e:FS.TXT;1RRNM fs.txtPX$$$TFe:jj ! !e: KERNEL.TXT;1RRNMkernel.txtPX$$$TFe:jj x% %W We: README.;1RRNM READMEPX$$$TFe:jj ' 'e: SUNRPC.TXT;1RRNMsunrpc.txtPX$$$TFe:jj x( ( e:VM.TXT;1RRNM vm.txtPX$$$TFe:jj f<<f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j x- -e; AD1816.;1RRNM AD1816PX$$$TFe;jj t0 0e;ALS.;1RRNMALSPX$$$TFe;jj 2 2e;AUDIOEXCELDSP16.;1RRNMAudioExcelDSP16PX$$$TFe;jj x4 4e:AWE32.;1RRNM AWE32PX$$$TFe:jj 7 711e;CHANGELOG.AWE;1RRNMChangeLog.awePX$$$TFe;jj ; ;e;CHANGELOG.MULTISOUND;1RRNMChangeLog.multisoundPX$$$TFe;jj |> >e; CMI8330.;1RRNM CMI8330PX$$$TFe;jj |@ @e; CMI8338.;1RRNM CMI8338PX$$$TFe;jj xA Ae: CS4232.;1RRNM CS4232PX$$$TFe:jj xB B||e; ES1370.;1RRNM es1370PX$$$TFe;jj xD De; ES1371.;1RRNM es1371PX$$$TFe;jj tE Ee;ESS.;1RRNMESSPX$$$TFe;jj |F F88e: ESS1868.;1RRNM ESS1868PX$$$TFe:jj H He; INSTALL.AWE;1RRNMINSTALL.awePX$$$TFe;jj J Jj55je;INTRODUCTION.;1RRNMIntroductionPX$$$TFe;jj xQ QDDe:MAD16.;1RRNM MAD16PX$$$TFe:jj |R Re: MAESTRO.;1RRNM MaestroPX$$$TFe:jj |U U e% MAESTRO3.;1RRNM Maestro3PX$$$TFe%jj W We; MULTISOUND.;1RRNMMultiSoundPX$$$TFe;jj xj je;MWAVE.;1RRNM mwavePX$$$TFe;jj xm ma--ae;NM256.;1RRNM NM256PX$$$TFe;jj ts se:OPL3.;1RRNM OPL3PX$$$TFe:jj |t te; OPL3-SA.;1RRNM OPL3-SAPX$$$TFe;jj |v ve; OPL3-SA2.;1RRNM OPL3-SA2PX$$$TFe;jj ty yLLe:OPTI.;1RRNM OptiPX$$$TFe:jj |} }e; PCM1-PRO.;1RRNM PCM1-proPX$$$TFe;jj t~ ~e;PSS.;1RRNMPSSPX$$$TFe;jj    e;PSS-UPDATES.;1RRNMPSS-updatesPX$$$TFe;jj  - -e; README.AWE;1RRNMREADME.awePX$$$TFe;jj  e;README.MODULES;1RRNMREADME.modulesPX$$$TFe;jj  e; README.OSS;1RRNMREADME.OSSPX$$$TFe;jj x e;SOLO1.;1RRNM solo1PX$$$TFe;jj  [ [e; SONICVIBES.;1RRNMsonicvibesPX$$$TFe;jj  e:SOUNDBLASTER.;1RRNMSoundblasterPX$$$TFe:jj | e; SOUNDPRO.;1RRNM SoundProPX$$$TFe;jj |  e; TROPEZ+.;1RRNM Tropez+PX$$$TFe;jj  e: ULTRASOUND.;1RRNMultrasoundPX$$$TFe:jj  e;VIA-CHIPSET.;1RRNMVIA-chipsetPX$$$TFe;jj | f " VIBRA16.;1RRNM VIBRA16PX$$$TFf "jj x 7,,7e;VWSND.;1RRNM vwsndPX$$$TFe;jj  22e; WAVEFRONT.;1RRNMWavefrontPX$$$TFe;jj f??f RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | sDDse ' API.HTML;1RRNM API.htmlPX$$$TFe 'jj r@@f BTTVRRNM bttvPX$mAAmTFf jj ~ Ϩ88e; CQCAM.TXT;1RRNMCQcam.txtPX$$$TFe;jj  e;RADIOTRACK.TXT;1RRNMradiotrack.txtPX$$$TFe;jj  e; README.BUZ;1RRNMREADME.buzPX$$$TFe;jj  ފe; README.CPIA;1RRNMREADME.cpiaPX$$$TFe;jj f@@f RRPX$mAAmTFf j!j f??f RRPX$mAAmTFf j!j x e;CARDS.;1RRNM CARDSPX$$$TFe;jj  e;CONTRIBUTORS.;1RRNMCONTRIBUTORSPX$$$TFe;jj t e;ICS.;1RRNMICsPX$$$TFe;jj | e; INSTALL.;1RRNM INSTALLPX$$$TFe;jj | p pe; PROBLEMS.;1RRNM PROBLEMSPX$$$TFe;jj x e; README.;1RRNM READMEPX$$$TFe;jj  e;README.FIRST;1RRNMREADME.FIRSTPX$$$TFe;jj  e;README.HAUPPAUGE;1RRNMREADME.HauppaugePX$$$TFe;jj  zze; README.MIRO;1RRNMREADME.MIROPX$$$TFe;jj  e; README.PCI;1RRNMREADME.PCIPX$$$TFe;jj  ++e;README.RADIO;1RRNMREADME.RADIOPX$$$TFe;jj  e;README.WINVIEW;1RRNMREADME.WINVIEWPX$$$TFe;jj x BBe; THANKS.;1RRNM THANKSPX$$$TFe;jj fAAf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | $99$e; BOOT.TXT;1RRNM boot.txtPX$$$TFe;jj  e;ZERO-PAGE.TXT;1RRNMzero-page.txtPX$$$TFe;jj fBBf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | e; 00-INDEX.;1RRNM 00-INDEXPX$$$TFe;jj  66e;FRAMEBUFFER.TXT;1RRNMframebuffer.txtPX$$$TFe;jj  w we;INTERNALS.TXT;1RRNMinternals.txtPX$$$TFe;jj  ;;e;MATROXFB.TXT;1RRNMmatroxfb.txtPX$$$TFe;jj ~ e; TGAFB.TXT;1RRNMtgafb.txtPX$$$TFe;jj  77e; VESAFB.TXT;1RRNMvesafb.txtPX$$$TFe;jj fCCf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j | e; 00-INDEX.;1RRNM 00-INDEXPX$$$TFe;jj  e;BUG-LIST.TXT;1RRNMbug-list.txtPX$$$TFe;jj  e;COMMANDS.TXT;1RRNMcommands.txtPX$$$TFe;jj  OOe;CONFIG-LANGUAGE.TXT;1RRNMconfig-language.txtPX$$$TFe;jj fDDf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j  e; NETWINDER.;1RRNMNetwinderPX$$$TFe;jj tEEf NWFPERRNM nwfpePX$mAAmTFf jj x! !e; README.;1RRNM READMEPX$$$TFe;jj fEEf RRPX$mAAmTFf j!j fDDf RRPX$mAAmTFf j!j x$ $e;NOTES.;1RRNM NOTESPX$$$TFe;jj x% %e; README.;1RRNM READMEPX$$$TFe;jj ' 'e; README.FPE;1RRNMREADME.FPEPX$$$TFe;jj t+ + e;TODO.;1RRNM TODOPX$$$TFe;jj fFFf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j z- -e ' CDS.TXT;1RRNM cds.txtPX$$$TFe 'jj tA A= =e;DASD.;1RRNM DASDPX$$$TFe;jj C CXvvXe 'DEBUGGING390.TXT;1RRNMDebugging390.txtPX$$$TFe 'jj r re 'S390DUMP.TXT;1RRNMs390dump.txtPX$$$TFe 'jj tu ue 'TAPE.;1RRNM TAPEPX$$$TFe 'jj ~x xe; XPRAM.TXT;1RRNMxpram.txtPX$$$TFe;jj fGGf RRPX$mAAmTFf j!j f))00g/RRPX$mAAmTFg/j!j z{ {D99De; IXJ.TXT;1RRNM ixj.txtPX$$$TFe;jj fHHf  RRPX$mAAmTFf  j!j f))00g/RRPX$mAAmTFg/j!j z MMe  ACM.TXT;1RRNM acm.txtPX$$$TFe jj  e BLUETOOTH.TXT;1RRNMbluetooth.txtPX$$$TFe jj | e  CREDITS.;1RRNM CREDITSPX$$$TFe jj ~ e  DC2XX.TXT;1RRNMdc2xx.txtPX$$$TFe jj  e ERROR-CODES.TXT;1RRNMerror-codes.txtPX$$$TFe jj  77e  IBMCAM.TXT;1RRNMibmcam.txtPX$$$TFe jj ~ ..e  INPUT.TXT;1RRNMinput.txtPX$$$TFe jj | e  OHCI.TXT;1RRNM ohci.txtPX$$$TFe jj ~ &&f   OV511.TXT;1RRNMov511.txtPX$$$TFf  jj  G''Ge PROC_USB_INFO.TXT;1RRNMproc_usb_info.txtPX$$$TFe jj z ##e  RIO.TXT;1RRNM rio.txtPX$$$TFe jj  &&e  SCANNER.TXT;1RRNMscanner.txtPX$$$TFe jj   e SCANNER-HP-SANE.TXT;1RRNMscanner-hp-sane.txtPX$$$TFe jj | e  UHCI.TXT;1RRNM uhci.txtPX$$$TFe jj z WWe  URB.TXT;1RRNM URB.txtPX$$$TFe jj  wwe USB-HELP.TXT;1RRNMusb-help.txtPX$$$TFe jj  &&e 'USB-SERIAL.TXT;1RRNMusb-serial.txtPX$$$TFe 'jj fJJg !4RRPX$mAAmTFg !4j!j fg (,RRPX$mAAmTFg (,j!j rKKg 362.2RRNM 2.2.25PX$mAAm TFg 36jj fKKg 36RRPX$mAAm TFg 36j!j fJJg !4RRPX$mAAmTFg !4j!j tLLg BLOCKRRNM blockPX$mAAmTFg jj pUUg FC4RRNMfc4PX$mAAmTFg jj nQQ g FSRRNMfsPX$mAAmTFg jj rOOg IPV4RRNM ipv4PX$mAAmTFg jj rVVg MISCRRNM miscPX$mAAmTFg jj  g  MODULES.DEP;1RRNMmodules.depPX$$$TFg jj pMMg NETRRNMnetPX$mAAmTFg jj rPPg SCSIRRNM scsiPX$mAAmTFg jj fLLg RRPX$mAAmTFg j!j fKKg 36RRPX$mAAm TFg 36j!j  ĀRRg IDE-FLOPPY.O;1RRNMide-floppy.oPX$$$TFg jj  xxg  IDE-TAPE.O;1RRNMide-tape.oPX$$$TFg jj | g  LINEAR.O;1RRNM linear.oPX$$$TFg jj x xAAxg LOOP.O;1RRNM loop.oPX$$$TFg jj v 33g NBD.O;1RRNM nbd.oPX$$$TFg jj z HHg  RAID0.O;1RRNM raid0.oPX$$$TFg jj z @<<@g  RAID1.O;1RRNM raid1.oPX$$$TFg jj z 8oo8g  RAID5.O;1RRNM raid5.oPX$$$TFg jj fMMg RRPX$mAAmTFg j!j fKKg 36RRPX$mAAm TFg 36j!j z g  3C59X.O;1RRNM 3c59x.oPX$$$TFg jj x' 'X44Xg 8390.O;1RRNM 8390.oPX$$$TFg jj ~. .g  BONDING.O;1RRNMbonding.oPX$$$TFg jj 1 1g  BSD_COMP.O;1RRNMbsd_comp.oPX$$$TFg jj z5 5$$g  DE4X5.O;1RRNM de4x5.oPX$$$TFg jj zZ Zg  DUMMY.O;1RRNM dummy.oPX$$$TFg jj \ \g  EEPRO100.O;1RRNMeepro100.oPX$$$TFg jj p pg  MYRI_SBUS.O;1RRNMmyri_sbus.oPX$$$TFg jj  --g  NE2K-PCI.O;1RRNMne2k-pci.oPX$$$TFg jj v PPg PPP.O;1RRNM ppp.oPX$$$TFg jj  g PPP_DEFLATE.O;1RRNMppp_deflate.oPX$$$TFg jj ~ (ee(g  RTL8139.O;1RRNMrtl8139.oPX$$$TFg jj ~  g  SK98LIN.O;1RRNMsk98lin.oPX$$$TFg jj xP Pg SKFP.O;1RRNM skfp.oPX$$$TFg jj x $$g SLHC.O;1RRNM slhc.oPX$$$TFg jj x PSSPg SLIP.O;1RRNM slip.oPX$$$TFg jj  hyyhg  STARFIRE.O;1RRNMstarfire.oPX$$$TFg jj ~ h\\hg  SUNBMAC.O;1RRNMsunbmac.oPX$$$TFg jj | 88g  SUNHME.O;1RRNM sunhme.oPX$$$TFg jj z KKg  SUNQE.O;1RRNM sunqe.oPX$$$TFg jj fOOg RRPX$mAAmTFg j!j fKKg 36RRPX$mAAm TFg 36j!j x 66g IPIP.O;1RRNM ipip.oPX$$$TFg jj |# #AAg  IP_GRE.O;1RRNM ip_gre.oPX$$$TFg jj , ,H Hg IP_MASQ_AUTOFW.O;1RRNMip_masq_autofw.oPX$$$TFg jj 1 1g IP_MASQ_CUSEEME.O;1RRNMip_masq_cuseeme.oPX$$$TFg jj 4 4''g IP_MASQ_FTP.O;1RRNMip_masq_ftp.oPX$$$TFg jj 9 9HHg IP_MASQ_IRC.O;1RRNMip_masq_irc.oPX$$$TFg jj = =--g IP_MASQ_MFW.O;1RRNMip_masq_mfw.oPX$$$TFg jj C C g IP_MASQ_PORTFW.O;1RRNMip_masq_portfw.oPX$$$TFg jj H H@@g IP_MASQ_QUAKE.O;1RRNMip_masq_quake.oPX$$$TFg jj K K``g IP_MASQ_RAUDIO.O;1RRNMip_masq_raudio.oPX$$$TFg jj O O` `g IP_MASQ_USER.O;1RRNMip_masq_user.oPX$$$TFg jj T Tg IP_MASQ_VDOLIVE.O;1RRNMip_masq_vdolive.oPX$$$TFg jj xW W##g RARP.O;1RRNM rarp.oPX$$$TFg jj fPPg RRPX$mAAmTFg j!j fKKg 36RRPX$mAAm TFg 36j!j ~\ \eeg  AIC7XXX.O;1RRNMaic7xxx.oPX$$$TFg jj x ""g FCAL.O;1RRNM fcal.oPX$$$TFg jj  IIg  IDE-SCSI.O;1RRNMide-scsi.oPX$$$TFg jj z P((Pg  PLUTO.O;1RRNM pluto.oPX$$$TFg jj  ((g  QLOGICISP.O;1RRNMqlogicisp.oPX$$$TFg jj  g  QLOGICPTI.O;1RRNMqlogicpti.oPX$$$TFg jj t jjg SG.O;1RRNM sg.oPX$$$TFg jj t Ȧg ST.O;1RRNM st.oPX$$$TFg jj g  SYM53C8XX.O;1RRNMsym53c8xx.oPX$$$TFg jj fQQ g RRPX$mAAmTFg j!j fKKg 36RRPX$mAAm TFg 36j!j |EEWWg  AUTOFS.O;1RRNM autofs.oPX$$$TFg jj PPg BINFMT_JAVA.O;1RRNMbinfmt_java.oPX$$$TFg jj SS ,, g BINFMT_MISC.O;1RRNMbinfmt_misc.oPX$$$TFg jj xYY0II0g CODA.O;1RRNM coda.oPX$$$TFg jj vCCg EFS.O;1RRNM efs.oPX$$$TFg jj v22g FAT.O;1RRNM fat.oPX$$$TFg jj xSSg HPFS.O;1RRNM hpfs.oPX$$$TFg jj zg  MINIX.O;1RRNM minix.oPX$$$TFg jj z<!!>f /#LIBNCURSES.001;1RRNMlibncurses.soPX$mmSLlibncurses.so.4.0TFj j!j >!!>f /#LIBNCURSES.SO;1RRNMlibncurses.so.4PX$mmSLlibncurses.so.4.0TFj j!j >!!>f -)LIBREADLINE.000;1RRNMlibreadline.soPX$mmSLlibreadline.so.3.0TFjj!j>!!>f -)LIBREADLINE.001;1RRNMlibreadline.so.3PX$mmSLlibreadline.so.3.0TFj j!j >!!>hhf -)LIBREADLINE.SO;1RRNMlibreadline.so.3.0PX$mmTFf -)jj fddf  ;*RRPX$mAAmTFf  ;*j!jf\\f  2RRPX$mAAmTFf  2j!jpeef2BINRRNMbinPX$mAAmTFf2jjpfff  '2LIBRRNMlibPX$mAAmTFf  '2jjrggj'ROOTRRNM rootPX$mAAmTFj'jj'rhhf  )!SBINRRNM sbinPX$mAAmTFf  )!jjpiid USRRRNMusrPX$mAAmTFd jjfeef2RRPX$mAAmTFf2j!jfddf  ;*RRPX$mAAmTFf  ;*j!jt!!``f  FIND.;1RRNM findPX$mmTFf  jjt!!++f  $FTP.;1RRNMftpPX$mmTFf  $jjt!!llf  *MORE.;1RRNM morePX$mmTFf  *jjp!!f  0PS.;1RRNMpsPX$mmTFf  0jjt "" f  8SED.;1RRNMsedPX$mmTFf  8jjt%""% xx f  SORT.;1RRNM sortPX$mmTFf  jjt5""511f  UNIQ.;1RRNM uniqPX$mmTFf  jjt<""<00f  'VIM.;1RRNMvimPX$mmTFf  'jjffff  '2RRPX$mAAmTFf  '2j!jfddf  ;*RRPX$mAAmTFf  ;*j!j""f  '2 LIBNSL.SO;1RRNMlibnsl.so.1PX$mmSLlibnsl-2.1.3.soTFjj!j""HHf  '2 LIBNSL-2.1;1RRNMlibnsl-2.1.3.soPX$mmTFf  '2jjfggj'RRPX$mAAmTFj'j!j'fddf  ;*RRPX$mAAmTFf  ;*j!j~!##!j' HOWTO.ISO;1RRNMHOWTO.isoPX$$$TFj'jj'fhhf  )!RRPX$mAAmTFf  )!j!jfddf  ;*RRPX$mAAmTFf  ;*j!jx%##%GGf  )! INSMOD.;1RRNM insmodPX$mmTFf  )!jjN##Nf  )! MODPROBE.;1RRNM modprobePX$mmSL insmodTFjj!j|N##Nf  )' PORTMAP.;1RRNM portmapPX$mmTFf  )'jjfiid RRPX$mAAmTFd j!jfddf  ;*RRPX$mAAmTFf  ;*j!jpjjf  *3LIBRRNMlibPX$mAAmTFf  *3jjfjjf  *3RRPX$mAAmTFf  *3j!jfiid RRPX$mAAmTFd j!j_##_f  *3LIBNCURSES.000;1RRNMlibncurses.so.4.0PX$mmTFf  *3jj##f  *3LIBNCURSES.001;1RRNMlibncurses.soPX$mmSLlibncurses.so.4.0TFjj!j##f  *3LIBNCURSES.SO;1RRNMlibncurses.so.4PX$mmSLlibncurses.so.4.0TFjj!j##f  *3LIBREADLINE.000;1RRNMlibreadline.soPX$mmSLlibreadline.so.3.0TFjj!j##f  *3LIBREADLINE.001;1RRNMlibreadline.so.3PX$mmSLlibreadline.so.3.0TFjj!j##TTf  *3LIBREADLINE.SO;1RRNMlibreadline.so.3.0PX$mmTFf  *3jj"kkf  )"kkf  )*f  94boot(e 5"dev(jetc0llg (,modules*jsbin,f  2 utils"llg (,"kkf  )<wwg/Documentation0AhhAd#MAKEDEV,mmg '4 sparc0g !4sparc64"mmg '4"llg (,.nng ): 2.2.25"nng ):"mmg '4,oog )4 block(uug )8fc4&ssg )8fs*qqg )5ipv4*vvg ):misc(ppg )5net*rrg )6scsi"oog )4"nng ):2 g )4linear.o.,44,g )4 loop.o,X((Xg )4 nbd.o0ʈg )4raid0.o0ͬ00g )4raid1.o0^^g )4raid5.o"ppg )5"nng ):4g )5bonding.o6g )4bsd_comp.o0 g )5dummy.o844g )5myri_sbus.o,TTg )4 ppp.o<33``g )5ppp_deflate.o.JJg )5 slhc.o.NN4CC4g )5 slip.o4WWJJg )5sunbmac.o2aag )5sunhme.o088g )5sunqe.o"qqg )5"nng ):244g )5ip_gre.oBDDg )5 ip_masq_autofw.oD g )5"ip_masq_cuseeme.o<g )5ip_masq_ftp.o<g )5ip_masq_irc.o<P""Pg )5ip_masq_mfw.oBg )5 ip_masq_portfw.o@ddg )5ip_masq_quake.oBg )5 ip_masq_raudio.o>88g )5ip_masq_user.oDg )5"ip_masq_vdolive.o.++g )5 ipip.o.g )5 rarp.o"rrg )6"nng ):.g )6 fcal.o0g )6pluto.o8ƈg )6qlogicpti.o*$\\$g )6sg.o*ؑg )6st.o"ssg )8"nng ):2FFg )7autofs.o< g )7binfmt_java.o<0##0g )7binfmt_misc.o.g )6 coda.o,;;[[g )6 fat.o.WW@@g )7 hpfs.o0``DDg )6minix.o0uu00g )6msdos.o0||Ƥg )7ncpfs.o.g )7 nfsd.o8``g )7nls_cp437.o8g )7nls_cp737.o8g )7nls_cp775.o8g )7nls_cp850.o8g )7nls_cp852.o8g )7nls_cp855.o8g )7nls_cp857.o8<>g ):cs4231.o.eeg ): dbri.o,L!!Lg ): dmy.o,vvg ): ipx.o6D))Dg ):openprom.o4ppg ):softdog.o"wwg/"llg (,2IIe:00-INDEX8  ppe9BUG-HUNTING0  kke%Changes8**х g/Configure.helpB}}>99>e ' Debugging390.txt8e:IO-APIC.txt>e:IO-mapping.txt<e 'README.DAC9608e;README.moxa0e8SMP.txtD[[f ""SubmittingDriversFe:$VGA-softcursor.txt(f arm@NNe%binfmt_misc.txt4  --e 'cciss.txt,~~f  cdrom<  OOe 'computone.txt:{{` `e;cpqarray.txt8kke%devices.txt<a%%ae:digiboard.txt:e:digiepca.txt<S//Se:exception.txt&f fb8zzf filesystems411e:ftape.txt<e:hayes-esp.txt*f i386:e 'i810_rng.txt0&bb&e:ide.txt6--e:initrd.txtBe ' ioctl-number.txt*f isdn2  e:java.txtB%%e; joystick-api.txtJ""OOe;(joystick-parport.txt:bssbe8joystick.txt.f  kbuild@,,ppe%kernel-docs.txtL;;e;*kernel-parameters.txt2??e;kmod.txt4@@ e:knfsd.txt4BB e:locks.txt2DD??e:logo.gif2LL33e:logo.txt*f m68kBMMeee: magic-number.txt<PPtte:mandatory.txt0TT..e:mca.txt.ZZ@@e: md.txt6[[L Le:memory.txt8]]e;mkdev.cciss4^^  e;mkdev.ida8__r""re8modules.txt:ddoAAoe;moxa-smartio2mm##e;mtrr.txt0rr e:nbd.txt6{{f networking8ttZ Ze:nfsroot.txtByy@@e; nmi_watchdog.txtBzzd%%de: oops-tracing.txt6BBe:paride.txt8e 'parport.txt0e;pci.txtDcce:"pcwd-watchdog.txt0f powerpc2e 'proc.txt8!!e9ramdisk.txt8rre:riscom8.txt0* *e%rtc.txt*f s3902e8scsi.txtFf fe:$serial-console.txt<ʦe;sgi-visws.txtBk ke: smart-config.txt0EEe9smp.tex0WWe;smp.txt,f  sound<2;;2e:specialix.txt<  e:spinlocks.txt:GGe:stallion.txt2B88Be:svga.txt.M,,Me; sx.txt.f  sysctl4e:sysrq.txt4f telephony8((e8unicode.txt(f  usb8f video4linux:& &e9watchdog.txt@ e:xterm-linux.xpm"zzf "wwg/2  e800-INDEX2  e8adfs.txt2   e8affs.txt2==e8coda.txt8**((e 'fat_cvf.txt200e8hpfs.txt411e8isofs.txt>22e%minix-part.txt433zze8ncpfs.txt244iie8ntfs.txt455!!e8romfs.txt4:: e8smbfs.txt8<<e8sysv-fs.txt0==e8ufs.txt6>>V Ve8umsdos.txt2@@ )) e8vfat.txt0FFGGe 'vfs.txt"{{f "wwg/2OOO Oe900-INDEX4QQiie93c505.txt4RRe96pack.txt:vve9Configurable4e9DLINK.txt2lle9PLIP.txt<%%e9README.sb1000:wwe9README.xpeed4VVe9alias.txtHccMMe9&arcnet-hardware.txt6WW]]e9arcnet.txt2e9ax25.txt6{{e9baycom.txt8cce9bonding.txt2((e9comx.txt2 e9cops.txt6YYe%cs89x0.txt4!!e9de4x5.txt4e9depca.txt2e9dgrs.txt2u ue9dmfe.txt0`55`e9eql.txt: e9ethertap.txt477e9ewrk3.txt6e9filter.txt>єe9framerelay.txt<ӭe 'ip-sysctl.txt>ٳe9ip_dynaddr.txt0}}f ip_masq4 e9ipddp.txt2``e9irda.txt@۲%%e9lapb-module.txt2e9ltpc.txt<e9multicast.txt8@@e9ncsa-telnet@''e9net-modules.txt8F Fe9olympic.txtFe9$policy-routing.txt0e9ppp.txt. e9 pt.txt8  e9routing.txt6XXe9shaper.txt6l%%le9sis900.txt8'EE'e 'sk98lin.txt2  e9skfp.txt2HHe9sktr.txt2;;e9smc9.txt> e9soundmodem.txt0e9tcp.txt2 e9tlan.txt4e9tulip.txt6,,e%vortex.txt>##2**2e9wan-router.txt8))6$$6e9wanpipe.txt8..66e9wavelan.txt<11e9x25-iface.txt0//%%e9x25.txt:22PPe8z8530drv.txt"}}f "{{f B==e9 ip_masq-API-ex.c4>>f fe%rc.masqfw"~~f "wwg/2@@e900-INDEX2e9Makefile,AAwwe9 aztcdFWWʬe9$cdrom-standard.tex.qqe9 cdu31a,uu22e9 cm206*xxe9gscd.zzPPe9 ide-cd,GGe9 isp16(e9mcd*rre9mcdx,e9 optcd,e9 sbpcd*_ _e9sjcd4e9sonycd535"f "wwg/2e%00-INDEX0e:CREDITS6e 'HiSax.cert4]oo]f "INTERFACE<f "INTERFACE.fax.qqe: README6e:README.FAQ:ߞZZe 'README.HiSax> f "README.act2000:AAf "README.audio:))e:README.avmb1<))f "README.concapBOOe% README.diversion: f "README.eicon6WWe%README.fax>e%README.hfc-pci:  f "README.hysdn6f "README.icn:e:README.pcbit4~//~e:README.sc>wwe:README.syncppp6qqe:README.x258e:syncPPP.FAQ"f "wwg/2 e:00-INDEXF e:$kernel-options.txt"f "wwg/2 e%00-INDEX: e%ppc_htab.txt0 iie%smp.txt4 H He%sound.txtD qqe%"zImage_layout.txt"f "wwg/.% %W We: README.   e: fs.txt6! !e:kernel.txt6' 'e:sunrpc.txt.( ( e: vm.txt"f "wwg/.- -e; AD1816(0 0e;ALS,4 4e: AWE32@2 2e;AudioExcelDSP160> >e;CMI83300@ @e;CMI8338.A Ae: CS4232<7 711e;ChangeLog.aweJ; ;e;(ChangeLog.multisound(E Ee;ESS0F F88e:ESS18688H He;INSTALL.awe:J Jj55je;Introduction,Q QDDe: MAD160R Re:Maestro2U U e%Maestro36W We;MultiSound,m ma--ae; NM256*s se:OPL30t te;OPL3-SA2v ve;OPL3-SA2*y yLLe:Opti2} }e;PCM1-pro(~ ~e;PSS8   e;PSS-updates6 e;README.OSS6 - -e;README.awe> e;README.modules2 e;SoundPro: e:Soundblaster0  e;Tropez+8 e;VIA-chipset0 f "VIBRA164 22e;Wavefront.B B||e; es1370.D De; es1371,j je; mwave, e; solo16 [ [e;sonicvibes6 e:ultrasound, 7,,7e; vwsnd"f "wwg/2 sDDse 'API.html4 Ϩ88e;CQcam.txt6 e;README.buz8 ފe;README.cpia*f bttv> e;radiotrack.txt"f "f , e; CARDS: e;CONTRIBUTORS( e;ICs0 e;INSTALL2 p pe;PROBLEMS. e; README: e;README.FIRSTB e; README.Hauppauge8 zze;README.MIRO6 e;README.PCI: ++e;README.RADIO> e;README.WINVIEW. BBe; THANKS"f "wwg/2 $99$e;boot.txt< e;zero-page.txt"f "wwg/2 e;00-INDEX@ 66e;framebuffer.txt< w we;internals.txt: ;;e;matroxfb.txt4 e;tgafb.txt6 77e;vesafb.txt"f "wwg/2 e;00-INDEX: e;bug-list.txt: e;commands.txtH OOe;&config-language.txt"f "wwg/4 e;Netwinder.! !e; README,f  nwfpe"f "f ,$ $e; NOTES.% %e; README6' 'e;README.FPE*+ + e;TODO"f "wwg/*A A= =e;DASDBC CXvvXe ' Debugging390.txt*u ue 'TAPE0- -e 'cds.txt:r re 's390dump.txt4x xe;xpram.txt"f "wwg/0{ {D99De;ixj.txt"f  "wwg/0 e CREDITS0 WWe URB.txt0 MMe acm.txt< e bluetooth.txt4 e dc2xx.txt@ e error-codes.txt6 77e ibmcam.txt4 ..e input.txt2 e ohci.txt4 &&f  ov511.txtD G''Ge "proc_usb_info.txt0 ##e rio.txtH  e &scanner-hp-sane.txt8 &&e scanner.txt2 e uhci.txt: wwe usb-help.txt> &&e 'usb-serial.txt"g !4"llg (,.g 36 2.2.25"g 36"g !4,g  block(g fc4&g fs*g ipv4*g misc8 g modules.dep(g net*g scsi"g "g 36: ĀRRg ide-floppy.o6 xxg ide-tape.o2 g linear.o. xAAxg  loop.o, 33g  nbd.o0 HHg raid0.o0 @<<@g raid1.o0 8oo8g raid5.o"g "g 360 g 3c59x.o.' 'X44Xg  8390.o4. .g bonding.o61 1g bsd_comp.o05 5$$g de4x5.o0Z Zg dummy.o6\ \g eepro100.o8p pg myri_sbus.o6 --g ne2k-pci.o, PPg  ppp.o< g ppp_deflate.o4 (ee(g rtl8139.o4  g sk98lin.o.P Pg  skfp.o. $$g  slhc.o. PSSPg  slip.o6 hyyhg starfire.o4 h\\hg sunbmac.o2 88g sunhme.o0 KKg sunqe.o"g "g 362# #AAg ip_gre.oB, ,H Hg  ip_masq_autofw.oD1 1g "ip_masq_cuseeme.o<4 4''g ip_masq_ftp.o<9 9HHg ip_masq_irc.o<= =--g ip_masq_mfw.oBC C g  ip_masq_portfw.o@H H@@g ip_masq_quake.oBK K``g  ip_masq_raudio.o>O O` `g ip_masq_user.oDT Tg "ip_masq_vdolive.o. 66g  ipip.o.W W##g  rarp.o"g "g 364\ \eeg aic7xxx.o. ""g  fcal.o6 IIg ide-scsi.o0 P((Pg pluto.o8 ((g qlogicisp.o8 g qlogicpti.o* jjg sg.o* Ȧg st.o8g sym53c8xx.o"g "g 362EEWWg autofs.o<PPg binfmt_java.o<SS ,, g binfmt_misc.o.YY0II0g  coda.o,CCg  efs.o,22g  fat.o.SSg  hpfs.o0g minix.o0<!!>f /#libncurses.so@>!!>f /#libncurses.so.4D f /#"libncurses.so.4.0>>!!>f -)libreadline.soB>!!>f -) libreadline.so.3F>!!>hhf -)$libreadline.so.3.0"f  ;*"f  2(f2bin(f  '2lib*j'root*f  )!sbin(d usr"f2"f  ;**!!``f  find(!!++f  $ftp*!!llf  *more&!!f  0ps( "" f  8sed*%""% xx f  sort*5""511f  uniq(<""<00f  'vim"f  '2"f  ;*@""HHf  '2libnsl-2.1.3.so8""f  '2libnsl.so.1"j'"f  ;*4!##!j'HOWTO.iso"f  )!"f  ;*.%##%GGf  )! insmod2N##Nf  )!modprobe0N##Nf  )'portmap"d "f  ;*(f  *3lib"f  *3"d <##f  *3libncurses.so@##f  *3libncurses.so.4D_##_f  *3"libncurses.so.4.0>##f  *3libreadline.soB##f  *3 libreadline.so.3F##TTf  *3$libreadline.so.3.0ER TRRIP_1991ATHE ROCK RIDGE INTERCHANGE PROTOCOL PROVIDES SUPPORT FOR POSIX FILE SYSTEM SEMANTICSPLEASE CONTACT DISC PUBLISHER FOR SPECIFICATION SOURCE. SEE PUBLISHER IDENTIFIER IN PRIMARY VOLUME DESCRIPTOR FOR CONTACT INFORMATION.#!/bin/bash - RCSID='$Id: MAKEDEV 2.3 1997/09/29 19:03:13 johnsonm Exp $' #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # Customisation: # The devices fall into various classes. This section contains the mapping # from a class name into a group name and permission. # You will almost certainly need to edit the group name to match your # system, and you may change the permissions to suit your preference. These # lines _must_ be of the format "user group perm". public=" root sys 666" private=" root sys 600" system=" root sys 660" kmem=" root kmem 660" tty=" root tty 666" cons=" root tty 622" # 622 for console? vcs=" root sys 600" dialout=" root uucp 660" mouse=" root sys 666" printer=" root daemon 660" floppy=" root floppy 660" disk=" root disk 660" scsi=" root sys 600" cdrom=" root disk 660" tape=" root disk 660" audio=" root sys 666" ibcs2=" root sys 666" scanner=" root sys 666" MAXVT=8 #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# procfs=/proc opt_v= opt_d= opt_n= while [ $# -ge 1 ] do case $1 in --) shift; break ;; -v) shift; opt_v=1 ;; -d) shift; opt_d=1 ;; -n) shift; opt_n=1; opt_v=1 ;; -V) shift; opt_V=1 ;; -*) echo "$0: unknown flag \"$1\"" >&2; exit 1 ;; *) break ;; esac done if [ "$opt_V" ] then echo "$RCSID" exit 0 fi opts="${opt_n:+-n} ${opt_v:+-v} ${opt_d:+-d}" #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# makedev () { # usage: makedev name [bcu] major minor owner group mode if [ "$opt_v" ] then if [ "$opt_d" ] then echo "delete $1" else echo "create $1 $2 $3 $4 $5:$6 $7" fi fi if [ ! "$opt_n" ] then if [ "$opt_d" ] then rm -f $1 else rm -f $1- mknod $1- $2 $3 $4 && chown $5:$6 $1- && chmod $7 $1- && mv $1- $1 fi fi } symlink () { # usage: symlink name target if [ "$opt_v" ] then if [ "$opt_d" ] then echo "delete $1" else echo "create $1 -> $2" fi fi [ ! "$opt_n" ] && rm -f $1 && [ ! "$opt_d" ] && ln -s $2 $1 } #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# # For bash and ksh, we can use faster builtin routines to do manipulation, # otherwise (ash) fall back to slower method using `expr'. # The extra level of indirection using `eval' is necessary a) for ksh, and # b) to get past ash. if [ "$RANDOM" != "$RANDOM" ] then math () { eval echo "\$(($*))" } index () { # index string c eval "I=\${1%$2*}" eval echo "\${#I}" } suffix () { eval echo "\${1#$2}" } strip () { eval echo "\${1% $2 *} \${1#* $2 }" } first () { eval echo "\${1:0:1}" } second () { eval echo "\${1:1:1}" } else math () { expr "$@" } index () { # index string c expr $1 : ".*$2" - 1 } suffix () { expr "$1" : "$2\(.*\)" } strip () { echo "[$1][$2]" >&2 echo "`expr \"$1\" : \"\(.*\) $2 \"` `expr \"$1\" : \".* $2 \(.*\)\"`" } first () { expr "$1" : "\(.\)" } second () { expr "$1" : ".\(.\)" } fi #---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---#---# devices= if [ ! -f $procfs/devices ] then echo "$0: warning: can't read $procfs/devices" >&2 else exec 3<$procfs/devices while read major device <&3 do case "$major" in Character|Block|'') ;; *) eval "major_$device=$major" devices="$devices $device" ;; esac done exec 3<&- fi Major () { device=$2 if [ "$opt_d" ] then echo -1 # don't care else eval echo \${major_$1:-\${device:?\"unknown major number for $1\"}} fi } cvt () { while [ $# -ne 0 ] do case "$1" in mem|tty|ttyp|cua|cub) ;; hd) (for d in a b c d e f g h ; do echo -n hd$d " " done) ; echo ;; ide0) echo hda hdb ;; ide1) echo hdc hdd ;; ide2) echo hde hdf ;; ide3) echo hdg hdh ;; sd) echo sda sdb sdc sdd ;; sr) echo scd0 ;; st) echo st0 ;; xd) echo xda xdb ;; fd) echo fd0 fd1 ;; lp) echo lp ;; mt) echo ftape ;; loop) echo loop ;; md) echo md ;; ibcs2) echo ibcs2 ;; tpqic02) echo qic ;; sound) echo audio ;; logiscan) echo logiscan ;; ac4096) echo ac4096 ;; hw) echo helloworld ;; sbpcd | sbpcd[123]) echo $1 ;; joystick) echo js ;; apm_bios) echo apm ;; dcf) echo dcf ;; aztcd) echo aztcd ;; pcmcia) ;; # taken care of by its own driver ttyC) echo cyclades ;; isdn) echo isdnmodem isdnbri dcbri ;; vcs) ;; *) echo "$0: don't know what \"$1\" is" >&2 ;; esac shift done } for arg do case $arg in generic) $0 $opts std $0 $opts fd $0 $opts fd0 fd1 $0 $opts hda hdb $0 $opts xda xdb $0 $opts sda sdb sdc sdd $0 $opts pty $0 $opts console $0 $opts ttyS0 ttyS1 ttyS2 ttyS3 $0 $opts busmice $0 $opts lp $0 $opts par ;; local) $0.local $opts ;; std) makedev mem c 1 1 $kmem makedev kmem c 1 2 $kmem makedev null c 1 3 $public makedev port c 1 4 $kmem makedev zero c 1 5 $public symlink core $procfs/kcore makedev full c 1 7 $public makedev random c 1 8 $public makedev urandom c 1 9 $public $0 ram makedev tty c 5 0 $tty ;; ram) for i in 0 1 2 3 4 5 6 7 ; do makedev ram$i b 1 $i $disk done ln -sf ram0 ram makedev initrd b 1 250 $disk ;; console) major=`Major vcs` # not fatal # console makedev tty0 c 4 0 $cons makedev console c 5 1 $cons [ "$major" ] && makedev vcs0 c $major 0 $vcs [ "$major" ] && makedev vcsa c $major 128 $vcs # individual vts line=1 while [ $line -le $MAXVT -a $line -le 63 ] do makedev tty$line c 4 $line $tty [ "$major" ] && makedev vcs$line c $major $line $vcs [ "$major" ] && makedev vcsa$line c $major `math $line + 128` $vcs line=`math $line + 1` done ;; tty[1-9]|tty[1-5][0-9]|tty[6][0-3]) line=`suffix $arg tty` makedev tty$line c 4 $line $tty ;; ttyS[0-9]|ttyS[1-5][0-9]|ttyS[6][0-3]) line=`suffix $arg ttyS` minor=`math 64 + $line` makedev ttyS$line c 4 $minor $dialout makedev cua$line c 5 $minor $dialout ;; pty[a-ep-z]) bank=`suffix $arg pty` base=`index pqrstuvwxyzabcde $bank` base=`math $base \* 16` for i in 0 1 2 3 4 5 6 7 8 9 a b c d e f do j=`index 0123456789abcdef $i` makedev pty$bank$i c 2 `math $base + $j` $tty makedev tty$bank$i c 3 `math $base + $j` $tty done ;; pty) ptysufs="" for i in p q r s t u v w x y z a b c d e do ptysufs="$ptysufs pty$i" done $0 $opts $ptysufs ;; cyclades|ttyC) major1=`Major ttyC 19` || continue #major2=`Major cub 20` || continue for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 do makedev ttyC$i c $major1 $i $dialout #makedev cub$i c $major2 $i $dialout done ;; stallion|ttyE) major1=`Major ttyE 24` || continue #major2=`Major cue 25` || continue majorc=28 minor=0 until [ $minor -gt 256 ] do makedev ttyE$minor c $major1 $minor $dialout #makedev cue$minor c $major2 $minor $dialout minor=`math minor + 1` done for i in 0 1 2 3 do makedev staliomem$i c $majorc $i $private done ;; chase|ttyH) major1=`Major ttyH 17` || continue #major2=`Major cuh 18` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyH$minor c $major1 $minor $dialout #makedev cuh$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; rocketport|ttyR) major1=`Major ttyR 46` || continue #major2=`Major cur 47` || continue minor=0 until [ $minor -gt 64 ] # tell me if 64 is wrong do makedev ttyR$minor c $major1 $minor $dialout #makedev cur$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; ttyV) major1=`Major ttyV 105` || continue #major2=`Major cuv 106` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyV$minor c $major1 $minor $dialout #makedev cuv$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; digi|ttyD) major1=`Major ttyD 22` || continue #major2=`Major cud 23` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyD$minor c $major1 $minor $dialout #makedev cud$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; specialix|ttyX) major1=`Major ttyX 32` || continue #major2=`Major cux 33` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyX$minor c $major1 $minor $dialout #makedev cux$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; specialixIO8|ttyW) major1=`Major ttyW 75` || continue #major2=`Major cuw 76` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyW$minor c $major1 $minor $dialout #makedev cuw$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; PAM|ttyM) major1=`Major ttyM 79` || continue #major2=`Major cum 80` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyM$minor c $major1 $minor $dialout #makedev cum$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; riscom|ttyL) major=`Major ttyL 48` || continue minor=0 until [ $minor -gt 16 ] # tell me if 16 is wrong do makedev ttyL$minor c $major $minor $dialout minor=`math minor + 1` done ;; computone|ttyF) major=`Major ttyF 71` || continue #major2=`Major cuf 72` || continue minor=0 until [ $minor -gt 255 ] do makedev ttyF$minor c $major $minor $dialout #makedev cuf$minor c $major2 $minor $dialout minor=`math minor + 1` done major=73 for i in 0 4 8 12 do makedev ip2ipl$i c $major $i $private makedev ip2stat$i c $major `math $i + 1` $private done ;; ESP|ttyP) major=`Major ttyP 57` || continue #major2=`Major cup 58` || continue minor=0 until [ $minor -gt 4 ] # tell me if 4 is wrong do makedev ttyP$minor c $major $minor $dialout #makedev cup$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; COMX|comx) major=`Major comx 88` || continue minor=0 until [ $minor -gt 4 ] # tell me if 4 is wrong do makedev comx$minor c $major $minor $private minor=`math minor + 1` done ;; isdnmodem|ttyI) major1=`Major ttyI 43` || continue #major2=`Major cui 44` || continue minor=0 until [ $minor -gt 63 ] do makedev ttyI$minor c $major1 $minor $dialout #makedev cui$minor c $major2 $minor $dialout minor=`math minor + 1` done ;; isdnbri) major=45 minor=0 until [ $minor -gt 63 ] do makedev isdn$minor c $major $minor $private makedev isdnctrl$minor c $major `math $minor + 64` $private makedev ippp$minor c $major `math $minor + 128` $private minor=`math minor + 1` done makedev isdninfo c $major 255 $private ;; dcbri) major=52 for i in 0 1 2 3 do makedev dcbri$i c $major $i $private done ;; capi) major=68 makedev capi20 c $major 0 $private for i in 0 1 2 3 4 5 6 7 8 9 do makedev capi20.0$i c $major `math $i + 1` $private done for i in 10 11 12 13 14 15 16 17 18 19 do makedev capi20.$i c $major `math $i + 1` $private done ;; scc) major1=`Major scc 34` || continue for i in 0 1 2 3 # more? do makedev scc$i c $major $i $private done ;; lp) major=`Major lp 6` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; par) major=`Major lp 6` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; parport) major=`Major parport 99` || continue makedev ${arg}0 c $major 0 $printer makedev ${arg}1 c $major 1 $printer makedev ${arg}2 c $major 2 $printer ;; slm) major=`Major slm 28` || continue for i in 0 1 2 3 do makedev slm c $major $i $printer done ;; busmice) major=`Major mouse 10` || continue makedev logimouse c $major 0 $mouse makedev psmouse c $major 1 $mouse makedev msmouse c $major 2 $mouse makedev atimouse c $major 3 $mouse makedev jmouse c $major 4 $mouse ;; js) major=`Major Joystick` || continue makedev js0 c $major 0 $mouse makedev js1 c $major 1 $mouse ;; fd[0-7]) major=`Major fd 2` || continue base=`suffix $arg fd` if [ $base -ge 4 ] then base=`math $base + 124` fi makedev ${arg} b $major $base $floppy makedev ${arg}d360 b $major `math $base + 4` $floppy makedev ${arg}h1200 b $major `math $base + 8` $floppy makedev ${arg}D360 b $major `math $base + 12` $floppy makedev ${arg}D720 b $major `math $base + 16` $floppy makedev ${arg}h360 b $major `math $base + 20` $floppy makedev ${arg}h720 b $major `math $base + 24` $floppy makedev ${arg}H1440 b $major `math $base + 28` $floppy makedev ${arg}E2880 b $major `math $base + 32` $floppy makedev ${arg}CompaQ b $major `math $base + 36` $floppy symlink ${arg}H360 ${arg}D360 symlink ${arg}H720 ${arg}D720 makedev ${arg}h1440 b $major `math $base + 40` $floppy makedev ${arg}H1680 b $major `math $base + 44` $floppy makedev ${arg}h410 b $major `math $base + 48` $floppy makedev ${arg}H820 b $major `math $base + 52` $floppy makedev ${arg}h1476 b $major `math $base + 56` $floppy makedev ${arg}H1722 b $major `math $base + 60` $floppy makedev ${arg}h420 b $major `math $base + 64` $floppy makedev ${arg}H830 b $major `math $base + 68` $floppy makedev ${arg}h1494 b $major `math $base + 72` $floppy makedev ${arg}H1743 b $major `math $base + 76` $floppy makedev ${arg}h880 b $major `math $base + 80` $floppy makedev ${arg}D1040 b $major `math $base + 84` $floppy makedev ${arg}D1120 b $major `math $base + 88` $floppy makedev ${arg}h1600 b $major `math $base + 92` $floppy makedev ${arg}H1760 b $major `math $base + 96` $floppy makedev ${arg}H1920 b $major `math $base + 100` $floppy makedev ${arg}E3200 b $major `math $base + 104` $floppy makedev ${arg}E3520 b $major `math $base + 108` $floppy makedev ${arg}E3840 b $major `math $base + 112` $floppy makedev ${arg}H1840 b $major `math $base + 116` $floppy makedev ${arg}D800 b $major `math $base + 120` $floppy makedev ${arg}H1600 b $major `math $base + 124` $floppy ;; hd[a-b]) major=`Major ide0` || major=`Major hd 3` || continue unit=`suffix $arg hd` base=`index ab $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `math $base + $part` $disk done ;; hd[c-d]) major=`Major ide1 22` || continue unit=`suffix $arg hd` base=`index cd $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; hd[e-f]) major=`Major ide2 33` || continue unit=`suffix $arg hd` base=`index ef $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; hd[g-h]) major=`Major ide3 34` || continue unit=`suffix $arg hd` base=`index gh $unit` base=`math $base \* 64` makedev hd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev hd$unit$part b $major `expr $base + $part` $disk done ;; ht) major=`Major ht0 37` || continue # Only one IDE tape drive is currently supported; ht0. makedev ht0 c $major 0 $tape makedev ht0 c $major 0 $tape makedev nht0 c $major 128 $tape ;; pt) major=`Major pt 96` || continue for i in 0 1 2 3 do makedev pt$i c $major $i $tape makedev npt$i c $major `math $i + 128` $tape done ;; xd[a-d]) major=`Major xd 13` || continue unit=`suffix $arg xd` base=`index abcd $unit` base=`math $base \* 64` makedev xd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 16 17 18 19 20 do makedev xd$unit$part b $major `expr $base + $part` $disk done ;; sd[a-z]) unit=`suffix $arg sd` base=`index abcdefghijklmnopqrstuvwxyz $unit` base=`math $base \* 16` if [ $base -lt 256 ]; then major=8 else major=65 base=`math $base \- 256` fi makedev sd$unit b $major $base $disk for part in 1 2 3 4 5 6 7 8 # 9 10 11 12 13 14 15 do minor=`expr $base + $part` makedev sd$unit$part b $major $minor $disk done ;; sd[a-d][a-z]) unit=`suffix $arg sd` unitmaj=`first $unit` unitmin=`second $unit` basemaj=`index Xabcd $unitmaj` basemin=`index abcdefghijklmnopqrstuvwxyz $unitmin` basemaj=`math $basemaj \* 416` basemin=`math $basemin \* 16` base=`math $basemaj + $basemin` basemaj=`math $base / 256` base=`math $base % 256` major=`math basemaj \+ 64` if [ $major -gt 71 ]; then echo "$0: don't know how to make device \"$arg\"" >&2 exit 0 fi makedev sd$unit b $major $base $disk for part in 1 2 3 # 4 5 6 7 8 9 10 11 12 13 14 15 do minor=`expr $base + $part` makedev sd$unit$part b $major $minor $disk done ;; dac960) [ -d rd ] || { mkdir rd chown root.root rd chmod 755 rd } for ctr in 0 1 2 3 4 5 6 7 do major=`math 48 + $ctr` minor=0 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 \ 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 do makedev rd/c${ctr}d${ld} b $major $minor $disk minor=`math minor + 1` for part in 1 2 3 4 5 6 7 do makedev rd/c${ctr}d${ld}p$part b $major $minor $disk minor=`math minor + 1` done done done ;; ida) [ -d ida ] || { mkdir ida chown root.root ida chmod 755 ida } for ctr in 0 1 2 # 3 4 5 6 7 do major=`math 72 + $ctr` minor=0 for ld in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev ida/c${ctr}d${ld} b $major $minor $disk minor=`math minor + 1` for part in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev ida/c${ctr}d${ld}p$part b $major $minor $disk minor=`math minor + 1` done done done ;; rom) major=`Major rom 31` for i in 0 1 2 3 4 5 6 7 do makedev rom$i b $major $i $disk makedev rrom$i b $major `math $i +8` $disk makedev flash$i b $major `math $i +16` $disk makedev rflash$i b $major `math $i +24` $disk done ;; ndb|nb) major=`Major ndb 43` || continue minor=0 while [ $minor -lt 128 ] ; do makedev nb$minor b $major $minor $disk minor=`math $minor + 1` done ;; loop) major=`Major loop` || continue for part in 0 1 2 3 4 5 6 7 do makedev loop$part b $major $part $disk done ;; md) major=`Major md` || continue for part in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do makedev md$part b $major $part $disk done ;; st[0-7]) major=`Major st 9` unit=`suffix $arg st` makedev st$unit c $major $unit $tape makedev nst$unit c $major `math 128 + $unit` $tape ;; qic) major=`Major tpqic02 12` makedev ntpqic11 c $major 2 $tape makedev tpqic11 c $major 3 $tape makedev ntpqic24 c $major 4 $tape makedev tpqic24 c $major 5 $tape makedev ntpqic120 c $major 6 $tape makedev tpqic120 c $major 7 $tape makedev ntpqic150 c $major 8 $tape makedev tpqic150 c $major 9 $tape makedev rmt8 c $major 6 $tape makedev rmt16 c $major 8 $tape makedev tape-d c $major 136 $tape makedev tape-reset c $major 255 $tape major=`Major qft 27` for i in 0 1 2 3 do makedev qft$i c $major $i $tape makedev nqft$i c $major `math $i + 4` $tape makedev zqft$i c $major `math $i + 16` $tape makedev nzqft$i c $major `math $i + 20` $tape makedev rawqft$i c $major `math $i + 32` $tape makedev nrawqft$i c $major `math $i + 36` $tape done ;; ftape) major=`Major mt 27` || continue for unit in 0 1 2 3 do makedev rft$unit c $major $unit $tape makedev nrft$unit c $major `math $unit + 4` $tape done symlink ftape rft0 symlink nftape nrft0 ;; scd[0-7]) major=`Major sr 11` || continue unit=`suffix $arg scd` makedev scd$unit b $major $unit $cdrom ;; sonycd) major=`Major cdu31a` || continue makedev $arg b $major 0 $cdrom ;; mcd) major=`Major mcd 23` || continue makedev $arg b $major 0 $cdrom ;; mcdx) major=`Major mcdx 20` || continue makedev $arg b $major 0 $cdrom ;; cdu535) makedev $arg b 24 0 $cdrom ;; lmscd) makedev $arg b 24 0 $cdrom ;; sbpcd|sbpcd[123]) major=`Major $arg` || continue base=`suffix ${arg}0 sbpcd` # base=`expr ${arg}0 : "sbpcd\(.\)"` for minor in 0 1 2 3 do # XXX unit=`expr substr 0123456789abcdef \( $base \* 4 + $minor + 1 \) 1` makedev sbpcd$unit b $major $minor $cdrom done [ $arg = sbpcd ] && symlink $arg ${arg}0 ;; aztcd) major=`Major $arg` || continue makedev ${arg}0 b $major 0 $cdrom ;; bpcd) makedev $arg b 41 0 $cdrom ;; optcd) makedev $arg b 17 0 $cdrom ;; sjcd) makedev $arg b 18 0 $cdrom ;; cfs|coda) makedev cfs0 c 67 0 $private ;; xfs|arla) makedev xfs0 c 103 0 $private ;; logiscan) major=`Major logiscan` || continue makedev $arg c $major 0 $scanner ;; m105scan) major=`Major m105` || continue makedev $arg c $major 0 $scanner ;; ac4096) major=`Major ac4096` || continue makedev $arg c $major 0 $scanner ;; audio) major=`Major sound 14` makedev mixer c $major 0 $audio makedev sequencer c $major 1 $audio makedev midi00 c $major 2 $audio makedev dsp c $major 3 $audio makedev audio c $major 4 $audio makedev sndstat c $major 6 $audio makedev audioctl c $major 7 $audio # makedev sequencer2 c $major 8 $audio makedev mixer1 c $major 16 $audio # makedev patmgr0 c $major 17 $audio makedev midi01 c $major 18 $audio makedev dsp1 c $major 19 $audio makedev audio1 c $major 20 $audio # makedev patmgr1 c $major 33 $audio makedev midi02 c $major 34 $audio makedev midi03 c $major 50 $audio major=31 makedev mpu401data c $major 0 $audio makedev mpu401stat c $major 1 $audio major=35 for i in 0 1 2 3 do makedev midi$i c $major $i $audio makedev rmidi$i c $major `math $i + 64` $audio makedev smtpe$i c $major `math $i + 128` $audio done ;; pcaudio) major=`Major pcsp` || continue makedev pcmixer c $major 0 $audio makedev pcsp c $major 3 $audio makedev pcaudio c $major 4 $audio ;; video|video4linux|v4l|radio|vtx|vttuner) # video4linux api includes radio, teletext, etc. major=`Major video 81` || continue minor=0 until [ $minor -gt 63 ] do makedev video$minor c $major $minor $private makedev radio$minor c $major `math $minor + 64` $private minor=`math $minor + 1` done minor=0 until [ $minor -gt 31 ] do makedev vtx$minor c $major `math $minor + 192` $private makedev vbi$minor c $major `math $minor + 224` $private minor=`math $minor + 1` done symlink video video0 symlink vbi vbi0 symlink vtx vtx0 major=82 minor=0 until [ $minor -gt 1 ] do makedev winradio$minor c $major $minor $private minor=`math $minor + 1` done symlink winradio winradio0 major=83 #makedev vtx c $major 0 $private makedev vttuner c $major 16 $private ;; i2c) major=`Major i2c 89` || continue minor=0 until [ $minor -gt 1 ] # tell me if 1 is wrong... do makedev i2c$minor c $major $minor $private minor=`math $minor + 1` done ;; tlk) major=102 minor=0 until [ $minor -gt 3 ] # tell me if 3 is wrong... do makedev tlk$minor c $major $minor $private minor=`math $minor + 1` done ;; srnd) makedev srnd0 c 110 0 $private makedev srnd1 c 110 1 $private ;; fgrab) makedev mmetfgrab c 40 0 $system makedev wvisfgrab c 26 0 $system for i in 0 1 # more? do makedev iscc$i c 93 $i $system makedev isccctl$i c 93 `math $i + 128` $system done for i in 0 1 # more? do makedev dcxx$i c 94 $i $system done ;; sg) major=`Major sg 21` for unit in a b c d e f g h do minor=`index abcdefgh $unit` # minor=`expr abcdefgh : ".*$unit" - 1` makedev $arg$unit c $major $minor $scsi # we symlink to keep the permissions the same # it would be bad to have to change permissions # twice; devices would be left open when people # changed configuration. symlink $arg$minor $arg$unit done ;; pg) major=`Major pg 97` for unit in 0 1 2 3 do makedev pg$unit c $major $unit $scsi done ;; fd) # not really devices, we use the /proc filesystem symlink fd $procfs/self/fd symlink stdin fd/0 symlink stdout fd/1 symlink stderr fd/2 ;; ibcs2) major=`Major ibcs2` || continue makedev socksys c $major 0 $ibcs2 symlink nfsd socksys makedev spx c $major 1 $ibcs2 symlink X0R null ;; netlink) major=36 makedev route c $major 0 $private makedev skip c $major 1 $private ;; enskip) major=64 makedev enskip c $major 0 $private ;; ipfilt*) major=95 makedev ipl c $major 0 $private makedev ipnat c $major 1 $private makedev ipstate c $major 2 $private makedev ipauth c $major 3 $private ;; qng) makedev qng c 77 0 $private ;; apm) major=`Major apm_bios` || continue makedev $arg c $major 0 $system ;; dcf) major=`Major dcf` || continue makedev $arg c $major 0 $system ;; helloworld) major=`Major hw` || continue makedev helloworld c $major 0 $public ;; update) if [ ! "$devices" ] then echo "$0: don't appear to have any devices" >&2 continue fi if [ "$opt_d" ] then echo "$0: can't delete an update" >&2 continue fi create= delete= devs="$devices" if [ -f DEVICES ] then exec 3 DEVICES ;; *) echo "$0: don't know how to make device \"$arg\"" >&2 ;; esac done exit 0 ELF 4( 㿘`  @`  `@ &`$`Ԅ ` ` `@$`Ԛ   .  `@@@, $@ $- `Ԅ 3@ (" ` &` "  `Ԩ    "   "`" #`Ԁ& 㿘`@@` @`  ` 㿘  2 @* @   `  @?`` ! 6 @!@@ ``@@ 6@`$* &㿘ϖ * @`㿘`@@㿘@@01.01kernel_version=2.2.25using_checksums=1linear_map : hash->dev1==NULL for block %ld Block %ld out of bounds on dev %s size %d offset %d %dk roundinglinearGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4P! h  ,42 `<  =BH*QY=b(0   X $H0;,I4\ bz+= Ik<zlinear.cgcc2_compiled.linear_runlinear_stoplinear_maplinear_statuslinear_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.rem__this_module___atomic_addkmalloc_R93d4cfe6md_size_Rdefcc318kfree_R037a0cba___atomic_subprintk_Rdd132261kdevname_R160820f5sprintf_R1d26aa98init_moduleregister_md_personality_R5ab870d7cleanup_moduleunregister_md_personality_R4c95198d  4    ,l p t 0 0 0 h h$ ( , @" xELFl4(㿘 b@  0@$bȁ㿘` @ 㿘`  @ da@` @ .   ` ?< " 2  ,,8 2`( ` (#:  ( 㿐5"Ȁ`&`2  "`(@    2b@ b 0"b `*` *  * `   2`* @`$ * @ "$!  "@ @    = @@* @@@@ %@ ` * ` @  H*/ %  @ `  @  @ @`] @ j'` 2!`$  ` 6`$  @`  @ ` 2`$`S@ 0O     @ >@  @   @ @  (@ "%@%@ {H/   !@ @H/ Ȑ & 0p"5㿐/  @ O  @ F @  :      > & (` "`& T  `2D@ '  !D   L@T    @L`!D @  㿘% @`  ` `?t?` `.@   $ |`  ?@ 0o"< @   @*6 6& @5`d 8`2 @ 0T 6 @& ?逢"&  2  ;  $ #`$  <"< @"@ D"D  #   "   X@# X @ & `)h  2 @   .``& 2  @.`2  @ `"& @ "@& & & @`  @`  `㿘 `  *` "&  ` @ " &  `"& @& 㿘`  .`  €  $` `@㿘  2 <? $ 7?<" @@ 2 @  & @& @& & 6 & & &  d@  $@ @`*"@ .`2 @ ` @`   `  "   @`@ !! `2 P?  2DJ?`@ h@   9?  |` .`@`+?E ^h x $& @ @@ & @`& & & &   d@ 6 Ȑ   `K?hG?@   $'h @` 3  * 7l  3` *  ` 'p7t'x@'   '|`@ !! ` d  '@D`@ h@   ? 㿘 "i? *. 2 2   @ ]? . W?*  *  "    8` "`"`-`  0ƒ , ' g" ?D`   `*@ * &0  ? ?㿘 2 *6?6   @ -? . '?*  `*   ` *` "   `" @  & ` @`   `㿘 "@  **`2 2   @ 4 ` 40 @ . @*`@ *` @4 @ `* @ " `@ ` @`  `( " ? 㿘 ? f`@+. ``2 ` @$ $`̀@  ̐`" 㿘`@   @  ? "` @ $@  `#`@ ! @ ""  㿘`@  @ @@@@01.01kernel_version=2.2.25using_checksums=1looploop: request list destroyedloop: block not locked<3>unknown loop device command (%d)?!?<3>loop: device %s: getblk(-, %d, %d) returned NULL<3>loop: transfer error block %d <4>loop: cannot create block - no backing file <4>loop: cannot create block - no file ops <4>loop: cannot create block - file not writeable <4>loop: cannot create block - FS write failed: code %d <3>loop_set_fd: NULL inode?!? <3>loop: device has no block access/not implemented <4>lo_ioctl: pseudo-major != %d <4>lo_open: pseudo-major != %d <4>lo_release: pseudo-major != %d <3>lo_release: refcount(%d) <= 0 <4>Unable to get major number %d for loop device <4>loop: cannot unregister blkdev ?loop_register_transfer_R709b64dfloop_unregister_transfer_Rbfee3ad5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.kstrtab__ksymtab.rela__ksymtab.comment4!* T ,23T =BH*Q Y `3   lw3   Kl30 |= $ #SD#D41xd>JUf` q`Xl \| p H  T H<  <  (.F_djp8P$;L[m~/FTes%=Let</,R! }(# (p07loop.cgcc2_compiled.end_requesttransfer_nonetransfer_xornone_statusxor_statusfigure_loop_sizeloop_sizesdo_lo_requestloop_devcreate_missing_blockloop_set_fdloop_release_xferloop_init_xferloop_clr_fdloop_set_statusloop_get_statuslo_ioctllo_openlo_releaselo_fopsloop_blksizes*ABS*__module_kernel_version__module_using_checksums.div.urem.udivblk_dev_R99fffe78end_that_request_first_R7ee98c1eend_that_request_last_Rd7daa6ef__memcpy_Rbfaaaa73.remnone_funcsxor_funcsxfer_funcsblk_size_Ra2e0a082.umulpanic_R01075bf0blksize_size_R2f30b4b6printk_Rdd132261bmap_R549c6c1c__bzero_Rdd42e263getblk_R0cac240bll_rw_block_R08ea67ab__wait_on_buffer_R8468a33a__brelse_R9bb16e38mark_buffer_uptodate_R2f9b9072___set_bitset_writetime_R7a99c921refile_buffer_Rce9d3f7ekdevname_R160820f5global_event_Rcaf51008___atomic_sub__down_R7356f38e___atomic_add__up_R4506727e__this_moduleblkdev_open_R6aa8fe37get_empty_filp_R176fb4b9get_write_access_R1cf3993fput_filp_R47c18044is_read_only_R740274cainvalidate_inode_pages_R9507575eset_device_ro_Rdc036ebbfput_R6db7a23bblkdev_release_R0960630ddput_R154d7397__invalidate_buffers_R98f51538stack_top_Ra6cab6a7__copy_user_R9c5239ebstrncpy_R328a05f1fsync_dev_R8ea128e2block_read_Rfcc5a2bablock_write_Re1e52ba7loop_register_transfer_R709b64dfloop_unregister_transfer_Rbfee3ad5__kstrtab_loop_register_transfer_R709b64df__ksymtab_loop_register_transfer_R709b64df__kstrtab_loop_unregister_transfer_Rbfee3ad5__ksymtab_loop_unregister_transfer_Rbfee3ad5init_moduleregister_blkdev_R63a68168cleanup_moduleunregister_blkdev_Reac1c4af) )   *4+h,-D1 L1  ` `) )  3 )  (3 (0 8 L) \4 h4 &2('& -D @H5L @T) d) 676489:;  5;4<L=d>|?;)  h@ h50) L) t x5|  5 2A A A  (5 (DBD `5 `F F DX \5` G 5 H XI lJ K L M N 0F  <B p0 t0 0 0 O N P 7 7  `  ` Q F  $F  0B R R S $0 (0 T , 7T,R R Sd h l5  R R  ` `    5P T l0 p0 F F D @  @50UL T l hp ht50 0 F F F B0 0 8 D P0 `0 0     _  5  )  )  7, `0 `87@ D L7T1 X4 \1 `4 t x |a 5 CED x$8.</VW<XZY \ELF4(㿘` "`  `?@ @㿘 2 +&?ꀦ . !?( 1( &`  ## #$#(` @`  `hD!DH`'?'#@#`堔+ *@ @ "`0` "`h'ܔА ''?''''܀ '@ؔ@  4&     @H`Ș!!%%%%* *@ @ # !Dx 2`* @ *`  X%!( ??''HH@  r  H   * c    @H`  "` 㿀  'P   , @ 䀢 "@ 쀢  @` ` 2`  * %` 4  @&   $` 㿘]!H@ H  @l %@ * @*`"@*`@ @ "  @  @P0  @ `0 @  & `0&  @?0㿘] aH!# ) *` * " * " @  " @`0 `d"   @ `0 @  & `0& 㿘 ` q     * * " *  `2  2       ]!H@ @ ; $ `"0$$ 0H*o`  @  2" 0# # #  @ @H/  `$ 0$ 2㿘`@ !! ` ?"? +`߰?,`* "*c*   *#": "`?0*#J*#r?0*# *#*#s?0@ `  @ ?  ?$ @$  ?t?` `.@  " "  ` $ $ y u?ꀦro,`  6  " " : "  ',`%@*@< <$M ,`6 +@  :,` : #< ,`  ! ,` @# <,   (?@$ @  `   @ 0D`   ,` *2  2 &0?㿘 "*? * #?@ *@ , *"* `4@ $` @`   `㿘`@ +  @ +:? @ + ]`̘  !H   #$  ' #c   `   """"**8@ %%@!, 㿘`@ +   @@@@@@@@;@@F@01.01kernel_version=2.2.25using_checksums=1nbd<3>NBD: %s - sock=%ld at buf=%ld, size=%d returned %d. sendreceive<3>NBD: Sendmsg failed for control.(result %d) <3>NBD: Send data failed.(result %d) <3>NBD: Recv control failed.(result %d) <3>NBD: Unexpected handle received. (result %d) <3>NBD: Not enough magic.(result %d) <3>NBD: Other side returned error.(result %d) <3>NBD: Recv data failed.(result %d) <1>NBD: I have problem... <1>NBD: request corrupted! <1>NBD: nbd_dev[] corrupted: Not enough magic <3>NBD: I did not expect this <1>NBD: request corrupted when clearing! <3>NBD: nbd_dev[] corrupted: Not enough magic when clearing! <3>NBD: I did not assume this <3>NBD, minor %d: Minor too big. <3>NBD, minor %d: Request when not-ready. <3>NBD, minor %d: Write on read-only <3>NBD, minor %d: nbd[] is not magical! <3>nbd: Some requests are in progress -> can not turn off. <6>NBD device %d: head = %lx, tail = %lx. Global: in %d, out %d <1>nbd_release: refcount(%d) <= 0 <2>Sizeof nbd_request needs to be 28 in order to work! Unable to get major number %d for NBD nbd: registered device at major %d nbd: cleanup_module failed nbd: module cleaned up. ?GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment44!X ,h<2'< = BH*QY`(4   lw(@  =L ,+L&3L< DM\hr  x< &FTby@ %/>Rf 0$T@nbd.cgcc2_compiled.nbd_end_requestrequests_outnbd_opennbd_devnbd_xmitdo_nbd_requestrequests_innbd_ioctlnbd_blksizesnbd_blksize_bitsnbd_bytesizesnbd_sizesnbd_releasenbd_fops*ABS*__module_kernel_version__module_using_checksums.div.urem.udivend_that_request_first_R7ee98c1eend_that_request_last_Rd7daa6ef__this_module___atomic_addsock_sendmsg_R1684881csock_recvmsg_R339a2cc8printk_Rdd132261nbd_send_reqmemcpynbd_read_statnbd_do_it___atomic_sub__down_R7356f38e__up_R4506727enbd_clear_queblk_dev_R99fffe78__lshrdi3__ashldi3fput_R6db7a23bstack_top_Ra6cab6a7fsync_dev_R8ea128e2__invalidate_buffers_R98f51538block_read_Rfcc5a2bablock_write_Re1e52ba7init_moduleregister_blkdev_R63a68168blksize_size_R2f30b4b6blk_size_Ra2e0a082cleanup_moduleunregister_blkdev_Reac1c4af      ( <!  " " #$% ( , @4 @8 H< HP& (H PP P  &  (     0 84 88&| h h&)+  &   0 4&8 P T&X h# & #     P@&D  \&` P & / /     0 8 T \ t 0x 0|&   +'0#     .  `  ` &  ` 2                   0 D  H  d  h  l  t              1 * .           & ,3 03 @  D  4 5       &   "  "  + 4 8 < @ D9 T H X H \& l p p p t& |    /       /       : ;     : ;   X \ `=p x |  &,--, -67L$ x h `ELF04( 㿘`ؐ $`Ԧ     `` @ 2 `` $`Ԛ *` @*  $T  N$   " `Ԛ @  `+` " ```@$`Ԣ `Ԕ  " `"@$  `" `  @$   ??В@ ""` 0 㿘`  @` `@ ` &`f h " @\  .  @@@,  $@@ $@ @0< 6` +"  @ &"  @  0  0"  " `" #@& 㿘`@@ @` @`  ` 㿘 ؒ    *@2@* @1&  "@:`@   ,`@  @+?      @?  $@,<@*  @,  6@, & 㿘ϖ * @`㿘`@㿘@01.01kernel_version=2.2.25using_checksums=1raid0 : Allocating %ld bytes for hash. <7>raid0_map: invalid block %li raid0_convert : can't convert block across chunks or bigger than %dk %ld %ld raid0_convert : hash->zone1==NULL for block %ld %dk chunksraid0GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!0  ,(42L<  =\B\Hp*QY=b 8P    +5P@IDTS,`4r x&4FRtraid0.cgcc2_compiled.create_strip_zonesraid0_runraid0_stophash.440raid0_mapraid0_statusraid0_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulvmalloc_Rd6ee688f.rem__this_module___atomic_addvfree_R2fd1d81cmd_size_Rdefcc318printk_Rdd132261___atomic_subsprintf_R1d26aa98init_moduleregister_md_personality_R5ab870d7cleanup_moduleunregister_md_personality_R4c95198d  (@t       $l   ( ( P P    $HX     "$DELF4( 㿘 ! 6  *@`  6@  @ ? 㿘 D# @"㿘 DHHo`` `"` `` @ ` @`  2@`!` @€0' @  @@0? $@`  a 6``, @  @&, `` @ `@h خ ᄨ !@ `@! @  @ `" `" ``2$  @"$ (  @ @$ $`$`N ጑*  `2` @6᐀ 2  ᔐ$` & @  $$` *`$  @  $ 2@ D@ H  2& @`  & D  2 R@T \ @2@0l6H  Ȩ  , @+5& @ `@! H@ Ȁ "@@ H `" 2 2""`" "$"$"`(" @"`D%   ` !$,  "  2`     `2  @   @ 2 @ ,  㿘ؤ!`!@!   )'.@` @! @`!   *`   㿘  ሀ ᄠ .`2   @ I` @ 0A >.`2 b5@21  "- $ *@  &@ *`@ ?&@ *@ ?&@ ``` $`$`$`& @ ሐ@$ሒ@  ˨  㿘 ԑ* * & Ԑ  ؀  ;  6HH!* #!`#  "`* "`"`"`2`"` "`   ?" $` $`@`!@ @  @?㿘! 6      `& &`   @ 㿘 ؖ `?  @@"a  U     "   HH/ " # ' #  # a  & "#a# # # # a #a ?, @  đ* "`  &`  " @  㿘HHo`` k  1/``D"``` *`" * " *  Ȁ`@ $ @ ` ` *`" * " `* ```2 ߔ, `4 @` `@  @€ @0@` `@`2`  ` `@2 `` @2`@Ho`` 2``㿘 آ   <  ,@"2@, 5 @`&`:`@ % `$@  `  @ "@`$`5 @5 @@   ɪ` @ ` ` @, 4 @@ 㿘 Ģ  @6      : @@ 㿘;`'D @` $``D!i*  @2 @ @`? $`!@ `@!!@  &ئ@! Ԁ6~ሸ@ 2 /@;@`hԑ* "`  @;@`Y> 2 @;@`M$@` (@ ,`@;@`=԰  @! @0@! @'"@2  & &ሐ $@!@ ` ,`' "@  2  & " "@   " Ԭ `ሀ 2(D!i*  @2 @, $$ 2 ᄖ*`"ᄬ? $ጘ- "" - @ `%@;&؂` @`? ; `$ (D-@  ?$@ ( :$ *      " ( *$ ߙ-D!ሐi*  %@2 (@ 㿘@`&`؂` @`  ` 㿘 @  "``@?㿘@㿘@`@01.01kernel_version=2.2.25using_checksums=1<3>raid1_map(): huh, no more operational devices? <3>raid1: %s: rescheduling block %lu raid1_make_request(#1): out of memory raid1_make_request(#2): out of memory [%d/%d] [%sU_]<1>raid1: only one disk left and IO error. <1>raid1: Disk failure on %s, disabling device. Operation continuing on %d devices <3>raid1: cannot hot-add disk to the array with no RAID superblock <3>raid1: hot-add: level of disk is not RAID-1 <6>raid1: device %s hot-added raid1: bug: no read-operational devices raid1_mark_spare: bug: state == %d dirty sb detected, updating. <1>raid1: %s: unrecoverable I/O read error for block %lu <3>raid1: %s: redirecting sector %lu to another mirror raid1: %s: raid level not set to mirroring (%d) raid1_run(): out of memory <3>raid1: disabled mirror %s (couldn't access raid superblock) <3>raid1: disabled mirror %s (errors detected) <3>raid1: disabled mirror %s (not in sync) <3>raid1: disabled mirror %s (inconsistent descriptor) <3>raid1: disabled mirror %s (mirror %d already operational) <6>raid1: device %s operational as mirror %d <6>raid1: spare disk %s <3>raid1: no operational mirrors for %s <3>raid1: detected mirror differences -- run ckraid raid1: raid set %s active with %d out of %d mirrors raid1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!&  ,4@204x  =tBtH*Q^Y=Sb  "P] %l1l; N[Hk|wD4 x|  \hXD@ 4 (-39J[t,rl -:Rev /CWvH  9raid1.cgcc2_compiled.raid1_thread__raid1_mapraid1_mapraid1_make_requestraid1_statusraid1_fix_linksraid1_errorraid1_hot_add_diskadd_ringraid1_mark_spare__check_consistencycheck_consistencyraid1_runraid1_stopraid1_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udivraid1_retry_listprintk_Rdd132261raid1_reschedule_retrymd_wakeup_thread_R370450d3raid1_one_errorraid1_end_requestmd_error_R06ab6840___set_bitkdevname_R160820f5kfree_R037a0cba.umulschedule_R01000e51kmalloc_R93d4cfe6__bzero_Rdd42e263___clear_bitrefile_buffer_Rce9d3f7e__memcpy_Rbfaaaa73md_map_R564eb482make_request_R37d20c65sprintf_R1d26aa98md_update_sb_R66832138raid1dmd_dev_Rcddfb72eset_blocksize_Ra842722abread_Rdb41b5aememcmp__get_free_pages_R19d9ac40__copy_1page_R5ac7370e__bforget_R732d8c50fsync_dev_R8ea128e2__invalidate_buffers_R98f51538free_pages_Rb5136506__this_module___atomic_add___atomic_subraid1_initmd_register_thread_R2120d756register_md_personality_R5ab870d7init_modulecleanup_modulemd_unregister_thread_R993b8d60unregister_md_personality_R4c95198d T X \ |    " # # # %&< 8X'\ 8h p!(($ `( , `8*D+X,-.- )`)/$ $ 0- 1\$ p t x *+,$ 0-1  2  $ ( D H L2h p2t  , 0 4 \  " ' $ x p p  83 D  H' L  T  d  h          8  8  8  8 \    5 5       4 ` 8  < ` D3 '    ( '    0 ,- <1 l x 67 8@9T:h;t<=>;<=\? `? |@  ' A 0  0 *+0,p't P|  P'   '   '  ( , L'P (X (\ l'p hx h| '   L X \'h      ($? ,? 8A    '4 H(P? X? dA4 4 C    DB G H Xl $X D$04D< ELF@4( 㿐''!P &!PH`!\ "!X'&!\ !!H`@ H/`  ` 2"` !P?&!P!HH "  " " HH` " "`HH "@" HH "@" 㿘HH/  2   ?" "`@    !D !P @ HH!"`!"!"!㿘 ]?   $@ @㿘 b @㿘@  @ H@ $ $@  $ U2 H 㿘@   @ HR2 H 㿘HH) 㿘HH' 㿘* `!8@ 0&㿘* x@` !8@ 0  ܒ @$$@㿘 !X !D!H 2!H!P   !H!P !8@ 02@6  H x /,`@ 2!8 "`!8@`@ ` ""@"  "@& !p?%!p㿘  al #@* @`" aX 2@aH 2@aP 2 @  al # $al`2aX #(al㿘!4!h͐$!4@> #* @ " !82 2 !< k 2!8 㿘"3 !`@ + @!`!D*`– !D*`0 !Dٔ  !D*`!D@  p!`&!` 㿘+ !Dp*`!D@!`&!`㿘#h`&`:`O  x @`@@ d  &!H/@+ &  @!` &!8&!<& & &!X&!L& | $|!<!8@:`  #*   & " " & p $p@ 㿘&  !H  @0㿘O @ 㿘] @ 㿘 D aDHH/ `  @!D @!D?  $!D@`aX @`2aL @ aL - )``!H   x  2*@ "   " @ 2  @2 @   㿘 `" @a!<< !8)@:` `$@ H, 4 @.@+`&`$@ ` 6`!8 &`&`!<&`(&`㿘  $!d!D @ .`2 b 5 @21  "- $ *@  &@ *`@ ?&@ *@ ?&@ ``` $`$`$`& !H!L $!H@$!L@!H@!D  ʬ 㿘 !8!8=` @@!D!@```!@4 !@ &" @ !8@@!<@:` =` @@@@!</!@`"``0"`0@%@: @%@ @@ @!8  !@@  㿘  $0 /`$` ` @? ' ` &&&&&&@  '@` ٞ 㿘 !D.` @`!<A$@@ $@!<6@)" , @`"!8@  @ @ `@㿘 !@!D 7 x"0 ,  H "* `!<$r `@"`(  @  @$$@!< Φ-@`2!@!<Ґ%@!@F`$`@ $@!<6E@ H !@" ,  " @ @`" @, &!@+@2)@@  $$@!<6@ H!@" ,  "   "  @@@ &!@@ `@㿘. H   !8 @@ ` @lՒ`$$ $!X 2$!L 2$&!X  &!LxX $x @$ " "@! "㿘  !D:  H3!L 2 @!@2@@`,!`2 !L  @%n$`@€   " !L 2`@ͪ` 2&!X !H @!\!t$!t@ # &!X&!L!x!!|$!x$!|@ #H `" @a;: caD'     'Į  '''!D  !8@ 0!X aX!8@ 0Ȅ @!H' @"!L!8@ &!X!L``!X ` !X V!X`HH/  @6aL!@`Ȕ  @ "@ad 2"@``@aL` ; @  H+ "`$$ @€ @  @``@  @!\!t$!t@ # &!X&!L!x!!|$!x$!|@ #0A@?Ț  H@,``!@@ 2 ` (' 2%` !' 2 !`" "`"  @ "  "@ " "`` @ɚ` !L @p?E @Ai* '!@@"5`,` H`2/`!<@7` "$` 2 `  "` 2`7 !# ` `2```@&!@` % ;`;$Đ "';c @@ `  @2!Dat "at!D  &!D&!X I @$Ȕ H,` 2 !@a0 2!@ad "`!@@ "``'`@,` @O&!D`/,`   a0  xad "B` x!@@   H`? `@ 0  @  @!@@   @    $  @ 2ad 2 a0 4 a02 2  @`@0  @2!Dat "at!D %&!D  @A&!T H!@@"`,` 2`  2 `!<$- `@&!@#   @&!T  H ,` 2!<!@@2 `!<$  `@  &!X @&!D` ,`"`   @ @2 `@ 0$  @2!Dat "at!D  &!D'`?#` @6!D H ,` `2 $ $`$@!<`@!D&!D0M,% &!X @E&!D`  ,` `"`!<$ @ @2 `@ 0! &!X @&!D`,` H   `" $`$@!<`@ 2 @ `@ 㿘 ؀`!D? `" !8: @@@@!</!@`"``0"`0@$@@:`@$@`@@ @z`!L "  `2!X!L 2!X !H @2!Dat "at!D 2$!@ ,` H !!8 @ @ !H @at "at@ !H`"@̖ @ 㿘 Ȁ    "a@"@:  ,@ "/ 2'!X "#!D 2!8!T@2  !<!P: @`&!P `"!<̐ &!P!<!8: @ %&!T 2 Α, HH!X`  ` @  ئ !H!D@f ' @ @ 'W @ 0!D   @`&`:`@,`Ȁ "@ !D`@!D  @ Ƞȕ,` `@,`$@ 2 !D @Ȥ @ @&@, 4 @@ !D`@ `@ 㿘 Ģ  @6      : @@ 㿘;`ĸ @` $``)* ! @2 @ @`? $`!@  h&@!$ @ _$@ $Ԁ6}(@ 2 /@;@`hԑ* "`  @;@`Y> 2 @;@`M$@` (@( ,`@;@`=Ԑ* ` @! @.@! @&"@2  %H $H@!@ ` ,`*& "@  2 "@  " $ " ԰  `( H$D" $L$$8$<$h$@(" 8 ), !D 8``"@), ! ` ), ! @2 @)L  , ! @2 L@D)  @ `% @  $), ! @2 @{)D* @*`"@*`"@h*`a`@2 g   ) @h^)!-  @2 @$ :(H.   ?$ ( :$     @   ( $  ߗ. H( %raid5: %s: unrecoverable I/O error for block %lu <1>RAID5: Disk failure on %s, disabling device.Operation continuing on %d devices raid5: unsupported algorithm %d compute_blocknr: map not correct compute_block() %d, stripe %lu, %d not present raid5: bug: stripe->bh_new[%d], sector %lu exists forcing oops. raid5: bug, completed STRIPE_WRITE with new == %d handle_stripe(), stripe %lu, io still pending handle_stripe(), stripe %lu, already complete raid5: restarting stripe %lu raid5: bug, nr_write == %d, nr_read == %d, sh->cmd == %d raid5: bug: method1 == method2 == INT_MAX raid5: bug: bh == %p, bh_new[%d] == %p raid5: bug: bh == NULL, i == pd_idx == %d raid5: bh %p, bh_new %p raid5: %s: raid level not set to 4/5 (%d) <3>raid5: disabled device %s (couldn't access raid superblock) <3>raid5: disabled device %s (errors detected) <3>raid5: disabled device %s (not in sync) <3>raid5: disabled device %s (inconsistent descriptor) <3>raid5: disabled device %s (device %d already operational) <6>raid5: device %s operational as raid disk %d <6>raid5: spare disk %s <1>raid5: raid set %s not clean and not all disks are operational -- run ckraid <3>raid5: invalid chunk size %d for %s <3>raid5: unsupported parity algorithm %d for %s <3>raid5: not enough operational devices for %s (%d/%d failed) <3>raid5: detected raid-5 xor inconsistenty -- run ckraid <3>raid5: couldn't allocate thread for %s <3>raid5: couldn't allocate %dkB for buffers <6>raid5: allocated %dkB for %s raid5: raid level %d set %s active with %d out of %d devices, algorithm %d <1>raid5: raid level %d set %s active with %d out of %d devices, algorithm %d raid5: raid set %s not clean; re-constructing parity <1>raid5: failed to run raid set %s level %d, %dk chunk, algorithm %d [%d/%d] [%sU_]raid5: disk->raid_disk != failed_diskraid5_mark_spare: bug: state == %d raid5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!N  ,442^Tl  =5(B5(H5@*Q5p Y?v=?bB ` 7 H `(h\4LDLP\`0XpL<XT@TL`@$d! h0 h? lXJ ,_ (p   `$<p|x`  $0 &/&x6(XJ*h\*xf1Lpq1~24  3CUg).FYm{,KYv4|44raid5.cgcc2_compiled.get_free_bufferget_free_bhput_free_bufferput_free_bhget_free_stripeput_free_stripeshrink_buffersshrink_bhgrow_buffersgrow_bhraid5_kfree_bufferraid5_kfree_bhraid5_kfree_old_bhraid5_update_old_bhkfree_stripeshrink_stripe_cachefind_stripegrow_stripesshrink_stripeskmalloc_stripeget_striperaid5_kmalloc_bufferraid5_kmalloc_bhraid5_end_requestraid5_mapraid5_build_blockraid5_errorcompute_blocknrxor_blockcompute_blockcompute_parityadd_stripe_bhcomplete_stripehandle_striperaid5_make_requestunplug_devicesraid5d__check_consistencycheck_consistencyraid5_runraid5_stopraid5_statusraid5_mark_spareraid5_personality*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__wait_on_stripeschedule_R01000e51printk_Rdd132261free_pages_Rb5136506kfree_R037a0cbakmalloc_R93d4cfe6__bzero_Rdd42e263__get_free_pages_R19d9ac40md_wakeup_thread_R370450d3sleep_on_Rd9512e2a___set_bit___clear_bit___atomic_addmd_error_R06ab6840.umulmd_dev_Rcddfb72einit_buffer_R166270aekdevname_R160820f5.remrefile_buffer_Rce9d3f7e__memcpy_Rbfaaaa73__wake_up_R8a4864fa___atomic_subfind_buffer_R60601391make_request_R37d20c65md_update_sb_R66832138bzero_1page_R84f9fba4set_blocksize_Ra842722abread_Rdb41b5aememcmp__bforget_R732d8c50fsync_dev_R8ea128e2__invalidate_buffers_R98f51538__this_modulemd_register_thread_R2120d756md_unregister_thread_R993b8d60sprintf_R1d26aa98raid5_initregister_md_personality_R5ab870d7init_modulecleanup_moduleunregister_md_personality_R4c95198d= >  8 8 8 >$ 8?@@A8BDCX@AB P> P > |  >  >@;AB \@ @  H T> X H \D dE <  B ; \> `  <  >    >  dF |G D H I lF K K J ; B   L 8@DHMX>\ 8;:  > ,J8JP;d9tN;:  ::(:<:P:`>d lJ  > B 0 8>`FG O4GLPBPPF  > H >$ H8FH X X>G QPQhK pK |J >  > R0GD L>P X M> GQQ4 < D>S P> PF | >  >G (T TF!G!T"$F"P#xG#T#P$T$h9$xN$;$:$ $ $:%:%,:%@:%T:%d>%h %pJ%F&0 &8 &<>&H &L &P>&hF&D&<&D&K &K ' J'U(HG(C(V(B(W(X)|Y)Z)[)\*?*|] *] *H* * *M*>*R+A+,B+<C+PV+M+ (+>+ (+M+ h+>+ h+M, ,>, ,<M,@ ,H>,L ,tM,x , ,>,M, @, @,>,M, x,>, x- - - - - . .M.>.4 P.8 P.<M.P>.l &. .>. . &. &.^. . .M.>/ J/4 /8 /<>/\ 0/d 0/hM/x>0@ X0L X0T 0\ 0`M0|>0 0 0M0>0?0@0 00 01M1>1] 1] 1(R1l_1x?1@1] 1] 1R1 X1 X1`1 2`2 2 2 2, 20 2H 2L 2T`2t 2|`2 3d 3l 3t 3| 3 3>3 4@>4 4 4b4a4e   $0  *x1L1$`02ELF 4( 㿘` @` ` 㿘 \HHo` =#P @2P"@  & &` @`  ` 㿘 \ `E?HHo``P `A A" P0?ꀊ(h %?@  ?@ `P&`6`P$@ 2`$@$`" ` $` $`  㿘@@ ?㿘`o h@`h 㿘@``@ !! `" ?!񀦀 ""! ?Ӑ!򀦀  ?|  ǒ ˒ 㿘`&  (@  & \4?@ ( \ @  $  \@  \@  $ @ \@?0@ \ & ` & @& & & @ P@6 P&  㿘`\@`    p @@0 `@P A " `& & l@` ` "@&` 㿘 \ \ @ ^ @@@ &   &   @ &    &   @ &    &   @ &    &   @ &  $ $ & $ ( (@ & ( , , & , 0 0@ & 0 4 4 & 4 8 8@ & 8 < < & < @ @@ & @ D D & D H H@ & H L L & L P P@ & P  2㿘@ 㿘 `@ @ ? 㿘!  \@@@@` @ \$ \01.01kernel_version=2.2.25using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout<7>%s: releasing `%s` bond%dGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4,!<p  ,`2  =HBHH`*QY o= b   B 4$4/B<O< \\kxvD !/ASdwDP<&bonding.cgcc2_compiled.bond_openbond_closeset_multicast_listbond_enslavebond_releasebond_sethwaddrbond_ioctlbond_xmitbond_get_statsbond_probedev_bondbond_name*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkfree_R037a0cba___atomic_subkmalloc_R93d4cfe6__bzero_Rdd42e263printk_Rdd132261__memcpy_Rbfaaaa73dev_get_R0dfb2c76bond_initether_setup_R04a27efa__kfree_skb_R4954ae5fdev_queue_xmit_R332ba5f2init_moduledev_alloc_name_R1c6045aaregister_netdev_R0fd2700bcleanup_moduleunregister_netdev_Ra9101341     !D L"P h#|$H DL DX t! ! !    4  x  4  x&l'(!%    *+  -,ELF4(  , ! " (" ," * " " " $㿘  ( *#  (  22 " " &  &  #   & ( * @  $@ `8& $Ȑ   <"@ 8"` D"` @"`  4"` 0"` "` "`㿘& ,6 㿘  L " H@& L H @& H@` @`  `㿘`2_  2[   2W  6  2R  `& *` €#  #)  "] " Ϡ  * P@  ' @ P.`@ & L` @`  `@, & H  & H`P&& . & . 㿘 㿘 㿘2@ @ 2< ` 28 `6` 23  ` 2. `  H `%     H *2   # L* 2  L@ 2`. &  . ) 㿘 㿘\ 㿐``*  ߀   *'?    @.`...2 . .`e`,`@ )@L* `)@`     :"*`@: $ 7`$(@@ 4`.   ,`"   *?, L *`  23 ;c2 3 3`#@H$(`,`2 `4@$(@@ 4`.   ,` ?<$ 8` $<$$84 $  !$*@ 4`.   ,`   ? * @2 .    , 2 @0 4`$4$0D`$D$@㿘  㿘` `*   @ `  ` $     @?  & 6 ... !  @* `5-!  = 8 { D 8    &  @  @?   H*  @ @$    @? L* ?*` +8 L`+?."G :C ** L+       :# + @*,  `*` `23`#2`3`2"  H)&  *@,  2  `". R ?&  D @ 8 < `& @& 8& D& < "     @㿘@ @ 㿘@㿘@ 01.01kernel_version=2.2.25using_checksums=1bsd_decomp%d: bad sequence # %d, expected %d bsd_decomp%d: bad CLEAR bsd_decomp%d: bad code 0x%x oldcode=0x%x max_ent=0x%x explen=%d seqno=%d bsd_decomp%d: ran out of mru bsd_decomp%d: peer should have cleared dictionary on %d <6>PPP BSD Compression module registered GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 \!d  , 82H  = B H *Q2YB=b  % 8%8/D>@H\Q[hj{(($ 8 "2BP^p , 0 Dbsd_comp.cgcc2_compiled.bsd_clearbsd_checkbsd_comp_statsbsd_resetbsd_freebsd_allocbsd_comp_allocbsd_decomp_allocbsd_initbsd_comp_initbsd_decomp_initbsd_compressbsd_incompbsd_decompressppp_bsd_compress*ABS*__module_kernel_version__module_using_checksums.div.urem.udivvfree_R2fd1d81ckfree_R037a0cba__this_module___atomic_subkmalloc_R93d4cfe6__bzero_Rdd42e263vmalloc_Rd6ee688f___atomic_addprintk_Rdd132261bsd_comp_installppp_register_compressor_R9682e733init_modulecleanup_moduleppp_unregister_compressor_Ra1b928df| ! ! "0 H4 HHhLhPhThXx\`d#$%! ! & % T \ `'  0  0 ` P h P p' x  '   '   '  )    ' $  4( H L, P h\ @ \$(@, 04ELF4( 㿘` @` ` 㿘` @` ` 㿘`&  \@  & \?@ \ & `& @& & @ P?Ē`*@6 P&  㿘 p @2`\@`\ " \ @ "   \㿘@ 㿘 `@ @ ? 㿘! @@ \$ \01.01kernel_version=2.2.25using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeoutdummy%dGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!   ,$2 h  =BH *QPY=Ub`    4#44/hBXM\]dis~ p 5KxPWp(dummy.cgcc2_compiled.dummy_opendummy_closeset_multicast_listdummy_xmitdummy_get_statsdummy_probedev_dummydummy_name*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subdummy_initkmalloc_R93d4cfe6__bzero_Rdd42e263ether_setup_R04a27efa__kfree_skb_R4954ae5finit_moduledev_alloc_name_R1c6045aaregister_netdev_R0fd2700bcleanup_moduleunregister_netdev_Ra9101341kfree_R037a0cba  8 < Ht x    \ 4 h \ 4 h,h|    !"  $%,dELF|4( 㿘    " "    p@2$@$`` $$ d&      p@2$@$`` 㿘 ` `     ' @@ "/ ``? ? @ ` &`&``""  , "``\ ` &`\&`&` @@* `"* $ " H" " D  ̐ %`%@㿘 㿘 `$ $ \`Z @"$ \$  $  ``@     `P #  `h@   , g % ? c   㿐`\ `(  2@'`,'`( &` 0`"  '   '5* * `" *  *@  D*`"@ - @*` `@  &` `  %  ̐ %  ؐ %   % ` $H$$$D`  4 y%`< @@   `? ? @   $ $ # $  \  @ $ \$  @  $H$$$D`  4 %``\(7 `$`\1$`@     `$ $ "  $  \ @ $ \$ @ @`` $H$$$D`  4 %` ,`i$``4`t@ `%  4  D*'`(&`  2@'`,㿘@  \֒@ 㿘 \N 㿘`\`"`$d,   p@2$@$਒   `$$`$ ! `H" '!@@ $ `  @ &`$ f&`H`$ @@@ Y `@@8"@?@ "N H` \`d` ?@ (@* $ " *  %@@?# # # # # #     ?3 3 3 3 3   * @3  * 3  *` 3  %@ (" 2&`$ 㿘  \ |`& \& @   \? |  & \& @  .2`  *`*4 4 `o `o `h@`P  `o@6`Z, `o`@&,  `Z`o@`Z`Z 㿘     ,,  @  @@ `o @`h 㿘`` `? .` *4` o`@ h o @ 㿘`o @8?" T  \ p Z'  'Ԁ O"``"G@```@ @` 22@ @!`!А `'Ф"` #)@`@ \% $!  @" ?? d  <" ??` `!@   g 4!T` `@ 4!` `@ $!` `@ !$!#"4!"($!! 2` $!` `@   !@ ! ,! ,! ,! ` ,!  2 ,!,!! ` `@   @ !$!@P$!!A@$$ D@9 $!  !h   ,@  :@  $ @ ! $$$6!""  #4 *`# $!  $!*` @2`$!``0`@!#`4! `0@ $!  @$ $!"$!`4`0 @ $ `4@`0 @ $ `4@!`0 @ $!$!#%753/)9!#;< $!! !* @ `8 o$j$ $ $ $#`,3 2'2  2","( 22! @ $! ` 2` $! ` @ "   *2`$ ` %%%@%%`  %`-= @@  @ À @ `  `%T%%%5Z%%    J2"`,"`( 22!%!) 3*! **!" !"` ߰  @*   *   @*   *h,`,@    ,@!   2 $` $`   2"`,"`(  " ,2   2"`,"`(`0  #@  $`0#2@ `0`0 !  4" , " ( ($`4  2$@ `  4"`,  ? @ !$ " @ %4`&`$! @`@`'Ѐ`  㿘"`@ 㿘`   `a@``@ $`L*l,H<)+,H *<J :u :u :--8,(8-8w9 2Dഺh-8;dOTz .* J&w58hw98 `8`:*J'8.r zJw58hw98 `8`:z*y<"8z;d:jG  p :Lu :Lu :-8,(8-8w9 2Dt:h-8*l,(zyJ# ĄJ6rlw58hw9JƸ0 ń6:B$6:R 2 2 62rH2rP *6rQ * *a . .p & &Jvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2,w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &%)4hĜr.j$,p0pw9w8ƴwv((.r0v8p8Hƴp lPX),<z :z;d:jG  :JyOTw58hw98 :X28X:z2-8,(8-8w9 2D:h-8*l,<u. :zu :z;d:jG  p :.OTz4r :yyz8pƴpyy8p4pJ6ry 6-8,(8-8w9 2D8:h8-8J2rJ(y 2(yyL<"8u :u :z;d:jG  p :-8,(8-8w9 2D̳:h-8 +yJw58hw9y8 :`ô68`:# ė6JԅJ6rw58hw9Ƹ` ń6:J| 6:R 2 262r2r *6r * * . . " " %Jvƴpvƴ0 ',J%h " Jvƴpvƴ0ؖJ 2 2  w58hw9BȦ:h8hu9u(80Wv0uuƴ_v & *4hĜr.j p$,p0pw9w8ƴwv((.r 10v8p8Hƴp lPX*,<yyƴpz y8z yz 6r ,,(-88-8w9 2D h-8+ 8,L<,),*l,*,+<-8-<<". >|t :)G8oPϸ?Ümt :?`w9 \p4`` h h \ \ h hPP<< <<  @`(($$DDdd,`0LhT 2 ' : -.u.p.̆4.L 6 .p.-X::8`@ TT TT TT TT@ @, @@, TTTT@,@, TT TT TT TT@ @,  @@, 5(85Dwp>o\8o\o\t).5$8 6. :.48. *5(6 :蕖䖖d腖䆖 "6  2u6866vƴ`w58j8`8,p :5,5(oL6r4oD5(5(( 6),(-85$8-8w9 2D(h(-8 :)-8-<:J ,(w9:h *'( :-.̆4u.p..L 6.p.-Dv6p:ƴp68-<8 :D,-<,-<< :!4#8 Ơ:'8:j <-@660-@6< *'( :-.̆4u.p..L 6ٶ.p.-Dw)h8h:8<-Dv`ƴp <2 :8Ŵ 6 : 62 82 2 *ZD <.2ԗH, .4X /l? /; 2(&0&1, 1zx2臖<"Pq :Uqlqw98h:2ĆŴt2Ї2oDw9:h .28 ؆2A2qzx'8 6qv :2vv2w :1&2zx022& .2:2 62 :2 6 622Ć:( ,$2jpw18`w9880 .6rĄ. 6r * *"6rL6rT ."6rU . .e & &p vƴpvƴ8'%h "vƴpvƴ8 2 22( 02$6rw58hw9Ÿ8 26rĄ26r * *"6r6r 2"6r 2 2 & & Evƴpvƴ8'%h "vƴpvƴ8 2 226 . 26866$0:Z 2 .$44 :2ܓCh " 2v 8  Lƴ`w58j8`808z(&0 2ԃ  5 2822 p20:2p282q :,(-88-8w9 2D:h-8qq8:jqqqqq6rG 2 6%qq :%yu :%xu :%x%122oT 2` oThoX :|/l&2zp$ ."z2zp22z,8z(8$<@D68`66866oP28`22/8222 >~t 4~t % >|t :&2oX8 .! 2-8,(8-8w9 2D h-8" oXoT2.. :!8,zhC "!|. 2!L.8..!|z(vƴ`w58j8`808&0 2!x.20:2!wp>!@y8yyq :!,(-88-8w9 2D!:h-8qq8:j"qqqqq6rG 2 6%qq :%yu :%xu :%x%1z8oP22(22z,8$z 2"z*Z& 2j&!268`6686628`22822 2#E2zp8#H2zpoX .!#,(-88-8w9 2D#h-8"#oXoT2.. :$8,zhC "$x. 2$L.8..$xz(vƴ`w58j8`808&0 2$t.20:2$wp>$@y8yyq :$,(-88-8w9 2D$:h-8qq8:j%qqqqq6rG 2 6%qq :%yu :%xu :%v .!%,(-88-8w9 2D%h-8"vw%vv%zx%1.2q :&,(-88-8w9 2D&:h&-8z:j&AŴ8Z&HzŸzzz(v52p섦z,z<@Dpzz8Xz<zx022<"P2 :*q2Ć6:2'< 26 :2'< 2 2*p22Ć:( ,$2j((w18`w9880 .6r'Ą. 6r' * *'"6r(6r( ."6r( . .( & &(( (ivƴpvƴ8(Ж'%h "(vƴpvƴ8( 2 2*p2( 02$6r)w58hw9Ÿ8 26r)LĄ26r)P * *)]"6r)6r) 2"6r) 2 2) & &) )vƴpvƴ8*d'%h "*avƴpvƴ8*h 2 2+26 .* 2*6866*0:Z* 2* .*44 :+2ܓCh "+ 2+Iv 8  +Lƴ`w58j8`808z(&0 2+ԃ + , 2822 ,(20:2,(282q :,e,(-88-8w9 2D,d:h-8qq8:j,qqqqq6rG 2 63qq :31u :30u :303122oT 2- oT- oX :-4/l4D2zp$ .0~t-~t- >|t :4D2oX8 .!.H2-8,(8-8w9 2D./y@y8yyq :/,(-88-8w9 2D/:h-8qq8:j/qqqqq6rG 2 63qq :31u :30u :3031z8oP22(22z,8$z 20z*Z32j3268`6686628`22822 202zp812zpoX .!1D,(-88-8w9 2D18h-8"1HoXoT2.. :2t8,zhC "20. 21L.8..20z(vƴ`w58j8`808&0 22,.20:22twp>2u@y8yyq :2,(-88-8w9 2D2:h-8qq8:j2qqqqq6rG 2 63qq :31u :30u :3v .!3|,(-88-8w9 2D3hh-8"vw3vv3zx31.2q :4D,(-88-8w9 2D4D:h4D-8z:j3Ŵ8Z4zŸzzz(v52p섦z,z<@Dpzz8Xz<" zp .7lz2zp22z,8z(8$<@D68`66866oP28`22/8222 >~t5~t5  >|t :;p2oX8 .!5x2-8,(8-8w9 2D5lh-8"5|oXoT2.. :68zhC "6d. 26L.8..6dz(vƴ`w58j8`8H8ܖ&؅0 26`.20:J6wp>6@y8yyq :6,(-88-8w9 2D6䴺h-8qq8:j7qqqqq6rG 2 6:qq ::au ::`u ::`:1z8oP22(22z,8$z 27z*Z;2j; 268`6686628`22822 28-2zp8802zpoX .!8t,(-88-8w9 2D8hh-8"8xoXoT2.. :98zhC "9`. 28L.8..9`z(vƴ`w58j8`8H8ܖ&؅0 29\.20:J9wp>9@y8yyq :9,(-88-8w9 2D9ഺh-8qq8:j9qqqqq6rG 2 6:qq ::au ::`u ::v .!:,(-88-8w9 2D:h-8"vw:vv:zx:1.2q :;p,(-88-8w9 2D;ph;p-8z:j;)Ŵ8Z;0zŸzzz(v9h8zz=@y8yyq :=,(-88-8w9 2D=h-8qq8:j> qqqqq6rG 2 6>qq :>qu :>pu :>v .!>,(-88-8w9 2D>h-8"vw>vv>zx>1.2q :?,(-88-8w9 2D?h?-8z:j?9Ŵ8Z?@zŸzzz(v9h8zzA@y8yyq :AQ,(-88-8w9 2DAP:h-8qq8:jAlqqqqq6rG 2 6B1qq :Au :Au :B)v .!B,(-88-8w9 2DBh-8"vwB vvB0zxB41.2q :Bt,(-88-8w9 2DBt:h-8<2ԗ.2ԗ/l2ԗ/2ԗ02ԗ12ԗ12ԗ2(<:6rD <. 2C 6C4. 8. . D:bD 6D 2D<5$oD5(250HE 2J3N4 Wd4<"u :E-uEDvw98h: :E\5H3I50oT :EoTEoX :E4 I505H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :I >~tF~tF >|t :I85XoX5T8 .!G5X-8,(8-8w9 2DFh-8"G oXoT5,6Ą:JGq65Tv5TG9ƴp5Hwp>8$Gi8`n3(5D6 :G86 86 6 G5(8Ih5D :G65<5(85<5<686vu8v:jHvvvvu6rG  2HuvHr:JG  :H,(-88-8w9 2DHh-8 *Ih5(6 :I<앖薖^ܗ셖膖 "I,6  2I6866I,vƴ`w58j8`8,p :G5,5(oL6rI\4oDI`5(5(H( 6I,(-88-8w9 2DIhI-85$5(oD26rI50wp>I@y8yyȇ<"u :J-uJ@vw98hoT :Jd5HoTJpoX :J4 N505H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :N >~tK~tK} >|t :N85XoX5T8 .!K5X-8,(8-8w9 2DK䵺h-8"KoXoT5,6Ą:JLY65Tv5TG9ƴp5Hwp>8$LQ8`n3(5D6 :L86 86 6 L5(8NP5D :L65<5(85<5<686vu8v:jMvvvvu6rG  2MiuvHr:JG  :Mi,(-88-8w9 2DMhh-8 *NP5(6 :N$앖薖^ܗ셖膖 "N6  2M6866Nvƴ`w58j8`8,p :L5,5(oL6rND4oDNH5(5(Ml( 6N,(-88-8w9 2DNhN-85$5(oD26rN50wp>N@y8yyȇ<"5H5,(4(262oP6 5T5T4508$<@25PD5L5@8h5@5(.8h.2 :SL >~tP~tO >|t :SL85XoX5T8 .!Pd5X-8,(8-8w9 2DPXh-8"PhoXoT5,6Ą:JP65Tv5TG9ƴp5Hwp>8$P8`n3(5D6 :Q86 86 6 Q,5(8R5D :Q(65<5(85<5<686vu8v:jQxvvvvu6rG  2QuvHr:JG  :Q,(-88-8w9 2DQܴh-8 *R5(6 :R앖薖^ܗ셖膖 "R6  2Rm6866Rvƴ`w58j8`8,p :Q5,5(oL6rR4oDR5(5(Q( 6R,(-88-8w9 2DShS-85$5(oD26rSL50wp>SM@y8yyȇ<"5T5L5,8v.h<5PƬh@6D65@8`5@5(28h2. :WP >~tT~tS >|t :WP85XoX5T8 .!Th5X-8,(8-8w9 2DT\h-8"TloXoT5,6Ä::T65Tv5TG9ƴp5Hwp>8$T8`n3(5D6 :U86 86 6 U05(8V5D :U,65<5(85<5<686vu8v:jU|vvvvu6rG  2UuvHr::G  :U,(-88-8w9 2DU೺h-8 *V5(6 :V앖薖^ܗ셖膖 "V6  2Vq6866Vvƴ`w58j8`8,p :U5,5(oL6rV4oDV5(5(U( 6W,(-88-8w9 2DWhW-85$5(oD26rWP50wp>WQ@y8yyȇ<"85,5T5L'8*rZLoX .!W,(-88-8w9 2DW̵h-8"WoXoT5,6:2XA65Tv5TG9ƴp5Hwp>8$X98`n3(5D6 :X86 86 6 X5(8Z85D :X65<5(85<5<686vu8v:jXvvvvu6rG  2YQuvHr:2G  :YQ,(-88-8w9 2DYP:h-8 *Z85(6 :Z 앖薖^ܗ셖膖 "Y6  2Y6866Yvƴ`w58j8`8,p :Xx5,5(oL6rZ,4oDZ05(5(YT( 6]]w)p:(v5T5P8h0p<@Ɯh6D5@8X5@5L5(5P68X6 :^< >~tZ~tZ >|t :^<85XoX5T8 .![X5X-8,(8-8w9 2D[Lh-8"[\oXoT5,6:2[65Tv5TG9ƴp5Hwp>8$[8`n3(5D6 :\ 86 86 6 \ 5(8]5D :\65<5(85<5<686vu8v:j\lvvvvu6rG  2\uvHr:2G  :\,(-88-8w9 2D\г:h-8 *]5(6 :]앖薖^ܗ셖膖 "]|6  2]a6866]|vƴ`w58j8`8,p :[5,5(oL6r]4oD]5(5(\( 6]-8,(8-8w9 2D]:h]-85$5(oD26r^<50wp>^=@y8yyȇ<502503504 504<2 :8_,Ŵ 6_, :_- 6_H2 82 2 _P*ZD <5`B0Hf5`i5`kP5`ax5`b| 5`f5얓i5얓kP5얓ax5얓b| 5얓( :a(aw9B(@;(@;(zzzzPB0<o4 2av2v8ow9 :a6vv8ow9 :a5B0:RG  :bBBvv8ow98bh3(2 :b< 6b@ . .beBBvv8ow983(B(<BG  p :OXBxBzvv8ow983(x@w-w8ƴwv8dƴd8h/((<"BD 䗓 "BT :5$6@t%802vv0u8ow8+(2u8_w8'($402vv8ow8'($202vv8ow8'($002vv8ow8'($.02vv8ow8'($,02vv8ow8'($*02vv8ow8'(02$(v1v08gw8'(@|# LܗL#PDX4Bd@|DL@|@t @0p8&w9w8ƴwwp>G  p :<BBvv8ow983(x02vv$~%#h0u8ow8+(2u8_w8'($|02vv8ow8'($z02vv8ow8'($x02vv8ow8'($v02vv8ow8'($t02vv8ow8'($r02vv8ow8'(02$pv1v08gw8'(4ܗ4#,X,<#$$BT48BDBd@|$4ȗ "pBT'8BTBD<o4Bd6r6vv8o@|w9:j4h@tOX,bv0Ŭp&w-w8F1ƴwv0tƴt0h/(BDH@|8@t<"BX : :BXBX :#B`#f@x02vvt%t 0u1u(|8ow8% +(2|8Ww8(#02vv%P8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv1v08gw8(&&h8Gw83(.v8ow8(#d.vv8ow8(#b.vv8ow8(#`.vv8ow8(#^.vv8ow8(#\.vv8ow8(#Z.vv8ow8(.#Xuu8_w8(XBX%8$BXBdȗ "BX8BXBX :0p-8,(8-8w9 2DP:hP-8BD<"0o4Bd6r0:@|w9w80w@tƴhv1b8h8&w9w8ƴwwp>G  p :4@xƘ88h8&w9w8ƴwvƴd6ZG  p := . .uB|B|vv8ow983(xB``@xOX@t@|@| rv0Ŝ0ŨX&ttss哖(ru(F1E)8 p &s!ƴOv0Lƴ<0h/(.s̃ԃ(L87w9vv8Lƴp("vv87w98<(p#("@|8ow9ss8Lp#"wws#(BDH@|8@t<"BD 䗓 "BT :'8BT#B`$fd@x$ 02vvttt 0u18ow8'(2u(8Ww8(#02vvd8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv8ow8(#02vv1v08gw8(&h8Gw83(.v8ow8+(#dd.vv8ow8($bd.vv8ow8'(%`d.vv8ow8+(#^d.vv8ow8($\d.vv8ow8'(%Zd.vv$P8ow8+(#X.duu8_w8(X#8'$'BX'Bdȗ "]BX8BX-8,(8-8w9 2D䴺h-8@xOX8;w9w8ƴwvv5.`,`vv8ow9w98@8w9w8ƴwsUd.`vv8ow9w98@#w9w8ƴwvhw8h'8:|xd.`vv8ow9w98@d;*vv8ow9w9` 8`w9w8ƴwvxwƸhd$h,<"@ :<BBvv6xBD8ow983(O\B\:8w88w9 2pH6r H6r . .6r6r .6r . . * *Yz :d H:@w9`8`w9w8ƴwv 6d `26xO\w88w98 ƴp6OXw9ƴp "BlG  ppB\-8Bl,(8-8w9 2D:h-8BD<ŠpnP 6m82 p"r]& 6@0 X"Z <xؗ@"r@nP܇:zz@@@ՠnP@;dB\,(-8:LBD8-8w9 2Dhh-85B0<"$#T d8$p8&OXw9w8ƴwvƶt- 6-w5X8Xv9v0ƴgv 61Ƹ,0ƸOXOX4*r];<(;6r@w58hw9;8H0 4*<6r .* 6r . .4"6r 6r ."6r . .%44 &@<< &;vƴpvƴ0'T;LD%hLD ";vƴpvƴ0; 2 2-'T$pT:TTpOXT< &OXJ̓|&6|:2JOX|B-t# H8|p8&OXw9w8ƴwvƶti 6iw5X8Xv9v0ƴgv 6mƸ,lƸOXOX4*rAńt<t46r  6r 2 24"6r6r$ 2"6r% 2 25 . .@t&2#&2@|@tƴh8h8&w9w8ƴwwp>G  p :$2|8p$p8&w9w8ƴwvƴ\6bG  p : 2 2# 8p8&OXw9w8ƴwvƶt 6w5X8Xv9v0ƴgv 6Ƹ,ƸOXOX4*rL`L@|@tĤ244Ŝ8ŨX&w-w8t-t ssĤ0<|ƴwĘH<&G  p :}% @,0Bu8$ .0w9w8ƴwvƴtG)6rG  :t0  :Š@@|OXŘX&w-w8bv0F10Lƴwvw)w9ƴL8h/(@t(PŬP&w-w8u-u(ƴwvƴt0h/(.vv8Ww98Lƴp(OX @OX@|@tbv08pŬp&w-w8F1ƴwv0tƴt0h/(# 8$p8&OXw9w8ƴwvƶty 6yw5X8Xv9v0ƴgv 6}Ƹ,|ƸOXOX4*r;LD@#@O\\@LD4<2rw18`w9800 *\6r@* 6rD . .Q<6r6r .6r . . " "\\ 4vƴpvƴHp'd<4LD%hLD "q4vƴpvƴ0 2BBvv8ow983(OX(rw8G9(O\L#@L<"`0`Ÿh 2d,w9w8ƴwvƴt 6G  p :a0 2L@t@|BT(ĕ# ܗ#8X4Bdȗ ":BT'8BTBDpBD6OX;pvv8ow8v9.`,`vv8ow9w98@8w9w8ƴwv.`vv僖8ow9w98@$`w9w8ƴwvhw8h'8:&8#.`vv8ow9w98@#*vv僖;p8ow9w9` 8`w9w8ƴwvw%Ƹh(h,<"p% *ø(Pp8&OXw9w8ƴwvƶt= 6=w5X8Xv9v0ƴgv 6M:ZH,OXOX:Zñ;6vv8ow8v9.`,`vv8ow9w98H8w9w8ƴwv!.`vv8ow9w98H$pw9w8ƴwvhw8h'8:&D.`vv;8ow9w980:*vv僖;8ow9w9H 8Hw9w8ƴwÕvwƸh(h0(BTB`%# @x02vv0u8ow8(2u8_w8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(02%v1v08gw8+(#PX#8'$4'BXBd' "ŕBX8BX-89BD,(8-8w9 2Dijh-8<%@tOXB`8ju0 *H0w9w8ƴwvƴtG-6rG  :L(0(0B`OX@|@tP(&t)t bv0ƸpĤh&vvw9w9F1ŬGuŬD8X+(&u0Du8ow98l0p'(&vv8_w98Dƴp(;,@|8@t<<<<B05`B05BD6xBD7BD7BD8BD8BD94BD9BD:LBD:ؗ<;.vv8ow9w98P8w9w8ƴwv7ɕ.vv8ow9w98Pw9w8ƴwvhw18h'8:ɴ$.vv8ow9w98P:.vv 2;8ow9w9`8`w9w8ƴwvw!Ƹh,h(<;p.vv8ow9w98P8w9w8ƴwv7ʽ.vv8ow9w98Pw9w8ƴwvhw18h'8:$.vv8ow9w98P:vv 2.;p8ow9w9`8`w9w8ƴw)vw!Ƹh,h(<OX( .bː0@3(ƸRv0(8dOX(8;(B(<BBw1w8uƴwvOXv8h"vv8ow83(Bu8_w8 :LBBvv8ow983(<" "̼BBBvv8ow983(+(Bw-w8(ƴwvOX((rw8/(<OXƴrw4'8 :a?@ƴt 6@<0p2R͡w1w8ƴwvh02Rx <w%w8ƴwu5 * BBvv8ow983( .p *q$%(P"vv8Pw9w8Ŭw0ov1uTu.p0l0u#($ %FĬ8%, .ΠPδPw9w8ƴwv5膦w%w8%(%ƴwvw18bw980ƴhƴp6$vv8ow8#(΄$  <2vvttt0u18ow8(2u(8Ww8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02v1v08gw8/(t 8Ow98(8Gw9%8 *н&(&`Ƥ`vvŤP08ow9Ј/h;h <2vvtt0u18ow8#(2u(8Ww8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02vv8ow8/(02v1v08gw8/("v!8Ow9ƴph"v08gw98#( <" ' ;(v%v0$ƴgv(&vv8ow9*rv&v(%ŬP08ow98Rp pw9w8ƴwvƀjҐhvv0僖#uuuu(tttt s8gw8(܇s哖8_w87(#vv08Ww87(8gw87(#vv08Ow87(8gw87(#vv08Gw87(8gw87(8?w87(<OX20uu(àjsu0jv08Ww8'(( ;("u8_w8w9ƴp(<OX0*vv8ow8w9,p"b)60Zv0vv8ow8w9v(,p8,;(,<OG8o0P\FnPn|G8nT4O\d66 OX<"OT# #8O\ t::xO\t80:OXw9Ĵp|| "TB|BO\t206r֔0026r֘ . .֥26r6r .26r . . * *(BȃOTp;(8P;(l&vvl$uu8ow8(2uu(8_w8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'($02vv8ow8'(02$v1v08gw8'(8Ww98ĸl &؝BBvv8ow98۠3(l%6vvu8ow8(2u8_w8+(%402vv8ow8+(%202vv8ow8+(%002vv8ow8+(%.02vv8ow8+(%,02vv8ow8+(%*02vv8ow8+(%(02&tv1v08gw8+(Bp8h|͸l$N%P|vvuu8ow8+(2u)u(8_w8#($L02vv8ow8#($J02vv8ow8#($H02vv8ow8#($F02vv8ow8#($D02vv8ow8#($B02vv8ow8#(02$@v1v08gw8#(B`ƴWvƴt8j3(0(t t쓖O\J&<"nP *cŜ``w-w8ƴwv 6,6;(0@(O\.6rw58hw98X0 Ä6r| 6r܀ * *܍&6r6r *&6r * *   " ")vƴpvƴXݘ'p%hp "ݕvƴpvƴX.ݜ 2 2ݰB|B~DOXw90pT6Tvv8ow8w90pL "5L "8DD &YBBvLLvv8ow9 :ޅOXOX2Z%L6Tvv8ow8w9,p:2BBv&03(v1v0儖L#.duuuu(ss4d$tt唖v v87w83(&08ow83(0$:vv87w83(&08ow83(Ȅ08Ow83( |$w9w8ƴwvƴtG!6rG  :|08($,#x#&ƴp4t䄖$ԴOX"rꡔ8w!w8ƴwv܄ &H'藓à &#À:8OXp8&w9w8ƴwvƴLv0h0@r ̓tlhtlh "OX,@&r2hvv8ow9 :Q2Z,2Z%v2vv0u8ow8'(2u8_w8+(%t02vv8ow8+(%r02vv8ow8+(%p02vv8ow8+(%n02vv8ow8+(%l02vv8ow8+(%j02vv8ow8+(02%hv1v08gw8+(2&`lܗl#^\uutt ss\v1v0$tt唖t8gw8+(t唖8_w87($Z\v%v087w87(&8gw87($V\v%v08Gw87(&8gw87(#R\vv08Ow87(8gw87(87w87(6\&vv8ow9 :G  :̄:$:v1v0w9w8Ŭgƴwuv.jd6w9w8ƴwv 6 *\'(2vv%0u8ow8'(2u8_w8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(%02vv8ow8+(02%v1v08gw8+(2&lܗpl#uusstt ssv1v0$tt唖8gw8+(ću%8_w87(t#vv0儖u(87w87(8gw87(x#vv08Gw87(8gw87(|#vv08Ow87(8gw87(87w87(&8Ww8Ƹ44tw9w9 :a'ƴu$8($,<< 0ƴT(('42,8TƸh0rŬt8Z <"nT:'$ ͸䃖&::|&r|ń6r$6r 2 2-6rh6rp 26rq 2 2 . .BBvv8ow983(* w,ᓪ *nP , Ŵ04$:*( 60P840v& v8ow9긗<"::nP&&nP6ؖvv8ow8B7(۴ "Mՠ "M䇖<6 : : wp>  ` wp> t<"J#6J62rw18`w9JƸ0 ń6:B$6:R 2 262r2r *6r * * . . & &MJvƴpvƴ0𰖖'J%h "Jvƴpvƴ0薖J 2 2!Bvƴpv6`ƴ`v5v04u8gw8*u8_w8 $<"u :}BBvv8ow983(o0'͸ " vvuu8ow8 7(2u58_w8'($02vv8ow8'(&02vv8ow8'((02vv8ow8'(*02vv8ow8'(,02vv8ow8'(.02vv8ow8'(020v1v08gw8'( u(8Ww9 :؃ vv8ow9%ĬX$ .2XưXvv8ow9ư@wp>}7h0H;h$$ 4%ؓ4vv8ow9긗<"u :9BBvv8ow98H3(o0'(͸w)w8ƴwv6t8G,8(r͸* ؕ .vv8ow98P긗<ƴd88d4pŬj(t8Rؗ<"u : BBvv8ow98 3(o0'(͸w)w8ƴwv6tm8G,8(r͸((*ww(u);(ؕ.vv8ow98P\<"u샖 :dBo0'(͸+((;(vvv-v0tt8ow87(.u8gw87(uv8Ow87(" 8_w87(ؓ v08gw9\Bvv8ow983(<"Hu셖 :B.vv$,u1$ u(nP8ow8'(28Ww8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#($02vv8ow8#(02$v1v08gw8#('͸#6$8ssBBvv.v-v0 ot u-u(8gw8'(.nP8Ww8(#4.vv8ow8(#2.vv8ow8(#0.vv8ow8(#..vv8ow8(#,.vv8ow8(#*.vv8ow8(.#(uu8_w8(8?7(ؓw9긗Bvv8ow983(<2vv8ow9 :!BBvv8ow9843(o4<2vv8ow9 :BBvv8ow983(0w9w8ƴwv 6o4 6 B . Bvv8ow983(<6866 :}o46 : 2 2Bo4:w9:hBvv8ow983(<VersionString: mcp-l4v3 3.08c Dec 11 1996 13:06:16  >u  :t<" {{{h8jzL 6$zŴ40,poD2P 60"oXoToP-@<)Xz :zܗz;(zD 6;(odD8 6od4D( `  ؗhP_hm엓!З", <"Ű 2oDP6 :0<:: : ؖ: ܖ:: :$:<w80p2R.vv8ow83(02R <z؇< qqqq 6 dqqG,20q6rA!Lqoh{Hԕoh poh p ppX q X<q :}qqw98h: :{q {oh{H8!(L<"Hoh{{&*v)v0vvŬo8gw9wp>Euq8qqw, :qvq8qq*v8ow9'8 :w9p4|D*Ą:JH8R** :!<H8R'8(6r<wp><wp>=wp>D 2 2* :q8qq* :!H8R'8 6rwp>wp>wp> 2 2H8R'8 :8wp>8wp>9wp> 6 6wp>xwp>ywp> : :q8qqq8qq : h{6vv8ow9'8 : Pw9 p4    qq6b 84q:ZG  : q8qqq8qq PqqД{6b qqqȄ:ZG qć&p: q8q & qX 2 M' : M-.u.p.̆4.L 6 M.p.-h::(8q8qqq &8hq Q \q8qq{̗ Pq8qq{0 Pq8qq{H8j'8HX<p{X<oh{X<{oh{o{p{q <vvvu 6 ujuG,20v6r !LrvHH r r,s0ȕstH@tԕ,u`uuu<"8u :(u :=Зu :Yulvw98hv :v`vHvvvHw :tHu :u :@v`6p:!u`ôJ# ĔԅJ6r w58hw9JƸ0 ń6:B$6:R 2 262r2r *6r * * . . & &EJvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2$w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &84hĜr.j$,p0pw9w8ƴwv((.rY0v8p8Hƴp lPX 2v\v8v\v\ .!0,(-88-8w9 2Dh-8"vw4vvu :q,(-88-8w9 2Dp:h-8vv8:jvvvvuu6rG  :uw58`: : v`-8rvH,(8-8w9 2D:h-8rs0vH<v`vT8hvTvX8vXuvX :,(-88-8w9 2D:h-8vv8:jvvvvuv:jG  .!u-8,(8-8w9 2Dh-8"vwvvur :@vHu :UЗu :quvw98h: :v`-8,(8-8w9 2D:h-8rvH<u :@u솖{8vH{0r:jG  :AЗ <u :u{HvH{@r:jG  :З <v :vHv vvHw : t,vH@<u 2u{Hv{@ưh&lPu{8v{0Ƹh&lPXsvH<{(8{(u{( :!uu :%u@uu :AuXvw98h: :v`-8,(8-8w9 2D:h-8rrvHv .!,(-88-8w9 2DԵh-8"vwvv<"8u :4u :I@tv`6p:}pu`ôJ# ĔԅJ6rhw58hw9JƸ0 ń6:B$6:R 2 2 62rD2rL *6rM * *] . .l & &Jvƴpvƴ0',J%h "Jvƴpvƴ0ؖJ 2 2(w58hw9BȦ:h8hu9u(80Wv0uuƴ_v &(4hĜr.j$,p0pw9w8ƴwv((.r0v8p8Hƴp lPX 2lv\v8v\v\ .!,(-88-8w9 2Dxh-8"vwvvu :,(-88-8w9 2D̳:h-8vv8:jvvvvuu6rG  :u$w58`: :ev`-8rvH,(8-8w9 2Dt:ht-8prs0vH<vHrvHrvHs0vHsvHtHvHtԗvHu`<vhwHԖvh"vvvw<v :"<wvh<xxHxx4x0<xw:!u9w9:h 2ƨX0u6X6x8-60:J5x0 <.!w9:hxv0twxvƴp6 286x0<"x : -@w&w5ĸ`8t5w&b !x"`t xƴr 6 -8w`,(*-8w9 .D p:h-8** !"`vt x6b $#$ x0<:ww98h :6rD < :!]w6'8:b!Dxx< @ @xy̗H",x<oD6 :"p6:jG  :"x 2 2"2 :"@y8yy蕓y̕<y̗xy̗y<<<"  6#' .8..$4%h "$46b$!w58hw9ƸXw18`w98X66 6666& 6r#.8..w58hw9,p*: *:: <" . "%U' %h "%U 2%Ew1Ƭ8`w98X66 666 6 6r%.'8.<"Ĩ&B&*2& Jv8hw9$pw)8Pw9Ÿ0 .6r& 2.6r& 2 2&%&x :.6r&\&d 2.6r&e 2 2G&y : :& :& :C:2&&B%&&B%&%Ĩ%( <ƠMƶt'q 6' H H'8"r'8.vv8ow83(02R'A' H H'8"r' H2r' H2R'w-w8ƴwvh02R' <"m( 6(t8(Av 6(w9(D "t!w80 "(4 :(q"j(d jw:(Tv b<"()܆ 6(4'8):b(<")4) 6)148):b)<{P :){P(< LB^PǨ !,"01.01myri_sbus.c:v1.0 10/Dec/96 David S. Miller (davem@caipfs.rutgers.edu) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout<3>myricom: Chip would not reset after firmware load. <3>myricom: Handshake with LANAI failed. <3>%s: transmit timed out, resetting %s: Transmitter access conflict. <7>%s: unable to resolve type %X addresses. myricom: AIEEE weird cpu version %04x assuming pre4.0 %s: MyriCOM MyriNET Ethernet myrinet-eeprom-infocpu_versionclock_valuesram_sizemyrinet-board-idfpga_version%2.2x%c MyriCOM RegsMyriCOM: Cannot map MyriCOM registers. MyriCOM Control RegsMyriCOM LANAI RegsMyriCOM SRAMburst-sizesinterruptsMyriCOM EthernetMyriCOM: Cannot register interrupt handler. MYRICOM,mlanaimyrikernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4! `  ,y2(  =BHP*Y=b ! 4 $4)@)P)O\yj{@ (0 `@ l ( - @yTy_ e}+2EXj{ d p ,Gdk|$5MLYhHhmyri_sbus.cgcc2_compiled.versionlanai4_code_offlanai4_codelanai4_data_offlanai4_dataroot_myri_devmyri_clean_ringsmyri_init_ringsmyri_initmyri_is_not_so_happymyri_type_transmyri_interruptmyri_openmyri_closemyri_start_xmitmyri_headermyri_rebuild_headermyri_change_mtumyri_get_statsmyri_set_multicastversion_printed.768called.771*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv___atomic_sub__kfree_skb_R4954ae5flocal_irq_count_R3e580ce8local_bh_count_R8c090c95alloc_skb_R56cd27aeskb_over_panic_Rbce6950dmemcmp__memcpy_Rbfaaaa73netif_rx_R49d7b77ajiffies_R0da02d67printk_Rdd132261___set_bitskb_under_panic_Rf4dd5514arp_find_R141fb853myri_header_cachemyri_header_cache_updatemyri_sbus_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_etherdev_Rfa670d60prom_getproperty_R156810c5prom_getintdefault_R858c90dcmemcpyidprom_Ra3bdb69c__bzero_Rdd42e263prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169esparc_cpu_model_Rb1a8ddf9prom_getint_R51946adbrequest_irq_Rb9ba6802ether_setup_R04a27efaudelay_Ra39b4cf2dev_new_index_R8fddc84cinit_modulecleanup_moduleunregister_netdev_Ra9101341kfree_R037a0cba4&H'&'( ) ( )  *  +t,,x*  +`*  +-4.( ) ) ( &$'\/ `/ t p|0 p( ) ) ( / 1 0    2   2 (- -   3 0   - L- \- |-  y  y 7 7  y     $8 4  <8 @  T9 \ y d y h (  y  H    0  0  (  H :  `  ` $; 0 p 8 p <; H  P  T; `  p    : < = = = = = $ ,:D>X    00 ` d h0?  @    @  ( 4@L 0T 0`@p @tA x P|       ` @@;PA lBp P       `C x x0D   ` 4 5 $ ( `0 44 85  y      ) )( ), )E 0  E @0 @F y yP yT yX6l yp y yI yJ yELFc4(㿘' `@@ @$ `#% ``$ $ $ $ $ $$ ($ 0$ 8$ 4$ <@  @ 0 @㿘 . I. H& D L@ ??"8& X& l& 6 & t& L& x6 & & & <& @& p㿘   p @2 x@ x  &  p @2& x@& x㿘`@ !! `2&);?@5d  @ @!   @!"?@0 @ ?@` @`  `&)$ < `" @ 㿘) C&) @@ 09  2 @@ $ <0$ @"$ @ <) @ " $ <@  @А @ !0@@$ <$  @ ^@f` @`  `㿘鄀 2?%@ @!   @!?D+` ? })  @`   `,鄗H` ,@    @?""`$ , @ ` ```$@?@ `?鄰 @      <ɔ ,  @`` - ``\@ @ @ ? $  `D  `@  2?`p @@㿘)`@ @"`M?  @"[E?% @`@ @%%@  2 @ .  \  $ \$ @  D` @   p @ ?@?@ x` ?@ @2.?` 2`(?@ !! `?  N"$`@ " X   T">D  PP    W  O"ODݐD` ѐ?`L&̀ D`   ? @`@$`L @  `   ? @`@$`l @  D` `L@   ` ؒ@   @ *?'ܐ`L@ `@q@ s d o$`@h, `, @@ H``,@    ?$ "`$`,"""ۂp @A@- HHo``,`,@" `2`\D` ?&  @㿘i /  @) <@%   @#20 `" ,@ , ,@" `2 Aa 2 @ "   㿘!) ?߀ !&! @ @#M   @#M0  < @3 @ 㿘 @ @#e   @#e[  D @"`Q?0 `! *  *   (  * #@4  &   &  `\@ &       **`\`` &`\&``  2& x 2& x  2 & x`\`` &`\&`& x@㿘 @   @#   @#{  D @ @   g  @ x`?? D  <`\ ` " x l`\`6  Đ & Đ & & x x`\ ` x  p@2& x@& x @ x ` @ @ @" @   㿘 @ @#   @# @ D @2?& |& x@㿘 @ A @ @#   @#  D @ @   p  @  "@:? D  <    ` l"   6     x& Ā& p @2& x@ & x @   @ & &   @ x @$ @ @ @" @   㿘 @ @$1   @$1ʰ  x"8& &  0 \`!` `+` |   `  (  6  ~   "@ @ +` ~(``+` #@4  &  ? ` &  &  @ ` "0  L  })@  `    * ;`*` ` , ;  `4((` (ڀ2E6 ; ;`*` L  * 2 } `4( }(` (; ;`*   *@  `4( }(` ( ~( x&  p @2& x@& x D @ & & | 㿘 D @  @ @H` @    ?$ "`& """pۄ @㿘)  @ @$   @$0ɀ  < @ @ @@ 0 @ @ ]   $ I  @, I    @ `` ` ` ` 2   @@@ $  \`   & \& @   **@ ` `@   \`   & \& @ ,@  \@  & \& @@  \@: "  " "@  @  $"  |  "@   \@#@ % @h 2   p @@@` @`N` I ", I``` " $"" $" @$ <*`  *    ~;$  H #? I , I I 2 I@ %c I @ @ @   p @2 I@ I    $ @c4  , H, I I    l*@ H 2 }  , H, H 2 \  @ `` ` ` ` 2  \ @@@  f, I``   ` & \& @   ** \`2    ` & \& @ ,@ \ @: "  " `"  `@$"&, I  |  "@   \@#@ ` & \& '@ ,@ *2 * 2@ 4  $ 㿘3579`  %ܐ "6 P6 Z& T& & & & @& & 6 X. o 㿘 \ "< @  ?` @`   `㿘 \ @  @&` @`  ` H \ @ @&:@ P"񀦀 "O""!?0`!򀦀1?0[ ' ' ' ' ' ' ' ' ' ' ' "/ L '' '$'0'4'(',' L Ѐ "   ؀ " P 4  P`@@ `D`@  @ ? 㿈 @ ? @&j   @&j?`@ !! ` ? Q@"D Z@"TD  A@ V@"D  ?@!  @@"D   K@""D   R@  Y@":Dn   M@j0 L@" Dc D` @  @ ? 2]$% @@&  @N   @ @  $@ ` @  @ ? `23 * @@HH <7`# @&  @Q @  @ ` @ ? $@ 2 @@4 @  ` @  @ ? `2߰ * @@@  @HH *@&   D  @  $@ ?  d @"   '" @ d'D @ @ @     ` @  @ ? `2 ~? @@ @  @@ &  ?@ d! @ @    2U耢) +!"'    0' 0@@ @ 7? L@ ܑ* 'D @ @@       +`" @   @ `"M"`@@ @=HD! @ ?Ȓ@   ̀`Ȳ ` D    @ `oـ l?HHo`Ѐ  *@& @ؠ  ؐ@`@@ؠ  @@?ؐ ْ @06   Ѐ "&  @& &  €؀ #&  @@  ؀ "&   @& &  €؀  &  @@ @ ?Ɂ㿐```*  Τ? @@ @H@?` *` €  H ?# @&  `@`  ` 2&  Ѐ !@ `   @ v  @ H/  @ a& `^!@ @ #\ $    P  @ H/  @ 90 `72  Ѐ1@. @  @% @ 0 @ (@  @ @ H *@& 㿘HH ?#? @&  @ @  Ѐ "  @&  ؀   @& ؁㿘``\ `p @ @  ``@@ @b  $b`2``< @@  @ @3b   $b ?&`&`\`؀ x0`  s  *  2e`` @    `& & 2`@  ? ,``ؘ @ `p @2@``\` &`\H&`@B``@@ `@   p @2`@` "`@` $`` ` $` 0`  *  2 ``@  @````` $`$` @  * `   "     €  `p @2`@` $` 㿘 @ @(   @(0  @㿘\ &`6t &\&&$`@&  㿘 @ @(   @( !H " `\ "   ܀ 2 ǒ(㿘 @ @(   @( !H " `\ "   耢 2 !b㿘 @ @(   @( !H " `\ "   2  a7s㿘 @ @)   @) !H " `\ "   䀢 2 J 㿘 @ @)   @)9   25   "1 ``\`@ 4 `\ @@@   `@ "@ ``  &`\&` @  `&`\ &`㿘 @ @))   @))   2   " ``\`@   @@@  ܒ㿘 @ @)8   ``\` @  @)8 㿘 @ @)C   @)CR  ,H`&`   $ &@&`$ "@+ 4H` ,@    ?$ "`& ,""""  4p @2 4@  4 ֐ @ ! <,  @  㿘 @ @)r   @)r0 `@`\ @` `' `*  "2`0 !"  0  %/*  "'   "@$  `:`:`:`,`),`*,`+,`( : : : ,`/,`,,`-,`. Ȑ & Ȕ  `@T`\ Ѐ P0 !LI  @  2 @ `p @2L& 8@H& 8   И @   p     \  @ $ \$  @`p @2@  @2 @ @U T  & 8@ 㿐`\@  2`@ R `'3``\` ` `@􀢀 p @27@3  -  * o / ! *`  \   & \&  @' , *`p*  *`@@㿘 @ @*    @* 0? 8 2& 8@ 07" 8H/`   ?""& "@"`"` `" & 8 @ږ  8  ! &!`""`㿘 @ @*0   @*00Q H/`&`  `$ &@&`$ " $ 8H`    ?$ "& "@"`"`` & 82 @ 8  ! &!`""`㿘`\ 0 < [ p  W`2  t @@P@@ K p   @" 4  `h"  !7@ !"݀@"    ! W   +   )@@#   8&" 8 @@ @   p @@   @ p @2Ͱ @ɰ  @ &`$ &`$  |" f \ @  2<` @  p @2&$ 8@"$ 8H/`   ?""$ "@"`"` `"v$ 8g @ږ k 8`` &`&` \`\@ `@ &`\&` @ @ \ p @2@  \ |  & \& @    ****# 89 #H/`   ?""$ "@"`"` `" $ 8 @ږ  8   ! $!`""`  \  "쀠2 쀠2㿘% ##   @2   P  @  @@ M@`   #8@  @ < @#8 &   &`& & & @  @ @" & &  $ ,$ (& @$ \  @  @ @  $`" "`㿘%& & &  " & "  ,"`& ,"`& 8&  & @ ,!@ \ & & ؒ  " ?㿘 @ @+u @@ @  @ !   ,@ &  @@H` ,@    @?$ "`& , @ ` ``ۂ p   @@H` @    @?$ "`& @ ` ``2ۂ p! & &!`""`    0 @* @*`  . @^`**% * *h  @1Ȓ @ , Ҕ  @`Ȓ @ ,Ȑ @HH``2@ ``2` 㿘 @  " HHo`   $ " $`  `@ 㿘 HH/ ``2  @""@ 0@`2` 㿘G  @㿘+``  '%@@,D` 2 aH "` ``2@  @ @ "@ `@ `` `@`@ 2`<4>PPP: ALERT! not INUSE! %d <4>bad magic for ppp %p at %s:%d 2.3.7#2F$We6tHZl~3"VG,ud>ɍ@ۮRdv!0g&vD4UJÎXn|1 wf.TE<ˬBُPftBSap '26L^׈hzRC q`(7&:DV`rcr@Q%"40N\թjxsbPA5$*8FTbp,ӥ>@+R:Nd_mv|ҭ$6 H;*Z^Ol}l~ .<ѵ)B8 Pof~Lt]&н49(J Xnn\M| ׅ(:JD[iVx `/r>֍ 2ZKLyh^ h?.zՕ*8kFzHTY-b<pԝ"0{jNXI\=,jxiiiiiiiiiiiiiiii!W+)-/0123456789ABCDEF01.01kernel_version=2.2.25using_checksums=1parm_flag_time=ippp_register_compressor_R9682e733ppp_unregister_compressor_Ra1b928dfppp_crc16_table_Rcacc1f6a<6>PPP: version %s (demand dialling) ppp<6>PPP line discipline registered. <3>error registering line discipline: %d ppp.c<3>ppp_alloc failed <4>ppp_tty_close: bogus <4>ppp_tty_close: not inuse <6>ppp: channel %s closing. <7>ppp: read of %lu bytes too small for %ld frame <4>ppp_tty_write: truncating user packet from %lu to mtu %d <3>ppp_tty_write: no memory <6>ppp_tty_ioctl: set xmit asyncmap %x <6>ppp_tty_ioctl: set rcv asyncmap %x <6>ppp_tty_ioctl: set xasyncmap <7>PPP: tty_receive called but couldn't find PPP struct. receive buffer<7>couldn't alloc skb for recv <7>rcv frame too long: len=%d mru=%d hroom=%d troom=%d <7>ppp: tossing frame (%x) <3>ppp: %s not active <6>ppp_ioctl: set mru to %x <6>ppp_ioctl: set flags to %x <6>ppp_ioctl: get unit: %d <6>ppp_ioctl: set dbg flags to %x <6>ppp_ioctl: set maxcid to %d <3>ppp: no memory for VJ compression <7>pppioc[gs]npmode: invalid proto %d <7>ppp: set np %d to %d <3>ppp_ioctl: invalid ioctl: %x, addr %lx ppp-compress-%d<7>%s: no compressor for [%x %x %x], %x <7>%s: comp_alloc failed <7>%s: decomp_alloc failed <7>ppp_proto_ccp rcvd=%d code=%x flags=%x <7>%s: comp running <7>%s: decomp running <7>%s: comp reset <7>%s: decomp reset <7>%s: ccp closed <7>ppp: got runt ppp frame, %d chars <7>ppp: frame with bad fcs, length = %d bad frame<3>ppp_recv_frame: no memory <6>%s: decomp err %d <6>%s: not decomp, rc_state=%p flags=%x receive frame<5>ppp: error in VJ decompression <5>ppp: error in VJ memorizing write frame<3>ppp_send_frame: no memory <3>ppp: ppp_async_send didn't accept pkt <3>ppp: no memory for vj compression <3>ppp_output_wakeup called but xmit_busy==0 <3>ppp_dev_xmit: %s not connected to a TTY! <6>%s: packet for unknown proto %x <7>%s: returning frame <7>ppp_dev_xmit: dropping (npmode = %d) on %s <3>%s: skb hdr alloc failed <7>could not reregister ppp device <3>ppp: struct ppp allocation failed ppp%d<3>ppp: dev_alloc_name failed (%d) <6>registered device %s <3>ppp_alloc - register_netdev(%s) = %d failure. <7>%s released <7>ppp: %s, count = %d <7>%s <6>PPP: ppp_init() failure %d <2>PPP: removing despite %d units in use! <3>PPP: Unable to unregister ppp line discipline (err = %d) <6>PPP: ppp line discipline successfully unregistered ???????????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.kstrtab__ksymtab.rela__ksymtab.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4T !w$` ,T@2 ` =W@BWHW0AQWxjZWdH  sX {ap  bHXL b=bfpN o  )2>0"MX WR@{` @ ,  h  l.X|@JPIK8SLd qBTMD8 ,$Hx<HP4 6t21@<7lI8X8f9`s:<;@<<!xE!p"hhJ<" 1,X/Q?.l\M7TX><,gAh|wOt`O`0 "8 dQ($ ^P  DUg #7PWm !5G`t7IbrR,S ppp.cgcc2_compiled.flag_timeppp_listppp_lastppp_warningppp_magic_warnszVersionppp_unregister_compressor_Ra1b928dfparitytabppp_ldisc.432ppp_first_timeppp_tty_openppp_tty_closeppp_tty_readppp_tty_writeppp_tty_ioctlppp_tty_pollppp_tty_roomppp_tty_receiveppp_tty_wakeupppp_async_initppp_async_releaseppp_findppp_allocppp_generic_initppp_tty_pushppp_output_wakeupppp_releaseppp_send_ctrlppp_tty_flush_outputppp_ioctlppp_sync_sendppp_tty_sync_pushppp_async_sendppp_async_encodeppp_print_bufferppp_receive_errorppp_receive_frameproto_listrcv_proto_iprcv_proto_ipv6rcv_proto_ipxrcv_proto_atrcv_proto_vjc_comprcv_proto_vjc_uncomprcv_proto_ccprcv_proto_unknownppp_init_devppp_dev_xmitppp_dev_openppp_dev_closeppp_dev_statsppp_dev_ioctlppp_ccp_closedppp_set_compressionfind_compressorppp_proto_ccpppp_rcv_rxppp_send_frameppp_vj_compresshex.533ppp_print_hexppp_print_charppp_compressors*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_flag_time__kstrtab_ppp_register_compressor_R9682e733__ksymtab_ppp_register_compressor_R9682e733ppp_register_compressor_R9682e733__kstrtab_ppp_unregister_compressor_Ra1b928df__ksymtab_ppp_unregister_compressor_Ra1b928dfppp_crc16_table_Rcacc1f6a__kstrtab_ppp_crc16_table_Rcacc1f6a__ksymtab_ppp_crc16_table_Rcacc1f6aprintk_Rdd132261__bzero_Rdd42e263tty_register_ldisc_R137daa9e___atomic_sub__kfree_skb_R4954ae5f__this_module___atomic_add__wake_up_R8a4864fastack_top_Ra6cab6a7interruptible_sleep_on_R34d66e55__copy_user_R9c5239eballoc_skb_R56cd27aeskb_over_panic_Rbce6950dmemcpyn_tty_ioctl_R09e340f6__pollwait_Refab907ftty_hung_up_p_R66c240da___set_bitjiffies_R0da02d67___clear_bit__memcpy_Rbfaaaa73strcpy_Re914e41estrlen_R97255bdfslhc_free_Rb359d2c6slhc_init_R7c2b6d65bh_active_Rfff9d0a3sprintf_R1d26aa98request_module_R27e4dc04slhc_toss_Rab9b2fdfnetif_rx_R49d7b77aslhc_uncompress_Rdafbfa2aslhc_remember_Re6dfb238kill_fasync_Rdf2e9283slhc_compress_Rd145256eskb_under_panic_Rf4dd5514unregister_netdev_Ra9101341register_netdev_R0fd2700bkmalloc_R93d4cfe6dev_alloc_name_R1c6045aakfree_R037a0cba__memset_R1907e126init_modulecleanup_module  X    X\ $]4 (8 < @ (D H L  P T X \ ` d h l  p t x |   ^ X 0\ 0 X\]t_`_`8 0< @ 0D L\` d h\ \ a a b( ,\0 H L\P c \ a a _P 0T X 0\ d\x | \d d a a btea a _   \Dd `f_`  \ @  @(\8gL P\T   hd d f_` d d d d     \ d d X  \  `\ td xd f d d f i   $\ (  Pj _ ` <j d d P  T  X\ |k l 0   0 \0 4 8\ 0  0 \  \mTn Xn X 0\ ` 0d l\  \mmo_`o o o4oTm 0  0 \  \m\ 0` d 0h p\  \mmo_`o4oHo\o|m 0  0 \  \|  n n n n HY LY _`o<mP_d` 0  $ 0( 0\D H L\ \  X Xg` hd\h h  h   hD XH XPh`p  \_` ` `|  \_`tg h\ h     h h | l | th     \!Y !  !4!$ !4!,h!<Y ! E! !! "h! J! "! E! !! "h! J! ""a "$ "(\", "8a "Db" 0" " 0" "\"a "a "_" 0" " 0" #\# ]$\ X$` X$dq$lr$d $d $f$ 0$ $ 0$ %\% % %\%n &dd &hd & & &\&d &d ' d 'd ' ' '\'d (d (D 8(L\(P 8(\d (`d ( X( X(\)d )(d )Xn )\R)ln )xR)d )d )f)d )d *, *0 *4\*Ls*Xt*p *t\*x *d *d *f+ +  +$\+\d +tf+ + +\+u +u +u + + +\,d , d ,<f,|d ,f-( @-8v-< @-@w-l P-t P-\- - .P .T .X\. . .\. .. .././h.1.1././.1.1/1/1/1/ 1/1/1/0/ / /\0 0 0\1   1$  1(\1l 81p 81t\2( P2, P20\2_2`2 h2 h2\3L 3P 3T\3\ 3` 3g4 4\4  4d_4x`4 44 44h4 4 4\5_5`5,x5 5 5\5 85 86 6 6 6p_6`6 06 6 06 6\6 6 6\7x7Ln 7Tn 7\y7 07 7 07 7\7 7 7\8( 08, 80 084 8<\8P 8T 8X\8 08 8 08 8\8 8 9\9x 09| 9 09 9\9 9 9\: 0:  :$ 0:( :0\:D :H :L\:z: H:\: H: ;: ;:h;X 0;\ ;` 0;d ;l\; ; ;\;{; p;\; p<( 0<, <0 0<4 <<\< < <\< 0< < 0< <\< < <\=_=`> c>(|>T 0>X >\ 0>` >h\>| > >\> > ?g@  @\@ @$_@8`@ @@ @@h@_@`@_A`AT AX\A\ AtgA A\A A}A_B`Bx BB BBhB_B`B 0C C 0C C\C$ C( C,\CH CL\CP CmDu D$u D,u DP 0DT DX 0D\ Dd\Dx D| D\EmEu Eu Eu F  HF(\F, HF xF xG G G \G@ GH GP\Gd_Gx`GmGgG G G\H_H`HmI II IIhI$pI8_IL`I| II II~J\mJu Ju Ju J J K< K@ KP KdmKoKKK\K KK 0K\K 0L]L  XL( XL8LH !LL `LP\LT `LXLp !LL L\L L L L\L LL L L L L M$n M(n M4n M@]ML]M 0M M 0M M\M M M\McMsN_N$`N_N`OXu O`u Ohu O O P@ PD PH\P` PlP P\PP P P\Q, Q0 QQ Q Q R,Rp Rt R RR R R\S S S, 0S0 S@ 0SH SL\S 0S 0S\S^S S `S\S `S S\S S SS7l889`:;@<<VTR@ WYZ   0  ,&4'@',H( T(|\)@h) & & (& & &|$&((&,&40'$4&<8(<&H@(tD&PH)8L&\P)T&dELF 4( 㿐#\#`   @ 㿘\`  J@ J 2?` 8 ?&  ?   2t?4o?` ` 4j?``$ c? (   Y?,@ & ,@ ?$,$$ $$L$$($H$D@ $P  ( $0   ($$8   (@D !,@ $<"$  ( 0*$` $ 8 " <   *`@& ? " $ b$ ,$|@$㿘     `"F?  *" 0@?@9& 0 $>( 0$@ 0@ 0$ d$ T $ @ P *  L @$ @ 0 @@  P `*  L  <$ @ ,*  @  8*`2  @ <* 2`@( 0` 㿘 ")?  "%? "!? $  ?& ,& & &  $   $ $   " * q$  & 0$ @@B 㿘     " ` $ |)?%+`.` @**  @  @  @  |@@*$ | $ x $ $ $ t$  2` ( " *" 㿘  `8  " ``@ & `$`  "@& & `" $``$`㿘 װ?` `4Ѱ?`6@̰? 2 `   "2 `` ?$`` L &  **&  ( |?* :`(  d*`  @  q$&  d  `0`0?c  $`0  " ```2 b? 2  @4 `  b `  ?h$` 2  | l 2 |`GbF` |* @*` `"& ` 2C '?)```@0@0  @ `  D <*  2? D <*`@"```?&  `2   2 `0`0?c  ? & `?㿘 "5?  "1? `*`qb" '? `" < $€ ( <`" 8 $€ ( 8`" 0 $€ ( 0` $€ ( $€ (`q& ? 㿘` "?` 2@?#&` & `b& ` & `& `& `& `& ` & `$& $`(& (`,& ,`0& 0`4@& 4 b^?& @&@   (`$&`0   (`$&`8   (@`D&`<   (@`0` &``8 `< `2`$@-?  0@*`$ `8*@ 8`D`<*@ <` @` @*    `" @ b&@ b&@ `ijt&k(&`&k&k "   2  㿘` " `$``2@`0@@$`0@@@`$`$@㿘 $ D*` <*  & 42? D <*`@ |+  *   & x &  &  & X& t& @& d& T& l& p& `㿘 $ d> 0 t p !    8 , 0` l8 0@ (@@ (b l"_ l@  @ @  @  &~ 6'@ /'@ ('@ !'@ '@ '@  '@ "ɴ'@!  ! h l(㿘 $ l `f 4 d"  62 $2?>  - 0@ h d" T# D" <+`@& h& d& T@ "2@2@ 8+`@@ "2@2@2@   0 d l@ Ғ@  l& l 0 d  P& @@ `*  L & @ l(㿘 ??c8?> l& l  T& d @ * d" & l`& d 0   d T @#  d& T` "H  d T $" >@   0 " @  d& T` "/  l`8 dI l `"" 2 d T  0  d`" `?@ d& T` `    㿘   d 0 @@  P `*  L  <  ,& @* @ @ 8+`2  @ <*` f2 " X d $#>@8  X d& X XG d h# @ X l x"@ )& l`&& X d 0`& d @@  P *  L  <  ,& @*  @ 8*`2  @ <* f2  X? & X d & d X d& X@ 0& d  P& @@ `*  L & @ 0 @  l d`& l& d" l T  0  d" @  d& T` "/  lag` l!`"" [` T  0  d`" `?@ d& T` `    㿘͠ ( X d 0 @@  P `*  L  <  ,& @* @ @ 8+`2  @ <*` f2  X  h& p& \ && X x@:# p d $"@>@8 p & X X`8 p  `2  p d h" ( p& X p(S ` X N d l \ `@#  l p`"@?& l& p d @& d 0 @@  P `*  L  <& @ ,*  @  8*`2  @ <* f2  p? & p d  & X& dE& ` T  0  d" @  d& T&` ` ' d 0  @ " d T  0  d" @  d& T d l`& d& l 2  lB  d  l & `& d& l la3` l!`"- '` `   d 0  @ & ` T  0  d`" `?@ d& T` `    x+`         + @  (@ $  (* `@`  +  *       + @  (@ #  **@ `@  +  !:  `  + @ *?+ @ $  ?(`*@   + ؖ   2 ?   ,` `3 `7耤`a  ,` `3 `7ꀤaa  ,` `3 a7怤a  ,` `3 a7 @:!  ,`5@U ``4 %`㿘F) b& &  ` *t&+&+&+&+$&+(&+06&@!$t0逄  t0t  H0" 2""b" " 㿘H+T..6 P*`  .(`./`@/ @*  .  ...@@ *"2#@ ( "#@ .֟."㿐`+4'`  @'    2@ L +T*`@ * @2  `<; ,@,`@* @ `@$2 2@ 4#.`   @5 $@* @@@@b  & @@b & <̑, @-.` 2  .` " `?2 * ?`2  ?2 ".``",@ `* @  " @ @&@&4 `2.`x  ** 3  ؠ `" *`@ *4@ @ 2 6  㿘7 +L"=`H & +T?&  P  " 2  & * #@ ( `H +`H Pb"    *  & % % ,`4 + ?&   "@ &  怤`H&2`@ :`  ? 4 P`H L*+X &&+X , +X&*`% *?&* %  ,`@4  @  `- 2 2`&+X` Ѣ`L+X&*% -+4㿘?      *`? @ :0t`@"-`@.6 .6괄 3관` 4긄3긄3꼺        `@ ̴㿘 ?       @`%,` "P`3 ⴉ+  *t*v "@@.7   ( ' 6 .@ "' >7@@(7?'  u,*v+  "@@*t@.7 `  (  ' 0.@ "@'>'  7@@('7?* "@@$**.7 `  (  ' 0.@ "@'>'  7@('7 ?.7 . `6 (` ' 6 (`"@?( 4I** "@@$**.7 `  (  ' 0.@ "@'>'  7@('7  ?.7 . `6 (` ' 6 (`"@G?(K "@@$**.7 `  (  ' 0.@ "@'>'  7@('7  ?.7 . `6 (` ' 6 (`"@'>'  7?('7         `@,`㿘+= + 9)+(*v   * `2? 4   * `@$ 㿘b  ~+  6  +  3  *   & 2`*  " ;6 & &  ~* @6 &b  .  6  . 3  *   & 2`*  " ;6 & &  .  6 &b  +  6  +  3  *   & 2`*  " ;6 & &  * @6 & 4"b  *v` * + @ 6   *  & 2`* $ & ; 6`* *@  6&ڄ )㿘" " .  6  . 3` *   & 2`*  " ;@6 & &  .  6 &b  *  & @Җ 㿘"     *  ` & 2+  `?& & 6 "& @b   ?& 㿘#b !"  (  6    *   & 2`*  " 86 & & "  * @6 &) db  @"d (  6    *   & 2`*  @?8 6 & & d" * @6 &' ` @& b% ?" Z  "  (  6    *   & 2`*  " 86 & & "  * @ 6 & db  @"d (  6    *   & 2`*  @?8 6 & & d" * @6 & ` @&  & 㿘 |    2@Xz+w+#!b"   ` 22`@     `@{3@ 9"  !b +  6  +  3  *   & 2`*  " ;6 & &  * @6 &`@ː3b =""  #b +  6  +  3  *   & 2`*  " ;6 & &  * @6 &++ ` @)3b b   &  b@ b  & b6 㿘)" b *2 " `+@ `& . @  ,2@ !"  & ` @ *  2 `` *`6`! @*`) 6`! *`  3  | &"# d T`" * !).` `@ @``""  2 64  ""  `?㿘)"@ /+b@@+ @@ & / b@ #@$@.7@ ``(@ `'`0.@@ #@@('@7@b(@ @"@@#@.7@ ``(@ `'`0.@@ "@'@>'` 7@@@('@7@ +b@ "@@'@/7@ / `6`(@ `'`0.@@ "@'@>'`7@@/@'@7@3  (b@ "@@.7@ ``(@ `'`0.@@ "'@>'` 7@@@('@7@` +b@ "@#@+7@ +`6`(@ `'`0.@@ "'@>'`7@@+@'@7@"@ $ @"@@b$@.7@@ ``(@ `'`0.@@ "@>7@'@ '`$b@(@7@'@$'@     *```` ` *```` 2 *```2 `?*  0`* 2  b   *  # 0*# # 3    (  ` # 2 3 # "b * "0* " *"""2㿘ؐb &  6 >*@  & *  & *   & 3 +@  &   @ & 㿐 ?`2"`0"`"`   "`@ 㿐 "? `"? $2`? @  $€ (&  㿘"??N 12;?8 6?2 2?&  (   )& "  `"   "`  ( @?"  `    *@  "@ @?㿘@ 㿘 "a?` "]?@ `?`  *` €`1`@`$`$`  $   $@` "``2    "` "`` `@ $`$`  `$@  * @  $`   $`$``@`$`$`  `* "``$@" ``ג`@ $`$``   *` "`$@"@``’`@ $`$``   *` "`$@"@``@ `$`$` @  ` # `$@ $`0" $``$`" ? @``  ?` ?`@`? ` "`"*`}` @``  "@` "@`_`@`$`$`  `* "``$@" ``L`@ $`$``  *` "`$@"@``7`@ $`$``  *` "`$@"@``"`@ `$`$`  "`$@@   "``$` "` "  `  `" `$`"`?㿘    "#?  ?@ 0  ? & 06 * ?$@ @  " 㿘` ?@㿘 B?`2@0<  "@"``21?     ` `0 `   #  $$$ "@ $$ "@?㿘 4 " 8& ``$`(€ `2  $ @ @ @ $& 4& ,& & & 0   & 8&`0㿘   ( < 2    (  & $& (& 4&@ 80 ( $€ p , 0@`  "? ("` P *` €?  *`` 4  `&  `/`2  `4 $@&Υ4@@耢 & & & @&``$  &`&@& 0? && &  &4& &`4& & @&``$  &`&@& 0??  *`` <?#2` @ @ & &`& & @&``$  &`&@& 0͔?`&  l o  `& & @&``$  &`&@& 02C  ( ` , $ @ "?"`21 & 0@ , 0  " (? ("@  ` $ "?"@`2 & & @&``$  &`&@& 0r 8@ "%%@&     &?  *``  ?, `& 4   ! & &`& & @&``$  &`&@& 0.?@ ( ` `(  & & & @&``$  &`&@& 0? &4&   2  @  ͨ?  *``   *@ *`"  & 2  4     * *`"  &  &   @ ?2 &  &`$`(€ & & @&``$  &`&@& 0 &&  0 `a    @,  z?  *`@ , @   *  `  (" $@& Y4` `   @  _?  *`@ 4$@*@ 4   !  $@ 4 `2& `@ `$`( & &`& & @&``$  &`&@& 0@?  ( ? *"@?&  0  !@ *  @  4 #\ ` &   !`''#`@ܠ ?2& `$`(€ && & @&``$  &`&@& 0@ؠ 2`$@@& & @&``$  &`&@& 0۔?`(€ & && & & & @&``$  &`&@& 0@  @ @ @ , 0@`  "? ("  `A&  && 0@ , 0 @& & @&``$  &`&@& 0 && & @&``$  &`&@& 0q & & @&``$  &`&@& 0c?& & @&``$  &`&@& 0U& & @&``$  &`&@& 0G& & @&``$  &`&@& 09& & @&``$  &`&@& 0+& & @&``$  &`&@& 0& & @&``$  &`&@& 0& & @&``$  &`&@& 0?@㿘@`$ `( $`(`$€㿘 $@ $& ,& 0㿘 , 0@":? "`5?  (@" "  4 8& 8@`@&` ($@& , $"& ,〤& & @&``$@&@&`& 0 2?" @'H\ 'L'P'T''''''''''''''''*`  " H2!/#  , `  , *  ,``,`8 # * ,     .,` ?"   ' "@`   ,  *`#`" H`@*(` 'H '? 'p Ȥ .'"-[H`  @`&/ "@ : ``@*`  "`/  ( '' p@`?! p"@ //'*@ &4@, "  "4H) @& /  /L  ` /'"T*  `P/L"P* '4@ ) , `@* " #   )@ )@4 @2@ )@? @ "  %*? @ J$=.`? 㿐#\#`    ?? &"@  @&?㿐`\ #\#`!v ? ,`?? :$ 8@@$ 0? #\#` S  ? 2 a?? $  ?@$  $ ?@@0  ( "#` 2\ "<x'<'`'h'd  "<" ?  *```"a a *``a"a4  *``a"` "`@#\#` `! !   t" ?` "`@#\#` ` Ȕ  $` &&@&& 㿘  ?&? 2?```$€`(` 㿘 (    * * " " "㿘 , 0 @`  "? ("`  *` €)` '& & @&``$@&@&`& 0   @  , 0@ `  "@? (": $   $ $ $ @ `  *`@ `+`@   *   $@ 4  $ $  @ $  $ $_   $$ &`& & @&``$  &`&@& 0? @ `U  *`@  +`      $ $@ $ $ $4  @ `D  *`@ `+`@   *   $@  4 $  $ 7$ @ $ 0$ $ &`& & @&``$  &`&@& 0D? @ `  *`@  +`    $ $@ $4  $    (" "@  "$26  (  , $ @ "?"2$ & 0@ , 0  " (? ("@   $ "?"@"&  ( (   $ ? $ $2C  (  , $ @ "?"21 & 0@ , 0  " (? ("@   $ "?"@2 & & @&``$  &`&@& 0 (e$& 0@ , 0 @& & @&``$  &`&@& 0r $& & @&``$  &`&@& 0b & & @&``$  &`&@& 0T?& & @&``$  &`&@& 0F& & @&``$  &`&@& 08& & @&``$  &`&@& 0*& & @&``$  &`&@& 0& @&``$  &`&@& 0& & @&``$  &`&@& 0?@㿘`(`$€㿘 0 ,@`  ("` 8 " `"@&`&` 4 8& 8&`0@ (@@ 2)&`  0  $& 0`" 8 " `"@&`&` 4 8& 8&`0@@&` & ,㿘,0@`  `" "@'@`'@"@"`"`"0 0`8"`( . .` `0(```(@ ( `(``@` .`  (` ?  @/1u 0`"``" "@'@`'@"@"`"`"0u? ` @׉1`.` @  ` 1@(``` (  ``@.`  ( ` @1`@ .`@(`@ `.` @  $'1 "'/  /  (  &/  $/  !c 0``" "@'@`'@"@"`"`"0  㿘?c6  ` [ V1?!:& ``@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ̲` @`@@#@#񀦠,`㿘!@ 0  @ 0@ 㿘@ @  !"``"@ 㿘@ g@@   g8  !&&   㿘 @ @` @`  `㿐`2S   2M   2I   ` 2D   @ 2` <  x@  4   @`&`@ x & 8& 4`& &  8#\#`  ?  @  @`  &` & 4㿘$" @  2 ` 2 ` ` 2 2`   2  ` "&  &  @& 㿘 @&㿘``*     O 4@ .`...?: .  .$  $ $ $  & @ $ $    а"@$ $ $@  " $  @  $'6  ` X \`$ X$ \  d@ $ `$ d P T@ $ T$ P P:@ X:` `:` h:` p:` 㿘 @ @` @`  `㿘`2M   2G   2C   ` 2>   : 2` 6  x@  .   @`&`@ x & 4& 8 & &  @ 8  @`  &` & 4㿘$$ @  2 ` 2 ` ` 2 2`   2 ` "&   \& &  @& 㿘 @&㿐   l  @u?``*     Z @ d?$@`.`.. $ $ $ $ $  " ?$ $  .  $?`$ $ $`2  $ $ $    @ 2?@  " $    ,   @ ? ʀ`    @ ?& P T X \@ $ \$ P$ T$ X㿘``*  c 0.,` && & `& & @  " `   ,   @ 0  d P T@ & T& `& d& P㿘@ 2@ @ 㿘@㿘` G `D` @ 2   `@ 0@ @  deflate 1.0.4 Copyright 1995-1996 Jean-loup Gailly             inflate 1.0.4 Copyright 1995-1996 Mark Adler ??01.01kernel_version=2.2.25using_checksums=11.0.4Punknown compression methodinvalid window sizeincorrect header checkneed dictionaryincorrect data checkneed more for packet flush     invalid block typeinvalid stored block lengthstoo many length or distance symbolsinvalid bit length repeat #+3;CScspp !1Aa  0@` oversubscribed dynamic bit lengths treeincomplete dynamic bit lengths treeoversubscribed literal/length treeincomplete literal/length treeoversubscribed distance treeincomplete distance treeempty distance tree with lengthsinvalid literal/length codeinvalid distance codeincompatible versionbuffer errorinsufficient memorydata errorstream errorfile errorstream end<4>zfree: header corrupted (%x %x) at %p <3>z_compress: deflate returned %d <7>z_decompress%d: short pkt (%d) <7>z_decompress%d: bad seq # %d, expected %d <7>z_decompress%d: inflate returned %d (%s) <7>z_decompress%d: ran out of mru <7>z_decompress%d: didn't get proto <7>z_incomp%d: inflateIncomp returned %d (%s) <6>PPP Deflate Compression module registered <6>Deflate Compression module busy, remove delayed GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!  ,X2p  =PBPHh*QYl=b P P d8x2A$N [j prl,~  <Ht(xLx,"@7FRt^lxhr"|?$,  p#(%8'$,-@??P>9L&d|-|4\x;xB[\pMxYb$`jts||xt\tHu,xuPu\wPwxy,yPyD{@{+{ 8~A G_x}500T( Dr|0l&201`E0tVh 8t{ (57A8`JApYDB KtC C4'L 6[< KH`Z,wIt0Z4IndXbd@nT`|DaP\4eBH/Topxar m~8 8 ~<@(L<[ppp_deflate.cgcc2_compiled.configuration_tabledeflate_storeddeflate_fastdeflate_slowmy_version.550lm_initputShortMSBflush_pendingread_buflongest_matchfill_windowextra_lbitsextra_dbitsextra_blbitsbl_orderstatic_l_descstatic_ltreestatic_d_descstatic_dtreestatic_bl_descstatic_init_done.585tr_static_initlength_codebase_lengthbase_distdist_codegen_codesbi_reverseinit_blockpqdownheapgen_bitlenbuild_treescan_treesend_treebuild_bl_treesend_all_treescopy_blockbi_windupbi_flushset_data_typecompress_blockbordercplenscplextcpdistcpdexthuft_buildfixed_builtfallocfixed_memfixed_blfixed_tlfixed_bdfixed_tdzfreezalloczalloc_initz_comp_freez_comp_allocz_comp_initz_comp_resetz_compressz_comp_statsz_decomp_freez_decomp_allocz_decomp_initz_decomp_resetz_decompressz_incomp*ABS*__module_kernel_version__module_using_checksums.div.urem.udivdeflate_copyrightdeflateInit_deflateInit2_z_errmsgdeflateEnddeflateResetdeflateSetDictionaryadler32__memcpy_Rbfaaaa73_tr_initdeflateParamsdeflate_tr_align_tr_stored_type_only_tr_stored_block__bzero_Rdd42e263deflateCopymemcpydeflateOutputPending_tr_flush_block_tr_tally.umulinflateResetinflate_blocks_resetinflateEndinflate_blocks_freeinflateInit2_inflate_blocks_newinflateInit_inflateinflate_blocksinflate_packet_flushinflateSetDictionaryinflate_set_dictionaryinflateIncompinflate_addhistoryinflateSyncinflate_codes_freeinflate_trees_freeinflate_trees_fixedinflate_codes_newinflate_flushinflate_trees_bitsinflate_maskinflate_trees_dynamicinflate_codesinflate_copyrightinflate_fastzlibVersionprintk_Rdd132261vfree_R2fd1d81ckfree_R037a0cbakmalloc_R93d4cfe6vmalloc_Rd6ee688f__this_module___atomic_sub___atomic_addppp_deflateppp_deflate_draftppp_deflate_installppp_register_compressor_R9682e733init_modulecleanup_moduleppp_unregister_compressor_Ra1b928df WD L \TX  X $X ,YpZ\]`^ 8 8`, 8]X X X X $SX X X 0 @@ @abc d Hf Y ] $] 8] H] 0\ D] d  8  8]hhhii hhTiDhihih @ @( , 0 4 < t  (  ( l l  , (0 (4 l< lD x     < @ p t x      @    ,0 4 8 ,!(j!Xj"Tj- -$ / / 2 2 48 5c6 6 6 6 8` 8l 8 8 8 8 8 9  (9( (9Pj9 : : : : : ; (; ; = (= l= lA]AlAnBmB\ B\ BpBkCmC$oCx CC| CCCCD\CDCE0CECECF4CFXCGCG\CGCHCHCHD D DH (DP (DSD @D @F< XF@ XF`sFtFlHd hHh hH H I\ITvIxJkKzK{K({KlLD L\LH L\L\LL`NLdNLhPLlQLpRLtVtLxWTL|WLWM|M,}M M N< NH OD~P]P  P  Q Q R$ R( RhS S TX{Tt HT| HU({UtU}V{V{VVzV{V{W`~Y~YlZ]Z]^{a Pa Pa0{a8 xa< xa` dad ah dal a a a{a a a \a a \b bH bL bd{bl bp b (b (b{b b b xb xb tb bb bc| tc tc tc tc dc c |c dc c |d xd xd  xd \d d  d, \d0 d4 dH xdL tdP tdT xd\ xd` |dh |dl dt ed e|eh e|e|eefdegxegeheiTejekel8elpefp f f g0 Pg8 Pg g g h h0 h4 h ph ph i$ i( i~k~k~m~n]oP]o po pp p pl Ppp Ppx q r r tTStdSt tt tttjtu4juLu\uYuu u uvdvt v vvdv tv tv u,v u,v v vWw  tw$w@ twZwZx`y @y y @ymyy y yzlz| z zzdz u,z tz u,z tz z zoz t{{0 t{k{k| h| h| |\ |d|h }$ },}0 }@r}` }t }x }| }} }} ~lw~ @~ @~ ~ ~~ ~~   p  p  ,@ D P ` t |         @LXdp| (0 X         uuwPwxyyy {@{{~y$u(u,wP0w4x8y<y@yD{@H{L{P~TyELF4( 㿘% @` @ `@  S@ @?`, * "@*`@  @& @. `.`* "@*`@  -&@.    . . `. /.   + : * @*`" *+@ ?L@*@ "`  *@ *`" * @#`+@@ @ @`   `㿘  " @  @@` @`  `(0  * 2`**  * "("@㿘  `& * 2 㿈  * 'L* "@*`  _` ?`@ " % %ML@ * @  2` L*  4  @ " ` L 6%  % `  @ ` @  @ 2 $  %$ -  2  - # $ " ?@ @   ۰`  @ Ԑ ` @ϐ   (2`2 @Ȑ 2   ?*`@ 0   2   ?*@ p   @8 @  @,`)2`  @ ?#@-`2`  @ ?#@,` 2` - : `1 *` €` \@ Z@2` "@2 `  "@2` ` "@`,`Γ2`  @2  @ @ 耧`$ @" '' @. . - .5`,,@L@#@@%$  ,. @ @ @ * 0@` 2  * @ p  %- L@'  pL.. 㿐,' $,0  $0@` @ ' " 4  $4``' 40 , , *@ *`" *E * 2  â  6  `*`* $ 4  2  `@  *`  0`" *  : @$ 9$ `  3"  @$ "04  *@$     4  z   $  "p0  $  " `"d0`  4`" Y4`4` &@@'@ '@2`  (2`*  @ 0 @ * '@2` "    B@ @ "*`@0B@8 7` @ @ ' 2  *   p@ 2* '0`@$0㿘 8`5$ 8@  8`,$ 8`  .` $   B@ @ "*`@0B@8 *`` <` $ < @  0`$ 0@/*` * "@ *`   , ,  @ ,@ @ `@ 0 (2 *@ p (2 * &  (`$ (   ( 㿘  4  , (@ 0㿘      @  $ @ 㿘@  01.01kernel_version=2.2.25using_checksums=1 %d Cmp, %d Uncmp, %d Bad, %d Tossed %d Cmp, %d Uncmp, %d AsIs, %d NotTCP %10d Searches, %10d Misses <6>CSLIP: code copyright 1989 Regents of the University of California slhc_init_R7c2b6d65slhc_free_Rb359d2c6slhc_remember_Re6dfb238slhc_compress_Rd145256eslhc_uncompress_Rdafbfa2aslhc_toss_Rab9b2fdfGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.bss.note.modinfo.rodata.kstrtab__ksymtab.rela__ksymtab.comment4!l  ,H2H7H=`*FNHW0aX  p =Iyp _0Dt(%< , 2Jchntzx&9Sg` { 0D  80Z |H `  &( DP slhc.cgcc2_compiled.encodepull16decode*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulslhc_init_R7c2b6d65__this_module___atomic_addkmalloc_R93d4cfe6__bzero_Rdd42e263kfree_R037a0cba___atomic_subslhc_free_Rb359d2c6slhc_compress_Rd145256ememcmpmemcpy__memcpy_Rbfaaaa73slhc_uncompress_Rdafbfa2a__memmove_R60e2f255slhc_toss_Rab9b2fdfslhc_remember_Re6dfb238slhc_i_statusprintk_Rdd132261slhc_o_status__kstrtab_slhc_init_R7c2b6d65__ksymtab_slhc_init_R7c2b6d65__kstrtab_slhc_free_Rb359d2c6__ksymtab_slhc_free_Rb359d2c6__kstrtab_slhc_remember_Re6dfb238__ksymtab_slhc_remember_Re6dfb238__kstrtab_slhc_compress_Rd145256e__ksymtab_slhc_compress_Rd145256e__kstrtab_slhc_uncompress_Rdafbfa2a__ksymtab_slhc_uncompress_Rdafbfa2a__kstrtab_slhc_toss_Rab9b2fdf__ksymtab_slhc_toss_Rab9b2fdfinit_modulecleanup_module   4D Htx   ( 4  44t8<@DHLPTX\`dhlp( 8 !!  ,!P!t! 8# L  ! # ,  \! $ $  !,!  ' ( (' P P' p' p) +%-/ "$1($,3ELF$d4( 㿘.`?ɨ  d $`@  :@  5@  1 @  + " `2& X?& \& & $ @ @ @ @ ?"@ @ `@`@㿘  @ @  @ @  @ @  @@㿘.`  $@ @ @    + X@J@ E?` %` `;? @ @ @ $ 4 D @  & $ & D  & 4 H @ & X&  & H ` @& X%T& \ `?%` @ @ @㿘 d ` 6   `2 \ @ 0^`P $  H W& H@ ` o`2 `  . d@    `O* @  8 0`& 0@     `$ $ 2   @  @& @ \  $  $ \$ @ @ ($ $4 t@ (`& (㿐 X @  D   `$& D@,@@ 0' d '  @  @ !` #!   l@  $  `"H & $@&  @㿘) 2#@-  `( $4 l , `$ ,! ?&! `$@2@@ `" "` @  $ #@$ $ $㿘` `\@@ O p K p`$ 1  `H"@ gH  @|@  $   @ $ $  ?" `$@ @@   `$@@@  \ 4 $ 4 1 \ p @2 @ 㿘  \"    & $. #$# " ` @` ` 㿘 \ `#`. & $` @`  `?㿘?#@ \ ? T@  㿘# \`@ \ ($` ," 0" 4"  @" D" <" 8" H", P"8 L"H T"$ ,@"84 ""H$@ "$㿘 \9X357` & & @& T& & & & 6 Z. o d 6 P6 X&  @㿘) (#@#  `"@N  ` @ ` 8 & 8@@`耦㿘#` %, @``  ` `m  `` `@`` 㿘%  ?b?`C . 2 ,`@ < m "   n/` w 6 h &`d p@( n2@ `  n2@ ` ` ``@   ,`@ h  =$ h`@9 2  h!@   . @  @!$    & . d`@$ $ $ $ $ $ `& & $ x$ | & & |,`"@㿘`@ !! `'y? @`? @ `)i #@Xa??頒 R$ a$i4 fd$ h``"`؟@`؀`" `@ `  `ޒ!( 20$ @  2'$  @ m` *` *  * @$ @ l` *` *  * @$ x@ p@  $i @@ @`  `㿘) '#@" ") e $ 4 f m " l@ l @ p` @`  `  *@` ۚ ܘ "*** * *  * " 㿘` - ` ܀   `< `0 $ `6 ` `    @  @    " @,& '   @2    ` `  @2  `   \6 H *  &   & H @㿘) Ҕ#@2 ?"!"vD""!$"?""!&=0!%9"!&A=0!󀢀"D "!񀢀"!򀢀=0ܐ   ѐӰ= @@ D`  @   ?D` :? d& D`  ?`2? "? 2?  , d!2`X `  ?`2? A3` &` `2 m`^?퀢  @  `S, m*` *  * @$ @  `B D` :? m& D`   ? 2C? 3>?` &` `2 l`?퀢  @ p `, l*` *  * @$ x@ p ` @` ?&`` :? l&  ? @㿘 \ !y?  $  ? m?"`f *` €` 8[? m "`@ ` `L. m*` *  * @& @  ` @0:8 m` ( l7?ꀢ "`@ p` `). l*` *  * @& x@ p ` @0 l܀" . e hd@". e  ?`  . e e&`  ?$ 㿘! 4 $   @`@   @*  "`@ /? #*`@`@ @$` ` `$ $ $ $ ($ 4$ 8$ <$ $ $ $$ 0@   @㿘㿘+` c' !)" c&  @!   $   @ `,`@ "   " @ `@` ?$   @*  1/`,`  @  ` @  @ %  @`"@ `@` @`%` @  @㿐 0 , l ( `  `  /$` pl    p @ p@ l* *  * @& x@㿘 +  ' m`# `  ` l " @ p @ @ 0 @*` *  * @& @ 01.01kernel_version=2.2.25using_checksums=1parm_slip_maxdev=i%s: unable to grow slip buffers, MTU change cancelled. %s: trying to lock already locked device! %s: trying to unlock already unlocked device! %s: compressed packet ignored %s: header compression turned on %s: memory squeeze, dropping packet. %s: truncating oversized transmit packet! %s: xmit call when iface is down %s: transmit timed out, %s? bad line qualitydriver errorsl%d<6>SLIP: version %s (dynamic channels, max=%d). 0.8.4-NET3.019-NEWTTY-MODULAR<6>SLIP linefill/keepalive option. SLIP: Can't allocate slip_ctrls[] array! Uaargh! (-> No SLIP available) slipSLIP: can't register line discipline (err = %d) %s: tty discipline is still running SLIP: can't unregister line discipline (err = %d) %s: no packets received during keepalive timeout, hangup. ??????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4@!1p ,t2|7|=CF[N#4<UB\H a#p0lB  |#=#&) ,t"x0x=$MU _Phz D h 0P\  H  p  d x(*5PT @4S\@\ bz0 (<M`k(6LZhz.?Sislip.cgcc2_compiled.slip_ctrlssl_alloc_bufssl_free_bufssl_realloc_bufssl_bumpsl_encapsslip_escslip_write_wakeupsl_xmitsl_closesl_opensl_change_mtustats.458sl_get_statssl_initsl_ioctlslip_receive_roomslip_receive_bufslip_unescsl_syncsl_allocsl_keepalivesl_outfillslip_openslip_closeslip_ioctlslip_init_ctrl_devsl_ldisc*ABS*__module_kernel_version__module_using_checksums.div.urem.udivslip_maxdev__module_parm_slip_maxdevkmalloc_R93d4cfe6slhc_init_R7c2b6d65local_bh_count_R8c090c95___f____xchg32kfree_R037a0cbaslhc_free_Rb359d2c6printk_Rdd132261__memcpy_Rbfaaaa73___set_bitslhc_uncompress_Rdafbfa2aslhc_remember_Re6dfb238alloc_skb_R56cd27aeskb_over_panic_Rbce6950dnetif_rx_R49d7b77a___clear_bitslhc_compress_Rd145256ejiffies_R0da02d67bh_active_Rfff9d0a3___atomic_sub__kfree_skb_R4954ae5f__this_module___atomic_add__bzero_Rdd42e263dev_close_Rcd7c5a8funregister_netdevice_Rce1c8f92sprintf_R1d26aa98rtnl_lock_Rc7a4fbedregister_netdevice_Rf7ea2a5eadd_timer_Rbea990b2rtnl_unlock_R6e720ff2del_timer_R5811f067strlen_R97255bdfstack_top_Ra6cab6a7__copy_user_R9c5239ebn_tty_ioctl_R09e340f6tty_register_ldisc_R137daa9einit_modulecleanup_moduleschedule_R01000e51tty_hangup_R3d44559funregister_netdev_Ra9101341,0@0T0h1x2 |2 2 2 33332 2 ,4@5T4h434343435H0X0h02  6 2 2 33 347t782 2 444< D6H t9 6 :;4 <6@ |  <7= 6 >$ h,60 hT?@ @ >L>\A ` hh6l hpA tA A  86 8@ @  `$ `@ P X \ ` h6> h6 h8 86 8 B 0C H2 L2 X2 2 D  2 D  B D  D  E   F  P  X \ D ` d 0 h  l p D t x  | 0   @8 . .   . . . G .    8. <. T . . . . 0. <. L X . 0HF  I H  H$ @ L X d D D EJK8@ @ L$@ (@ 8L@Md>lMtD BND N D $D 0BD>X>>>>@8\OlP tP QP P P P `P dP 2 2 2 2 N@ @ L0P 4P `P dP 2 2 2 2 N@  @ L0882 H2 LP PP R2 2 2 2   (4 <$HNt@ x@ L8N@ @ L(8`2 2 2 . .  .    6  6 . 0   0 6 0.   \(F, \4FD H xL \P T xX \ P` d h l p Pt x | S  6  @ @ 2 . @ ,. 82 <VD2 P2 T. d x. . W.  2 2 . D D  D  . X6 D (EL4T \. l |4  S  688DNP@ d@ tLN  6  W8@  @ 0L   T,4p" "x"L" x$"((h,"4ELF. 4( (; (  "@"`D"` D0"``"`㿘  $b b ? ? @ b 2? 2  @ b @   &# #  ? @ # `2? @ # @ (`c0 0" 0"c0c, 4" 4"c,c( (" ("c(bH @ " @bHbL $ " $"bLbL"bH㿘 `(      &($&(&( &( @ "  p @2&@@&@  `$  "  p @2&@&    &@ "-` `? ? @   & & " `.`$ &  \ %ꀢ & \& # @% .` `" "& & $ b$ ``ϐ& .`"``"@(,  @ "("($"("(  (""f  ("@"㿐(4  *  *   '&`&`'0@ 㿐(4       '&`&`'0@  㿐(4       '&`&`'0@  㿐(4 @ 0E   &`'?&`'?2&`    (4  `?4@ ?4@ 6 ?6 } .2 < u<㿐(4  @ 1?i#   &`'?&`'?2&`U Q M I (4  `?4@ ??4@ 6 6?6(4 [ WT *?LIF,- )& *?,6 㿈    $ "$ ?"?2$  '$  '$ @    ?&(4$'0? &(4$'0 @  @ 㿘(B@46(B   6(B   ?D 6(B@ ?2 (@ 0 ?Ș* + 6(B2ؔ  ?㿘(\ (X  `>&(\ 6(@ (@`6(B(    @  &(X% (\ ?2&(\(@ @i (@ 0  (@  &(X&(\ (D`x@&(L㿘 Ŕ 6(@ 6(B j  6(B b  ? 6(B@ ?2 2(@   * 6(B2@  &(X&(\ `x&(L&(T(D@&(P㿘Ēh' ǔ %  @ ? @ ː` 0+͐Ґ ( *`@$#   * $#  *`@ $# $#@$#D$#H$#L$# @ $"   * #$"P$!$` ($` $`$`$$`  $`,`,$`($!$`$`$`$`$",$`0" `$" # $# L㿘@ ` ``@ `@   >6@ @ @ @ @@ @ @ @ @ "@ @ = 㿘` `@h "`    % `h$h () d, @, @ $@`p@2hd@ hd h  ` &hd&h$  h`.  ';`hp. h` &hp&h hx⪐ &hx@`%x%. @;&@    `? ? @   $ $ 2%@޶ #  \hĒe $ $ \$ @%  `" "$ $ "b%\@(7h$\1$@     `$ $ 2 #  ` \@hĖ @$ $ $ \$ @@ " b%h@4t@h``&h`  .   n&hh@ h$  h$h@4"@?@<"$ " ?, " "$`""`h" 㿘` `@h "`     `(h$h"&h$ *@ hd  ` &hd&h$ s h`,h(`bh, *` *  *  ࢑*  @?*  `; 1 hph hx`&hp&h6&hx @     `$ $ 2 hx #&hx ` \@hĖ @$ $ $ \$ @@ h@4 t@h``&h`" ,%@%``&hh@ h$  h$h@4"@?@<"$ " ?, " "$`""`h" 㿘 ` \ ` ` @@  @ ?$(D$(Hg  ` @`  `㿘 \ @D $X$\I "` p @2$@$``   "` p @2$@$``  @` @`  ` 㿘`$ !`\#``H" '%@@ (t$(t &`$` p&`H @2I @E `$ @@@ 8 ($(@"@@ (  \" ($"@  8 ("   ' h"@  &`H ` $( "(($@4"@?@2&`$  &`$ 㿘`\`$( ,! `H" '@@ t$t &`$  W&`H`$ @@@ J $@"@@ ,, ,  \,  @," 8("  g@ " $` &`H p" @2@$@4"@?@2&`$  &`$ 㿘 \ f(`㿐 \;n ` #  p ?$# 0@ # ` Pb? t @?#$#L$#H$#D$#@0@a#  @$# 09   2 ? t '  ` @ @? K@ ` 2`@:?BigMAC: Cannot reset the QEC. <3>BIGMAC: Transmitter will not reset. <3>BIGMAC: tx_cfg is %08x <3>BIGMAC: Receiver will not reset. <3>BIGMAC: rx_cfg is %08x <3>write_tcvr_bit: No transceiver type known! <3>read_tcvr_bit: No transceiver type known! <3>read_tcvr_bit2: No transceiver type known! <3>bigmac_tcvr_read: Whoops, no known transceiver type. <3>BIGMAC: AIEEE, neither internal nor external MDIO available! <3>BIGMAC: mgmt_pal[%08x] tcvr_pal[%08x] <3>%s: PHY reset failed. <6>%s: Link is now up at %s. 100baseT10baseT<3>%s: Link down, cable problem? <3>%s: Error, cannot re-init the BigMAC. <3>%s: Aieee, link timer is asleep but we got one anyways! <3>bigmac_is_medium_rare: QEC_ERROR, QEC_BMAC_ERROR, BMAC_ERROR, TXD_ERROR, TX_LATE_ERROR, TX_PARITY_ERROR, TX_SBUS_ERROR, RX_DROP_ERROR, RX_SMALL_ERROR, RX_LATE_ERROR, RX_PARITY_ERROR, RX_SBUS_ERROR, RESET <5>%s: Memory squeeze, deferring packet. BIG MAC<3>BIGMAC: Can't order irq %d to go. <3>%s: transmit timed out, resetting <3>%s: Transmitter access conflict. <6>%s<6>%s: BigMAC 100baseT Ethernet %2.2x%c <3>BIGMAC: Device does not have 2 and 3 regs, it has %d and %d. <3>BIGMAC: Would you like that for here or to go? ranges<3>BigMAC: Aieee, bogus QEC range for space %08x BigMAC QEC Global Regs<3>BIGMAC: Cannot map QEC global registers. <3>BigMAC: AIEEE, QEC is not in BigMAC mode! burst-sizesBigMAC QEC Channel Regs<3>BIGMAC: Cannot map QEC channel registers. BigMAC Primary Regs<3>BIGMAC: Cannot map BigMAC primary registers. BigMAC Transceiver Regs<3>BIGMAC: Cannot map BigMAC transceiver registers. BigMAC Init Blockboard-versionBigMAC Bufsqecbekernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4$!:,  ,$2J  =$B$H$cP-@*Y-j=-b00 ( 5Di "2T;TG,|[m|dTT(<d8 \ l @,1 hGXhoX{,   '@EKQbs 7Rk~ !2Mn# !2#>$ tMsunbmac.cgcc2_compiled.versionroot_bigmac_devqec_initbigmac_stopbigmac_get_countersbigmac_init_ringssun4c_bigmac_init_ringswrite_tcvr_bitread_tcvr_bitread_tcvr_bit2bigmac_tcvr_writebigmac_tcvr_readbigmac_tcvr_inittry_next_permutationbigmac_timerbigmac_initbigmac_begin_auto_negotiationbigmac_is_medium_rarebigmac_interruptsun4c_bigmac_interruptbigmac_openbigmac_closebigmac_start_xmitsun4c_bigmac_start_xmitbigmac_get_statsbigmac_set_multicastversion_printed.662bigmac_ether_initcalled.665*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2printk_Rdd132261local_irq_count_R3e580ce8local_bh_count_R8c090c95___atomic_sub__kfree_skb_R4954ae5falloc_skb_R56cd27aeskb_over_panic_Rbce6950djiffies_R0da02d67add_timer_Rbea990b2sparc_cpu_model_Rb1a8ddf9eth_copy_and_sum_Rca920339eth_type_trans_R447635d4netif_rx_R49d7b77abh_active_Rfff9d0a3request_irq_Rb9ba6802__this_module___atomic_adddel_timer_R5811f067free_irq_Rf20dabd8___set_bit__memcpy_Rbfaaaa73init_etherdev_Rfa670d60idprom_Ra3bdb69cprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dc_sparc_dvma_malloc_Rac4503aaether_setup_R04a27efasparc_free_io_Rf8afdb8dkfree_R037a0cbabigmac_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_modulecleanup_moduleunregister_netdev_Ra9101341- 0. 0 X. X- x . x .  / 0 / 0 102p123( <, <44H p.t  .   .  < P@.D P| P. P- .   . h-   .   D ( X ( \ H d H h X l X t.  ` .  `   .     .   5 $5 06 -   .   45 @5 D L \6 -   .   7 7 p-$ (., D H.L X (\.` ( @. @ P. P `. ` p. p .  .  . , 0.4 D H.L X \ `.d h l.p ,1@23x | 43T hX h`4t89: . H; L; T; 3T hX h`4t89: . 8; <; D; \7 `7 p ht 0 h  0  0< 8. 8= = >?X1l212@= = 1,5 05 D `L.P `p5 12A . P5 T5 5 5  `. `5 8AH P.T B5 5 $182-4C< D T X \ ` d.h l t.x |  D D .D  .  .  $ 8(., 8H pL pTE`,0FHFT \ lG .  . -  .    ( $ ( ,H HH  8  8 G  P .  P     G! !.!  ! !$ !4G!H !L.!P !d  !h  !lI! 8! 8!H!7 !7 ! H!I! H! X! ! X! !7 " " " " " "  "$ "( "HJ"P "T "X "l x"t."x x"K"K"K"K"L# # #N #N #, #@ X#D `#XO#\ X#O# `# # #M$ $ $$ $0K$<K$HK$TK$\R$dL$t ELFƴ4( 㿐!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ 6!F?b 6!F !@* *` 2` &` ` @- ?) @ ` @"?! $?Ȓ* 6!F !@* *` 2` &` ` @ ? @ ` @"?  @  ?㿐!@ !82  @ @ !8`2!4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @a 6!Pa"    `@  @㿐!@ !82  @ @ !8`2!4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @@6!F  @!F!  @㿐! !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @a6!Pa ` `@"     !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @aV6!F   ?"  b   " ` !4  &!4 b ?&!4 }"  b   "b 0 㿐!8    !4 2!@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@!C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ !8`` !` " $@'  $@@ !8`` !` "$@?$@@ !8`` !` " $@'$@@!8`` !` " $@'$@@!8`` !` " $@!8'"*  $` ` @ ? @ ` @"? @ !8 ` ?#!8 @  !4 2!@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@!C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ !8`` !` " $@'  $@@ !8`` !` "$@?$@@ !8`` !` " $@'$@@!8`` !` " $@'$@@!8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @- 2 !*`2  " 㿐!!  `\&! `"!8! !8   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $'!*  $  @ ` `@  @"`@   ?# @!6!F@ 6!F !@*   $  @@ ` `@  @"`@  ͐ !8   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @?c 6!T !@* *` 2` $  @ ` `@  @"` @  &!   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @` Z6!H 2!8 [&!!8   !4 2!@$    $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @`6!Hf ! !@ &!   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @!86!H   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $' *  $  @ ` `@  @"`@   ?# @!'6!T/ H !T6!T!@*   $  @@   `@  @"`2- @ ( 2*!H   !T?# 6!T !@*   $  @@ ` `@  @"`2 @    O &! ( ?2!8!@ @k !@ 0   !4 2!@ $   $ $$``$ $ $$ $$$ $$$ $$!C  2@ $ $$2@   2@ $ $$2@$ $@ !8`  !  " $'  $@ !8`  !  "$$@ !8`  !  " $'$@!8`  !  " $'$@!8`  !  " $'!*  $  @ ` `@  @"`@   ?# @6!T 2!&!!T6!T!@*   $  @@   `@  @"`2&!@ &!  @  &! &! !x`x@&!!c0 0" 0"c0c, 4" 4"c,c( (" ("c(bH @ " @bHbL $ " $"bH"bL㿐!8` π &` &!@&!8  &` ` @@ ? @ ` @"? 2!8@ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ @ǐ&`&!8&!@В&` !@*   &` ` @@ ? @ ` @"? 2!8@ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @ @ &` &!@&!8 !@*    &` ` @@ ? @ ` @"?  @   !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @# @- @6!F@ ?2T!8 "H?!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!H   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!J   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!L   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!F?* 6!N6!F !@*   &` ` @@ ? @ ` @"?  @   !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @# @d @ ?2U!8 "Ѱ?ѐ 2̰ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@'"*  &` ` @ ? @ ` @"? @  &?` ?# @`  !@* * 2 &` ` @@ ? @ ` @"?  @  㿘!4``9!8  "G ` 2 ??#&`` Ȕ &`!4 @&!4 ?&!8&!@ &`021`2  , `  ?#&`` Ȕ &`!4 @&!4 &!8&!@` ?&`0`"! &`&!8&!@ ?&` &!8&!@@  &!8㿘 `!      &!(&! &!$&! @ "  p @2&@@&@  `  @ "  p @2&@@&@  `` &@ "= ``? ? @ ` &`&``"0 , %`&``\`%쀢 &`\&`%@% 2`!, `!,`@ , $@ !$ , $@ !$ ``` &`&`  $&  " ?? 0!0@"!"!("! "!$` !* " "@  h  ?㿐!8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!H   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!F   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!J   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @!86!L   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @6!N I!H(` ?#ߐ @6!N!H@"!N!N @6!N?# @6!N!H@"!N!N 6!N?# @6!N!H@"!N!N!6!N?" @6!N !@!N*   &` ` @@ ? @ ` @"? 2!F@ !F6!F !@*   &` ` @@ ? @ ` @"? 2!F@ !F6!F!@*   &` ` @@  ? @ ` @"?  ?@  ? !8   !4 2}!@ &`  &`&@&@  &`&@&@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` "&@'  &@@ !8`` !` "&@?&@@ !8`` !` "&@'&@@ !8`` !` "&@'&@@ !8`` !` "&@' *  &` ` @ ? @ ` @"? @  ` ?# @b6!F@ ?2X!8 "!&! @!F!@  2  d26!F6!F  !F!6!F !@!F*   &` ` @@ ? @ ` @"? @ 8 ͐ !8   !4 2!@ &`  &`&@&@  &`&@ &@&`&@&@&`&@&@&`&@&@!C  2@ &`&@&@?2@   2@ &`&@&@?2@&`&@@ !8`` !` " &@'  &@@ !8`` !` "@&@?&@@ !8`` !` " &@'&@@!8`` !` " &@'&@@!8`` !` " &@' *  &` ` @ ? @ ` @"? @  ` ?# @?c 6!T !@* *` 2` &` ` @ ? @ ` @"? 2 @  &!&! `x&!&!!x@&!㿐!!x`h   @ !4"2 "&!4o!4  +?c$ Ȕ $!4 @&!4 % ` +?? @ `2? 2@  `clc$!4` ? $ !8   ?$@ $@; 2?$bb    `@ b`2`@ $cc    `@ c`2` @  $b, $b$b  *` #$bP  *`@ $c  *  $c *`@ $c !`Pc`t @c$cL$cH$cD$c@I A;n `p#    2 ?! `t(   @ ? K@ ` 2`@:?`$`\.$`@     `$ $ 2 $    \ @ $ $ \$ @`@ `" !&>*  2,`i ,`i@4`t@`$$` .`  [$@  $ "' ( @4"@?ဢ@< ' ?, ' " $b"' 㿐`\?" @ &`   2_&`  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@@(( "$( *@   ` $$(@@| ,,`k0,* * 0@*  @2 `;``; $ $@"̐ `$$@     `$ $ 2  &$ ` \@ @$ $ $ \$ @`@ @4 t@`$$! %% ,`$@ `$ "&` ( @4"@?ဢ@< &` ?, &` " $b"&` 㿐 \?" @ '   2'  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@(@(  (, `, @ $@p\@$@2@     ` $$(@@Ǵ -2`; @$-; $ $" ̐ `$$- $ - , @ !&& ?&@ " `? ? @   $ $ "ܴ% $  \% e쀢 $ \$ @%- `, @ @" ! ` $ $ &@`\:>`$`\4$`@     `$ $ 2 $    \ @ $ $ \$ @`@ - ,`  @@"!&@>*  2,`i ,`i@4`t@`$$ - @ I@$@  $ "' ( @4"@?ဢ@< ' ?, ' " $b"' 㿈`' /` \?"@ &  I  &  @@ 8  4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @84F   4 2@ $`  $`$@$@  $`$@ $@$`$@$@$`$@$@$`$@$@ C  2@ $`$@$@?2@   2@ $`$@$@?2@$`$@@ 8`` !` " $@'  $@@ 8`` !` "$@?$@@ 8`` !` " $@'$@@8`` !` " $@'$@@8`` !` " $@' *  $` ` @ ? @ ` @"? @  ` ?# @a 4P@ F !` @ F4F`@ @ F4F@  @F*   $` ` @@ ? @ ` @"? 24@ 4 ?#$`` Ȕ $`4 @$4@(@(  (, `, @ $@p\@$@2@     ` $$(@@ .`2`; @.`; $ $" ̐ `$$.` $ !`%{%9&@ " `? ? @   $ $ "& $  \% e쀢 $ \$ @% "  !  $ $ %`\4? `$`\.$`@     `$ $ 2 $    \ @ $ $ \$ @`@ `" !%? *  2,`i ,`i@4`t@`$$` .`  [$@ $ "`( @4"@?ဢ@< `?, `" $b"``C& 㿘 \!4 @@  !* !a."   ` @@   2 ` ` @@   !@ @?05  ` @`  `㿘 \  $@@  ? @ @`2?  @   "` p @2$@$``   "` p @2$@$`` @x4 @@ " @* "@` @`  ` 㿘`\`$ @" !(1 `H" '&@@ !$!   `b @@ &`$ &`H! @"@ဢ@"1  \ 2 \* ( "  ( h"@  ?8+@  " $! ` &`H "! !(4"?ဢ2&`$  &`$ 㿘`\`$, 0! `H" '@@ ᨐ$O &`$  S&`H`$ @@ G ( @"@@ ,, ,  \,  @," ?8,@ @ (# $ ` &`H p" @2 @ (@4"@?ဢ@2&`$  &`$ 㿘`\`$ @ ! `H" '(@@ a$a@ a``  @b @Ӓ &`$ &`Ha(a @"@ဢ@"8  \ 2 \1 ,`" a a,*  @ `," `?8, @ (# $a ` &`H`"a a(@4"@?ဢ@2&`$  &`$ 㿘 \  !㿐`\;n  `p`$ @`P?`t@ ?"L"H"D"@C&`$ @" ;&`$  0`t ' ` @@? J@ `0?;?happy meal: Aieee, transceiver MIF read bolixed <3>happy meal: Aieee, transceiver MIF write bolixed <6>%s: Link is up using external internal transceiver at 100Mb/s, Full Duplex. 100Mb/s, Half Duplex. 10Mb/s, Full Duplex. 10Mb/s, Half Duplex. <6>%s: Link has been forced up using 100Mb/s, 10Mb/s, Full Duplex. Half Duplex. <5>%s: Auto-Negotiation unsuccessful, trying force link mode <5>%s: Auto negotiation successful, link still not completely up. <5>%s: Link down, cable problem? <3>%s: Error, cannot re-init the Happy Meal. <3>%s: Aieee, link timer is asleep but we got one anyways! <3>happy meal: Transceiver BigMac ATTACK!<3>happy meal: Receiver BigMac ATTACK!<3>happy meal: Fry guys.<3>happy meal: Transceiver and a coke please.<3>%s: Happy Meal would not start auto negotiation BMCR=0x%04x <5>%s: Performing force link detection. <3>happy meal: Eieee, rx config register gets greasy fries. <3>happy meal: Trying to set %08x, reread gives %08lx <3>%s: Error interrupt for happy meal, status = %08lx <3>%s: Happy Meal receive FIFO overflow. <3>%s: Happy Meal BigMAC SQE test failed. <3>%s: Happy Meal transmitter FIFO underrun, DMA error. <3>%s: Happy Meal MAX Packet size error. <6>%s: Happy Meal out of receive descriptors, packet dropped. <3>%s: Happy Meal rx DMA errors [ GenericError ParityError RxTagBotch ] <3>%s: EOP not set in happy meal transmit descriptor! <3>%s: Happy Meal MIF interrupt. <3>%s: Happy Meal tx DMA errors [ LateError ParityErro TagBotch <3>%s: Happy Meal register access SBUS slave (%s) error. paritygeneric<5>%s: Resetting... <6>%s: Link status change. <6>%s: Switching to 100Mbps at full duplex.<6>%s: Switching to 100MBps at half duplex.<6>%s: Switching to 10MBps at full duplex.<6>%s: Using 10Mbps at half duplex.<6>%s: Memory squeeze, deferring packet. HAPPY MEAL<3>happy meal: Can't order irq %d to go. <3>happy_meal(SBUS): Can't order irq %s to go. <3>%s: transmit timed out, resetting <3>%s: Happy Status %08x TX[%08x:%08x] <3>happy meal: Transmitter access conflict. rangesQuattro<3>Quattro: Fatal IRQ registery error %d. QFE request irq<6>%s<6>%s: Quattro HME slot %d (SBUS) 10/100baseT Ethernet <6>%s: HAPPY MEAL (SBUS) 10/100baseT Ethernet local-mac-address%2.2x%c <3>happymeal: Device does not have 5 regs, it has %d. <3>happymeal: Would you like that for here or to go? Happy Meal Global Regs<3>happymeal: Cannot map Happy Meal global registers. Happy Meal MAC TX Regs<3>happymeal: Cannot map Happy Meal MAC Transmit registers. Happy Meal MAC RX Regs<3>happymeal: Cannot map Happy Meal MAC Receive registers. Happy Meal BIGMAC Regs<3>happymeal: Cannot map Happy Meal BIGMAC registers. Happy Meal Tranceiver Regs<3>happymeal: Cannot map Happy Meal Tranceiver registers. hm-revburst-sizesHappy Meal Init BlockHappy Meal BufsSUNW,hmemodelSUNW,sbus-qfeqfeSUNW,qfekernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment4!1  ,42  =HBHH` P*Y=Obȼ / < !0>S@e D~ P(xc$-x-HxP I4#Kp?Llah4porP }<  44 H4|$:V<rxtL  x( .F_djp#=Vt *8KVjL(/Ab{t#<HWosunhme.cgcc2_compiled.versionroot_happy_devqfe_sbus_listtry_next_permutationdisplay_link_modedisplay_forced_link_modeset_happy_link_modesis_lucent_phyhappy_meal_timerhappy_meal_inithappy_meal_get_countershappy_meal_tcvr_resethappy_meal_transceiver_checkhappy_meal_init_ringssun4c_happy_meal_init_ringshappy_meal_begin_auto_negotiationhappy_meal_set_initial_advertisementhappy_meal_is_not_so_happyhappy_meal_interruptsun4c_happy_meal_interruptsun4d_happy_meal_interruptquattro_sbus_interrupthappy_meal_openhappy_meal_closehappy_meal_start_xmitsun4c_happy_meal_start_xmitsun4d_happy_meal_start_xmithappy_meal_get_statshappy_meal_set_multicasthappy_meal_ioctlquattro_apply_rangesquattro_sbus_findquattro_sbus_register_irqshme_version_printedhappy_meal_ether_initcalled.702*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2printk_Rdd132261jiffies_R0da02d67add_timer_Rbea990b2local_irq_count_R3e580ce8local_bh_count_R8c090c95___atomic_sub__kfree_skb_R4954ae5falloc_skb_R56cd27aesparc_cpu_model_Rb1a8ddf9skb_over_panic_Rbce6950diounit_map_dma_page_Rbf0e9ec0del_timer_R5811f067__memcpy_Rbfaaaa73eth_type_trans_R447635d4netif_rx_R49d7b77abh_active_Rfff9d0a3eth_copy_and_sum_Rca920339request_irq_Rb9ba6802___f___irq_itoa__this_module___atomic_addfree_irq_Rf20dabd8___set_bitstack_top_Ra6cab6a7__copy_user_R9c5239ebquattro_get_rangesprom_getproperty_R156810c5SBus_chain_R359591d7kmalloc_R93d4cfe6panic_R01075bf0init_etherdev_Rfa670d60idprom_Ra3bdb69cprom_getproplen_Rff8b6749memcpy__bzero_Rdd42e263prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dc_sparc_dvma_malloc_Rac4503aaiounit_map_dma_init_R5e1dc352ether_setup_R04a27efadev_new_index_R8fddc84chappy_meal_probestrcmp_Re2d5255aprom_getstring_Rbf7c51d9init_modulecleanup_modulesparc_free_io_Rf8afdb8d___f_mmu_release_scsi_oneunregister_netdev_Ra9101341kfree_R037a0cba404t444`4 5 44 @5 @ x5 x    5  5 4@4444p4 5         5 (5  (0 4 < @ D5L P5T <444 4 <4 4   5    P  P  `  ` 5 , p 4 p 8  <  @5 H4 4 4 4 H4 4   5  4`44444 5 l44404l44 5  4\44444 5 $4h444$44 5  5 D4d @h5l @l44404l44 5 |4 @5 @44$4`4440 458  l4 4 4!04!l4!4" "5" "P "\5"` #P4#4#4$4$P4$4$ $5$ %4&84&|4&4&4'h4' '5' (4(< @(@5(D @(4( @(5( @)P )X5)\ )t @)5) @*p4*4*4+44+p4+4, , 5, ,4, @,5, @, p,5, p,6 ,6 -7-4. @. 5. @.4/@4/4/4/40p40 050 1$41H @1L51P @2<42424343<4343 353 4X44| @454 @5t454546046h4646 657 7848@48484949@4949 959 :4;(4;l4;4;44>L4>4>4? ? 5?$ @,4@p4@4@4A,4A4A A5A B84B\ @B`5Bd @CT4C4C4D4DH4D4D D5D E4F04Ft4F4F4G04G4G G5G H<4H` @Hd5Hh @H4IH4I (I5I (I8 I9 I8 I9 J<:JP;J:J;J<K@= KL K`KP K`KX>K`= K?MX4M4M4N4NX4N4N N5N O4P@4P4P4P4Qp4Q Q5Q R4R4S(4Sd4S4T4T4 T85T< UD4U4U4V4VD4V4V V5V W4X,4Xp4X4X4Y\4Y| Y5Y Z4Z @Z5Z @[<4[` @[d5[h @[4[ @[5[ @\4]4]T4]4]4^44^T ^X5^\ ^4^ X^ X^5^ ^5^ _l4_ @_5_ @`4`4a4aX4a4b4b( b,5b0 b4b @b5b @b6 b6 b b c7c0@c4c4c= c c5c c= c= d4d d5d e4e@ eD5eH g g5g g g g5g4hl4h h5h j4jX4j4j4k4k4k k5k l4l4m<4mx4m4n(4nH nL5nP op4o @o5o @o @o @o5o xo5o xp p5p p, p45p8 pH pT5pX pl Hpx5p| Hp p5p p p5p p p5p p p5p p p5p q q5q q(  q45q8  qH HqT5qX Hqh ql qp5qt q pq5q pq q5q q q5q q5q q q q q q r r5r( r05r4 r r5r s4s4t,4th4t4u4u8 u<5u@ vH4v4v4w 4wH4w4w w5w x (x5x (x8 XxD5xH Xxl xt5xx x x5x x4y @y5y  @yH4y:y;z<{0 {D{4 {D{<>{<| ||  ||>|$A|dB|pC| |5| }D }$D },D } }5} ~4~44P444  $5( 04t444044 5  (5 (  X,50 XT \5` t |5 4 @5 @04t<  >E B,C 5 D D D X d5h T4444T44 5 4<4444l4 5  (5 ( X5 X $5( < D5H 4 @5 @4d:x;\?<  > ?x<  >A$?\BhC 5 D D $D  5 44,4h4448 <5@ H444 4H44 5  (5 (8 XD5H Xl t5x  5 4 @5  @H4:;<0 D4 D<><   >$AdBpC 5 D $D ,D h= =  }<  }< F   rP     rP F PG  P,5LH PH \I4 5 :;X:l;@JH H H :K$6 (6 < D5H X ` x56 6 $6 6 6  5 6 K  5 pA6 6 :;PK`6 d6 x 5   56 @?6 6 $KL L M4,4p444\4| 5 444X444( ,50 L M@  O3  P P tQ N    }< }<  rP  rP 4   @= = 0 4< @FT5X \R` @l= QS    $ ( P, 054 P@ D XL XP5d5h xT |  UT O T V  5  5 W8 <5@ D L X X XY p p  Y    Y, 4 8 X@ XPYd pl pp x Y  5  Z4 < DZP T X[h= l=  8[ 8\ H | | H=     <  <$ , 0 4 t8 < @ t\]d^p t |   P P   x H X ` p` H Xa$`( `p`t p` x   _  $ 4= < pJddddd= efg ELF"L4( 㿘 &  &  $& & @4@`  b@ *"$f㿐(  h@.   @ ? 2  $@ @  @ ? 2  @? " g? $` $($` $`$`$`$` @$`$`$ $` `$ "  ` $`,`, \$`($`0$`4. . . . . .  .  . 0   .  .  .  .  .  . .  `     .   . l#@c `@ 1@c   ?? @   /@㿘 @  @  D& D@ @  D t & D& t@ @  D & D@ @  D  T & D& T@@ @  D & D @@ @@ @  D T!a& D& T@ @  D  p & D& p@ @  D & D@ @  D  p & D& p@@ @  D  p & D& p@h @ T!a& @& Td @ \!a& @& \b @ l!a& @& l @  @ \ & @& \a @  @ T & @& T``@ @ d!a& @& d` @ `!a& @& `@  @ H l` & @& H& l` @  @ X & @& X` `@  @ & @` @  @  l & @& l` @  @  l & @& l`Z 㿘   ,@ b $ * @*`@*` ' ?*@ @  `; 3  @ X  H`& @& X9& H @     `$ $ 2  H && H ` \@  @$ $ $ \$ @@  @4 t@ 0 8`& 0& 8b %% ,@  &  @ 㿘@ cߤ , ` 5  `$ @c 2$ n$ ,㿘 \ #* ,  ` @`  `㿘 \   ,  @ ? 2  $@ @  @ ?  @` @`  ` @ *`  '4<` `"4@ "<"`$@4"@"@0  `$ 㿘`\ $`$ @! `H" '@@ , &`$ &`H@"@?@ *`  > *`  \, -  ",  @@8" g@  " $` &`H p" @2@@4"@?@2&`$  &`$  \ 0㿐;n \ p$ , @P2t@ .`     ( 0LJ   0?t 6'  ` @@? J@ `@0?>`QuadEther: AIEEE cannot reset the QEC! <3>QuadEther: AIEEE cannot reset the MACE! <3>QuadEther: Cannot reset QE channel! <5>%s: Warning, link state is down. <3>%s: Excessive transmit defers. <3>%s: Carrier lost, link down? <3>%s: Excessive transmit retries (more than 16). <3>%s: Late transmit collision. <3>%s: Transmit fifo underflow, driver bug. <3>%s: Jabber error. <3>%s: Babble error. <3>%s: Transmit descriptor is bogus, driver bug. <3>%s: Transmit late error. <3>%s: Transmit DMA parity error. <3>%s: Transmit DMA sbus error ack. <3>%s: Receive fifo overflow. <3>%s: Late receive collision. <6>%s: Receive packet dropped. <3>%s: Receive buffer too small, driver bug. <3>%s: Receive late error. <3>%s: Receive DMA parity error. <3>%s: Receive DMA sbus error ack. <6>%s: Memory squeeze, deferring packet. <5>%s: transmit timed out, resetting <6>%schannel#ranges<3>QuadEther: Aieee, bogus QEC range for space %08x QEC Global Registers<3>QuadEther: Cannot map QEC global registers. <3>QuadEther: AIEEE, QEC is not in MACE mode! burst-sizesQEC Per-Channel Registers<3>QuadEther: Cannot map QE %d's channel registers. QE MACE Registers<3>QuadEther: Cannot map QE %d's MACE registers. QE Init BlockQE RX/TX BuffersQuadEther<3>QuadEther: Can't register QEC master irq handler. <6>%s: QuadEthernet channel[%d] %2.2x%c qecqekernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.comment40!,  ,d28  =tBtHP!*Y!=!b$TP  (  -x;x\C $TLb hv P~   h     -?EVg{$6I_ 4i~#<YoD`sunqe.cgcc2_compiled.versionroot_qec_devqe_init_ringsqe_initqe_set_multicastqe_is_bolixedqe_rxqec_interruptqe_openqe_closeqe_tx_reclaimqe_start_xmitqe_get_statsversion_printed.620called.623*ABS*__module_kernel_version__module_using_checksums.div.urem.udivbzero_1page_R84f9fba4__bzero_Rdd42e263.umuludelay_Ra39b4cf2printk_Rdd132261alloc_skb_R56cd27aeskb_over_panic_Rbce6950deth_copy_and_sum_Rca920339eth_type_trans_R447635d4netif_rx_R49d7b77a__this_module___atomic_add___atomic_subbh_active_Rfff9d0a3___set_bitjiffies_R0da02d67__memcpy_Rbfaaaa73__kfree_skb_R4954ae5fqec_probeSBus_chain_R359591d7strcmp_Re2d5255ainit_etherdev_Rfa670d60idprom_Ra3bdb69ckmalloc_R93d4cfe6prom_getintdefault_R858c90dcprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169e_sparc_dvma_malloc_Rac4503aaether_setup_R04a27efarequest_irq_Rb9ba6802dev_new_index_R8fddc84ckfree_R037a0cbainit_modulecleanup_moduleunregister_netdev_Ra9101341sparc_free_io_Rf8afdb8dfree_irq_Rf20dabd8 0 " ( (" X X#d!\"t" #  #  #  H P#T t 0|# 0 X# X #  # 8 @#D p x#|  #  8# 8l `t#x ` #   # H P#T | #  #  8# 8$H \L \T%h&t'( `# ` )  )  * "  ( ( ( D" \)  ` X d X h# p)  t)  + 8, L, T, \, - . .   #   . X/ . . + 0 L-  (2 ,2 < P T X3|  333304@ P5 d5 5      # 4 5 5 45 T6l  77<77   8$  #9 9, <:P (T#X (| X# X" #   77(   @ P : :8 @;D @`;d P" ( (" X X#  $ ( h, 0 $4 8 hD P h\ h $<  h= x# x      #,#D#H d>     #?? H L P1d h x  B C C ?  D C?  ELF4( 22`@  (  @2  2 P8 2 *  2 P$ 2 +   @2 P 2  "  P"     2  `2`@(*@㿘2"@0@ 㿘א&"㿘0 ,` 3`@   3  ` *` * ` 2 @` 2 `'W  @`!&`@    @`  =&`@! $ \`& !d$ , $@ 4J  #`@@ `d``c$`d @ @ 0 @ @`   `㿘 " 0\ \@` @`  `㿘  - " `( &`4 ` `&` 0` `     l" +8 h "h"l㿘   "  \ & $ @"& \ & &  ,@ (6 t. i. g   " \@ " (`& ` @@& (0  @  p @@ 㿐`\  d       /$ d t(2Q`2 ``2  (`' P B$ P```"1 (  @   L $$ L` 2 ` `` @ , #$ ,?쀢C4 ( , $ ,`"`` *"` ` `6 h @ `` @` h  l"@ k$ h ( "  H "   `" @ $ h & Z ` | `"   f   @ @ `  p ", \@ 2 `` @` p $``  &``P&` `x@ p @2@  \ |  & \& @   ,& @  (`` @< & (*@  *@ # 3 + +  T# X#  `+  `+  ^3  3 `@" \` `@  $`$`  ( \` @`V d`<(` `6 t*& Ho` `?@ H*`Z  \"@  | @ & \&  @` `8  p 0@ d ( " ` H " ` `"`@` p $` @2 d@ d?$ d `+ ` @`'"  @ ` ""! ?!򀦀"!󀦀/?`  `!D    @ 4  4 2?@ `!\`@ 4`D @ `@? !! `)`D?    @ 4  4 `<  ?逢   @ ?Ѐ@耢 @7  @`? ;"!󀦀7` @1`"P`+?`  y?ꀢ`! r?!  $ \h$`$`@ `@  @$ `"!󀦀 ,`,`4``D @ `@ 4  4 <`:?񀦀5?3?`@? !! `% `?D @ @ @ 4  4 `@  ? @?@` @`  ` \ ?8?" T 㿘 \ ` # 4%Ȟ & 0& & @ & & 6 X6 Z& T6 P. o& 8 h`@  ``@ 㿐`\א `   @ 2 `P`` ` @`P 4`P    @ "  Z 4`Z T$`T$`8 㿘` @` ` 㿘` @` ` 㿘` & & <* @@*@ "` "" (  㿘@ ``" @# \@  㿘@ 6@ @ tunl001.01kernel_version=2.2.25using_checksums=1tunl%dIPIP<6>IPv4 over IPv4 tunneling driver <6>ipip close: can't remove protocol GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4!"  , 2+<l  =BH*Q^Yn=b ! *t>MU`@j@@t@PP`@  `X   !(8 Mx4a4v  -@RdkL 2Gaw#B]THiz<ipip.cgcc2_compiled.ipip_fb_tunnel_devipip_fb_tunnel_initipip_fb_tunneltunnelstunnels_wctunnels_ltunnels_rtunnels_r_lipip_tunnel_lookupipip_bucketipip_tunnel_unlinkipip_tunnel_linkipip_tunnel_initipip_tunnel_destroyipip_tunnel_xmitipip_tunnel_ioctlipip_tunnel_get_statsipip_tunnel_change_mtuipip_tunnel_init_genipip_fb_tunnel_openipip_fb_tunnel_closeipip_protocol*ABS*__module_kernel_version__module_using_checksums.div.urem.udivipip_tunnel_locate__this_module___atomic_addkmalloc_R93d4cfe6___atomic_sub__bzero_Rdd42e263__memcpy_Rbfaaaa73sprintf_R1d26aa98dev_get_R0dfb2c76memcpyregister_netdevice_Rf7ea2a5ekfree_R037a0cbaipip_errjiffies_R0da02d67ipip_rcvnetif_rx_R49d7b77aicmp_send_R6e0428fd__kfree_skb_R4954ae5fip_route_output_Re8c2da9dskb_realloc_headroom_Reb352d09sock_wfree_R3f374485skb_under_panic_Rf4dd5514ip_id_count_R6edc8ca8ip_send_check_R434ccab0__ip_finish_output_R62fe34ccip_fragment_R047ac711stack_top_Ra6cab6a7__copy_user_R9c5239eblocal_bh_count_R8c090c95netdev_state_change_R6d700238unregister_netdevice_Rce1c8f92dev_get_by_index_R0df11505init_moduleprintk_Rdd132261register_netdev_R0fd2700binet_add_protocol_R5b90336fcleanup_moduleinet_del_protocol_R6ac28ff1 $ 8 @ @ @      $   \ ` ' ' ()*,+< @ \,x  -./01' *$ ( 4 8 H1P' T' `*3 3 <3 +* 5 64*H788*6*3 3 9* : : 8( L* `7   ; + * T< \< l= p< > ? > / \ p d p h; * 7 '  ,'  8( x '   @ @ A & @ ,, <@ @ @ A ' T&\ `   ' B B B B  /0/@B LCPB @ A'    ,@ <@ TAp' x&  D' *   X    $ X( , 0 4 8 //8 *<E|' ' (' ' * x  x   ( 0 8 @ D X \G` d h l t x H I  K   8G 8 D ,@42ELFP4( 22 `+  ` @2 2  2 PY 2 `+  ` 2  2 PA 2 `+`@ < @8 @"   @2 2  2 P  2 `  2 P 2     0  @  < 82`* *`㿘&"㿘ܐ2"@0@ 㿘,3`0@@  < 8 3  * @* ` 2  2 @` 2 `'W  @`!&`@    @`  =&`@! $ \`& !d$ , $@ 4J  #`@@ `d``c$`d @ @ n0 @ @`   `㿘d \` @` @`  `㿘@< *  `@ @   C  9 " `5 3`4 ` `&` 0,+` `? ~ `< @8    l" +8 h "h"l㿘 <  @   "  @ p @.`2`@ *  2`B@8   @ @"   . i  "  \ & $ "& \ & &  ,@ . i<6 t. g8    ( l`L `( &`(. g @ * 2 `- 2 `8` `  `8`` &`1&`8 @ " `@`p  @ ``@`` &`&`@`&`p` &`` \@ &` (``& ` @@& (0  @  p @@ 㿐`\`d`   >$`d`   `x` `2  (`2 t`P $`P(2'```"m (  "  t("   `@  `L e$`L` 2 ` `` @`, V$`,`x t" $  (`" ` C4"`  @6`h @ `4` @/`h `l"@ k$`h ( "  H "   `" @ $`h & Z ` | @"   f   @ @ `  p ", \@ 2 `` @ p $`  &``P&` `x@ p @2@  \" | & \& @  ,& @  (`` @< & (@*@  *@ &@ /6`.` .` T&`X&`  ` .` t( .` .``,6` t6`` %`x@ `t $`t"` `$`? `$ \@ *  2`B@8 4 ^6`6``@" \ @  $$  ( \` @`U`d`<(` 6 t*& Ho`  ?@ H*`Z  \"@  | @ & \&  @ `8  p 0@`d "  H "  `"@ p $ @2`d@`d?$`d `+ ` @`'"  @ ` ""!!?!򀦀"!󀦀/?`  `!D    @ 4  4 2?t `!\`@ 4`D @ `@? !! `)`D?    @ 4  4 ͂`!< @ư?逢 /Ä  @ ?Ѐ֒` 耢 7 "'ր "'ܒ  `? A"!󀦀=` @7`"`1?`8  \  2 P u?!  $ Րh$`$`ؔ $`@$``@  @$ `"!󀦀 ,`,`4``D @ `@ 4  4 <`:?񀦀5?3?`@? !! `% `?D @ @ @ 4  4 `  ? @?@` @`  ` \ `C  \x? @$" T? 㿘`\ `x \"  |@ & \&  @ `@ ` 6  2  @  @ `x  <8 `x0`x 㿐  \ @ < $  8 @ 2(    @ `` ` @ 2 4 @ ?ϐ $ & |@  㿘 \< 8 @@  | `@   `@ ` @`  ` 㿘 \ ` #  8%Ğ & 0& & @ & & 6 X6 Z& T6 P. o& 8 h`@  ``@ 㿐 \ؐ`  %܀`.  `` @ 2  P`` ` @ P< 6 P`8 @ @ ` 1?` 6 P& & &   @ TZ& 8,@  @2 @2 @2 %@& T6 Z$x 㿘` @` ` 㿘` @` ` 㿘 \_` & & `<* @* @#`#`` /*  $ x`"` 㿘@ ``" @# \@  㿘@ 6@ @ gre0/01.01kernel_version=2.2.25using_checksums=1gre%dGRE<6>GRE over IPv4 tunneling driver <6>ipgre close: can't remove protocol GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4(!*  ,\24<  = B H *QP_Y=b X ! %Xi -$BRfnl{T t@,@|X < <0P=(HTj44 (:M_qx8X 9Xm*CaH"<1Mip_gre.cgcc2_compiled.ipgre_fb_tunnel_devipgre_fb_tunnel_initipgre_fb_tunnelipgre_tunnel_lookuptunnelsipgre_bucketipgre_tunnel_linkipgre_tunnel_unlinkipgre_tunnel_locateipgre_tunnel_initipgre_tunnel_destroyipgre_tunnel_xmitipgre_tunnel_ioctlipgre_tunnel_get_statsipgre_tunnel_change_mtuipgre_headeripgre_openipgre_closeipgre_tunnel_init_genipgre_fb_tunnel_openipgre_fb_tunnel_closeipgre_protocol*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkmalloc_R93d4cfe6___atomic_sub__bzero_Rdd42e263__memcpy_Rbfaaaa73sprintf_R1d26aa98dev_get_R0dfb2c76memcpyregister_netdevice_Rf7ea2a5ekfree_R037a0cbaipgre_errjiffies_R0da02d67ipgre_rcvcsum_partial_Rb4d3fea2netif_rx_R49d7b77aicmp_send_R6e0428fd__kfree_skb_R4954ae5fip_route_output_Re8c2da9dskb_realloc_headroom_Reb352d09sock_wfree_R3f374485skb_under_panic_Rf4dd5514ip_statistics_Rd3be94e8ip_id_count_R6edc8ca8ip_send_check_R434ccab0__ip_finish_output_R62fe34ccip_fragment_R047ac711stack_top_Ra6cab6a7__copy_user_R9c5239eblocal_bh_count_R8c090c95netdev_state_change_R6d700238unregister_netdevice_Rce1c8f92ip_mc_inc_group_R035330eedev_get_by_index_R0df11505ip_mc_dec_group_Rfe8b3a4einit_moduleprintk_Rdd132261register_netdev_R0fd2700binet_add_protocol_R5b90336fcleanup_moduleinet_del_protocol_R6ac28ff1unregister_netdev_Ra9101341 $ <    x  P P P  8 @    x& & '()* @ @+8 @ D,L-./0& )  0&  & )L2 \2 2 4*)5 6 ) ,7 8 H) 6 ) 2 2 9 ) 0: 4: L' `) t7   ; * ) h<  x<  44= <= L>P= ? @? .< PD PH;)7& & 'T &  A A BA +A hA xA B& t x   & C C C P.`.pC |DC A B& L P \A lA B&   E& )  ;...,& 0& D'8))F8& H& LG\& l& pHx& |& )  <   <      .0.8) P (  P ( <G& & '& & )4 8 < @ L P t x |    J      K L  N   8 J 8 O ,$31ELF \4( 㿘` A`(  0    4@  @  `& & $ @` `@ & 0& ,& (& &`"` @`  @ { w s  #` @27` @22`  @2-` @2(` @2#   @2@&``@ @ 4` @   7$  2`1 3` ) #   @2`@`&` @ @ 4` @  `$   㿘@` ` * ` `@ !`   2 2 2   @e  6 & &  2  㿐@ * @`` +`` 2 @`2 8@`  @`2` 2  #\`#``  @`  @ ` ` (@` `!  + 22@* @82 "  2 27 ` + 2 2 8 2 2 `  2  2@22 2 㿐@1` ` * @` `   + ` 2@`3`*@` 8@`2 @`    ``2`  @#\#`&  `+ 2 ` 2 @` 2@`" @`2` 2   @#\#`@x`@ 2  %     #\ #` #d #h #l #p (@ "@#t#t #x@@ & 2 &&&@㿘 @"`㿘@ 㿘@ ? 㿘@ @  ?2 " (" " $01.01kernel_version=2.2.25using_checksums=1<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dip_autofw_add: malloc said no Type Prot Low High Vis Hid Where Last CPto CPrt Timer Flags %4X %4X %04X-%04X/%04X %04X %08lX %08lX %04X %04X %6lu %4X autofw<6>ip_autofw_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 P!,  , 2  = B H 0*Q `QY c = l0  !)5 EOZ 0k}hDX<  $6DUcj,P _~$(ip_masq_autofw.cgcc2_compiled.buf.430strProt.431ip_autofw_hostsmmod_selfautofw_ctlip_autofw_expireautofw_out_updateautofw_out_createautofw_in_ruleautofw_in_createautofw_procinfoautofw_proc_entryautofw_mod*ABS*__module_kernel_version__module_using_checksums.div.urem.udivkmalloc_R93d4cfe6__this_moduleprintk_Rdd132261___atomic_addmemcpyip_masq_mod_lkp_link_R983c1037___atomic_subip_masq_mod_lkp_unlink_R09c8482fdel_timer_R5811f067kfree_s_R06d9dd5djiffies_R0da02d67mod_timer_R24685a70ip_masq_new_R4bbb656esprintf_R1d26aa98proc_net_inode_operations_R01511c86ip_autofw_initregister_ip_masq_mod_R52449729ip_autofw_doneunregister_ip_masq_mod_R368d4d59init_modulecleanup_moduleHX \ x` d xp !"       !#  ( , 0 4   $%&' $8 < H L T X \ d p$ %  &' $   t( x( )  T*l  (    ,  t*  +    (  ( ( <+ X X .  X0 X-/  (    (h`X(,,` lp|hELF4( 㿘` @` ` 㿘` @` ` ` (` `\"  *  (( @222** * * 㿘 (   ^'@ (0G``. `((`@" `8000/`/`/`/```(e,8* 8``($  @@@.`. (2 `80/@00.. . `( 㿘  ) + ,  @  &?`@ @ @    "   㿘    " `@ @$``  㿘@ ? 㿘@01.01kernel_version=2.2.25using_checksums=1parm_ports=1-12i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dcuseemeGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4! 8  ,\2 @`  =0B0HHAQYc=Mlp   \"*6 0<4P44 d j0hd < T00BT[zdd$ip_masq_cuseeme.cgcc2_compiled.buf.464strProt.465portsmasq_cuseeme_init_1masq_cuseeme_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_ports__this_module___atomic_add___atomic_submasq_cuseeme_outmasq_cuseeme_inip_masq_cuseemeip_masq_cuseeme_initmasq_incarnationskmalloc_R93d4cfe6memcpyregister_ip_masq_app_Re3c2dc0cip_masq_cuseeme_doneunregister_ip_masq_app_R7752cb17kfree_R037a0cbainit_modulecleanup_module  8 < HX \ h p    !   $#@$h"h`X@xLP4TXELF4( 㿐@ '@ J@ ,2> `@ J@ ,4 `@ J@ ,* `@ J@ ,2  `@ J@ ,2 `@ `- *  +  *`%@   6@㿘` @` ` 㿘` @` ` *`2`c  ( @  ( 㿘&@8 @  @ "   ``l   `*` ` 2 * @'\ 8  @' ?  '    &`X -ҰҀ =  Ԑ  ?  '  ?  '  ?  'Ԁ@`J@ ('Ԣ Ұ J `)'Ԩ   Ҙ @ 2 @ #`Ғ#\ @ @ @ 6`6 *2 6  ` 6  #\#` 7ؐ )#d#d @@Ԗ"@@ @ 0@ &@@㿈`l  `*` ` 2 * @'\  v@ <`X @l    b'`   W'` ݔ  L'HJ `('P =J`)" 075    +'8 %J "   `8@  #`#\`8  @ @@&`X 㿘 @  @ 0?&@㿐' %@ "& "@' @$   '&` ` `  @ @ 㿘   "  @ @&   㿐#`'`@ Z'%` Q'! "  F ?@? @c??*@@ &  ''@ .'`" ,! ' r ! ?? @c?c  &  '@  @ '" ,㿘 } 㿘@ ? 㿘@ @ p01.01kernel_version=2.2.25using_checksums=1parm_ports=1-11iparm_in_ports=1-11iparm_noport=1-11iparm_mark=iparm_in_mark=i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dPORT port PASV pasv ntering NTERING assive ASSIVE ode ODE %d,%d,%d,%d,%d,%d%cssive SSIVE ftp<3>IP_MASQ:FTP: registration error, quitting <6>ip_masq_ftp: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 !  , D2`  = xB H Q \Y c =IlP  8&2 ,88,Ad,HMU4c44sh4\tt<\0D0  27=CI0]Ht`x l( #9Wiz4  /ARs  ( $ (ip_masq_ftp.cgcc2_compiled.buf.628strProt.629portsin_portsnoportmarkin_markparse_ip_portmasq_ftp_init_1masq_ftp_done_1masq_ftp_unsafesafe_mem_eq2masq_ftp_pasvmake_instanceregister_portsunregister_portsmasq_ftp_objsmasq_in_ftp_objs*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_ports__module_parm_in_ports__module_parm_noport__module_parm_mark__module_parm_in_marksimple_strtoul_R20000329__this_module___atomic_add___atomic_submemcmpmasq_ftp_outip_masq_out_get_R3884aa67ip_masq_new_R4bbb656eip_masq_control_add_R681ddfb2sprintf_R1d26aa98strlen_R97255bdf__memcpy_Rbfaaaa73ip_masq_skb_replace_Rac6fa2adip_masq_listen_R7c01380cip_masq_put_Rb065d7e9masq_ftp_inip_masq_ftpkmalloc_R93d4cfe6memcpyregister_ip_masq_app_type_Ra9f302fekfree_s_R06d9dd5dprintk_Rdd132261unregister_ip_masq_app_R7752cb17kfree_R037a0cbaip_masq_ftp_initip_masq_ftp_doneinit_modulecleanup_module)D)l))))8* <* H+l* p* |, d d-4- x  x       4 t8 t            l/01  (243\4p5|67 t t    $ D H L P p t x |  x  x `/017:;9 ,9 @ P<= > ?@       0 D 4 8 8 8 < D T X d9 h9 |   > <     9 9  $ ( ,> d= t<  D      D  D A B  8 >  8h`X4h.8ELF4( 㿘` @` ` 㿘` @` ` p@ @ * @`' \〢  `@  ܐ ' `'ܦ 5, @ 2t 'J    'ܔ܀ n J ` 'ܰܐ@ ܢJ@` S'ܐ @ ܀`K`"I?#@8D *` 2` 8 c "3*`2`  @   #`#\  @ #`@`6@%@ , @0 @'@@@0 ܀ o x @ * @`'   \〢U + `@ ܐ D'ܒ 'J   'ܔ܀ = J ` 'ܰܐ@ ܢJ@` &'ܐ @ * 2 ܖ  @ ` 2 8@&@ , @0  @&܀  㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@ @  01.01kernel_version=2.2.25using_checksums=1parm_ports=1-12iparm_insecure=i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dACCEPT SCHAT TSEND MOVE CHAT SEND DCC %u %uDCC RESUME irc<6>ip_masq_irc: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!8  ,02  =BHXQ0Y$c$=al `  `&2<;4K44 [ ay 00H@0h";Uk}p 01CJiLdz$(ip_masq_irc.cgcc2_compiled.buf.628strProt.629insecuremasq_irc_init_1masq_irc_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulports__module_parm_ports__module_parm_insecuredccprotos__this_module___atomic_add___atomic_submasq_irc_outmemcmpsimple_strtoul_R20000329ip_masq_out_get_R3884aa67ip_masq_new_R4bbb656esprintf_R1d26aa98__memcpy_Rbfaaaa73ip_masq_skb_replace_Rac6fa2adip_masq_listen_R7c01380cip_masq_put_Rb065d7e9masq_irc_inip_masq_in_get_Rd6509363ip_masq_ircip_masq_irc_initmasq_incarnationskmalloc_R93d4cfe6memcpyregister_ip_masq_app_Re3c2dc0cip_masq_irc_doneunregister_ip_masq_app_R7752cb17kfree_R037a0cbainit_modulecleanup_moduleprintk_Rdd132261  8 < H      |   < <<!l"| #$%&' T X ` d  $)4 @#d$|% ,   , * -, * ./P, T, p12+0 5 h`X@HPX`hxt4(ELF4(  `(     2 㿘  `* @&"@ @ @  㿘 @  ` @` `@ & &  & &  "` 2` "@ "` 㿘 @   ` @` `@ `$ `4 @$ ` $ ` $ 㿘ܐ ? "  @ " """@ @ ?"㿘)   %   . +``  2!``  2  @   "@"` @` $2` `?% ?     `"` 2`"`  2` " ` "  2` ?㿘@ ` @`  `㿘 * ` ?ꀢ @2 "@` @ @@ 㿘     @"`# &@ & ## 㿘  Ւ 9'L'H    @`  `L ? @p`@`@ @9 -@`"4- %``#Lp+53 @     @#\@`@&`?%` L?%@`9 L%&H@'&49  @`  `X#` $`!  @@@ @`1? $`,@ "F)/ -  "    @  "@"  @ $@  `"@@   @`  `%`@@  2 㿘<`((?```6` ` ? `? *` €  #` @  "?􀦠``?   !  $  ?$  (`l$`3` @i ?!  $ ` K$ `` @02!  @  @ 2 3` &` ` P   g `?&`㿘 @ 㿐@` *  ` @   0` E  ` `    ` #\@#` @㿘 @"`㿘@ 㿘@ ? 㿘@ @ @@@D@@\@@_@@a@$01.01kernel_version=2.2.25using_checksums=1<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dFwMark > RAddr RPort PrCnt Pref%-63s 0x%x > %08lX %5u %5d %5dmfw<3>IP_MASQ:mfw_flush(): after flushing row nhosts=%d <6>can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 !4  , 2!  =TBH*QYc=,l % [&2 < ENLX@jL`tl|$<|DH@80h D 8 ( 6d< > D\uz ?Qu  @ $L (ip_masq_mfw.cgcc2_compiled.buf.540strProt.541mmod_selfmfw_semamfw_lock__mfw_getip_masq_mfw_table__mfw_addmfw_newmfw_host_to_usermfw_host_newmfw_addhostmfw_delhost__mfw_edithostmfw_destroy__mfw_del__mfw_schedmfw_lookupmfw_procinfomfw_proc_entrymfw_flushmfw_ctlmfw_in_rulemfw_in_createmfw_mod*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv___atomic_addip_masq_mod_lkp_link_R983c1037kmalloc_R93d4cfe6__this_module__bzero_Rdd42e263local_bh_count_R8c090c95___atomic_subkfree_s_R06d9dd5dip_masq_mod_lkp_unlink_R09c8482fsprintf_R1d26aa98proc_net_inode_operations_R01511c86__memcpy_Rbfaaaa73printk_Rdd132261__down_R7356f38e__up_R4506727eip_masq_new_R4bbb656eip_masq_listen_R7c01380cip_mfw_initregister_ip_masq_mod_R52449729ip_mfw_doneunregister_ip_masq_mod_R368d4d59init_modulecleanup_module   T \ h p *+,- - *.H,X- d- p*./ / / $*,/ 8/ H/ L/ X/ l- p- t- 01- 0 / 0/ 1- - 0$ 0 H h t020p- - * x x3  3  / / / ,/ 0 4 P `3l p3/ / / / /  -  - 0</ @/ H/ L P \5h.p/ t- / -  -  - 01- 0468 D1L- X0h |02 4 L 8 L L d P d T 8 X 8 \ ` p  t  0 / / / / / $  4  8  <  H0 / / / / /     *     0 * H/ L/ T/ / / l9 :  d  d  <   d >  d ; =   6   7 @7 `8 7 8h`X$448hlx |  ELF 4( @?  `@#`@+` @ %`/ ,@@"*@  #       #\ #` @#d`@ 2ܦ@ѓ,`$& ?%` & &@ @(@ ` `?(  ` @2  @ 㿈@ * @` #` `?* `  `@   2@ @2 @  " 0@   0#`#\` `@` # `@  @`  $ "`"`  `?*` "$$ "㿘`"`"  ""  @"`㿘@ 㿘@ ? 㿘@ @ 㿘`(< (-```; ?* 2 bF 8   2 `"``"0'0   `?     5  &+*`@@@ %- 2 ,`2@`3``@2@3``2 @""`` 2@"`"`@@ 2`?& @  İ ` @` `@ & 6 6 & & & &&  &`@ @ " && &@ `?&` @`  @  + )``?  `%`*      ?* 2 ` 4`  2. - 2'-2 `"@  2@  `" "@  @5@@  @ $2 ` ?%` 9 7 5  $` @"$` 5%  @2 @  "@" @ @ $ ``ٲ` ?$$01.01kernel_version=2.2.25using_checksums=1<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dProt LAddr LPort > RAddr RPort PrCnt Pref%-63s %s %08lX %5u > %08lX %5u %5d %5dportfw<6>ip_portfw_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!l  , 2|  = $B H *Q Y c = .l   !)5 ?KX[gDyXtX<   "F\uX@$( -;Mlip_masq_portfw.cgcc2_compiled.buf.540strProt.541mmod_selfportfw_lockportfw_procinfoportfw_listportfw_proc_entryportfw_in_ruleportfw_in_createportfw_modportfw_ctl*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsprintf_R1d26aa98local_bh_count_R8c090c95proc_net_inode_operations_R01511c86ip_masq_new_R4bbb656eip_masq_listen_R7c01380c___atomic_subip_portfw_initregister_ip_masq_mod_R52449729ip_portfw_doneunregister_ip_masq_mod_R368d4d59init_modulecleanup_moduleprintk_Rdd132261kmalloc_R93d4cfe6__this_module___atomic_add__bzero_Rdd42e263ip_masq_mod_lkp_link_R983c1037ip_masq_mod_lkp_unlink_R09c8482fkfree_s_R06d9dd5d x x ( , 4@ D P T `     ` ` h h $ 4 p       ! \ ` d l t |  X X#  X% X"$ (         )* * +,   8 < @ H X+p-       * * h t!* ./* !        $* (* ,* 0 4 D!X.t/|* !  h`X(,`lp|XELF4( 㿘` @`  `@  &`X@ 0* 㿘` @`  ``X @  㿐`XL/` * `% ! `  "`0`  `@  ",0    @ ?6`4, 㿈`XLF` * `< 8 `  "`00` - `@  "&,0$ "  @ `4#\`8#` `<@  67@ @@@ 㿘 @  x@ 㿘@ @ 㿘@ ? 㿘@ @ 01.01kernel_version=2.2.25using_checksums=1<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%d<6>Quake: No memory for application data QUAKEQuake_26Quake_27ip_masq_quake: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4d!   ,L2  =BH*Q0Y#c#=`l   - (4`F`L X ^v 0*@Yw , @($<(ip_masq_quake.cgcc2_compiled.buf.464strProt.465masq_quake_init_1masq_quake_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_addkmalloc_R93d4cfe6printk_Rdd132261___atomic_subkfree_s_R06d9dd5dmasq_quake_inmemcmpmemcpymasq_quake_outip_masq_new_R4bbb656eip_masq_listen_R7c01380cip_masq_control_add_R681ddfb2ip_masq_put_Rb065d7e9ip_masq_quakeip_masq_quakenewip_masq_quake_initregister_ip_masq_app_Re3c2dc0cip_masq_quake_doneunregister_ip_masq_app_R7752cb17init_modulecleanup_module  0D xHL xd h t( , 0`  <d !"# # &$ $ &# (# $ ( $ %@'P TX h`X `$(0<@`DHELF 4( 㿘` @`  `@  &`X@ 02 2 ""  㿘` @`  ``X @  㿈`X`"T` 2 `"T` # `   *  2*\ @@  `@   ` 4` @a`@  Z  @ ` 4`` @ I @ D = @  @ `5 逢``( @   `8#``<#\ @ " @@ 6@ ` 2$`$@@  Ò h `X@     U @ *  2`\*` //耦  { .  €   L@*`:   `a*`:  2\`@ 2Y   2U `@ML ="I H  А 8B / < L`- 6 `;А* #*) А *`/  :  ;2 L`; *??А  耢` `  r *   6i Ԑ@ * 2 `8 `<#\#` @ "T @@ $@ * 2 `8`<#`#\ @ @7 @@6`6@6`@ض @%@`@ '@@ " 5%2%@@㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@ @ *01.01kernel_version=2.2.25using_checksums=1parm_ports=1-12i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%d<6>RealAudio: No memory for application data OPTIONSDESCRIBEPNA<6>RealAudio: version (%d) not supported <6>RealAudio: Packet too short for data transport:client_port%d-%d%dRealAudio<6>ip_masq_raudio: can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!8  ,\28T  = HB HH `AQ Y 7c 7= tl0  @!)5lHlL [ ay 00"`29LGNd} < d.0@_dsl$(ip_masq_raudio.cgcc2_compiled.buf.632strProt.633masq_raudio_init_1masq_raudio_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulports__module_parm_ports__this_module___atomic_addkmalloc_R93d4cfe6printk_Rdd132261___atomic_subkfree_s_R06d9dd5dmasq_raudio_outmemcmpmasq_rtsp_outmemcpyip_masq_new_R4bbb656eip_masq_listen_R7c01380cip_masq_control_add_R681ddfb2ip_masq_put_Rb065d7e9strlen_R97255bdfsimple_strtoul_R20000329sprintf_R1d26aa98ip_masq_skb_replace_Rac6fa2adip_masq_raudioip_masq_raudio_initmasq_incarnationsregister_ip_masq_app_Re3c2dc0cip_masq_raudio_doneunregister_ip_masq_app_R7752cb17kfree_R037a0cbainit_modulecleanup_module  0D xHL xp t   8H L Td   !    !(!p!"#$!% (  (,&  xH\ 8` 8d&'"# $0 P<'d"x%#$ H H( P(&)&@%T%h, l p t, |* , * !- , , ,/H0p+. h hh`X@XLPlTELF 4(  0"@ <"` 42` @"` 62` 8"`  22` h"`$㿐  2#  `"   `2 ?  @  `X`& ` @ 㿐 "   ? ? ?  ?2 6 + 2  ( & ( ",   &  6    #`    @#\ 2 $  $ h@@ 㿘 "   ? ? ?  ?#4 +` $`  "   "  @  `  @ `?$`` ?$`   $ h:@  㿘     ? ? ?   ?! +&@  $   "   "  @  `  @  ?$   ?$ &@` &@ 㿐 "@ 㿐   $$ h@ 㿘`(\ (65 @`  ``` *` €  .  Ɛ  " \ @`  `'D'H;'L'P'T  ` @`  `L`   p```@-D@ 9   ' ;.``@'l@kp0T _L4`X `-\ 2?  ? ?    ;`;`@`;* `@l@;8 d2<4#\@#`6#h#dd#l#t#p$`@" #x;`#|#@D@@P& ? ' l20 `?`'  L&D&@H&'@P4;` @`  `?     㿘@ ? 㿘@ @ 01.01kernel_version=2.2.25using_checksums=1parm_debug=i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dProt SrcIP SPrt DstIP DPrt MAddr MPrt State Flgs Ref Ctl Expires HRow HCol (free=%d,%d,%d)%-127s %-4s %08X:%04X %08X:%04X %08X:%04X %-12s %3X %4d %3d %7lu %4d %4d<6>ip_masq_user_done(): can't remove moduleGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4 X!h  , 2<  = B H =Q dY dc d= l@P  '3 9DGDZ0k(|<L8D  "(.40 Hbp:Lf,( $ 0(ip_masq_user.cgcc2_compiled.buf.638strProt.639debugmasq_user_k2uip_masq_user_maddrip_masq_user_newip_masq_user_delip_masq_user_locked_getip_masq_user_getip_masq_user_setip_masq_user_ctlip_masq_user_infoip_masq_user*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_debugip_route_output_Re8c2da9d___atomic_subip_masq_new_R4bbb656eip_masq_listen_R7c01380cip_masq_put_Rb065d7e9local_bh_count_R8c090c95ip_masq_in_get_Rd6509363ip_masq_out_get_R3884aa67__this_module___atomic_addip_masq_free_ports_R11238ec8sprintf_R1d26aa98ip_masq_m_table_Rf241149dip_masq_state_name_R9be87ac7jiffies_R0da02d67ip_masq_user_initip_masq_user_hook_Re8d8a31fip_masq_user_doneinit_modulecleanup_moduleprintk_Rdd132261 !"#$`% l% t% &'% % % %  $% % % &'% %  % ,% p$$( ( )  8$ 88L<L@lD\H|( !( ( )* *  * , x4 x8+@ H L+\% `% l% p, x,  , p0 4 < @ pD+H T \ h-l. .   + +%  % 8% L% ( ( !0 0   0 0 0 0 / 41 D 8 H4 L 8h`XELF4( 㿘` @`  `@  &`X2 22  㿘` @`  ``X @  㿈`X e  a` * `\` T@ ``I``$C``=`2`@  2  @  `8`<#`#\ @ @ 4@@ 64 @  @   ``4  㿘'  ),  "  @  &? @ @ @   %@ ,  㿘    " `@ @$``  㿘@ ? 㿘@X01.01kernel_version=2.2.25using_checksums=1parm_ports=1-12i<3>IP_MASQ:ip_masq_app_init_fwmark(): fwmark must be <= %d, sorry (shoot Juanjo) ICMPTCPUDPIP_%dVDO LiveVDOliveGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ksymtab.comment4!   ,\2T  = B H8AQYc=Ml   /"*6 0<XPXL d j0%,3I_x< L0dT$ xip_masq_vdolive.cgcc2_compiled.buf.628strProt.629portsmasq_vdolive_init_1masq_vdolive_done_1*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umul__module_parm_ports__this_module___atomic_addkmalloc_R93d4cfe6___atomic_subkfree_s_R06d9dd5dmasq_vdolive_outmemcpymemcmpip_masq_new_R4bbb656eip_masq_put_Rb065d7e9ip_masq_listen_R7c01380cip_masq_vdoliveip_masq_vdolive_initmasq_incarnationsregister_ip_masq_app_Re3c2dc0cip_masq_vdolive_doneunregister_ip_masq_app_R7752cb17kfree_R037a0cbainit_modulecleanup_module  0\ ` ld xh xp !"! P% T X \% d# % # &% % (0)X$|'h`X@LPXTELF 4( 㿘 "``  #2 "@  # @ ` @   $ 2?"㿘% $`` '2  $@  @` $`2?$㿘` 㿘 `52 @ @  "`㿘! @ @ $ 㿈 \   `?& \ & ``oK``X@@G p`P D  A  =` 9`(`3 ` . p @ `o  @  `h ` @   2 ` `h '   `5#\#`@  p @@ HD` @ D  D y? u? q`@ i?  @ a.`L  `` @S?%  `    2   @  !<? +$ Ho`$&Ho`  . . &  @ & H*/ ` @`   `PD#` @ D  D 2.? (?      2  2 ?@  7D` @ D  D ? P"!a6"!` ?0G"!b.?0A `   ` !!`-D`@ @ D  D #? ?" 0 `   ` !!`?p ` `@4`@ +/-+   @2   #\ #` #d `@#h & 2 &&&@㿘@`" 㿘@ 㿘@ "Ho` " H*o` % @  @` $`$01.01kernel_version=2.2.25using_checksums=1<7>RARP: SETRARP: requested PA is 0.0.0.0 ! RARP disabled until entries added to cache. IP address HW type HW address %d.%d.%d.%d%-17s%-20s%02x:%02x:%02x:%02x:%02x:%02x 10Mbps EthernetrarpGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 $!<  , Xp2X<  = B H *Q Y = :b  (1:GXL j |(l<8x(  4BTby,BSmT ,D 0/Ga @m T|rarp.cgcc2_compiled.rarp_packet_typerarp_rcvinitflagrarp_destroyrarp_destroy_devrarp_device_eventrarp_dev_notifierrarp_pkt_initedrarp_init_pktrarp_end_pktrarp_req_setrarp_req_get*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulrarp_tableslocal_bh_count_R8c090c95__this_modulekfree_s_R06d9dd5d___atomic_subdev_add_pack_R5e0659b6register_netdevice_notifier_R63ecad53dev_remove_pack_R153b0588unregister_netdevice_notifier_Rfe769456memcpymemcmparp_send_R3d07c471__kfree_skb_R4954ae5fstack_top_Ra6cab6a7__copy_user_R9c5239ebprintk_Rdd132261ip_route_output_Re8c2da9dkmalloc_R93d4cfe6__memcpy_Rbfaaaa73___atomic_addrarp_ioctlsecurebits_Rabe77484rarp_get_infosprintf_R1d26aa98proc_net_rarpproc_net_inode_operations_R01511c86rarp_initproc_net_R7b597ac4proc_register_R8baf7c4drarp_ioctl_hook_Rddf52ebfinit_modulecleanup_moduleproc_unregister_Rf65f8efb     $ ( , 4 P \ ` h t!             !8 @ x | "  #  ( ( ( ( $  %  (&&  '@(T!h)* * + , -D!T X .     </l p |0* * +  D/X* p+2 2 $* ,* D+2 2     0 04$ `( `,44 8 P T X l t4  4 8 8 5 9 $5 (1 ,1 0: 4: D7 X8 \8 `= h: l:           ! L0@6D3ELF4( `  ` 2@`P@"*`Q*`Q@`2` 㿘 ' %    2 2` 2 `@  `  2 2` 2 `} t` ;  2j "fL 2b `@ " @4 X$ \$ |"@  "Q@( 2 T@ `` 5` @ T` "` $    @" x  |` @ ,@ @@ 2  @ 2  - @*`% < % t% \ $ $ $ @"%@ 2 ` @㿘 x T` ` @ T` "` $   @ 㿈 'D'H'L'P'T 2T22`ݰ?PDxPx ' P `@ D @``   @   .``d `  : `@x `2:q `@#\@d`"b ` T 2@2X@ `2T@ @`#\#`@L`0  * @ `2)L :`@ ``$L@` `:)L :`@ ``$L:@@`@`2`  @ l`@`DL$H  LP&6㿘 F 2?@  @ | `  &?㿘 `&  @ `2 @ ?㿘`@ ~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ü|zyvutsrqnmlkjigfec\ZYVUTSRQNMLKJIGFEC<:9654321.-,+*)'&%#:Am@01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... fcalsocalFCALCannot register FCAL host FCAL: Total of %d Sun Enterprise Network Array (A5000 or EX500) channels found Sun Enterprise Network Array (A5000 or E?500) on %s PROM node %x Initiator AL-PA: %02x Attached devices: %s none [AL-PA: %02x] Not responded to PLOGI [AL-PA: %02x, Port WWN: %08x%08x, Node WWN: %08x%08x] Not responded to PRLI [AL-PA: %02x, Id: %02d, Port WWN: %08x%08x, Node WWN: %08x%08x] %s Unknown device%c Fibre Channel Arbitrated Loopkernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!\  ,@2  = XB XH pP @*Y jc j= lDP  *#/LH@` Y _djppDL,:Pew`hd8QnLfcal.cgcc2_compiled.alpa2targettarget2alpafcal_select_queue_depthsfcal_encode_addr*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumsproc_scsi_fcalfcal_detectfc_channels_Reee62cferequest_module_R27e4dc04memcpykmalloc_R93d4cfe6scsi_register_Rbfd2fff1panic_R01075bf0___atomic_addfc_do_plogi_R814ddc98fc_do_prli_R56666664__bzero_Rdd42e263printk_Rdd132261fcal_release___atomic_subkfree_R037a0cbafcal_proc_infoscsi_hostlist_R231c32c0sprintf_R1d26aa98scsi_device_types_Rd54b74acdriver_templatefcp_scsi_queuecommand_R5e4f4145fcp_scsi_abort_R337f2ab2fcp_scsi_dev_reset_Rca2c63b2fcp_scsi_bus_reset_Rf03de44bfcp_scsi_host_reset_Rc994d42ffcp_old_abort_Rda219841init_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_moduleP X ` d      $ \ `p @t @     $ Tl    !(#X$l& p&  8 8'  ,'0 @ P T \ ` d l'    ' ,'0 x 8 8'  ( (   ' ' @ D'H X x'|  '  ' \ |  ) 1 ) 1 23) ) 3t%"*+,-./ELF t4( 㿘` @T㿘?& ` @ ` @C`  ` 2@`P@"*`Q*`Q@`2` @'D & ! 3`&`` 2 @` 2@` "`@`2`` `@  ``` 2 @` 2@` "`@`2`` `x  * * " * " @* 5 &@ e /*@ *`"@ *`"@ @*`@ X  `+"`%``M  `! 1` 2>@`"> ` 26@L` 22@` @  "ⴐ @4`X$`\`$$`| @ ""x9?   #*E*I""*C"""T!"@a"l"@`2` 1)`  ?# %"`!("`@`@ @``" c$ @  @O` ```@`   "`  €!`2`$@ ᴐ  JἘ`J`ἀ`JK  ``JK "@`2y`$J  L  `JK  ``JK "@`2a`$ 6 7@ * @  \`D@  2`T@  ` ` @`T` "` 7$< 6|$D`x$\$t 6 $` 7$`$` 6 7@ @*`$x @ -`@ 2*$@ -` @ 2*(@ -`@ 2 *``$  `V`*@ *`"@ *`"@ @*`  @㿘 x T` ` @ T` "` $   @ 㿐 x! <  D #\#`   |`@@ "` xP` @㿘 F 2? B    @ ?@  6@ B6` @6`6` &㿘 `&  @ `2 @ ?㿘`@ @@@@@@6Am@01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... plutosocPLUTO: Not enough memory to probe SSASUNCannot register PLUTO host PLUTO: Total of %d SparcSTORAGE Arrays found SUN SparcSTORAGE Array %s fw %s serial %s %dx%d on %s PROM node %xSparc Storage Array 100/200kernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4 !  , 2  = B H P *Y c = lP   DH%L*P30H0Z8\qL|  Dd  '5;H^w+?Pdv`xpd,If L Tpluto.cgcc2_compiled.fcsfcscountfcssfc_timerpluto_detect_timeoutpluto_detect_donepluto_detect_scsi_donepluto_select_queue_depthspluto_encode_addrbuf.406p.407*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumsproc_scsi_plutofc_sem___atomic_add__up_R4506727e___atomic_sub.umulpluto_detectfc_channels_Reee62cferequest_module_R27e4dc04scsi_init_malloc_R7a0e9b85printk_Rdd132261__bzero_Rdd42e263scsi_command_size_R9b05ea5cmemcpyjiffies_R0da02d67___f_disable_irqfcp_scsi_queuecommand_R5e4f4145___f_enable_irqadd_timer_Rbea990b2__down_R7356f38edel_timer_R5811f067kmalloc_R93d4cfe6scsi_register_Rbfd2fff1panic_R01075bf0strchr_R349cba85scsi_init_free_R6ac8ba0bpluto_releasekfree_R037a0cbapluto_infosprintf_R1d26aa98driver_templatefcp_scsi_abort_R337f2ab2fcp_scsi_dev_reset_Rca2c63b2fcp_scsi_bus_reset_Rf03de44bfcp_scsi_host_reset_Rc994d42ffcp_old_abort_Rda219841init_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_module  D LL LX h l x  # #  H  H4 H< HP H\ H` d$h l# x H H H H H% D D  &   H$ P@'L'T X# \ ` Hd Ph Lp L(  (    H ) D$ D( 0H 0p D D*   H 8 D H+ D  8, D(-0 HD* H PT.\ h | L H0 H D D    l p t !1 H2  3 $ 4P !')4)4)(4@ HX Hl H D5  & 7 , 8 HH HL9X4` d l t |9' : A : A $B @C X: \: `C |  /"68,;<=>?ELFv4( 㿘)@ @  ` '  4` ?d@  ? 2@@ @ 2 ?` *` €` 4``4``4``4``4`@4` @  2@ 2 d@ 4d@?d@ @ ? @ `  ?%@  ` ? `  @ ?`  @ ? 2@@ @ @ ?` *` €`6` `6``6``6``6``6@d@@4d@` ?# 4`  㿈 x HH/ 4d@br   4b$` 4b@! 4`  c4`"4`B?`  @ ? 2@ 4d@%   4`   4`   4` 4` 4`d `  .%##".%4d.$    ! %6%6% 6% 6%6%6%6%6%6%6%6%6%  ͆%  %$    %"% 22N% "2@2@222  `  $ *@?%? ? @ *` &% 4d@ 77  $=  07%7  2$@"& $) &  !77 7 777  $  77 7 777}   $ @ R  27%7% 7f  37%7^   ), 77U   ,  7J  17%7B   8 , 77@*``773   `  7%7'  &  㿈 `  -HHo`* 4 6 *, @   * "  $ 4` 4`"4`B!`  @ ?  $ @ 04d@@# 4`%  4`0   4`0 4`04`4` d  .%##".%4d. 4d@4d@bv! .%.% 4d@ 777777  $m  ), @ 777  2$@ $S 4, 4d@@# 4`4`  4d@ 77j  2$" $2 77X  7R  2$耤$  4%.$*`.$:`.$778  2$耢" %$ @ 2  ?$ 777  ?777  㿘e @ e @d@  e d@ e  d @ d @ Le  2 ,ed @ ,e P'D & ` '  ' "t `@ `@ #`@ @` 2U D @K@%䦒 x@ 2 @ $<$$$  #+? 3 2" $ `@ @`@$@ c - $` `0@ `0 4 @8 $@ @`4`0   @  $@ ,$T$P ;,X$$\*@ $"@"$ `\    @@ @   $#+`\@3`@`@??$759;`@?$2  ` @ $`"d@`@  @ ` @  0 0" ,@!  @b@* `, (,@$@$$@$ $z @   @ 0 "@  # @'`@   @, ,@ `$ * * * * "     6$   "#@`$ 4 @$`@ ?$` l@ T& $`  T $`$4`$` ,"  @ *`  " 5% $  "@,*"  5n%h  &!@ 㿘  `C  *` € ab  d h@@2         @   * >㿘H/`3`u  l  5$@ `  @   @  @ @  @ $5 "G$ , *` "  ?* 2     "  $ @`̒ @   Q$a$a`~`" @` `@``@`T `@*`@ %@ 5 `2$ 2` 㿘H`` k4@ ` @   @  @ @  @ &`4 `"G&`` `, `*` "  ?* 2     "  &` @`̒ @   dː$a$a`~`" dd@` `@``@`T `@*` % 4`2`&`㿈 @  A@ x` ! 2 + @" @  +  @  A* 3 7777 @@  ` 2`㿈`x@   2`7%7  @" @    2`㿘 `&  @ `2 @ ?㿘`@ x0$ COPYRIGHT 1991,1992,1993,1994 QLOGIC CORPORATION ISP1000 Firmware Version 01.31   qp ? pISpP p p?p 10 y5xc/ '  @B Qxx xxO i5@jh< !xlh(hh hhhh#hh' i6  h hhhj-  i6 h7h @hhdpxx8x/:xx32 ppxxxxx2}x}x//xxxxp p z zp@xx0x/ 5h!/xx6x 5o!e@ 5j!!! `x)xx 5o 5i! @- @xx| a`@8|ppppp 8yHVVagDk$2FZ9CJp  8y rq @xsrq @p a` P @|p@x A A Sxppzxxxx ppISpP p p?p yx 10 Y )W Qp ar P @xUqrsp 10@psr Q I4 Ap& IB ANpp q.pp@Bp   B J &Sxp @BHB&Sxp &Sxqp!^ rxppxprstprstҠ@}xrzz{~|vxxxxxxprstprst֠@xz{|xxxxxx 5Y! x 5A! x 5B! x a5@a bx 5E! x 5F! x 5G! x 5H! xyz xqā6jh@kxk xwx kj 'xwx ijk xqġxxqġ 5A"~!xuxq 1 "@#p!xx1~ 5B"!~xxd2K a5@a bp`p`x a5@ap`xq  (@c  2@c  < a5@`~a#xx3xqġ 5G"!~xxqġ 5H"~!xxqrȡ!yx "z xxqā6 rh~&@j @@@@ρ@@xxxxr̂@h@ a5@a(@衆2@<@dHxPHxCHqqrxj hhk qxwx jk phph'xqrs̡xxwx jj 'xwx jj h@Ax 'xwx jj h@Ux 'xw A I Q x 'jxwrswrsxh@'xx |  @x xww A! I Q x a5@`g`x x|wwwwƧ a5@``gxx  A! I Q xph68 |x 9 A! I Qx h i 8ݧ?8? ih0@@hK hH@ p xhK hH@px px y5x a5@```xxhh hF |xx@x`qqyJ|tsrtsr y5 @xo@x?@Zxxx` x 5h  # " $   , .%0~x/eeff`` x|p@xqpyxqq!hx ii -h p@xp@pxqrs!!yp@qrsxp@pppwqx 1&$0$"F 1xxxUUy`qqġybxy`qxyTqqyVyXqqyZy\qqy^xyTqyXqy\qxp @pppqrs 0` Sx ppq1p q p|p @KppFpqrs 0x ppp Zp lq l,Sp|xPe@w,xR c|~ y5xP b,xR| @zR @/  x | 6|x)h**h.h i 5O! h@ ``h~ x ~he@`hxxhhii|e@`` xx!x|`  @h(`h,`|~ q5@p@5- pB|~ q5@ 5r@!H!!tB|x hxe@_x),x`e@_` #`#,( 5O @_hF` `hFhxPdx `dP,h%`x`` xhh | 9 A! I Q x8j?8?j | a`xx|@xyxx` x x xx` x  xx`  xp a` @|,`, cxdxfxhyj@,xyn| ~ a5h- k`d`f`haj@-xan |x@ ~`e@x `xx|xle@ xdxf,xnxj |xeytprТ"3x@exhe @xexo@ez|{x @x?@\xxxxe xxxx xexx`yf|n}nnnn 9xx``x`xxz|x@xnx`x`@x@xxxx|xxnxx|x@xnxg `@ӧ @ 9 @xx- h+h/hh - h pxxx|xm,xx`x,h`x-`x`xxxxx `|.%0a`a@~x/eeff``gx h@? x x xxxy` F`"jh HU@U 9xzxy, he@]aiai!``hh h@@s@h xxxx|`` x xe@`x`x}xx|ypxt xvpx@xh @|h )xle@x@~x(x@ @|{yrpԢ"#|Hף||x `$@ @x@xx xxxx x xxyx xp֠|z{| 5h ~ y 5@ !4 5!4x044xD |~ # q5@ y - +#@Px##S3xCx xx p\xTpxbxxxCxSx 8pG5pC | " x[|  px" |  px! |  px" | "ϡ | ~ a`bc |" ~ a``` |" ~ a`` ` | ~ a``b `c  | ~~h@9 a?xA@' a> ~xA@ `pxx9> q5@p``q` pxx5 q5@``q` px x;   |,@X `` U`U`UxZ`xB| 5A"  ;"@j !!"|~h䠌 @`6p q@ @ 2@x x ?x !p |h~ qp. qpppÀ qp @ px~~~ #<~X|0}8?@@ا|-xPxy "%k%%&e&'D S%Jx |pp?p0@ p3p\py*Kqxx Fx$(pxx-^Ipx~xxx x`xx[ x$Ippp35pxx-^oqx~xxyxx`xx[ x$oppp35pxx-^qx~xxyx qyx x`xx[ x$ppp35pxxKx-^p hxox,,Phxn A xx-^xp\ hox,,P`` hx 1 Ax- xt@@5 0qD*H 5!de!qFpp?xv@5qD&xqF%h%Xu>,P`4gw6?@/!@@g @/`g hna@?`HB@BxHp `"g k6 ` HpJ`pN`pR*`xFx-^kpL@s@u@{ {@g xqL@) !H "H  H@z@x-wja >,d@``` ~*``` xx-^*`ay@q. ~qP@ݡ@x*ݡ@x)p`@桍yZix`(xxahhx~~~ ,x Shx~xm}}n~~x0`` x-wxr*xIx-wx;j zZxIx-wr%@;yIp2G``xQ0000QQQxxx ~ y5x@yphpxpwp hhhhhp~ q@ 5+ x 5! 5 5+ ppxpx.  9x+pxp yx !5W$@ƭh "xhox,x(xpT `h`jhhx !?x !5Wx !>x px a6`a``pxpp?x~$@ hh~jhhxx  #|P#x#y&)@/xpppy6>>@t)>t>xwx+wx,`@k !?  x@k~ !>~  x@j pjx[8Fxxwx,`@ !?   x@~ !>~   x@ pxx"yxppx"yxx$p(x(`` x(@(x$@ h-~h@- x "ihhx```` x(|x#y 5xx   0 xIxx전@!y # )  -X-X  /xp@ x"x+xUxx+xxx+xxx+xx _x$py > F S F( H( F Fxqp Qx)x(x(`` x(@(xx   0 nxIxx전@ j!y x -X-X -Pxx+xUxx+xxx+xxx+xx#y xx&ehxy䡄0@&ex전@&ey # ) -0-X-X -PxP x#y """y "xxx H+j+jy +j+j+j+ xy@ @ x+jp x'R+jy!!!!.!0!+j+j!+j+j""+j+j+j"x@!% x:xxh@!,hx-0xii!Jh!Rh!Bh@!xXx@!RxXx`@!@!!`x!z~Znxtzyx!m?k!hk"h@@!~Znp!x/:x0xgxx1jilk"@!""!|{#!@~Znxgxxg"!x0xx1xxjxxXxxx"!i@!ܡi ~pH ````` x"@"i ~pH ````` ,H @"x,x)@"x`(x~X~Z" xUxxix~X"xXxxjxx+px+p y@"xx"D#| @"<H"<x">x!$z">x"* "#@"TH"Tx"#@"hh~X 0~Z`` ~pH `` ,H @"xx,x*x" ~pH `` ,H @"x,x)@"x`(x~Z"xUxxixzx"*#@"H"x"*+vx+px+vx+jxx@"xzx+jy"+j)9+j*g"xx+xix"xx+xixP"x#y""##@"x p:py### # %%0$##x#x.@#xh@#Z#)x(`` x(@#Zx.x#A(#Zx.`` `@#A`@#A@#A`h@hhpT ~ `h` `h-#W``x~x$hh'o@###w`@#wxzh.j*6"#x#" @#h#x$x@#@ih@#p8hix(x(#`` h#x(x#pT `h`xxH#x"y#####xp@#x+xixjxxxy@#x+jxjxhh$x+x$ @$ xx+xixx-wx0$$y||`$)h/h+x$$8hH5$8x.| @$bxЀ$Fx1xx1@@$Ph/h+x$5hH5@$Jp8$\yzi.j*x$5@@$lh/h+x$5hH5@$fp8$zp;yzxЀ$?i.j*!$x$5x1|@$`` hj(i,j:i>h+h/h3 hh py$$$$$$$$$xh$x(x$pT,P `h`*` !5W$@$ x$-" k|wx+x,`@% ~ ? h  !?  x@%~ !>~  x@% p%x$8$xx(x(h'xohx1ʦ@%i ih@%$h !5Wh "j8ix& ?!h- qVn`@'@'hhhx.x'@ @'x1xЀ'xx1yzx'x,x1@'@hxtx-| x-|  '8x-|'3?k!hk"hxx+vp3P'Lx#y'O'R'\'"y'U'Z+v'Z''xp'ix(x.p4` x'np@'cp ? hp>p2"y'x+v'}''}+vxp'x(x.p4` x'p@'p ? hp>p2"y''''''xx+xixp'x(x.p4` x'p@'pzx| i?--qV h@'h@'hx'p ? hp>p2~ / p'x'jhhh#n~Zh @(Ox+x(Op(x(x.p4` x( p@(pzx|yy>--qV h@(*h@(Chx(p ? hp>p2~ / p(;x(4jhhh#n~Zh @(Ox+~Xx(O~6 `pJ`pN`pR`@(klih(t{{||ަ~Zx0x(h!#$@({{||h~Zx1x, j@( i ~Zy-p>6 Hx` @(`"`` p`&|x.hhh@hpy(((((((((xx(x(xxpxhx%h(``|`@((x``` |`@(`|x-whx)&x-whx)&x-whx)&wx,q>-- h)xhr@) hx)h hpx(h)/x(x(hh xx+j}~ii@)i@)H)Z@)Z 1++x,$@)dx*3x)x+ ~)```x*W ii~X~Z)xUxxix ~)```x*W ~X)xXxxjx ~pH `a@)bH)@) &)"0bp()¢) x)Ȣ )  ")"(x+++x,$@)x*3x)x+x*WxXxZ xix ~)``*`))a | 2 x*#bp(** x* *  cH*#@*# xxxz{hh | ~qH!` 5~`x~fxx`x7``` | ~pH ``xxx`xx |+jzii@*i+jx*x*W x,x)@*x`(x~X~Z*xUxxix~X*xXxxjx*@*qH! * x+x*x*WxXxZxix ~~)``  *`@*ᡌax* xxxzhh | ~pH `@* @`xxx`x`` |~p@+x+x+f @+fx@@+fx@+%{?+,@+M+5@+bx1xx1x+f@@+Mx+F?+b~Zyz +Vyyzzx1xgx0^xxgxxjxx+xixx+xixh#x+i ih@+hxix x+  x+ x+  x+  x+ xx~Z|~?;;6 y@+x```88y@@+ϡx```|xxxxzx`x| 1 )2xxxx}~x`x|~ xy 5F (@, !,  x, !,  d$@," #p,"x,|~ 5F"2H,8@,< !,v   2x,L(@,D !,  x,J !,  d"@,\H,\ #p,Yx,L|d,expx x전@,s$,s !x,t$|02BDTVfhxz  2BRbrfvxz|~"2BRTdtvxz|~xF| 6|yzxЀ,?|~ y 5@ !y,,,,,,,,,xxKxH,xKxH,h@hxX@xZx0,,h ,xx,x | ~h6` -.a@-. @- 2@-!x-% x-' ?x-' !` `` |xjxxixxXxxUxxxxxxxxxxxxxpxFx~x0-uxx x전!@-uxx |xx |x0@-|-x|xx x전!@--x~xx |p@- ~-`/hxk-x,h hxX?hh/h+xKx  @ x전@  x+p ~h6 ` HpJ`pN`pR | b G  0 8~*89(œèd;0(â0 (GajV:(✠d)0 0(ᜠ( dgo;p#vwxn> (+dgo;p#vw> i( D! ܢr<no00 Ht.?a22!ℨhe*#`B`*!0 ׈"(H0(0(= 0 &:  ~*8~ " I.prr p@.x.p |p/ q.x/x.p @/ p/p.p@/.px/ @/ x1k/@.x/Vp |d$@/0,p 9/5'hh 0h)!@/08'/pu@/0 9/2x/| ~ " y5 qp pp q p pp Ix | I/Vp/pqp/^0@/k0/^p/p /q //Vx/hppp/pqH/xp I|~~~~ "qx/ |r!qp /ꡄ / y/////////xp/ Ix/x1k/x|p/x/x1k/x|px/Vx,h@/h|xxx0Prqp (x@0xx03x0P',X`c ""c!$@0)0) +`x0+`/2=,holkpx/V|8'0D`@0M ` 9/2Q@0Lp| Q|P9'0] 9/8`d0]-`|~ ~ " h `hklW/2~ h@@0y~ yxX@@00pp0p@0x$0x0,X'``~p`p !0Ƞ@0Ȧ0ppvpx`p`pb $pb#pvp+`x08x0x1k0 |~ ~ " pp0p |~ ~ "  I0pp0p@1x~ h@@1h$@1 P 9/5-`x1k1 |~~~ ~ " ~ h@@10 I1h$U@1h-p.` 9/5'hh "hH1UQ1Gx8'1;pu `@1h 9/2x1:" i $"i#1dx q x0 |p@1'!p!p!p!p~ yxX@@11vpx08|~~ ~ " I1 q1h$@1x.x1q1x/x1pq1x/p1p1p I |~~~~ ~ "  I1ʭ 1p h&ppp@1Spp1 Ip |~~ ~ "  I1h `hklW/2~pp2,X'``p`pppvp 1 2,qp 2, H29x/ꤠklp Ip | 2Q2L|~ @2w2wH2j2k2_x2o#2_~2 |~2x2s2 `x x"2x$x" i5@h@2@2h0 @2!@2 @3o a6 `4@2`62`@2xp2x2x2x2x2 |x<x>2x@x>xH@2ӀxJ2x|x4x62x8x6 xD2 xF> @ e@2` @2`"@3(`,@x2|x(x*3'x,x*x03 x26#@3' "@3 3'# x| i5@h@32h<@3o``?````` Bgoxh@3Jhhh h3Txh`/`+,hx i5@ hyD3ji hx | 5O!d ixk`hX?``H``/`+h0@@3hK hH@3p3x3hK hH@3p3x3 p3x3hh hF 5h xLxJ | y5x4x3x3x3x3xGxK|  5F"2@3  "<@3 {*{.| 0 5F"2@3 9"<@3 '{6{:|  5F"<@4  {>{B| / 5F"2@4 9q"<@4 &&{"{&|$( Am01.01mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeoutU U3#f#UfD"D"3"####$$$""3""""3DDqlogicpti<0>qlogicpti: mbox_command loop timeout #1 <0>qlogicpti: mbox_command loop timeout #2 <0>qlogicpti: mbox_command loop timeout #3 <0>qlogicpti: mbox_command loop timeout #4 <0>qlogicpti: reset_hardware loop timeout <0>qlogicpti%d: Cannot execute ISP firmware. <0>qlogicpti%d: Cannot set initiator SCSI ID. <0>qlogicpti%d: Cannot init response queue. <0>qlogicpti%d: Cannot init request queue. <0>qlogicpti%d: Aieee, firmware checksum failed!<0>qlogicpti%d: Cannot reset the ISP.<0>qlogicpti%d: Cannot stop firmware for reload. qlogicpti%d: Firmware dload failed, I'm bolixed! <0>qlogicpti%d: New firmware csum failure! <0>qlogicpti%d: AboutFirmware cmd fails. <0>qlogicpti%d: could not set clock rate. qlogicpti%d: Fuse returned to normal state. qlogicpti%d: termpwr back to normal state. qlogicpti%d: Fuse is open! qlogicpti%d: termpwr failure qlogicpti%d: You have a single ended device on a differential bus! Please fix! ptispPTI,ptispQLGC,ispSUNW,ispqpti%d: Adapter reports no interrupt, skipping over this card.Cannot register PTI Qlogic ISP SCSI hostNo qpti in hostdatanamePTI Qlogic/ISP RegistersPTI Qlogic/ISP registers unmappablePTI Qlogic/ISP Status RegPTI Qlogic/ISP status reg unmappablePTI Qlogic/ISP SCSICannot acquire PTI Qlogic/ISP irq line qpti%d: IRQ %s initiator-idscsi-initiator-idSCSI ID %d burst-sizesclock-frequencyPTISP Response QueuePTISP Request QueueSBUS Qlogic/ISP firmware load failedPTI Qlogic/ISP tmon verification failedPTI Qlogic/ISP cannot be reset(Firmware v%d.%d.%d)isp-fcode(Firmware %s)differential [%s Wide, using %s interface] UltraFastsingle endedQPTI: Total of %d PTI Qlogic/ISP hosts found, %d actually in use. PTI Qlogic,ISP SBUS SCSI irq %s regs at %08lx PROM node %x<0>qlogicpti: Unexpected request queue overflow <0>qlogicpti%d: request queue overflow <0>qpti%d: unknown completion status 0x%04x <4>qlogicpti : Aborting cmd for tgt[%d] lun[%d] <0>qlogicpti : scsi abort failure: %x <4>qlogicpti : Resetting SCSI bus! <0>qlogicisp : scsi bus reset failure: %x kernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4"|!8  ,"H24T  =khBkHk Pu*Yucu=v'lx  }T H4*H8D>UnT d,d`hHL  7PH2aH2yC P?Xr   <XiDx\/I Y!iH|dy"L"`qlogicpti.cgcc2_compiled.qptis_runningproc_scsi_qlogicptiqlogicpti_mbox_commandqlogicpti_reset_hardwareqlogicpti_load_firmwareqlogicpti_verify_tmonqptichaindo_qlogicpti_intr_handler_sun4mdo_qlogicpti_intr_handlerbuf.538ourdoneqlogicpti_return_status*ABS*.div.urem.udiv__module_kernel_version__module_using_checksumssbus_risc_code01sbus_risc_code_length01mbox_paramprintk_Rdd132261udelay_Ra39b4cf2qlogicpti_detectSBus_chain_R359591d7strcmp_Re2d5255ascsi_register_Rbfd2fff1panic_R01075bf0prom_getstring_Rbf7c51d9prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169esparc_cpu_model_Rb1a8ddf9request_irq_Rb9ba6802___f___irq_itoaprom_getintdefault_R858c90dc__bzero_Rdd42e263_sparc_dvma_malloc_Rac4503aaprom_getbool_R77b288bcqlogicpti_releasefree_irq_Rf20dabd8sun4c_unmapioaddr_R064d976bsrmmu_unmapioaddr_R6e86608eromvec_R8b808848qlogicpti_infosprintf_R1d26aa98qlogicpti_queuecommand_slowqlogicpti_queuecommandjiffies_R0da02d67__memcpy_Rbfaaaa73___f_mmu_get_scsi_sgl___f_mmu_get_scsi_onememcpy___f_mmu_release_scsi_sgl___f_mmu_release_scsi_oneqlogicpti_abortqlogicpti_resetdriver_templateinit_module__this_modulescsi_register_module_Rfa20b7b0scsi_unregister_module_Rf741008fcleanup_module  d h l t   4!L HP T Hp! x  x!     4  44t8l<d@\DTHL!D!` d h , 8  8 8 h h $ (     0 8 `!   !  (  (  `  ` $!         H  L  P   (    ( 8 X @  D X `  h  l  |           H8  H8 # #  d  d   $  ($ 8 ( < ( @$ P 8 T 8 X$ h H p$ t H  X  X  %   &     &    d  d 8  0 dD L'X 8\$( ) &  0 0) P& P8 d\ dh* * *  x     x+     $,( 0 4 < D H-X l t x-  -   --8 <-Lp.x  |  / 8 8/ P& P x& x  &    $ , 0 <'P T X d0h   ( ( 0 0  8 8  H H  H4 H4@* H2P* T* d3p 8x |4 8  5 5  8 8$* 3 4  5 5 ( 0 4 8,< P7 ` `H d d d 9 ,9 L9   .   4.: : : : : ,;P<|   =` xd xx\|xxDLTxxxxxxxxdxxxxx\ddddddDd 0h 0p  d d>4?L@ d > L? d@  `  ` !P !d !l !p ! ! ! ! ! ! "C "E " C "$E "0F"LG"dC "hC "lGH<H"H1H6H8HAHBELF984(㿐  *`$& `#+`  6?,*  +`   +  2`2 @@ (?V 2 ڰ? `$@Ӱ? 'Ho`  "'$ ` ! 2L  2,  2>@ ! 2L  2, !H/` P ` 2J"`L  M`$@? 'H`  "'$  !L `   >@!L  2!H/`  ` 2"`  ;  ,  `n, $ `?@ % &`X2, "? `$` ` @ `$ "` ` ` @ ` "` 㿘`X "9?  ?3?@  @ " 2&`X,  `$` ` @ `$ "  ` ` @ ` "` , @ ! hX` ?` ?@ 2D?`@ ? Ld #  `@  @ؐ@$ 2K $$@b? 'ȒȕH`` "`'$`    >@!@ "!H/`  ` 2"`   $#$  @ $ $`$$   , ?   @F㿀 X ? @ 2D?`@ ? )?@ ` ?ߒ@ $`$$` @M$ -$  -$ `2   @ `0 & `$&  ܀ @?0d@˔@  @ 0ZHo` $ 2@ ` 2$@ @˔ =? 4 $ , , C@  *` /Ho`` 4 ~`4 `$ M$ 2$ `$ ` $ $`4` 4`$`  #\ @聍`㿘`X` `b?@ [?"z"DH"q"D$""K`  ""xD4`$""4""D'`$"p"D `$"t"?D "r/"s?`$ "v"D "y"[D`$""rD"}"`( "{"|"D`$"Dj" "{""cD`$#" ##*`$`    ? 6$` ? `    ?  ,d p2` `,d`  ?Ld$0`  ?  `2$ $  $  $ K 0$ S`l `$R ^4  Q4  $ $ g D`    ? W@ ,d`  ? J`(` ?J`E "?`(``2J`E?$9 `  J`E "``2J`ED`  '?$0#`  ?$0`$  ?D`    ? ` @~ ?@`@, D`  `$0`  ? $0  ݰ?D`    ? ̀ @  2  ,", ", ?,`    ? @ ,d`  ?Ld$0`    ? ,d`  ?Ld$0~`    ? p`& ,dD`   $0_`  Z?` $`2  $0PO?@ 2DH?`    ? 97 `$  2?@-`    ?  *`:  ,@h   @  `$   ?@$ 㿘X ` ` # ``"`(@ `(`"Ld 2`J`E " A`` Ld    $ 㿘`X ?@, 4 㿘  * ' 6$ * * ` ` `(     2  @`2`( 2  ~  #@ @04  4  $  @6$  , E$ 4 @ !: `  *` €   ̀  >2$ ,$ , $ ,!2  ̒c  2  0P2` d"P! 0: * * $ 0L`$ 02   2 0 @ 0!* *` $ 0!* * @$ 0  #@ @Ld`  @, `( @< `  `@ !`, @ 㿘 ` @ 07@ `  @  @ @  %` "  2 @@@    `㿘` @ 2@ 0 @ 0   @   $2`3` `@  N N @ 2  @  ` )'%@2  2  @   @ N$N$ $@N$N$N$@N$ (@ "2#ND   @`~(@NE`    (@  2@ 2ND  㿘N 0` *` €   2  @ ` ` *` 㿘! `1 21`@   @    & 1    3* @*  &   3, @  㿘   ` `$ ?*#`$       &"@ "" ***` "  n!"2 `  *`㿘 G  A 27 @ ")"H`@``( " @ " @F  2@`2`(@  $ $?& $  ,,`Ė㿘 `"` @ 㿘` @`@ #` " ,  3*@ @*`$`, 㿘@ d㿘  ` @{  @@; @& @ϐ0@ 㿘  @N D @R@@㿈``?" a > @   '@ޖ k@2 & & . 6& a '@˖ "Y?  '#@  .  E& 쀢" 4`? @6   '耢- +&   4'' '@ $$`$@`` $'耤 ܀&  6 ?㿘`#!   @ `@& @` @㿘   `@  @?$@$ `   "6  @N 6 & & 6㿘`#!   @``@& @` @㿘 o$3 >`ho *`D `  &   ) `@@42" $3@"@3 3  # #  +  # #@``0 2` #  # +  #    ` ` " 0 $ ( 00  " $*`D (  J E2  " * E ( 2 * E 2J E㿘`(  `0@ H$ $`(Ld    ``` H`4 @ H$   2&  & & `" (@2   (" "   @"@ 㿘    0, $  @ & @$p .$& .$` p2  .$.$.$&  $ @ 2"@  " 㿘   ? . ; `(``J`E `  Ӕ ``2J`E`#  @ 2@@&  "@ " `@"@ @` u`&`J$@ $ .d (  HD 2HD 㿘`    &``@ `@ !! `@2y&x>`!> `n .` `i#%5`@#`@@ ` !! `@2&`"C$`@6`@: `ֱ.` :45 .`@  @> ` `@ !! `@2& @㿘'H &H I?Jd+ 0>/  HG 25&H?H %`   HH2 H+   $  H H  H& 2&㿘&`` <  @ "`@ 0   *  `@ 0@ 㿘 `2 2 ~2 " " " N@01.01Version: 2.1.41 (20020409)mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... genericsg$sg_open: inode maj=%d, min=%d sdp maj=%d, min=%d sg_command_donesg_debug_all: sg_dev_arr NULL, death is imminent sg_debug_all: sfp (file descriptor pointer) NULL sg_debug_all: dev_max=%d, %s scsi_dma_free_sectors=%u, sg_pool_secs_aval=%d sg_big_buff=%d ***** Invoking device follows ***** sg_debug: sfp (file descriptor pointer) NULL sg_debug: sdp pointer (to device) NULL sg_debug: device detached ?? >>> device=%d (sg%d), sg_debug: device=%d (sg%d), scsi%d chan=%d id=%d lun=%d em=%d sg_tablesize=%d, excl=%d, sgdebug=%d, merge_fd=%d *** Following data belongs to invoking FD *** >> Following FD has NULL parent pointer ??? FD(%d): timeout=%d, bufflen=%d, use_sg=%d low_dma=%d, cmd_q=%d, s_sc_len=%d, f_packid=%d urun_flag=%d, next_cmd_len=%d, closed=%d No requests active reserved buff >> written: pack_id=%d, bufflen=%d, use_sg=%d %s: pack_id=%d, bufflen=%d, use_sg=%d to_readprior>> request has NULL parent pointer ??? Detected scsi generic sg%d at scsi%d, channel %d, id %d, lun %d Unable to get major %d for generic SCSI device sg_init: no space for sg_dev_arr scsi_devices corrupt (sg)sg_low_malloc: bad mem_src=%d, rqSz=%df sg_low_free: bad mem_src=%d, buff=0x%p, rqSz=%df kernel_version=2.2.25using_checksums=1???????????????????????????????GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo.fixup.rela.fixup__ex_table.rela__ex_table.comment4/ !HD ,/T2W =/B/H/2P6 *Y6L$`Wt  l7pwY<  8h=8;`9 B@$3 FPhX8bHl@4v<8(8P(0h&xX `&  ' &86 x ?*<M#\$Pm\vT$/@<| %@!#$T &\,P).41*T|?. K Qi, +?Uq )0F\|t(d?[tsg.cgcc2_compiled.sg_version_strsg_version_numsg_pool_secs_availsg_detectsg_initsg_finishsg_attachsg_detachsg_dev_arrsize_sg_headersg_opensg_add_sfpsg_releasesg_fasyncsg_remove_sfpsg_readsg_get_rq_marksg_finish_rem_reqsg_writesg_add_requestsg_remove_requestsg_start_reqsg_command_donesg_ioctlsg_res_in_usesg_remove_scatsg_build_reservesg_debugsg_debug_allsg_pollmin_sb_len.412sg_clr_scpntsg_fopssg_registered.421sg_shorten_timeoutsg_link_reservesg_build_scatsg_write_xfersg_read_xfersg_unlink_reservesg_mallocsg_freesg_low_mallocsg_low_free*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsg_big_buffsg_templateprintk_Rdd132261scsi_block_when_processing_errors_R3532f934schedule_R01000e51___atomic_add___atomic_sub__wake_up_R8a4864fastack_top_Ra6cab6a7__copy_user_R9c5239ebscsi_command_size_R9b05ea5cscsi_allocate_device_R5f3a32c7scsi_do_cmd_R49daf96bscsi_ioctl_send_command_Rcc604eb3scsi_ioctl_Rf4803724__pollwait_Refab907ffasync_helper_R72e2f165scsi_release_command_Rcf051e81memcpyprint_sense_R461d8f29kill_fasync_Rdf2e9283scsi_dma_free_sectors_Re930b3cbregister_chrdev_R0a7c618ascsi_init_malloc_R7a0e9b85panic_R01075bf0scsi_sleep_R35962bf8init_module__this_modulescsi_register_module_Rfa20b7b0cleanup_modulescsi_unregister_module_Rf741008funregister_chrdev_Rc192d491scsi_init_free_R6ac8ba0b__bzero_Rdd42e263kmalloc_R93d4cfe6scsi_malloc_R1cce3f92__get_free_pages_R19d9ac40scsi_free_R475dddfakfree_R037a0cbafree_pages_Rb5136506 < <(? ,? |  @ABBC? CD? ? DEXAtF xF   F GB4GAF F ,GxH |H DI G < 8 P 8 TJ A dF F F DF HF F F F F F F F F pF tF F F F F TF XF xF |F F F LF PF F F F F F F (F ,F |F F   F F AF F `KpF LpMN< <@ <\? `? EOHPd |h ||  QEO,EDRX <\ <l (p@t (  `@ ` ?  ?  @ S  S   @ > >  @  (@, l 0p@t 0 `@ ` @     @  @  @0S 4S 8 < @ D@H \ ` d t @| @ x x@ @ @ @ @@ @  `  `$ x( x,@@ L@` l p x |  @ @   LL $$LL$ L$? , 0? 4 D@L? P? l? p?  | | <  @  @T X X@ | | < <? U <0 4@8 L? P? X <l <? ? ?  V ? D <H <T? X?  Wx? |Y Y ? Z? ? \  ] < <^ < W"(_#tG#G$G$G&_'D_(d_(> (> *`*_+$ +(S +0 +@S +Ta+_+ + + ,b,4b,_, ,@.\c.d .h .t .d. .e.@. (,h084H8@D0HP$T x\d8lD  d$ ,4<(D4L@T`\ldxlx8tl$H$<    \ $ $,(,40 4<8,<D@8DLHXLTPdT\Xp\d`xdlhltp0tx|ld@ELFjT4( 㿘!  R ?:  . ̢ ` `p p' ` "    `p p     @ @ :  `@ `p p?`, "* * ܐ " @ ` "  `` 㿘 3( (`(` ̄2 ̀"  Ѕ( ч(.  ҄ ΄ 4" ?#`  $จ@w㿐H/` 2 A` @  2  A` @ ` > * @.`&` &`&``< `,  6 ~` .@  46 ~` (?#` & & . C@6 #\ @ \    @&`"` 㿘   @ `$ "  @`$ "@ @ "@ $ x*  ` & $ Ѐ` @ $`$㿀  /耦`//// /// , #\/  [ ?@ ` `  ?`   @  ` 㿀 ` "  `  `#@]?[? Ѐ`2 U Q `@?@ ($@@@  А //@ ,< < //#\/  2 x)? *   `c  2 . "? @ `?? $`` & $` . " @㿘 + *`" *  * `T 6 N? K x*  `t@Ѐ 2: ``@?@$`$"` `   2` -`  %` %` @    `  `  %` -`%`㿘 + `ʀ` ?V& ``̀"` ``ɀ  * ` `Ѐ@"  `Д@@ Ғ`  V  @ ? p *5   `2   ,%@-*`@*`  @ ư? `Ȁ` ?,` *2   ,`@` $`` @ ` $  #  ` ` @ ` "``t*  $`t*  4@`'  `"  .  `2  " `  `  . `4 @/ 4$` @%@,`ȕ**  ` $`` @  ` $  #  `` @ ` }"` .  $`` *`"``" `` `n2 ,`,`2"<"`  ,6`& .  <. @    # ` , & .`&  ` 'ܐ`?,`,`Đ`*??,`$`ܐ@ /`0 #\  C  2. `%@*,`$`**  ` $`` @  ` $  #  ` ` @ ` "`)#3 b 2>`  @ /`0#\   ̐# b   ` T*@"T `$`|$`x$` ``````**@**##@ ` `   ` `"" ``J 1`#  b    ؀ :2   ,`@?$`,`,`,`$`$`$`|Z$`x *?@  /`, #\  !`? ̀ ?` ( ` `*  `*  $` (  *`@$`$`$`ؐ@   //`, #\ o ` `$`# Z,` ( ` (` `2  ,` ( `,` ( *  *`  $`` @$<` `"@a 26``А @@`%@*@,`$`**  ` $`` @  ` $  #  ` ` @ ` "`? ( 2`,`@`Ѐ`$``@ $  "` `"`"` `ǀ 6ܒ * 2  /,``%@*,`$`**  ` $`` @  ` $  #  ` ` @ ` "`u? ` '` #@  $`x`%@*,`$`*`@*`   `$ `<` @.  $`|$`J ,`,`,`` 25 `$# 6. `$`%@*,`$`**  ` $`` @  ` $  #  `` @ ` "` @   `$ @ 㿀  ` `* `,"* `* `x`t*``*  @  4@@ ` T`& ` ?2 ` ` " @ s 6 " `π 2P `` T`J@  / `   /`, #\  "q `` `! ̒c   ̀  ђ@ Ґ  @  @ "N?M `@   $ $  ` [  ;,  `π 28 ``x *  `@ @ "  `  #  2 `ϐ9 2 ,  2 .  "  2 `  $  , $  `π  @  "㿘 +% *`" *  *  ΀ 2  @   ", @  *@,  ` $`` @ ` $  #   ` ` @ ` "` x  + ,`"@*`@*` @ 2? ŀ  ??t*  4 `?2  T`?Ѐ`" @  @?  "x@ N x Ƒ*  `ް?Ѐ 2 `  "@  2 Ͱ?  " ΀ 2  @` 2  ,    +,"* 2& 2"H  `" ˀ 2``?@ِ   @ ? `" `  `#@  ,   m?k?Ѐ #!D @ @    X?@?D @  @    F?  2 @   "@  /Ж  @ /, `   @ " @@  'Ѐ2 @@< < ///, #\   ? `Z ̐ K?Ѐ ̀  Б*  ѓ*` * Ґ     ΐ     @@! $@  ;  B= & Ѐ@    @$ ,??$,$?@"` ,0<` B=&`@Ѐ @`$" ,Ѐ   `2T`2K ,@   '䀥 f@b B=`"  `" @O` ; ( @Ѐ@/  $ @@$  В@ ,@ < < ///,#\+  ? @ 2,  ,' 4,㿀 `+ ` ?- "* `* `x*```t@ *   4`@߰ @  /`Ѐ@ /`Ѐ 2  `  ` @4@@<</// `, #\Ś &?`" ,` `""  `̐ p p  `ΐ   Ϙ+`ΐ "r  `̀   ` `Б*  `ѓ*` * `Ґ  `Ѐ`  " 3` 6L`  $@ & @  $ @ X?`@$`"  $ @  ":E?  @    ,`Ѐ``'" "&    ,`Ѐ``&@"`@`&@"`?` $ `ΐ  2? ,? ` `Ѐ`2``@@$㿐 '` + ?* "@*`@*` @`  2? `ŀ   ??`t*  4 @`@? ` "`@; `Ѐ 2 ``  `"@  2 ?  2 ``Ѐ`" `@ " `հ? "`x `΀ 2 `x @H 2`x ,``x*  @` @ߔ  ,@` `2D  ``? , D7@ @    ?D@ @    ?@D?    @    u?D?   @    e?  ,; ` `&7 6` O@, `& 8 @   ' < @'6  >  B= @`Ѐ  "` @'        ,` $` $   , ",㿘 t ``@`    !@  #`  @ ` @㿘 + ,`"* *  t*``4    4@  "<@ * 6`6`6` `  `, , , , 6`6`6`6`6`  `    . . !. . . K`1 6` . 6` 6` . # `5,  5 `?` , `2, `2, `2, `2. ` 2. !`@2. a2. b2.  J 1`d2. h2. #@2, d .`    @ s?& (. #@2?$ T $  <.@   * *@ *`@ *`& 03 *@ *`@ *`& , ? 2>??c@ @ `?4   4   2 ` . $ . $   `,  @    ,   @ 㿀 ŀ 2R?@  ,     ////#\   2 9?` 2`( ` @-`"  *`@     ///( * (* (  ?(#\ ,  `@.  @?㿀+ -"* * @ ŀ   ` ??x*`` 0   @ ` " !(` `k `F`X v?`k`" o?`  ``ư?0d` ?` + ^?`i ``Ԁ` " Q?`̀`Q J?` `a` ??`u#@`@?06  66////뀥 / 2     ;`;`////뀥 /%?66////逥`/@  ;`;`////쀥`/ժ%@ 66//// /  ;`;`/////쀦լ ??Ѡ  ƀ 2? `/ /66///쀥 ,``? /=  `/ /쀦`  # #/0'  //"  ?      //   ? //0 * w //s / o/ Ā   ``x?#@`@ ? Ԁ ؀   @\?/ %` / / @(`  (*`*  (`*`  (*`,#@`@6 (*`  (*`#@`@2?`. ,;` (;`*  (*` (* , #\ ך 2? 2a @ $$ ,`#@,΀`",΀` `  ` A ``@`?.`$@ $ `"`@ "`6 ,`,",̀` `  , ,2,```, *2   ,ϒ**@` $x @ ` ` `` ,$ π` Б*  ѓ*` * Ґ   c  ` ̀  `   k$ ``  ` % $ $ ^$`  `  $ $ Q$` ΀  @   $  ,C$%@ ?=$` ΀ ? ?$ 2$ @ ?+$? $,$$ `@ @ ΐ  2 % 2 ΀ 2  ,%@ i" , ΐ  ` , ,@ 㿀 + *`" *  *  ŀ`d?@  J1  4  / /쀦/ # 2 , / , #\    2 @? 2 & J1  ( `"J1&&@,?   ( @ `*  `*  &@&(  *  *`  *  &@ `( & `( @  ` $ $ @ x + *`" *  *  ŀ`? x *  0`2{?ꀦ v?i   ,`,`$`@  J1   + 6`6`/////6`6`6`////퀦/ # 2 x / x/ / #\    ?2?$`$` ,` `   %? J 1` @" '$ x . $ x ` ",```,`, ,`` $`$` @㿐   4?㿘 + *`" *  * x|@ *   `2 " |  = 㿀 + *`" *  *  ŀ`2%?@     //// , #\  l   ?@ ` ?`( `㿀 +ɢ  B,`"* `*  ``( * >`** *  ? `? 0**** * **@    /// 0 #\ #  ?@ `  @? 㿀 + ,"* * @`t`x**`4``@ @@ K6 mC2A @6 2.?D` @    2?W 2 @`@ !! `2 @ @? 2 `W <@"?`T N  WW    ?  W '  % W`  ` " `|`x@ ?* 2   ` ` `` ` ` `` `   )W * 2   *`:     2?T *@"T `΀    ؔ  @,`W      !`-` ` `΀   ` *`<O _*`:  ! " ` 7`4`4Q?`@ | $`F?`@A?$`|> $  `    ` ``**@*`  $`$`|$`x% % 2 ``|| ` db,`  W `ŀ `  VW`  A @ ?ݔ & `  m 5 m m m6 2ְ?`? `͐*`*` "` "` "`Ѐ"`  ` @`  2 ``  `@? "$ `" `ǀ``  " ` 2 `x    " ``x"   `` `  " `̀  `  `2 ``   " `ŀ  `@  " `ŀ 2 `  "  `  " ` 2` ` " ``Ѐ 2` `̀ "D`@  " D` `@    /?` +" 2%`2"`6 ? m'D @    ɰ?0@㿘/ * `@@ @㿘o  * `@@㿘/  @   & <0& 8  *4 s`& -@ # @ 4`@2 : @ :`@ @  o & 44`@: o, 4@ : <@ #,`,`"@8,` 8 5x, %%@  $"@2  :  4`@:   <,   v@ ,  o   8"  <"@ ̀  4. & (.6 .& 6 0& *` `" %@  㿘@P` ,4 .$`A   5 .@&@ ,2 @.+*,` 4 "@ &@$@2  : `6: @@  8"  <"@  . 6 .& `@؀ 㿘 0 .@6 0 <,`  4,` `   ." @ &  06 .㿘`.  @``<,`@* `@ " @@ 6?*'`<,` "@ `4   D`  @ ```.&`@ &ۖ  ? @?㿘 .  @  <,`@* `@ " @@ 8?,),` < "@  D`@   4 @ @ `  " .@& & @@ &ٖ  ? @?㿘` 2@  2!  :`@  `@  `@   `@    㿘L 0  А   ` `   $?$ $   `  `  &*@ "  *  * @ "`L 1  q r  "@ 3@+`+`+` `pW2  +`"L 1W`4  +`%+`+`+`+`+` +`!+`# 㐔 #`(+`$#`,#`0#`x#`|#`  ?`<`@`:`8`7`6`9`5`4**@*+((+&0@`  `  ?``````**@*+  `  +`4+`ʒ#`t+`+` `  *`㿘L 0  &  `*   2 `   @ 0 㿘) ` ! +`@  @    $ +`     `,  ,  `  @  `*`" *  *    %`@ `@ f   *"@ *`@ @*`   #  $ В $  @  `  *  "`@ `@  *"@ *`@ `Ǔ*`0)@ &    4 4  " #   2   @`     @2   $" $  ?**`@㿘 * " `*` "  4  " `" ` @  `"` @   㿘1  @`@ `?`@"  *"@ *`@ ,*`- "4 / ) `-   . @+`,`<4 `  ` .@ `@  &` *` *`@ @酋@@֋@@ދ@x 01.01kernel_version=2.2.25using_checksums=1parm_buffer_kbs=iparm_desc_buffer_kbs=Default driver buffer size (KB; 32)parm_write_threshold_kbs=iparm_desc_write_threshold_kbs=Asynchronous write threshold (KB; 30)parm_max_buffers=iparm_desc_max_buffers=Maximum number of buffer allocated at initialisation (4)parm_max_sg_segs=iparm_desc_max_sg_segs=Maximum number of scatter/gather segments to use (32)DMA timeoutmapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... tapest<4>st%d: Error with sense data: <4>st%d: Error %x (sugg. bt 0x%x, driver bt 0x%x, host bt 0x%x). <3>st%d: Can't get SCSI request. <4>st: write_behind_check: something left in buffer! <3>st%d: Stepping over filemark %s failed. forwardbackward<3>st%d: Error on flush. <4>st%d: Can't set default block size to %d bytes and density %x. <4>st%d: Can't allocate tape buffer. <5>st%d: Blocksize %d too large for buffer. <4>st%d: Can't set default drive buffering to %d. <3>st%d: Error on write filemark. <4>st%d: Write not multiple of tape block size. <4>st%d: Can't set default compression. <5>st%d: Incorrect block size. <6>st%d: Mode %d options: buffer writes: %d, async writes: %d, read ahead: %d <6>st%d: can bsr: %d, two FMs: %d, fast mteom: %d, auto lock: %d, <6>st%d: defs for wr: %d, no block limits: %d, partitions: %d, s2 log: %d <6>st%d: sysv: %d <4>st%d: Write threshold %d too small or too large. <6>st%d: Write threshold set to %d bytes. <6>st%d: Default block size disabled. <6>st%d: Default block size set to %d bytes. <6>st%d: Long timeout set to %d seconds. <6>st%d: Normal timeout set to %d seconds. <6>st%d: Density default disabled. <6>st%d: Density default set to %x <6>st%d: Drive buffer default disabled. <6>st%d: Drive buffer default set to %x <6>st%d: Compression default disabled. <6>st%d: Compression default set to %x <4>st%d: Illegal block size. <6>st%d: Partitioning of tape failed. <4>st%d: MTSETDRVBUFFER only allowed for root. <5>st%d: Could not relock door after bus reset. <5>st: Can't allocate new tape buffer (nbr %d). <5>st: failed to enlarge buffer to %d bytes. <4>st: append_to_buffer offset overflow. <4>st: append_to_buffer overflow (left %d). <4>st: from_buffer offset overflow. <4>st: from_buffer overflow (left %d). OnStreamSC-DI-DP-USBscsi_devices corrupt (st)<4>Detected scsi tape st%d at scsi%d, channel %d, id %d, lun %d <3>Unable to get major %d for SCSI tapes <6>st: Only %d tapes accessible. <3>Unable to allocate descriptors for SCSI tapes. <3>Unable to allocate tape buffer pointers. <6>No tape buffers allocated at initialization. <6>Number of tape buffers adjusted. <6>st: bufsize %d, wrt %d, max buffers %d, s/g segs %d. <6>st: Unloaded. GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4\!y<  ,\2H  =]XB]XH]pQ_0 Yi=ibl\ > rP 4@ L[n} $VTtVSY|xhhdtt"0/0 <M \kvL,ND?h@(0?XPl`/8\PtD" & !QL-*<+$K;DX=Xe@0tA,B, HKtpKHST<  0"H9@bDOXpL(,.<Kj,3HcuY Z\/st.cgcc2_compiled.buffer_kbswrite_threshold_kbsmax_buffersmax_sg_segsst_buffer_sizest_write_thresholdst_max_buffersst_max_sg_segsscsi_tapesmodes_definedst_detectst_initst_attachst_detachst_chk_resultst_sleep_donest_do_scsiwrite_behind_checkcross_eofflush_write_bufferflush_bufferst_int_ioctlset_mode_densblkscsi_tape_openst_nbr_buffersst_buffersnew_tape_bufferenlarge_bufferfind_partitionscsi_tape_flushupdate_partitionscsi_tape_closenormalize_bufferst_writest_compressionappend_to_bufferread_tapest_readfrom_bufferst_log_optionsst_set_optionsget_locationset_locationnbr_partitionspartition_tapest_ioctlst_mallocst_freest_supportedst_fopsst_registered*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_buffer_kbs__module_parm_desc_buffer_kbs__module_parm_write_threshold_kbs__module_parm_desc_write_threshold_kbs__module_parm_max_buffers__module_parm_desc_max_buffers__module_parm_max_sg_segs__module_parm_desc_max_sg_segsst_templateprintk_Rdd132261print_sense_R461d8f29___atomic_add__up_R4506727escsi_allocate_device_R5f3a32c7scsi_do_cmd_R49daf96b___atomic_sub__down_R7356f38escsi_release_command_Rcf051e81.umul__bzero_Rdd42e263scsi_block_when_processing_errors_R3532f934stack_top_Ra6cab6a7__copy_user_R9c5239ebmemcpyscsi_ioctl_Rf4803724__get_free_pages_R19d9ac40kmalloc_R93d4cfe6free_pages_Rb5136506kfree_R037a0cbamemcmppanic_R01075bf0register_chrdev_R0a7c618aunregister_chrdev_Rc192d491init_module__this_modulescsi_register_module_Rfa20b7b0cleanup_modulescsi_unregister_module_Rf741008f  L  M  L   0 t  HNP @ @L` ht h|QRRT4 h8L< h@T4 @ D L P T \L@UV V8@  LT< T @@ \  h  lL t $ x $ K K   W  D pN x N       < L `  P  P L  R  K R 8  <  0V  R  K RHVTVtVT x\ x`LhT R K R4TP@ R K 4R R X R K R  LX ` $VT  LT` x  R  K $K @Rl  W8AH L PL @ @L $ $X X YX Y$UHVU@UUp@T T T!4@!<U!|@!T"D "L "V#@#U$\T$p p$t p$xL$U%xU%@&  &< &HW'4A(X (X (,Y(PX (hY(X (Y(X (Y)hT)T*T* * *L* * *L* (* (+L+ x+ x+L+, +D +tZ+| $+ $-< -@ -L -P -T -\L-t -  - - -  - P. P. .$ .p .| . . . . . 0. 0. `. `.L/ / /(L/PV/V0lT0T0 0 1V5 5 5 5 5 5L5V74T7@:T;4T;L ;d ;V=T= =4 =V?XT? ? @8 @P @pV@TA A, AVATB B B LB4 BH BxWBX BX BYC@ CD CHLED (EH (ELLH@H@J|X JX JYKX K X K8YK`[K\K]KVL^L_L0 L4K L8K L@ L` Lt Lx L L MD Mt M MUNP Nh N N N N N `NLN `N N O$UOL OUO OLP PLP Q(X Q,X QDYQ Q QLR (RLR (R\X RdX RYR PR PRLS xS  xS`S, S0 S8`SH SL ST`Sd Sh Sp`S S S`SK SK T T T0K TDK TX T\aT` Th T T U V,K V|K VK V V VLVK VK V V V V V TW W TWbW W W LW0 W8 W< W@ WPK W @W @WLW W hWLW hW W WcWVXK X$ X@ XPVXXK XlK X X X XLX X X XcX XLX X X Y Y( Y, YP YTLYX Y|K YK Y Y Y Y Z  Z Z Z Z$ Z, Z0 Z4 Z8 Z< ZH ZL ZP Z\ Z` Zd Zh Zt Zx Z| Z Z Z 0Z Z 0Z ZLZK Ze Ze ZK ZfZK ZK ZhZ Z ZcZ [ [ [ [ [< [@ [LK [P [T [dK [l [ [ [ [ [ [ [ [ \K \ \K \ p\ L\$ p\<O\\S\|S,0@VTDVLSPY|X& \`hB,p t(xXELF(4(㿘  ` `   ` ƀ &  `B > `  ƀ  6  `B >  㿘@@  ! "` !0"`$!0 "!0"` $ "`  $  $㿘㿘`a,a(>`` 2; 3` " *4 '%@ + 2  < "   @ 0 @  @` " Ԑ 㿘@! ! &!,&!0㿘`@ C*  `@2 ` 2  @@    2`㿘v``"@@ "@@@ C* &`&`&```"`㿘  "@ ` "`^  @@ @ ?8    `B      ` `B*``(#㿘 ,` "` ` @$   2 ``B,`㿘 ,` "`  ` @@ @2 ``B,`㿘@ 㿘@ " ,㿘 D` `@`aP@mP  < *  2@ `" @@  ` @ D` @`  `㿐 66h \'$'@?z&@#@` 1@ = '*@ '@ `"| J@ [ @ Q&@`@ `"h J@ G @ =6`@ `"T J@ 3 @ )6`@ `"@ J@  @ '`@ `", J@   @ '@J`  @` 2@`" J@  @ $@` w@6 㿀' @`  ` ` @ . `! , 2t-p@  R& D!m$$ $ h @$ $ -P@ !$  $ !& & . & $& , 0!. @ #@ @  ,`Pg#\`&`(  @ U 쀢 4t@ H` `*@`" ,`  &`  , `2` @ / "&  "$ D& , 0!. @ #@@@ @%`@ @6 @6 0@ @6 @ 6  0!. @ #6  @`   `X!$ ?'''''̀'D`@ @ ? 㿘 hD!m` 6 "6 $& d& , $ & 4& <& 8& 0` & @!`6 "& d6 &-6 (,` &6 &,`("6 (; * P 2@ `+  @ 0 * !P(`& d6 "&   & 4& 8 6 $& ,㿐    `h'`D "`5`` ƀ 2 :> '``ƀ  # :> '`" ` "  ƀ   :> @ 2  㿘@@  +  ?  ?`@@J + @@ 耦 ` $L @ 1 $`"< 2 2 @`?`#p $$L  h  2@  ?$㿘  `h   D  2  " L#p"@ 2`?<  2  2   h@ 2  n   h@ 2   L` @ 㿘`D 88? h D` ` `&`P&`@@  L @C  @@` "`  =` ``@ ? 㿘h  D h@ 2`D? }?@`@ w?P!   `2 ?*    2  6 Q?*   @*@ @. * !P@ %@  $ (@  2`D  @  $ @@@?@ %$ `H $`D$  @`@$ @h@ @㿘 h  D h@  `@ !! ` 1?@`@ 2 *?? > $?* P 2@` @&`L6 (` (@. @*`P @ ```" "&`&`?㿘 h  D` ``h   "?@`@ 2 ?!8 ?쀢`@@ @&`L $`6 $ `""&`&` 㿘h  D  h @ 2`D;? 8?@`@ 2? a@ *?`$  (@  ! `D@  $ `H $`D$ `@@$ @$ $h@4$@0@?㾈 h6 `D? ( ?瀢  h @ $`@ !! `$?#b* $#`$#a?0C$#e"Q h$#c?0s0$#d?0m ?@c@_ D` W &0TD  ? E :? @ d& 8א (.$ * * $ @!   ''  @ 2`?'@`* D @@!  !  ?@@@@㿘  4  D`@ @㿘  @㿘  & `& ?`$`@`$`@ # 2`@ @ 㿘2 D  !D   ?ദ@?"!D  Ho`*@#堔+ *@ @ "`4  㾈@!` `'`' ''@ * ! @㿐 2?` ( ?  `@2  `2    " @@    2 2.  @  2`~?@  $ @u??$  "$`?$ `$ $ ` @@  $ & $   $   ? `$ @ $   "B Ho`'~'?# #堔+ *@ @ "`@Ho`!!%%%%* *@ @ # `  ? $ @㿘         2  2 ?&@  $ `$ $ @ @ # ???...autofs: dentry == NULL but inode range is directory, entry %s autofs: negative dentry on expiry queue: %s autofs,fduidgidpgrpminprotomaxprotoautofs: called with bogus options autofs: kernel does not match daemon version autofs: could not open pipe file descriptor autofs: pipe file descriptor does not contain proper ops autofs: get root dentry failed autofs: Looking for bad symlink inode %u ...autofs warning: lookup failure on positive dentry, status = %d, name = %s autofs_rmdir: odentry != dentry for entry %s autofs: Out of inode numbers -- what the heck did you do?? GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4 !+t  ,!36l$ ?!0G#R6H b#h6 s%x%'(*(:7D ?  0 4 d l kvF F `F dF |  Pz qL P_(F TixmhmLppLLpp8 <^@ P T]X \GppJ J TX `gd p xyd  U d (U< @dP xU d U d UDdH |Ug J J oc O PH `i p t e u x  _  0 D H_ L  ( _  (  X  X e J  [ L ,J  0l 8J  DT X_ \ X d[ pL |  _   l p e J  T ,P 0P HM n n } } Y Y @  D  H_ `{ l{    , 4 fK , 4_TadKuaF F LzF F tz d dkvoTKEsOOO$p0pDN\~d} h} ~ruvLK`Np\K H_ H`DKd xh_l xOO~ruv pdZt\P P P P P VTi|S~P P M b,tdP lP MDpe[ | iL~|\h0OLO`pp t  ~pI 4p p p e   <Dw p dlt     |$(dl@     ) ;<QWa,sQ4Qddlt, p4  |Q( /<F 0Z lD|P<ldQ@@T"$Q5=TatQvlL$p|$:GYm L44 X D!d7WuX`. FYhn<Xl@-DU i|Xh`dir.cgcc2_compiled.autofs_dir_readdirautofs_dir_lookupautofs_dir_operations*ABS*dirhash.cautofs_init_usageautofs_delete_usageinit.cautofs_fs_typeinode.cautofs_put_inodeautofs_delete_inodeautofs_put_superautofs_sopsautofs_read_inodeautofs_write_inodeautofs_statfsparse_optionsroot.cautofs_root_operationsautofs_root_readdirautofs_root_ioctlautofs_root_lookupautofs_root_unlinkautofs_root_symlinkautofs_root_mkdirautofs_root_rmdirtry_to_fill_dentryautofs_revalidateautofs_dentry_operationssymlink.cautofs_readlinkautofs_follow_linkwaitq.cautofs_next_wait_queueautofs_writeautofs_notify_daemonlookup_dentry_R9ebaf499___set_bitjiffies_R0da02d67autofs_hash_nukeautofs_initialize_hashinterruptible_sleep_on_R34d66e55__this_moduleautofs_hash_lookupdput_R154d7397__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7__module_using_checksumscleanup_moduleautofs_expire___atomic_subsimple_strtoul_R20000329.udiv.divinit_moduleautofs_root_inode_operationsautofs_wait_releasefput_R6db7a23bautofs_catatonic_modeunregister_filesystem_R3a9d7a75register_filesystem_R8b74f3d0printk_Rdd132261autofs_hash_deleteautofs_wait__up_R4506727e__wait_on_super_R3bc4cf62strcmp_Re2d5255a__wake_up_R8a4864faautofs_hash_enumstrtok_Ree9c1bd4memcmp__bzero_Rdd42e263__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.uremautofs_dir_inode_operations___atomic_addkfree_R037a0cbais_root_busy_Ra30e1447autofs_hash_insertstrlen_R97255bdf__down_R7356f38eiget_Rbb5d76f6d_instantiate_R15af7404autofs_read_superd_alloc_root_R57d6f53estrchr_R349cba85autofs_update_usageautofs_symlink_inode_operationsautofs_hash_dputallxtime_R3cb6ce39__memcpy_Rbfaaaa73ELF<4( 㿐 2a?  2]?  2Y?  2U?!  O?! @&!&! @@!,  !,?@` !,*?!,@ / '`!,' ! @ !$``&!&!$' @ !$&!` &!$&!, @ <8 &! @ &@㿐NJ`` N J@ ` N J@ ` @  6?@! &! @!, '! @ !$``&!&!$' @ !$&!` &!$&!, @ <8 &! @ &@㿘@ @ 㿘@㿘@ @ /usr/bin/java/usr/bin/appletviewer01.01kernel_version=2.2.25using_checksums=1.class C_O_READ added --> C_O_READ | C_O_WRITE added --> C_O_WRITE added --> C_O_TRUNC added --> C_O_CREAT added --> C_O_EXCL added C_VNONC_VREGC_VDIRC_VBLKC_VCHRC_VLNKC_VSCKC_VFFOC_VBAD????attr: type %s (%o) mode %o uid %d gid %d rdev %d fileid %d nlink %d size %d blocksize %d bytes %d gen %ld flags %ld atime sec %d nsec %d mtime sec %d nsec %d ctime sec %d nsec %d clstats called with bad opcode %d Process %d entered %s coda_readlink(%s,l. %d): kmalloced: %lx at %p. vmalloced: %lx at %p . kernel malloc returns 0 at %s:%d symlink.cresult %s kfreed: %lx at %p. vfreed: %lx at %p. coda_follow_link(%x/%ld) clstats called with bad opcode %d Process %d entered %s coda_ioctl_permissioncoda_pioctl(%s,l. %d): namei, data.follow = %d error: lookup fails. target ino: 0x%ld, dev: 0x%d ioctl on inode %ld dput on ino: %ld, icount %d, dcount %d clstats called with bad opcode %d cache_inv_statspermission_statsupcall_statsvfs_statshardtimeoutaccesscacheprintentrydebugcodastatfs reintegrate resolve open_by_pathpurgefid noop2 zapdir zapfile purgeuser flush replace signal vget inactive fsync readlink symlink readdir rmdir mkdir rename link remove create lookup access setattr getattr ioctl close open sync root noop totals (%s,l. %d): do_time_statstime: %ld Nasty opcode %d passed to coda_upcall_stats Coda VFS statistics =================== File Operations: file_read %9d file_write %9d file_mmap %9d open %9d relase %9d fsync %9d Dir Operations: readdir %9d Inode Operations create %9d lookup %9d link %9d unlink %9d symlink %9d mkdir %9d rmdir %9d rename %9d permission %9d readpage %9d Process %d entered %s coda_upcall_stats_get_info%-79s Coda upcall statistics======================upcall count avg time(us) std deviation(us)------ ----- ------------ -----------------%s %9d %10ld %10ldProcess %d leaving %s Coda permission statistics ========================== count %9d hit count %9d Coda cache invalidation statistics ================================== flush %9d purge user %9d zap_dir %9d zap_file %9d zap_vnode %9d purge_fid %9d replace %9d  mbAmc $d $e$f$GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1author=Peter J. Braam .symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4!X ,3m$$ ?, GRmHH bhm sǸxǸW8Yˑs0a c c 0lx px c c x x t     $ ( ,4 < H` d p |     0 0     X X p p   $v, < @ D H LT \ `h x |       (  (x ty$ 0 4 8 < @H 0P 0T\ h l p t x H Hhy      0 0        H$ H,< `@ `Dh l p         $ @x Xt       c  c x P Px x t     $ ( ,4 < @LyT ` d h l px 0 0y      0 0  c c          m  $m  0 tc x |                      c c          m    $ (  4m  @ X \ l p  t x  |  @   @          `   `      0 y   $  ( 4 0 8 Dy L X \  ` l 0 p                        $ ,  0 4  8 D  H  P  T X  l  p t  x~             0    0     @  @  c c      8 h < @ h D~ T  X  \ h x  |            n  n       0  0  k     (( ,0 (H @P @Tv` d p ht (x h| ( x x     q, 0D H T X ` dh   y   h  h  @ @$ h( p, 0D H T hX p\hl           h   h$ (0 48     < @ hD H `t x  h      h h   0 h4 (8 @L P \ h` (dp @|o h p   ( h, p0< P`      4 8 D H L P T\ dh l |    r r     <P X \t x  @ X @ X    X  X h hw( ,0   w       X   X 8 8 w08 < H L XP T XXd Xl Xtw   X  X  $ \   @  @               w,4d h l (p Pt   w (      P$8 h< h@D X           h l        X \ p t 8|  8m m   c c  H H  ` 8 ` 8(D xp p   x x w   0 4 8 H P T d   `  8  `   8   `  8  `   8 m !!<!X !\ !h 0!l !t !x!| 0!! ! @! !! @!!m !m !! ! `! 0! `!! 0" " " " P"$ "(", P"@ "D "T "X `"` "d"h `"l "p "| x" `" x" `"" " "# #  `# x# x# `##$ #, #0#<#D#L #X x#\ `#` x#d `#h#p #x #|# # `# `# `## `# # # # # ## ##$ $ $ x$ $ x$  $$$, $4$8 $Df$T $\$d$l $x x$| $ x$ $$  $  $$ $ `$ $ `$$ $$%8x %<x %Tt%hn %l%pn % % % p% % p%% % % %w%& & & & & &  &$&0 &4 &8w&P&X&l}&& & & & & && & &&' '$ '( ', '0 '4'< ('@ ('Dw'P'd' '' ' ' ( ( ( ( ( @( @(w(4(@ (L (P (T (X (\(d X(h X(lw(( ( ((( (( ( ( ) ))  ) )$ )4 p)8 )@ p)D)H )L )P )T )\ )` )x ) ) ) )) ) ) ) ) ) )) ) )**  * *  *$ *( *,*4 *8 *<w*T*h*| * * p* * p** * * * * * * * * ** * +++}+X+h +t +x +| + ++  +  +w+++ + +,0 ,4 ,X ,\ ,l ,p ,| , 8, , 8,, H, H,,,}-- - -  8-$ -( 8-,-4 p-8 p-<w-L-|- - -- - - p- . p.. . . . .4}.H .L .X .\ .` .d .h.p .t .xw... . . . . .. . .w//0 /4 /8 /< /@/H /L /Pw/\/l/ / // / / p/ / p/0 0 0 00,}0@ 0D 0P 0T 0X 0\ 0`0h 0l 0pw0|0 0 0 0 0 00  0  0w001 1  1$18 1D 1H 1L 1P 1T1\ 01` 01d1l 1x 1| 1 11 1 1 1 p1 @1 p11 @1 1 11}22, 28 2D 2H @2L 2P @2T2\ P2` P2h22 2 2 2 2 2 @2 2 @22 p2 p22 3 3 @3  33 @3$ 3( 3@ p3D 3L p3P3T 3X 3\ 3l 3p 3| 3 3 3 33 3 3w333 3 3 3 3 33 3 44  4 4,4@ 4D 4\ p4` 4h p4l4p 4t 4x 4u4 4 4 4 4 4 44 4 44 5 5$58 5< 5\ p5` 5h p5l5p 5t 5x 5 5 5 5 5 5 5555 5 566  6l6t 6x 6 6 6 6 6 66 P6 P66 6 6 6 66 6 6 7 p7 `7 p77 `7 7 7D 7H 7T 7X `7\ 7` `7d7l p7p7t p778848< 8H 8L `8T 8X8\ `88 8 8 p8 8 p88 8 8 8 8 8 8 8 8 88 8 99(98 9D 9H 9L 9P 9T9\ 9d 9l9 9 9 9 99 9 999  9  9  99:v: : : :  :$ :(:0 H:4 H:<:P x:T :X x:\ :`:l:tq:: : : : : :: : :: : : ; ; ;; ; ;$;, ;8 ;< ;D ;H;L ;h;t ;x ; p; ; p;; ; ; ; ; ; ; ; ; ;; ; <$<@<\ >  >$>( >< >@ >D >H >L>T >X >d>| 8> `> 8>> ?  ? ? ? ??( `?X? ? ?@y@  @ @ @  @$ @(@0 P@4 P@<@P @T @d p@h 0@p p@t@x 0@@g@@@ @ A A  0A A 0AA$ HA, HA0wA@AgA A A A `A A `AA xA xAB B B, pB0 B8 pB<B@ BD BH BT BX B\ B` BdBp Bx BBBB C CwCC,iCHC|CC C C  C 8C  CC 8C C D HDD HD4D< D@ DL xDP 8DT xDX 8D\Dh Dp DxDD D D 8D DD 8D D D D D  D D  DD EE E E E$ E(E, ED EH EX  E\ Ed  EhEl Ep Et E| E E EE  E  E  EE F F  xF F xF FF$ PF, PF8FLFh Fl F|  F F  FF F F F F FF G G GG,GlGG G G  G G  GG G G HL HPHT HtHHH{HI II II II 0I 0II I I xI I xJ JJ J JJ<J\J|JJ J J J J JJ JvJ J K K K K  KK K K$K8 8K< `K@ 8KD `KHKTK|qK pK pKK K K K K KL L L L yL( L4 L8 L< L@ LDLL LT LXL` Ll Lp Lt Lx L|L L LL L L L LL L L L L L LL LvM M M M M M  M$M, M0 M8ML 8MP `MT 8MX `M\MhMqN@yNH NT NX N\ N` NdNl Np NxN N N N NN NvN N N N N N NN N NO  8O `O 8O `OO(OXqO P P P P  PP P P P,yP4 P@ PD PH PL PPPX P\ PdPvP P P P (P P (PP P PP P Q Q (Q  Q (QQ  Q   Q(Q< 8Q@ `QD 8QH `QLQXQqQ RyR R( R, (R0 R4 (R8R@ RH RLRT R` Rd (Rh Rl (RpRx R| RRvR R R R 8R R 8RR R RR 8R `R 8S `SSS<qSXSp HStSx HSyS S S 8S S 8SS S SS T T  8T T 8TT  T$ T,THvTT TX Td Th pTl Tp pTtT| T TT 8T `T 8T `TTTqUTyU\ Uh Ul pUp Ut pUxU U UU U U pU U pUU U UVvV V V$ V( V, V0 V4V< VD VHVT VX Vd Vh Vl Vp VtV|  V  VV 8V `V 8V `VVVqWx X yX( X4 X8 X< X@ XDXL XT XXX` Xl Xp Xt Xx X|X X XXvX X X X X Y YY  Y YY$ Y( Y4 Y8 Y< Y@ YDYL  YP  YXYl 8Yp `Yt 8Yx `Y|YYqZ Z  Z, Z8 Z< Z@ ZD ZHZT ZX Z\ZyZ Z Z Z Z ZZ Z ZZ Z Z Z Z ZZ Z Z[Dv[P [T [` [d  [l [x [ [[ [ [ [ [ [ [[  [  [[ 8[ `[ 8[ `[[\q\l ]y] ]( ], ]0 ]4 ]8]@ ]H ]L]T ]` ]d ]h ]l ]p]x ]| ]]v] ] ] ] ] ] ]] ^ ^^ ^ ^$ ^( ^, ^0 ^4^<  ^@  ^H^\ 8^` `^d 8^h `^l^x^q^ _y_ _ _  _$ _( _,_4 _< _@_H _T _X _\ _` _d_l _p _x_v_ _ _ _ _ _ __ _ _` `  ` ` `  `$ `(`0  `4  `<`P 8`T ``X 8`\ ````l`q` `ya a a a a a a( a0 a4a< aH aL aP aT aXa` ad alava a a a a a aa a aa b b  b b b bb$  b(  b0bD 8bH `bL 8bP `bTb`bqb cyc c c  c$ c( c,c4 c< c@cH cT cX c\ c` cdcl cp cxc c c c c cc c cc c c c c cc dvd$ d( d4 d8 d< d@ dDdL dT dXdd dh dt dx d| d dd  d  dd 8d `d 8d `dddqe@ epyex e e e e ee e ee e e e e ee e ee e e e f ff  f ff f f, f0 f8 f<f@ fvf f f f f f ff f ff f f f f f ff  f  gg 8g `g  8g$ `g(g4g\qg g gyg g g h h hh h hh$ h0 h4 h8 h< h@hH hL hTh\ hh hl hp ht hxh h hh h h h h hh hvh h h h h h hi i i i  8i$ `i( 8i, `i0i<ilqiyi i i i i ii i ijvj  j j j  (j$ j( (j,j4 j8 j@jT 8jX `j\ 8j` `jdjpjqjyj j j (k k (kk k kk$ k( k4 k8 (k@ kDkH (k`kl kp k| k 8k k 8kk  k  kk 8k `k 8k `kkkqlx lx ltl Hl Hlwlm m m  8m$ m( 8m,m4 pm< pm@mTx m\x mx mtmym m m 8m m 8nn n nn n( n, 8n0 n4 8n8n@ nD nLnhvnt nx n n n n nn n nn 8n `n 8n `nnoqo( o` odoxyo o o o o oo o oo o o o o oo o oo o p p p p p p pp$ p( p4 p8 p@ pDpH pX p\ ph pl pt pxp| pc pc p p ppvp p p p p p pp p pq 8q  `q 8q `qq$q q q q q qq @q @qqqj qj q q r  rh rx r r rj rr s c s s s t t t t t  t$t, t4 t@tptx t t t t ttj t t tt t t t t tt t tu u u0 u4 u8 u< u@uH uP u\u u u u u uu u uu u v v v v  vv Pv  Pv(vHvvP v` vd vh vl vpvx v| vv 8v `v 8v `vvvvv v v v v vv v vw `w 8w 8w `w w,wl wx w| w w ww w www ww w wxyx x x x x  x$x, x0 x8xH xL xp x x x x x x x xx x xx xx xx}xyxyy{Lyzy~y |,y y y y, y4 y8 yD yH yL yP yTy\ @y`yd @yhypyy y y y y y yy Pyy Py y `y `y y y zz z z( z, z0 z4 z8z@ xzD xzHwzTz\ z` zd zt zz z z z z zz zz zz z z z z zz { {{{( {, {0 {4 {8{@ {H {L {P {T {h {p {t { { { { {{ { {w{{{ { { { { {{ { | |  | | ||  (|( (|, |0 |@ |D |H |L |P|X @|\ @|`w|l|t |x || | || | | | | || X|| X||} } }  } } } }$ }< }D }H }X }\ }` }d }h}p }t}x }} } } } } }} }} }l} } } } }~ p~ p~~( ~, ~4 ~< ~@~H ~L ~d @~h ~p @~x ~|~ @~ @~ ~ ~ t x  ! ! ! ! !0 !0   ! ! ! ! !H !H   ! ! ! ! ( !h,0 !hD H T !X !\ !` !dl !pt !   ! ! ! ! ! !   ! ! ! ! ! !    ! ! ! ! ! ! ! ! ! ! ! ! ! ! " "  "( ", "0 "8 "@ "PX "P` "Ppx " " " " " " " "  #0 #H #0 #H  @vL P \ #X` #Hd #Xh #Hlt #h #h   #X #H #X #H # # # # # # , #X0 #H4 #X8 #H<D #H #Llx tx tx x y  #X #H #X #H # #  , #X0 #H4 #X8 #H<D #L #Pd h x #0| $ #0 $   #X $ #X $ $( $(  o,v@oT lax  $` $x $` $x  $` $ $` $x x t, 8 H $L $P $T $X` $hl $  $ $ $ $ $ $ $ $ $ $ $ $(oDP \ $` $d $h $lt %| %  $ $ $ $ %  % o    $8 < @T X d ((h (8l ((p (8t| (H (H (X (X  @@x x $d   ( $ (X \ t )x ) ) ) * * * * * *( * *( * *@ * *@  * * * $ *, 0 D *P *Tb \b l * *   * ) * $ )4 8 < @ +LP +  +h +h m m  $m 0T X \dh lp t|         | | t t | | |  $e, |0 4 8 < @H L PX \ `h l px |    T$, D"T#X!T`$h"<p@xT@LAp*x%|/3 1-4<,,54d6z0`Cpd|E8F\Dz`( h%%%,D%HXp%t%%% %p4x%(('''''''''x'h'X'H'8 '(''&& &$&(&,&0&4&8&x<&h@&XD&HH&8L&(P&T&X%`%p%%,%<@p%ps      T(TH9xJZj }<  H@ 00@ T"8#&!T5$A"<xRTb %|h@L$Ap*x%|/3 1-4<,,546<` C!C /E8$>F\dND|] JfpTr ~< @<  `, 4  tXP`| (@R`)\pNxd !p.=D,SDcXp]~<;\h40) +~: tJ c%dp lT0Pt\$9chDUkTbgz 4XJ\DpP0$B`0,$AXh}0@fLtT,L0EiT$lX D   8 J b | Il _  G\ IP   `  2 FD W$ g0X  [ p U T< @  (X % Dn\ Q h a|h  Pt   hX <   H $T@ BR Pp ki` xXh @  0  (D  P  H " 5 D J~X< T b r4  h P   L1<ElPZTuP1<lDPVmI}08h<psdev.cgcc2_compiled.coda_psdev_pollcoda_psdev_ioctlcoda_psdev_writecoda_psdev_readcoda_psdev_opencoda_psdev_releasecoda_psdev_fops*ABS*cache.ccoda_cache_createcoda_cache_destroycoda_cache_findcoda_flag_childrencnode.ccoda_fill_inodeinode.ccoda_read_inodecoda_notify_changecoda_put_supercoda_statfscoda_clear_inodecoda_read_superdir.ccoda_dentry_revalidatecoda_dentry_deletecoda_createcoda_lookupcoda_linkcoda_unlinkcoda_symlinkcoda_mkdircoda_rmdircoda_mknodcoda_renamecoda_readdircoda_venus_readdirfile.ccoda_readpagecoda_file_readcoda_file_writecoda_file_mmapupcall.ccoda_upcallcoda_linux.cs.478s.481symlink.ccoda_readlinkcoda_follow_linkpioctl.ccoda_ioctl_permissioncoda_pioctlsysctl.ccoda_tablefs_tablesqr_rootcoda_proc_modcountfs_table_headerlookup_dentry_R9ebaf499coda_upcall_namescoda_upc_commcoda_permissionunregister_sysctl_table_R714f1052venus_setattris_bad_inode_Rb9e5f7b1coda_downcallmake_bad_inode_Rdd2aa859jiffies_R0da02d67coda_sysctl_cleancoda_replace_fid__this_modulecoda_fs_typedput_R154d7397coda_super_operationscoda_load_credscoda_symlink_inode_operationscoda_cache_inv_stats_get_info__copy_user_R9c5239ebvenus_rmdirkmalloc_R93d4cfe6coda_f2sstack_top_Ra6cab6a7kfree_s_R06d9dd5dcoda_releasevenus_fsync__module_authorcoda_iscontrolinit_coda_psdev__module_using_checksumsinit_coda_fscleanup_module___atomic_submemcpyregister_sysctl_table_R88135e3acoda_upcall_statscoda_permission_stats_get_info.udivcoda_iattr_to_vattrcoda_upcall_timestampingprint_vattrreset_coda_vfs_statsvenus_linkcoda_upcall_statvenus_pioctl.divschedule_R01000e51init_modulevenus_rootfidcoda_callstatsproc_fs_codacoda_hasmknodblkdev_inode_operations_R347c22facoda_hardcoda_cnode_makecoda_purge_dentriescoda_isrootcoda_revalidate_inodeget_time_averagecoda_cache_clear_inodevfree_R2fd1d81cfile_fsync_R93c099e2do_reset_coda_vfs_statsunregister_filesystem_R3a9d7a75generic_file_mmap_Rb4307b40venus_symlinkcoda_fid_is_volrootregister_filesystem_R8b74f3d0venus_getattrprintk_Rdd132261coda_permission_statproc_dir_inode_operations_R8e8d2275get_time_std_deviationcoda_cache_checkcoda_access_cachecoda_dentry_operationsgeneric_readpage_Rb596983fcoda_fid_is_weirdcoda_dir_inode_operationsproc_coda_vfs__up_R4506727e__wait_on_super_R3bc4cf62sprintf_R1d26aa98reset_coda_upcall_statsproc_unregister_Rf65f8efbcoda_flag_inode_childrencoda_restore_codafilevenus_removevmalloc_Rd6ee688fcoda_fsynccoda_prepare_openfilecoda_print_entrycoda_timeoutcoda_flags_to_cflagsget_super_Rc07d622e__wake_up_R8a4864faproc_coda_upcallcoda_super_infocoda_file_inode_operations__pollwait_Refab907fvenus_createcoda_vattr_to_iattrvenus_mkdirvenus_opendo_reset_coda_permission_statsshrink_dcache_sb_R48fe65facoda_ioctl_inode_operationsshrink_dcache_parent_R051caa49venus_statfsproc_root_fs_Rd4af46c3chrdev_inode_operations_Rb299eecfvenus_readlinkinit_fifo_R7fea633bvenus_lookupcoda_vfs_stats_get_infoinit_codacoda_file_operations__strncmp_R8c5ff0fd__bzero_Rdd42e263coda_cred_eqdo_reset_coda_cache_inv_statsvenus_releasedo_reset_coda_upcall_statsvenus_accessvenus_renamecoda_cache_enterunregister_chrdev_Rc192d491coda_fid_to_inoded_delete_R8309cde3proc_coda_permission__module_kernel_versioncoda_cnode_makectlcoda_fideqd_rehash_Rbc2db168iput_R637caabd.uremcoda_f2s2___atomic_addkfree_R037a0cbareset_coda_cache_inv_statsproc_net_inode_operations_R01511c86coda_cache_clear_creddo_time_statscoda_flag_inoderead_exec_R5b8d7e39coda_vfs_statproc_dointvec_Rda21c3dc__namei_R808c15d6coda_dir_operationscoda_cache_clear_allcoda_upcall_stats_get_infocoda_sysctl_initregister_chrdev_R0a7c618astrlen_R97255bdf__down_R7356f38eiget_Rbb5d76f6d_instantiate_R15af7404coda_cache_inv_statreset_coda_permission_statsproc_register_R8baf7c4dcoda_debugproc_coda_cache_inv.umuld_alloc_root_R57d6f53ecoda_inode_grabcoda_cred_okcoda_opencoda_ioctl_operationsdo_gettimeofday_R72270e35xtime_R3cb6ce39__memcpy_Rbfaaaa73ELF4(㿘@ 㿘`    €1` "$`@"'`>`$>`(@  H@  @ H $& $` (``* @b& $&@㿘   " €0  " @"0@㿘` `"  ` " €0"2@` @0 @@㿘 ` `$" 0 "2@` @  @`(@㿘 ("  "2@ @ 㿘  ," € "2@`  ` `0 0 "   x+  @#@@㿘 "  \ 4 \ * G  .` .`.`2  : ` H<` @@ 2<  @ @ 2  G@ @ 0 G   a$ !@ ?# ?*  *@2@ 2@ <, # ) ` a$ !@ ?#  *2 ?c   $ ! $ a@ `@ @ @ *`2  @ @ * @ o4?k  ?#?*  .@2@ 6@ !'#@  `?#* *`2 @ !3@ .  *> (@?*>  (@ @  F @ , H L@@ "`$@$@   @ ϔ" $@ $@@ F`@ & H@@   2  `  " `!  2   2   4  $   "  "  2 㿘 ` & @2 ` 2 `2 `  @`@0"`#` ` 2@2@"`"`"` " "`` @ 2`` "2@``2@ * 0"02㿐 '! `'@ h?@?'  '@㿘 h DL "  @€0  "   < "  2 2 2 @6  @@@@  @? 㿘 ^   h@?? 2` h `G  /?## @@0@ 3? h@`, h@ & `& @@ h?" h h@  ht?  "t h G` 2D@  hD? @" & @ h@ ?㿐@1` @􀦠 ! 2` ? :,@`*@  `? *` 2`,  `? 2`,  , ` (@  `2` 2$,  @    @ @ `   2  H'D h''Į'H: '''L''P2 2 2 'T    '''  ؀z܀@(xDԒؔԖЀ Ѐ "D $#:    Ȓ` B B?'? D@ ?VDд J ` ɀ` Ā  ` А @ =' @    / ,* * /@  @  @  @`@-* ԒؔԖЀ Ѐ "D $#:    Ȓ` B B?'? D@    ?` J@?J @ `  E A >; `  ` ` @ *`2 @  ` 2     *` : @  ` * : 2+ ?9@+ :  В . ( ` А  *`" ( @  ` * ( :    Ѐ`߀L@P2 PH@ 5PHL "-؀Ā@!L:L P PH@  PHa ظ/  TB = b?@D%@@ D쀢 "%  : ?԰?@ā8'D h'L''P''T2 2  2 `'X ?`''  7 (Ā "   L`P  &Ͱ ``B ?B  >`2 `  Ā 2  '? ` "'?   "D $#:    ` B B?'? D@ ?vhKj ` 2d`^  YK T ` P Oh" 2  @  ?>`@0H @2  -  ? ,* * @  @  @  @`@-*   "D $#:    ` B B?'? D@ ?`  ? ? K? ` ѐ ΀ ̀`2    ` ` @*`2 @  ` 2  2  ..      * :   `* : 2.?9@.:   ..`   *" .   * .:   `dĐ* "'@`@ D`@ ` ` @ " @ @  TX*LP! В@!Xѐ @ LPЀ  k>`>``@@  㿘`  㿘D%  !  *` *` ?N@ .  N@ .N` .@DH  `   @D @   ,@ `  @ 4` @ `$@` :$`  @ `@D`   .   :2 6 . `   ,` `   4`    @D   .   : 6  㿘" ""D5`hD ? 6  6  `  6 ?      ? X  㿀   ?'#I! FJA = ;L``JJ`  JJ` `@  "JL   JJ`  JJ` `@  #?쀢 耣 " $#:    ` B B?'? @?쀢`@h㿐`h  ?  & J@  @ ``2 2Z  "`" $"@:   ` & B`B  ? ?@?4`  G ,?@ % "`" $"@:   ` & B`C ??@ &  h@" @@ @&@@ ``*`"`&`@ `,x" @&@ @x```,```"@  @``h@ ?`"<   ( @ ?`,: 42װ 2 ϰ @*2  a@: 'h` aa:  ( 2` `Ѐ  ` 2 `* @ "  4 'oh'`,"@z쀦@vl* @ "q"@  ' @ @'hN '  @@ " ! $"@  `Ѐ $ 4  D`@   @> B>%@`, : >@ @+ `B :>`  D  `*耦@@`,"@  l. @ .2`h? "   $`0 & (&@㿘  `h   D "`П0`Ѐ  "0@㿘  h@ ? " " H "<   ( @ ?"" $? , :>2  B4    #  Ӱ? @@ "* 2` @ :  @  " !"@ 8  2",< @ : C   @ ?@$  D`@  @$9@"$ a"`  * `  $  D  ` *` *`:   +@`? 2+@ `?  ‣ $@ $ a @<`@ B >,: @   `$,@@ @ @2Q`2N ` $4$Ȁ$8@&@㿘 " h` "`D@ 0 ,*` ?@ @   & @      :  h@00*`@  "" @ "@   : ؄  "@" " 㿘2`@2` `*   ?`@h2`82 `<2@ ?㿘'@ @? ''& h 6 @ & @@@㿘& ,@@㿘@  "`"㿘 "  G@ @ G @@  @$ " @& 6 ~ " @&  " @&  `@` @`  `㿐 n b/ /  7-? 7 * p *  * {' 7 ' 7 ' 'H#@ &3@`  @ ='  - '`@ 3 0`J`"J  2 @  / @`  r/ @`  n/ @` 2  s/ `@ 3 0`J`"J  2 @  u/ @`  bk/ @`  tb/ @` 2\  aY/ `@  `@ 7`@  `@   7' `@  ?-' `@  @`  @` 2   ' `@ `" J@  @ 7JY``@ `" J@ ΐ @ 7 JC``@ `"ٰ J@  @ 7 J-``@   2ð  &`@ `" J@  @ H#@J@ 2   `@   2  , `@ `" J@ f @ &J@ 2y vt0Ғ`@   2i   d' `@  @ 7 J@ 2Q * @2`K`@ (`$L@  J ,'J` .@   ' @, @  `@ ` `@  `\  d@ ,, 2-  @`  㿘 h & А & &   > &  x6 & z6 (& `"& D |: ! 6 " & d G 2&  ` & " D D ,* & ,@? 2 D  D @  D T* & , D ,*  ? @& <@ D& @& & & 8& 0& 4& @ 6 $㾘//0"/'( & &  @`  ` 2& & `* & @` * @b'(@  0 h 7 '#\,($b 3("$(,` x@ @   @ .  !($$  &  & $@@ ! 0. @ # @ 2$@"` @ "+?c  2 *` < @6 D`. F`  * 2@ 6 H` ]c`$Y!? * * 2` 2 @& L`, *  *@4 2@@ & ``0  * 2  @!& d d   @ @$c `? *`*  2 2P\ "r@?@ `` @ @*`* @ 2 2` & t *` 2`*  @?& L& t & ``c@ L`  2`*  @& P `@   4 *2 P  6 T?@ $@& X`@ c * 2`  ?` **` 2 2 @`   X" ` `8 `" @@ & \, 2/o(   . G L  G@*  F T 2  \    2  ` " ` 2 @ @(("& $2   . `@ ?@ .`@ 0`$ <` D쀊 G#\  X 2  #`@`c P2 `(#h T#\ X#`#d`  D #l F#p H L ` t#t@#x(@  ` \ ?& \`e!D& $& h& l& p!`@@  &  [@6 ~&  (& $  @  &  0@& @ ( $ h 4 $ r@@ & ,A.  & `@  7"@ @ @ @@ ! @ @@ `@ @ 6 @&  @`   `X   8B@ t? \   @? "` \   & t@ D' *`  $' \'''''! 'D`@ @ ? 㿘 h DL "   <€!  2   " @@@  @? HJJ J J@ `J J  J 㿘 h & А & &   > &  x6 & z6 ( "& D` "P |N@ K@ ` G "F |&  |` : ` ! !m@ h6 " #?& d`c * 2` & G 2  ` * 2` * &  @&  6 $`y& ,"w`  h D ,*  & ,@? <2 hg`  |:  h "   a  a 2   ac` `  a a2 am @6 " "    "  $(  @ +`  & d`#?c * 2` & G 2  ` * 2` * &   & 6 $`? **` 2 2 & ,`  ` 2 "L  "& L @c& ` `.&  D ,*  ? @& <@ D& @``  @ `* 2*`2 @@ & 0& 4 ( ``  @ `* 2*`2 @@ & 8& 8` & ́㿘 h   ؀,4@4 @ 2  !@ @@`0s ܀" "@ <  `$*`  , $ ?,  ,?# ? **` 2 2 $  "     ,  Ƥ#  2`*  4 V Ē  *  2 *4  4@      2`** 2  4 4  h 8 @       ϗ*2`* 2  4 , 4 @ @㿘  T@ " @`2  % Q``x@2?``z@2 ??`"@ ?  `2   -@ h "  2 " "  " "<  <!  " I4 " "<`| *@ a:`*` *  * 4 " 㿘@㿘  ` &  !@ @`@ 㿘. >  b"3  t a0)() J `# N@ K@```N`J ``N`J"@` K   @  㿘!   #@` ` $ 㿘"` @ #㿘 l  @ h l` & l㿘 h& l@ #㿘 d@< 2`$@ 0. !?c ?* *2 @ @2P\@ "r@? @ t @ @*`* @ 3 2`  @ @㿐 h `G `D  "ް `t "ڰ @`\ `p@ @? "`p &`p`p@ $`p@$`t `G  /?##@`t??$`t `G @@ '` 'c@ '@?['  `@ ? & & @?@`X`@\ € @@@%6# @3@ 2 $@`@"@ @ @ @@   @  @@`$ @ @< "  & @ , @` ,  & ,-  `& ,@㿘@ "? h@ 㿘.`0. 000?+5()  &( . .(`@(`((8@` $  E(5(&. &@. .`(1㿘``*" `* &.!"@ <4  < @ <@ <* @.@ * T6@@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6㿘 h#`@@-5 @=  &@: ?"(?2@#? B>@@ &@` 05`- ($ @-`8 @ &B? 㿐@' ?$     %`LN@ ` L N@ ` L N@ ` @' J`C  L ? ` ; :` 6` 2'$ L + ` ' %?G  @ * 2` *   * 2`  L  `  ` `*` ?4,@ ,>` B?@ G* 2`   @ * 2` * \`2 @@0` @` `   `e @?㿐 T    #\#`< & T 2 * P?㿐\'",? D 6@ X   #\#` & D  @? ڀ@?㿐\`     0#\㿀 "<  " @ `H 2 h@ h #\ ̚  '`2@.2 h  "?#\  `@`2 h h `G "`` h#\  쀦``@㿈 ' h `G      5 􀢠"  2    #\ h @ 㿐 #\ hf 4 8 0 `@ 2 / p ,&@`, "  # " : 0?''D"!D@@!D @`p&@㿘   h    L€%` !?` `,?@< "  " ?    # 0@  &`( 㿘 ``h "  P €@ ?㿘 `  *  *` @@@`?*# " @ 0 ݖ@ ?㿘 ` `*@  @ `@$    @ ?㿘  *@ " 2  @ ?  "@ "@ @0*@ 㿘 `?`@ `@  ` `N@ `@`N@   .  "   @ (  .  @?  . @ "   @ "    .  ?@ ????????????????bread in fat_access failed 2nd bread in fat_access failed FAT cache corruption inode=%ld fat_free: skipped EOF fat_free: deleting beyond EOF... .. fat_file_read: inode = NULL fat_file_read: mode = %07o fat_file_write: inode = NULL fat_file_write: mode = %07o FAT: fat_truncate called though fs is read-only, uhh... ,checkrnsrelaxednormalstrictconvbtabinarytextautodotsnodotsshowexecsmallbigdotsOKyesnouidgidumaskdebugfatquietblocksizesys_immutablecodepageMSDOS FS: Using codepage %d iocharsetMSDOS FS: IO charset %s cvf_formatcvf_optionsDirectory %ld: bad FAT MSDOS: Hardware sector size is %d fat_read_super: Bad fsinfo_offset fat_read_super: Did not find valid FSINFO signature. Found 0x%x none[MS-DOS FS Rel. 12,FAT %d,check=%c,conv=%c,uid=%d,gid=%d,umask=%03o%s] ,bmap[me=0x%x,cs=%d,#f=%d,fs=%d,fl=%ld,ds=%ld,de=%d,data=%ld,se=%d,ts=%ld,ls=%d,rc=%ld,fc=%u] Transaction block size = %d cp%dcp437get root inode failed VFS: Can't find a valid MSDOS filesystem on dev %s. FAT bread failed VFS: freeing iocharset=%s EXECOMBATdev = %s, ino = %ld msdos_write_inode: unable to read i-node blockFilesystem panic (dev %s). %s File system has been set read-only Invalid conversion mode - defaulting to binary. FAT bread failed in fat_clusters_flush fat_clusters_flush: Did not find valid FSINFO signature. Found 0x%x. offset=0x%x File without EOFgetblk failed file_cluster badly computed!!! %d <> %ld Odd directory sizeDirectory sread (sector 0x%lx) failed FAT errorNon-directory fed to m_p_i.. MSDOS: Error while reading an mmap file %d <> %d fat_readpage called with no handler (shouldn't happen) register_cvf_format: version %d already registered CVF format %s (version id %d) successfully registered. register_cvf_format: too many formats unregister_cvf_format: format %d in use, cannot remove! CVF format %s (version id %d) successfully unregistered. unregister_cvf_format: format %d is not registered <0>FAT FS/CVF: This is a bug in cvf_version_use_count dec_cvf_format_use_count_by_version: version %d not found ??? autoloadcvf_autoloadCVF format %s unknown (module not loaded?) CVF detection ambiguous, please use cvf_format=xxx option fat_add_cluster_Rd75e68eefat_add_cluster1_R1e4de202fat_bmap_R8c3f36a9fat_brelse_R7c880e22fat_cache_inval_inode_Rb09c92fdfat_clear_inode_R30526abbfat_date_unix2dos_R83fb36a1fat_delete_inode_R32c4e0fafat_dir_operations_Rbecd094afat_esc2uni_Rdf8b5a1efat_file_read_R51b62a0bfat_file_write_R996cdac6fat_fs_panic_R1240a654fat__get_entry_R4d546df0fat_lock_creation_R4d85e995fat_mark_buffer_dirty_R43ec254bfat_mmap_Rfd9140c0fat_notify_change_R35c05ee6fat_parent_ino_Rba610d15fat_put_super_Rad06b614fat_attach_Rd86941fbfat_detach_R4a828bd8fat_build_inode_R5f32ee2cfat_read_super_Rf4e01055fat_search_long_R9ca9a9b6fat_readdir_Rab1cfe63fat_scan_R39dc1145fat_smap_R4c935d03fat_statfs_Re50dc1bffat_truncate_Rae2681dbfat_uni2esc_R7afa41a4fat_unlock_creation_R9e32cc5bfat_write_inode_Re494c799register_cvf_format_R55b35c83unregister_cvf_format_R9b00c7f7fat_get_cluster_R2f7d450flock_fat_R3f54ba1aunlock_fat_R5ced93bcfat_dir_ioctl_R61f61b92fat_readpage_Re9c5cdadfat_add_entries_R770945e3fat_dir_empty_Rfb48af8cTXTME HTM1STLOG C H CPPLISPASFORF MAKINCBASBATSH INIPBMPGMDXFTEX;Zx0N0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+->?  !"#$%&'()*+,-./0123456789:;<=GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4h!!T ,h<3 ?h GrxRh bsLPl$ {ty@H  }}b*N dkT^`DSXpp  c  c,.<Ph.tcccc      0 H L    @ D H @ L d l tj p %     p |p   `   `    x  N g p  x 8 ` |   {0{@{  h l  x@cXvcX d dc{{ {  X \    ( ,\t4.cvm m | m hm \hlm m h m m m m    !m !m !H !T ! ! " " "d"| " "#h#c$$%T%%%s&$n&x &|& & & &'c'X 'X ($.(\(hs(m (m (h)(m )pm )c)c*- *(- *,- *o* ** +T  +X  +\,, ,L,--<m -@m -Xh-m -m .X*.N...c/- /- /8N/t @/x/| @///N/ / 0 04 0 0 11<1P1111112282@)2L2d222b 2b 2b 2z3 33 33 3 33 4 4 4$ 4( 4,40 4L 4T4X 4d 4x4| 4 44 4 44 4 4 5 5 55  5( 5054 5@ 5T5X 5d 5x5| 5 55 5 55 5 55 5 56  6  6$64 6H 6L6\  6l 6p6t 6 66 6  6  66 (6~7 (77, 07T~7p 07t7 87~7 877 @7 @88 H88~8 H88 P8 P88 `8~90 `949D p9l p9p9 9~9 9 99 9 99 :Dk:\.:d :l :p: :: : ::; ;$ ;l ; ; ;p< < <$ >><>Ts>lc>x >a>>?0?? 0?? 0?c@  X@$@( X@@@@aA(AHaAAAB@BcBB B BCC0q C4q CX Cl C C C C C CD  D D8D@ `DHDL `D D DDD&E E E ED&EPE|EEq Eq E E E EE EEEF FF  F(F8F< FL FPFT FXFpF|b FzFgGpGLGm Gm GhHXHhHxHH H H Ip I I JlJpKt} Kx K K} K} K K} K KK K LLLMMXMM (MM (MM @M M @NcOO`OOcO!P+QT]Q pQQ pQQ QQ Q Q R 0R 0R 0RR R |R |R xReR xR |R |R |R xR |R xRS eSPSlS SS S  S  ST0T<cTgTTpTUUHpUtU|UjUpVpV(NV4VpV|V VVV VVVWcWW0 W4 W8WH xWP WT xWh%W W W WNWX cXH XX X X X Y4 Y8 Y< YYYYYYYZ Z Z Z [ [0c[P[[[ \,\^c^c_l __p` ` `  `P`  `` @` ` @` aapabcTcl Pcp Pctcd4 d8- d<- dPNdX d\ d d dd dq d d dq d dq dq e e,e0 eT e\ex 0e|e 0eq e e eq e Xe e Xee f  f ff,q f0q f< f@ fh ff f Hff Hf f ff ff gg q g0q g4q gTgx g| ggq g gg  $8,4<DL @T \\ d!(l)x-   0$$(,,0448<<@DDH 8LLP TTTX \\`! ddh)llp-tt  Vc $(,W048'<@YDH"L PTXT\` dhlpt x|r/l#(y[ , $ g$(,048<@DdHZL p,DHTXh| @ T @LlpT h '$b     #,4 D J T pZ pg xsp{%x@< < h< %x&X / %I@<42HB;<\P, YHaQlh0F yx | @ \^t_``(T bbdd$0JZz *@@  *< G!_ HH%p:h ^qS 8< ` ,@0Plw0   XQd (0< IW^}X R@   )W,C[(z   X #:SDOQP[@ q  P `  ( =F@ R q 1$  8   - >0X, S x   X   'P GX X n|X       X *<  ? IR$ g0 p M|P  ,   , I m # (   Y0,=Dpj  p  P *H"fX-`|dF( h08#0T8H W`xS` < h<[6If|TL h   "A/LX u1dpX8 Xh $4@ Wx z 8 $4 GY@} t Pc QlXG/@ fOQf(x,  Vab /8` -bt8@Z0 p1(e1 x  @&@Xdv0 fatfs_syms.cgcc2_compiled.*ABS*buffer.ccache.cinitialized.210cachefat_cachedir.cfat_dir_readuni16_to_x8memicmpfat_readdirxvfat_ioctl_fillfile.cfat_file_operationsfat_file_operations_1024fat_file_operations_readpagefat_prefetchfat_file_read_textinode.cfat_inode_hashtablefat_fill_inodeparse_optionsfat_read_rootfat_sopsis_execmisc.cascii_extensionscreation_waitcreation_lockday_nraw_scan_sectorraw_scan_rootraw_scan_nonrootraw_scanzero.328mmap.cfat_file_mmap_nopagetables.ccvf.c__mark_inode_dirty_R8e8c6e94__ksymtab_fat_date_unix2dos_R83fb36a1panic_R01075bf0__ksymtab_fat_readdir_Rab1cfe63fat_inode_lock___set_bitfat_file_write_R996cdac6__ksymtab_fat_dir_operations_Rbecd094a__kstrtab_fat_bmap_R8c3f36a9__kstrtab_fat_clear_inode_R30526abbread_ahead_R0abb7b07fat_dir_operations_Rbecd094afat_dir_empty_Rfb48af8c__kstrtab_fat_read_super_Rf4e01055__ksymtab_fat_put_super_Rad06b614init_fat_fsgetblk_R0cac240b__ksymtab_fat_dir_empty_Rfb48af8c__ksymtab_fat_esc2uni_Rdf8b5a1e__memmove_R60e2f255__this_modulefat_brelse_R7c880e22__kstrtab_fat_add_entries_R770945e3sleep_on_Rd9512e2a__ksymtab_register_cvf_format_R55b35c83lock_fat_R3f54ba1a__copy_user_R9c5239eb__ksymtab_fat_unlock_creation_R9e32cc5bfat_cache_lookupkmalloc_R93d4cfe6__kstrtab_fat_detach_R4a828bd8stack_top_Ra6cab6a7fat_ll_rw_blockgeneric_file_read_R2cde3e44fat_accesscvf_formats__kstrtab_fat_mmap_Rfd9140c0fat_is_uptodate__module_using_checksums__ksymtab_fat_statfs_Re50dc1bffree_pages_Rb5136506cleanup_module__ksymtab_fat_clear_inode_R30526abbfat_read_super_Rf4e01055___atomic_submemcpy__ksymtab_fat_attach_Rd86941fbfat_file_inode_operations_1024simple_strtoul_R20000329iunique_R12c315e3fat_lock_creation_R4d85e995__kstrtab_fat_parent_ino_Rba610d15.udiv__ksymtab_lock_fat_R3f54ba1afat_add_cluster_Rd75e68eeset_blocksize_Ra842722a__ksymtab_unlock_fat_R5ced93bc__kstrtab_unlock_fat_R5ced93bc__ksymtab_fat_truncate_Rae2681db__ksymtab_fat_smap_R4c935d03__kstrtab_fat_write_inode_Re494c799fat_file_inode_operations_readpage.divglobal_event_Rcaf51008unlock_fat_R5ced93bcinit_modulefat_uni2esc_R7afa41a4__ksymtab_fat_search_long_R9ca9a9b6__ksymtab_fat_cache_inval_inode_Rb09c92fd__kstrtab_fat_readdir_Rab1cfe63__kstrtab_fat_readpage_Re9c5cdadfat_getblk__kstrtab_fat_scan_R39dc1145file_fsync_R93c099e2fat_statfs_Re50dc1bfmark_buffer_uptodate_R2f9b9072generic_file_mmap_Rb4307b40fat_clear_inode_R30526abb__kstrtab_fat_dir_operations_Rbecd094a__ksymtab_fat_readpage_Re9c5cdad__ksymtab_fat_add_cluster_Rd75e68eeget_empty_inode_Rc01ab9f4printk_Rdd132261fat_detach_R4a828bd8__kstrtab_fat_delete_inode_R32c4e0fa__ksymtab_fat_add_cluster1_R1e4de202generic_readpage_Rb596983f__kstrtab_fat_add_cluster_Rd75e68ee__kstrtab_fat_brelse_R7c880e22__wait_on_super_R3bc4cf62sprintf_R1d26aa98__kstrtab_fat_uni2esc_R7afa41a4fat_set_uptodatell_rw_block_R08ea67abfat_file_inode_operationsutf8_wcstombs_Rd9716c9bsys_tz_Rbafebf71__kstrtab_fat_date_unix2dos_R83fb36a1strcmp_Re2d5255a__wake_up_R8a4864fafat_mark_buffer_dirty_R43ec254bdate_dos2unixcvf_format_use_countfat_breadfat_unlock_creation_R9e32cc5bfat_iget__ksymtab_fat_bmap_R8c3f36a9fat_write_inode_Re494c799__ksymtab_fat_parent_ino_Rba610d15fat_readdir_Rab1cfe63__kstrtab_fat_search_long_R9ca9a9b6__kstrtab_register_cvf_format_R55b35c83__kstrtab_lock_fat_R3f54ba1a__ksymtab_fat_build_inode_R5f32ee2c__ksymtab_fat_read_super_Rf4e01055fat_add_entries_R770945e3fat_file_mmap__kstrtab_fat_add_cluster1_R1e4de202__wait_on_buffer_R8468a33ahardsect_size_Rc5f560d8fat_date_unix2dos_R83fb36a1strtok_Ree9c1bd4memcmp__ksymtab_fat_lock_creation_R4d85e995__kstrtab_unregister_cvf_format_R9b00c7f7__kstrtab_fat_cache_inval_inode_Rb09c92fd__ksymtab_fat_file_read_R51b62a0b__ksymtab_unregister_cvf_format_R9b00c7f7fat_file_read_R51b62a0bdetect_cvffat_parent_ino_Rba610d15__kstrtab_fat_file_read_R51b62a0binsert_inode_hash_R9289e3e5kdevname_R160820f5__strncmp_R8c5ff0fd__ksymtab_fat_dir_ioctl_R61f61b92__bzero_Rdd42e263__ksymtab_fat_detach_R4a828bd8__ksymtab_fat_delete_inode_R32c4e0fafat_attach_Rd86941fb__kstrtab_fat_attach_Rd86941fb__ksymtab_fat_fs_panic_R1240a654__ksymtab_fat_get_cluster_R2f7d450ffat_clusters_flush__ksymtab_fat_write_inode_Re494c799refile_buffer_Rce9d3f7efat_get_cluster_R2f7d450ffat_dir_ioctl_R61f61b92fat__get_entry_R4d546df0load_nls_R68517502__ksymtab_fat_mmap_Rfd9140c0clear_inode_R88e1ce5bfat_add_cluster1_R1e4de202fat_free__ksymtab_fat__get_entry_R4d546df0__module_kernel_versioniput_R637caabd__kstrtab_fat_statfs_Re50dc1bf.urem__brelse_R9bb16e38__ksymtab_fat_brelse_R7c880e22fat_truncate_Rae2681db__kstrtab_fat_smap_R4c935d03fat_put_super_Rad06b614.remfat_readpage_Re9c5cdad___atomic_add__kstrtab_fat_dir_ioctl_R61f61b92__ksymtab_fat_file_write_R996cdac6__kstrtab_fat_unlock_creation_R9e32cc5bkfree_R037a0cba__kstrtab_fat_file_write_R996cdac6__kstrtab_fat__get_entry_R4d546df0__ksymtab_fat_notify_change_R35c05ee6__kstrtab_fat_get_cluster_R2f7d450funload_nls_Rfa6dcd9efat_search_long_R9ca9a9b6__kstrtab_fat_truncate_Rae2681dbigrab_Rc6c320babread_Rdb41b5aefat_smap_R4c935d03strncpy_R328a05f1__ksymtab_fat_add_entries_R770945e3__kstrtab_fat_notify_change_R35c05ee6fat_cache_initfat_cache_inval_inode_Rb09c92fdfat_mmap_Rfd9140c0__kstrtab_fat_esc2uni_Rdf8b5a1efat_fs_panic_R1240a654fat_bmap_R8c3f36a9strlen_R97255bdf__kstrtab_fat_lock_creation_R4d85e995fat_notify_change_R35c05ee6__ksymtab_fat_scan_R39dc1145request_module_R27e4dc04fat_is_binarydec_cvf_format_use_count_by_version__ksymtab_fat_mark_buffer_dirty_R43ec254bset_writetime_R7a99c921__kstrtab_fat_mark_buffer_dirty_R43ec254bfat_subdirs__kstrtab_fat_dir_empty_Rfb48af8cfat_hash_init__kstrtab_fat_fs_panic_R1240a654.umuld_alloc_root_R57d6f53estrchr_R349cba85__get_free_pages_R19d9ac40__ksymtab_fat_uni2esc_R7afa41a4_ctype_R8d3894f2fat_scan_R39dc1145inode_change_ok_R14215b4ffat_esc2uni_Rdf8b5a1efat_build_inode_R5f32ee2cunregister_cvf_format_R9b00c7f7fat_cache_addload_nls_default_Rf21352b1fat_delete_inode_R32c4e0fa__kstrtab_fat_build_inode_R5f32ee2cfat_cache_inval_devupdate_vm_cache_R316a00bainode_setattr_R33d3b012register_cvf_format_R55b35c83xtime_R3cb6ce39__memcpy_Rbfaaaa73__kstrtab_fat_put_super_Rad06b614ELF%4(X9   @̒`%#\ޔܖژ@Ѐ 2   @ . " ! @ @Ƞ E @Ĥ 9 @ -*!"U@>ez I@>dF I@ & (` 6@   @ `2 `@`` @ `@@̀ `` `@ @!# `@ @ `@$@ @ `@,@ @ `@@@@ `?`@ږ@d@!`?`@ϖ@@   ` & & $& . &   * & D& H0?2 & P<& T:` a6 d& L d Ж* *  `*` * @ & d& \6 `6 b& d`& X@ Ā "@Ȁ " D@ D@@ & , 0!. @ # ,2 D @6  @  g%@$   ,` @ `@ F6   *`" `* `` , "`0 *" `* `` , "`4 *" `* `` ,@"`80$ "@Ā "@Ȁ "6 @6  0!. @ #  @`   `㿘 @ 㿘 @   @ `?㿐 6@6p  6'\'@ $#@` "  '@ = '*@ '@ `"~ J@ 3 @ )6@`@ `"j J@  @ 6`@ `"V J@   @ 6J`C G `@ 2@` 1'@` 2 )'`@ 2@` '@@` '@@`    '@@`   $ @` t 㿈 & d h6 " H2 * `@ 0]06 & b6 ( d6 " d 2 *@ * & & & & & & & @6 " ?@ # @6 " "<  & 0& 4& 8 & ,  "& <& d,6 $ @  2`@  6 "* & `H & @ ''@T * ` "* 6 $& d& <& @& ,㿘` @` `X X?2  \@f& X @ T& \ \" X  $' H' P''''''D`@ @ ? @ ?㿀 @ -   @ $&# @2`  @@ @` @ 2`  &@2`  @ @@*@@㿀H#@2`@L   ), @`@  @   , @ΐ㿀. 2 @o  #  :*  2   @㿐  <"  ",_?"@ 8 V# a*2 ""@@:  @@ ">?༑2`  @8༑*   $༑2` ` D`@ @@E," " 8  "@ B>@&@     `    ( ~82    @  `" @ " D  (2 @" 㿐  &@ @   @$    `8@  @㿘@ 2`` 7``  @& @   ` (& & & #  ``  @@ @  @` @  㿀`@J`D .  *`  *`:  .2 J .2 2   @  @[ࠒ 2 @@ O  * *  @ h A?`0 7*`"  *  `$`0*`"  *  `$`4*`"  *  @q$`8  `"?#m @4`"  a:  $`@$`,@@ @㿘 @ >``@7 8` @ @@ `    2  @͒2   * @ѐ 㿘`@.@. `㿀   @  2`hV? d 2`  H: B<6 `` ƀ 8??>  ``ƀ  +  >     * *  @rƀ ʒ @ࠒ 2 ??> @  㿘`4`@*  `? @L 2     >@2 ,` ` >@$@@-`㿀`#  @`? 6`  @  2 2  @$ $ 㿘. 2 @r    @2    `@ ?㿐. 2 @  ` H@ 㿘`. @  2 6`@W ="@ @   @㿘`. @  2 @8  "@  @   @㿘`. @  2 @& "@ @ @m 㿘. 2 @" &@   $㿘`N (@  F&, 2`@" :& $"@`@" )& $"@"`@" & $"@$`@" &  $"@&0 "@ "@ "@@( @ 㿘 " @  " @  "@ " @ @(㿘@ 㿘@㿘@ ? ??  ???  ?? ??@  ? ?HPFS: syntax error in mount options. Not mounted. HPFS HPFS: hpfs_read_super: Not HPFS `Improperly stopped'flag is setrun CHKDSKSpare blocksmay be in useSpare dnodes#1unknown word nonzeroinvestigate#3#4#5#6HPFS: Proceeding, but operation may be unreliable HPFS: hpfs_read_super: inode get failed HPFS: hpfs_read_super: root dir isn't in the root dir HPFS: %s %s. Please %s ,uidgidumaskcaselowerasisconvbinarytextautonocheckHPFS: read_inode: bad ino HPFS: read_inode: no fnode HPFS: bit map pointer missing HPFS: bplus_lookup: sector not found ...HPFS: missing fnode HPFS: map_fnode: bad fnode pointer HPFS: missing anode HPFS: map_anode: bad anode pointer HPFS: missing dnode HPFS: map_dnode: bad dnode pointer HPFS: map_sector: read error HPFS: map_4sectors: unaligned read HPFS: map_4sectors: read error hpfsןѪÄȞϕ̋յݯGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata.rela.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4!( 4 ,H33  ?PG4 T$8_4 o$@u4  $P$Pz$($*%"%"4> ;S> >  `d Xl X|RI  4 D H L TXd t xP|               8  P$ 8( P4 0< 0X `` `| h h p p x x P    ___be0UH L PPhF  S  P S S S LS ___U> F8 (<P@ (lX @W @ HgT H  PHG\ P`Tp XG XT `G `T$ x( h0T4 h@ pPTT pl xpT  T  T  T T  W  @ \  `P d   h  h P  TP X  _   >  >  F A A ?   P $ A A ?H_0A 4A  _ _ P  X `   ]cb4S 8S <S hS S  ]cYVth[f (  (P 0X 0DL_l 8pPt 8 PP P_ xP x( 8 <P@ T_t xP|   P a  P 8 @ H@laiaiaia i(_@_X_dBl @p @tP____B O Z, 0M4 H hL h h h h h ,    0 DNTLh,Q L0|`d      ,$ ,4 4C O _,<m |hX< X0D ,L8H4 x\|% 2 ? \pPdZ(\gs |TT,  @h*<Pb{( *Fdu@D 0+8Kcv| 'D@hpfs_fs.cgcc2_compiled.hpfs_sopshpfs_read_inodehpfs_put_superhpfs_statfshpfs_remount_fshpfs_file_opshpfs_file_readhpfs_file_iopshpfs_bmaphpfs_dir_opshpfs_dir_readhpfs_readdirhpfs_dir_iopshpfs_lookupparse_optsmap_sectorcheck_warnzeropfnode_dnomap_direntbrelse4map_fnodecount_dnodescount_bitmapcount_one_bitmapmap_dnodemap_4sectorschoose_convconvcpy_tofsbplus_lookupmap_anodetranslate_hpfs_namemap_pos_direntdir_subdnomap_nth_direnthpfs_fs_type*ABS*hpfs_caps.ctb_cp850_to_latin1__this_module__copy_user_R9c5239ebkmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5d__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_subsimple_strtoul_R20000329.udivset_blocksize_Ra842722a.divinit_modulefile_fsync_R93c099e2unregister_filesystem_R3a9d7a75generic_file_mmap_Rb4307b40register_filesystem_R8b74f3d0printk_Rdd132261generic_readpage_Rb596983f__wait_on_super_R3bc4cf62sys_tz_Rbafebf71strcmp_Re2d5255a__wake_up_R8a4864fahpfs_char_to_upper_linuxstrtok_Ree9c1bd4memcmplinux_char_to_upper_linuxinit_hpfs_fshpfs_char_to_linux__module_kernel_versiond_rehash_Rbc2db168.urem__brelse_R9bb16e38___atomic_addbread_Rdb41b5aeiget_Rbb5d76f6d_instantiate_R15af7404hpfs_read_superd_alloc_root_R57d6f53e__get_free_pages_R19d9ac40strchr_R349cba85hpfs_char_to_lower_linux__memcpy_Rbfaaaa73ELFgl4(㿘 @ / ` `$ 0(. @@@  / `*``+ 1 "0( `$0(.  @?`$(@ 7 7. <7 7 `<<@@㿘 2 T@ 0P@  H@ @ 0F @$ ` @`" T@ T?&@ *  P2 * p@ 0(* @2`$(`  (@ ` !@ @` @ @ `(@㿘 2Pp  1 . p# ?,` $  ` `2 +@ @ 2`@ `@ ݑ,` >#4W  $6 (`  @(@@ P  @2 T@  ("T@T,` ?@ *- H @$ 2 $ @ @$@   @ @  ( @ @㿘 T H"  p P X*㿘 `"  hD@( P !@ @( L`  4  @$ 2 $@  * *` 2  @ @  (@㿘 `"  hD@( P !@ @( L`  4  @$ 2 $@  * 2`2  @ @  (@㿘 h ~`  @㿘 Y 2 @ 0P`@ 0JV $`@ 0C h2 @ 0; D@ 01L4 @ @ 0)l*` @`$4 c  @(@` @` @ @ `(@㿘 " @ h  h$`h$` L! .  l# ?,$   `2 +@@ ` 2``` ݑ,/#+4 $(`  @(@@ 0 @ , @ (, @, `h D  @ 4`$ 4` 4`& "d" (4`($``$`4$`8$`0$`d$`<@$`@``@㿘 D L, l㿘 , c: R-  "I  @$ ,c:  c@ ,"   + @( 4  @   @  (  @ @ " h@ h@  㿘   @$ `~ @耥`2 ,6v  ,#: "a4S`$` , #: "@,``$"@` @$ ,c:` "@@   " ,@ , "     @`5` @ @ `( @ " h@ h@`a``$ @ ``a$@a `` " 6 h@`@㿘  g  @$ `\ @``2 ,6T  ,#: ": !4*`$  , #: ": , `$, @ ?` @2  @ `(" @ !܀ `$ @ ` !$@!`` "  6 2 h@ h@`@㿘 "<  @ @(@   "x@!0  & 4`& 8@㿘 , c: R-  "I  @$ ,c:  c@ ,"   + @( $  @   @  (  @ @ " h@ h@  㿘   @$ `~ @耥`2 ,&v  ,#: "`4S`$` , #: "@,``$"@` @$ ,c:` "@@   " ,@ , "     @`%` @ @ `( @ " h@ h@````$ @ ```$@` `` " & h@`@㿘  g  @$ `\ @``2 ,&T  ,#: ":  4*`$  , #: ": , `$, @ ?` @2  @ `(" @  ܀ `$ @ `  $@ `` "  & 2 h@ h@`@㿘  g  @$ `\ @``2 ,&T  ,#: ":  4*`$  , #: ": , `$, @ a` @2  @ `(" @  ܀ `$ @ `  $@ `` "  & 2 h@ h@`@㿘 "<  @ @(@%   )@( }!!q@!0  & 4`& 8@㿘 h ~`Ր0Đ㿘& h D 4 ,  7 2  $@ "' $@   J@  @`? " & @ , " @  ,  , ΀ " @  h`d"`@  0 ("` 㿐 &`P`@`D   @@ h@ ?@@ 㿘&' h D 4 }?  2  $@  "q? $@  @@  , (4 @ `& ,@  J@  @`? 8 D?@@?  & 4`& 8@  @6@6*@ * `@`  & D"` @2'@  ("'@' @ " @  & 㿐@ <?  $ d`4 "@`@`Da   $ ?`4 $@@0  2@ @ @  (@ "@@ 㿐@ 2d?<  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D   $ ?`4 $@@0  2@ @ @  (@ "@@ 㿐h DT$$@?@ ? $`d*$`, @  2 $`$`?`4`$@@s?'``2 @  $` 2 ' @  4`$  @ @  ( @ "p@p`: ! 4`""d$4`"` 2`@@`@`D[ @4`$0( `2@@2 $@ ("$@$ `4$@ "@@ 㿘 h  D  , V* S @ "S  $ H@` C  $ < @` 6  ,@+ 2  $@ " $` @ + @'  @ , " @  ,  , ـ  @  " @ !@ @ 㿐`@`D5 I?` @?  <```@6?T $`@ 2`` "`$D @2  @ `(" @ 4 $@`$4$8$ 8$4$@@ `@㿐``@`Dܰ? E` @T`$ 22!` @ `@T`$ 4`$2` "`$D @ @ (@ $8`$4@`$?4`$8`$`8@@ @㿐'@ (u?!`4`"$`d @   `$`?`4`$@@]?N  $* #$N $ * @ @  ( @ "`@` $`,@`@`D  `$`?`4`$@@0 `2@ @ @  (@ "@@ 㿐 < " @@ 2 hB?T $ h@ =?@D}  1@  2@ @ @  (@ " $@ $ 4 $ $ 8@ $ @ 㿈 h' D``D `@?  Ȁ`@D '쀤 2"@'"<  $쀤  ? @ ?`$`  `  ?ဦV$`$@`쀢 2 D@ `3%2@2% 8% 4` &` `% D@&8&4``&` &D@   $?4 $ $ 8@ @ @ (@ `@ `@ `(`@`1```$ 2@ @2  $@ `(" $@ $ ?`5 $@ " $ $ ?` 4 $ `6$@ `@@쀢 @㿘& ,@@㿘 t  @2 . @  (". @. 㿘 2 .  x`?# @2ݐ. 㿘 2 L x  |2` t @2  L@  (" L@ L : P l, @  @ L * l P : t p, @  @ P * p t @@ l` @`  `㿘@ ` @J x`"! C | ? 2 t`@  @ `( @ . a0'?6 |c 2 t `@2  |@ `(" |@ | `.  ` @ 㿘`"<  19  @ 2  $1/ $d$`&  ` $@` .`  .`c # $`@` ސ.`c$ $ @㿘+ ` @`  ` ` @ . , `5 !@$ @$ %$$& x& t & 6 |. & D& H& L& P& T & X & \@ & $    #@2      6 ~& `& d& h h@2   6 ~?c    x@׀ 6 ~?c  & H& `& d& h P  L*@ @ L *@& l& p  5 @$ l,  }"  L  ` P : l5 @$ p,  j"  P  ` l @ $@ p @ $@`& @  H ;@ 9& , "`P `2?# @4 @  @ ( @ .  0!. @ # |  @ 0ji@ 0e@ @  L2  L  @ L : P l, @  @ L * l P  p, @  @ P * p@ l@   ! @@" 6 @6 @ 6  0!. @ #` @`   `X T H"@ X *@  $'''@ D'''@ d''D`@ @ ? 㿘 2 $ .`@@ 㿘`6 h@ 2 `\2 @ @ ) `4.`" a4   `"  @$`~ @$ʓ>` "   @$a 㿘 2 $ .`@@ 㿘`6 h@ K `\2 @ @ B `4.`; ` ? `"4  @$*#@4   `"&  @$>`?`@ @$>` "  @$>` ` "   @$` 㿘 h`~ 0]㿘.``@`  @$@@ ( # @ h 2  @$@  h@ "@@@4@  $ 8@㿘`'Hk ` 2`$  @HH`  @ H` 2 `$`T @ P .@` H @$@ <! H : @@ h HH / @଒ @$  h@ "@6H `@ H@ `(H@H @㿘`6 h `\2 @  @ 0$`4@a~ 7>`  ia *]㿘.``@`  @$@@ ( # @ h 2  @$@  h@ "@@@$@  $ 8@㿘`'Hk ` 2`$  @HH`  @ H` 2 `$`T @ P .@` H @$@ <! H : @@ h HH / @଒ @$  h@ "@&H `@ H@ `(H@H @㿘`6 h `\2 @  @ 07`4@/` ? 7!#@?@  )>` [ >` O`J㿘 h ~`0͒㿐@ '    @   @   " @ 㿘 & d`6 " h`D@( `P !@ @0q`L @4  @ @$ 2 `$ !@ @0] * @@6 " <6 & 6 ( 6 $  & , & <& 4& 8& 0& @2   :` `*   6 *  *2`" "@  "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 & d`6 " h`D@( `P !@ @0o`L @4  @ @$ 2 `$ !@ @0[ * @@6 " <6 &  6 ( 6 $  & , & 4 & 0 & <& 8& @2   6 *  * "`" "@  "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 h ~`0s㿘 `"  h`D@( `P !@ @M `L @4` @ @$ 2 $@ < ` "* 2 &3` )<+`  %+`  ,#` 4#` " @ @ @ ` *2`*  `  3`  *2  @ @  (@㿘 `"  h`D@( `P !@ @Q `L @4` @ @$ 2 $@ @ ` "* 2 &3` (<3` $3` ,#` 4#` 0#`  8#` " @ @ @ ` *2`*  `  #`  * "  @ @  (@㿘 h ~`01㿘 @㿐  `!'`   @`  @ `  `!` @ `@􀢠`?`@ 㿘@ 㿘@㿘@ 㿐  2"@ ?<   @ ? $ ", :,: @  ' "t?s,, $$"@&@8d    @  @    @ "K?J, <$$`@D`@ @@@   @ "'?&,@@   @ @ (@ @@ ,4$,<$4$8>@?㿘   h`D`?  ;  @ "P ,]?* 2` @ :   @ 2$$"  @ C 7>  ,:  4 $* &$@ @ ` @@ ƀ 6 `% @! ` : @ C > " ,@ ,:  4  8 @ 㿘  @ @ ?@ $@@㿘4#  @     $J  D @  `*@&J @ 㿐@ + @$`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@  " @$&@ `"&@ & ? 㿘   2`` 㿐Ė    .`$@ | 4 2`a$ @㿐    .`$@ ǔ 4 2`a$ @㿘 "<  @   @(@ ?   @@  @@@ ?㿐@ + @$`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@  " @$&@ `"&@ & ? 㿘   2`` 㿐Ė    .`$@ | 4 2``$ @㿐    .`$@ ǔ 4 2``$ @㿐x    .`$@ ǔ 4 2``$ @㿘 "<  @   @(@ "?    Ēds``@ ?㿘`h ~`Ɛ 0 ?trying to free block on nonexistent device trying to free block not in datazone minix_free_block: nonexistent bitmap buffer free_block (%s:%d): bit already cleared trying to get new block from nonexistent device new_block: bit already setnew_block: cannot get blockBad inode number on dev %s: %d is out of range unable to read i-node block free_inode: inode has no device free_inode: inode has count=%d free_inode: inode has nlink=%d free_inode: inode on nonexistent device free_inode: inode 0 or nonexistent inode free_inode: nonexistent imap in superblock free_inode: bit %lu already cleared. new_inode: bit already set...Bad directory on device %s empty directory has nlink!=2 (%d) Deleting nonexistent file (%s:%lu), %d MINIX-fs warning: remounting unchecked fs, running fsck is recommended. MINIX-fs warning: remounting fs with errors, running fsck is recommended. root directory is not a directoryunable to read root directorybad root directory '.' entry.bad root directory '..' entry..bad V1 i-node sizebad V2 i-node sizeMINIX-fs: mounting unchecked file system, running fsck is recommended. MINIX-fs: mounting file system with errors, running fsck is recommended. MINIX-fs: %s MINIX-fs: get root inode failed MINIX-fs: bad superblock or unable to read bitmaps MINIX-fs: can't allocate map VFS: Can't find a Minix or Minix V2 filesystem on device %s. MINIX-fs: unable to read superblock minix_bmap: block<0minix_bmap: block>bigminix_getblk: block<0minix_getblk: block>bigBad inode number on dev %s: %d is out of range Major problem: unable to read inode from dev %s unable to read i-node block IO error syncing minix inode [%s:%08lx] minixminix_file_write: inode = NULL minix_file_write: mode = %07o GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4Z,!j<  ,Z`3@  ?ZhGbRL bbhd sdxdff*ff 0k  $( D   ( ,    0 0 0x$ X(, X\xt x| o  o   $o<Tr  o   0 0 ` `o(@| 0 0 ` `o0|         ( ,0 H HLP Hlx x xo  ,o <  @ D  Xo p    ,l    0l Px t x      $o<Tht,Pol8 <H `l@l`xx 4oLdx<`o $loTl`t  , Dl,l $ P\p| 0Ll`  l   0 <oTlu u l8l@do| u u , 0 H L dll o , D \ h  !l! ! !( !4!@ !H !`!|o!!!" l"8"`o"x""l""#$#H #P#T #| ## ##$ $T$p$| $$ $% % %$ %0 %4 %@ %Po%h%%l% % %l%%&P &X&\ &l& & & &o& && && & &l' l'('@'\'xp 'p ''l'(o(0(H(\(tl(l((o()),)8))o)**(*4 *@ *Tl*l++T+ + , , , ,(l,0 ,< ,D ,Xl,x ,l,o,,,o---Do-\-t-l-l-. .$.<.D.ho../$o/</T////0t 0t 00o001o1141P @1X @1d 1h 1l1 1 11 1 1 (1 (1 H22 H2 P2 P20 p2L2P p2|2t 2t 22234Py4d445(o5Do5L X5P X5\55 5 5o566,6D 6H6L 6X 6\6` 6l @6p6t @6x6 P6 P6 x6 x667 787P 7T7X 7l 7p 7t777 77 77t 78,8D8dz 8hz 8w88 888 89 P9 9 P9X9x999 8:: 8:  P:$:( P:p:::;;r;s;r<<<( <, <@l<<<<r=4=<s=`=pr===o==> >, h>4 h>H >L >P?r?Ds?dr??? ? ?l@@$@L@|r@@s@@rA A ADoA\AtAA hA hA A ACC,CHClC CC CCD DD  DDDu Eu E E E4p E8p EP ET El Ep EE EE EFF F F$ F,FG u Gu G( G, GDp GHp G` Gd G| G GH H H HHHH\ H`Hd IoI4ILI II III II JoJJK@KKK  KK  KLL$ L(L, L<LP LTLX L| XLL XL xL xLLMhMMMz Mz N wN<N`NlNoNNNN N O lOP$P\PPQQvQ(Q8mQDQlQz Qz QR R4RdRRSS@T@TU|UUV VLV`VVWXYYQQDXG\K(d.4l.p.t8x04P2|Ldn ,O04O8Pd(hqlkptx|{QTP      @#t.`CPX@Ljp `{ `h @ph@ j $05d@,P"jZ .4b.4 u.TX.H.@X,G4K((804H1|2t8,"809,>9PL;p\|>?A CEGI`J4j! Ld(<>LdjO O0UO0d(<yO8j PQTPdj QQRShPSTP TU*V9WPHW`YWkX}Y(jt;<4X%X5CX_n |l LL@-? @ W]tnL8T48WsBKP$0AUp00tdL    % @ 5)L4 @ X$\ d w        %T dX - = MY8 ]* j y    'P B<   bitmap.cgcc2_compiled.nibblemapcount_freeV1_minix_clear_inodeV2_minix_clear_inodeminix_clear_inode*ABS*truncate.cV1_trunc_directV1_trunc_indirectV1_trunc_dindirectV1_minix_truncateV2_trunc_directV2_trunc_indirectV2_trunc_dindirectV2_trunc_tindirectV2_minix_truncatenamei.cminix_find_entryminix_hashminix_add_entryempty_dirinode.cminix_delete_inodeminix_commit_superminix_write_superminix_put_superminix_sopsminix_read_inodeminix_write_inodeminix_statfsminix_remountminix_checkrootminix_read_superV1_block_bmapV1_minix_bmapV2_block_bmapV2_minix_bmapV1_inode_getblkV1_block_getblkV1_minix_getblkV2_inode_getblkV2_block_getblkV2_minix_getblkV1_minix_read_inodeV2_minix_read_inodeV1_minix_update_inodeV2_minix_update_inodeminix_update_inodeminix_fs_typefile.cminix_file_operationsminix_file_writedir.cminix_dir_readminix_dir_operationsminix_readdirsymlink.cminix_readlinkminix_follow_linkfsync.cV1_sync_blockV1_sync_iblockV1_sync_directV1_sync_indirectV1_sync_dindirectV1_minix_sync_fileV2_sync_blockV2_sync_iblockV2_sync_directV2_sync_indirectV2_sync_dindirectV2_sync_tindirectV2_minix_sync_fileminix_lookup__mark_inode_dirty_R8e8c6e94lookup_dentry_R9ebaf499minix_bmap___set_bitminix_symlink_inode_operationsminix_creategetblk_R0cac240bminix_new_block__this_moduleminix_file_inode_operationsdput_R154d7397__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7minix_mkdirgeneric_file_read_R2cde3e44__module_using_checksumscleanup_module___atomic_subminix_dentry_operationsstrnlen_Rd9ce8f0cminix_count_free_inodes.udivminix_free_inodeset_blocksize_Ra842722astrcpy_Re914e41e.divschedule_R01000e51global_event_Rcaf51008init_moduleminix_truncateblkdev_inode_operations_R347c22fafile_fsync_R93c099e2unregister_filesystem_R3a9d7a75mark_buffer_uptodate_R2f9b9072generic_file_mmap_Rb4307b40minix_breadregister_filesystem_R8b74f3d0get_empty_inode_Rc01ab9f4printk_Rdd132261generic_readpage_Rb596983f__wait_on_super_R3bc4cf62minix_sync_inodell_rw_block_R08ea67abminix_mknodstrcmp_Re2d5255a__wake_up_R8a4864fa__wait_on_buffer_R8468a33aminix_count_free_blocksmemcmpchrdev_inode_operations_Rb299eecfinit_fifo_R7fea633bminix_free_blockinit_minix_fsinsert_inode_hash_R9289e3e5kdevname_R160820f5__bzero_Rdd42e263minix_new_inodeminix_linkrefile_buffer_Rce9d3f7eminix_rmdird_delete_R8309cde3clear_inode_R88e1ce5bupdate_atime_Rf62a968c__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.urem__brelse_R9bb16e38___atomic_addminix_unlinkminix_dir_inode_operationskfree_R037a0cbabread_Rdb41b5aeminix_sync_fileminix_renameiget_Rbb5d76f6d_instantiate_R15af7404set_writetime_R7a99c921.umuld_alloc_root_R57d6f53eminix_symlinkminix_getblkupdate_vm_cache_R316a00baxtime_R3cb6ce39get_hash_table_R11b6979cELFh4( 㿘@ 㿘@㿘N@ . /  J`  A)%$@ ;. @: ` r @ 2ذ?ꀧ s?@ )?  s"ɰ?  : \ .  .   . ?`? ``?,@Ţ`. ?>  s  .@ .`0 .@ ` .2 .W$@   ,@`$@ $,@@> +)$@ 8r@``@ 2l?ꀤs  @ 2c?ꀧ (`?ꀧ : \ .?sT? s"N?  `?  `*@2=?>  s$@6?$@   ,@`$@ $,@ `% NJ@  NJ`  NJ` `@  a  2 㿈 h2` J ` @ `N@ . ` ? `?㿈 T`x` J` 3 @ `Ӗ   2` *`@?@ ?&` x T x 3 N @` 2` ؙ3 N  2 ` @  @㿀 h&`P`@'`D  '䀢`@䀣`@@'`@㿘 h @ 6,  $ 8`$ 4@@ `  *` \  `  *`  2`2  4`@`"@ hh`3 M` `@%`D A'`@ @ . O .@ ؐ@ @(?#\ 'h@ذ@   & 4& 8& 0@@ 㿈`h'``@`DΚ谒 +``@'?@ #?*@ @4 $ $`4$`8$ 8`$?4`$ `2`@` @@@h h`3 M` `@`D '`@ @ . O .@ ؐ@ #\  ' h@ئ !@ $4`$8$0@ $  5 $4$'@ ?m'@ $$8 $4@`@  , !?#  2`*  4TĒ *  2 *44@$   2`2**   44 `@ ,  ƒ  2*  4U Ĕ *  2 *4@ 4$   * 4 2`* 44@ @@/'@ 4$ % 4% 8$8 $?5 $`2 @ @?*@ @@@@?'԰?㿈 h'``@`D耢 !?*@ @@4 $ & 4& 8 $ 8@ @@ p'' "<  `h`?``l@耢 ``@ `@ذ   @ @@ 1#\ۘ谒 v1 ` &D& @?-@\@ @ @    ?$   @ ! & $`D `$`8`$`4@` `$?7`$ `'`8@䀢 3?ƒc 2*  3 VĖ *` 2`* 2@ `$` 4`$@`" $`$`?` 7`$ `6$@ @@0 ?ꀤ   ?$  @` "`$`D`$`8`$`4@ Ph 3 L `@`D 4 3 L @D )@ @ . Oؐ .@ `@ `.Ԗ@Ȱ #l#d#h#\#`@㿘` @` `㿘  @` &`  7$ @  4  @`  &`  ,$ `"P㿘@㿘@ msdosCOM4 COM3 COM2 COM1 LPT4 LPT3 LPT2 LPT1 AUX NUL PRN CON . .. msdos_mkdir: error=%d, attempting cleanup <4>MSDOS: %s/%s, get dotdot failed, ret=%d msdos_create_Rad4db8camsdos_lookup_R9f91155dmsdos_mkdir_Rcacc7419msdos_rename_Rb310d326msdos_rmdir_Re2e913demsdos_unlink_Refc5713amsdos_read_super_R2f30c0c2msdos_put_super_Rc75f8adf*?<>|"+=,; GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4!  ,D44@>" MxVH\" glzu({*#! )? : ? Sh Hl P H] P]  H$ PH HL]l Pp]D d h t GX^F X X4_LPXWt'D` ` !.HE`B^'H_X'h` t` !W% $B ,< 8` <` h! ! M ' ^ l_ |` ' ` ! N ' ` !  $ (. E   . (E tB ' W  ;  ` ! ! B ' $< ,Q <' B < ' ` ` ! !Md^ %  ^  ;5 05 45 H5 L<dBl<I5 !5 ` 5 ` !` !B!!' 'L5 P!X5 \5 `` h5 p` !D^'& & -& & UK  K ,,< P-l t X| XL? 9? TZ7 >J(82 [$C(V,/0=438Y<"= x$h(X,H084(8<\`,p$tTx7VJ[8     %-4<HFPT,fqt|,X48Um{0(  'xHNoH  +IZo`;Uqx0 pX3 K^msp@ X :P8tmsdosfs_syms.cgcc2_compiled.*ABS*namei.creserved_namesbad_charsbad_if_strictmsdos_format_namemsdos_findmsdos_hashmsdos_cmpmsdos_dentry_operationsmsdos_add_entrydo_msdos_renamemsdos_put_super_callback__mark_inode_dirty_R8e8c6e94__kstrtab_msdos_put_super_Rc75f8adf__ksymtab_msdos_mkdir_Rcacc7419fat_dir_operations_Rbecd094afat_dir_empty_Rfb48af8c__this_modulefat_brelse_R7c880e22__kstrtab_msdos_mkdir_Rcacc7419__ksymtab_msdos_unlink_Refc5713a__module_using_checksumscleanup_modulefat_read_super_Rf4e01055___atomic_submemcpy__kstrtab_msdos_unlink_Refc5713a.udiv__ksymtab_msdos_create_Rad4db8ca__kstrtab_msdos_rename_Rb310d326__kstrtab_msdos_read_super_R2f30c0c2.divglobal_event_Rcaf51008init_modulemsdos_lookup_R9f91155dmsdos_rename_Rb310d326unregister_filesystem_R3a9d7a75register_filesystem_R8b74f3d0printk_Rdd132261fat_detach_R4a828bd8msdos_read_super_R2f30c0c2__kstrtab_msdos_lookup_R9f91155dmsdos_fs_type__ksymtab_msdos_lookup_R9f91155d__ksymtab_msdos_rename_Rb310d326fat_mark_buffer_dirty_R43ec254b__kstrtab_msdos_rmdir_Re2e913defat_add_entries_R770945e3fat_date_unix2dos_R83fb36a1memcmp__strncmp_R8c5ff0fd__ksymtab_msdos_read_super_R2f30c0c2fat_attach_Rd86941fbmsdos_mkdir_Rcacc7419msdos_dir_inode_operationsinit_msdos_fsd_delete_R8309cde3fat_add_cluster1_R1e4de202__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.uremfat_put_super_Rad06b614msdos_create_Rad4db8ca___atomic_addmsdos_unlink_Refc5713ad_instantiate_R15af7404__ksymtab_msdos_rmdir_Re2e913demsdos_put_super_Rc75f8adf__kstrtab_msdos_create_Rad4db8camsdos_rmdir_Re2e913de__ksymtab_msdos_put_super_Rc75f8adfstrchr_R349cba85fat_scan_R39dc1145fat_build_inode_R5f32ee2cxtime_R3cb6ce39ELF4(? hD8 ` @ @  2* "` 㿘`@22  h`D 8 ` @ @#   @ @   ``    @   @    *@  㿘  @    "`"& &   @*`     p@ &`? ! @' hD @  h@D  ' hD @p`@ &?! 'hD @`?       h @'D@`?`2h  hD@ ` ` 'hD @Ѐ` h'D@Ё`D  * 2  2 ` * `#`Ȥ` 2 h0`D  `@@, hD   ,``?`) ⠀ ✢| ```z(?//` @  2 @9  8      `?⠠  ✢x ```z(?//` @  急@ H ` @ "  h D `8 @ ܀`       `?⠠ဢ "✢t //` @ `@`Z( ,  2 `@ @x'H'`'L`h?`D   C';` @9 ? '@#  ' @ !; " U'  @``H L@ & ;  > ;2` ` `  HL@  ;  >` `@*  `@ $       aX @ "a\\   `2;  `h  D ` ,`@`?  @ @ @ܖ @ ;7`" '\ ?$  " ` ;7`` ; "" @ '`H  `h D``8 @H `       M `? ";// @  ` @ Z(` ,  2/;`\ =;'@9`!X L M' @@'쀢 @  @L@H ;` `@ `@  ;``B >a\@ \ϰ!\;` @V܁h` @   @Ȁ @ "` @@ 2`&X\ ``?&㿘`@  %"`" `" $"`@ 216,) !X!U@ 2! !\. . . . . . . . .@a\$@a\ $&0 "    `2"` 㿘! @$ 㿀  Z "?" ```z(?// @   @ ̀ 4!!"  " // @ `@`Z( ,  2 "0     !" "!" Dh * `D2  2  `* # ``` ?@@1,   @5  @ *  @ $  %@  , @*`"@*`"@*`@ M @@!M   @  2'hD   ,``?`) b b| ```z(?//  @  2 @9 ਐ8      `?b  bx ```z(?//  @  急@ 2Ih D਒`8 @ ܀`       `?bဢ "bt // @  `@`Z( ,  2 '@ 'h@  ?`&P@@ 㿘@@ & h@ ?@  ha@D`Dh*` D2``2` *`# h \?`@@`Dh, `Dਐ8      `?✠  ⠢| ```z(?//` @  急#\ @# ? #\ @"  " ?0 '㿘@ `Dh* 2 `D 2  * # `h`O?`@ @`Dh, `D8      `?✠  ⠢|` ```z(?//  @  急`h`D?#\c @ ?㿀`D`h* 2 `D 2  * # ```h?``@c?`@ @`D`h,@ `D`8      @`?✲  ⠠䀥 @ ```z(?// @`@ 急 `hD@  6? "? ?0?  ?0  ?0 @ ???㿘 h?D `  D``" D` "D@  hD@     h D`,  6 ? "? ?"? ? ??0 @@0??㿀 DD * `h2 ` *`2 2`D* `#2` `*`# `? @@`h,D`8      `?  䀥 ```z(?//  @  急@@h,D8      `?   ```z(?// ` @  急`hD@  ? `h D`,  "?  ??0@@0?*` ("*` (㿘.`2 . 2 2`? 2` `?(*`"+"  *  . * * `@ (* * :` @ @ $  " .E* @*`" *" * 㿘a "@ <4  < @ <@ <* @.@ * T6@@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6@v@@@@Nj@@@ ( ?@ 0S h  ?@ , `! 26    ' h ''D #\  @# `` 0 h 'D #\   ! h 'D #\  "@ 2 @  2  # h!0@*㿈   V?hD `  O?"<  H?D @ ?h  D?`@ 3! @%@&8h, `D2#\#`@ @@ @<`>h "  $0@?㿐  hD `  d?"<  `?Y @  " $V ,h  D@ 1G?/?-?@%@&8  D`@ @ , h`D2@ @@ א@<`$4$0>,@  $, @` 㿘`4& `0 & `8a]& `H & `& aP& aT& aX@& 㿘 h k`D``*`* `*`@  & `"66 "P& ,4!?6 "` #` *` * ` *  @ @ ?+  @ *` 2 2` & ,, `"4```*`*`@ * ` 6(` " @ ` ` o?  " ` "!$3` I@6 "` ? "#m @6 " ,& @  !? <`"`@? & @`#`*`*` @  * 2*`2 @ * *`2 @2`& 4``*`*` @  * 2*`2 @ * *`2 @2`& 8`$ `%*@ *`2@ *`@2`& 0`4`5*`6*`7 *`@  & `0`1*`2* `3*`@  & `8`9*`:*`; *  @& 㿘 h`` D6"6 "& ,P!?4!?6 "` #` *` * ` *  @ @ ?+  @ *` 2 2` & ,, `"4```*`*`@ * ` 6(` " @ ` ` o?  " ` "!$3` I@6 "` ? "#m @6 " 6 $0"6 &2 ,6 (& <6 *`& @@" & @`#`*`*` @  * 2*`2 @ * *`2 @2`& 4``*`*` @  * 2*`2 @ * *`2 @2`& 8`$ `%*@ *`2@ *`@2`& 0@㿘 `@ 0D "<   & d( & d2& d & d㿘`!@     @`#$`@@$` @ @  "2 $㿘 "<  2 @  @ @ @㿘 ̘ !    A*`*` *`;*`*`*`*`*` *` *` *`0*`1*`2*`3*`4*`5*`6*`7*`H*`I*`J*`K*`8*`9*`:*`*`*`*`*`$*`%*`*`*`*`L*`M &"&@`@!d()   @``  `@ t`` `*@  $ <`0"    @ . $`! L& . & $6 & "@  "@"& D $`|$`$`$`$`,`$b0$b4$b8$b<$bX$b\$b`$bd$bh$bl@$@`$``$`` $` `$``$``$``$`` $` `$$`$`(` $`(`,$`,`0$`0`4$`4 $`$@ `4 `6 a !@  4`44`6,bp@,b@$b/$b$`/@  f$`@@@ T`$ @  @$ 4 2 $b8 @$ 2( ̐`8* @ "@ & ,$b0 ,   "`P 0!. @ #0I@ @0@ @@@` @`@`0@ @b@b D@"0@ @ 0!. @ #6 @   @ 6  @6   @`   `㿘 D@@@" ""@$"" @$"@ |  @ "l ""`@"h"` " @"\ @  D@"` @`  `X?"L" ?'''''Ȁ'D`@ @ ? hh D ?  ܐ@ @?` 0@` 2@ƀ?`"@@ &@D "< @  hD``6 #?! @/'@"@)'Ѐ@" ,?# ` 4  ?! @@"@'А I ! 4*!$  '@ @@ `@?֐# @  2  `**`2@ @77Ԁ @ `@?ސ# @  2  `**`2@ @77܀ @ `@?#  *2 7쀤`hD@а @? 2@@$@ @  6h?`D `  @@ @`㿘@ 㿘 "" "@" @㿘@@ @@@ @`h "`D @  "D  2˰?D` ?&  ?""9 ""?0"*"˰?0 "  " . "а?00 " "?0~0 " i?0x@  "D  @o?D5 @   _?耢 Z쀢/WD ? N/@  G?􀢠 D   @ @3?@$ $  @@/怢 6 ?@  D   @ 2?@0@  ""4  @?"4 ? $"4@@  "D  @?D5 ?  @ ( 2Ӱ? 7 ' `'`''D @ ( @  "D  @?D ?    60@  "   @?    8!' ' '?'''D` @   @  ""4  @m?"4 i?D` @   Y?  ? A$!, $  $!M?@ E?"0 `=$"4`< !" "!5"@  ""<  @+?"< '?"8  D` @    ?"@@ "H@  $"<@  "D  @?D` 9?"8&5 @  "D  @?D` ?"<  ``ٰ װ?ꀠ@ $"8@  "D  @Ȱ?D` @    ? ?  ! 6   0 ?0   ' '@    ?`"<  ?` ?! `h`D@ 4 w    `h`D@ 4r?d@  ""4  @Y?"4 U?D` P@ *  * E?P  @P e:?@e  @e 2 "@*?@""p"$"$"P@ * @ @ D` "p@ *J G * ?㿐 0 `@ 2 ; p % ,&@@@  " hD @   @$$@4 h.``D2@@ 2'@*/"@@@ hD?`?ꀢ<" "  ?󀈠"0"`( 㿐a$"@  &  & 7@   & *@   a  & @ " @`@ !@4& ` @ @' x@  $  $ 7@   , $ *@     $ $ * `$   @ D `@ &  @` &  @`&  @`&   @`&  @`ܐ&  @`$۲.@  ڒ`%@ ڀ? @`& @㿘 h&  D @  $ $ *    $ @     B @$ @㿐  *  '  & @  &     *    &    *  `@& `4   *     @&  &   *@   & 㿐``@ M?@  & &  *  &  8& *    &  *  7  @&  ?  ' & @   &    @ W   @ L TM.L T@ U T,@ @㿈@  & &  *  `&  8& *    &  *  7  @&    ' & @   & 6   @ W   `<@ '@㿈\@`  & &  *   `& *     & * `  7& @  ? ' & @   &    @ W  @ `8@ $` `<@ $@@ 㿀@  & &  *  7  & @   & *  `&   W@ " @#  `@    ,  , " *`   @#\#` ` Y 2  8*@ X. &!& &!.  㿈@  & &  *@  & *    & +    & +  & +    & + '  @&     & *@     & * `@&  4   *    @&   &  @ W @@!M ` @ 222+( (@  2`2`2`.4.5.6.7.0.1.2.3  @`.8 .9.:.;@@ & &  *@ 7  & @   & *@   W  & @ " @$  `@    ,  , " *`   @ 8*@@.L@M !  ...........$.%.. 㿐`@`  & & *@  8& & *     & + 7 & @  '  &  @   &  @ &  && F   @ W@㿐``2` `@&` &`&` * ``&`* `  `&`+`7` @&``  &` ` ``@ W@0 㿐```8 @ 1' V@` $`$` * `&``$`* ` `$`*`7` $`@ `$` & @` $`$` * `&``$`* ` `$`*`7` $`@ `$` ``@ W@x\& ;`0``2&@  & &  *   8&   +    & + 7  @&  ?  ' & @  '  & @  7  & @   & K   @ W 8 $P `@ $X  @` 〦`,\  @ L ZM,L Z@ [ Z,@ X]'ܐ_@  ?#  *2`  *  *2 4]@㿘`@`  & &  *  `&  8   (   & (  ` &   @ W  `@ @㿐@  & &  *   8& @&   +    & + 7  @&  ?  ' & @    & @   & @ `2  *@  *   ` & *   * & *@   &   @ W  `@   @ L ^M.L ^@ _ ^,@ @㿈`?ꀦ `@  & &  *   8& `   +    & + 7  @&   & `  *   & ` '@  & *     & + &   +   &   '@  & *@   & *  `@&  4   *     @&  @&  4   *    @&    W @& @㿐@  & & *    & @  '  & @  7  & @    &  @ H  `@ '@ `  @@㿐`@\  & & *    & @  '  & @  7  & @  &  H@@ !`@ .2 ? @'@ D`  @  2?㿐@  & & *    & @  '  & @  7  & @  . 6 & @  &  @ I "'@@㿈@  & & *    & @  '  & @  '  & @  7  & @    &  @  @ @㿐@  & & *    & @  '  & @  '  & @    &  @  @ @㿐@  &  & 7@    &  @ ! " @`@ @4@& 㿘@  & & *   &  @     & @ B@㿘@ 㿘&@  &b@ "@ 2 ?@X@   '''''''`@П@X ?ؠ''''''@  ''d䀢' @  `<П@Ā @` 'L  |'P/ / / / / / /  @ 6?@ L $  ( Ho`@' ,a  ' "`4 "`:`?"`"@堔+ *@ @ "`D !D'' ! 耊 2@쀤bX`"X@ "X@ܠ`?H/`  ` 2"` @!` .&{ ,  ,`@ m  ܙH/`  ` 2"` @!  B  ??>M H  &!@  ז @ "Xu " #3@!@ʀ@ˀ@̀@ @ L  @Mؤ,` D @LP @   @0  @ @ ?Ho`И!!%%%%* *@ @ # `!D㿘 'H@ ?  ""<? @HH 6   .  㿘   3  "+ + ? , +  +    2 + + +    ?, $ , $ 㿘` , ,,`  , , , , , ``   ,`  *` 4`㿘  U** ?`* * #*   @ 2`***  z 㿘  @ @  & 㿘  @ 0 &  @ @݋@@@㿀 <"( @@ @`?@   @V?(@ "@   hD "@䀢 䀢 [@!l@`!>@" ,@ @@.?@*?h` D `b b //` ,  2 @@㿀 < "( @@ c?@ "\?@  2 hU? D "@䀢 2I?䀢 [!l@2=? ː!>@", 5? h  D b b//` .  2䰂? D`@ @ 2?@㿀 h D,`@W?@ O?@  H? @ :[`ː!l>$@$``@`hD `b b // @  2 `h`D, `2 @ @?@ H  ```@(`.`.  (`"` ` ''   (( . -  @ `  *` *  `.  /` @  +. / .`     /@(`0(/ @0(@.@ 0( *@0 (`` `מ   0  (`0( @0(@ 0( @ @@ 0( `` `Ϟz㡞  (`@.0((@0( @(@ 0(  . 0(``Ҷ - (@(06`0+ + ++    .  @ (.`+ 0.0.0+    `.  `@ (.`+ 0.0.0+   .  @ (.`@0+ .0.0+ X@ @"@@ @222////€ 4 48 4 @`"H @ @@&@???<4>ncp_readdir: no MEMORY for cache ...<3>OOPS, we expect fpos >= 2<3>ncp_make_open: got NULL inode <3>ncp_read_inode: invalid call <3>ncp_iget: info is NULL <3>ncp_iget: iget failed! <3>ncp_delete_inode: could not close <6>You need to recompile your ncpfs utils.. <3>ncp_read_super: get root inode failed <3>ncp_read_super: could not get bufsize <3>ncp_read_super: Failed connection, error=%d <3>ncp_read_super: could not alloc packet <3>ncp_read_super: could not alloc ncp_server <3>ncp_read_super: invalid ncp socket <6>ncp_read_super: kernel requires mount version %d <3>ncp_read_super: missing data argument ncpfs<3>ncp_obtain_info: invalid call <3>ncp_rpc_call: socki_lookup failed <3>ncp_rpc_call: send error = %d <4>NCP max timeout <4>NCP server not responding <3>ncp_rpc_call: recv error = %d <5>NCP server OK <4>NCP: notice message: result=%d <3>NCP: just caught a too small read memory size..., email to NET channel <3>NCP: result=%d <3>ncpfs: Server not locked! <4>ncp_lock_server: was locked! <4>ncp_unlock_server: was not locked! ;Zx0NGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4zl!" ,z3p$ ?zGx R` bxh s x% 5 * t ph  |j    Pl<xs`00{D  }       (0 (8 (X t  0 0           D  h  l  x           (  ,  4 8 @  D  L  P  T  X  `         l  p              H `  x |   8   8 o   h 8 l p 8               $ 0 |                     (     ,}@ D X \ l p |      ~     (8Ld<p4l hH4s    H T 8 T \ p x  !L !d !h ! !!""8"d X"h"l X""#`#xk#$,$Xv$|$$% %$ %( %D%&v&,&Pw &Xw &pu&&& & ''~)t)t*,t*`t,-t-pt-t-k- - - -- . . .( ., .D .H .d .h .l.p .| .}. . .. .. .. /4/L/\ /`/d /h04~0Hq 0Pq 0\0 X11( 10 1Lv1\ 1`2, 2428 2h2p2v222233 p383H p3l3| @33 @3 3 333 @333 p3334  4 44 x4, 4044 484@4Lx4X4\ 4`4|44 04 04 X44 4 44q 4}5555(5D5P5`5xx5x5x5x5q 5q 5}6 w 6$w 6<u678L899Xy99 9 999:  :: :$ :( :0 :4 :< :@:H:\:d :h:l :::; w ;w >>T>d>w >w >w >u?w ?,u?@?lw ?pw ?w ?@ w @$w @<u@X@w @w @uA A`Aw Aw AuA~A~BB@w BDw BlBw Bw BCw Cw C4uCD<DDDw Dw EuE0ELEhE|EE~EEEw Ew FuFHFFFG<G G G G G GHnHHH\HtnHnHHHnIHIdnInInInInInJ nJ$J8nJXJdJJ~JJK$nKKL LL L$LnLnLMM4MDM\MnMnN4NXnNhNNnOnOPOdOnOnOOP nPDPXPxnPQ`RnRDRRRRRnSLnSlStSnSSTnTTTUUxnUnUUVV0VnVVW@WnWX<nXxXXY8nY`nYnYnYZnZ nZDZ`Z~ZZ[l[~[[\n\@n\`~\]~]]0]@]|]n^0n^n^__$_`____~_n`n`<`Xn`x```~`nana8aDa\naw aw auab~b8nb\nbbbbc~c$ncHnclnccccc~d ndDndddxdddnddene,eDex~eeeeif if@lfhifggDgg hh h `hh `iL HiPiT Hi\ij `j j$ `jj j k kk l  l  l l4 l8 l<lL lPlT lX 8l`ld 8l Pmm Pm8o }o@ poDoH pop otox ooop rp p4rpLpXvpprpprqhqqqvrsw sw s(usDsxsvspstttw hw hyy~z$zP~;,?Bd;$? B\B$T,TX,\dhlLpxh #%\ 0"LD-./45mF48q<o     "* 0<CPTT\, gdr8}Ldhp L % , 7 L XT[ h x  \@"L"L#%\<'8,-. /d14?5JV _*l/xz:F4F4GJMX NxTf|f|\ fgP#l2o<qIoYtjhstz]PL'8\V0DH&t5CRepe$  'd:X -;Bn(|NJt^dub:GaZ _: 8&TN]m"Tp(TX*DyP@fx4o\L.XV4+=Q\Okx6d: |K\d  $ 3 9  K P ^ nO  DX mx  e@t     " :XH YsT ec } X    nl  (, ;[ Y`L i oL GP  dir.cgcc2_compiled.c_devc_inoc_entryc_semncp_dir_operationsncp_dir_readncp_readdirncp_createncp_lookupncp_unlinkncp_mkdirncp_rmdirncp_renamencp_lookup_validatencp_hash_dentryncp_compare_dentryncp_delete_dentryino.584ncp_force_unlinkncp_force_renamec_last_returned_indexc_sizec_seen_eofncp_read_volume_listncp_do_readdirlast_dir.605total_count.606seq.607ncp_instantiateday_nutc2locallocal2utc*ABS*file.cncp_fsyncncp_file_readncp_file_writencp_file_operationsinode.cncp_sopsncp_read_inodencp_put_inodencp_delete_inodencp_put_superncp_statfsread_nwinforead_semncp_set_attrncp_init_rootncp_fs_typeioctl.cmmap.cncp_file_mmap_nopagencplib_kernel.cncp_add_handle_pathncp_obtain_DOS_dir_basencp_ObtainSpecificDirBasesock.c_recv_senddo_ncp_rpc_callncp_do_requestsymlink.cncp_readlinkncp_follow_linkncpsign_kernel.crbit.408nwsignlookup_dentry_R9ebaf499ncp_RenameNSEntryis_bad_inode_Rb9e5f7b1ncp_update_inodencp_del_file_or_subdirncp_read_super__memmove_R60e2f255ncp_get_volume_info_with_numberncp_create_new__this_moduledput_R154d7397ncp_ren_or_mov_file_or_subdirncp_date_dos2unix__copy_user_R9c5239ebkmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5dncp_modify_file_or_subdir_dos_info__module_using_checksumsncp_update_inode2cleanup_module___atomic_submemcpyncp_connectncp_make_closed.udivstrcpy_Re914e41encp_LogPhysicalRecordinit_ncp_fsncp_negotiate_size_and_optionsncp_write_kernelncp_initialize_search.divschedule_R01000e51__scm_send_R87874fe9ncp_read_kernelinit_modulencp_modify_file_or_subdir_dos_info_pathfput_R6db7a23bvfree_R2fd1d81ckill_proc_R932da67encp_make_openunregister_filesystem_R3a9d7a75register_filesystem_R8b74f3d0printk_Rdd132261ncp_file_mmapncp_dentry_operationsncp_dir_inode_operations__up_R4506727e__wait_on_super_R3bc4cf62sign_packetncp_invalid_dir_cachevmalloc_Rd6ee688fncp_invent_inossys_tz_Rbafebf71strcmp_Re2d5255a__wake_up_R8a4864fancp_unlock_serverncp_igetncp_del_file_or_subdir2ncp_conn_logged_inncp_init_dir_cache__strncmp_R8c5ff0fd__bzero_Rdd42e263ncp_lookup_volumefind_inode_number_R4f79368f__ret_efaultncp_notify_changencp_ioctld_delete_R8309cde3ncp_obtain_infoncp_negotiate_buffersizeload_nls_R68517502clear_inode_R88e1ce5b__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.uremncp_date_unix2dos.rem___atomic_addkfree_R037a0cbancp_mount_subdirunload_nls_Rfa6dcd9encp_file_inode_operationsncp_request2strncpy_R328a05f1ncp_close_filepermission_R218f2a48strlen_R97255bdf__down_R7356f38eiget_Rbb5d76f6d_instantiate_R15af7404ncp_open_create_file_or_subdirncp_symlinkncp_ClearPhysicalRecord__scm_destroy_R2850e692ncp_symlink_inode_operationsschedule_timeout_Rd62c833fd_alloc_root_R57d6f53e__get_free_pages_R19d9ac40ncp_disconnectinode_change_ok_R14215b4fncp_free_dir_cachencp_search_for_file_or_subdirncp_read_bounceload_nls_default_Rf21352b1ncp_lock_serverncp_mmapxtime_R3cb6ce39__memcpy_Rbfaaaa73ELF(4( 㿘 `L?ꀦ`I`4  ` @   `"`""  @ ࢒ -?, 2@  $ ! @@ @ ! @  @㿘'  @`` `@`@Ɣ p!h!p%"  @@#!H@.&!H@@ &!THo`>?""%%%%* *  @ # H*o`@@Ho`>?""%%%%* *  @ # H*o`@c"`    `2`*`@ 2 " @ 2 @  @ @!  @@@ @@@ @`  `㿘% !< @!@' $ @`@ @ "   "  ` 2` `& !L 2!@ @  @ @  @@ @!L!P!@` !"! `&!&!"`!< -`(!!P # @  @k @  @g  &@ @a`@` @] @d@@f@@@@"@@>@@A@@b@@f@@@@@@@@@㿘@`@"6  ' @&@㿘 @  & ?$?"㿘 @   @ "0  a@   `","0"4㿘@@@@ "`㿘)    @`  ``2``@? !! `'D@ ?򀦠  (@  ?􀦠 @   D@ ?@("@ u ?#@jX , € @ G@ C@ ?@ ;@ 7    ? 8.?@@   ;  *` @    ?$? 8?@@  ?  @@ ?ꀦ   D @ `@` @  @`  `㿘` ` @` ` @` `㿘@ `"  㿘` G `D` @    `@ 0@" @ @  @  @ @@ *"@   " 㿘 ``  @`` 2 `* " @ @ @@@>`>` >` >` > `(>(`0>0`8>8`@>@`H>H`P>P`X>X``@>`㿘 ``  ``h@`t` 2 `* " @ @ @@@>`>``h>`>` > `(>(`0>0`8>8`@>@`H>H`P>P`X>X``@>`㿘 `" `h`  `@`h`h`l@@㿐 `" ` @  ] $&@@㿐 ``  ``l@`h @ `l+     @ +  &`l&h` 2 `* " @ @ @@@>`>`>``h>` > `(>(`0>0`8>8`@>@`H>H`P>P`X>X``>``h@ 㿈 '``  ``x@`l` 2 `* " @ @ @@@>`#\>`>`>` > `(>(`0>0`8>8`@>@`H>H`P>P`X>X``>``l`x @`t㿐`p '  `  `@`h@   `$@`    `l  `hJ@ .2 `hJ` .`h@    @ 0 @   `"  2@ <   /``" @ @ `* $  $  `<`" @ o   `e @"c`   @ $54  @  @ @ ,2  4   2 @"<   $` `"< @21` ,`*2 @2)` ` ,2 #\`h#``l@ @2`  `h @   $@` 2`*@ `* /` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@ @㿘 `"`h`  @`h`h`l@?@㿐 `" ``  `h`@``ܠ`p#\`h`l`@@@㿘 ` `h`  `@`Р`h`А`Ԓ@@@( `" `  `h@`p@ h`x#``h`l#\`p@`t@@㿐 ``  @`h "`p@ `p#` ?&`p`h`l#\`p@@㿘 `"`h`  @`h`h`l@@㿈 ``  ``l@`h  `l3  ? '? ''`h #\ #`@&@㿘 `"` @ @@㿘    2  ? @  @@㿘    @ $ "@,@ $ ?( 9? "<  2 d .? * @  $` ?'''' 5`     @? $€㿘@  `$! @ @A?@  "   `   T $ @ @&?  @   2 @ Ȑ "@0@ Ȑ@  `@& 0@?㿘 `@ @  `@ @@ 1?@,("`"@& @``2" " 5  ?& `0`0 ?  (`0@2`@ ,  `@@ @ 2  㿘`@ 2 7? d €  "`#$  '$    @ Ȁ ?Ȁ"  & @ @ " ? `@&  "?@㾈`'`L  @ ";` @ 2 @, Ȑ ("Ȁ@ Ƞ 2`@ `@ ?@`  `  @@` `L@`2㿘/`  0"` ? @``?|   < " @@ 65 @ 2 `@ @@@@ @n  ` "` ` @` "'< !/ ` "```sV m` g? " b` ` `?$XE ` " "& & @;`  "` &0@; 5?` "  " "@""  <q@ @ @0@@@ @` "`㿘) !`@ `@```@` `` ` `@!`@ `@ F@ "*`T2``@ F 2H`` "`@     @0@2  h |(`@<`"  ` ` @ @`@&`$&` `  "` "`$@ ` `$  `"<  6"<  2?S Q $G @D ` @1  "$  "   & "("`@2 ( "`2 `2  ``&`  F@  @2@`"`  @ F@`@0 @㿘 ` d d `@@  @  * `@ @@@ h`?& `  & d& d&&  <&  &  " "& d$& & $& ` "`㿘  "  <&  &  " "&  $$d  & @ 0@ @@㿘 `C * "/&  ( `@  "6 @ $ 6 B & 6 D (6 F , :> H <& T @& P *6 X 0& \ 4& ` 8 & d. (. *`L@M& @ " ` @` "`@ @`@@@@U@@c@@y@@@@@@@@@㿘  `     @ * 2 *@ '   @ @ @   `L@   )`  `4& 8`8 & <`, :> 0. ) . * ` 2 @``@"@? `@@  2 *@  * "0   (` @ `"6 @`$ 6 B`& 6 D`(6 F`, :> H`<& T`@& P`*6 X`0& \`4& ``8 & d. (. *`L@ 9 㿘 ` `  @@  2`$` `@ *`@ 8 d2- d"     @  d @     `T T@  ` J F$D @ @&@=  9" $@ |6`T T@(`!T@ "`d""`  T T 2  @  &@ `@@ @  @` @? @㿘   `8  `2 @ r n` `@  က! @  @ , g &@ I "  ,@`$@  =@ 5 h  €? " / 6   &@ &6  @ (@ 6&@&`"`!`  &6 (6&`  `  `  `@`*` 2`*@ '   @ @ @  `L@ ` `)`  `4&`8`8 &`<`, :>`0.`) .`* ` h""?`h @@M 2`  @ d " `  <`"` @` 2`*@ `* /` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@ u@;` 2`*@ `* "0` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@ A 2!`  `$$`@0@㿘 @ 7 ` < `" @ `$  @   "  @@ "    " 0 @   瀊&㿘@ b` `\ "<  2dh @ @ @ $Gd C ?@ 3@ `d ' ' '  ' $7 h"  €? 7 ' $   €  " @ ?' @㿘  ` 2@  2   @ @ @ "   $€  @㿘 `  @@    `L@ P (   `L@ I㿘  d@``(€ 8  @ {` u ` % `$` $ 2    " 2 `   $@4 $ " &$$  $ `" ?`'`'`'`'` '?D!D@`!D `   @&`&`&``&`А?&`&` '@ @@\  @  ``  `( `$ $d 2  2`  '` '  `  `@`*` `2`*@ '?   @ @ @?  `L@k` `)`  `4&`8`8 &`<`, :>`0.`) .`*?D !D1  @1 !D" ,  'x" s7|  `!`@x2!`` 2`*@ `* 0 ` `(` @  "6`@ $ 6`B & 6`D (6`F , :>`H <&`T @&`P *6`X 0&`\ 4&`` 8` &`d.`(.`*`L@ @ ?d "(# #`@2d!  @2d d@  !@ ! d@ d# !   d@ @$` 4   @  @@8  @ `$$``  `  `  `@`*` 2`*@ '   @ @ @  `L@` `)`  `4&`8`8 &`<`, :>`0.`) .`* "   (€`  #` 2`*@ `* /` `(` @  "6`@ $ 6`B & 6`D (6`F , :>`H <&`T @&`P *6`X 0&`\ 4&`` 8` &`d.`(.`*`L@1@㿘` ^Ȱ   N . N .@  `  d     `2`* &@ <`$@@     @ @@?0~    ` v@ @@0p@  @( @@" d0@ @   d `@ !! `2 dA? d @ `8 "7   /7  h ,€?, 2@ `$$`2@@ ? '@@0@㿘\ `     N .2 "` N ."`  "7 @  2` `  d` ` "` `   &@ <`$@@ 2l` 2` @ @ 2` @2 @  "3 d`  @ "M   "G` "C` <`" 2;  -'`423 `02/ `"2+ `, "(` %   V`$$`@@  !'' ' 7  ? '@` 2`*@ `* 4` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@z0@Ű㿘(@ ` ``d   ( @D!D`d( !D& @㿘` `  N .  N . @  ` `d     &@ <@ 2{`$` > `h" `d€?`d` '`$$` @ "!`  `$ ( / `@$4 @ 2` `$$`2 ` @` @` 2`*@ `* "0`$` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@`$@\0@㿘@    N . N .?@  `   $@ <@ y` =  <      @21` #, d`")` ` "%` h" ` €?d`   `$$`2 ` @@` @` 2`*@ `* /` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*`L@@0@㿘\@  @  `  <`     ` @  N . N . `O@ . `O` .怤`@ $@@ <֦ Ͱ?  $@ < L`L  @ @` `)`  `4&`8`8 &`<`, :>`0.`) .`*  )`   4' 8 8' < , :? 0/ )/ * @"?@` ``@@ 2`  $$`2` @@ `  ` @ ` `(` @ "6`@$ 6`B&6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8.`*&`d.`(  (` @ `"7 @`$7 B`& 7 D`(7 F`, :? H`<' T`@' P`*7 X`0' \`4' ``8/ (' d/ *@@  @@@ @㿘    N .  N . @  `   $@ <ض `2@ 0Ӏ?@ @0@` @ `* ` `(` @ "6`@$ 6`B& 6`D(6`F, :>`H<&`T@&`P*6`X0&`\4&``8` &`d.`(.`*m`L`L`L &    @i  @i` `)`  `4&`8`8 &`<`, :>`0.`) .`*  ?@@?&` `( `@ "6`@$ 6`B&6`D( 6`F, :>`H<&`T@&`P*6`X0&`\4&``8.`(&`d.`* L@$@  @"@ `$$`  `L@@  `L@0@ \ @ n]` Y ?@ @ ''''` L@ `  =@ O  @O`? !<   # ##" " "$@`   ?@  @0  @@㿘 @ ` ` h  `  D!D @!D 㿘`@   V<`"  @ @$ 2K `h "` "`A "2>  `! 5 $(/  `&@' `!`@2`"<  2 2@  2!` @ 㿘#`  `  @*`!@ "`$ $`㿘' 7!  * @* # ($` `   @*` *@ `@*`  * ` `  `$" * $`$@ $ @r@@Ë@@@@@@@@@@@@@@@@|@@ˋ@@@@\@@ @@{@@{@@ @@ @@@@@@؋@@ڋ@@@@@@ @@@@I@  `($P *`0$ 2$ 2$ 㿘 G"F $PA  `*  .`,`2 2`$2  *@`0& $@ 0 2$,`2`@ "  ,  "    2   ʐ `  㿘 (&`* $P@ "! $`"` `"@2 `  @0 @ @ 2$ 㿘@q$ ?@k$ )   @:` `* @ @I ?@   $$ 4$ 4$" @ |`? ?@"" @0t< @ ? @kh `?`  \@ 0Xd  P@ 0L   $$d $$ >@ 0:@  6?  @@ $$$$ $$`$$$$4$ 4$ 4$" P*`" d""d@`2d*`* $P $$@ @0㿘$  $P*`" d2@$"d@`2d*$ $ @$ @ @@㿘 ` @$P  & `` 㿘@c$ ?0( "" @ @K ?( * $P@@ 2 (@" 2@0$  @ 2` @o?`!  `   @,2`#$! .` 2 @.`2`@ $  "` @ 8? 2 ` .@ 0* ,@ 0# 2 @  @    @@ h@@ @ @?㿘!  @  ` `` "`㿘! 2 ! 2! "A 1   &  `@ `   ` ?& Ho`堔+ *@ @ "H* ?` 㿘!   `2`@ ` ?$ "  @ ## 222 ?(   2 @"  @""@  2  㿘 "  @ 2   㿘`   #` @`?`*   J`" ` `   @   2㿈'H'L'P'T`@@@`' P'/ "y LP@'@`@@`@@@@@@` @ C  -` 4`4`4` ?* ` ".7 2$3@@ @@`@` @ `  @@ 2 `@  /@ L '쀢  2| T  @L H@ P&4X@$ ?$ @ #`"?@ ? $@  o@$  @@$$ 0  @ ,  " ??  , @ @??,  D@0@$ &    $,  "$&,  $@`$    ,  @3 3 3 " @ ?" *@ "@ $`  `$`$@㿘@}$  ?@  ?ꀤ  @     @$@ @㿘@ Ր@@X    ,   2 2  ,``"`4  # "  ?, $@@ 2  ,  @ , 㿘 @ 㿘  J@ 2  &J@ *@ @  㿘 `@     ? "@ ""`㿘' @  `(@ 6     " `@Z`@2@? @"`  @aH]`(d?d 2d"22"2d 2`0d"2  (d"2(?#1d 1#"d"11? (   0 !?` !`h@`!`aH#aH0@ h`@''`'`'` ''``'`'' @    #@  F   㿘@@ 㿘@㿘 b@  "`  &  ``?  x?" * * " "" `c " # " "` "㿘'  %?#  2 @ D  2  "`$   "`" `" "  "` $ 2` "? ( ""   㿘&!X/!4 !D!<!@` 4``  "` ?* `  @)?! ` "!@`$2@`,2@`(@2@`02@! `4 < @ `@  F@@2`  `" ` `   $p`` `2``2&!X@ `  "`@  % .`&`$&`, `@ &`(&`0`t&`4``2.`@`D&`D.`G   `#  `4&`4I#@ `` 8!H5 @2`` @2, ` ` " `8     !"@!` &!&!@U`8    @ `.`@ % 㿘!X`=  `8&: "@@4/,``` ,0 @$`8@ `8 $ ,`$ @ې!H `2` `**` $` ,`,` $`4㿘 `    @   *` @ ` *@ $ `  $    "@:`@$  㿘@ h@ `     &@ :`@ $  0 㿘@ h@ ` Ch&h@ `?#@ &h2@`2 "@`2 "@`"  "@`@ `?"@" "@`@ `?`"! "`     &@ :`@ $  㿘@ h@ ` hl@  l  hJ/2   *     "  :`@ $  㿘@ h@ ` ` @&h` &l`&p&@:  $  0 㿘@ h@ ` ``&l`  &t&x @ &@:  $  0 㿘@ h@ ` `hl@ "l h J``/2 *`Cp&p@ `?#@ &p2@`2 "@`2 "@`"  "@`@ `?"@" "@`@ `?`"! "`     &@ :`@ $  㿘@ h@ ` Ehl@ "l h J``/2 *`(p@ h@ ` ؔ@  ܘ  J/2   *     "  :`@ $  㿘@ h@ ` (h@ h@ ` Д@  Ԙ  J/2   *     "  :`@ $  㿘@ h@ ` yhl@ "l h J``/2 *`\pt@$  t @ pJ N`@ * D&xx ?#@ &x22 "2 ""  " ?"" " ?"! "     "  :`@ $  㿘@ h@ `  @&h`&l`&@:  $  0 㿘  &@ : & `  @    $  㿘 < `"` @ D  0   &@`"(&`S`$ &``&`&` `( &``,$$&```,"`<"?`*"`@"` "`"`0""`4""`8""    # : & `   @    $  㿘@ ` O<  `"` @ D  0   &@`"(&`S`$ &``&`&` `( &``,$$&```,"`<"?`*"`@"` "`"`0""`4""`8""    # : & `   @    $  㿘 &@`   ?@&@ :&  a  @    $  㿘 < `"` @ D  0   &@`"(&`S`$ &``&`&` `( &``,$$&```,"`<"?`*"`@"` "`"`0""`4""`8""`2h  &@h`   ?@&@ :&  a  @    $  㿘    ?@&@ :&  a  @    $  㿘&@`&@`&@ `&@`&@  `&@ :&  a  @    $  㿘   "4  :`" ?  ""@& ?"& &   . ?㿘@ 㿈``  `     #\#`#d#h@ '&@ @&@ @&@ &&@㿘@ ` ""0㿘@  *"@   " 㿘 ``  @`` `* " @ @ @@@<`<` <` <` < `(<(`0<0`8<8`@<@`H  &&&&& &&&( @  ` `Dh $@  &(@&㿘 ``  @`  &&& &&& @ ` aDh $  ;#S!&&&&@&㿘 ``  ``p@`l`h 8  2 ` `l 6`  &0 `* " @ @ @@@<`< `< `< ` < `(< (`0< 0`8< 8`@< @`H< H`P< P`X< X``< ``p@`l&㿘o j &@ ` `@ ` "2 `* @<&@"(&`V$&`&&` (&`"  `,//&`` &`, ;   @  2* @ * , ;   *2  +         0 4 8   `&@㿘  `( }) &@0`  &@&`8`&@&`<`&@&`` &@`  <&@@(2 * &`@&`VB&` D&`F&`@ `H /2 HL//  H  P   2* @ * H  X2  Y         \ ` d  `&@` 㿘@ ` @ `$`    &@ :`@ $  0 㿐@ ` @ `$`eh&h@ ` &h``0@ `h &h``0@ `h &h``0@ `h &h@   ?`  ?  `  &? ? @ `  2 @ @` @ `    ! @`  `2@ ` &@`&   &@ :`@ $  㿘@ ` @ `$ hl@  l  hJ/2   *     "  :`@ $  㿘@ ` @ `$` @&h`&@:  $  0 㿘@ ` @ `$`  @  >h`  `>h @ &p`&@:  $  㿘@ ` @ `$`  @  >h`  `>h @ &p`@`&t@`&x&| @ &@:  $  㿐@ ` @ `$ hl@ "l h J``/2 *`"~ @` m&p  "j&r &t@t ` &t``0@ `t &t``0@ `t &t``0@ `t &t@   ?`  ?  `  &? ? @ `  2 @ @` @ `    ! @`  `   `   &@ :`@ $  㿐@ ` @ `$ hl@ "l h J``/2 *`e&t@t ` &t``0@ `t &t``0@ `t &t``0@ `t &t@   ?`  ?  `  &? ? @ `  2 @ @` @ `   `! @` `     #@ :`@ $  㿐@ ` @ `$ hl@ "l h J``/2 *`x&x@ ` &x``0@ `x &x``0@ `x &x``0@ `x &x@   ?`  ?  `  &? ? @ `  2 @ @` @ `  %   ! @`  `pt@/  t  pJ@  `*@     "  :`@ $  㿐@ ` @ `$ hl@ "l h J``/2 *`" @ &p```2hp&|@| ` &|``0@ `| &|``0@ `| &|``0@ `| &|@   ?`  ?  `  &? ? @ `  2 @ @` @ `    ! @`  `2p ?   @`&t@`&x   &@ :`@ $  㿘@ ` @ `$ Fhl@ "l h J``/2 *`*p@ `  @ `$ ؔ@  ܘ  J/2   *     "  :`@ $  㿘@ ` @ `$ *h@ `  @ `$ Д@  Ԙ  J/2   *     "  :`@ $  㿘@ ` @ `$` @  >h`? `&x >h&p`@ &t`&@:  $  0 㿘@ ` @ `$` @  >h`  `&x >h`@`&p@&t `&@ :  $  0 㿘@ ` @ `$` @  >h`   >h`@&p `&@ :  $  0 㿘  &@ : & `  @    $  㿘 2l ( 2 " `@ Z 2 `* @<&@"(&`P$&`&&` (&`"  `,//&`` &`, ;   @  2* @ * , ;   *2  +         0 4 8  `   &@ : & `  @    $  㿘    # : & `   @    $  㿘 2( &@`p@ `$(  &@ :`&    @    $  㿘(p#   # : & `   @    $  㿘(ِ p#p   ?  # : & `   @    $  㿘(p#t #p #p   ?  # : & `   @    $  㿘p#t #  #   #   # : & `   @    $  㿘 2  &@`&@`@p`$J  &@ :`&    @    $  㿘p  # :&  a   @    $  㿘y  # :&  a   @    $  㿘( t@ p` @   &@ : & `  @    $  0   >  # #`24 : `  -  . #?   $  $$  @&  c$ $`  @ h$ $ & &  㿘 㿘 㿘  &@:` >`: @ &`&@  `; @ &`&@ `; @ &@&`8 ` &@&`8 ` &@&`8 ` &@&`D`&@`  &@ : & `  @    $  㿘&@`'`&@`&@ `&@`&@`&@`&@`&@ `  &@&` `&@`&@(`&@`  &@ : & `  @    $  㿘 &@ `&@`&@ `&@`&@`&@`&@`  &@ : & `  @    $  㿘    #  #   # : & `   @    $  㿘@ 㿘@@p <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: creating service (%d) nfsd<4>nfsd: terminating on error %d <4>nfsd: terminating on signal %d nfsd_dispatch: vers %d proc %d nfsd: failed to decode arguments! nfsd: failed to encode result! <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! %ld fs/nfsfs/nfs/exportsfs/nfs/time-diff-margin<4>nfsd: incompatible version in syscall. <6>Installing knfsd (copyright (C) 1996 okir@monad.swb.de) nfsd: nfsd busy, remove delayed <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: GETATTR %d/%d nfsd: SETATTR %d/%d, valid=%x, size=%ld nfsd: LOOKUP %d/%d %s nfsd: READLINK %p nfsd: READ %d/%d %d bytes at %d <5>oversized read request from %08x:%d (%d bytes) nfsd: WRITE %d/%d %d bytes at %d nfsd: CREATE %d/%d %s <4>nfsd_proc_create: file handle not verified nfsd: existing %s, valid=%x, size=%ld nfsd: REMOVE %p %s nfsd: RENAME %p %s -> %p %s nfsd: LINK %p -> %p %s nfsd: SYMLINK %p %s -> %s nfsd: MKDIR %p %s <4>nfsd_proc_mkdir: response already verified?? nfsd: RMDIR %p %s nfsd: READDIR %d/%d %d bytes at %d nfsd: STATFS %p <6>nfsd: non-standard errno: %d <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd_iget: failed to find ino: %lu on %s fh_verify: Inode %lu, Bad count: %d %d or version %u %u nfsd: d_splice with no-root target: %s/%s nfsd: d_splice with non-DISCONNECTED target: %s/%s nfsd: d_splice found non-singular disconnected branch: %s/%s ..nfsd-fh: found a name that I didn't expect: %s/%s nfsd_fh: found name %s for ino %ld find_fh_dentry: No inode found. nfs_fh: need to look harder for %d/%d nfsd: fh_verify(exp %s/%u file (%s/%u dir %u) fh_verify: Security: export on other device (%s, %s). <4>nfsd: request from insecure port (%08x:%d)! nfsd: find_fh_dentry returned a DISCONNECTED directory: %s/%s nfsd: fh_verify - just checking fh_verify: no root_squashed access. nfsd Security: %s/%s bad export. nfsd: fh_compose(exp %x/%ld %s/%s, ino=%ld) <3>fh_compose: fh %s/%s not initialized! <3>fh_update: fh not verified! <3>fh_update: %s/%s still negative! <3>fh_put: %s/%s has d_count 0! <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! <4>fh_lock_parent: %s/%s parent changed or child unhashed nfsd: nfsd_lookup(fh %p, %s) ...nfsd_lookup: %s/%s impossible mount point! <4>nfsd: inode count == 0! <4>nfsd: wheee, %s/%s d_count == 0! nfsd: sync file %s nfsd: raparms %ld %ld %ld %ld %ld nfsd: write defer %d nfsd: write resume %d nfsd: write sync %d nfsd: write complete err=%d <3>nfsd_create: parent %s/%s not locked! nfsd_create: dentry %s/%s not negative! nfsd: bad file type %o in nfsd_create nfsd: Caught race in nfsd_renamenfsd: readdir result %d bytes, eof %d offset %d nfsd: freeing %d readahead buffers. nfsd: allocating %d readahead buffers. <4>nfsd: Could not allocate memory read-ahead cache. <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: exp_parent submount over mount. nfsd: exp_parent found. nfsd: exp_child mount under submount. exp_export called for %s:%s (%x/%ld fl %x). <7>exp_export: i_dev = %x, dev = %x exp_export: export of invalid fs type. exp_export: export not valid (Rule 3). exp_export: sub-export not valid (Rule 2). nfsd: created export entry %p for client %p <4>nfsd: bad dentry in unexport! unexporting all fs's for clnt %p nfsd: exp_rootfh path not found %snfsd: exp_rootfh(%s [%p] %s:%x/%ld) nfsd: exp_rootfh(%s:%x/%ld) exp_rootfh: Aieee, NULL dentry nfsd: exp_rootfh export not found. exp_rootfh: Aieee, NULL d_inode exp_rootfh: Aieee, ino/dev mismatch exp_rootfh: arg[dev(%x):ino(%ld)] inode[dev(%x):ino(%ld)] <4>exp_unlock: not locked! insecure_locksno_subtree_checknohidesunsecurekerberosuidmapwdelayasyncall_squashno_root_squashroot_squashinsecurerwro%s%s,# Version 1.0 # Path Client(Flags) # IPs %s %s() # %d.%d.%d.%d)created client %s (%p) <4>nfsd: bad address count in freeclient! <5>nfsd: couldn't validate string %s nfsd: initializing export module. nfsd: shutting down export module. <4>Weird: hashtable locked in exp_shutdownnfsd: export shutdown complete. <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! unknownnone<3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: initializing lockd <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: loop in repcache LRU list <4>nfsd: all repcache entries locked! <4>nfsd: disabling repcache. <4>nfsd: bad repcache type %d nfsd: RC_REPLSTAT/reply len %d! <4>nfsd: cached reply too large (%d). <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: ressize_check p %p base %p len %d <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! rc %d %d %d %d %d %d %d %d nfsd<3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: GETATTR(3) %x/%ld nfsd: SETATTR(3) %x/%ld nfsd: LOOKUP(3) %x/%ld %s nfsd: ACCESS(3) %x/%ld 0x%x nfsd: READLINK(3) %x/%ld nfsd: READ(3) %x/%ld %lu bytes at %lu nfsd: WRITE(3) %x/%ld %d bytes at %ld%s stablenfsd: CREATE(3) %x/%ld %s nfsd: MKDIR(3) %x/%ld %s nfsd: SYMLINK(3) %x/%ld %s -> %s nfsd: MKNOD(3) %x/%ld %s nfsd: REMOVE(3) %x/%ld %s nfsd: RMDIR(3) %x/%ld %s nfsd: RENAME(3) %x/%ld %s -> %x/%ld %s nfsd: LINK(3) %x/%ld -> %x/%ld %s nfsd: READDIR(3) %x/%ld %d bytes at %d nfsd: READDIR+(3) %x/%ld %d bytes at %d nfsd: FSSTAT(3) %x/%ld nfsd: FSINFO(3) %x/%ld nfsd: PATHCONF(3) %x/%ld nfsd: COMMIT(3) %x/%ld %d@%ld <3>fh_copy: copying %s/%s, already verified! nfsd: inode locked twice during operation. nfsd: fh_lock(%x/%ld) locked = %d <3>fh_lock: fh not verified! <4>fh_lock: %s/%s already locked! <3>fh_unlock: fh not verified! nfsd: NULL inode in %s:%dnfs3xdr.cnfsd: ressize_check p %p base %p len %d  Xhhhphhxphhphpph@ ?BEF   @@` hppppxhxxxxpppphHh0hxpGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1author=Olaf Kirch .symtab.strtab.shstrtab.text.rela.text.rodata.rela.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4Ԝ!S  ,"4Zt  A`GZ  R4W4`MfXVoyc, y  0 4 @ D HPk Tk X \k d h l t x | F  D7 L L.8 L<P X d7|    7J| R)D H  @ @ @   70#8@ Lp t  h h  7T ` dh l |+7* * $ L P \ `d h x+7   +7<H\|HHH<H\|H    \  `  h x  |   I I           l      l   C K  d  d 0  @  L7 d d h d   $ @ T  X \              $     ]  H P    R ( <8 L  P8 X  d   7    (   (      0 D hL P T ` hdh hp tx |       M    H P TY    4 < @    b,( , < DH t,     ( (4 < @=   ` `0 8 <L      Y8b  '0! ( 0 8\x `| `  47H,\ ` p x |,      ,,, 0 @ @H @Plex,,   ` ` ,,  ( 0 4L PT ,    ,    t  1,    ,  P (T (Xxl<t  &   @ @ 0@ \ ` l pt p44W2 4D L Ph p t@S2  <  @ d \ h \ l@!;!$W!@2!T!" "0 h"8 h"P"\ "` "l "x ""7" " "#X #h7# # # ## #####7$ $$ $( $4 $< $@$h % % %H%& & 7&<&D&L&`7& & & & && &&& ' H'' H'('8'@ 'D 'h-'| ' ' ' '' ( (4 h(D (P (T(\ h(h h(t h( (( )( ), ) ) )) ) ) ) @* @**0*L *P *` h*h h** * * **+D h+L h+X h+` h+| ++ + + +,4 ,8,< ,7,, l, l- l- -  --,H-L-lH----. .( ., .< .D .L.d .h.l . . ../8 (/@/D (/X /\/` / h// h0708 0< 0H h0P h0T0hY0 0 00 0 01-11-2<2L 2T2X 2\2tX22Y3a3Dk 3Hk 3ta334 5 5 5 5 58 5<5@ 5T 5` 5d56D6h6 66 6 h66 h7d77x^7 77 7 h77 h8T7888Y9 |9 |9 9 9$ 9( 9T9Y:p:;0^;P; ;; ; ; ;;^< < < <<  <8H >L >X (>` (>p>>j>? ? ? ? ?? ?? ? ? ?@ @A AA AD hAHAL hA7A B B B B B0 B4 BH BT PB\B` PBlUBx B hBB hB B B B BB BB B B B B BCC$jCHCl Ct C C CC CC C C CCD DD D hDD hET7EhjEYFHFhXFt'F F FF F F F FGD GL GX G` GH\EHdHH!HI4YIIXI'JD!K,EK4!KxK KK K hKK hLP7LhLYL/M MYMM'NENNOO O O$ OL hOPOT hO7OXPP(YP|YPP'QEQQQ QR R( hR,R0 hR7RRSYSYTTLTTUh Ux U UEUEU U U @UU @V hV V hV hVV hW7W<7WPWXWlWYX X4XL'X`XlX XX X hXX hYtYZZ< hZ@ZD hZ7Z7[[8[LE[d7[|[[\\|7\ \ ] h] h](]4j]L7]`]Y_?_L?_|_ x_ x_ _ _ _ _ _ __ t_8_ t_ _ _ t_ x_ x_ x` ` ``  t`0 t`4 `8 `D `H `L `P`X `d t`h`p ` t` t` ` t` x` `` ` `Haa0HaPapaHaaHabHb0bPbpbbHbHbcc0HcPHcpccHccHdd0d e e @e  e0e4 eHeL @ehf( f, `f< fLfP `f f f f fgg8-gpg g gh( h4 h8h< hX hd hhhl h h 0hh 0hh h `h `hhiRij( j< j@jD jHjP8jd jh jt jx j|kkRkk k kk k k k ll, l0 l< 0lD 0lPld-l Pll Pl l pll pl ll m m mm  m$ m, m8mDmXXmhmp,mm  m  mm m  m m m m m m m m m n  n  n  n( n, n0 n8 nDnH nX nd nh  nl  nx n| n n o   o  o0 o4 oD  oH  oT oX (o\o` (od ox o|  o  o o oo o o o pD pH p\p9 p9 p9 p p q q q  q qqH q\ q`ql (qtqx (q| q q Hq Hqq Pq Pqq Xrr Xr `r$r( `rP rt r hr r pr Pr hrr Pr Xrr Xr prss s Ht$t4 t8 tLttt t t t tttu(8uH8u u vD vH vPRvv v v vvRw>w8w0 w4 w ww w x 8x, x0 x@>x xx x x x xx x x x x y y  y y  y$ y0  y4y8  y< y@ yPy` yd Hyl Hyt y y yRy y y xy xy{{|,|Dj|L|`B|t |x | || |g |g | | | | | | | | | | }$ }( }, }0 }4 }< }D }H }L }T }d }h }t }x } }8} } } } } } ~ ~  ~ ~, ~4 ~X ~ ~ ~ ~ ~ ~ H L l|            ( DT X x8  ( 0 8 |      0 0 8`l  X Xl`p,H`p P`|,DTp <P`   p p@ D l p | p p    $ 0 p8 p@   p p   T X d pl pt   p p` d p px p D,X \ ` l t <` @6D` P TT X T\ t x|        Y      p      `bx |     P%h l x ( (  Tl p | H H  x=   p p  ( , 0 8d l pL  $ 0 8 @l t xYx      l      |         @ @ @8T X d 8l 8t  ,D H T X\ Xd  4 8 D xP xd  4 < @     8 @ D  he      8 \ 1    ` h lO O 14 8 H 0P 0Tdp,   P PY,,D H T p\ p`Y,    ,  P8 H L d !h !l !p !t     $ D H      `$4Ph(DàĨX Ƥ ƨ ƴ !Ƽ ! ! ! !  !$4  <  ȸ ȼ  ! !8 < H !P !Xɤ   ! !t x ʄ !ʌ !ʔ   !( !0   ! !4 H T | ̀ ̌ !̔ !̜ 8 < H !P !Xͼ   ! !@ D P !X !`ΰ   ! !ό Ϡ Ѐ Ќ мQQQѰ Ѵ  ! ! Ҁ ҄ Ґ    ! !  ӄ ӈ Ӕ !Ӝ !Ӥ $ ( 4 !< !Dp,Ԅ,Ԍ, \ X [$l04l@D(X8\``lx|<<"$ f8<@D\`x|3<X"( 8<@DX\"`x|hZ $,08<DHPT\`hltxxpXHR{||@`hGtAid  h$(N,@DHL`dhlGG(GdGP@  0$($,G@DTHLG`|dh_l_0:\@c       % 4L 9lGU(c8pv dl X P X @p (&8\I$l\Dk{XXx(hXLp! )h:lFXR_Ti!d\p"p . tx|(0(p dD d0&e0x`TBp@PVifj`hwpw,w,p yp {|{||@p | }\.~0L:Ixp[ ,d@po T\Tpw @ (tdh 4p/@SdPv@0|\X0T@ (p , @',;<K(pXpX\ ,XɀhR `*<|Lay4,,,v` $@;Qk\rxp9 0&  *j 7 S l  {  Ĉ d _` ]    3 L e t    h   ( l ,( 4sp BH OEx@ [ r o @ }`t ; m@     .  82 E ` S fʼ  ƌ` W    8 mX 88 # ?l H~|0 ZL h {y  x(8 L   x (DYw`M yp`p 'B[`n]x|zH )@h@Wl+lv̀8. x6H, OdDdWs [X )2||K[r<||\txh_<<%<ԀUfq@y|p8>T| XT(C4Do,p À5PVm*D(x& x@f(Έ$,04t8QHjPth|Hp0;dnfssvc.cgcc2_compiled.nfsd_activenfsd_cache_semnfsdnfsd_dispatchnfsd_version2nfsd_version3nfsd_version*ABS*nfsctl.cinitializedtime_diff_marginnfsd_proc_read_long_maxminnfsd_proc_write_long_maxminnfsd_proc_initnfsd_initnfsproc.csvcbuf_reservenfsd_proc_nullnfsd_proc_getattrnfsd_proc_setattrnfsd_proc_lookupnfsd_proc_readlinknfsd_proc_readnfsd_proc_writenfsd_proc_createnfsd_proc_removenfsd_proc_renamenfsd_proc_linknfsd_proc_symlinknfsd_proc_mkdirnfsd_proc_rmdirnfsd_proc_readdirnfsd_proc_statfsnfs_errtbl.400nfsfh.cnfsd_nr_verifiednfsd_nr_putfilldir_oneget_ino_namenfsd_igetsplicefind_fh_dentryvfs.craparmlraparm_cachenfs3_regaccessnfs3_diraccessnfs3_anyaccesslast_ino.420last_dev.421export.cclientshash_lockwant_lockhash_counthash_waitexp_parentexp_childexp_verify_stringexp_getclientbynameexp_do_unexportexp_unexport_allclnt_hashexp_flagsexp_unhashclientexp_freeclientauth.clockd.cnlm_fopennlm_fclosenfscache.ccache_initializedcache_disabledhash_listnfscachelru_headlru_taillru_put_fronthash_refilecomplaints.342nfsd_cache_appendnfsxdr.cnfs_ftypesstats.cnfs3proc.cnfs3_ftypesnfsd3_proc_nullnfsd3_proc_getattrnfsd3_proc_setattrnfsd3_proc_lookupnfsd3_proc_accessnfsd3_proc_readlinknfsd3_proc_readnfsd3_proc_writenfsd3_proc_createnfsd3_proc_mkdirnfsd3_proc_symlinknfsd3_proc_mknodnfsd3_proc_removenfsd3_proc_rmdirnfsd3_proc_renamenfsd3_proc_linknfsd3_proc_readdirnfsd3_proc_readdirplusnfsd3_proc_fsstatnfsd3_proc_fsinfonfsd3_proc_pathconfnfsd3_proc_commitnfs3xdr.cencode_post_op_attrencode_wcc_dataencode_entrylookup_dentry_R9ebaf499nfssvc_decode_fhandlehandle_sys_nfsservctlnfs3svc_encode_diropresxdr_one_R43e0cbe8nfssvc_decode_renameargsnfsd_renamenfsd_findparentis_bad_inode_Rb9e5f7b1notify_change_R5b933712jiffies_R0da02d67nfsd_cache_initvfs_unlink_R896d6ff4nfs3svc_decode_readargsd_spliceinterruptible_sleep_on_R34d66e55__this_modulenfssvc_decode_voidexp_delclientdput_R154d7397nfs3svc_encode_linkressleep_on_Rd9512e2arpc_system_err_Rc39cf57enfssvc_release_fhandlesvc_destroy_R1d229db0exp_rootfh__copy_user_R9c5239ebnfs3svc_decode_renameargsnfssvc_encode_readdirresnfsd_openkmalloc_R93d4cfe6stack_top_Ra6cab6a7nlmsvc_ops_Ra9bd1b48svc_exit_thread_Ref55e4d8__module_authornfssvc_encode_readresexp_unexportinit_private_file_Rc6e7bd0f__module_using_checksumscleanup_module___atomic_submemcpynfs3svc_decode_readdirargsnfs3svc_decode_mkdirargsnfsd_racache_shutdownnfsd_permissionnfssvc_encode_entrynfssvc_decode_createargscreate_proc_entry_Rcc725a77simple_strtoul_R20000329nfs3svc_encode_createresget_write_access_R1cf3993fnfs3svc_decode_createargs.udivstrcpy_Re914e41evmtruncate_Ra99b0db4nfsd_time_diff_margin.divwrite_inode_now_Rd1bba016init_modulenfs3svc_release_fhandlenfs3svc_encode_entryexp_addclientnfsd_programnfsd_createnfssvc_decode_linkargsnfs3svc_decode_sattrargsexp_getclientnfssvc_decode_symlinkargsnfsd_cache_shutdownnfsd_syncexp_writelockexit_mm_Rde0cbce5vfs_rmdir_R5a910d11svc_proc_read_R866b52d3printk_Rdd132261nfsdstatsnfsd_setattrnfsd_modcountbdevname_R04176b15nfs3svc_encode_readlinkresnfssvc_encode_diropresnfs3svc_encode_voidresnfsd_unlink__up_R4506727esprintf_R1d26aa98nfssvc_bootnfs3svc_decode_readdirplusargsexp_readlocknfsd_stat_initremove_proc_entry_R40dc6d61nfserrnonfsd_cache_lookupnfsd_readlinkxdr_zero_R56773c08nfsd_export_shutdownget_super_Rc07d622eexp_nlmdetachnfsd_svcstrcmp_Re2d5255a__wake_up_R8a4864fanfssvc_decode_readargsnfs3svc_decode_diropargsnfs3svc_encode_attrstatxdr_encode_string_R704584b1svc_create_R85c8e29asvc_proc_unregister_R12e280e3nfssvc_decode_sattrargssvc_process_Rad12c33enfsd_symlinknfsd_debug_Rbf9d1b96nfsd_setusernfsd_stat_shutdownnfs3svc_decode_commitargsnfsd_procedures3nfsd_nserversmemcmpnfs3svc_encode_pathconfresnfs3svc_decode_writeargsnfssvc_encode_voidnfsd_statfskdevname_R160820f5do_nfsservctl_Rd4ee4a87xdr_decode_string_R6755aa62__bzero_Rdd42e263lockdctl_Re0896391nfsd_create_v3find_inode_number_R4f79368fnfs3svc_encode_writeresnfs3svc_decode_fhandlenfs3svc_encode_wccstatvfs_rename_R98d9643dfh_updatenfssvc_decode_diropargslockd_down_Ra7b91a7bnfs3svc_encode_renameresnfsd_accessiget_in_use_Rc7831124fh_lock_parentnfs3svc_decode_symlinkargssvc_recv_R0af8280drpc_garbage_args_Ra0111550nfsd_cache_updatefh_putexp_getsvc_create_thread_Ra5d298a9update_atime_Rf62a968c__module_kernel_versionnfsd_readdird_rehash_Rbc2db168nfssvc_decode_writeargsiput_R637caabd.uremsvc_proc_register_Rf6a77b45___atomic_addkfree_R037a0cbaexpflagsnfs3svc_encode_fsstatresigrab_Rc6c320banfssvc_encode_attrstatnfsd_readnfsd_lockd_unexportpermission_R218f2a48d_alloc_R86e0b47fnfs3svc_decode_accessargsnlmsvc_invalidate_client_Rd5e764f3nfsd_export_initnfsd_racache_initnfsd_sync_dirsvc_makesock_R4fa8657dnfs3svc_release_fhandle2__down_R7356f38eexp_procfs_exportslockd_up_Rf6933c48nfsd_lockd_initnfsd_writenfsd_lockd_shutdownnfs3svc_encode_readresnfs3svc_encode_entry_plusnfsd_commit__muldi3exp_unlockd_move_Rf572ae3anfs3svc_decode_linkargsschedule_timeout_Rd62c833f.umuld_alloc_root_R57d6f53efh_composefh_verifynfssvc_encode_statfsresnfsd_procedures2nfs3svc_encode_fsinforesexp_exportput_write_access_Ra301a70dnfs3svc_encode_readdirresnfsd_svcstatsinode_change_ok_R14215b4fnfsd_lookupnfs3svc_encode_commitresnfs3svc_decode_mknodargsnfsd_linknfssvc_encode_readlinkresnfsd_nlm_opsnfssvc_decode_readdirargsnfs3svc_encode_accessresnfsd_closextime_R3cb6ce39__memcpy_Rbfaaaa73ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp437GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  =BH*QY= bx0  Y (/6=DKRY jPsP8|44  %1@nls_cp437.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp437register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $"(          P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%e"d"H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp737GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2x  = B H *Q Y = bx  K (/6=DK\PeP8n4|4  #2nls_cp737.cgcc2_compiled.charset2unipage00page03page20page22page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp737register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $ (     P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~#BVW+yM"Z[*{|z A%%%%$% c%Q%W%]%.`%%4%,%%%<%rjZ%T%i%f%`%P%l%} /ask~% %%%%%%LCD67;<FE   "%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~噞Ѐӷͺް01.01kernel_version=2.2.25using_checksums=1cp775GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2x  = B H *Q Y = bx  K (/6=DK\PeP8n4|4  #2nls_cp775.cgcc2_compiled.charset2unipage00page01page20page22page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp775register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $ (    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%1% %%%% %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ͼ󨷵ǎԐѥ噞ᅠƄФͺ01.01kernel_version=2.2.25using_checksums=1cp850GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2l  = B H *Q Y = bx  xD (/6=DUP^P8g4u4  +nls_cp850.cgcc2_compiled.charset2unipage00page01page20page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp850register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~oBPQy9:=>Z[deA }~z _%%%%$%^c%Q%W%]%{|%%4%,%%%<%Z%T%i%f%`%P%l%G% %%%bn%CDH`aTUpcqXY%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ǥޅͺ01.01kernel_version=2.2.25using_checksums=1cp852GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2l  = B H *Q Y = bx  xD (/6=DUP^P8g4u4  +nls_cp852.cgcc2_compiled.charset2unipage00page01page02page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp852register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RSQTUVWXY Z [ \ ^_N.J*01F&45D$3%%%%$%E%8c%Q%W%]%9%%4%,%%%<%:Z%T%i%f%`%P%l%;<=>?% %%%O%/@ A!B"C#62L,!K+7H(M-I)G'%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~쭧諶ࠢ묦窵ͺ01.01kernel_version=2.2.25using_checksums=1cp855GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2l  = B H *Q Y = bx  xD (/6=DUP^P8g4u4  +nls_cp855.cgcc2_compiled.charset2unipage00page04page21page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp855register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~10^_%%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%% %%%%%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ϾѮЯ󨷵ǎԐᅠƄ졌ͺ01.01kernel_version=2.2.25using_checksums=1cp857GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2t`  = B H *Q Y = b x  h= (/6=NPWP8`4n4|   $nls_cp857.cgcc2_compiled.charset2unipage00page01page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp857register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ %%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp860GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  = B H *Q Y = bx  R (/6=DKRcPlP8u44  *9nls_cp860.cgcc2_compiled.charset2unipage00page03page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp860register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $!(     P  ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp861GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  =BH*QY= bx0  Y (/6=DKRY jPsP8|44  %1@nls_cp861.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp861register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $"(          P  ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp862GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h2  =BH*QY= bx@  ` (/6=DKRY ` qPzP844 ,8Gnls_cp862.cgcc2_compiled.charset2unipage00page01page03page05page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp862register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X           $#(          P ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp863GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  =BH*QY= bx0  Y (/6=DKRY jPsP8|44  %1@nls_cp863.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp863register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $"(          P  ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$j&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~""%%%<%$%,%%4%% %%%"H" `abcdefghi@}Q%  !"#$&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ܡ%¢åǨ01.01kernel_version=2.2.25using_checksums=1cp864GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  = B H *Q Y = bx  R (/6=DKRcPlP8u44  *9nls_cp864.cgcc2_compiled.charset2unipage00page03page06page22page25pagefepage_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp864register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $!(      P  ELFp4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ #%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%")"a"e"d" #!#H""" %  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ᅠͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp865GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2  =BH*QY= bx0  Y (/6=DKRY jPsP8|44  %1@nls_cp865.cgcc2_compiled.charset2unipage00page01page03page20page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp865register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $"(          P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?%%%%$%a%b%V%U%c%Q%W%]%\%[%%%4%,%%%<%^%_%Z%T%i%f%`%P%l%g%h%d%e%Y%X%R%S%k%j%% %%%%%%@ABCDEFGHIJKLMNOQTW^""!%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ͺɸȾ̵ް01.01kernel_version=2.2.25using_checksums=1cp866GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2x  = B H *Q Y = bx  K (/6=DK\PeP8n4|4  #2nls_cp866.cgcc2_compiled.charset2unipage00page04page21page22page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp866register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $ (    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   %%%%$%c%Q%W%]%%%4%,%%%<%Z%T%i%f%`%P%l%% %%%%%  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Ցͺ01.01kernel_version=2.2.25using_checksums=1cp869GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2l  = B H *Q Y = bx  xD (/6=DUP^P8g4u4  +nls_cp869.cgcc2_compiled.charset2unipage00page03page20page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp869register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(     P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&     "         !"#$%&'()*+,-./0123456789:?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1cp874GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2t`  = B H *Q Y = b x  h= (/6=NPWP8`4n4|   $nls_cp874.cgcc2_compiled.charset2unipage00page0epage20page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_cp874register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $( 8   P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h2PH  =BH*Q Y= b |   L7 ,3DPMP8V4d4rx ~nls_iso8859-1.cgcc2_compiled.charset2unipage00page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_1register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $( P ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~    x !@AVW`atjvukw  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-14GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lG!-4;BSP\P8e4s4  .nls_iso8859-14.cgcc2_compiled.charset2unipage00page01page1epage_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_14register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $( x   P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ `a}~RSx  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-15GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lG!-4;BSP\P8e4s4  .nls_iso8859-15.cgcc2_compiled.charset2unipage00page01page20page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_15register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~A=Z`^dy}{B>[a_ez~|T9 CGPXnpbU: DHQYoqc  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~㡱01.01kernel_version=2.2.25using_checksums=1iso8859-2GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lE ,3:ARP[P8d4r4  ,nls_iso8859-2.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_2register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~&$0^4{'%1_5|  l\  !m]  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-3GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lE ,3:ARP[P8d4r4  ,nls_iso8859-3.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_3register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~8V(;`"f}W)<a#gJ~K. *EL6rhj/ +FM7sik  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-4GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lE ,3:ARP[P8d4r4  ,nls_iso8859-4.cgcc2_compiled.charset2unipage00page01page02page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_4register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO!QRSTUVWXYZ[\^_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-5GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lE ,3:ARP[P8d4r4  ,nls_iso8859-5.cgcc2_compiled.charset2unipage00page04page21page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_5register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./`abcdefghi:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:@ABCDEFGHIJKLMNOPQR  !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~012345678901.01kernel_version=2.2.25using_checksums=1iso8859-6GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h2hT  = B H *Q Y = b |  \> ,3:KPTP8]4k4y  %nls_iso8859-6.cgcc2_compiled.charset2unipage00page06page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_6register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $( P ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-7GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2l  = B H *Q Y = b|  |L ,3:AHYPbP8k4y4  $3nls_iso8859-7.cgcc2_compiled.charset2unipage00page02page03page20page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_7register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(     P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~>    !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-8GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2`  = B H *Q Y = b |  lE ,3:ARP[P8d4r4  ,nls_iso8859-8.cgcc2_compiled.charset2unipage00page05page20page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_8register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $(    P  ELF t4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0^1_  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1iso8859-9GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h2hT  = B H *Q Y = b |  \> ,3:KPTP8]4k4y  %nls_iso8859-9.cgcc2_compiled.charset2unipage00page01page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_iso8859_9register_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $( P ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%% %%%%%$%,%4%<%%%%%%%%% #%""H"d"e"!#P%Q%R%QTT%VWW%X%Y%Z%[%^^%_%`%a%c%f%g%h%i%j%N01F45D3E89:;<=>?O@ABC62LK7HMIGJ.&$%/ !"#,+(-)'*  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1koi8-rGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2x  = B H *Q Y = bx  M)07>EL]PfP8o4}4  %4nls_koi8-r.cgcc2_compiled.charset2unipage00page04page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_koi8_rregister_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $ (    P  ELF p4(  ( `2* ?* #  ( *  (  *"@㿘` @` `㿘` @` `㿘@ 㿘@㿘@   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~%% %%%%%$%,%4%<%%%%%%%%% #%""H"d"e"!#P%Q%R%QTT%VWW%X%Y%Z%[%^^%_%`%a%c%f%g%h%i%j%N01F45D3E89:;<=>?O@ABC62LK7HMIGJ.&$%/ !"#,+(-)'*  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~01.01kernel_version=2.2.25using_checksums=1koi8-ruGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment44!  ,h 2x  = B H *Q Y = bx  O*18?FM^PgP8p4~4  '6nls_koi8-ru.cgcc2_compiled.charset2unipage00page04page22page23page25page_uni2charsetuni2charchar2uniinc_use_countdec_use_counttable*ABS*__module_kernel_version__module_using_checksums__this_module___atomic_add___atomic_subinit_nls_koi8_ruregister_nls_Re5264a0dinit_modulecleanup_moduleunregister_nls_R61e1261f   T X          $ (    P  ELF0<4( 㿈  `;?`@  43 2   ( +   @  b  @    " D`@    @ 2?  B< @`  ?#?#(Xv?ꀢ  * * '@`      , @`S?L@ @`F?L@ B@   @8?  ?$ @@, @  &X%`%@`@ %` %`@ 6  ? F$ C$ L*  @@9  @ ^*`:  @  #$   ?@ $ $ 2*` ` ?$ @$`@ Δ `  $` ?$  ``2@@ @  ` @ @  L@ " `@ *L@. @   `@*` 2 *` $ 8 K  D`@ t '.@ @  $@"D`    ` @@ 2[?& &D`@ E  '.@ D&D`@ 8  .@ 9 =@   '2?,` `@@ 'L@  @@,` ``@@ *L@@` D`@ @ ?@@@ ` * @@ @ * @ ` @ 2@`@ D`@ @@ ˰?G@8E` -9@  D@ @@ ` $"2D D@ @ @ @ @   `  (``  ?2 2 D` j .jg > ` `@&D@  M .@ ##> ` @@`@"D`  @    * ` >  `@&D@   .@ &D`@  ? .@ > >&h 4#??#@P?#?X 2 X  ^  X O@  8  @` D `  :? ,`<``."  ` `   :? ,`: / Ɛ  f$ ` @̰? В`@%/@  * @* @  > @ X@@   @$ % X%X@@  * @@@ @ @C 0@   "  D`@   @ 2p? ?@?`@2 ""`$ `* * $ @ $ % % &'/2-4s`  0@ 蔦 D@  @  ?@`@2 * $ @ J$24D`0`4/D 0@ ` D@  @ `̒ ?@ "`@* * $ @ @$D@ А @    В @ $`   `2%  :%  B= @2 2" ?D`@ ?@,`<``'  %``B =  %% %  D 6 3` 82+ @+`@   x?@ X@@ d  3`+  +`" @  D + 3`@+`% X%X@ 2  @ "@D`@ @ <?   %L ",     $ %  ;  B= ( "L? '2 ?% ?  $ 8%  B=&㿘`X`2  +  * @ .`@  2r`X`@`  `* "@` "@+?` " ?  , ? : `@?`@ @K`X@ F  @` `* H/`` `` @  4+`X $` H/` ``@`  4 `X  `@`X@ ?. #2`@ d +* 4* `* @`* 2`Jx)2`. @`*` @ $4`@ x@ x9@ @ " 4`@ 4`4`&4`* @`*` `* 2`Ȣ 4* *  4* `* @`*  غ`@M@ `D .5 3J  M` ` `JK ``JK  ``JK "@`3*` `*  ?# ` @   G3?*` `*    5?* 4@7x2`,@`*` @ 4@@ @ @  $ 4@ 4* `* @`* 4 Β?*` `*   ?  I  #`*`2`@ @ @8 6L 2@ @ "Y@8' @  @ @ ";`@  @2@2 @ "22h?* `*     ˰? ̰ s h@  ?-'   4 ( "4 (!m4 "`  4 "$ d $ d 4 $ !$` 4 "$ d4 $$ / 4 (# & J  M@   M`J@ ` M`J@ ``@  2  3! !$4 "4  ) 2# "J  M@ ` `M`J``M`J ``M`J"@` " 4 " ,  $ d4 $$ ,?*` `*    ` @ % 4*`  $   4 "$ d4 $ 4 *4 (4 &@@    `)-`--?`  ƀ   `B > )-` *  ? -?  ƀ ڤ `B >  * ?   ?#  * *  *`3 @) x3 ,  * @ @  ƀ  `B >  *`3  ޡ3  *  ?  @   ` ƀ | `B >  *  ?  @ $ 'B` ,@ @ ƀ R `B > `&@8 `@ ƀ 0 `B > @8 2L @``2@`@ `ƀ   `B > @`2` 㿘 2`DM?a2#` @`D?`@  2`@<?@`D`D, ` (" $` * *  ?    @  h@@  ? ,!` 3 "# d3 $# ,`?* # @  㽘+` `@@%`D - @`@ 2`@&@@,@``@ @ 㿘. 6  #`. %* , @ @  !? ``@,  @``$  $` P`,`2 `2`Ґ -, *2@   " ?@ 2`/ 2 .  2 5`@  ,`@  2 @` 2 ,` 5`@ @ ZX!L@ T 4 @ KIL@@ ?> L@ 7' @3   , 2 @  *  2`@ ,  2  @ @  "'1?@*&$@ 2L@ @5@ -5`W,`?2`# , 0!1?#* @2` B, 2`,`2 * @*` 2@ 5`5`㿘`"#   3` @`)`& 2#&`` @`  ` @` ` 㿘 @ 1 & %  !?ސ#* 2 # *@  *` 3  `@#   @?㿘@' @#` 6$ ,  "`@` , $01.01kernel_version=2.2.25using_checksums=1%8.8x ' + '' %08x.%02xnvalias <4>/proc/openprom: Couldn't write property %s <4>/proc/openprom: Unknown property type of %s nodesecurity-passwordname....nodenvunalias optionsaliases<4>/proc/openprom: can't get free page <4>/proc/openprom: couldn't setup tree GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata__ex_table.rela__ex_table__ksymtab.comment4+!> ,+2Q =-B-H-*Q-HY/(PdRH  t/x~/x=/2) 8l#+5 @ HP^q~ ( <<TX<X @<# 86|XV#XLh`z$ %`%X  1E[`y*<Oh,y4G_q)T"0*L<Uv+xopenpromfs.cgcc2_compiled.nodesallocedlast_nodefirst_propoptionsaliasesaliases_nodesproc_openprom_iopsnodenum_readproperty_readalias_namesproperty_writeopenpromfs_prop_opsopenpromfs_prop_inode_opsopenpromfs_nodenum_opsopenpromfs_nodenum_inode_opsopenprom_alias_operationsopenpromfs_readdiropenprom_alias_inode_operationsopenpromfs_createopenpromfs_lookupopenpromfs_unlinklookup_childrendevicescheck_spaceget_nodesroot_fresh.340dec_first.341*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsprintf_R1d26aa98stack_top_Ra6cab6a7__copy_user_R9c5239eb.remprom_firstprop_R807b7089prom_nextprop_R2bf482aaprom_getproplen_Rff8b6749strlen_R97255bdfkmalloc_R93d4cfe6strcpy_Re914e41eprom_getproperty_R156810c5__ret_efaultkfree_R037a0cba__memcpy_Rbfaaaa73__bzero_Rdd42e263__memset_R1907e126simple_strtoul_R20000329property_releasememcpyprom_feval_R42f76b30prom_setprop_R4bad614bprintk_Rdd132261prom_getname_Rb0d1f9ef__strncmp_R8c5ff0fdstrchr_R349cba85proc_get_inode_Raf77717cchrdev_inode_operations_Rb299eecfd_rehash_Rbc2db168d_instantiate_R15af7404strncpy_R328a05f1d_delete_R8309cde3__get_free_pages_R19d9ac40free_pages_Rb5136506strcmp_Re2d5255aprom_getchild_R5ee0a984prom_getsibling_R3b3fe8cbopenpromfs_use__this_module___atomic_add___atomic_subinit_moduleprom_root_node_R5ce875cfproc_openprom_register_R42805353cleanup_moduleproc_openprom_deregister_Red23cbed( , 0./ / 0t |       2344L p56784/ 8/ / / 0/ /  / $/ X6 7  7 / / 00:P+h1|-,  ./ / 0,/ 0 <.@ X/ p0/ 0/ 0 X/ \/   . / /  . $ 8/ </ T0   . / / / / 1 / / - 6 5 ; (5 @< X: d+ 1 , = / / 0>/ =/ $0t>=/ 0@>`/ |0>$/ (/ 65; 5T<:/ / 0    @5 ( (@A4BX 8\ 8| hB 8 8 hC:0 D | D5EFE4     |       (D<5TEhFE      ( H2p5E3    5 E 8 < d5E G< |    | |        |E    T   T Td Tl T  H H I JD T X      l  D 5  ! ! !$ !@ !H ! ! ! ! ! ! ! ! !5"  "8 "@2"l5"3" " #5#x #| # #6#K# # # # # # $ $  $(G$D T$P T$t $x $J$ $ $ $ $ $5$ $E% % :%7% %(;%4A%< %PL%p %t %M% % % %;% %N% % % % & & & &( &0 &X &\ &h &p & & & &8& & &O& & & &O& & & & ' '2', '< 'H 'P3't2' ' ' ' ' ' ' 'O' ( (5((6(<7(D (T (`3(| ( (P( )  )4Q)p )tS )xS )T) ) )S ) )S )T) ) ) * * * *S *S *$U*< *@ *TM*\ *h *l *t *xW *|W * * * * * *  * *R * *  * *R *X* * * *  +  +C+Z+ +  +$ +( +,N+0 +4 +D +H +L +` +d:+l +   <<?TL |@#X$L9 9@9 t9  $9( ,90 498 <9@ \D9H<L9ELFp4( :`` ` 㿘+ ` @`  ` ` @ . , `5 !@$ $. & @ 2$@ O6  \@#m@ `` Y#-@  "8!  5 @4 "  ! @@""u`& $& & D`@  ?@& @@ & , 0!. @ #0"6 @6  0!. @ #` @`   `㿘` @` `X@ @ D"u2 $ ?''D`@ @ ? 㿘h D@ @( $@ 6` @$ c$" @4$ @ @0? 6` @$ &$ 4 $@@  @㿘h D  6  @$ (?$" 4`$ @ @@ @6 @$ &$4 `$@@    h  `D    3 ?   (= =   Y  h,@而ƀ  Ұ   hy  G  hxl D `@ `D( @h ?31h\  * `怢 @hJ`@ h 2 hl ? h@ ?@@㿘 ` ? @` @ &@ *` *  *  *  : * @ @ @`  ,@" !4    /"@@ @  @@ @`@ #@  <" ( ",?4   x    ? D`@ @㿘  ,?@`  @ ,@@0@?@㿈 & d ?6 " ?}  9褌` 6 $& ,& 8& 0& 46 (6 &, & d%   ?   ?& & `,@ `!!<  6 "@0  & , @0 ?c 6 "< * 6 *㿘@ 㿘@㿘@ romfs: unable to read superblock VFS: Can't find a romfs filesystem on dev %s. romfs: bad initial checksum on dev %s. romfs: read error for inode 0x%x romfs@` GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4 !  , 4 :  EJ=SY*bl0 & 4( <( HKp=5M < $ (( (T XX X`Cl<3J  NQ?J$?,( 82`( d( p2E- - *TM3JM3JPMRJMRJD0NLHXOK'> > B B ++`Et''P+?0 L- T- l* , & L L ) P  X      A   < t  x; |  F   9  .:<lh $PT |<(8@ \0      0'0,8,B\4R_m| $Dhp |<<X<X)(XES ` tq* CX gu 2C]o p .AGZhxinode.cgcc2_compiled.romfs_checksumromfs_read_superromfs_opsromfs_put_superromfs_statfsromfs_strnlenromfs_copyfromromfs_readdirromfs_lookupromfs_readpageromfs_readlinkromfs_follow_linkromfs_file_operationsromfs_file_inode_operationsromfs_dir_operationsromfs_dir_inode_operationsromfs_link_inode_operationsromfs_modemapromfs_inoopsromfs_read_inoderomfs_fs_type*ABS*lookup_dentry_R9ebaf499___set_bit__this_moduledput_R154d7397__copy_user_R9c5239eb___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7generic_file_read_R2cde3e44__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_substrnlen_Rd9ce8f0c.udivset_blocksize_Ra842722a.divinit_moduleblkdev_inode_operations_R347c22faunregister_filesystem_R3a9d7a75generic_file_mmap_Rb4307b40register_filesystem_R8b74f3d0printk_Rdd132261__wait_on_super_R3bc4cf62mem_map_R3a6844c4__wake_up_R8a4864fachrdev_inode_operations_Rb299eecfinit_fifo_R7fea633bpage_offset_Raa957eddkdevname_R160820f5__strncmp_R8c5ff0fd__bzero_Rdd42e263init_romfs_fs__module_kernel_versiond_rehash_Rbc2db168.urem__brelse_R9bb16e38___atomic_addkfree_R037a0cbabread_Rdb41b5aeiget_Rbb5d76f6d_instantiate_R15af7404bzero_1page_R84f9fba4d_alloc_root_R57d6f53e__memcpy_Rbfaaaa73ELF|4( @**@  * 㿘@㿐  ` @  #$!? '`&  `'@ @&@㿘 N "@@ 2 @ @ ?@ "&@@&@ 㿘 D @ h֔ 2  h`ϒ d ɔ  h   d   & p @ ? @?0@* ** *  *  㿘, 2 D \.@(`0.0?D& $@`p `h`d3 \.   (&  \. `d `p`h. &R @("* "@R @("* @㿘.`2 .2 2`? 2` `?(*`"+"  * .* * `@ (* * :` @ @ $  " .E* *" *"@ *`’ 㿘 "@ <4  < @ <@ <* @.@ * T6@a1@!m   + @ *  *  :`@@ ? +  `& @ *  *  :`@$ ;   ; `;4 *@  **`@ `*#@ +  6  (( 㿐 $*``% @ 1?#  *6 㿘     S  M  B@ ڐ $* 2 *` %@ `? 㿘 @  $ " * 2 !  @?   * 2@? $? $?̝㿘 \ ` ^?` *` €l j h f d b ` y^ \ Z X BV K ``?` *` €@ > < : k/ )`?퀢`" *` €   u "  N 2 X  X `  @  㿘 ) @ 2& @  & @  @   P@!2     @   "& 㿘? 6 \6 ^ʐ "@ 9 X @ 0 \ "  X@  ^ @ \0B㿘  ?   @ ?`@ !! `r P``@ j Pt?@` `*@   $ X P @` V& d@& @ & `& `& ` & $`& (`& ,`& 0`& 4` & 8`$& <`(& @ @& Б* `2 %& *: @ <6 @  2 $ $/8  $ < 2 $ ` "` $ T@ P@ @ "& X& T $ @ T T& $ P@ #@ P㿈..2 6 %T X@ @ @? .  S.  M.  B. . @ *!?#  2 *7@ !7@ (  2`* 7@ 7"@  , #7@  , .*`4 @ 7@  㿐 X $?*  %&@@ *`2*`@ 7@ .` $6`*``#@@㿈`"  B @  @ `X?,c7 %@ b`X7 '@  , ̖ ?   "`X[ 2ҐB-?ˀ?ɀ?' @ǐ`%@   2`* 4`X @`'  2`* 4`X @`1 2 4`$ࠁ㿘`  ?` @ @`@0= h T@*D @ T h T @   r @ I  ` @ `@@0@    ` @ `@@?㿐  @ !?#@*``2` X.`@ 7 %@ j ? * , 2@@ 2 @ X''@    h`h T`@ ) `4 &`?&`4`0 ?&`0`  Ȑ@@``4`?c 6``&` &`㿘hT@ D @  @㿘  hT@D @     @㿘 T   D@`.`N6` @㿈 T `D`@  @  ? #  2 * X7 %@ *.2 7 '@ @?@.`*2 @ @6`@' )@  -7@    ? = D X`%@  X  `$ *``% @ *3  @`` X  T? & * 2` "    @`?`@@ @  @ D @'㿈 T D  @!*2 @  ?  @ `2*`@ 7X %@ *, 2 7X '@ @?@.`*2 @ @6`@'X )@ 7X -@  ,@`7@ `@  n X`%@   *2  @㿈 T`D` @`+?  @ c *2.`@ 7 X%@  ? * *2@ @ 2 @' X '@  ,@`M @8   6  Xܐ Đ D`%@   *2 6 D @s㿐T `D`@m)  @ "7`X%@  ,  ,     6   Ґ`D`D @9㿘T `D`@3` @  ,    6  M `D`D @㿘Œ 㿘 h@  Ȁ` ? @  @ 7ȁ㿐T `D` @  @ &7`X%@  , ^ I  ! 6 ?   Ԧ  А`D`D @㿈D @`-?  @  @*2.`@ X7%@ X7 '@ ?, - 2 @@6@ X' )@ X7 -@  ,@`7@    6    @g㿘@ , 6`  "6`  `&`$6`㿘 @` 6` " &`6`?`#m @6``$` &`(` @? &`(㿘͒  &`6@`&`Ӓ㿈`&a 01``@<& @ !?#  2 *@ `<@ ?  *, 2` 2 8 `^&  J?`"p@ @ ?#  *2  @ p l dh&l& 'H 'P 'L !'''''   D' @ '+H`?! Q @@ F? ^@ @<  X  T@5@P?c2 '  '  ݪ `$'b7@  7@ "7@ ,7@  7'ܐ'  7 ` @2 *`@7ڐ@  7ؐ@ ,7֐@ 'В@ *7ΐ Δ @ȒĔ#\#`#d#h  @ 6  \& o @ @2 \ !@ g`*@   2* '`@   2* `@   2* '`@ @   2* `@   2* '`@   *2  _" Ȁ Ā " "   `" ?& 4 @ -@@Ā@-Ȑ [ J .2L `"`J .L`" `LP@``@ĺ  `"۰  @_㿘`T Dz㿈  @  ,  O  i 6`X5 0>`%@ 1?#  2 *6`X`'@ ?  *, 2 @@2@ `&  &&&`X @`+# ? **` 2 2 & X     ''''!7@ '@ 9 @#\#`#d#h#   @ 6\ ْ!0 @ ? @0y `  ޒ@@ #?c  2 , @@ ܒ  *2 <&  @ ڔ   2 , @ @ ؒ  *2  & @ ֔   2 , @ @ Ԑ  *2 &` @ ? *` * 2 2 &`@ ΰ  *4`6㿘 Ք2㿘 TD @ @㿀)?  @ # + `X3 ,@ 7%@ `X' '@ `X7 +@ `X7 -@ `X7 /@ `X7 1@ `X7 3@  , " ,  ,    6  㿘`T D  @@ @㿀)? " @ `#  2`+ X 7 %@ X7 '@ X7 )@ S  2+ X 7 +@   2*X 7 -@ 6  2+ X 7 /@   *4 X7 1@  " \ 6 ( 0 '``'''!7֐@ 'А@ l y7ΐ@ 7̐ڒ@ ʤ!?#  2 + 7Ɛܒ@ Ȑޒ  2`* 7Ē@ Őʐ  2`+  7’@ Ȑ  *4 7@ '@ '@ 7@ '@ #\#`#d#h#  @ 6 \ !0  @ 㿘T D  @` `2 " h  T@   # H<    h T@ ? ǔ  h T@ `$ 4 @s㿐 D  @o  @   \ 6 X( 4D%@ #?c  2 *&`'@   2,  )@  @ `*`2@@ &`+@   *4`&`&` D @*㿘 D @& q @  q   @@@@ @@@@@@8@@;@@I@@P@@V@@[@@`@@Ջ@@ۋ@@3@@:@@@@@@Ë@@ɋ@@@@@@H@@N@@@@A@@@@@@@@I@@K@@T@@@@@@ҋ@@֋@@@?x     " 0`` ƀ W  >   ` ƀ  H  > @ @@ ;?      `  @ *  @  耢  ' @'܀ '@ '   ƀ   `B >  @㿘`T X` @ 㿘  L"@ a (  @   @  @@ 0 @`?`  @ @ @ 2* "` `  @@ @ @   @   `@* @  㿘  @  @ @ @  " "@& & @  " L   " Lh`D *?@Ȱ  ? ` @ `@@? @ '`h@Ƞ  ?`&`P@@@ h T DȐ@ @@ ' T@   22"@ ?, @4  @ @@㿐` @ 2`  @ `@@㿘@   㿘@```@?@㿘@`@ @@㿘` "@ " @@ @@ @@㿘  @  % !  @&+ % ` @@ @@  `$ @   &㿘  @    `@$ @  㿘@㿘@/؁㿘`&2 * @*``   D  * `"+ @ "@*`*2 4`44@` @, 2 2 @$  & !&  @  ! *` & @@  ?$4?&     @ @ "@ @  ` (""" @  㿘` 4  @ 6  @0 2`@   $@``4$`㿘@ ?# @6 & X ?'''''@   @@ $  " Ā`Đ '耢`@0 ?c  @Ā @X ?ؠ'''''''@  ''d䀢' @  `<П@Ā @㿘 t  8@ !"@ 㿐  " cD!D+ / `t @`!D p B    f @   !D @㿘 @  @ 0  """""  @Ho`""`   `"<0R``? 㿘 "   "  @` 2 @    㿘 ?@ & ` `& ` b@& ` @ 㿘Ȑ ?@ 0 `2 `@ 0b@ 0 @ & `@  㿘   b 2& @ & @㿘 6@ה&  ?&㿘 6@&  ?&㿐D!D  !D @ 0 ` "` D @  ?`@ @/ 0㿈)Xɒ +T@(@ @ ?@X$T$X@    4\@ ?#  *2 4^x?'L'P#'D'H'T   '' D 'D`\ `X '@  %  2* @  /  2* @  -  2* @  +  2* @  5  2* @  3  2* @  1  2* @    *2 ' D2 @T#@LZ#@@`T''@ 8X@ RT#@L #@@ O䀤@ M L@ NT@@L@@ @ Y WD`T `X#`X#`TL#@T#@P#@H#@ @@H#@P#@!@@ ?'@ ?  @?'܁㿐X?`?@ {@ Ho`@2 'a':` ?# #堔+ *@ @ "`D!D0 Ho`?   *@"!!%%%%* *@ @ # `  !D@  @ \ @ k@  k @ $@0 @ 0 @'L^ KL  $ ////Ȱ?*2 2@  $?\ @$ !?#*` 2` X,`@  %7@ L*,2 X  '7@  X-`7 )@  * *`2@  X7 +@  X7 -@  X7 /@  X' 1@  X7 7@  X7 9@  X7 ;@  *` 2`* X 7 =@  X!7~ ?~@ @, `*`4 @ X7| A|@ -  D - - X  H?''''''`'ؐ H%'''Ā'ȶ L''Ԑ@  ''d' @ `<@쀣 @㿐4`\@4`^ ?@ 2zHo`@2 'a':` ?# #堔+ *@ @ "`D.`2`!D \`MhHo`?   *@"!!%%%%* *@ @ # ` !D@ & `\ @ k @  k @ $@@*`     㿘@$ h  4 ` @$ @? "<   $ d2$ d $ d@㿘@ , "6` $6`  &` &6`  (6` *6` ,&` 4&` 8&`  0&` <&`$ @&`( 6@?# @`6@`2"` 2$` 2&`2(`2*` "8`$"<`( "@`",`"4`"0@2 "㿘@ 㿘?@@h`@ *@ "%<В  @2` 0* @+ `@23 @  "@7  4 "@?@?㿘   @   4 , 2  " 42 " ,  "<  @ "2 $㿘@  @ @㿘 D  "  @@@    @ @ @ P X " @ " @&  @& ` @`  `h' @``  `@   " @ . `!{$ & . & $& & & H & D& & & & & X& T@/@& V& (@  N& P$& & &  <@  B@ ! @ (@    !@  2 4 4  D$& L@ @ Ȓ@@ @  & , 0!. @ #0(@@ L@ P@ @  0!. @ # 6  @ 6 @ 6  @`   `X@ @@?{$'''܀'D`@ @ ? h0T!`D@ u @ p@?`` @ f `` @ ]`V@  N @` G`  ,@ @` $ , Ȑ@@  ` '䀊`` '`@ $ @ " `   Ȁ ?# Ȁ ` 7Ȓ `@Ȱ    㿘@ 㿘@㿘@  㿘`&@* @*`@ *`@*`@  :` T*` `  @ D`! @@ - @  @@! &@  $"`0@ @  @`@ #㿘 ` `@  @` @&@ *` * * * : *  @ 㿘`&@* @*`@ *`@*`@  :`*`  T  @ D`   +%`@`,$`4&$`0$`,`  4`*@ ဤ "㿘``  @  @` @  @`@ #&@ *` *  *  *  : * @ 㿘 㿘`@   @  @@0@㿘`@   @  @@0@㿘`@   @  @@0@   @ 㿘`@ @  "8 `  ?h h!`D? !0#D` :?  6 D` ?Ȓ@ ,  , @Ȱ?<5>convert_cp: nls_from=%p, nls_to=%p <3>smbfs: failed to load nls '%s' <3>smb_verify: command=%x, SMB_CMD=%x?? <3>smb_verify: command=%x, wct=%d, SMB_WCT=%d?? <3>smb_verify: command=%x, bcc=%d, SMB_BCC=%d?? UnknownERRDOSERRSRVERRHRDERRCMD<3>smb_errno: class %s, code %d from command 0x%x <3>smb_retry: no connection process <3>smb_retry: signal failed, error=%d <5>smb_retry: successful, new pid=%d, generation=%d <5>smb_request_ok: invalid packet! <7>smb_request_ok: rcls=%d, err=%d mapped to 0 <5>smbfs: protocols older than LANMAN2 are not suppported [%d] <5>smb_newconn: Failed to allocate new packet buffer: max_xmit=%d, packet_size=%d <7>smb_setup_header: Aieee, xmit len > packet! len=%d, size=%d <3>smb_open: no inode for dentry %s/%s <5>smb_open: %s/%s open failed, result=%d <5>smb_open: %s/%s access denied, access=%x, wish=%x <3>smb_proc_read: invalid data length!! %d > %d - (%p - %p) <5>smb_proc_read: returned != data_len <5>smb_proc_read: ret_c=%d, data_len=%d <5>smb_decode_long_dirent: Unknown info level %d *<4>smb_proc_readdir_long: Looping in FIND_NEXT?? <5>smb_proc_readdir_long: error=%d, retrying <5>smb_proc_readdir_long: error=%d, breaking <5>smb_proc_readdir_long: name=%s, entries=%d, rcls=%d, err=%d <3>smb_proc_readdir_long: dirent pointer outside buffer! %p %d@%p %d@%p <5>smb_proc_getattr_trans2: not enough data for %s, len=%d ...<5>smb_lookup_validate: %s/%s has dud inode <5>smb_delete_dentry: bad inode, unhashing %s/%s <5>smb_lookup: find %s/%s failed, error=%d <5>smb_instantiate: %s/%s failed, error=%d, closing %u <5>smb_create: %s/%s failed, error=%d <5>smb_get_dircache: cache %s/%s has existing block! <5>smb_add_to_cache: new index already has block! <5>smb_refill_dircache: readdir failed, result=%d <5>smb_refill_dircache: cache invalidated, retrying <5>smb_data_callback: sock dead! smb_data_ready: lost SESSION KEEPALIVE due to OOM. <5>server_sock: bad socket! <7>smb_catch_keepalive: did not get valid server! <3>smb_catch_keepalive: already done <7>smb_dont_catch_keepalive: did not get valid server! <7>smb_dont_catch_keepalive: sk == NULL<7>smb_dont_catch_keepalive: server->data_ready == NULL <3>smb_dont_catch_keepalive: sk->data_ready != smb_data_ready <5>smb_close_socket: still catching keepalives! <5>smb_get_length: recv error = %d <5>smb_get_length: Invalid NBT packet, code=%x <5>smb_receive_trans2: copied, parm=%u of %u, data=%u of %u <5>smb_receive_trans2: copying data, old size=%d, new size=%u <3>smb_receive_trans2: couldn't allocate data area <3>smb_receive_trans2: data/param too long, data=%d, parm=%d <3>smb_receive_trans2: data/params grew! <3>smb_receive_trans2: invalid parms, disp=%d, cnt=%d, tot=%d <3>smb_receive_trans2: invalid data, disp=%d, cnt=%d, tot=%d <3>smb_request: catch keepalive failed <3>smb_request: tree ID invalid <5>smb_request: result %d, setting invalid <3>smb_request: no packet! <3>smb_request: connection %d not valid! <5>smb_trans2_request: result=%d, setting invalid <5>smb_read_inode: smb_read_inode called from invalid point <5>smb_refresh_inode: %s/%s changed mode, %07o to %07o <5>smb_delete_inode: could not close inode %ld cp437<5>smb_read_super: convert funcptr was NULL! <3>smb_read_super: allocation failure <3>SMBFS: need mount version %d <3>smb_read_super: missing data argument smbfs<5>smb_readpage_sync: %s/%s open failed, error=%d <5>smb_readpage: page already locked! <7>short write, wsize=%d, result=%d <5>smb_writepage: page already locked! <5>smb_file_read: %s/%s validation failed, error=%d <5>smb_file_mmap: %s/%s validation failed, error=%d <5>smb_file_write: %s/%s validation failed, error=%d ;Zx0NGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4m!L- ,n 3<  ?n(~G}RH b}h` s|x|'*(z ĸ]<h l tL` (d (h 0, L4 L8 0< 0P  $,@Hdt 4 8 h L  P P   (T \ x |  $   l , t  |    ,                         $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |                                          $ ( , 0 4 8 < @ D H L P T X \ ` d h l p t x |                                          $ ( , 0 4 8 < @ D H L P T X \ ` d h          $    ,  4 <  D  \ t ` t t x |                            < P P T X P p  x   x      4 8< Td l p 0  0dt| p p  $ ,t \<\0`  4P 0\ 0dp ` `L  $ h(`t x $PT X `x    \Ht X Dh4l   !!"","`"x"""#<#`$$8 $@ $| 0$$%D%H 0%T& &, @&< @&T &X &\&l p&p&t p& && && H& H&&'0'H'`'''(((8(x( ( ((()()T))))**+X++,p,, , ---..H.d .h .l..//@///00011@1t1111122233<3T3l334,4\4455055566,6@6T6h6678 8<8\8899$989p999::0:P:p::::;;0;P;p;;;;<<0>0>P>p> > > > ?,?@????@@@l@ @ @|@ @ @@A A( A A B|B( B4 B8B\Bl Bp B BB PB PBCC zC4 C8 C@CLCTCCCCzCD D DD D8 D< DHDt D| DDDDDDEEE<ETE\EpE|EEEE F FF$FFFF F F G GG GG HHH PH PHI II IPIJJDJ\JJK KHKTK KK LL4LD KdLH LLLP L` KdLx L}L L MHM\  M`Md  M @MM @M L,M L,MM xMM xN NN  N8 N<N@ NT NXN\ NhNp L,Nt L,N @NN @N L,N L,N NN NO O OP P, P0P4 PPPXPPPPQ QQR R4R\RRRSXSp StS STT T  TT| PT PTTTT TT T TT T 8T 8U  xU xU UdUt UxVW WW W$ W8WH WLWP WX W\ W`WpW| 8WW 8W XW XWXX\XXXXY Y$Y<YXYpYYYZZ[[4[D \\ ]] ]] ]$ ]( ],]<]P $]T $]l $]| $]]] ] ] ] ^^_ _$ _4 _8_< _P_X_|__ __ _~``$`H `L ``` 8`a 8aa,a4a<aTa\ada|aa aa a aa a bb, b@b` bh bbbbc c hc hc(c8c|c pcc pcczcccdd dd d d$ d<dL dPd` dddh dp d|ddd d eeLedeff0fLfggL (gPgT (gdgx (g|g (g g g g ghhh$ h, (h4 (h<hph hh}hhi `ii  `i}i0iD iH iL i| ii i i i i{j j j j$j, jj jj j}jkk(k0 k4 k8 kh ktkk k kkl l l( l0l@l`lp Hl| Hllllm` md m m mmmm@hP>X>`h@PLD4BDDDE(@A AtB_0`` ad( 0<k@lTLPlTl\l`gt8jlk     0&05L@,tL\@blvH $ lxp2$P= dPH0`\\1$hr#X@#$\X@ %+-d4T>L</><>H@P0UD4``BkD8vD,D0E(@A hAtBhChEFdL$Ix+Ix5Jl;K04FKdXL,gM$XsN`OTdOPxQTWp]L,_0``4 ad&$.^A_hS(_gfgpgXijk k\lTlTxll(l(8<$m$,]5D CZe~]L4a LN (-:L[8_s2dIL, gtM|1L@BGEXmg`yl@4|NXgH*>hKk 4_H   H *Dl ; 0 K ] oe0  H `8   F m$ $@  * EU<h Q dFT u  Pl     ((  ,tX F b8  p 0h     ,    & , 1 ? O kX H@  +$  F    9x  .P 8 P a |  !t 64    Bl<^!8(d2$:Jproc.cgcc2_compiled.reverse_stringconvert_memcpyconvert_cpsetcodepagesmb_encode_pathday_nutc2locallocal2utcdate_dos2unixdate_unix2dossmb_bccsmb_valid_packetsmb_verifysmb_retrysmb_request_oksmb_setup_bccsmb_proc_opensmb_proc_closesmb_proc_close_inodesmb_proc_setattr_extsmb_proc_generic_commandsmb_set_rwsmb_proc_do_getattrsmb_proc_setattr_coresmb_init_direntsmb_finish_direntsmb_decode_long_direntstar.538smb_proc_readdir_longsmb_proc_getattr_coresmb_proc_getattr_trans2smb_proc_setattr_trans2*ABS*dir.csmb_dir_operationssmb_dir_readsmb_readdirsmb_dir_opensmb_createsmb_lookupsmb_unlinksmb_mkdirsmb_rmdirsmb_renamesmbfs_dentry_operationssmb_lookup_validatesmb_hash_dentrysmb_compare_dentrysmb_delete_dentrysmb_instantiatecache.csmb_free_cache_blockssock.c_recvfrom_sendfound_datasmb_data_callbacksmb_data_readyserver_socksmb_send_rawsmb_receive_rawsmb_get_lengthsmb_receivesmb_receive_trans2smb_send_trans2inode.csmb_sopssmb_read_inodesmb_put_inodesmb_delete_inodesmb_put_supersmb_statfsino.482smb_set_inode_attrsmb_refresh_inodesmb_fs_typefile.csmb_fsyncsmb_readpage_syncsmb_writepage_syncsmb_writepagesmb_updatepagesmb_file_readsmb_file_mmapsmb_file_writesmb_file_opensmb_file_releasesmb_file_permissionsmb_file_operationsioctl.csmb_igetsmb_get_wsizeis_bad_inode_Rb9e5f7b1___set_bitmake_bad_inode_Rdd2aa859jiffies_R0da02d67smb_invent_inossmb_read_supersmb_proc_rmdirsmb_proc_createsmb_dont_catch_keepalive__memmove_R60e2f255__this_module__copy_user_R9c5239ebsmb_proc_read___clear_bitkmalloc_R93d4cfe6smb_trans2_requeststack_top_Ra6cab6a7smb_proc_setattrsmb_invalid_dir_cachegeneric_file_read_R2cde3e44__module_using_checksumsfree_pages_Rb5136506cleanup_module___atomic_submemcpy___f____xchg32.udivsmb_catch_keepalivesmb_valid_socket.divsmb_get_dircache__scm_send_R87874fe9init_modulesmb_encode_smb_lengthsmb_closeinvalidate_inode_pages_R9507575escm_detach_fds_Rbe6c026bfput_R6db7a23bsleep_on_timeout_R6c20e56csmb_close_socketinit_smb_fsvfree_R2fd1d81ckill_proc_R932da67esmb_readpageunregister_filesystem_R3a9d7a75generic_file_mmap_Rb4307b40register_filesystem_R8b74f3d0get_empty_inode_Rc01ab9f4printk_Rdd132261smb_proc_mkdirsmb_invalidate_inodes__up_R4506727e__wait_on_super_R3bc4cf62smb_newconnsmb_close_fileidsmb_proc_unlinkvmalloc_Rd6ee688fmem_map_R3a6844c4smb_notify_changeput_cached_page_Rbcfc4207smb_refill_dircachesmb_revalidate_inode__wake_up_R8a4864fasmb_close_dentrysmb_free_dircachesmb_ioctlsmb_init_root_direntsmb_setcodepageshrink_dcache_sb_R48fe65fasmb_requestput_cmsg_Rf39bf4d9smb_add_to_cachegeneric_file_write_R8e64a311truncate_inode_pages_R5044a94asmb_round_lengthpage_offset_Raa957eddget_cached_page_R4af12e13insert_inode_hash_R9289e3e5smb_proc_mv__bzero_Rdd42e263smb_file_inode_operationsfind_inode_number_R4f79368fsmb_get_rsizesmb_proc_writesmb_proc_getattrtq_scheduler_Rd19e3e0bd_delete_R8309cde3load_nls_R68517502clear_inode_R88e1ce5bsmb_open__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.urem.rem___atomic_addkfree_R037a0cbainvalidate_inodes_R5c372d12smb_dir_inode_operationssmb_find_in_cacheunload_nls_Rfa6dcd9esmb_proc_readdirstrncpy_R328a05f1smb_init_dircachestrlen_R97255bdf__down_R7356f38esmb_proc_disconnectd_instantiate_R15af7404smb_errno__scm_destroy_R2850e692smb_setup_headerschedule_timeout_Rd62c833f.umuld_alloc_root_R57d6f53esmb_proc_truncsmb_proc_settime_ctype_R8d3894f2inode_change_ok_R14215b4fsock_wake_async_R522450f4smb_renew_timessmb_get_inode_attrsmb_proc_dskattrsmb_lenxtime_R3cb6ce39__memcpy_Rbfaaaa73ELFp4(㿘  2 @ 0 @0V $`@ 0 h`2 @ 0 `쀥(`l@ 0?`4`@`H@ @ 2 `h! @ @@0t $*`@ `",`@,` !`` `2`` *`Ȓ!a8`` 2`̄ @ 2@` @2 `@  ("`@``  @  @  (" @ ,`@ @ @2 @ ("@`0!,`@ #@㿘 " @ "  h$$h   @ ,  !  ?  @*  Ȓ!a8   @ I  2T   䀤 <  耥9   @ H ,` $ d@ !@   2`  @ **!a8   2 d``@ @ " @   Ȣ 2  @ 0!, @ # 2 ?2 *  @ 2  * * !a8   ` @2  @ `(" @  ` @  @ `( @ ,  4$$ 4 4& "$" (4($`$4$8$0$d$<@$@`24"@4"$,@`2 @ ̄ @?2@ `@  @ `( @ ,  0!, @ #㿘   @ . `!  耤@& '  @ @ H 2$@ ̑,  d  @@ "  `@" @  `@ ߠ   !*`: @ 2 ̄ 2  @  @  ( @ .  0!. @ #㿘 2 @ 0@  @ @ 0   @ . `!   @ E   @ @ H 2 D@    $   0  0@  @2* @2  @ @  (@@  " @ F2%  @ @ H 2 $@ @ H  @ @  (@@   @ @ H   @  (  @ @ "N \@N \ ?#@* 6`   2*  ԑ2 "N \`? c * 2   *`2 @" @ "@   @2  @  (" @    @  @  ( @ .  0!. @ #㿘 2 `@   @ ,` !`2`Ԓ!`0*`@L`\?#* 6  l3`耦 ` @ `0_!``F`` @`H 2`D@ `А`0 #3 !,`   $   0  0@ ` @ "#@`2`@* "`@`` @`H 2   @`0!,`@ #d  $@`H  @ @  (@@  "L`\@L`\ ?`c * 2 ? *`2 @"`@?"@`  @2 `@  ("`@``  @  @  ( @ ,``0!,` #@㿘   @ . `! `m? Ԅ#N \ ?* * 2` [?# 耤    @K    @ H c D  `$   0  0``@ @ @@ ``  `" @  \*  * 4  􀢠` @ 2  N \`?# * 2 /  @ 2(N \   ?# * 4 @  ؐ"   @  @  ( @ .  0!. @ #㿘& ,@@㿘   ,@b`?h <`?<``??&`L&`l&`p&`X&`T&`h&`H&`P@&`d @&`|?+`&`t&`&`&`&`&`x@. ??&`&`@,`??*&` &`&`@&`@&`㿘`$ !D@? 8   1&`D  㿘`H  $ ՔD$. $  d ~!!n f j  ` `(`^0``0` ` ` ` ` ` ` ` `(`\(`]0` ` `? ` (@&@ ` `㿘`$?F"ab a!@(' a    `!`@ @` $` a`:`a / 1$`D 㿘 H $ $?Fa 0 a 0(  ~ d 2`Զ`ظa`` aaa 1 ) ^1 `1 ! ! ! ! ! ! ! ! ! ! ) \) ]! ! ! @! ` ! ! 㿘`$?F"b ?# @᠓*` !( ? 8  ̒ 1&`D  㿘 H`$?`$?Fa : a?#a(.   ~ d 2`ж`Ҹa``aaa 1 ! ) ^1 `1 ! ! ! ! ! ! ! ! ! ) \) ]! ! ! @#! @`( ! ! 㿘`$#`@   `@   #`@   `@     S 1$`D 㿘`$`@   `@  B `@   `@  2   # d @ ކڢ֤ 5 `- ^5 5 % % % % % % % % % - \- ]% % % ?% # @*` * 2 " % % 㿘/  @`  ` ` @ . -`5`!@$&  @$   2f H@ @$ g 2X Hג 2R HA 2L H@  5`@$ "I 2  H  H$ 26  X T* : && @ܠ 6  0!. @ # ! @5`@ @`   ` HI`5`@ H5` @` X T*@  H@2@ "(6  D "  `0`0   ` s 2 耤`"6 @6  0!. @ # H `` X T* 2 @ H5` @ D     0>" . 09 H@ 3 H@ ,W  H@    H@   (  H@  2 耥  @ " @ @$6  0!. @ #@ >  l" *  &  H#`@5`@ DK#@ H S& $& . 6 & @ @  & , 0!. @ # . @ @6  0!. @ # 㿘   @ .  ! `2N \  `"<. N \ ܀` @ \?# @* 2`  D   !8" " #  \?# * 2 #@   @2 . @  (". @.  0!. @ #㿘 " @  `" @  $ @$` @`  `X H $ '''@ ''̐@'Ē 'Ѐ'D`@ @ ? 㿘`.`$@?#* 6 @"   㿘`   h.`  "l  i p@L \ Ȁ`2  @`"Z  @ HG |&@@ :  ̀`2  @`"D  @ H x$6@ &@ @1` Ѐ`2  @`"/  @ H 6@  "#  @ H x t6@  "  @ H t@    @ 㿘.``h@`   @ @ H@@ ( $ @ 2   @ @ H@ @ "@@@$@ $8@㿘`'H ` 2`$  @HH`  @ H` 2 `$`l @ h . h@@N \ ?#@* 6`  H   H@@ @ #GHH F @@ HH ; @   H@@ @ @"@@@N \ ?#@* 6` $@H `@ H@ `(H@H @㿘`  h6B p@  ,) |&@@     x6@  &@ @  6@ H x t6@ @ t@ : `  @ 㿐@ '    @   @   " @ 㿘 & d h`6 " 쀤@(  l !@ @0 4@     @ H 2  h !@ @0`$ @* L ]@ @ "@26 "(!6 "6 &6 (6 $L \`?# @ 2`*  & ,4 *`2@ & 08 * 2 & 4< @ + 2`  & 8& ,4& 08& 4<& 8 "< @ & <& @@2 L \ :` `*  )6 *    @+ *     ``  @+  *@ * @ $ ` `" "@ "<  @  #& d@( & d@ & d@ & d@ & d@@㿘 @ "@  hJ ]`  `"@ #6`@ 㿘 ` h 쀤@(  l !@ @  4@     @ H 2 h@  $ @L ]*  "@< ( *  " 2`"@  #0 &0 (0 $0L \`? ,# @ 2`*   0 *`2@ 4 4 * 2 8 8 @ + 2`  < ,  0 4 4 8 8 < "< @ @2 L \ *2`*  ` %0   *2+@3  `  *+@2`*2`+  ` @ @ (@㿘M @㿐B  `!'`   @`  @ `  `!` @ `@􀢠`?`@ 㿘  @   `㿘@㿘  @  `㾘'D    h@ ? "<   @ ?  ,@  #84`Pٰ `L=@ @D@`(2 2@   2`*` : @ 8# ! x@ ` %` 2 .$@    @xN" > B?$ D`@ $@@"@@ @xx D @ ` *@    &%"`H "`H  @  2`H" @  x   4o   @x " D? #`( h " 2   & 0@㿐  h@ ?"<   @ ? $ ", u P< @  ' "k?j L& H "@ 8 @ "  L` 2 L  @`  @ ` 2  L` @ "B?A``$  @D`@ @@,   $,@@@   @ @ (@ @<$4$8>@?㿈    ]hi?`L  @`P@ 2 `$`H"  @ C G> .- &@ h쀢  @  @@  ƀ 6  `/ @+   `B > `H`,:  4` 8`",@,:  4 2  8  㿘  @ @ ?@ $@@㿘 `h L8  @   $ J  D @  `*@&J @ 㿘 4   "@  J@  @`?㿘& hL^ 8   ,   ) 2  $@ 2 $H@ &  H ` " @   ,@ ܀ "&@& 㿐`@`D   @@ h@ ?@@ 㿘&' hM`^  s? n?   2  $@  "a? $ ,  4@ & ,@@  `J@  @`? / ;?@7?  & 4`& 8@ `@6*@ *``   @2'@  ("'@'`H " @   & 㿐@ <?  $ d`4 "@`@`Dm   $ ?`4 $@@0  2@ @ @  (@ "@@ 㿐`@`Dݖ '@?0j@ 2d?<  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D   $ ?`4 $@@0  2@ @ @  (@ "@@ 㿐`@`De '@?0hT$R `@ ?@ ?  $`d$`, @  2 $`$`?`4`$@@r?'``2 @  $2' `@  4`$  @ @  ( @ "p@p`: ! 4`""d$4`"` 2`@@`@`DT @4`$0( `2@@2 $@ ("$@$ `4$@ "@@ 㿘 ,   W T @ "T  $ I@` D  $ >@` 9  ,@- h 2  $@ 2 $ H@``  * @&  H*  , " @   ,@ ؀  @  " @ !@ @ 㿐``@`DT? D  >` 2`6?`@2?T $`@ `2 @2 4 $@ `("4 $@4 $$?4$$4$8 $ 8@ @@ `@㿐``@`D? @` ;T`$ 22!` @ `@T`$ 4`$2 @ @ (@ $8`$4@`$?4`$8`$`8@@ @㿐@ (?!`4 "$ d @  2 h $ ?`4 $@@z? L `$N *L *N*` @ `@ `(`@`" @ $ ,@`@`De ' $ ?`4 $@@ 6?@`@`D   $ ?`4 $@@0  2@ @ @  (@ "@@ 㿐 < " @@ 2 hN?T $R `@ I?@D '@?0<@DX  1@  2@ @ @  (@ " $@ $ 4 $ $ 8@ $ @ 㿈'``D `@?  `@D '쀤 2"@'"<  $쀤 А ? @ ?`$   `  ?ဦ hV$R `@ `쀢 2 D@͘ {`322@` % 8 % 4@`&8 &4@   $?4 $` $ 8@ @ @ (@ `@ `@ `(`@`0``$ 2`@2  $@ `(" $@ $ ?`5 $@ " $ $ ?` 4 $ `6$@ `@@쀢 @㿐@?# * 4  "8  h଒  @H`$'@@ &  `  @ ?   2   @    @  ?" 㿘&@?# @* 4`  " h  @H&@@ `"&@ & ? 㿘    2``  㿐 #  `hp .`$N\@ \  2p`@  @㿐 #  `hp .`$N\@   2p`@  @㿐Z #  `hp .`$N\@   2p`@  @㿘`< " @@   @(@ %?  Ȥ ̢ ВJY   ``@ ?㿘 h  , P L@2 =, `"4  @ @ H P ,,  " L@ ,"  @  @$  @ @@ ɤ㿐@''T ?# * 5 2 h `  @`H@   0 2 ,'@T + @  `L"@`P@2@ `p@ :U ?# $,`M`\  * 4  "@`p`  @`H`P,@  ,@@" ,@ ,"   @`p$  @ @  (@@@`p`@ * $ @ :   $,```@ ,` ` @ @ '@T+@ @㿐 ?# * 4 2hy `  @`H@  m 0] 2,& /d @  `"@`@2@ `p :4 ?#/ $.L`\  @* 2` `"`p`x. @ `  @2 `p@  ("`p@`p */ :   $.` . ` @ @  &/@ @㿐 ?# * 4 2hy `  @`H@  m 0] 2,& /d @  `"@`@2@ `p :4 ?#/ $.L`\  @* 2` `"`p`. @ -`  @2 `p@  ("`p@`p */ :   $.` . ` @ @  &/@ @㿐 h Ȗ , ̖ ؘ \ 㿘 "< (@  @ 0 @@0@!ː   & 4`& 8@??sysv_free_inode: inode has no device sysv_free_inode: inode has count=%d sysv_free_inode: inode has nlink=%d sysv_free_inode: inode on nonexistent device sysv_free_inode: inode 0,1,2 or nonexistent inode sysv_free_inode: unable to read inode block on device %s sysv_new_inode: unable to read inode table sysv_count_free_inodes: unable to read inode table sysv_count_free_inodes: free inode count was %d, correcting to %d sysv_free_block: trying to free block on nonexistent device sysv_free_block: trying to free block not in datazone sysv_free_block: flc_count > flc_size sysv_free_block: getblk() failed sysv_free_block: invalid fs type sysv_new_block: trying to get new block from nonexistent device sysv_new_block: new block %d is not in data zone sysv_new_block: cannot read free-list block sysv_new_block: invalid fs type sysv_new_block: free-list block with >flc_size entries sysv_new_block: getblk() failed sysv_new_block: block already in use sysv_count_free_blocks: new block %d is not in data zone sysv_count_free_blocks: cannot read free-list block sysv_count_free_blocks: invalid fs type sysv_count_free_blocks: free-list block with >flc_size entries sysv_count_free_blocks: free block count was %d, correcting to %d XenixSysV FS: can't handle long file names on %s, forcing read-only mode. SystemVSystemV Release 2nonamexxxxx nopackxxxxx CoherentXenix FS: bad super-block sizeSystemV FS: bad super-block sizeCoherent FS: bad super-block sizesysv fs: bad i-node sizeVFS: unable to read Xenix/SystemV/Coherent superblock on device %s SysV FS: cannot read superblock in %d byte mode SysV FS: cannot read superblock in 512 byte mode VFS: Found a %s FS (block size = %d) on device %s SysV FS: get root inode failed sysv_bmap: block<0sysv_bmap: block>bigsysv_getblk: block<0sysv_getblk: block>bigBad inode number on dev %s: %d is out of range Major problem: unable to read inode from dev %s unable to read i-node block IO error syncing sysv inode [%s:%08lx] coherentsysvxenixsysv_file_read: inode = NULL sysv_file_read: mode = %07o sysv_file_write: inode = NULL sysv_file_write: mode = %07o sysv_readdir: Bad inode number on dev %s, ino %ld, offset 0x%04lx: %d is out of range ...Bad directory on device %s empty directory has nlink!=2 (%d) Deleting nonexistent file (%s:%lu), %d sysv_truncate: truncating symbolic link GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo__ksymtab4`!s  ,`3 ?` AGk,R0 bk<h sm$xm$%oIp*p*p* `T    $~( 8 (< (@~X P\~` Px x|~ x  ~   ~4XX0H\pX}   ~  PXhX  <TTdw|TX P P`t~x P  ~0XH` ~   ~   H $~ ( H H] \ p `~ d p     W    X   z 4 X] l p p~ t p  X   z  b ( <b P X  4 XX p     ~    |    ~     @ ~  @8 pL pdWh p| ~ ]     ~(<PXd|z X$<`Xxp      ~ `  W   ~$ H  ~<~@ `dX|ZPh\ Ph P X X~8 @      (8 @ D\ ` hx           ( 0 4^ ^ (Pxm$ ,( ,8^    ~^  g`tm4T\ h m  4 `    m! ! !~! !$^ !H 8!L 8!P!d~! ! !!!! p!~! p!""<" " #,X#D#\#|###^ #m#^ #^ #g$4$P`$pd $td $a$%%&8&h&& & & & &~'$]'L'p]'t'' ' 'T( (((P(](())(])Dt)X)X)))+  + + + + ~+<q+d+++ ++ +~,$,<  ,@,D  ,L~.<.`\ .d\ .|c .c . . . . .v .v .//h/ // /~// X/~0 X2X2202\222 x22 x3~3,3@ 83D 83L|3x3 83 83y3 3~3 4 4 4 ~4[ 4[ 4q5`5d 5d 5a56 d 6$d 66707x 7 7 7T7 7~7 7 8 8~8@q8d 8889 9$d 9(d 9@a9T9T9z9X999: : :0T:x:s: @:h:; @;~;k;T;<$s<8_s>l>>>>??s?T@@,@< @@ @XT@X@@@AA,\ A<\ APTATAAXAABBBLBXB\ B\ B B Bv Bv BC,TCpTCxCXCCCCD,DPD`c Dlc DsDTDD D DnD E EnE$XE<ETEhETEFXF F8FXTFpF|FsF FF G GG GPsGGGHH H H$ H,~H H~H HXHII I, IHTI`TIhII II J~J$XJ4 J<JP JTJ\ J` JxTJTJJJJ J KsK<TKDKXKKKLTLDTLLLdLTLLXLMMM(MMNXNN0NHNT N` NtTNOOlsP P P,TP4 PLTPl PTPXPPPXPQ Q4XQLQdQTQTQQRRlRRSSSSTUVdW0WWX X0TXDXPtXYYZZ(XZ@ZXZlZxtZ[t[([\X\\](]Dt]X]^X^^_T_pt_`4 `8~`< ``p`x `| `T6L<6D< iw 8@HPX`lVp7{uhZ:@:H$x8<Y@jDHLPTX\h$6<Tej}*03t+0(Vt2D( ,KgI@N2l 3<80XN^hyDB($3FX"(diM<d    +1DJlQ_%iy,# . H@P + E ] m ialloc.cgcc2_compiled.*ABS*balloc.cinode.csysv_delete_inodesysv_sopsdetected_bsdetect_xenixdetected_xenixdetect_sysv4detected_sysv4detect_sysv2detected_sysv2detect_coherentdetected_coherentoffsets.376block_bmapinode_getblkblock_getblksysv_update_inodesysv_fs_typefile.csysv_file_operationssysv_file_writedir.csysv_dir_readsysv_dir_operationssysv_readdirsymlink.csysv_readlinksysv_follow_linknamei.csysv_matchsysv_find_entrysysv_add_entryempty_dirfsync.csync_blocksync_iblocksync_directsync_indirectsync_dindirectsync_tindirecttruncate.ctrunc_directtrunc_indirecttrunc_dindirecttrunc_tindirecttrunc_all__mark_inode_dirty_R8e8c6e94lookup_dentry_R9ebaf499sysv_file_readpanic_R01075bf0___set_bitsysv_createsysv_truncateread_ahead_R0abb7b07sysv_file_inode_operationsgetblk_R0cac240b__this_moduledput_R154d7397sysv_count_free_inodes__copy_user_R9c5239eb___clear_bitsysv_dir_inode_operationsstack_top_Ra6cab6a7__module_using_checksumscleanup_module___atomic_submemcpysysv_read_inodesysv_lookupstrnlen_Rd9ce8f0c.udivset_blocksize_Ra842722astrcpy_Re914e41e.divschedule_R01000e51sysv_getblkinit_modulesysv_file_breadsysv_free_blocksysv_sync_fileblkdev_inode_operations_R347c22fasysv_write_inodefile_fsync_R93c099e2unregister_filesystem_R3a9d7a75mark_buffer_uptodate_R2f9b9072generic_file_mmap_Rb4307b40register_filesystem_R8b74f3d0get_empty_inode_Rc01ab9f4printk_Rdd132261sysv_unlinksysv_renamegeneric_readpage_Rb596983f__wait_on_super_R3bc4cf62sysv_sync_inodeinit_sysv_fsll_rw_block_R08ea67absysv_symlink_inode_operationssysv_read_super__ashrdi3strcmp_Re2d5255a__wake_up_R8a4864fasysv_mkdirsysv_mknod__wait_on_buffer_R8468a33amemcmpchrdev_inode_operations_Rb299eecfsysv_statfsinit_fifo_R7fea633bsysv_free_inodeinsert_inode_hash_R9289e3e5kdevname_R160820f5__bzero_Rdd42e263sysv_write_superrefile_buffer_Rce9d3f7esysv_linksysv_count_free_blocksd_delete_R8309cde3clear_inode_R88e1ce5bsysv_new_blockupdate_atime_Rf62a968c__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.urem__brelse_R9bb16e38sysv_symlink___atomic_addsysv_bmapbread_Rdb41b5aeiget_Rbb5d76f6d_instantiate_R15af7404set_writetime_R7a99c921sysv_new_inode.umuld_alloc_root_R57d6f53esysv_put_superinode_change_ok_R14215b4fsysv_notify_changesysv_rmdirupdate_vm_cache_R316a00bainode_setattr_R33d3b012xtime_R3cb6ce39get_hash_table_R11b6979c__memcpy_Rbfaaaa73ELF84( 㿘` "<  (  h   ??•" "28? &@4 @ ( 24   "' `  !! `2 ` < "  ?`  !! ` ?p'D hD'$'@ `@   @ -`!@@H `@@ '  $䀠` ?# ?*  *@2@ 2@ @"U@ `@ . ''2  К h2*  ` 4$*   T:D#@ T; Ģ  3 ?# %?!?/@  ""!` @**` @ 2 @ 2` ? *  * 2`  2 #T `@ ؑ/@  *@?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$@:$%#4 И h 2* ``$* @ : ` * +@ `@     @ 2` €D䀠` $?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@' $`䀠`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@H `|x5* @-*` 䀠` ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@5* @-*` "  Є h2*  `  $* @ DT `T:8Ā 3 ?# ??. ""!  @**` @ 2 @  2`   *  * 2`  2 `#`T   ؑ. +@?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`%@lT0@(`73D 2? h3@* ``$+@ 1 3h 3@* `@ `*$+@  3h 3@* `@ `*$+@  * @ `?h 3* `@ `( `$+ @  `?  ` $?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@' $`T䀠` ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@ `|x5* @-*` T`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@5* @-*` "   @ 䀠` ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`' `䀠`?? @ * @ +` 2` 3`   * *@ 3 @ 2 @` `|x5* @-*` `?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`5* @-*` "'@@'@@@@@@@@@@h'`ȡ, 4, `@@@@@@@@`@,`'Ԥ,`$䀠`?# @ `*`2@ ` @* 2 *`@`@@ܢ@@@@@@@@@ȑ* ؐ@2* @@@@@@@(`ԧ, $@,@2Ęh@2@* `$*@䀠` ? @ ? @ *+` 2` 3`   * *@ 3 @ 2 @`Ę2* *$"@ @ @    @@ -0!-@ #`'D h'H''L``D' $@ '쀎  H`L@` @ )  !H@'H@H@ '`@L@ 'L! @''L!'@ s'` $'耡  ?# ?*  *@2@ 2@ @"U@ `@R܀@*' H'lT0@(74 D 2? h3@ * `$+@ 1 4 h 3@ *` `+ $+@  4 h 3@ *` `+ $+@  * @ `?h 3 *` `( `$+ @  `?  `@T(6E ?h@3@ *  `$+@ 2* h4 @ 3 *` `*`$+   h4 @ 3 *` `*`$+   * @( h4 @ 3 *` `( `$+ @  *@    @ ` T@` 2  €DԀ`   ?# @? @**` ? 2 @ 2` ? c  ?*  *? 2`  2 `! Ԁ  `?c @ ? @**`? 2 @ 2` ? # ?*  * ? 2`  2 ` ` |x0@ đ* (@ *`  ?c @ ? @**`? 2 @ 2` ? # ?*  * ? 2`  2 `đ0@ * (@ *` "'@@Ժ@@@@@@@@@h@'`ȣ,`4@,``@@@@@@@@`@'ȣ,``$,Ԁ ?c @ `*`2 @ ?`# @*2*`@ `@@آ@@@@@@@@@ȑ* ̐@2* @@@@@@@ȧ, $@,@2/`Ęh2* `$*Ԁ` @ ?# @? @**` ? 2 @ 2` ? c  ?*  *? 2`  2 `Ę2* *$"@ T܈ 'ؐ@ @    @@䀠`HL'Hr'L (``0!(`! 0) @ #㿐h'X`D'H'L`$?`'@ `` @ ,`` !H@?# ?*  *@2@ 2@ LT @  `@ LT @ "@L @ 2 ` @ L?L@?2< `   ` !!`2.@` ?# ?*  , @2@ 4 @` ?# ?*  *@2@ 2@ l +D@ "@: 2@kX@ `?#?*  . @2@ 6 @H#@X#@@/ L @ $@ $`@` '` @ $@   @2 h@ `( "h@ h "      @` @  @*`XX@ VX#@@/ L @ $@ >$`@` ' $@` @   @2 h@  ("h@h "      @` @  @*``0!,`@ #01` ?# ?*  *@2@ 2@ $ !`X =` ?# ?*  *@2@ 2@ D@ @ Ȁ$`"% % T` ?# ?*  *@2@ 2@ XD@@ d `@ % X@ ̶ Y``@` I'` @`(  @  @"`  @2 h@ ("h@h "      @` @   @@ ~ *``?#?*  . @2@ 6 @H#@X#@@/ L @ $@ $>`@` ' $@` @   @2 h@  ("h@h "      @` @  @*``0!,`@ #'@@@0 `0!,`@ # 㿐'D h'HD'L & $H' @H |5@  x*`@ -@ *  @ - H T  %@  '` $ ?# ?*  *@2@ 2@ @"U@ `@X  @H L  ```І:  h3  2@ * @ @$  :   ?# ?*  *@2@ 2@ &  T" ```І:  h3  2@ * @ @$  : L L 4 ,?# ?*  *@2@ 2@  `@?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @!$$(?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`($L: Г2 h 3*   `( `$+ *  *   @2` D     ?!' $ ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@& $ | x5@* @-@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@5@* @-@*` "  ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@ ! @@    @@ -H㿐'D h.`̰D`$` $`?# ?*  *@2@ 2@ 2`T  ?#`4 ??+   *  *` 2  2    + `H @>?#@ @ :&@ .`@`$ ` ?*  *@2@ 2@ g?`4##??+   *  *@ 2 @ 2 @ N  + +`@ ɒ @ @?#`@: .``$ ` ?*  *@2@ 2@ $?#`4!??+   *  *@ 2 @ 2 @    + `@ ʲ` @ @'` $`?# ?*  *@2@ 2@ @"U@`@ ?# ?*  *@2@ 2@ $``T   D@?Ȱ ?# `4??,  *  *` 2  2   ,D@?" `@`T `4 Г2`h 3*  ``( `$+   * `T   "@ @ 2` €D`$?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@$`$`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@'``|H`x6@* .@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@6@* .@*` " / ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`%@?"    @ 2` D     ? ' `4, Г2`h 3*  ``( `$+  *  * `$ ?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@$`$`?? @ * @ +` 2` 3`  * *@ 3 @ 2 @@'``|H`x6@* .@*`  ?? @ * @ +` 2` 3`  * * @ 3 @ 2 @@6@* .@*` " ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @!%$.?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`.%@ @    @@ -`@x h`Ā `D'```$ $`[`T``.@`l`T6(`72D 2? `h 3* ```$+ 1 2`h 3@* ` ``*$+@  2`h 3@* ` ``*$+@  *  `?`h 3* ` ``( `$+  `? '@?'?&``l``T'0@"5`hB`Ȁ2=``h3 *`` ``$+1*`h3 2* ` ``*`$*   `h3 2* ` ``*`$*   * +( 3 2* ` ``( `$* * + `  2`@?` `T@`  2`      ?&>?``?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$쀠`?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$``H`|`x0* (*` `?? @ * @ +` 2` 3` ? * * @ 3 @ 2 @0* (*` "`'@`@'`@@`@`'@@`@@@@`@`Ƞ`h, @4, '@@@@@@@``@,`'ܢ@,@ $?쀠`? * 2? 2` *2*   @@@@@@@@@@@@* @2* @@@@@@@@(`ܣ,`$@,@2```@`h*2* `$쀠` ?? @ * @ +` 2` 3` ? * *3 @ @ 2 @@2@* *@$" 㿐`D`@2 ``2  `Б2 `T "  `` ?`h (*@ 0`P`  $ ( $ @ @  ?   2 D@ `  ?( *@0   $ ( $ @ @  ?    2 `#``#\`@6?@ " * &``Г0`h 2*  `` `$* `T  " :    @``    *`@ ``@?&㿈 D Ā'P5h@6@( ` $.@(.h@6@( ` $.@(.. ܐ" ')'6@'@ @ *`$6 (#" ?Z`# ?;?6c3?. (6`6   (` 223;?c1?(.6 6?(@ 0@?1?(.6 6 0@  2`*@  4 ,?# ) 6   #@8) &$6@&@- @ 0@ `2ۈ?) & #4؟(h@0(` $(3?c5?. .06P(.`60P@0(( $ 0&@؟/ h@0(` $(P 3?c5?. .06(.`60@6(.`$ /,h@0(` $(P 3?c5?. / 07 (.`60@6(.`$ 㿘 ̥.`@  D. $ Ħ @``<`8@.@ `, % `2 %  ̀%   @@ ,  $  * "` ?# ?*  *@2@ 2@ %  `?# @2 *`@ 5  `?# @2 *`@ 5 `?# ?*  *@2@ 2@ % `(?# ?*  *@2@ 2@ % `,?# ?*  *@2@ 2@ % `0?# ?*  *@2@ 2@ % `T?# ?*  *@2@ 2@ % Ā`X?# ?*  *@2@ 2@ % Ȁ`\?# ?*  *@2@ 2@ % ̀``?# ?*  *@2@ 2@ % Ѐ`d?# ?*  *@2@ 2@ % Ԁ`h?# ?*  *@2@ 2@ % ؀`l?# ?*  *@2@ 2@ % ܀`p?# ?*  *@2@ 2@ %  ? ̑, @  @* ̖? #`@㿘.`  Ā?_ D  H  `$!@ `@0M  ?# ?*  *@2@ 2@ #`(  ?# ?*  *@2@ 2@ #`,  ?# ?*  *@2@ 2@ #`0@    ? . @  @  . ?$㿘 D H@ ` h`.` ? `@ 0X V&  O!     + @  + +   ( К    +  +`  & #& Б(2  `6!@ ! А?*      +  +`  & Вה  Ё㿘 'H  h `   ?`Ħ @`@ `@`@` 2 T  @ ` #   @ B >  D@* ` ?#$   @ 2 *`@ $      @ @ >  D& T?# $ `  2   @2 *`@       @ @ C  @ ` ?  @ ` C > @n  2 *@  ,@ D`    @2 *`@     ?* +  2` 3  H@ % D2d T  2 *@   B>  ,:  4z`  8t`  @ ,:  4  8 @ 㿈`h Ȁ` ?# 2 , @` g `?# 2 , @`X `?# 2 , @  ` ?# @2 *`@  ? `0  ?`1 `?# 2 , @$ &  ``?# ?*  *@2@ 2@ D@H ;` ?# ?*  *@2@ 2@ ` ?# * 2 , @*  2 ` ?# @2 *`@ #d#h`,#\`#`@`?`     ,: `@C  ??``@  8` `( `T     5    h ,? "<   `@? *`*h2  `   ` !!`2  $ " * `5 "@ $`"`  ,@ ֖?@?倊@" ! 5!   4 "@8 @"  $` 2 $  @tt   @t  2  $  @ "?``D`@  @t@2  $  @ "d?c`@t&@@ t  @2  $@ (" $@ $@t-`x" ` ` @`   @x x`  @ ` " `"`@ `@     @p't`c "p` x@ @6 ,`  @ ` `"`@ `@  ,8% , $@!?5! % 8% 4?@ @ 㿐  h`D  `Ā  $`@0xV $`@0n `  @ ,`  !  H@ `@`0?L!@@@ ;'`` $ ?# ?*  *@2@ 2@ @"U@`@ `?# ?*  *@2@ 2@ $  "< @@ ``?€ @5̚  h 3*  ``$+ :@   `@А* *@*  *" ` ?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`$ `?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`% |`H x4* ,*` `?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`4* ,*` `b"` ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @$ `?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @% |` x4* ,*` ?? @ * @ +` 2` 3` ? * * @ 3 @ 2 @4* ,*`" @ @ `   @@ ,``0!,`@ #p'D'H 'LV $ L??'@@ DL?6'@`h`D` $$h'$ ` " @ -`? !L'@D``H'@|x4@* @,@*` `?c ?*` * 2 2  [H &?#</??@ @ :$@ 4@*  @ *` `  *  *` 2  2  4+  @ ¢ ?<#'?!?`@ : 4@*  @*` `  *  *` 2  2  2   `@ ' ` $' ?c ?*` * 2 2  @"U@`@  '. @'3'&   ,   $2* ! !   Z ! " ??2c ? **` 2 2 ??( 223?c ? *`+  23  ? *@ ?   2  ` ?c ?*  + @23 @ @` 2`` @ 2, " ? ܧ,4#  '?1??  8) @ `$2* # $ @  S # " 6 *  *@ 2 @ @ 2 @ `??% 2`2. * +  @ 2@ 2@ . @?   2  ` *`+   2 2   2 @  2 ) Ԡ" `@e ̓4 h 2*  @ `$* @ : ` `@M * +@ 쀦`` ?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @쀦`'` `?? @ * @ +` 2` 3` ? * *@ 3 @ 2 @`'`|x4@* @,@*` ?? @ * @ +` 2` 3` ? * *3 @ @ 2 @4@* @,@H*`< @ h"쀦``?? @ * @ +` 2` 3`   * *@ 3 @ 2 @`쀦`'``?? @ * @ +` 2` 3`   * *@ 3 @ 2 @``'`|x4@* @,@*` ?? @ * @ +` 2` 3`   * * @ 3 @ 2 @`4@* @,@*`" @ @ `   @@ -` 4$H$h4"`4 4&D`"$<`(H@ @ 4(@$$<$@`$4$8$0D&`($$$$@$d`2@`0!-`@ #`€?`      $` ``€ @4$L?'@L '@`0!-`@ #@ 㿘 h`D    @ l@ *@ @ ``@Q  * @ 6 >@ *  @?#?*  . @2@ 6 @ ! @2@ @ *&@ @61 >@ @: *  @?# ?*  *@2@ 2@ * >@    ! ` @ @` @  l6 $* @ &@@ *@6Q&@ >@ *  : *  @?# ?*  *@2@ 2@ * >@   ذ ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@  !   >@ *  : *  @?# ?*  *@2@ 2@ * >@    ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@ Z ! `@ @`   >@  @  l3@ $* @?# ?*  *@2@ 2@  @@@ , ! ` @ @` @   l6 $* @?# ?*  *@2@ 2@  @@ ! 㿘`h'HD l6@.`H`Ħ@ @ `a?# ?*  *@2@ 2@ 'H@$? @ @@`?# ?*  *@2@ 2@ Հ "@?倦'@|#@8 l 2@  @  l0= ` ,  @`@?# ?*  *@2@ 2@T# @ 2aav, `H` @?# ?*  *@2@ 2@ T 8@H$ ` @ ?# ?*  *@2@ 2@  #  @?* ``@?# ?*  *@2@ 2@  T T@ 2" `?# ?*  *@2@ 2@ 2"" a2 @` `h`$`8 ` "`@` @㿘h'HD`l``6Ĵ \߰ ` 2`$  @HH`  @H` 2 `$`Ȱ @İ - H?# ?*  + @2@ 3 @ #`a ` @ @@ ?# ?*  + @2@ 3 @  Ҁ @`| :  `?@?'``$ @??# ?*  *@2@ 2@ `T  ``T . @ H  ?# ?*  *@2@ 2@  H ? @ @ H  @2 h@  ("h@h "      @HH` @  %8@H @㿐 h?D&  `    l * @ `@d ?& l *@ @   ՘ S $@ @ 6@   6@   TĚ9  ( @ &@ 6@ (  &@ *@ 6@ @  T  6@  #\   6@ *@ @  T  6@  #\  @ #\㿐@ '    @   @   ?@?& 㿘 h  D   H@ `@0@ @<8@,@ 0 @@    @@ 2   `@0@$* @` @?# 2 *@ 6 "` ?# @2 *`@  6 $ `@ `  @`t?# ?*  *@2@ 2@`p   ?# @2 *`@ 6 &` & @`x?# ?*  *@2@ 2@`t   ?# @2 *`@  ?#6 (@ & 6 & 86 (`!?   #? *+  2  3  , (4` 4      >   & ,?& ,`?# ?*  *@2@ 2@ & 0` ?# ?*  *@2@ 2@ & 8`?# ?*  *@2@ 2@ & 4`h?# ?*  *@2@ 2@ & @& <``"& Dd?# ?*  *@2@ 2@ & 耥`l?# ?*  *@2@ 2@ & 쀥`p?# ?*  *@2@ 2@ & `|?# ?*  *@2@ 2@ & P ,  @? "<  &!2 @`(?# ?*  *@2@ 2@ 6 *  (  *# (  @ + ;( @ " "@ "<  @ & d $& d@( & d@ & d@ & d@ & d@@㿐 h D  H@ `$@ @<8@,@ 0 @@ @  ' `@?0 @ * `$ " ?# 2 *@ 4  $?# @2 *`@ 4 &`<*` ?#5 ?# * 2 *@ ` 4@2O (?# ?*  *@2@ 22@0 ?# ?*  *@2@ 2-@+ *` 2 ?# 2 *@ ` 4@2 (?# * *@  $t?# * *@ $p (`;*` ?#4 ?# * 2 *@ 4@2N ,?# ?*  *@2@ 21@/ ?# ?*  *@2@ 2,@* *` 2 ?# 2 *@ 4@2 ,?# * *@  $x?# * *@ $t , :" ?   #? *+  2  3  , (4` 4       < 0?# ?*  *@2@ 2@ $$ 8?# ?*  *@2@ 2@ $ $$ 4?# ?*  *@2@ 2@ $$ @?# ?*  *@2@ 2@ $h ?# ?*  *@2@ 2@ $d ?# ?*  *@2@ 2@ @&$l ?# ?*  *@2@ 2@ $p ?# ?*  *@2@ 2@ $| "< @ @2 @ *2`*  `  ?# @* *`@ $(   ( *# V $( @ * ;( @ V $ @   @ `@ `( `@ `   @` @   @㿘 㿘 㿘 2 h@ h   2  2  @& ,@@P'@`h'HȀĐ@ ؠ  `,,@  @,` $  2`- $ ``$ `,  9`   @ `ؐ` ?$@* @ 2  `@    @  "}  $ M?#`,H62 `  @2 *`@    H  @`?  @ J ؑ.`` @`.`G'@`  @2 *`@ .  " @ ``,*    @؀`` ?$@*   "@  2`,- "  `, _` ؑ.` `@`.` 㿐 h`D`-?`@ !  ?# ?*  *@2@ 2@ @ @ ?@@ 㿘?' D'@U $ @ h``;`D , 5  @ 0  $? ?'  $" D` b`@` " `@ `4  @ "e  ," 2 $?'[  " "`4  4 ,  `% ,@ $ @  ? '@. `2   ?# @2 *`@      @`?  ? '@ -?# ?*  + @2@ 3 @ ` ?# 2 *@ 3`@*  3`?# 2 *@ `   ?# @2 *`@  ?  0  ? ?# ?*  + @2@ 3 @ [`2   ?# @2 *`@  ? ?# 2 *@ `  ?# @2 *`@  ? "?# @* 2 *`@ `3   ?# @2 *`@   ?  ! ?# @* 2 *`@ 4   `$ ?#* 2 .@4 ,  @ % 4 % 8@`  % D"` @2 '@@  ("'@@'@'?# 2 *@  @?# 2 *@ ~㿘 h   Ā@ ]$?# @ P?% @2 *`@ ` @2 *`@  @* 2 *`@ 4&@+   2 *@ @b  2 *@ b  @2 *`@ "?@ ?㿈 h?'`Ȣ`Đ@   $ d`4 "@`@`D֖ ' $ ?`4 $@@􀤠 ?# ?*  *@2@ 2@ " "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@2  h @ `( " h@  h "       @` @ 쀢 "@@ 㿈 h?'`Đ`Ȕ@ <  4 &@ 4 "$ d $ d@ $ d@ $ d@<@< 2 4 * 2`@@`@`D '쀤` ?# ?*  *@2@ 2@ " "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@2  h @ `( " h@  h "       @` @ @쀢 "'@'  $ ?`4 $@@㿈 hV $ ?`Ȁ@`#'?'@  "$ d$ , @  2`  $ ?4 $`@@2 $ @$' ?# ?*  *@2@ 2@  "C "< @@".(@"/@,/* @ ** @"0 @* @ *` *` *` *`  *` *` *`* ` ! 2  *`" ,2 `@  ?# @2 *`@   '?# ?*  *@2@ 2@ `"C "< @@".(@"/@,/* @ ** @"0 @* @ *` *` *` *`  *` *` *`* 4!` 2 " "2  *` @` 4 $ @ @ (@"p@p`: # 4 " "d$4 " 2`@@`@`D '쀤 ?# ?*  *@2@ 2@ `" "7< @@* (@( @$ #*@ *@ 0 @  *@2*  * * *****`  "`& D@2  h @ `( " h@  h "       @` " $@  $  `6 $@@쀢 "U'@Q' 4 $G 㿐 h ,   Đ  @ 2 `$  h`@Ѱ  ?# @2 *`@ ?# ?*  *@2@ 2@  @2$ @?# ?*  *@2@ 2@  @ 2   @`    h`@  ?# @2 *`@  `?# 2 *@  @ ?# 2 *@  ,\@?#-/`" `$   `" @ 4  @ 2 `$ @ 5 @ 0  ?*  *@2@ 2@ `# @  2 *@ @ 2 *@  , `` @ 㿐 h`Ė`@?{`D '` h €?􀤠??# ?*  *@2@ 2@  @` Z? %& D`N$  @2  h@ `( " h@  h "       @` "T $@ T $ h`@4 $ $ $ D`$ ,@ $?6 $& 4& 8$ 8 @@ @㿐`h`Ė`@?`D |'` h €?􀤠??# ?*  *@2@ 2@ \T $   h`@  4 $ p G`  "`$`D@2 `h @ `( "`h@ `h "`  `    @` @  `$`8`$`4@ $ ?`4 $@`8$ 8@  @㿈 h?''(@  (`!$d4" @   N `@ *N   @ 2 $?`4$@@ `$N  *  ?*N`*` @ `@ `(`@`"@ $,@`@`D '쀥 ?# ?*  *@2@ 2@ "`  "`& D@2  h @ `( " h@  h "       @` @ 쀢 "@@V'㿈 < h " `m?V $ @$@e?D '[  ?# ?*  *@2@ 2@ "`  "`&`D@2 `h @ `( "`h@ `h "`  `    @` @ 쀢 " $@ $ 6 $ & 8@ & @ 㿀 h' '`@'`D"?`'쀢  V'􀤠?# ?*  *@2@ 2@ `@A @D '䀦`2`h@ '䀢" `"€?`"<  @䀦`?'t  ?'  @젒   $ ?# @2 *`@  ?# ?*  *@2@ 2@  @퀤 ?ဦ`'V$ @〤 䀢` D@'䀢`7 &D&`?# ?*  *@2@ 2@ ">`& & D`$?6`$`&`8@  & 8`& 4@ K $ `?# @2 *`@ ?# ?*  *@2@ 2@ #   @2  $@  (" $@ $ ?`6 $@`" $`$`?` 6`$ `6$@  @2  h@ `( " h@  h "       @` @   @2 h@ `( "h@ h "      @` "'@ '쀤 @耢 "@䀢 @㿘 D'P'T'X  `$?*ѐ @   . & 9 @P! " "  0 "  0!@ @ !@ @ 㿘 D'P'T'X  `$?*ѐ @  .  @P 2.  !`  @& @㿘#`'P'T'X@P !@ @㿘  #@`  %@ = . @ O@ 8&@`@ @ ~&@`@ @ @t&@`@ @ j&@`@ @ `&@`@ @!V&@`@ @"L&@`@ @$B&@< `@ 24@ ?&@`@ @ +&@`@ @ !&@`@ @ &@`@  @ @` &@  @ 0 @` f 㿘 DP Đ@ @?@   :%HTLP@%@ @ w@l H4 + "@ @T  H @*  `& H :   ̓," H * ̨ Ъ  ?,""@H 3?# @<8@, ,  @ ̕, -"@  ̀` @$ ` ?*  *@2@ 2@ "U@H*  ? @ ,  % %@ 6!* " @ ̀"! H  Б, @H ̀ ,@  , @, 㿘 D P@? H@$T@LP@% @@@ @ @T@ @ @! @` В@,` @`!@ `8 H Г,` @``,`H @  ̑,`@ `@H ̀@ ,`@ @㿈7    @`  ` ` @ .  `!&!! 2!@ z'2 ! @ !`&!! @  j& D! ' "H< " 00r @0n""W<!C0f$0b> &%`%ha0$< (%`%h b@$< (%`%h`@%P%tJ% <$ (%`%h%P%t%  2> 0 $ (%`%h%P%t%  2/ ! 8( (%`%h%P%t%  2   $(%`%h%P%t%  `!0 @ `& @ 耦 @ @ @ ؐ$h: * @":  $*`@ :` d b\F $*` !T$@  @!@ ! ' !"  @ `% @ ` 0?# ?*  *@2@ 2@ %L` 4?# ?*  *@2@ 2@ %P` h?# ?*  *@2@ 2@ %t` L?# ?*  *@2@ 2@ %`` T?# ?*  *@2@ 2@ L@ %h@@ :Pb dh@ .@t @P<t@=V"8 " H`? H`?# ?*  *@2@ 2@ ` ?# ?*  *@2@ 2@  !8" L р   ? *`  *` 4    @:` &  @ `&  4`?# ?*  *@2@ 2@ & ` T?# ?*  *@2@ 2@  . & & `\?# ?*  *@2@ 2@ & $` ?# ?*  *@2@ 2@ %(` ?# ?*  *@2@ 2@ %,` ?# ?*  *@2@ 2@ %0` ?# ?*  *@2@ 2@ %4` ?# ?*  *@2@ 2@ %8` ?# ?*  *@2@ 2@ %<` $?# ?*  *@2@ 2@ %@` (?# ?*  *@2@ 2@ %D` ,?# ?*  *@2@ 2@ %H` 8?# ?*  *@2@ 2@ %T` <?# ?*  *@2@ 2@ %X` H?# ?*  *@2@ 2@ %\` L?# ?*  *@2@ 2@ %`` P?# ?*  *@2@ 2@ %d` T?# ?*  *@2@ 2@ %h` `?# ?*  *@2@ 2@ %l` d?# ?*  *@2@ 2@ %p` l?# ?*  *@2@ 2@ %x` p?# ?*  *@2@ 2@ %|` t?# ?*  *@2@ 2@ %` x?# ?*  *@2@ 2@ %` |?# ?*  *@2@ 2@ $%`8 ` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %` ?# ?*  *@2@ 2@ %`aX?# ?*  *@2@ 2@ %`$?# ?*  *@2@ 2@ "%``<' @<'@8'<'`!?   #? *+  2  3  , (4` 4       "=``D' HD'H@'D'耦`!?   #? *+  2  3  , (4` 4       =Ȁ`L?# ?*  *@2@ 2@ %Ѐ`P?# ?*  *@2@ 2@ %Ԁ`T?# ?*  *@2@ 2@ %؀`X?# ?*  *@2@ 2@ d h+`P l*@ T(*@ ?*@2*?%%%%%%%%%%%%%%%& & Đ@ @  & ,@   0!. @ #0@"6 @6  0!. @ # @`   `㿘 D$h:@*` `$:  $ $ @ Āq  ` ?# ?*  *@2@ 2@ "# $W`?# ?*  *@2@ 2@  !8 " "!+0;$07`?# ?*  *@2@ 2@ % a8`?# ?*  *@2@ 2@ #`?# ?*  *@2@ 2@ aH@ . 㿘  D@@@ D6 ` @`  `㿐 D$`h : '* `````$:`$ ! Ȩ   ?ꐊg @ ?@'&!@ ` @`x@@`  ?# ?*  *@2@ 2@  "$ $W ?# ?*  *@2@ 2@  !8b " "!+0;$07 ?# ?*  *@2@ 2@ %%!8 ?# ?*  *@2@ 2@ $ ?# ?*  *@2@ 2@ %!H@  . &  @  @ 2 @  ?&  X DF!T`$  ''D'?# ?*  , @2@ 4 @ ?# ?*  *@2@ 2@ l d+ @'X@@" 'H@'̀ ?# ?*  *@2@ 2@  'Ѐ'D`@ @ ? 㿘@ 㿘@㿘@ 㿐  `@   @ 2 $@?`@@ @㿐 `h    `@   @ 2 $ 6( 0&`  J   &J  D`@  @ 2?@ @㿐 h D  , P @?l !*@ Ā@      .@ ''  4 '7@ '^5 *  ?# ?*  , @2@ 4 @`2 `@ :*@@P  瀣 ?c ?*  *@2@ 2@ @Ӏ " @  *$ @, "@& @@@@ k`-  ?c ?*  , @2@ 4 @`OT /?c@@P     ?* * 2` 2  @ ) @ &"T@ T *$ @ " & @@`" T$@T@@T  `@@bl7@*  ?# ?*  , @2@ 4 @`2 `@ @.?#@@P     ?*  *@2@ 2@ @ H @ E" @  *% @.@ "@& @@@㿐 hĬ D @` ?# ?*  *@2@ 2@ `2  L@@`'?# ?*  *@2@ 2@ @  2 ,`'@ L @?" @ y9?h`6@ P*` 2 ?$@* @@?c ?*  *@2@ 2@ `"QT 0`#@@P `  `  ?* * 2` 2  @ + @ ("T@ T *`%@  $@T@T @ " & @@`@ *h@ @ (?Ph2 ?#?!? 6@* @$*``  *  *` 2  2  @ `@ 6@@ *, h@ `$ @?# ?*  *@2@ 2@ `'@ @ " & @@T@@' h "    " @   @@@㿐 h D L ,@? @" ?# ?*  *@2@ 2@ `2 ʰ @'?# ?*  *@2@ 2@ @  2䀤&  2?#h4 P*` 2 ?$ * @ @ ?*  *@2@ 2@ `"  , @ O@   *h (?Ph2 ?+?#? 4*  $*`  *  *` 2  2     4 *, h@ $ ?# ?*  *@2@ 2@ & @ " & @@T@@' h "    " @   @@@㿐 h D ,`L@?``` @Đ` "@"   ؀  ?# ?*  *@2@ 2@ 2 @@ '?# ?*  *@2@ 2@   2`䀥 %@ `h ?3* ``P@2` $, *`  @ `   (?`P`h2 ?'?%? 3*  $*`   *  *` 2  2     3 *, h@  $ @?# ?*  *@2@ 2@ %@ @a " & @@`T@@' h "    " @   @@@㿐 h<`D  " @ @(@d #`t є `   Ԡ" , h "  2   @@!0h@$:@ @ "P $"@@  @ @ ( @ "@ & 4& 8P ,  @? &!@㿘`6 h61 (@  ",  && .` P6`@,  $@  *P  ,   "@0  . @  @ .  㿘 `22  h6`8,  && .`  P6`@,  $@  * P  ,   "@0  . @  @ .  㿘     ,  @  @  , @㿘   @  "$@$ `@  㿘   @ ,`  @2  @ (" @ `@ ,`㿘     , @ @   , 㿘  ,   @ , 㿘     , @ ` @  ,    *` 8`@ *`㿘      , @  @  ,         *`` @ 0  㿘 h*@ 8   P8,` $@ P`@ 㿘` h*@ 8  ` P8,`@$@ P` ufs_free_fragmentsinternal errorfreeing blocks are outside deviceinternal error, bad magic number on cg %ubit already cleared for fragment %uufs_free_blocksinternal error, fragment %u, count %u freeing free fragmentufs_new_fragmentsinternal warning fragment %u, count %uinternal error, fragment %u, tmp %u <3>ufs_new_fragments: bread fail ufs_add_fragmentsinternal error or corrupted bitmap on cg %uufs_alloc_fragmentsufs_bitmap_searchbitmap corrupted on cg %u, start %u, length %u, count %u, freeoff %u block not in map on cg %u ufs_read_cylindercan't read cylinder group block %uufs_put_cylinderinternal errorufs_load_cylinderinternal error, high number of cginternal error, wrong number of cg in cacheufs_readdir: dir inode %lu has a hole at offset %lu ufs_readdirreclen is smaller than minimalreclen % 4 != 0reclen is too small for namlendirectory entry across blocksinode out of boundsbad entry in directory #%lu, size %lu: %s - offset=%lu, inode=%lu, reclen=%d, namlen=%dufs_file_writemode = %07oufs_free_inodeinode has count=%d inode has nlink=%d reserved inode or nonexistent inode %u ufs_free_fragmentsinternal error, bad cg magic numberbit already cleared for inode %uufs_new_inodecylinder group %u corrupted - error in inode bitmap internal errorufs_bmapblock > bigufs_getblkufs_read_inodebad inode number (%lu) unable to read inode %lu inode %lu has zero nlink ufs_find_entrydirectory #%lu contains a hole at offset %luufs_add_entryinternal error fragoff %uufs_delete_entry...empty_dirbad directory (dir #%lu) - no data blockbad directory (dir #%lu) - no `.' or `..'ufs_rmdirempty directory has nlink!=2 (%d)ufs_unlinkDeleting nonexistent file (%lu), %dUFS-fs panic (device %s): %s: %s <2>UFS-fs error (device %s): %s: %s <2>UFS-fs panic (device %s): %s: %s <4>UFS-fs warning (device %s): %s: %s ,ufstypeoldsun44bsdnextstepnextstep-cdopenstepsunx86UFS-fs: Invalid type option: %s onerrorpaniclockumountrepairUFS-fs: Unable to do repair on error, will lock lock instead UFS-fs: Invalid action onerror: %s UFS-fs: Invalid option: %s wrong mount options You didn't specify the type of your ufs filesystem mount -t ufs -o ufstype=sun|sunx86|44bsd|old|nextstep|netxstep-cd|openstep ... >>>WARNING<<< Wrong ufstype may corrupt your filesystem, default is ufstype=old <6>ufstype=old is supported read-only <6>ufstype=nextstep is supported read-only <6>ufstype=nextstep-cd is supported read-only <6>ufstype=openstep is supported read-only unknown ufstype ufs_read_super: bad magic number ufs_read_super: fs_bsize %u != {4096, 8192} ufs_read_super: fs_fsize %u != {512, 1024, 2048} ufs_read_super: fs is active ufs_read_super: fs is bad ufs_read_super: can't grok fs_clean 0x%x ufs_read_super: fs needs fsck ufstype can't be changed during remount this ufstype is read-only supported failed during remounting ufsufs_trunc_directinternal errorufs_truncate_direct        @    !     !@*&N>*>N>6^>>>^>6^>>>^*>>*>>.n>>>>*>n>6^>>>^>6^>>>^&66.66&n666>.>nN^^n^^nN^^^~n~N>6^>>>^>6^>>>^>6^>>>^>>>>>>>~>>>>>>~*>>*>>.n>>>>*>n>>>>>>>~>>>>>>~N^^n^^nN^^^~n~NΊΞΊGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata.data.rela.data.bss.comment.note.modinfo__ksymtab4!h5  , 44:R8  EJSY*blS L ` >    vi  (   ($V8R  P  PV    vH   i   i    iP`ihxi (0i8HT\lt|iii||4    vi   (( ,V0 (pR  P V Pp t | v ,<iL\lixii ,4<ii (i\idt|i||`0 4 < @ H{  8  8vh h h ii lSyP  P l  ! S!!(y!@P!X!p!!!"""i#<#Di#xl##[#$[$ P$8$P$$$$ `$$ `%S%%y%P%%&$&@&X&&&&' i'hR' ' P' ' P'V((| ( ) ) ) ) )V+0-|-|-8-@/`0tR0 0 P0 0 P0V1 1 1h22,2458P|8\|8x888:X;;==i> >>,i><>L>\>l>t>i>>i>>>>>i?x???i???????i@i@@(@0@@@H@PiAPA A A A Bd Bl Bp Bt C, C8 CD CH CLvD D HD DvD HJJJO`O| hO O hO OvO O O OVP P|QQT QX Q` Qh Q Q Q Q QVRS\SdfStS @S @ST xU xUU\VWWl Wt W W XD XL X X XY Y Y Y YvZxp Zp Zp [ h[ x[  h[${[( x[Ph [Th [L\x\\\] \] ]Y]0]X]ly]P]]]^^8^`^^_ _,_d _t _L_ _ _ _{_ `  ` ` `{`  `8`d`x `| ` ` `{`i``Ra8 a< a@ aD aHVaP aT ab$ b( 0b, b0 0b8ve|e|eeeffpfigihRi Xi i  Xi iVm@ XmD hmH XmL hmTvm Xm m Xm mVq(|q4|qPqXqq q rr0LrLrsssT sX s` sd{sh tuduvw8w\wxxyhSyzz||S| | |}L}p}}~0S~~`SP4p  L    {$ 8|    {ii( , 8 <{@ H  ( v (p p p Ti8\ ` |a a s s $8 < D H Tih|i    {pP`L, H X Xv H H4      v L   p Lp p p $P<T  T  LLHp Lp \p lPP s s Lxp |p p P (4LxLa a 4L<   m m P0H\Lp p p (P@\LD\ d h l{p L P Th l p    {  @ D Xt v X 4p p p P<Xl Pp `x P|{ `p p L L    {p p 0p @PXt  LL$<l LxPLHp Pp dp pP p p p P8T Lxhp lp |p p p L 8LPLhLP P4P8|T X dX¬ °´ N   ,|< @ LXh t xÌà ä üX 8 8 ` ` h <@ hL T p` pdt xĈ xČĜ İ Ĵ     ( ,< P Td ŀ ń ňŘ xŠ Ŭ Ű     $ (8 P< @D ` Pd xl|ƀ `ƴi\}8Tx\$<\PlɌi}0<H|Pʈʘ (<U LU Xˀ˼    \< @L @l @| @, 4 h p ͨ Ͱ     @k,iDT X  Xq(, Xм    qT X0 X\ (p x | ҄ ҈ (Ҍ (ҐҨ XҬL (P (X`xqU dt x (|PuXq`hU pU |d  x$( xhup t $|L PT `t x| hnx] ] 0Y\ T`~d Tt Tx TWM\] ] YDi4 8 < @ DVp(L<LdL     V0HL(}i<|lLOLQ`xiiH}||HOLQ(@HXii0}|O`LpxQo (<PTl|  iL\4|(PyPL S (w<@gDeHLZP^T_X\`|Z `Zz_f (,04j<t@DHT \      d%8LJhWJh<iS oS {<Z <Z Z__sx`} &5,CT bjt(,T    h%BZjTyTQ@<*<PL\f<X Tsd L|4-\ LHY^qXp<`ɬ/NjÜTvP",BlXS_0ble 8XW$dT,p/J[bL{$H!9&KXWjPt88 A8 D ,  % + > LdX i y$ D44 d \ 4p   Ɯ   ! 9 Q8 ` f }p l   O D lX  0d   +acl.cgcc2_compiled.*ABS*balloc.cufs_fragtable_8fpbufs_fragtable_othercylinder.cufs_read_cylinderdir.cufs_readdirufs_dir_operationsfile.cufs_file_operationsufs_file_lseekufs_file_writeufs_release_fileialloc.cinode.cufs_inode_getfragufs_block_getfragufs_update_inodenamei.cufs_find_entryufs_add_entryufs_delete_entryufs_empty_dirsuper.cerror_bufufs_parse_optionsufs_super_opsufs_fs_typesymlink.cufs_follow_linkufs_readlinktruncate.cufs_trunc_directufs_trunc_indirectufs_trunc_dindirectufs_trunc_tindirectutil.c__mark_inode_dirty_R8e8c6e94lookup_dentry_R9ebaf499panic_R01075bf0ubh_max_bcount___set_bitubh_bforgetufs_load_cylindergetblk_R0cac240bubh_bread_uspi__this_moduleufs_panicdput_R154d7397vsprintf_R9d00330a__copy_user_R9c5239ebufs_unlink___clear_bitkmalloc_R93d4cfe6stack_top_Ra6cab6a7ufs_symlinkufs_mkdirgeneric_file_read_R2cde3e44ufs_dir_inode_operations__module_using_checksumscleanup_module___atomic_subufs_lookupufs_bmapufs_createsecurebits_Rabe77484.udivufs_delete_inodeset_blocksize_Ra842722aufs_alloc_fragmentsstrcpy_Re914e41e.divschedule_R01000e51global_event_Rcaf51008ubh_brelse_uspiinit_moduleblkdev_inode_operations_R347c22faufs_put_superufs_put_cylinder_structuresufs_errorfile_fsync_R93c099e2unregister_filesystem_R3a9d7a75mark_buffer_uptodate_R2f9b9072generic_file_mmap_Rb4307b40ufs_warningubh_mark_buffer_dirty_ubh_bread_register_filesystem_R8b74f3d0get_empty_inode_Rc01ab9f4ufs_remountprintk_Rdd132261generic_readpage_Rb596983f__wait_on_super_R3bc4cf62ufs_breadll_rw_block_R08ea67abubh_buffer_dirtyufs_free_inode__ashrdi3in_group_p_R9878bc79strcmp_Re2d5255a__wake_up_R8a4864faufs_new_inodeufs_file_inode_operationsufs_check_dir_entryufs_write_inodeufs_permissionufs_read_inodeufs_sync_inode_ubh_ubhcpymem___wait_on_buffer_R8468a33astrtok_Ree9c1bd4memcmpubh_mark_buffer_uptodatechrdev_inode_operations_Rb299eecfinit_fifo_R7fea633binsert_inode_hash_R9289e3e5kdevname_R160820f5__bzero_Rdd42e263__bforget_R732d8c50ufs_renameubh_ll_rw_blockrefile_buffer_Rce9d3f7eufs_add_fragmentsinit_ufs_fsd_delete_R8309cde3ufs_rmdirclear_inode_R88e1ce5bufs_alloccg_blockufs_linkupdate_atime_Rf62a968c__module_kernel_versionufs_truncateufs_bitmap_searchd_rehash_Rbc2db168ufs_free_blocksiput_R637caabd.urem__brelse_R9bb16e38___atomic_addufs_symlink_inode_operationskfree_R037a0cbaufs_write_superufs_clusteracctufs_free_fragmentsubh_brelse_ubh_memcpyubh_bread_Rdb41b5aeufs_statfsufs_read_cylinder_structuressend_sig_Rfbc7210biget_Rbb5d76f6d_instantiate_R15af7404set_writetime_R7a99c921ufs_read_super.umuld_alloc_root_R57d6f53eufs_new_fragmentsstrchr_R349cba85ufs_getfragufs_put_cylinderufs_put_inodeubh_wait_on_bufferupdate_vm_cache_R316a00baufs_mknodxtime_R3cb6ce39get_hash_table_R11b6979c__memcpy_Rbfaaaa73ELF+`4( 㿘@ 㿘` @` `  L`D  㿘 (`@ "`@ `@ `@ `@ @`  &@ &@ 㿐`  8&`   +@`  s -@ =  @,@@   N` * # {`@   =` *  }`@  ,` *  ~@%&` `@ v ` `?*`  &` `@ `@ `  &`  ,,?`2, @` ` " ;&`  ` @ J.?  0 ("` ` @ H.2  @   @   0( "` 㿘` @ @ .  @ .    @@   㿘` @ @ .  @ .    @@   㿘N J ` F D`@J?` "S?ꀦ`4P? `#`:" @` + `$: N  J .""J  ."   `# @@ `@ 2@ ?2  `  @@ `@ 2@ 㿘  `& )$  `2T? ` @ 2M? @ H F :D . `?`$2;?ꀦ` ` .   ` .. .2, `4)?ꀦ`" 1 `2? ` @   . :"?    `?`4  ?㿈'@ h@  ?  J. (  4  ( $(   (  ( $(㿘 ' ' . $@ X2a?@ 2[?  J H :F `?,@``2I?ꀦ`;$@  ` ,@`$@ $,@`& '$@   2,? @   . :"?   `?,@```2?ꀦ`$@ ?ꀢ    ,@`$@ $,@ h J?` "?ꀦ '@  6 ?0  @ @  , `2L@ ^ @ L .2   :L@ #L@`  *L$   ,  _-`% "L@L@ 2,L@@ 2 @ `  `*:`@, " , `ܢ``?/  Ц _)@& " L@L@ "L@, @  @ `  `*:`@, 2, ۢ`**@O؀ ؐ `   _/ؐ @ @@ h `f 2`4  ~. @0,`X $ 0?#2` ` ` 1 ~,`,`'Ȑ@@ 6  㿐`\@@&J .2&* ^@J?`."`B R& !L "&` :2"`4n?     > `: ` 7*2` /@*`@ /@`   `@`   & &! /@`/@  &`!?0('?@ ! /@`/@ @& `@  "@ 6 ?/@`/@  ` & 㿈J?`. @ `U?#\\L @ 0E@ '  `` *`2 @  %,`* * .:   ...6@@  @  @ `   @-@ '@  㿀 h  2`  2`2` ' `   '  "#\>   #\#`gp`h"@  2`?  @? @ .2??! a  @ @ 4? @찒 @ذГ: & `'u @ '3а  "@`" $"@:   А` '@ B`B  ? > @ 1@@ @   Ӳ`  `$`8$`0$`4@@`4`@`@* @2@ 2 2 @2`@2 @"`@ ? *` @ * @ +`В  b>& @㿐`@  h .2   s@ @ (?&  `" $"@:   ` ' B`B  > ?@  ? "?    Ȁ Ȅ"Ȑ ` h' `s  , '*`@&`P`@ЖȀ  'Ġ ,  h@ h@Ā   " @ @0@*  ` &`P`D @&`L@`h'̐`@ ИȰ )'Ȑ@Ġ@   $ 4$ 8$ 0@`$ D" $$D`   D@&`L㿐 h@ 2 4\?@$`@ ` `@  , ,` ?  2`*  4 4 4`4` @ `2*`@ 4 4 4 4`4`4` ƒ  2* 4`V Ĕ  +` 3`+  4``ƚ  *3` 4`:V`Ą ( + 0@4`4@ & 0`& 4& 8@ 㿈& 4'L& 0'P " & D h`& @P?*L@ 'P``4?LPL P " $#:    蒂` B B?'P? @ & P?*P* L@ LL`@h``@'-?@` (А`@RȀ 6`2`$ `" 4 `"`0@``` @ ̒w $ ?4 $h'̐`@'Ȱ `2`$ `" 4 `"`0@``` @ ̐N@` h'̐`@ FȰ I'Ȑ@İ $#` & 4`& 8& 0@  & D" $$ D`4 $$ 6 $ '`  D@&`L@6 $`& 4`@& 0 `@̒@ $Ē4 $(``@`h'''Ж < "  `? `@  #@  `؀@`̀@@ o@ 2h@ 7 Z7&`&D&'@Ȑ @  @! &$`D `$`8`$`4@``$?6`$ &`8*?Ēc : *2 * *` 3 2`*   2@ `$`4`$`$? 6`$$ `6$@@@@㿘  @ & h& @  6  @  &&" x 2   @ &* `& &  s.  s ,  , "`P㿘@㿘@ vfat1yestrue0nofalse,utf8uni_xlateposixnonumtailforcelongforce_longaux nul prn con lpt9 lpt8 lpt7 lpt6 lpt5 lpt4 lpt3 lpt2 lpt1 com9 com8 com7 com6 com5 com4 com3 com2 com1 %04X. .. <4>vfat_rename: fs corrupted vfat_create_R73131e21vfat_unlink_R605974ddvfat_mkdir_R2ff45af4vfat_rmdir_R1b720b02vfat_rename_Rc8bc8ee8vfat_read_super_R5ce1adf3vfat_lookup_R69e06cab*?<>|":/\[];,+=.:"?<>| GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.rela.data.bss.comment.note.modinfo4%l!- 0 ,%64'8>: M(V(L\: g* l* zu*({***<2 D7 Q 7 8  8 ,C  W  W  W  W ( (W 0W 0\ 8d\h 8 @zW @ H HW X4 X8WH ` `W p pW  W4\8 8 { ${ s_  <z@  p p ps    sh{ l{ p  zT{ X{ \  z | 9 { {  H Lz { {   $z { {  z  X{ \{ d z    z{ ${ 0 hzl   z^(84 4 4   T DPK} } nDn\ny @,IDDDr0@<=qZ49fDX  82L[Xpdqf  ~90HDlP:` kv~9   (20J 4J DJ hvi[  D  DX9  2  J   ,J 8J T2pXf@Xh96   S2   S2e 4~ D H d2 lJ pJ J v 9   S!2!,l! ! !|" ", "0R"4 "H6"\S"hJ "J "J "J "S"c"J "2"J " "J # #2#< #X#2#9$9$ 9$ 8 $$8 $8o$HE $XE $hB$C$C$ $ % %  %( @%, @%DO%X7 %\P%`7 3uV >xbGt `$;(M,w0a4YM(L,0DhH$XL\h`$ptx|p`P@0 53aV xG`     $,`<GQL(ahtk$t4t08pL P H 8/ @ K la8|nD, $Tx l#@Xes`  "7%TF_mtXx%@$$9Ff0P#C]y!Lx$01Pc| (  .>Xj}Hx` (9J]svfatfs_syms.cgcc2_compiled.*ABS*namei.cvfat_dentry_opsvfat_hashivfat_cmpivfat_revalidatevfat_hashvfat_cmpvfat_put_super_callbacksimple_getboolparse_optionsreserved3_namesreserved4_namesbad_charsreplace_charsvfat_valid_longnamevfat_valid_shortnamevfat_find_formvfat_format_name_fastvfat_format_nameskip_charsvfat_create_shortnamexlate_to_univfat_fill_long_slotsvfat_build_slotsvfat_add_entryvfat_findfind_aliasvfat_create_dotdirsvfat_remove_entry__mark_inode_dirty_R8e8c6e94vfat_create_R73131e21jiffies_R0da02d67fat_dir_operations_Rbecd094afat_dir_empty_Rfb48af8cvfat_fs_type__this_modulefat_brelse_R7c880e22dput_R154d7397__kstrtab_vfat_rename_Rc8bc8ee8__ksymtab_vfat_create_R73131e21kmalloc_R93d4cfe6__kstrtab_vfat_unlink_R605974dd__module_using_checksumsfree_pages_Rb5136506cleanup_modulefat_read_super_Rf4e01055___atomic_submemcpyvfat_dir_inode_operations.udivvfat_rmdir_R1b720b02d_invalidate_Ra26ed68f.divglobal_event_Rcaf51008utf8_mbstowcs_R1d0c9fd9init_modulevfat_read_super_R5ce1adf3__ksymtab_vfat_mkdir_R2ff45af4init_vfat_fsunregister_filesystem_R3a9d7a75register_filesystem_R8b74f3d0printk_Rdd132261fat_detach_R4a828bd8sprintf_R1d26aa98__ksymtab_vfat_lookup_R69e06cabvfat_unlink_R605974ddstrcmp_Re2d5255afat_mark_buffer_dirty_R43ec254b__kstrtab_vfat_lookup_R69e06cabfat_add_entries_R770945e3fat_date_unix2dos_R83fb36a1strtok_Ree9c1bd4__ksymtab_vfat_unlink_R605974dd__memset_R1907e126__strncmp_R8c5ff0fdvfat_rename_Rc8bc8ee8vfat_lookup_R69e06cab__kstrtab_vfat_mkdir_R2ff45af4fat_attach_Rd86941fb__ksymtab_vfat_rmdir_R1b720b02d_delete_R8309cde3fat__get_entry_R4d546df0__ksymtab_vfat_rename_Rc8bc8ee8__ksymtab_vfat_read_super_R5ce1adf3fat_add_cluster1_R1e4de202__module_kernel_versiond_rehash_Rbc2db168iput_R637caabd.urem.rem___atomic_addkfree_R037a0cbafat_search_long_R9ca9a9b6strncpy_R328a05f1strnicmp_R4e830a3e__kstrtab_vfat_rmdir_R1b720b02__kstrtab_vfat_create_R73131e21d_instantiate_R15af7404__kstrtab_vfat_read_super_R5ce1adf3vfat_mkdir_R2ff45af4__get_free_pages_R19d9ac40strchr_R349cba85_ctype_R8d3894f2fat_scan_R39dc1145fat_esc2uni_Rdf8b5a1efat_build_inode_R5f32ee2cxtime_R3cb6ce39__memcpy_Rbfaaaa73ELF)4( 2""` "@ "` "@@@ 2  " @2`" @` `@ 㿘 @㿘 @ W  "   HC & .` P* .`@`$, `0@ $` 8@ ` 0@  H`@  L`$@ 0`@ 4`   $` $` P@  $`4$`0 ,€ i @ 0d b& ^   \&@ 5S .`* .`"@ P*`0  @  D`   B 2 `t`p @@  `t@  B`r@  `p  @@  &   & .`@*`  P 0@ @  @  @0@ 㿘  "|.`.`@*`  P 0@.`"* ? A       @ E& @  & @  9&  @` &  `     " ``@ &  `@  , ` `"   @     `*@  ` &   @ @K @a0B*  P@ `0@`.`$, @ $`H@?$$$$$ "@ P @ T T  $`4$`0$`<$`@4` $`8$` ,€   @ 0 &   @㿘V X`*` Y: 2C p \@` @``? ,`  & l& h& `& d & t < @ @& p p @ tV X  X 2 (` +@  2 *`:`,`& x@ @&  6 Z@. @    @@0@ 0    @ 㿘`" ``"^ 0Z`. @` \@ d``   "   8  @` "< `~` P@` <  P`T@<  <    `B `@ @ . &a`6&`$` p(` @(@ x`& x`€0`    @F!s@`&@*` * @`H `0@E0<`:8 `4.@`0`L`,BF` !@' `" F !@.* @`H&  @   @㿘`   ` & 2  @ 㿘`4@  3 @.` @F!s`"*$ $0$$$$$,$@ .`*$@  $` "@ @@ @?0@@  6 $`$`@``     $`$``P P@@4 $ 0$ H4 @``   `n   j`? (_@@```2`,4 @ 2  *@`@$` `P0@  @"]`,€`@` ?2-` ( `P@ 0$  H@?"`"`"`"`"` "`P @ T T 4 $ 4$ <$ @$ 0$ 8$  @`@`P`" `@$( @   y`  ` $` 6 @ `P0@ @ P`@@ @@h@ 0.` F*!`''''''''@   '@ @ M?@ (  )# $`ܐȒ@$``$` "`"`@2` "`H2`@``,€`@` "@ @`@P`ޤ`!'@ @u@   6$`@`@ 㿘   "$`@  ` "` 2"㿘 `` `@ 0"2""㿘 `@㿘  p t    2"2?* @`  ` 2`` 2  * *@ @@6 `*@ |   p@@`&a€0m x?& x *`" ` P@#`B@ `@  * `0 "@@  `# @`T 2 `E`~ 2`E$ -& *" ` `$ ``$ `~` `T$  P``l@`T&` @ `~ P@ &$ `C @`E`C @" @   ,€ | 㿘 ` x  "& &  2 x` @      ,㿘  € ` 2 ,㿘@  㿘  xZX*`*: :` 2Z@ 1   &! @@ 1 㿘3x` & @㿈 x'''21 @  $m1 4`| B +`B @  E+ @*A*C"$ 4 $@ C C @" @  @?1"""`d! "`` "h@ X@?"#"`"~  @"`@ X  1"  1" 㿘@ 1 㿘`x @ T`X `X `, @ *!  *&!€`"@`X*:  &``(@4`Z@  211  㿘 p  t    2`2 ?*@" ` 2```2`(` ` (@6` x& x` *#    @  @$ P?H@" " " " " .@  $4$0$<$@4 $8$$H@ (BF '''''''  @$L@ 5`"!@   @ !'@ @@"` (00 p(`*@@ x P& x0@㿘 @ ,?@ $ 8 @  0 @  H @  L $@ 0`k T  T@2 ? h@  p@ @㿘 (@ ?@ ( "$$ $ `A     @@2?@ @h@@@@@@@@@@@@@@_@@=@mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... FC: Cannot enque PLOGI packet on %s FLOGI failed for %s with status %d %s: mismatch in wwns. Got %08x%08x, expected %08x%08x %s: ONLINE %s: FC is offline PLOGI failed for %s with status %d FC: Bad magic from REPORT_AL_MAP on %s - %08x FC: Not enough memory, offlining channel FC: Cannot enque FLOGI packet on %s FCP SCSI cmd & rsp queuesFC: Reset in progress. Now?!FC: %segistering unknown type %02x UnrR%s: (%d,%d) Received rsp_status 0x%x <4>%s: state change to ONLINE <3>%s: state change to OFFLINE FC: Cannot allocate memory for initialization FC: Cannot allocate DMA memory for initialization FC: Cannot enque FLOGI/REPORT_MAP packet on %s FC: Cannot allocate memory for forcing offline FC: Cannot enque OFFLINE packet on %s FC: nothing to release %s: SG for use_sg > 1 not handled yet fcp_scsi_queue_command: queue full, losing cmd, bad FC: Abort not implemented FC: soft abort FC: hard abort refused FC: bus reset! FC: host reset fcp_init_Re9bce26dfcp_release_R63080e86fcp_queue_empty_Rd32cd792fcp_receive_solicited_Ra7d67720fc_channels_Reee62cfefcp_state_change_R20632cf4fc_do_plogi_R814ddc98fc_do_prli_R56666664fcp_scsi_queuecommand_R5e4f4145fcp_old_abort_Rda219841fcp_scsi_abort_R337f2ab2fcp_scsi_dev_reset_Rca2c63b2fcp_scsi_bus_reset_Rf03de44bfcp_scsi_host_reset_Rc994d42fGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.rodata__ksymtab.rela__ksymtab.kstrtab.data.bss.comment.note.modinfo4 !+l  , Xp4%p>7P  M&8V'\'a'zj(F(p(p*(y8h >@W   P"l.|..hS ` ` ;( L T ".   ;  D"L P T;h-W;   "P 8T 8X;l) h; hLx | ;-W"LPS  ; ;e ^ X)hL|)LY Y4 8YD;H P \ ` (h (l 0p 0t;e   (h XJ p"  8  8 ; ' `- |W      `  `   ; )     L ( 0 `) |) Y Y Y     ; L L tS G <"P-x  "SH L;x! |! $-"85DYLYTYlL  )Y 8; 8L hDG`t hx;! ! $-5 Y4O 8O P&`% d% x%  ; % % % H'! e! ! pS  ;]hL( 0 h l;p  ; < 8@;D 8h (l;p (W)hL! ! , , $`-5 P; P `; `&lLS<LH L |G! G! $- 5P'p")L...h0.@.HY`)|LY ?,?L?l?``?` `/ca 4N9AB %$#(Q, 034<8H<I@VD@HKL>PET0Xd\f`Xdbh[lP       L5LHK,]l((D(&8Rpr |`  L-;B|Ux~0#0GHizd &P PpXX,DVh~Dp P " :@ `n P@98XiP0 -fc_syms.cgcc2_compiled.fc.cfcp_scsi_insert_queuefcp_scsi_remove_queuefcp_login_timeoutfcp_login_donefcp_report_map_donefcp_scsi_donefcp_scsi_queue_itfcp_els_queue_itfc_do_els*ABS*___f_enable_irq__ksymtab_fcp_state_change_R20632cf4___set_bit__kstrtab_fcp_state_change_R20632cf4jiffies_R0da02d67___f_mmu_release_scsi_one__kstrtab_fc_channels_Reee62cfeadd_timer_Rbea990b2fc_channels_Reee62cfefcp_initialize___clear_bit__ksymtab_fcp_scsi_bus_reset_Rf03de44bkmalloc_R93d4cfe6__module_using_checksumscleanup_modulefcp_scsi_reset_done___atomic_submemcpyfcp_init_Re9bce26d__kstrtab_fcp_scsi_abort_R337f2ab2.udiv__ksymtab_fcp_receive_solicited_Ra7d67720fc_do_plogi_R814ddc98__kstrtab_fcp_release_R63080e86del_timer_R5811f067.divinit_module__ksymtab_fc_do_plogi_R814ddc98__kstrtab_fcp_queue_empty_Rd32cd792__ksymtab_fcp_old_abort_Rda219841printk_Rdd132261__kstrtab_fc_do_plogi_R814ddc98fcp_forceoffline__kstrtab_fcp_old_abort_Rda219841__up_R4506727e__kstrtab_fcp_scsi_queuecommand_R5e4f4145fcp_receive_solicited_Ra7d67720__kstrtab_fcp_receive_solicited_Ra7d67720__ksymtab_fcp_release_R63080e86__ksymtab_fcp_init_Re9bce26dfcp_scsi_abort_R337f2ab2__ksymtab_fcp_scsi_dev_reset_Rca2c63b2___f_disable_irqfc_do_prli_R56666664__kstrtab_fc_do_prli_R56666664___f_mmu_release_scsi_sglfcp_old_abort_Rda219841__bzero_Rdd42e263__ksymtab_fcp_scsi_host_reset_Rc994d42ffcp_queue_empty_Rd32cd792fcp_register__kstrtab_fcp_scsi_host_reset_Rc994d42ffcp_state_change_R20632cf4__ksymtab_fcp_queue_empty_Rd32cd792___f_mmu_get_scsi_one__module_kernel_version.uremfcp_scsi_queuecommand_R5e4f4145___atomic_addfcp_scsi_bus_reset_Rf03de44bkfree_R037a0cba__ksymtab_fcp_scsi_abort_R337f2ab2fcp_scsi_host_reset_Rc994d42f__ksymtab_fcp_scsi_queuecommand_R5e4f4145___f_mmu_get_scsi_sgl_sparc_dvma_malloc_Rac4503aa__ksymtab_fc_do_prli_R56666664__down_R7356f38efcp_release_R63080e86__kstrtab_fcp_scsi_bus_reset_Rf03de44b__kstrtab_fcp_init_Re9bce26dfcp_scsi_dev_reset_Rca2c63b2.umul__kstrtab_fcp_scsi_dev_reset_Rca2c63b2__ksymtab_fc_channels_Reee62cfe__memcpy_Rbfaaaa73ELF4(   " "`((k(w((h(t(((i(u((" "@"  XH`a @a   a a2`*` $ a "  2  ,  * @``  `<`<2 *` * " * 7@   @   @ @6 *a@@"a " 2   @ ,   @ @@ `@  !2``   @ Y @ T O`"`$ `$2  >`` *  ```< 78 <`:  *  # @@ @   J "( `@ *J (   O   @   @ , ,  , `"   @ , ,  ,    "  2  @, a@*`@"a " 2  ,    `@"nax   ax a2`*` $ ax "  2  ,  *@8 `*` * " * @0   $ ?*  #@` 0 @   @ , ,  , 2  "  2  @, a*`@"a " 2   , 5aa:` &a" b`* * " * `  @@atav`au @ @  b"@ *` * " * @@b " * @*`"@*` "a&ba<  oa 2I㿘`    !a*@-?* !`@  ` @ @2 @ 2  2 @ - a!*@ a %a" ? *  ` `i $``"Ld`2b`  `@  $`  h* $ $ `@ \ l$  \$ `` , ` `* @`$ `$ $ ` `* @`   , =  , , =$ $ $   $@ @?$`$`$`$`$`   4 {, @ @ `  $ , =  $ $ ?@$`$`$`$`  c4 }?*  2    $,  4 `@ `8$ `<$ `C, =`@?`H *` €`0 $ `8, =$ 0`8`4 $ `< $ , =,, `0 $ `4 $ `8$ `<, =$ `8, $ `0$ `4$ `8$ `<$ `@   , =`   $ `D$ `D, $  , $  , <, > , ?    @ -  -  - !* *a"a ` ` "Y#  `@ 2J"@  "C@"&!# " 3!+7-;@``&!& T` &!&&`& P&!& &!X  @ <  !  bx&!&!!!@  `@ <   8* !?@!#@  & 8& 6 & 6 : & < 8@  @  0@  @    & & & (& & & 0@ 2@48 0@ @ &!&!D <@ &!LP H@ &!` @   @ @ `` `?  &! ? ` &! 2&! &!!" !`"` @@  !@  @!v&`& `&  @` @ (6 6!^& 6!\& ,x@ @!@`'x!!bb(bb &!`&!d&!p&!l&!x&!a  ?'/x /''/~/ *? ! ?.!.!v".!j.!.!k.!w.!.! 2`22 !!"  *  # !!& & L& & H"`!!"!" !&!"` 2?` a 2"` 2a@ 㿘 ``@@@ `P a 8@ D Pa@a`2`01.01soc.c:v1.3 9/Feb/99 Jakub Jelinek (jj@ultra.linux.cz), Jirka Hanika (geo@ff.cuni.cz) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout%s: Too many continuations entries %d %s: Unknown STATUS no %d %s: Invalid R_CTL %02x continuation entries %s message: %s %s: Unknown LS_CMD %02x %s: Unsolicited R_CTL %02x not handled %s: Unexpected flags %08x burst-sizessoc-wwnport-wwnssoc_xramsoc_regsSOCsoc%d: Cannot order irq %d to go soc%d port Asoc%d port BSOC request queuesSUNW,sockernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!`4  , 2#  =BHP*Yc=l  (,1|> R Xp $ ,0EVhv-@O`ssoc.cgcc2_compiled.versionsoc_resetsoc_intrsoc_hw_enqueversion_printed.560*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsocsfcp_state_change_R20632cf4printk_Rdd132261fcp_receive_solicited_Ra7d67720fcp_queue_empty_Rd32cd792.umul__bzero_Rdd42e263memcpyinit_moduleSBus_chain_R359591d7strcmp_Re2d5255akmalloc_R93d4cfe6__this_moduleprom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getintdefault_R858c90dcrequest_irq_Rb9ba6802sprintf_R1d26aa98_sparc_dvma_malloc_Rac4503aafcp_init_Re9bce26dcleanup_module___f_disable_irqfree_irq_Rf20dabd8fcp_release_R63080e86sparc_free_io_Rf8afdb8dp t P h @p @x  ` `` p     ,  h        D  D 0 4 d  h  l  !      "          0      "     # d p  x#   $ X$t 0% 0% @ @% &&` l x P| P'  X X ` `  (  (  ( 0)4      *  ,,8-D.h/x/ELF4( @"`   " "`((k(w((h(t(((i(u((" ܔ"@"  XH`a=  oaؐ S?#a`  aaȒ @ $`a  ` ` ,` `*@  *` *  <" * 0@ } ` @   ` @ @6 ` *a "a   `  ` @ ,` `  @ @ ` @ @` !2L "  @ D ` @ @ `  : $ 2/   < +8 <  :@ @   J "* `@*J *     @ ` `   @ ,` ` ,`  ,` " ` ` `   @ ,` ` ,`  ,` ` `2 ` a   ,`*a # a  ,` ` ` = @a` 2 aaaȒ @ $`a `  @ ,`` *@  *` *  <" * 0@ } ` @   ` @ @6 ` *a@ "a   `  ` @ ,` `  @ @@ ` @ @` !2L "  @ D ` @ @ `  : $ 2/   < +8 <  ^@ @   J "* `@*J *     @ ` `   @ ,` ` ,`  ,` " ` ` `   @ ,` ` ,`  ,` ` `2 ` a   ,`*a@ # a  ,` ` ` = @U/a 2 aaaȒ @ $a , * < `*` *  " * @ '<    $ܔ  '< @   @ , ,  , 2 a  ,aĕ* # a   ,/"6aaؒ:` aĒ &a" b4`* * " * `  @@atav`au @ @  b4"@ *` * " * @@b4 " * @*`"@*` "aĐ&b4a = /aؔ 㿘`    !aؙ*@ -%?* !`@  ` @ 2 aĐ    - aؐ aĒ %a"  ? *  ` `m $``"P{`2y`  `@  $`  h* $ $ `@ \ l$  \$ `` , ` `* @`$ `$ $ ` `* @`   , =  , , =$ $ $ ` $@ @?$`$`$`$`$`  4  `  , @ @ `  $ , =` $ $ ?@$`$`$`$`  z4 @ @  `  $ , =   4 , $ `0$ f$ *  2   $ `  ,  4 `@ `8$ `<$ `C, =`@?`H *` €`0 $ `8, =$ 0`8`4 $ `< $ , =,, `0 $ `4 $ `8$ `<, =$ `8, $ `0$ `4$ `8$ `<$ `@   , =`   $ `D$ `D, $  , $  , <, > , ?    @ -  -  - !* *aĔ"aİ ` `} `"v@  `@ 2i"8@  "b@"8&!# " 9%7@``&!& T  &"0&' & P&!& &!X @ < !<* * H &!А"4x6!&!!Ш!А@  8@  < & <@  & @ ) 0/+@  `@?  `@  , *"* 8@ @ ߐ 0@  @ `   & & & (& & & 0@ 2@48 0@ &!8@(&!@&!!@ D <@ &!LP H@ &!` @   @ @ `` `?   ? `    !&!" !"`` @@  !@  @"0t' & & ` @` @ (6 6!^& 6!\& ,x@ @!@`'x!Ȇ!bbb0b b(&!&!`&!l&!d&!&!&!&!&!&!pa@  '' '//'/~//% *?!Ȓ  .!v.!".!j.!.!.!k.!w.!.!.!xԔ @!Ƞ!bΔ P!Đ"& & L& & H#`!!Ĕ"!" !&!"` @`2`?` b0 2"` 2b0@ 㿘 ``@@@ `P 2a 8a@ D Pa@b0`2`01.01socal.c: SOC+ driver v1.1 9/Feb/99 Jakub Jelinek (jj@ultra.linux.cz) mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... DMA timeout%s: Too many continuations entries %d %s: Unknown STATUS no %d %s: Invalid R_CTL %02x continuation entries %s message: %s %s: Unknown LS_CMD %08x %s: Unsolicited R_CTL %02x not handled %s: Unexpected flags %08x burst-sizeswwnsfport#port-wwnsocal_xramsocal_regsSOCALsocal%d: Cannot order irq %d to go socal%d port Asocal%d port BSOCAL request queuesSUNW,socalkernel_version=2.2.25using_checksums=1GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.rodata.modinfo__ksymtab.comment4!"x  ,L 2)0  =XBXHpP@*Yjcj=lDP  "  ,-,9 D `S g m"4;4XG\m/Pi socal.cgcc2_compiled.versionsocal_memcpysocal_resetsocal_intrsocal_hw_enqueversion_printed.550*ABS*__module_kernel_version__module_using_checksums.div.urem.udivsocalsfcp_state_change_R20632cf4printk_Rdd132261fcp_receive_solicited_Ra7d67720fcp_queue_empty_Rd32cd792.umul__bzero_Rdd42e263memcpyinit_moduleSBus_chain_R359591d7strcmp_Re2d5255akmalloc_R93d4cfe6__this_moduleprom_getproperty_R156810c5prom_getchild_R5ee0a984prom_searchsiblings_Rdc0ba024prom_getintdefault_R858c90dcprom_getproplen_Rff8b6749prom_getsibling_R3b3fe8cbprom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169erequest_irq_Rb9ba6802sprintf_R1d26aa98_sparc_dvma_malloc_Rac4503aafcp_init_Re9bce26dcleanup_module___f_disable_irqfree_irq_Rf20dabd8fcp_release_R63080e86sparc_free_io_Rf8afdb8d  p  0 0  P P0 D t         0 , 0H d Ph P           |  p      L L8 < d h l!"  #     0  #     $x%  &  '     (H$P)l| , ,* 0+( 08+D @L @\+h l x''   P P ,   X(, X0 h4 h8H T \-d h p- ` ` . $ @ L X x |/  12344ELF4( 㿘 ``H` c(! d(  f0( e(# i(" j0(('(&0((%($0((,((-(㿘 ̚ *`@ 3 Б* @3 &ȑ* *  *  2   ? *` a3 $3 "* @`3 "3 $ @( ""`2㿘 `";   27  & & "1    *   @  +  ` & & 0    &   * `{  $    (    2 㿘 `"   " @.@ ? &  `&  & & "   €  .@`"   @* ? &  ` &  $& &   ( 㿘`` @  `, 2`X`,``X  ``X`  ^   ,@ ``  `&`ܟ@`㿘` @` ` 㿘` @` ` ,2 X ,*," A*@  C X*X" A*@ S*  D*@ * `(` A*`( `, "` `X D`(`* 㿘    "  "`  " "` * 㿘   " " ` 㿘    "  "`  "$ "`(㿘   " " ` 㿘`@ ``@ ` `@     㿘  B"`ȁ ȝ㿘  7"`́ ̝㿘  ,"`Ё Ё   `?  `?  `?  `?  ŀ  㿘`  `2 ? `Ő *` `Ő *`   Ā  㿘` `" ` ? `Đ *`Đ *`͐ #@@@? #@@@?  㿘`  ` `Đ *`㿘 !e ?㿀 @  $`?`$`@  $ ذ`$` @ @ $ ` @ $ @ `v? ؀ " H`  !* *`$   *@  *  *@  *`@  $ Ԓ` @@  ؀`2 H`  !* *` $ ؐ @ . Ő N  , , $ $ $ @     @  @  @? @ @ `@㿘 @  ؀H`  !* *`$ @  @ @ @ 㿘`@%@     # $`#$` )   @ 2` 4* @*`" *    2` $`    ݰ `  ?㿘`      $`01.01kernel_version=2.2.25using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... |QEB;632*+,%#"""-+2LCBCA;;=43422$1*{*+#+,B.#%$+$#""A"#"3J!2,b2q"4R#z5& *c  # 3   > L!|"3"B2'"R:31,#"bQB;32*,%#"!  C3@DA1U BA` Br!" SUNW,am79c30aonboard1regamd7930<3>amd7930: could not allocate registers intr<3>amd7930: unable to register <6>amd7930 at 0x%lx irq %d audioGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4x!$|h  ,2(  =BH*QYf=b A 0I #*-?Rdcw$,44<d,dH\4H(|H@^r   0  < $\ ?hZptx8T l L d l  P      # 4< <8M t4[g v d ?_q!FWj$):(Pamd7930.cgcc2_compiled.gx_coeffger_coeffamd7930_write_mapamd7930_update_mapfill_D_xmit_fifotransceive_Dchanneltransceive_Bchannelamd7930_interruptamd7930_openamd7930_releaserequest_Baudiorelease_Baudioamd7930_start_outputamd7930_stop_outputamd7930_start_inputamd7930_stop_inputamd7930_sunaudio_getdevamd7930_sunaudio_getdev_sunosamd7930_get_formatsamd7930_get_output_portsamd7930_get_input_portsamd7930_set_output_volumeamd7930_get_output_volumeamd7930_set_input_volumeamd7930_get_input_volumeamd7930_set_monitor_volumeamd7930_get_monitor_volumeamd7930_get_output_balanceamd7930_get_input_balanceamd7930_get_output_channelsamd7930_set_output_channelsamd7930_get_input_channelsamd7930_set_input_channelsamd7930_get_output_precisionamd7930_set_output_precisionamd7930_get_input_precisionamd7930_set_input_precisionamd7930_get_output_portamd7930_set_output_portamd7930_get_input_portamd7930_get_encodingamd7930_set_encodingamd7930_get_output_rateamd7930_set_output_rateamd7930_get_input_rateamd7930_set_input_rateamd7930_get_output_mutedamd7930_loopbackamd7930_ioctlamd7930_opsamd7930_attachamd7930_detachdriversnum_drivers*ABS*__module_kernel_version__module_using_checksums.div.urem.udivamd7930_xmit_idles__this_module___atomic_add___atomic_subsparcaudio_output_done_R38bacbc1sparcaudio_input_done_Rfddd08d3strncpy_R328a05f1kmalloc_R93d4cfe6__bzero_Rdd42e263prom_getproperty_R156810c5prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprintk_Rdd132261request_irq_Rb9ba6802___f_enable_irqregister_sparcaudio_driver_R6fed1516___f_disable_irqfree_irq_Rf20dabd8sparc_free_io_Rf8afdb8dkfree_R037a0cbaunregister_sparcaudio_driver_R390176a0init_moduleprom_root_node_R5ce875cfprom_getchild_R5ee0a984prom_searchsiblings_Rdc0ba024SBus_chain_R359591d7strcmp_Re2d5255acleanup_module   \ `   F F F G G H G G IdJ pJ K K   L  L  L M     N     O ,P 8  @  XQ l  pR t   @  @ O , , 8 , DS LT N U  H  h R  h $R ( H 0V <W HX TY pZ V W X Y\  \ ] ^ ( , D P T X \_ `_ p t |`      , 0 @ H T d   t,4 |$(,004<8\@hHpLPxTX\`dhl px d|  l  l     4ELFR44(`#` 0  "@2(    2""`" " 2  "  ` "2 +  2 "`#`" `" 2  " `2 " ` 2""㿘`@) `%   4 3/-"@@`"@ "@ ""@ "@ " P@ @@" & (@@  2" &?% @ & '㿘% $``` '@2`` $@ &  @` $``2@?$㿘 @  &$ @6 `& 6  "`"`& ?"` @`  ` 㿘```"@  `` $`8 @ 2` ``  $$`4` ? ` ,`@@2?` ݐ ?`  ?$`  `4`$4``?А ?$`㿘    " ` 3?1 @   ` 4#?6@ ? `` .`@@ဢ ဢ?2  ` 4 $6@?Ё    "  `2P"P  ``  `   "" `" 2  "    #  )` *`"    `  ` `2 "  3`8   8  " ݀`  # "    `"  @2 `"   `2  #   2    "㿘Ȑ     ( 0㿘     `#  `h?` $`'` 4  2 @2   `  @`2 `*  * 3 `2 3 @*@( @2  @" ꀦ``2@`?̀2  @  `?$" 2 "2 4" 22 ` ?$`㿘 "`` @2 "  @2  #@   ? $ 2??"㿘#` $````@2 `` $@ `2@``?$`2 㿘`@@ D'@ ؒ@   2Y?@ؤ "R?!6""!"$` ""!À .D!ŀ (D!U"` ""!S"`D!"`D@ !! `?@ ?X ##" ?P`   `E ` @  X 2 ` 2? `  [ `  "`?4  `@,   2ذ?4  4  4 P   1  ݐŰ?7 4`  ,`77,`P@ 7 * ?#@ *  4`e[ 2 &@ @ ?  4`L $4`` @ ~ f 7 7 f7^ 7  7^/`@ !! `a?@ ]?@@mFD@ !! `I?@ E?X A?Հ >? :? `  4?` 6D,?@ !! `2@? ?ꀤ 2?@` D@ @   ? @D`@  @ T  T " ?! "! ? 䀢  @ ?㿐`@%`$  +`    #\ @#`@   2&?$ & &@㿐`@`   @ `@ % $` +     #\`@#`@   2 &?$ & &@  ?@*     2* ?#2 㿘  @  2V !?    & @?` @` `@ , )$" 㿘 `" `t  b@ ,`t!&   $  @ ?$ ` @`   `㿘#` $` . x 2  ?$   ` ` . `??$`㿈 " ?`24b?7 ,b/ !,b  $  @ ?$ ,`) 㿘  `) "@<?ꀢ 9?`   0?@6`4b ` .`` 2`#?4b`,b` 2 ,b 6.`,b  ?!  $  @ ?$ ,`) 㿘` , ( $@+?@ '?`   {  @ ) v ?@`   `,"` 4"`,"$@, ( ?́㿘` @` @`  `?ӝ㿈  )   E  ?ɀ & ( ""?7"/""7"/"/ 7@  㿀'D\  p @ED0A c* 3 8 ( \"\D` "` \  p @'D0#  3 @*  2   D `p@D0D  @D D    `2 D `g    2``X"p@ Dp @ߐ 0ې  @D D 7 /⠒  @ 4`   ? ,@ * @ 7 / c`Z  4D`\ (6`"`\ "`6D  |" 4 f@ D  p@ @ 'D   @ @ `'D@  p @@'DD`k@ ?eDZ 7 / R/겒 ND" `@ x`4@@ B?b``@` 2 \     & \ &  +? & & `@ x@`DH`& `` "`&& "`"`t   \b€  D  p@@ 㿘 $ `28 @  p \8   @2. @*  |? & \& @  $?  * $ * 222 ^ c   2 & mh`  @K?؀`" ) " `x 6`? ?@ " `?ꀢ  {  @  ( t?ǐ 7 ",` ",`"4`  / }  @/ ``  ` 2 /p` "O? "g7Ш 2D?̀ " Z }  @Z @  @̒ ',"` ` " @ "Z "@ "  "  }  @ " \ "\@ @  c6`6 "6  `.  ". `. "  . }  @" \"\@ @`@ 'Ȅ `p@İ?@? z 6 @6 Ȑ  @Ȁ  Ȅ  p@?@  2+P 'P %@     ` }  @@ ?2 P p @2P@P  ?   }  @ `"& @& & h "$ ` Z  #  Z\ "@  ""\\  "@  ""\Ȑ  ( "  }  @  7 7Ȑ`@ ? Ȅ  p@ @   }  @㿐 @@'@ 2 9  $`` &`` ?$`` &`` @' `"   4@ ,` ,` 4` &`@ "?ӝ㿘" !@% "!@"!@"!@{"!@"L |"! @x"! @ uY`"!@k0e"!S@a "!@ a"! @[" !6"!@P"!U@I0O"@  s@GPl ,F EDDD@" `"=D`\9?A?℀ 2D;?` @    ,?* @ !! `?Ғ@?@ D` :?& 㿘@  @` "`@  2 @  2 @ @ @! @` @` @`@@@ 㿘@  㿘@! @  @  @ @@@ @ @ @ @ 㿘   @@ H` @    ?$ "`& """ۂp@ ,㿘)    Z @@\Y  Z @  `\   $$\$@   4t$$$    4`,`,` h4`4@`@ ,`!?*`2 `# 2*  @ 4`4` `,`@ ,` *``2` ` 2`*   4`4` ,`  @ &`6 &㿘%` Z @  _ Z `@  ` `\ `  $`$`\$`@   4`t$`$`$`     44 ,  h, 4  @ , @1?* 2 # ` 2*`  4 4 `,  @ ,  @ , #*` 2`  2`*   4 4 ,  @㿘'` Z @  W Z @  `\   $$\$@   4t$$ $    4@4`,`,`4` h`@ ,`@!?*`2 `# 2*  @ 4`4```,`@ ,`@*``2` ` 2`*   4`4``,` @㿘! @<(( & 2㿘!& @ (v& `( 2&㿘2(( ]& 2㿘)   %  `Đ `  ` %    @ 㿘` % $ `` `` ?$ 㿘 ,@   " & "   #   2  (  2 (   ( 2  # 㿘`@ ! `$ * Ք 2"  ?$ 㿘`@  *   x  , 4  " " Ē   2    "   &  6 . 㿘`X#" @0  @!@ `@     (㿘 X#"J?Z ?C? $ $ `', @4 $  $`@  `* @ $ ( "@@! @$$  ` `` ( 2 $  $  ??А?$㿘`&`  X#>"@``  2`\`"`\ `\ ?&`\ &``^ 2``\`|  &`\&`@ `* `*``* ` "*&`"&`l&&` `  `6`tb ? 6`t&` @  ` ` "&`l@ % $*` `* * @#   ` "&`l@a `  H`&``` "`&@&`"`"0>^  9?H`&``` "`&@&`"`"# 3`!` #  # (3 3 &3  $`^$  ` @  ?$㿘L .%)2A(?$(&"($`*  * @&`  `  "$ l@H``@  ` ?$`"`&`$$ $   㿈`X !  \`8   & \& ` p`?  `&  `  ` " ` p @2ɰ @Ű  @ / `-`*2`@  7%`" `  `@2 ` ``* 2`@ 2 `$/ ``-*`2 7t蠒  ``x$  " )  ") `0n"& `0k h`V ` @\` @  Q` @ 0H/ ``*2 @7 /ꀥ ! @  *    `?"` @  @`" ` @ `/ ``*2 7` p?% @2 @ 㿘 @` "`@  ` #   "`"` "`@"` @ 㿘)   %  `@=:`  ?% 㿐 #\` `@3``&`5 ,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װɒ 5,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װɒ 5,@ "3/-+)' @ @ @@ $` ! " ##\ %@@#`@ @  &@@@@` ( װ$ɒ`?&`㿘@ @ @ 㿘@`㿘@ 㿘 @ "㿘@`?Type local_addr remote_addr tx_queue rx_queue st uid %02X %04X:%02X:%02X %08X:%08X %02X %d <7>AppleTalk: point-to-point interface added with existing address <4>Too many routes/iface. Interface Address Networks Status %-16s %04X:%02X %04X-%04X %d Target Router Flags Dev Default %04X:%02X %-4d %s %04X:%02X %04X:%02X %-4d %s <4>%s is broken and did not set SO_BROADCAST. It will break when 2.2 is released. <7>AppleTalk: didn't forward broadcast packet received from PPP iface <6>SO_BROADCAST: Fix your netatalk as it will break before 2.2 <7>SK %p: Got address. <7>SK %p: Size needed %d, device %s <7>SK %p: Begin build. <7>SK %p: Copy user data (%d bytes). <7>SK %p: send out(copy). <7>SK %p: Loop back. <7>SK %p: send out. <7>SK %p: Done write (%d). appletalkatalk_routeatalk_iface<2>Unable to register DDP with SNAP. <6>NET4: AppleTalk 0.18 for Linux NET4.0 <2>Unable to register AARP with SNAP. %-10.10s %-10.10s%-18.18s%12.12s%12.12s xmit_count status addressdevicehw addrlast_sentexpires%6u:%-3u %-10.10s%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X%12lu %12lu %10u resolved unresolved proxy aarpaarp-resolve-timeaarp-retransmit-limitaarp-tick-timeaarp-expiry-timeappletalknetaarp_send_ddp_R2fe3afc2atrtr_get_dev_R0f25ad7datalk_find_dev_addr_R4b31fb41  $ $ $u0    $mmGCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ksymtab.rela__ksymtab.kstrtab__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo4F!UT$ ,F3yl  ?FGL\QyxH `LxNiLty  LyL  P`P`Q<QX*Q|$ a } } }   } } } } }   d} p} |  } } }    @ @ 8 X h 8(, X@ hH} } } }  }   o o o {o @} H} `yp} } }    } o } o $i <i @Xi \i hLi hi li i H} L} X} \ `  } } } } }  } h} l} x} |  } } ,} 8} D} H} T} \ ` } }  }   } } } D H L } } } }   (  ,  } y  }  (} 4} D} H} L  T} X  \  { } } } } } }   }     @{ `} d h x}   z z u d xhl x    ( L T \  z 8ulz pz u< @ DL} P} \} d h |  } }  0  0$, 0 4 P X` Xdp} t} |}     }  } a ( (so o ,p} } }   } o } o } } } $} ,} L} X} } } }   } } } } }   } } l p tso  o   D H g8PdL P h   Ht t    ! H!! H"0 "@ "D "H"P "T " " "##, # # ## ## ##$, $0 $8$p $$x $$|$$$$% %,%@%t% % %%%%&( (&, (&0&\ &| & ' @'  @'$'\''' X' X''j(|(*z *z *u+0e+L+`z +dz + +w+ + + + ++ + + + ++ + + ++ + + ++ + l++ l,, , , ,, , , , ,$ ,( ,, 0,0,4 0,8,@f,H ,L,P ,`,t,x ,| ,, ,, ,,,r, l,, l, ,|, , ,|, , ,, ,---{-~ -~ --t-~ .8 .L.< .L.D... /( /0~ /@/`~ /d~ /x/~ / // //0$000~ 01 ~ 1~ 1$14~ 1x 11| 1112$24 2l 2t~ 22i 2i 2 3 3} 3} 3} 3 3 T3 3 3 T3 4 4} 4i 4 4 4$i 4( 44} 48b 4@b 4D 4H 4P4p} 4t} 4|} 4 4 T4 4 4 T4 4} 4} 4y5 } 5$} 5,} 5} 5} 55} 5} 5} 5 5 5} 5} 56 6 6777} 7} 7} 77 7 88} 8 8$} 8(} 80} 8x} 8} 8} 8} 8t9` 9t9d 9t9l9: : : : :D:T} :X} :`} :d :l :b :b :i :i : : ::} : T: T;} ;c ;i ;c ; ;i <( <8 << \>p>>} >} >} ? ?, ? ? ? T? T?@ @i @i @b @ b @$ @( @,@X@ @ @@i @i @ @i @ @ @ @AT} A`} AlAA A =A AA =A~ A~ A AA Ai Ai Ab Ab A A 3A A A 3BlB B B B } B$} B0} B4 B8 TB< B@ BD TBH B} B} B B B (B hB pB xB B (B hB pB xB BB} B} B} B B C C C C  C$ C4C8 CLCP C\ C|CC CC C CC C C TC TD D D  D D D$D( D<D@ DL DlDD DD D DD D TD D D D D E E EE E,E0 E< E\EtEx EE E EE E E} E} E EE E EE E EE F F F FF F, F0 F4FH 8FL 8FPFX F\ Fl FpdFt +k xt+x,0L48<n@D8HL(PT(X\`d!@h'l  0xvq4DH4`(p b4`8H`Hdt0c <L       (<N ` qT,HPhD  D ! d. @; 0L [dgt(D LtdL8P 0!@'($(0 Al  N ZD iD z0D , , -/\ 2X2d3PT23F@ OT@ Z@ b m4`485 t <|D=   D FD X #8X 4 GZx r  FD$6.PdE0, 6t@E]6< ",p1B<?Sah5H+4 40pCHnF(,\  & @ ` v   8   5`  # < Q jB {A  F    |  " ? V1 f7XP         6 N m  x      9Fh Q g  0   $ddp.cgcc2_compiled.atalk_socket_listatalk_search_socketatalk_find_socketatalk_router_listatalk_iface_listatif_drop_deviceatif_add_deviceatif_probe_deviceatif_proxy_probe_deviceatalk_find_primaryatalk_find_anynetatalk_find_interfaceatrtr_findatrtr_defaultatrtr_set_defaultatrtr_createatrtr_deleteddp_device_eventaarp_mcast.578atrtr_ioctlatalk_createatalk_dgram_opsatalk_releaseatalk_pick_portatalk_autobindatalk_bindatalk_connectatalk_acceptatalk_getnameatalk_rcvltalk_rcvatalk_sendmsgatalk_recvmsgatalk_shutdownatalk_ioctlatalk_family_opsddp_notifierddp_snap_idproc_appletalkproc_atalk_routeproc_atalk_iface*ABS*aarp.cunresolved_countaarp_expireaarp_eth_multicast.470aarp_send_queryaarp_send_replyaarp_eth_multicast.475aarp_expire_timeraarp_kickaarp_expire_deviceaarp_expire_timeoutresolvedunresolvedproxiesaarp_timeraarp_device_eventaarp_allocaarp_find_entryddp_eth_multicast.502aarp_resolvedaarp_rcvaarp_notifieraarp_snap_idproc_aarp_entriessysctl_net_atalk.catalk_tableatalk_dir_tableatalk_root_tableatalk_table_headersk_alloc_R2a00f634sysctl_aarp_expiry_timesysctl_aarp_resolve_timeunregister_sysctl_table_R714f1052atif_ioctlatalk_register_sysctlskb_realloc_headroom_Reb352d09aarp_probe_networkjiffies_R0da02d67skb_recv_datagram_R987cd0e5__kstrtab_aarp_send_ddp_R2fe3afc2add_timer_Rbea990b2__ksymtab_aarp_send_ddp_R2fe3afc2sock_no_socketpair_Rac4b932d__this_modulesock_init_data_Rd175caf0atalk_rt_get_infoaarp_cleanup_modulesk_free_Rb6f20db2atalk_find_dev_addr_R4b31fb41__copy_user_R9c5239ebatalk_get_infosock_register_Red2bcede__kstrtab_atrtr_get_dev_R0f25ad7dkmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5ddev_remove_pack_R153b0588local_bh_count_R8c090c95aarp_dlaarp_send_probe_phase1__module_using_checksumscleanup_moduleaarp_get_infomod_timer_R24685a70___atomic_submemcpyregister_sysctl_table_R88135e3asock_no_getsockopt_Rf3a6bbe8aarp_proxy_findatalk_proto_init.udivskb_copy_Rabf14088memcpy_fromiovec_R9fb3dd30alloc_skb_R56cd27aeatalk_if_get_infodel_timer_R5811f067atalk_checksum.divregister_netdevice_notifier_R63ecad53aarp_unregister_proc_fsinit_modulecall_out_firewall_R812376c4proc_net_R7b597ac4sock_no_fcntl_Rb435fee3register_snap_client_Rf7240e06sysctl_aarp_retransmit_limitprintk_Rdd132261sock_unregister_R2394a062proc_dointvec_jiffies_R65211ccc__kfree_skb_R4954ae5fsprintf_R1d26aa98sock_rfree_Rb644f546proc_unregister_Rf65f8efbaarp_send_ddp_R2fe3afc2atrtr_device_downdatagram_poll_R451fa145aarp_proxy_removesk_run_filter_Rbb957efasock_no_listen_R42c764c0dev_mc_add_Rbbb50061dev_queue_xmit_R332ba5f2aarp_device_downaarp_proto_initsock_alloc_send_skb_R099a70d4aarp_register_proc_fsskb_over_panic_Rbce6950d__bzero_Rdd42e263sysctl_aarp_tick_timeskb_copy_datagram_iovec_R53499dd8sock_no_setsockopt_Rc686f170dev_add_pack_R5e0659b6aarp_send_probeaarp_proxy_probe_networkcall_in_firewall_Rdd4fef54__module_kernel_version.urem___atomic_adddev_get_R0dfb2c76proc_net_inode_operations_R01511c86skb_under_panic_Rf4dd5514sklist_destroy_socket_Rebad9f49proc_dointvec_Rda21c3dcsklist_insert_socket_R6acdbea0__ksymtab_atrtr_get_dev_R0f25ad7ddev_ioctl_R387c78a5ltalk_packet_typeunregister_snap_client_R9abefc50proc_register_R8baf7c4dppptalk_packet_typeskb_free_datagram_R61a890afschedule_timeout_Rd62c833fatalk_unregister_sysctlsock_no_dup_R1ae19416__ksymtab_atalk_find_dev_addr_R4b31fb41unregister_netdevice_notifier_Rfe769456__kstrtab_atalk_find_dev_addr_R4b31fb41call_fw_firewall_Rbaf844f8ddp_dlatrtr_get_dev_R0f25ad7dELFL4(㿘+` ,`,,, " ?`"?` "ݰ?` "ٰ?` "հ?`  ϰ?& P& L& h& \& l& T& X& `& d @  P& @*@ & D P@  @`& x D ` L@ P@ & < P   @ L@, <$@ D" x*@ P& @ & & & & & & & & &  @  & |*@  |`Y& V`` @ @ J& 8  5 | @, 8$@ & |&2  P  <  L& 8& &  @,@  |"  & @   |,"   & |& `&  @``  `& "@$ @  " |@ | @@ < @`" D@  D " x@ x ?@㿘 `* @&?@ <@ @@ D@ x`@ 8@ @ | @` @` ` ` * $@㿘`%` h ?& h ` T? D& `+   H"  x& HJ `2  T l  & l*  @  T P@ & T`! ` h? T D& `& h+`  H x" & HJ `2  T l  & l*  @  T P@ & T `   h $& d   p ` h P   p@ ! @ ! ` h   @Z & d p@ ! t@ ! @ !0 T D+   @@  @  & d& d㿘   6`  @61 `-& @ ?&@  `     & @ & & $      @& &     2    @   @ &   |*  `  @ ! @ !㿘 ` +2 * @  `" @   @8 A ` h P & ??㿘` + 2 * @a?$@Y UV?@ R? 2 $@@ `D?  " @ D @ ? 2` @    |* @@    " $ $ @ &  @  $ $ $     p@ ! @ !2 㿘H/` d  `   T D+   @@  @  & d 㿘` + 2 * @ l  $ l@'  h P 2 `$@~?@ p`" ` $t?0r h P h  2 \ " \ X @2 \  $@X?@ p`ݰ \ L " D@ ? ?` X @*  @  @ X \ @& D* "  D*"@ x X*@ X D+  L 2  \ P@  `$ X$ `$ \$ \ H$ H2| `A +2 `* e@  +  ?Ȑ€h@ \h@ `x@ 'D`  @ \  \  ߰?!"#! !z!"" !*ư?!!"! "d?!!!"V !?0! "D!a?0! ?D)    ? ?`T`@)6@ e6  @ e, "@ `( €`,`. @. * * @ * T @ e@ e, "@ Ȱ .@ `(€`,`"`@@`@€`D`"@@* *  #* @c@ d @", @ * *  * @c@ dD  :?$ D)    ? ?`L`@)6@ e6  @ e, "@ `  €`$`. @. * * @ * T @ e@ e, "@ Ȱ .@ ` €`$`"`8@`8€`<`"@@* *  #* @c@ d @", @ * *  * @c@ dD  :Z?$V  t` @@ @2" 2! 2 @ 2 D`  <?$08p 2!D    ? %?b2 @a2 `@2 `2 p€D 0$   ` @ 2 2@ 2 @2D`  ?$0D`  ? $0``!@ 2 2@ 2 @2`` @   2 2@2@!_D`  ?$0`L`@`$`. @. * * @ * 0 `"`<@`<`"@@* *  #* @c@ d @", @ * *  * @c@ dD`  :\?$X `T`@`,`. @. * * @ * 0 `"`D@`D`"@@* *  #* @c@ d @", @ * *  * @c@ dD`  :?$ ?㽨 +< `*  @  * € ͖ U '# "` "`\f  #_## e`# "!"J`d!"`\R`#ؠK` "D `?  "2`7`!!p/ "䀎 "` "`P`!t` # "<`#"`` ` !"C`` "`D ":`  "`` "? "`` g0!!"^D`@ dD`*  : &`ۀ.d`@ :# 2Ұ?` "$`0d:@ܐ` "`İ?$`  `D` &0'd```@ " '`` @'h'lD ! !'d```h`\``P" " '``L @'h`\`L"@  'lD  ? | x`@ 0s'P'X'T'PD ? e aP@ 0\"`` `"` " `@ `  @  ` "`` `"` " `@ ,` 0&@ !` 0` @`@ `"D@ 2 D` &0D` `&0   "?D5    `` @D Р&0  @ Ơ&0 ܀`"?@D @ &05  `23``|@`\@ h    "  i " D"  D2 D  j" D D w&0s`` `  `X `x 2`^ `"?@X?`7 *` €   j         i??x`` `Xx `  `x| D &0H  P "?D!     P`H` L@D  ֲ&0H  P "˰?D5    P`H` L@D ?&0 " ```X$`\`P@ ``$`X$```` ` @`t`? ```d`" $`\`p@ !`@ !`@$`\$`d$`T$`X$``$`H$`h$`l4 ` ``- `@ !`@ !`@$`$`$`$`$`$`$``` `  ` 2```$```|*` `` $` 2` .` * `@ 0M`d "````p@ !`@ !`@$`d$`T$`X$``$`H$`h$`\$`l` ``(``@ !`@ !`@$`$`$`$`$`$`$````` ```|*` `` $```` =0֖  !D  ?  € D   @ 00 `?@' D ?   @ 0 : `?"  *"` `@'#@'` T` @''` d` @''` ` @''` ,`"'@'` t`"'@'` `"'@'`'``Ȁ`"'П@''` `"/؟@/` ؀`"/ٟ@//` D` @//ۡ,  7 ` `//` `@'p#@'p` L` @'t't` \` @'x'x` |` @'|'|` $`"'@'` l`"'@'` `"'@''` `"'@'`l'```"/@/` Ѐ`"/@/`$` ` @@ /` <` @// 7 ` / `g/` 4`"'@'` `"/@/D ?  {p!  ? 2?  p@ `d  T   \ L   | X `@ R?`@ H?? = ``@@ 6?ۀ  @+ 2?2?2?2x?2p?2 t?2|?  2? 2`?` 2P P 2 ?" @'`@'`d@'`T@' 'T 'H?'PT 'L i j 0)  &P  ` P  L?   P    @?ꀦ `x  |? 2Xp?X 2Hx? H 2 `|t?"`|e @'`@'`\@'`L@|' p' x't?' ' i j 0)  &  `   ?       @?ꀦ ` PL€ &I`` H€ &?`` H€ &5`` € &+`` `P€ &!`` X€ &`` T€ & `` xA€ = `Pԟ`H`П```؟`X`ܟ`x€~?ꀦ {` @ D ے ``€* " * : /{` 8 <  ``€* " * : /C`  ؀ ْ ``€* " * : /y`  Ѐ  ``€* " * : /A`    ``€* " * : /` ( , € 'X 'X'X`  $ € '  ' ' ` p t € '\ '\'\` h l € '$ '$'$`  Ȁ Ѐ€ 'p 'p'p`   € '8 '8'8` 0 4 € ̀ ̀''l$``'l?<'`l'<$`l`l'<` `   ؒ ``€* "  * :  `"/x@/x` `    ``€* "  * :  `"/@@/@D  ?   @ 0 ` @ @  @?㿘` @` ` 㿘 +:`* @  ?퀢   6 ` p?0|{?l` ` `$@2m? `"  `$@" ^? @| @ $`"`S?   6`F`   $ $ $ $ $ $  €    |*     $ $ `  $ \$ l$ h$ H$ T$ X$ `$ d €   $  &` ` @`   `㿘 +2` *` `   @$ ` "#  \   X$ \ P@  `$ X$ ` `` h $ @ t @$ d$ h$ l  `   ?$ ` "  ?$   @Ӕ ` @` $ `@ ! 㿘`@  ? 㿘`@ 㿘     2   2%  @  "4? 2  @  2&@&?"" "  $ `"" $ $ @  ? "" "@$  "4   4 㿘  @ ```@@ 2``@" `"`  * 2` @"``"`@"@  㿘 " &@  & " "  2  P 㿘 'D "  @  6 ?2 D#D2 01.01kernel_version=2.2.25using_checksums=1Warning: audio input leak! Sparc Audiomissing set routines: failed missing get routines: failed play gain bounds: failed %d rec gain bounds: failed %d monitor gain bounds: failed play balance bounds: %d failed rec balance bounds: failed rec set no routines: failed rec law precision bounds: failed rec law channel bounds: failed rec lin precision bounds: failed rec lin channel bounds: failed rec lin8 precision bounds: failed rec lin8 channel bounds: failed play set no routine: failed play law precision bounds: failed play law channel bounds: failed play lin precision bounds: failed play lin channel bounds: failed play lin8 precision bounds: failed play lin8 channel bounds: failed status minor not yet implemented unknown minor device number sparcaudio???????????????????????????register_sparcaudio_driver_R6fed1516unregister_sparcaudio_driver_R390176a0sparcaudio_output_done_R38bacbc1sparcaudio_input_done_Rfddd08d3GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.kstrtab__ksymtab.rela__ksymtab.comment4D,!X ,D`2ix =DBDHD*QE(sYH`jD  lIwk\  JhK m` K =K]O0`! S   CD/C:Jd[tk 8  H X  # CDdB8@H<4 <<L*?,t=H< MSk%38Ym$"% Q(' P!  8x  b@4@audio.cgcc2_compiled.driverslis_free_elistkill_procssparcaudio_pollsparcaudio_lseeksparcaudio_readsparcaudio_sync_outputsparcaudio_writesparcaudio_mixer_ioctlsparcaudio_ioctllis_get_elist_entlis_del_from_elistlis_add_to_elistsparcaudioctl_releasesparcaudioctl_fopssparcaudio_opensparcaudio_releasesparcaudio_fops*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv.umulregister_sparcaudio_driver_R6fed1516kmalloc_R93d4cfe6__this_module___atomic_addkfree_R037a0cbaunregister_sparcaudio_driver_R390176a0___atomic_sub.remsparcaudio_output_done_R38bacbc1__wake_up_R8a4864fasparcaudio_input_done_Rfddd08d3__pollwait_Refab907fprintk_Rdd132261interruptible_sleep_on_R34d66e55stack_top_Ra6cab6a7__copy_user_R9c5239eb__bzero_Rdd42e263strncpy_R328a05f1__kstrtab_register_sparcaudio_driver_R6fed1516__ksymtab_register_sparcaudio_driver_R6fed1516__kstrtab_unregister_sparcaudio_driver_R390176a0__ksymtab_unregister_sparcaudio_driver_R390176a0__kstrtab_sparcaudio_output_done_R38bacbc1__ksymtab_sparcaudio_output_done_R38bacbc1__kstrtab_sparcaudio_input_done_Rfddd08d3__ksymtab_sparcaudio_input_done_Rfddd08d3init_moduleregister_chrdev_R0a7c618acleanup_moduleunregister_chrdev_Rc192d491kill_proc_R932da67e  (((,&4(h&((&(@) P&|) ) )  ) ) $*4 P+h++++++  + +++0+8+@+P) \) `) l-(..00P0\0h0H.00  $2  3 4 ,5 L5 t5 6 . 0 0   P4 4 5 (5 d5 |6 . P X 7 8 8 5 5 6\5 `5 $$%L%d$t$%%,&P%X$t&%$5 5 5 @$X$l%%$$%%&%$& %$$5 5 5 5 5 P5 5 5 5 5 5 5 H%&%$&%$5 5 %&%$4&T%\$l5 p5     <<$$$<$ 5 5 5 5 &5 5 p&|5 5 5 65 5 5 ,6 5 5 5 5 5 5 !X5 !x5 !|5 !5 !5 !5 !5 "5 " 0" 0# 0# 0#$ 0#P #h#T #h#h$#l$ #p$(#t$(#x$(#|$(#$(#$#$(#$(#$(#$(#$(#$(#$(###$(#$(#$(#$(#$(#$(#$(#$(#$(#$(#$(#$(#$(#$(#$(##$5 $5 $5 %@5 %5 %5 %5 & .&d4&0&0'40'@0(40(@0(0(0)`5 )h5 )5 )5 )6)5 )5 *5 * 6.(5 .,5 .L5 .h5 .l5 .5 .6. P. P. P/ P/ P/ P/4 P/< P/P p/T3/X p/x /|3/ / / / /3/ / / 0 0 0 0 0 1 01 01 X2 X2 x2 x20 28 2H 2P 2` 2d 2h32 2 2 3 3 3 04 04 X4 X4$ 4, 4@ 4H 4X 4` 4p 4t 4x3<5 <45 ) > > >) >) ?*?4 ?< ?.?4@d) @h) @t-@0@ h@ H@ h@ H@B@ h@ h@DAT(A|(A+A(B+C+CE 0<HdLtP X\d<l?,|  @(4<lDLT\8dl0t|  !!t!!""$%%\%&t  8 $((,00d4<8<D@DLHLTP0T\X\d`(dlhltp t|x |!!l!!!"$$%T%%'9, ;/=1?ELF$T4( @.4 ""@"$ 6  "& "@` `i``?0 `j`h ?0  ?0  `  @㿘``ے  H  d  *  `@*  @@ѐ@#$ ? 㿘``  \  d  *  `@*  @@@#$ P? P㿘``'HaH  H  d  *  @*  @@@#H$ ?  㿘``'H8H  \  d  *  @*  @@Y@#H$ D? D㿘  \`* `` ? ?*`0*`@ d@8@#$ H  H㿘  H`* `` ? ?*`0*`@ d@@#$    L    L      (  "U@    (   "U@   `  (  * ( * * (   * ( * *   ?   C G   (  @*  ( @*  `*`  ( *   ( *  " " ( * "      `` (  /@* ( /@* ` (  /* ( $/``@(  /* ( / ( @ /* ( /* "X  X ` :  ?  *@ >$(* ( ?"| ("|  | = u㿘  4@y 4(&㿘  D$@l l(& < t㿘  w@+  T㿘  ?@d  㿘 `T@*w  w㿘 `@L*?  ?     (,    (, ,8@(@  :* @(@  * `   (2 #`T (,8#`T 㿘    (@,   (@,   ?, 8   ?,8   (  `. ( . `@ @  2!   (!  㿘 ` 2@@ "`@ "@` "@@ ?"@ d !`@*@@#@ L*@ @*" o#@ ֒  #@: Β @ *@ ` ` ` ?$`@ P*@ *@ Q*``@  *`@ Z*@@*  В ~ْ 1  | @ *@ I*@@  `*@* $`$`$`$`$`$`$`$`$`$` 2  h2 "2 㿘   D$,0  4<ې (֐$"& (㿘`   `C  *`B*`="`4`    `{  *`z"`l*`u%@ d!@#` @`  ` 㿘` ! ̀  , z    @$ $  Ѐ "`    @$ $ ` "" B , B  , C    @$ $  " B    @$ $ B  z  `  $ ` @`  `㿘`  C   " 8 "`<M    $       @$ $  ܐ?$  "   $  $ $ $  "! " < 2  `` @$  " 8 "<<$ $  $  $ " 8"`<@㿘      0  @ ?Ւ?@㿘  {  @Ð HH/  *  *` ̀   ̢   @$ $  ?$  Ѐ "   $  $ $ $  Ā`"$ Ȁ "  t 2 P`   @ $  " ( ",,$ $  $ Đ $ " ("`,@ 㿘  C$ $ @ < <Ő , C$ ` .*@"  # 8 `?d @" HH/  *  *`㿘 $   $    @$ $     ` @$ $    "U@   㿘  {$ $ Ȁ @ t <M , {$ `@ ,*@" ""@" HH/  *  *`0ߐ㿘 , { `@" $  ̀ $    @$ $  Ѐ     @$ $ 㿘``* < @  =(= u(u 4 4 l l㿘``* t 㿘 `@  ```@ ` `@     (@ * 㿘 !e  ਐ"?㿘` " @ @   4 @ $ 4В @ d b  D l$ l:b  { 2  , u, {. @* 2, C` "``HH/  *  *` , =, C  є 㿘` @  $`? $`$  $ $ $ $ $` `0 @`8$ ``4 `8`0@  $@ `@?0w` $ ` @@@  $ `` HHo`@ *@ * ` #`̐@  - G@ `` " HHo`@ *@ * ` ?#` @? @ @@`0 $ \$ $, <, C, t, { ``  a   @@㿘 #$`  ( ' @ 2` 4* @*`" * = 2 $`    ߠ `  ?㿘  "HHo` * *  ?$ @ @  @  @@ 㿘`    ǐ  $`@%+>IV"k%}3 D 01.01kernel_version=2.2.25using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... SUNW,CS4231baonboard1cs4231<3>cs4231: could not allocate registers <3>cs4231: unable to register <6>audio%d: cs4231%c at %p irq %s GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 !7  , P2<  ="B"H"(*Q"X[Y#=#b&\ V - $ p+?|W(r T `  (pB \$pw   l , ?W n<  8X d|   + 4E@b 84{ l  x  $ D  $ X@ 0 $I  b $| 8  d< \$P -p@t Se,}HXhx(d $(4DDApLZfn||  /Pbu%;Kp  <Pcs4231.cgcc2_compiled.cs4231_rate_tablecs4231_rate_to_bitscs4231_encoding_to_bitscs4231_set_output_encodingcs4231_readycs4231_get_output_encodingcs4231_set_input_encodingcs4231_get_input_encodingcs4231_set_output_ratecs4231_get_output_ratecs4231_set_input_ratecs4231_get_input_ratecs4231_set_input_channelscs4231_get_input_channelscs4231_set_output_channelscs4231_get_output_channelscs4231_get_input_precisioncs4231_get_output_precisioncs4231_set_input_precisioncs4231_set_output_precisioncs4231_output_mutedcs4231_get_output_mutedcs4231_get_formatscs4231_get_output_portscs4231_get_input_portscs4231_set_output_portcs4231_get_output_portcs4231_set_input_portcs4231_get_input_portcs4231_set_monitor_volumecs4231_get_monitor_volumecs4231_get_output_errorcs4231_get_input_errorcs4231_get_output_samplescs4231_length_to_samplecountcs4231_get_input_samplescs4231_get_output_pausecs4231_get_input_pausecs4231_set_input_volumecs4231_record_gaincs4231_get_input_volumecs4231_set_output_volumecs4231_play_gaincs4231_get_output_volumecs4231_set_input_balancecs4231_get_input_balancecs4231_set_output_balancecs4231_get_output_balancecs4231_chip_resetcs4231_getsamplecountcs4231_opencs4231_releasecs4231_playintrcs4231_recclearcs4231_recintrcs4231_pollinputcs4231_start_outputcs4231_stop_outputcs4231_start_inputcs4231_stop_inputcs4231_set_output_pausecs4231_set_output_errorcs4231_set_input_errorcs4231_set_output_samplescs4231_set_input_samplescs4231_set_input_pausecs4231_audio_getdevcs4231_audio_getdev_sunoscs4231_loopbackcs4231_ioctlcs4231_opscs4231_attachnum_driversdriverscs4231_detach*ABS*__module_kernel_version__module_using_checksums.div.urem.udivudelay_Ra39b4cf2__this_module___atomic_add___f_mmu_release_scsi_one___atomic_sub___f_mmu_get_scsi_onesparcaudio_output_done_R38bacbc1__bzero_Rdd42e263__memset_R1907e126sparcaudio_input_done_Rfddd08d3strncpy_R328a05f1cs4231_interruptkmalloc_R93d4cfe6prom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprintk_Rdd132261kfree_R037a0cbarequest_irq_Rb9ba6802___f_enable_irqregister_sparcaudio_driver_R6fed1516___f_disable_irqfree_irq_Rf20dabd8sparc_free_io_Rf8afdb8d___f___irq_itoainit_moduleSBus_chain_R359591d7strcmp_Re2d5255aunregister_sparcaudio_driver_R390176a0cleanup_module   [[([8[[[l[|[[[l[|[ [ [ [L[\[d\ h\ t]^^`^^\ \ \ \ \ _^8`abc^,`d^ ^^^8a  e    e  eg4 p8 phht | i j kf f lmtn j op q(kT 8d 8|rjt t      u  ( 0 ` vo p $q ,k @ D T \ h x ptxD|t    d  8  $< X(T` l  l$( x,h0 4x8 8<H@DXHL ELF:4( 㿘`R*`  €?#* 6 @???c  2`* @<<<Ò`# 2`* @333 ̒`̐#3 2`* @*UUb!U 2`* @@  㿘 Ѐ"@'% " @   &@:  < &@`&@  `"  `   `` @㿘 `  @ `` `$@  "@    ? @   @  ?㿘ܐ @ @ @'@㿘̐`   @a  *  * a@ "    a!"@   & & ,& 0* "i"@ `"@a`㿘 @ 0D @0?.*  P 8 ?,  #  / 3`$ $Ĩ$Ȫ$$ @, @ "$ @@`% %`  @@  ̀ ?㿘  ` @ 0S.`*  P `? @0G ,`#  0 8 ,`$8 $̘$/< 4`$  @ `   @ $@* &$"@  `  @x>`>` ` ???>`.@ &@  `+   @  ` @   'ؖ     `*''??'ܐ -h&-d€-l_ S ,,  P ,`c "@R 8` " c " F ,*  8@ Lݐ T 2"㿘  *@  *"   `& & `?  &  d  *@ *㿘`    @  @  @ @ `@ ?"@ `$`( @Ho`"&`$``("`*`  P(8@ 㿘`@ 0G.`*  8@ @ 0;` "  " P?")$* $$@$Ȓ$ @$В$@$  @`%@??Ā ?2ޡ* * ?%㿘`@ 0>@ <0 .`@*` 8"  P?#  T" 㿘`.`@ 0{*  8`.* `@ 0j `", @! H 2,, @ @*  @ H  , * @`, `,`* "2&,&,*`" #@  L" @,` @@ / /`" ""`,`@  @"/ /`"@ @"ǒ 㿘 @ 0&.`*  8@ 8@0@ 0@ 0h L H"@ "@`"@`㿘 @ 0.`*  8@ 8 0 @ 0 @ 0 T" 㿐'L ?`?@ 0ū.`@*  8`2  @ 0@ S?L@6 `@F'# $ ? @ @ @   ? @Ԑ?$$ $"@ $" $"@  , +`"  ?c"@  #"  c "@ ,` $  ,` c"@  ¦ ?b`,`   ( " L,`$"@ $" $"@ $" $'# ,  @ `@, ?א  @*  P@,`  ,` ? $  -  c,` " @@*` P"   $ - c  $ 㿐'H'L'T'X?`?@ 0H 8-`* @ `@ 0@@ 0 P ? @ 0@ Q `L@G#$$$' $ @ @  ? @ٛ+  #"   c"@   #"  + c "@ % % $%@ " $?$@   c   ,",$@  à><$$'$̢$3/` ,  @ @, @?2`L,% $%@ T% HX, " &@ "@ ,#`"@`㿘  "`@ $ $ `$"@  $ $ $  &"x&,` &"&,&,&. @`4@ @ & .` $ $:` $ 㿘 ) %6 !( 2 6 2 2 *,, ` ؖ  0*`*`*`*`  *`  *`*`    "-0",",*-","-,",",㿘,܀ :` ?-T  ?.,-.,,-2  ?,􀢠 @ &` :  @"@ @ & :  ?"@`., .,`"@, @.,"@`., @.,,\ 㿘,؀ ,R T ,܀  @ },Ȁ     ""`@ @  ,&,̐    ,Ԑ    ,Ԑ`0     N,̐ J,,Đ .,,   "0 @ },̒ `䀢` 2?  &,&,  㿘,܀ K,؀ " ,Đ`.,, @ @   ,Ȁ    "`,@,,Ԡ`    F ,Ԑ   ?,Ԙ  8 ,Ԑ`(   0  &,&,ؐ   "㿐    '  ' `@  ,,Ȁ "   `",,@ ,,Ȱ   @   @"`,,Ȁ  @  ?  $,,-   $,Г. @ $,Ԁ " ,Ѐ   ?㿘@ 㿘 `  @M  @ 㿘 : 㿘@ 㿘 .  A  @㿘  㿘  s",      㿘  a*-    㿘  S*-T  T㿘`  ``?0?0 lŐ *l lŐ *l"lv   㿘㿘    㿘`  ``?0 ` ?0 Œ     Œ    Œ  *"":   㿘ג㿘㿘` ) @   @`@ *@  lŔ +l  lƔ `+l+l  @ +l#l0? 㿘̒㿘㿘   @ "  㿘  0 @ ",  ,  0㿘 `@  .`` `.`@  㿘` @` ` 㿘` @` `?㿘 C ? ; 7 3 /    M     F     ?     8     1     * 㿘 .  * "@*`  @   㿘 .  * "@*`  -d@ -d㿘 . * "@*`  @ $-h$-l@@ 㿘 (. * "@*`  @ -d 4-h0. "   @"-h`@-l㿘  `@ 㿘   . * "*`@ ` 㿘   . * "*`@  㿘 6!?`. ?* "*` @ `4`  `, ` ' 㿘 `. * "* `Đ` 㿘  ` . * "* ` 㿘  ` . * "* `㿐N``d@ t?`$`-p@  $`i?@-p`@'$ $ N``0$ $ `@``8$`4`8 `0@  $ @  @'`@?0@` `@  $ ` @@  @  @ @'@`0!] @  ,-,-,-H,-O,А   `  @ 0@ /㿘 '$``O+ `-N M`@ ` L L@ ` L L@ ` @  2" `!X@ * !X@ @*`" * ? 2  % ``@` `   ?㿘`     @ @  $`@>k%}0%8 + I V"  D (3 0 801.01kernel_version=2.2.25using_checksums=1parm_dbri_debug=iparm_dbri_trace=imapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... RESRVCDMTESTCDECTENTCHISSPDTSCDPSDPREXIIQJUMPPAUSEWAITDBRI reverse_bytes: unsupported length DBRI cmd: %08x DBRI: Command buffer overflow! (bug in driver) DBRI: Chip never completed command buffer DBRI: reset 0:%x 2:%x 8:%x 9:%x DBRI: init: cmd: %x, int: %x DBRI: invalid pipe in transmission_complete_intr DBRI: invalid td on pipe %d DBRI: TD %d, status 0x%02x DBRI: xmit callback %08x(%08x) DBRI: invalid pipe in reception_complete_intr DBRI: invalid rd on pipe %d DBRI: RD %d, status 0x%02x, len %d DBRI: recv callback %08x(%08x) DBRI: INTR: Command: %-5s Value:%d DBRI: INTR: Chan:%d Code:%d Val:%#x DBRI: Multiple Error Ack on SBus DBRI: Multiple Late Error on SBus DBRI: Lost Bus Grant on SBus DBRI: Burst Error on SBus DBRI: reset_pipe called with illegal pipe number DBRI: reset_pipe called on uninitialized pipe DBRI: setup_pipe called with illegal pipe number DBRI: setup_pipe called with strange SDP value DBRI: link_time_slot called with illegal pipe number DBRI: link_time_slot called on uninitialized pipe DBRI: xmit_fixed: Illegal pipe number DBRI: xmit_fixed: Uninitialized pipe DBRI: xmit_fixed: Non-fixed pipe DBRI: xmit_fixed: Called on receive pipe DBRI: recv_fixed called with illegal pipe number DBRI: recv_fixed called on non-fixed pipe DBRI: recv_fixed called on transmit pipe DBRI: xmit_on_pipe: Illegal pipe number DBRI: xmit_on_pipe: Uninitialized pipe DBRI: xmit_on_pipe: Called on receive pipe DBRI: xmit_on_pipe: No descriptors DBRI TD %d: %08x %08x %08x %08x DBRI: recv_on_pipe: Illegal pipe number DBRI: recv_on_pipe: Uninitialized pipe DBRI: recv_on_pipe: Called on transmit pipe DBRI: recv_on_pipe: Called on active pipe DBRI recv_on_pipe: No descriptors DBRI RD %d: %08x %08x %08x %08x DBRI: illegal bits_per_frame in setup_chi DBRI: Entering data mode without control mode DBRI: Onboard CS4215 detected DBRI: Speakerbox detected DBRI: Using speakerbox / ignoring onboard mmcodec. DBRI: no mmcodec found. DBRI: start audio output buf=%x/%ld DBRI: start audio input buf=%x/%ld SUNW,DBRIonboard1dbri_get_irqnum() dbri_get_liu_state() returns %d dbri_liu_init() dbri_liu_activate() dbri_liu_deactivate() <3>DBRI: unsupported chip version %c found. DBRI DMA Cmd BlockDBRI Registers<3>DBRI: could not allocate registers intrDBRI audio/ISDN<3>DBRI: Can't get irq %d <3>DBRI: unable to register audio <6>audio%d at 0x%lx (irq %d) is DBRI(%c)+CS4215(%d) DBRI: Found %s in SBUS slot %d DBRI: Ignoring slot %d GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4,!Nh  ,,Dh2b<  =-hB-H-ZQ. Y9=:b< Z EH <#<.@9D@>JhXheprP}@40x  H P$ t<& 1 D @dK VDcp(z||x|@@ h 3\DT0kL X`hpx %<R hh@ Ldx  0I 0 b <z T h!$ !0!H!\(! !("! 6! L! a!Ds" "(4"\4"h(8  0.HGXi| #)Jj|"#h$h$|t$%8 %T&4T"&-'$\9'\D'\Oas *0t , A U+l ddbri.cgcc2_compiled.CS4215_FREQdbri_debugdbri_tracecmdsnum_driversreverse_bytesdbri_cmdlockdbri_cmdsenddbri_resetdbri_detachdbri_initializedbri_process_interrupt_buffertransmission_complete_intrreception_complete_intrdbri_process_one_interruptdbri_intrpipe_activereset_pipesetup_pipelink_time_slotxmit_fixedrecv_fixedxmit_on_piperecv_on_pipereset_chimmcodec_setup_pipesmmcodec_defaultmmcodec_setgainmmcodec_setctrlmmcodec_setdatammcodec_initdbri_audio_output_callbackdbri_start_outputdbri_stop_outputdbri_audio_input_callbackdbri_start_inputdbri_stop_inputdbri_set_output_volumedbri_get_output_volumedbri_set_input_volumedbri_get_input_volumedbri_set_monitor_volumedbri_get_monitor_volumedbri_set_output_balancedbri_get_output_balancedbri_set_input_balancedbri_get_input_balancedbri_set_output_muteddbri_get_output_muteddbri_set_output_channelsdbri_get_output_channelsdbri_set_input_channelsdbri_get_input_channelsdbri_set_output_precisiondbri_get_output_precisiondbri_set_input_precisiondbri_get_input_precisiondbri_set_output_encodingdbri_get_output_encodingdbri_set_input_encodingdbri_get_input_encodingdbri_set_output_ratedbri_get_output_ratedbri_set_input_ratedbri_get_input_ratedbri_set_output_portdbri_get_output_portdbri_set_input_portdbri_get_input_portdbri_get_output_portsdbri_get_input_portsdbri_audio_getdevdbri_sunaudio_getdev_sunosdbri_opendbri_releasedbri_ioctldbri_opsdriversdbri_attach*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_dbri_debug__module_parm_dbri_traceprintk_Rdd132261udelay_Ra39b4cf2free_irq_Rf20dabd8sparc_free_io_Rf8afdb8drelease_region_R43bde9b1kfree_R037a0cba___f_mmu_release_scsi_onetq_immediate_R2e2d1553___set_bitbh_active_Rfff9d0a3___f_mmu_get_scsi_one.umulsparcaudio_output_done_R38bacbc1sparcaudio_input_done_Rfddd08d3strncpy_R328a05f1__this_module___atomic_add___atomic_subdbri_isdn_initdbri_get_irqnumdbri_get_liu_statedbri_liu_initdbri_liu_activatedbri_liu_deactivatedbri_dxmitdbri_drecvdbri_bopendbri_bclosedbri_bxmitdbri_brecvkmalloc_R93d4cfe6__bzero_Rdd42e263_sparc_dvma_malloc_Rac4503aaprom_apply_sbus_ranges_Ra58c9295sparc_alloc_io_R8964169eprom_getproperty_R156810c5request_irq_Rb9ba6802register_sparcaudio_driver_R6fed1516init_moduleSBus_chain_R359591d7__strncmp_R8c5ff0fdcleanup_moduleunregister_sparcaudio_driver_R390176a0 ( ((`,,0T48T<T@TDHTLTPTTTXT\T`TdhTlTpTtTxT|TTTTTTTTTTT 0Xa\ 0 < X <a X < h h8 < @aT <X <d p abcde f( <, <8 @ Da    a  H  H$at <x < h hag <  aH LaP t x |ag < <, 4 <ah <l <|    a < < D D @ @a < <( h, h4a h  la p    a     a     a   h i j h h 8j <j Dj   a    X a  X Pg   a     a   d  ha l   ( a  (t `xa| ` a  a 0 4a8 h @lap @ pa p a  a  (a (k0^i < P < Pa <  xa x@ DaH X \a` x |a  0a 0ki < X <8 X<aT <\ l a   dllDblb8b ba l < < a  < <$ (a, D HaL h Xlap X m  <$ <4 x8 x@aP \ tmn   < <  a    ! ! !o! " "o",p "0p "<q"`p "dp "pr# # # # @# @# # #a$ $ $ $@ $D @$L @$P $` $ha$l $ $ $ $ @$ @$ $ ($a$ ($s$w$ $ % % @%  @%$ %4 @%8a%< @% % % @% @% X%a% X% % & & &8 &< &d &l & & & & '( ', 'P 'X ' ' ' ' ' ' ( ( (L p(Pa(T p(` (d (p(( ( ((( ( () )a)  )e) f)0 )4 )<)H H)T )X H)\ )d)t )|a) )d)e)f)) () ) ) P) P* a*a* (*4 *8 *< *@ *T *X *\ *` *d *l ** <* <*a* + + +a+ +P +X + + + + + ++ + D(H LPTX\`dhlptx|"("\"!0LX`hpx@Ldx!\!!! 0 <  T h!$!0!H " $!(!,0ELF 4( ` ?  ` ? D    D` ?  ` ? 8   8` `6 ? ` `6 <?  <   @      @` (t (t  t ?  @      L  L 1 i ( 0㿘  3@  㿘 `@*3  3       (@,   (@,  ? 8    ? 8  ``@   @  2#`  (#`  ` h  㿘  k@  H㿘  3*k@H k       (@,   (@,  ? 8    ? 8  ``@   @  2#`H  (#`H 㿘 !Ւ#@   F 7    #@Ɛݒ     㿘`   7  (6(1 (`   `o (n `(i` @` ` 㿘`(6(7`(o(n` @` `㿘 @  o@ 㿘  0)' ##+7##5 @H`&#   (o (7 (o㿘``* 0 @   (h  1(1 ( ( ( `㿘`@ ``@ ` `@  㿘1 @&   &   ?㿘 @  & ?`& @    $ , 0, 7 @  @  @?㿘@ @ 㿘`      $`01.01kernel_version=2.2.25using_checksums=1mapioaddr: Trying to map IO space for unsupported machine. mapioaddr: sparc_cpu_model = %d mapioaddr: Halting... unmapioaddr: sparc_cpu_model = %d, halt... SUNW,cs4231aonboard1<3>dummy: unable to register <6>audio%d: dummy at 0x0 irq 0 GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.comment4 !  , $2  = B H *Q HY `= b K  $0$$IH cT |`$$  ,, $ 80 S< mHXh$  !6 L a x   $x< H$l 0p H| ^w$ ( h`*4ATf x , $4DTH'@JV^k x ~ +BMasH Pdmy.cgcc2_compiled.dummy_set_output_encodingdummy_set_input_encodingdummy_get_output_encodingdummy_get_input_encodingdummy_set_output_ratedummy_set_input_ratedummy_get_output_ratedummy_get_input_ratedummy_set_output_channelsdummy_set_input_channelsdummy_get_input_channelsdummy_get_output_channelsdummy_get_output_precisiondummy_get_input_precisiondummy_set_output_precisiondummy_set_input_precisiondummy_output_muteddummy_get_output_muteddummy_get_formatsdummy_get_output_portsdummy_get_input_portsdummy_set_output_portdummy_set_input_portdummy_get_output_portdummy_get_input_portdummy_get_output_errordummy_get_input_errordummy_get_output_samplesdummy_get_output_pausedummy_set_output_volumedummy_play_gaindummy_get_output_volumedummy_set_output_balancedummy_get_output_balancedummy_get_input_samplesdummy_get_input_pausedummy_set_monitor_volumedummy_get_monitor_volumedummy_set_input_volumedummy_record_gaindummy_get_input_volumedummy_set_input_balancedummy_get_input_balancedummy_chip_resetdummy_opendummy_releasedummy_output_done_taskdummy_start_outputdummy_start_inputdummy_stop_outputdummy_stop_inputdummy_set_output_pausedummy_set_input_pausedummy_set_input_errordummy_set_output_errordummy_set_output_samplesdummy_set_input_samplesdummy_audio_getdevdummy_audio_getdev_sunosdummy_opsnum_driversdriversdummy_attachdummy_detach*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__this_module___atomic_add___atomic_subsparcaudio_output_done_R38bacbc1sparcaudio_input_done_Rfddd08d3tq_immediate_R2e2d1553___set_bitbh_active_Rfff9d0a3strncpy_R328a05f1init_modulekmalloc_R93d4cfe6register_sparcaudio_driver_R6fed1516printk_Rdd132261kfree_R037a0cbaunregister_sparcaudio_driver_R390176a0cleanup_moduleP P (P <P HQP P RST  <U LV\W U U W W W SX \ dXl p xX  X       Z   ([ 8 P T\ X d\ h p] ^ ]       h T $<(,048H<l@DHL$PTXH\0`Xd<hlptx|H$T`h  |4Dp$ELF@l4(㿘. J >   ` @` ` @` `*  *  ( "  㿐  //D  @    ? HH"$``  "`  2 㿘@  D @@ H` D@    ?$ "`& D"""ۂp@H  *`0 2$ $2     $ 2"b$"`  "  2    *`0"( 2"(㿘@Ր  "&  R "$!@$"$4"(, ) " & `2  $"```2`$` `$ $"`$ x`""`@ (` @`  `㿘` ` ` `$ 2`  㿘 @`x 4 *"C?``@` 2`\    `&`\ &` +? &`&`  @`x@ DH`&``` "`&@&`"`" t 2 "€`\  `p @@㿘' ` / ` `* @dQ) L` " `L` "wL`# L`!w `L` w`L`'L`&*  `    ",   2",   ` `*`   ` `* @dR dSdV   . `p @&@" @ ` @  ,`?# 㿘``| " -`\ @ `p  @& & `\ \@  @ & \&  @& & `@`\`p @@㿐    ` " P "   * *`@ *   25   @  ``@&`&`   @  2  ``"&`@&`&` "i  * *`@ *   +`f  `@ @ `@ `p @@`:  ,  8 2 o`p @( @$  @  `"@@%   !76`t&` @ 㿘@@~ 㿘 'H   @H =H2O ` ` `+` `+  `*  `* ` *`* `@ `  @  @28 ``"5 `q 2 ` ` `+  `* ` * @ & # `* `*`@ *  ` `@$@@@ @ ` 2f ` ` ``H `g "] `` `@     `@ &@ 2J `" ` -`` "8"0 $ ` @  `@ $2 $222-`-`-`-` H  @H 2  $H@  " $@ $ 22 2 2 -`-`-`-`  ` `* `*`@ *  `  2 `000-`-`-`-`  ` `* `*`@ *  ` 2 `000-`-`-`-` ` `* `* *` ` @  <H  @H HHH g % p f   @ @ ` @  p @@ .'H@+ @$ `  @   @  HH?    p@ @ 㿘& $2 $2 $H" ` @` `㿘#` "+? &?  (?@   $ $, 4  4 $ $ $  @ "$`U? "     0   0 !7  㿘    2  `"?   }?@  2 v?퀢`& *` €@   `X    a7@     `P 2 `oI?΀ D?,@?Փ2`j 24 (@  2$ 2?$4 4 $ $   2, " ,  `Z$ `@    @  `o`h@$0 @   㿘   ?0D * 2  ?@   ? ?T 㿘.`6```` 04  !7@/      ! o  (@  6 6 & && & . `  Z  @&  o h?@&X"!"D"!:?0"!p"!ဦ?0`@ ؒ@   ?؀  '@ Β@  / / `akgD%@ ؒ@   W?ؠ@ N? * g2`  C?7@$ `@ D@ ?@   ", 0*D`@  @ ? * : D`@  @ ? * : ? 2㿘  @  ? " $  @ 2$?$$  @ ,  @  ,  㿘 ` `2 `` $@ `2`㿘  "? 㿘 ` @2` ` 2` ? "@  ``2@? :` * ??2 *:* 2 㿐`  ` &` `W 2ΰ?` @ '`"`@" "  "\ "\@ @ ,2 2 / / / `/ " "`"$222/ / / / "($S'$R2"$@ 222/ / / / `  @ 222/ / / / "$`@ "(* 2 2 / / `222/ / / / `@ `*22/ / " \"\@ @@ ' `p@9?@5? z  `   / / #* 2 2 //   @    p@?@,   ]㿘  * *`@ *   w 2  p @@0    6 0D`@ @ T  T (? # 2 ? 2?"!  "! ?``''@ x?* 2  "     72            "㿐 #\` `@`D  3/-+@@ `` ` ` ` `#\ ` @#`@    @@``@ &`$`2@&&'@㿈 #\'H#`` `@`J 9` "B`$73/-+@"(@ ( @  "" " " "#\ " `#` "!#d""@#h P @@" &` (@ 4`$ 2@`$`2`&H& @㿈` @` 2 3/-+)@`   #\ #` @#d`@ @ &  2&&'  ?D   ?  a?ր3b* 㿐'a 9?"*'4?D    ? $?򀢠8  ? ?' ?򀢠   @ ? 㿘V  *?Ԑ  @  !?  &  "? €?Ԑ@ .`z`&b @`   `㿘   t  "@ , t & V ` ` @`  ` 㿘#@ ,`#`#!* 4 _ 2 4㿘  ) 2K?,` 2`D?π 2 `Ӑ* `6`9?`#@`@ !! `2`%?`6"(&`  "? } `@ ?А. ) "   }  `@  㿈  , ( &1?"( 2 `7'  "`" `2 ` 2`?͐"$"``4""@ `4"*V 2  & , ( 㿘` @` @`  `?ӝ㿈  & ( ""$?ǐ'"@ " "$ '"$ @`"('@ "(7 7"+/@  㿘  * @; p g 7? * @@    *  *@ 2  $ p. J `  * *`@ *         p @2 @ x` @ b( 2 `7'ܒД  '` #? "`? `( ?ǐ 7 b+, b"4 bb$ @ ` @J 㿀 (  @7'  H ) D?ǔ@@䶒 <   * @․$`` &`` @ #' $`$&` 4@ ` *` 4` @   * *  *`@  $` ,`'@?ӝ㿘" !@ "!@"! @ "! @S"!@0"!@g"!@V0"!…@b"!@ I`"@"D"!〦@S0 s@Pl , D` :|?&x D@" `"D`\?D` :h?&d `@ !! `)S`@ !! `F?Ad=`@ !! `2D.?`  $2,?!2,?℀ 2D?` ?@    " 0?@㿘2#?H` @` `&#H( 㿘 ` @` ` 㿘@ @" a72 @ @"` 2 @ ` @ "`@  @ "`@ @ ! @` @` @`@ @ 㿘 ?  㿘`    `$ $ U"`$  ! @  @  @ @ @  `@""`@ ! @#$ @ @``@$`㿘@  㿘????????<4>IPX: Network number collision %lx %s %s and %s %s IPX frame type 802.2TR is obsolete. Use 802.2 instead. IPX frame type EtherII over token-ring is obsolete. Use SNAP instead. EtherII802.2SNAP802.3802.2TRNoneUnknownInternal%-11s%-15s%-9s%-11s%s NetworkNode_AddressPrimaryDeviceFrame_Type%08lX %02X%02X%02X%02X%02X%02X %-9sYesNo%-11s%s %-15s%-28s%-10s%-10s%-7s%s Local_AddressRemote_AddressTx_QueueRx_QueueStateUid%08X:%04X %-28sNot_Connected%08lX:%02X%02X%02X%02X%02X%02X:%04X %08X %08X %02X %03d %-11s%-13s%s Router_NetRouter_Node%08lX %02X%02X%02X%02X%02X%02X %-13s%s DirectlyConnected<7>IPX: bind failed because port %X in use. <7>IPX: bound socket 0x%04X. ipxipx_interfaceipx_route<2>IPX: Unable to register with 802.2 <2>IPX: Unable to register with SNAP <6>NET4: Linux IPX 0.38 for NET4.0 <6>IPX Portions Copyright (c) 1995 Caldera, Inc. ipxrtr_route_skb_R2ef17c41ipx_if_offset_R08de4f2cipx_remove_socket_R4054746cipx_register_spx_R7899a034ipx_unregister_spx_Rb5e39e64$ $ $7GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)01.0101.01kernel_version=2.2.25using_checksums=1.symtab.strtab.shstrtab.text.rela.text.fixup.rela.fixup.rodata__ksymtab.rela__ksymtab.kstrtab__ex_table.rela__ex_table.data.rela.data.bss.comment.note.modinfo47`!Cx ,7T3\` ?7JG<4(Q\dx `<`i<@t\  =8]\  >>z?f(?*?^ @_ j8   (c ,c 8Pc \pt           j j gyphfx |             $ ( @ h x       kc c p  t   |p  |  p,Dlu < P D P H ` tp   $ 4 p x Ds \p p p     $ d        <Thsp,Dpd h pp    $ 0 4 @ Dc Hc Tx | iq     8 P< PPTXt\`dhh Hlp Ht x         $il p   q  T         id|j j  gLq\qj j gHqTj pgj j j j @ D  i    q( , 8 Xk   k     hqq   t@pTzp p  j j g!q! ! ! " "  " " "$ "( "0 "4 "< "@ "X "h "x "| " X" X" " 0" 8" H" P" " 0" 8" H" P"" " " " " " " h# x# # h# x#<#D #H #\ #d #h #l #t## ## $  $  $  ($( ($0 $4 $8 $< $@ $P $T $X $\ $` $d$l $p $ H$ $ $ 0$ @$ X$$ 0$ @$$ H%  X% %8%< %P %X% % 0% % % % 0% % %& & & h&  &$ &( &, &8&< h&\ && & && 'j 'j 'j 'j 'j (8j (Lg( (_( 4( 4( )d) c )c )$)c )c )p+  (+(+, (+d X+l+p X+ + ,0q,f,c ,c ,p,q-(q-<-dq. . .p./lq/a0P0q02$j 2(j 2tj 2xj 3tj 3xj 3j 3j 3g440 44 4hc 4lc 4x4 44 44 4 4c 4 4c 4p5 $5h5 $55$ 5( 54 58 5<5@ 5D`5L 5P 5T x5\ x5`5d x5h x5l 5p 5t x5x5 5 5 55 5 5 55 5 5 55 5 5w5 5{ 5} 5{ 55} 5 5{ 55 5{ 5 66 6 6 6 6 66 6T 6X 6h 6t 6 6 6{ 6{ 66{ 66{ 66 66 6 66 6 x6 6 x66 6 6 x6 6l6 x6 6 77 7 7 7l7 77 7 $7$ $7(7, 7<'4('0(82D@2L3 y $e  ','$ ($0(2<,8024@83<H((t8<)H@*4D+HbL,lP,TX1\`1d&h'pl~p.t/x$"8HL%       ) D b q        8h0x<IP`PvT<<$$\L<d$  x3|D TO"L<_!n|t@\l@<0t $1 >"U$b%0r&t'p(t 4D )H)l*4L+,lL, ./\!1.1$8$ Gx \ p  x  6P 7` *8Qxx #7L2Xfms78 $7 ^D k, .H`x6(( 8  4< : Y w        ; V n t-x8 |X     5   -8 S x     D  3 [4, v 4D af_ipx.cgcc2_compiled.ipxcfg_max_hopsipxcfg_auto_select_primaryipxcfg_auto_create_interfacesp8022_datalinkpEII_datalinkp8023_datalinkpSNAP_datalinkipx_routesipx_interfacesipx_primary_netipx_internal_netipxcfg_set_auto_createipxcfg_set_auto_selectipxcfg_get_config_dataipx_destroy_socketipxitf_clear_primary_netipxitf_find_using_physipxitf_find_using_netipxitf_insert_socketipxitf_find_socketipxitf_downipxrtr_del_routesipxitf_device_eventipxitf_def_skb_handleripxitf_demux_socketipxitf_adjust_skbuffipxitf_sendipxitf_add_local_routeipxrtr_add_routeipxitf_rcvipx_device_nameipx_frame_nameipxitf_insertipxitf_create_internalipx_map_frame_typeipxitf_createipxitf_deleteipxitf_auto_createipxitf_ioctlipxrtr_lookupipxrtr_createipxrtr_deleteipx_set_checksumipxrtr_route_packetipxrtr_ioctlipx_interface_get_infoipx_get_infoipx_rt_get_infoipx_setsockoptipx_getsockoptipx_createspx_family_opsipx_dgram_opsipx_releaseipx_first_free_socketnumipx_bindipx_connectipx_acceptipx_getnameipx_sendmsgipx_recvmsgipx_shutdownipx_ioctlipx_family_opsipx_8023_packet_typeipx_dix_packet_typeipx_dev_notifieripx_8022_typeipx_snap_idipx_proto_finito*ABS*sysctl_net_ipx.csk_alloc_R2a00f634make_8023_client_R903b737fskb_recv_datagram_R987cd0e5sock_no_socketpair_Rac4b932d__this_modulesock_init_data_Rd175caf0__kstrtab_ipx_unregister_spx_Rb5e39e64sk_free_Rb6f20db2__copy_user_R9c5239ebsock_register_Red2bcedekmalloc_R93d4cfe6stack_top_Ra6cab6a7kfree_s_R06d9dd5ddev_remove_pack_R153b0588__module_using_checksumscleanup_module__ksymtab_ipx_remove_socket_R4054746c___atomic_submemcpy.udivskb_copy_Rabf14088memcpy_fromiovec_R9fb3dd30alloc_skb_R56cd27ae.divregister_netdevice_notifier_R63ecad53init_moduleipx_remove_socket_R4054746ccall_out_firewall_R812376c4proc_net_R7b597ac4__ksymtab_ipx_unregister_spx_Rb5e39e64ipx_procinfosock_no_fcntl_Rb435fee3register_snap_client_Rf7240e06printk_Rdd132261sock_unregister_R2394a062ipx_table__kfree_skb_R4954ae5fmake_EII_client_Rb98186a2sprintf_R1d26aa98sock_rfree_Rb644f546proc_unregister_Rf65f8efbdatagram_poll_R451fa145sk_run_filter_Rbb957efaipx_if_offset_R08de4f2cipxrtr_route_skb_R2ef17c41__kstrtab_ipxrtr_route_skb_R2ef17c41skb_clone_R98afcb1csock_no_listen_R42c764c0dev_queue_xmit_R332ba5f2memcmpipx_unregister_spx_Rb5e39e64register_8022_client_R4f1937ffsock_alloc_send_skb_R099a70d4__kstrtab_ipx_if_offset_R08de4f2cskb_over_panic_Rbce6950d__bzero_Rdd42e263destroy_EII_client_R7f03e8bbskb_copy_datagram_iovec_R53499dd8dev_add_pack_R5e0659b6unregister_8022_client_R7acef15dcall_in_firewall_Rdd4fef54__module_kernel_version.uremipx_rcv__kstrtab_ipx_register_spx_R7899a034___atomic_adddev_get_R0dfb2c76proc_net_inode_operations_R01511c86__ksymtab_ipx_register_spx_R7899a034ipx_proto_initdev_ioctl_R387c78a5__kstrtab_ipx_remove_socket_R4054746c__ksymtab_ipxrtr_route_skb_R2ef17c41__ksymtab_ipx_if_offset_R08de4f2cunregister_snap_client_R9abefc50destroy_8023_client_R02c82badproc_register_R8baf7c4dskb_free_datagram_R61a890afipx_if_procinfosock_no_dup_R1ae19416unregister_netdevice_notifier_Rfe769456ipx_register_spx_R7899a034call_fw_firewall_Rbaf844f8ipx_rt_procinfo__memcpy_Rbfaaaa73ELFt4(㿘  `'D  *??/ "?@  &@?@@   D    @ @@?㿘 `!7? @  &@/?@ @ "   D   ? *` "@  *  0@?@?@㿘 D` @ ? #c `X%? %? c w#:#x #.cS# 0# %#\5#񀦀"G?#4 #򀦀,Ho`@```@ Ho`? `@`%? @ *#Ho`? @``@ `@$  @?   * "   %?@   `    #`` "c       @Ho``@` ?ꀦ }`Ho`#  # @@`$?"`#  "  4 Ho` @ `?$c  "   "  `@@4*? @ ?  "  }  ` " @ ?  ` "  @?@ 㿘 " " @  @  㿘`      ؒ 2&`  㿘`?@  `? D` @ ` ,&@?00#`X30c:5D## #"DU0#" D0#"xDI5 @    2E? >䰒 9H/`@ 쀦@`'@ @  ?`@  '@?0 H/`@ *@  D   @@0{5 @    2Ѱ? .䰒 H/`@'  " '@ $'  D ? 7 ? .@  (@#` @    2x? q䰒 l찒 @0bH/`@ 쀦@K?@ @0DD` `    ` @    )?H/`c@'@'    ` "  @?㿘# `X# Z#"?` #8#=i #7`=  #"Q` # U#򀦀4#0#";` 0#D0# A/`0#)9 ` `` `  ` &? 7`  ?   ` "  @ ???㿘 @  ""`&`X @`   `?㿘`X@ ` @`  ` 㿘`@ @ 0#Ho``@!`@$ $ `    @ @?㿘@ 01.01kernel_version=2.2.25using_checksums=1?<7>OPROMSETOPT%s %s='%s' 2<6>openprom_sunos_ioctl: unimplemented ioctl <6>openprom_sunos_ioctl: cmd 0x%X, arg 0x%lX <6>openprom_bsd_ioctl: cmd 0x%X openprom_ioctl: cmd 0x%X, arg 0x%lX openprom<3>openprom: unable to get misc minor options<3>openprom: unable to find options node GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo__ex_table.rela__ex_table.fixup.rela.fixup.rodata__ksymtab.comment4p!!( ,P2(H =BH*Q4\)0 lD s)8   PJ=D0  t " -T5 =08R _h`fho 0} @l\@<< /4:@Tas(9Ja} );IUmXopenprom.cgcc2_compiled.copyingetstringscopyoutcnt.316openprom_sunos_ioctloptions_nodeintreegoodnodecopyin_stringcnt.325openprom_bsd_ioctlcnt.328openprom_ioctlopenprom_lseekopenprom_openopenprom_releaseopenprom_fopsopenprom_dev*ABS*__module_kernel_version__module_using_checksums.div.urem.udivstack_top_Ra6cab6a7__ret_efaultkmalloc_R93d4cfe6__bzero_Rdd42e263__copy_user_R9c5239ebkfree_R037a0cbasaved_command_line_R04f5f35fprom_getproplen_Rff8b6749prom_getproperty_R156810c5__memcpy_Rbfaaaa73prom_nextprop_R2bf482aastrlen_R97255bdfprintk_Rdd132261prom_setprop_R4bad614b__prom_getsibling_R8da618dc__prom_getchild_R8ca0e65dprom_finddevice_R98d4365estrcpy_Re914e41eprom_getchild_R5ee0a984prom_getsibling_R3b3fe8cbprom_root_node_R5ce875cf__this_module___atomic_addkfree_s_R06d9dd5d___atomic_subinit_modulemisc_register_Rf9151a20prom_searchsiblings_Rdc0ba024misc_deregister_R1dd51db6cleanup_module% % \'x(% )*' (,% H% *% % ) + ( T \ x ,0-`./0 .d0l |       ( (1  (234H5+ 06    01 0$ 8 < `@ `H1X*789 9   L' l% t% ) *   L  P% T% l) , * 0) P' h* - ) % ) * % $% <) / 0 % 4% \) t) % % )*H2x**% %   % % )03@4l    1               1'9  9 :  : 0;d<l: p: |= < <? 1 9 9 7   @   $ 8  <1@  DA\ <`Ad <$\@ D8&` hELFh4(㿘@ @ @ 㿘1 2 ?` @`! ` `@`* *  * @$ @ &  㿘@ ` @`  `"` 㿘! @`* *  * @$ @㿘 ?〦  㿘#1 # # )?D #"D ?` `@ (  (  ?` ? &0 㿘@   "#  @"㿘@ 㿘@ <Software Watchdog01.01kernel_version=2.2.25using_checksums=1parm_soft_margin=i<2>SOFTDOG: Initiating system reboot. WATCHDOG: Reboot didn't ????? watchdogSoftware Watchdog Timer: 0.05, timer margin: %d sec ?GCC: (GNU) egcs-2.91.66 19990314/Linux (egcs-1.1.2 release).symtab.strtab.shstrtab.text.rela.text.data.rela.data.bss.note.modinfo.rodata.fixup.rela.fixup__ex_table.rela__ex_table.comment4! ( ,2H =BHCQY`L   lwX  =  5 &2,@,MH] Pj\0x(  0<l 0 :HVh|pH softdog.cgcc2_compiled.soft_margintimer_alivewatchdog_firesoftdog_opensoftdog_releasesoftdog_pingsoftdog_writeident.326softdog_ioctlsoftdog_fopssoftdog_miscdev*ABS*__module_kernel_version__module_using_checksums.div.urem.udiv__module_parm_soft_marginprintk_Rdd132261machine_restart_Re6e3ef70__this_module___atomic_addwatchdog_ticktockdel_timer_R5811f067jiffies_R0da02d67add_timer_Rbea990b2___atomic_substack_top_Ra6cab6a7__copy_user_R9c5239ebwatchdog_initmisc_register_Rf9151a20init_modulecleanup_modulemisc_deregister_R1dd51db6   ( (0 4 D H T!d" h" t#|  $ $ % " #"  &  " " #  $ ($ <$ L%' '    (8' <' t lx*| l"   "    X"  X) l- l8\DL,Tp Ht0\TThis is a brief list of all the files in ./linux/Documentation and what they contain. If you add a documentation file, please list it here in alphabetical order as well, or risk being hunted down like a rabid dog. Note that subdirectories have their own index files too. Please try and keep the descriptions small enough to fit on one line. Thanks -- Paul G. 00-INDEX - this file. ARM-README - information for using Linux on the ARM architecture. BUG-HUNTING - brute force method of doing binary search of patches to find bug. Changes - list of changes that break older software packages. CodingStyle - how the boss likes the C code in the kernel to look. Configure.help - text file that is used for help when you run "make config" IO-APIC.txt - info on using the enhanced interrupt hardware on SMP boards. IO-mapping.txt - how to access I/O mapped memory from within device drivers. SMP.txt - notes, and "To Fix" list for multi-processor Linux. (see smp.tex) VGA-softcursor.txt - how to change your VGA cursor from a blinking underscore. arm/ - directory with info about Linux on the ARM architecture. binfmt_misc.txt - info on the kernel support for extra binary formats. cdrom/ - directory with information on the CD-ROM drivers that Linux has. cpqarray.txt - info on using Compaq's SMART2 Intelligent Disk Array Controllers. devices.tex - TeX source listing of all the nodes in /dev/ with major minor #'s devices.txt - plain ASCII listing of all the nodes in /dev/ with major minor #'s digiboard.txt - info on the Digiboard PC/X{i,e,eve} multiport boards. digiepca.txt - info on Digi Intl. {PC,PCI,EISA}Xx and Xem series cards. exception.txt - how Linux v2.2 handles exceptions without verify_area etc. fb/ - directory with info on the frame buffer graphics abstraction layer. filesystems/ - directory with info on the various filesystems that Linux supports. ftape.txt - notes about the floppy tape device driver hayes-esp.txt - info on using the Hayes ESP serial driver. i386/ - directory with info about Linux on the intel ix86 architecture. ide.txt - important info for users of ATA devices (IDE/EIDE disks and CD-ROMS) initrd.txt - how to use the RAM disk as an initial/temporary root filesystem. ioctl-number.txt - how to implement and register device/driver ioctl calls. isdn/ - directory with info on the Linux ISDN support, and supported cards. java.txt - info on the in-kernel binary support for Java(tm) joystick.txt - info on using joystick devices (and driver) with Linux. joystick-api.txt - API specification for applications that will be using the joystick. joystick-parport.txt - info on how to hook joysticks/gamepads to the parallel port. kbuild/ - directory with info about the kernel build process kernel-docs.txt - listing of various WWW + books that document kernel internals. kernel-parameters.txt - summary listing of command line / boot prompt args for the kernel. kmod.txt - info on the kernel module loader/unloader (kerneld replacement). locks.txt - info on file locking implementations, flock() vs. fcntl(), etc. logo.gif - Full colour GIF image of Linux logo (penguin) logo.txt - Info on creator of above logo & site to get additional images from. m68k/ - directory with info about Linux on Motorola 68k architecture. magic-number.txt - list of magic numbers used to mark/protect kernel data structures. mandatory.txt - info on the Linux implementation of Sys V mandatory file locking. mca.txt - info on supporting Micro Channel Architecture (e.g. PS/2) systems. md.txt - info on boot arguments for the multiple devices driver memory.txt - info on typical Linux memory problems. mkdev.ida - script to make /dev entries for Intelligent Disk Array Controllers. modules.txt - short guide on how to make kernel parts into loadable modules mtrr.txt - how to use PPro Memory Type Range Registers to increase performance nbd.txt - info on a TCP implementation of a network block device. networking/ - directory with info on various aspects of networking with Linux. nfsroot.txt - short guide on setting up a diskless box with NFS root filesystem oops-tracing.txt - how to decode those nasty internal kernel error dump messages. paride.txt - information about the parallel port IDE subsystem. parport.txt - how to use the parallel-port driver. pci.txt - info on the PCI subsystem for device driver authors pcwd-watchdog.txt - info and sample code for using with the PC Watchdog reset card. powerpc/ - directory with info on using Linux with the PowerPC. proc.txt - detailed info on Linux's /proc filesystem. ramdisk.txt - short guide on how to set up and use the RAM disk. riscom8.txt - notes on using the RISCom/8 multi-port serial driver. rtc.txt - notes on how to use the Real Time Clock (aka CMOS clock) driver. scsi-generic.txt - info on the sg driver for generic (non-disk/CD/tape) SCSI devices. scsi.txt - short blurb on using SCSI support as a module. serial-console.txt - how to set up Linux with a serial line console as the default. sgi-visws.txt - short blurb on the SGI Visual Workstations. smart-config.txt - description of the Smart Config makefile feature. smp.tex - TeX document describing implementation of Multiprocessor Linux smp.txt - a few more notes on symmetric multi-processing sound/ - directory with info on sound card support specialix.txt - info on hardware/driver for specialix IO8+ multiport serial card. spinlocks.txt - info on using spinlocks to provide exclusive access in kernel. stallion.txt - info on using the Stallion multiport serial driver. svga.txt - short guide on selecting video modes at boot via VGA BIOS. sx.txt - info on the Specialix SX/SI multiport serial driver. sysctl/ - directory with info on the /proc/sys/* files sysrq.txt - info on the magic SysRq key transname.txt - how to use name translation to ease use of diskless systems. unicode.txt - info on the Unicode character/font mapping used in Linux. video4linux/ - directory with info regarding video/TV/radio cards and linux. watchdog.txt - how to auto-reboot Linux if it has "fallen and can't get up". ;-) xterm-linux.xpm - XPM image of penguin logo (see logo.txt) sitting on an xterm. Kernel Support for miscellaneous (your favourite) Binary Formats v1.1 ===================================================================== This Kernel feature allows you to invoke almost (for restrictions see below) every program by simply typing its name in the shell. This includes for example compiled Java(TM), Python or Emacs programs. To achieve this you must tell binfmt_misc which interpreter has to be invoked with which binary. Binfmt_misc recognises the binary-type by matching some bytes at the beginning of the file with a magic byte sequence (masking out specified bits) you have supplied. Binfmt_misc can also recognise a filename extension aka '.com' or '.exe'. To actually register a new binary type, you have to set up a string looking like :name:type:offset:magic:mask:interpreter: (where you can choose the ':' upon your needs) and echo it to /proc/sys/fs/binfmt_misc/register. Here is what the fields mean: - 'name' is an identifier string. A new /proc file will be created with this name below /proc/sys/fs/binfmt_misc - 'type' is the type of recognition. Give 'M' for magic and 'E' for extension. - 'offset' is the offset of the magic/mask in the file, counted in bytes. This defaults to 0 if you omit it (i.e. you write ':name:type::magic...') - 'magic' is the byte sequence binfmt_misc is matching for. The magic string may contain hex-encoded characters like \x0a or \xA4. In a shell environment you will have to write \\x0a to prevent the shell from eating your \. If you chose filename extension matching, this is the extension to be recognised (without the '.', the \x0a specials are not allowed). Extension matching is case sensitive! - 'mask' is an (optional, defaults to all 0xff) mask. You can mask out some bits from matching by supplying a string like magic and as long as magic. The mask is anded with the byte sequence of the file. - 'interpreter' is the program that should be invoked with the binary as first argument (specify the full path) There are some restrictions: - the whole register string may not exceed 255 characters - the magic must reside in the first 128 bytes of the file, i.e. offset+size(magic) has to be less than 128 - the interpreter string may not exceed 127 characters You may want to add the binary formats in one of your /etc/rc scripts during boot-up. Read the manual of your init program to figure out how to do this right. Think about the order of adding entries! Later added entries are matched first! A few examples (assumed you are in /proc/sys/fs/binfmt_misc): - enable support for em86 (like binfmt_em86, for Alpha AXP only): echo ':i386:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:' > register echo ':i486:M::\x7fELF\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfb\xff\xff:/bin/em86:' > register - enable support for packed DOS applications (pre-configured dosemu hdimages): echo ':DEXE:M::\x0eDEX::/usr/bin/dosexec:' > register - enable support for Windows executables using wine: echo ':DOSWin:M::MZ::/usr/local/bin/wine:' > register For java support see Documentation/java.txt You can enable/disable binfmt_misc or one binary type by echoing 0 (to disable) or 1 (to enable) to /proc/sys/fs/binfmt_misc/status or /proc/.../the_name. Catting the file tells you the current status of binfmt_misc/the entry. You can remove one entry or all entries by echoing -1 to /proc/.../the_name or /proc/sys/fs/binfmt_misc/status. HINTS: ====== If you want to pass special arguments to your interpreter, you can write a wrapper script for it. See Documentation/java.txt for an example. Your interpreter should NOT look in the PATH for the filename; the kernel passes it the full filename to use. Using the PATH can cause unexpected behaviour and be a security hazard. There is a web page about binfmt_misc at http://www.tat.physik.uni-tuebingen.de/~rguenth/linux/binfmt_misc.html Richard Gnther [Sat Mar 2 10:32:33 PST 1996 KERNEL_BUG-HOWTO lm@sgi.com (Larry McVoy)] This is how to track down a bug if you know nothing about kernel hacking. It's a brute force approach but it works pretty well. You need: . A reproducible bug - it has to happen predictably (sorry) . All the kernel tar files from a revision that worked to the revision that doesn't You will then do: . Rebuild a revision that you believe works, install, and verify that. . Do a binary search over the kernels to figure out which one introduced the bug. I.e., suppose 1.3.28 didn't have the bug, but you know that 1.3.69 does. Pick a kernel in the middle and build that, like 1.3.50. Build & test; if it works, pick the mid point between .50 and .69, else the mid point between .28 and .50. . You'll narrow it down to the kernel that introduced the bug. You can probably do better than this but it gets tricky. . Narrow it down to a subdirectory - Copy kernel that works into "test". Let's say that 3.62 works, but 3.63 doesn't. So you diff -r those two kernels and come up with a list of directories that changed. For each of those directories: Copy the non-working directory next to the working directory as "dir.63". One directory at time, try moving the working directory to "dir.62" and mv dir.63 dir"time, try mv dir dir.62 mv dir.63 dir find dir -name '*.[oa]' -print | xargs rm -f And then rebuild and retest. Assuming that all related changes were contained in the sub directory, this should isolate the change to a directory. Problems: changes in header files may have occurred; I've found in my case that they were self explanatory - you may or may not want to give up when that happens. . Narrow it down to a file - You can apply the same technique to each file in the directory, hoping that the changes in that file are self contained. . Narrow it down to a routine - You can take the old file and the new file and manually create a merged file that has #ifdef VER62 routine() { ... } #else routine() { ... } #endif And then walk through that file, one routine at a time and prefix it with #define VER62 /* both routines here */ #undef VER62 Then recompile, retest, move the ifdefs until you find the one that makes the difference. Finally, you take all the info that you have, kernel revisions, bug description, the extent to which you have narrowed it down, and pass that off to whomever you believe is the maintainer of that section. A post to linux.dev.kernel isn't such a bad idea if you've done some work to narrow it down. If you get it down to a routine, you'll probably get a fix in 24 hours. My apologies to Linus and the other kernel hackers for describing this brute force approach, it's hardly what a kernel hack would do. However, it does work and it lets non-hackers help bug fix. And it is cool because Linux snapshots will let you do this - something that you can't do with vender supplied releases. This driver is for Compaq's SMART Array Controllers. Supported Cards: ---------------- This driver is known to work with the following cards: * SA 5300 * SA 5i * SA 532 If notes are not already created in the /dev/cciss directory # mkdev.cciss [ctlrs] Where ctlrs is the number of controllers you have (defaults to 1 if not specified). Device Naming: -------------- You need some entries in /dev for the cciss device. The mkdev.cciss script can make device nodes for you automatically. Currently the device setup is as follows: Major numbers: 104 cciss0 105 cciss1 106 cciss2 etc... Minor numbers: b7 b6 b5 b4 b3 b2 b1 b0 |----+----| |----+----| | | | +-------- Partition ID (0=wholedev, 1-15 partition) | +-------------------- Logical Volume number The suggested device naming scheme is: /dev/cciss/c0d0 Controller 0, disk 0, whole device /dev/cciss/c0d0p1 Controller 0, disk 0, partition 1 /dev/cciss/c0d0p2 Controller 0, disk 0, partition 2 /dev/cciss/c0d0p3 Controller 0, disk 0, partition 3 /dev/cciss/c1d1 Controller 1, disk 1, whole device /dev/cciss/c1d1p1 Controller 1, disk 1, partition 1 /dev/cciss/c1d1p2 Controller 1, disk 1, partition 2 /dev/cciss/c1d1p3 Controller 1, disk 1, partition 3 Intro ===== This document is designed to provide a list of the minimum levels of software necessary to run the 2.2 kernels, as well as provide brief instructions regarding any other "Gotchas" users may encounter when trying life on the Bleeding Edge. If upgrading from a pre-2.0.x kernel, please consult the Changes file included with 2.0.x kernels for additional information; most of that information will not be repeated here. Basically, this document assumes that your system is already functional and running at least 2.0.x kernels. It is originally based on my "Changes" file for 2.0.x kernels and therefore owes credit to the same people as that file (Jared Mauch, Axel Boldt, Alessandro Sigala, and countless other users all over the 'net). Please feel free to submit changes, corrections, gripes, flames, money, etc. to me (chris.ricker@genetics.utah.edu). If you do so, you don't need to bother doing so in the form of a diff, as this is generated by texinfo so a diff is useless anyway (though I can incorporate one by hand if you insist upon sending it that way ;-). The most current version should always be available from http://cyberbuzz.gatech.edu/kaboom/linux/ as well. Voir http://www.linux-france.com/article/sys/Changes-2.2/Changes-2.2.1.html pour la traduction franais. Nihongo-ban ha kochira desu (text & html) http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/Changes http://www2.palnet.or.jp/~matsuda/Changes-2.2.ja.html Visite http://www2.adi.uam.es/~ender/tecnico/cambios22.html para obtener la traduccin al espaol de este documento. Also, don't forget http://www.linuxhq.com/ http://www.kernelnotes.org/ http://www.kernel.org/ for all your Linux kernel needs. Last updated: October 13, 1999 Current Author: Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Current Minimal Requirements **************************** Upgrade to at *least* these software revisions before thinking you've encountered a bug! If you're unsure what version you're currently running, the suggested command should tell you. - Kernel modutils 2.1.121 ; insmod -V - Gnu C 2.7.2.3 ; gcc --version - Binutils 2.8.1.0.23 ; ld -v - Linux libc5 C Library 5.4.46 ; ls -l /lib/libc* - Linux libc6 C Library 2.0.7pre6 ; ls -l /lib/libc* - Dynamic Linker (ld.so) 1.9.9 ; ldd --version or ldd -v - Linux C++ Library 2.7.2.8 ; ls -l /usr/lib/libg++.so.* - Procps 2.0.3 ; ps --version - Procinfo 16 ; procinfo -v - Psmisc 17 ; pstree -V - Net-tools 1.52 ; hostname -V - Loadlin 1.6a - Sh-utils 1.16 ; basename --v - Autofs 3.1.3 ; automount --version - NFS 2.2beta40 ; showmount --version - Bash 1.14.7 ; bash -version - Ncpfs 2.2.0 ; ncpmount -v - Pcmcia-cs 3.0.14 ; cardmgr -V - PPP 2.3.10 ; pppd --version - Util-linux 2.9z ; chsh -v - isdn4k-utils v3.1beta7 ; isdnctrl 2>&1|grep version Upgrade notes ************* General Information =================== now performs a cold reboot instead of a warm reboot for increased hardware compatibility. If you want a warm reboot and know it works on your hardware, add a "reboot=warm" command line option in LILO. A small number of machines need "reboot=bios" to reboot via the BIOS. Also, please remember that cua* devices are now obsolete. Switch to the corresponding ttyS* device instead (e.g., cua0 -> ttyS0, cua1 -> ttyS1, etc.). In addition, some software still works, but needs to be compiled against 2.2 headers for complete functionality. Fdutils binaries compiled under 2.0 or earlier kernels should be replaced with ones compiled under 2.2, for example. As of 2.1.115, support for the deprecated major 4 /dev/ttyp* devices was removed. If necessary (eg, you get "out of pty" error messages when you obviously are not out of pty's), create major 3 /dev/tty* and major 2 /dev/pty* devices (see Documentation/devices.txt for more information). In general, you should make sure that your /dev directory is up-to-date if you are experiencing any problems. Optional support for Unix98 pty devices has also been added. If you want to use the Unix98 ptys, you should be running at least glibc-2.0.9x, and you must switch completely to Unix98 pty's. The general procedure for configuring Unix98 pty support is: - Compile your kernel with CONFIG_UNIX98_PTYS and CONFIG_DEVPTS_FS. - mknod /dev/ptmx c 5 2 chmod 666 /dev/ptmx mkdir /dev/pts - Add to /etc/fstab: none /dev/pts devpts gid=5,mode=620 0 0 (Note: gid=5 is applicable for Red Hat systems for which group "tty" has gid 5. Adjust according to your distribution. Use mode=600 if you want "mesg n" to be default.) - Mount /dev/pts Frame buffer consoles ("fbcon") are now in the kernel for all platforms, not just those non-Intel ones for which VGA text mode is impossible. VGAcon is still available for those who want it, but fbcon has the advantage of providing a uniform graphical subsystem across all Linux ports, and it displays a spiffy penguin logo on boot-up ;-). For more information, see the files in Documentation/fb/ ; you may also need to download the fbset utilities. Libc (libc5) ============ Linux-2.2 is ELF-only. You can still compile a.out apps if you really want, but your kernel must be compiled ELF. If you can't currently compile ELF, consult the ELF howto at http://metalab.unc.edu/mdw/HOWTO/ELF-HOWTO.html and upgrade your system accordingly. For modules to work, you need to be running libc-5.4.x or greater. Since updates to libc fix other problems as well (security flaws, for example) and since 5.4.7 is missing a few needed symbols, try to get the latest 5.4.x you can. Currently, libc-5.4.46 is the latest public release. If you upgrade to libc-5.4.x, you also have to upgrade your dynamic linker (ld.so) to at least 1.9.9, or all sorts of weirdness will happen. Actually, ld.so-1.8.2 and later will work, but 1.9.9 is widely available, so if you need to upgrade, use it. If you get a release later than 1.8.5, avoid 1.8.10 as it introduces a few bugs that are fixed in later releases. Please make sure you don't install ld.so-2.x unless you're running glibc2 / libc6. If you upgrade to libc-5.4.x, you may also need to upgrade ypbind if you're using NIS. For ypbind and glibc, you'll probably need the ypbind-3.3-glibc5.diff patch available in the same place as the ypbind source. If you upgrade to libc-5.4.46, please read and pay attention to its accompanying release notes. The section about it breaking make is not a joke. GNU libc (libc6) ================ Older versions of GNU libc (libc6) have a bug in the dynamic linker. /etc/ld.so.cache gets mapped into memory and is never unmapped. If one of your boot scripts calls ldconfig, /etc/ld.so.cache is deleted. Init, however, still references that file; as of 2.1.122, the kernel will consequently not be able to remount the root file system r/o at system shutdown. To fix this, upgrade to at least the pre6 release of GNU libc 2.0.7. As a temporary workaround, modify your boot scripts to do the following before calling ldconfig: ln -f /etc/ld.so.cache /etc/ld.so.cache.old Modules ======= You need to upgrade to the latest version of modutils for the Linux 2.2 kernel. This version will also work with your 2.0 kernel. As of 2.1.90-pre1, kerneld has been replaced by a kernel thread, kmod. See Documentation/kmod.txt for more information. The main user-level change this requires is modification to your init scripts to check for the absence of /proc/sys/kernel/modprobe before starting kerneld. Binutils ======== If you upgrade binutils, please read its accompanying release notes to find out the proper way to upgrade it. No, the instruction to "rm `which encaps`" is not a joke. The last public release of the binutils 2.8.x series was 2.8.1.0.23. Binutils 2.8.1.0.25 to 2.9.1.0.2 are beta releases, and are known to be very buggy. Binutils 2.9.1 (note the absence of a suffix) from the FSF should work, and binutils 2.9.1.0.7 and later releases are also good. Either use binutils-2.8.1.0.23 or binutils-2.9.1.0.7 or later. Glibc2 users should especially try to use the 2.9.1.0.x releases, as they resolve known issues with glibc2 and binutils-2.8.x releases. libbfd, libiberty, and /usr/include/bfd.h, which are part of recent binutils packages, are also required to compile ksymoops. Depending upon your distribution, this may require you to install both binutils and binutils-development packages (Debian puts bfd.h in binutils-dev, for example). Bin86 ===== To compile the kernel on the IA32 platform, a real-mode assembler and linker is required. These are found in the bin86 package. Gnu C ===== You need at least GCC 2.7.2 to compile the kernel. If you're upgrading from an earlier release, you might as well get GCC 2.7.2.3, the latest stable public release. If you already have GCC 2.7.2 on your system, you don't have to upgrade just so the kernel will work (though feel free to upgrade if you want the gcc bug fixes). Note that the latest compilers (pgcc, gcc 2.95) may do Bad Things while compiling your kernel, particularly if absurd optimizations (like -O9) are used. Caveat emptor. In general, however, gcc-2.7.2.3 and egcs 1.1.2 are known to be stable on x86, while gcc 2.95 and others have not been as thoroughly tested yet. For non x86 platforms consult the platform specific information for recommended compilers. Networking Changes ================== Please read Documentation/networking/routing.txt and Documentation/networking/policy-routing.txt for more information about changes in routing code. OSPF classes have been added, and interface routes are generated automatically. If for some reason you need to override this automatic default routing, you have to specify the complete route specification (netmask, device, etc.) for the kernel to accept it. Consequently, you need to either remove interface routes from your init scripts or add missing information to them if you need to replace the automatic routes. Also note that some routes, such as loopback routes, do not show up in some standard tools. Check in /proc/net/rt_local to verify their presence. To turn on IP forwarding, issue the following command: echo 1 > /proc/sys/net/ipv4/ip_forward Similar procedures are necessary to turn on other features. If something appears broken, check the /proc/sys/net/ipv4/ directory. "1" generally denotes enabled, while "0" generally denotes disabled. If you're experiencing reports of lots of network errors, chances are you need to upgrade to a more recent net-tools that understands the new /proc/net/dev format. This will also provide support for new features like IPv6. As of 2.1.102, the IP firewalling code has been replaced; ipfwadm will no longer work. You need to obtain "ipchains," available from http://netfilter.filewatcher.org/ipchains/ , and use that instead of ipfwadm. To use masq forwarding you will need to obtain "ipmasqadm," available from http://juanjox.kernelnotes.org/ . DHCP clients for 2.0 do not work with the new networking code in the 2.2 kernel. You will need to upgrade your dhcpcd / dhcpclient. In 2.0.x the kernel could be configured to drop source routed IP packets via a compile time configuration option. In 2.2.x, this has been replaced by a sysctl. See Documentation/networking/ip-sysctl.txt for more information. Memory ====== As of 2.1.41, the format of /proc/meminfo has changed. This broke many memory utils, which have to be upgraded. Get the new procps and you should be set. Network File System =================== The NFS code in the kernel is currently being revised, resulting in much-improved performance. Also, amd is being phased out in favor of the much better autofs. You'll also have to get the appropriate utils to use autofs as well as the new NFS utils. In addition, you have the choice of user-land NFS or kernel-level NFS (knfs). Util-linux (including mount) ============================ Among other changes made in the development of Linux kernel 2.2, the 128 meg limit on IA32 swap partition sizes has been eliminated. To use larger swap spaces, you need the new mkswap found in util-linux. You also need to upgrade util-linux to get the latest version of mount. Partitions on 2048-bytes-per-sector media (certain magneto-opticals most prominently) were broken throughout the 2.1 kernel series, meaning that you will be unable to use 2.1-partitioned media on Linux 2.2. This is not a 2.2 bug - 2.2 finally does the right thing! [If you have to interchange media between Linux 2.1 and 2.2, your best bet is to not use partitions at all but create the filesystem on the raw device (e.g. /dev/sda) instead. This is also known as the superfloppy format.] To properly create partitions on 2048-bytes-per-sector media with Linux 2.2, be sure to use no less than fdisk version 2.9i and invoke fdisk using '-b 2048' as an option. RPM === If you run Red Hat Linux or any other distribution that uses RPM, you need to upgrade RPM to a 2.5.x or later version. DOSEMU ====== A new "stable" version of DOSEMU is available for 2.2 kernels. Upgrade to 0.98.6 or later. Loadlin ======= Linux 2.1.22 and later releases use a new method of memory size detection, requiring loadlin users to upgrade to loadlin-1.6a. Sh-utils ======== As of Linux-2.1.26, the Configure script ("make config") has been updated to be POSIX-compliant. As a result, your expr needs to be updated. Use sh-utils 1.16 or later. Parallel Ports ============== As of 2.1.33, parallel port support can now be handled by the parport driver. Be aware that with Plug-and-Play support turned on, your parallel port may no longer be where you expect it; for example, LPT1 (under DOS) was sometimes /dev/lp1 in Linux, but will probably be /dev/lp0 with the new Plug-and-Play driver. If printing breaks with the new driver, try checking your lpd configuration. A good source of more information is the Documentation/parport.txt file included with the kernel. Setserial ========= If you experience random problems (stuck lines, lost characters, etc.) with serial lines under recent kernels, upgrading setserial should help. Syncookies ========== When you build your kernel with Syncookie support (CONFIG_SYN_COOKIES) the syncookie code still defaults to off (unlike the 2.0.30+ behavior). You have to explicitly enable it by issuing the following command: echo 1 > /proc/sys/net/ipv4/tcp_syncookies Bash ==== Old versions of Bash fail to properly handle symlinks, which can cause problems when compiling modules. Upgrade to at least 1.14 to fix this problem. Sysklogd ======== Older versions of sysklogd sometimes segfault under 2.2 kernels. Upgrading to the latest release fixes that problem as well as adding support for new features like system power-off on halt (with appropriate incantations of halt; see the man page) and automatic decoding of kernel oopses. Ncpfs ===== To mount NetWare shares, you'll need to upgrade to a more recent version of the ncpfs utils. SMBfs ===== To mount SMB (Samba / Windows) shares, you'll need to use the smbmount utility included with release 2.0 of Samba. Documentation/filesystems/smbfs.txt has more information about this. Note that smbmount must have been built against 2.2 headers to work with 2.2; if all else fails, recompile it and hope it works ;-). In addition, Mike Warfield has a script and some information at http://www.wittsend.com/mhw/smbmount.html that you will probably find useful. Pcmcia-cs ========= If you use pcmcia cards, you'll need to upgrade the daemon and support utils to the latest release of pcmcia-cs. PPP === Due to changes in the routing code, those of you using PPP networking will need to upgrade your pppd. iBCS ==== A new version of iBCS is necessary for 2.2 kernels. AppleTalk ========= Use the Asun version of netatalk for AppleTalk support, as Umich's version is not compatible with 2.2 kernels. Psmisc ====== fuser, which comes with psmisc, reads /proc/*/fd/* to do its job. Upgrade psmisc if 2.2 changes to /proc broke the version you're using. Tunelp ====== A new version of tunelp is available which will allow you to enable "trustirq" mode, improving printing while using IRQ-driven lp ports. PCI utils ========= Linux PCI utils are available; these include lspci, which displays the detailed information about your system's PCI devices which used to be in /proc/pci, and setpci, which allws you to read and write configuration registers on your PCI devices. Xosview ======= Changes to the /proc interface require a recent xosview. RealPlayer ========== Current releases of Real Player 5.0 depend on a bug in the sound sub-system which is no longer there. Consequently, they don't work. Real is aware of the problem and should have an updated version of the software available shortly. In the mean time, you can always try backing up your copy of rvplayer, and then editing it by: dd if=/dev/zero of=rvplayer bs=1 count=1 seek=657586 conv=notrunc dd if=/dev/zero of=rvplayer bs=1 count=1 seek=665986 conv=notrunc If you're lucky, you'll then have sound.... You may also need to edit it with dd if=/dev/zero of=rvplayer bs=1 count=1 seek=702554 conv=notrunc as well. Alternately, download rpopen from http://onramp.i2k.com/~jeffd/rpopen/ and pre-load it before you run rvplayer (it's a shared object which blocks rvplayer from doing the NONBLOCKing open of /dev/dsp). Quotas ====== If you are using large quotas, you should upgrade your quota utils; newer versions count file sizes in blocks instead of bytes, providing an upper limit of terabytes instead of 4 GB. Ping ==== Most distributed ping clients are buggy. Get an updated one from the iputils package. Patch ===== Really old versions of patch cannot delete files. This can be a problem if you try to upgrade via patches. If, for example, you are unable to compile Linux 2.2, you may have an outdated version of patch. Upgrade, re-patch the kernel, and try again. Process accounting ================== If you use process accounting, you need to recompile the package against 2.2 kernel includes for it to work properly. Furthermore, when you do so, watch out for a quirky configure script. Your generated config.h file needs to #define HAVE_LINUX_ACCT_H but instead it often has /* #undef HAVE_LINUX_ACCT_H */ so be sure to check that when you recompile. ISDN4Linux ========== Older isdn4k-utils versions don't support EXTRAVERSION into kernel version string. A upgrade to isdn4k-utils.v3.1beta7 or later is recomented. Intel IA32 microcode ==================== A driver has been added to allow updating of Intel IA32 microcode, accessible as both a devfs regular file and as a normal (misc) character device. If you are not using devfs you may need to: mkdir /dev/cpu mknod /dev/cpu/microcode c 10 184 chmod 0644 /dev/cpu/microcode as root before you can use this. You'll probably also want to get the user-space microcode_ctl utility to use with this. If you have compiled the driver as a module you may need to add the following line: alias char-major-10-184 microcode to your /etc/modules.conf file. Where to get the files ********************** Binutils ======== The 2.9.1.0.25 release: ftp://ftp.valinux.com/pub/support/hjl/binutils/2.9.1/binutils-2.9.1.0.25.tar.gz Installation notes: ftp://ftp.valinux.com/pub/support/hjl/binutils/2.9.1/release.binutils-2.9.1.0.25 The 2.9.5.0.16 release: ftp://ftp.valinux.com/pub/support/hjl/binutils/binutils-2.9.5.0.16.tar.bz2 Installation notes: ftp://ftp.valinux.com/pub/support/hjl/binutils/release.binutils-2.9.5.0.16 Bin86 ===== The 0.4 release: ftp://metalab.unc.edu/pub/Linux/GCC/bin86-0.4.tar.gz ftp://tsx-11.mit.edu/pub/linux/packages/GCC/bin86-0.4.tar.gz Gnu C ===== The egcs-1.1.2 release: ftp://ftp.valinux.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-glibc.x86.tar.bz2 ftp://ftp.valinux.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-libc5.x86.tar.bz2 ftp://ftp.valinux.com/pub/support/hjl/gcc/egcs-1.1.2/egcs-1.1.2-alpha.x86.tar.bz2 Installation notes: ftp://ftp.valinux.com/pub/support/hjl/gcc/egcs-1.1.2/release.egcs-1.1.2 Gnu C 2.7.2.3 source: ftp://ftp.gnu.org/gnu/gcc/gcc-2.7.2.3.tar.gz ftp://metalab.unc.edu/pub/gnu/gcc-2.7.2.3.tar.gz Linux C Library =============== The (libc5) 5.4.46 release: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/libc-5.4.46.bin.tar.gz ftp://metalab.unc.edu/pub/Linux/GCC/libc-5.4.46.bin.tar.gz Installation notes for 5.4.46: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/release.libc-5.4.46 ftp://metalab.unc.edu/pub/Linux/GCC/release.libc-5.4.46 The (libc6) GNU libc 2.0.7pre6 release: ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.gz ftp://ftp.kernel.org/pub/software/libs/glibc/glibc-2.0.7pre6.tar.bz2 Linux C++ Library ================= The 2.7.2 release: ftp://ftp.gnu.org/gnu/libg++/libg++-2.7.2.tar.gz Dynamic Linker ============== The 1.9.9 release: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.9.9.tar.gz ftp://metalab.unc.edu/pub/Linux/GCC/ld.so-1.9.9.tar.gz Modules utilities ================= The 2.1.121 release: ftp://ftp.kernel.org/pub/linux/kernel/v2.1/modutils-2.1.121.tar.gz Procps utilities ================ The 2.0.3 release: ftp://tsx-11.mit.edu/pub/linux/sources/usr.bin/procps-2.0.3.tar.gz Procinfo utilities ================== The 17 release: ftp://ftp.cistron.nl/pub/people/svm/procinfo-17.tar.gz Psmisc utilities ================ The 17 release: ftp://lrcftp.epfl.ch/pub/linux/local/psmisc/psmisc-17.tar.gz ftp://metalab.unc.edu/pub/Linux/system/status/ps/psmisc-17.tar.gz RPM utilities ============= The 2.5.1 source release: ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1-1.src.rpm ftp://ftp.rpm.org/pub/rpm/dist/rpm-2.5.x/rpm-2.5.1.tar.gz DOSEMU ====== The 0.98.6 release: ftp://ftp.dosemu.org/dosemu/dosemu-0.98.6.tgz Loadlin ======= The 1.6a release: ftp://ftp.suse.com/pub/loadlin/update-1.6a/loadlin.exe.gz ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/update-1.6a/loadlin.exe.gz Sh-utils ======== The 1.16 release: ftp://metalab.unc.edu/pub/gnu/sh-utils-1.16.tar.gz ftp://ftp.gnu.org/gnu/sh-utils/sh-utils-1.16.tar.gz Util-linux ========== The 2.9 release: ftp://ftp.win.tue.nl/pub/linux/utils/util-linux/util-linux-2.9z.tar.gz Autofs ====== The 3.1.3 release: ftp://ftp.kernel.org/pub/linux/daemons/autofs/autofs-3.1.3.tar.gz NFS === The user-land 2.2beta40 release: ftp://ftp.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz ftp://linux.nrao.edu/mirrors/fb0429.mathematik.th-darmstadt.de/pub/linux/okir/dontuse/nfs-server-2.2beta40.tar.gz The kernel-level nfs-utils-0.1.6 release: ftp://nfs.sourceforge.net/pub/nfs/nfs-utils-0.1.6.tar.gz Net-tools ========= The 1.52 release: ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/net-tools-1.52.tar.gz http://www.tazenda.demon.co.uk/phil/net-tools/net-tools-1.52.tar.gz Ypbind ====== The 3.3 release: ftp://ftp.kernel.org/pub/linux/utils/net/NIS/ypbind-3.3.tar.gz Sysklogd ======== The 1.3-31 release: ftp://metalab.unc.edu/pub/Linux/system/daemons/sysklogd-1.3-31.tar.gz Bash ==== The 1.14.7 release: ftp://ftp.gnu.org/gnu/bash/bash-1.14.7.tar.gz The 2.03 release: ftp://ftp.gnu.org/gnu/bash/bash-2.03.tar.gz Ncpfs ===== The 2.2.0 release: ftp://ftp.gwdg.de/pub/linux/misc/ncpfs/ncpfs-2.2.0.tgz SMBfs ===== The 2.0.5a release of Samba: ftp://ftp.samba.org/pub/samba/samba-2.0.5a.tar.gz Pcmcia-cs ========= The 3.0.14 release: ftp://sourceforge.org/pcmcia/pcmcia-cs.3.0.14.tar.gz Setserial ========= The 2.15 release: ftp://tsx-11.mit.edu/pub/linux/sources/sbin/setserial-2.15.tar.gz ftp://metalab.unc.edu/pub/Linux/system/serial/setserial-2.15.tar.gz PPP === The 2.3.10 release: ftp://cs.anu.edu.au/pub/software/ppp/ppp-2.3.10.tar.gz IP Chains ========= The 1.3.9 release: http://netfilter.filewatcher.org/ipchains/ipchains-1.3.9.tar.bz2 http://www.samba.org/netfilter/ipchains/ipchains-1.3.9.tar.bz2 http://netfilter.kernelnotes.org/ipchains/ipchains-1.3.9.tar.bz2 IP Masq Adm =========== The 0.4.2 release: http://juanjox.kernelnotes.org/ipmasqadm-0.4.2.tar.gz DHCP clients ============ The 2.0 ISC dhcpclient release: ftp://ftp.isc.org/isc/dhcp/test/dhcp-2.0.tar.gz The 1.3.18-pl1 PhysTech dhcpcd release: ftp://ftp.phystech.com/pub/dhcpcd-1.3.18-pl1.tar.gz iBCS ==== The 11/05/98 release: ftp://tsx-11.mit.edu/pub/linux/BETA/ibcs2/ibcs-2.1-981105-ALPHA.tar.gz Asun netatalk ============= The 2.1.3 release: ftp://ftp.u.washington.edu/pub/user-supported/asun/netatalk-1.4b2+asun2.1.3.tar.gz Fbset ===== The 2.1 release: http://home.tvd.be/cr26864/Linux/fbdev/ PCI utils ========= The 2.0 release: ftp://atrey.karlin.mff.cuni.cz/pub/linux/pci/pciutils-2.0.tar.gz ftp://metalab.unc.edu/pub/Linux/hardware/pciutils-2.0.tar.gz Tunelp ====== The 0-2.1.131 release: ftp://e-mind.com/pub/linux/tunelp/tunelp-0-2.1.131.tar.gz Xosview ======= The 1.6.1 release: ftp://metalab.unc.edu/pub/Linux/system/status/xstatus/xosview-1.6.1.tar.gz Quota utils =========== The 1.55 release: ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.i386.rpm ftp://ftp.uk.linux.org/pub/linux/sct/quota/quota-1.55-10.src.rpm IP utils ======== The latest releases: ftp://ftp.inr.ac.ru/ip-routing/iproute2-2.2.4-now-ss990824.tar.gz ftp://ftp.inr.ac.ru/ip-routing/iputils-ss990915.tar.gz Patch ===== The 2.5 release: ftp://ftp.gnu.org/gnu/patch/patch-2.5.tar.gz ISDN4Linux ========== The v3.1beta7 release: ftp://ftp.isdn4linux.de/pub/isdn4linux/utils/testing/isdn4k-utils.v3.1beta7.tar.gz Other Info ========== Please remember that most of these utils are available on your favorite local linux mirror. If you can, please get them from a closer site before checking metalab or tsx-11. You may also want to check for updated versions of this software in a package format for the distribution you use. For those of you running Red Hat (or RPM on a different distribution), most of these are available in RPM format. Check around your favorite Red Hat mirror site before installing the non-RPM version. Remember, you might need to use the --force option to get the upgrade to install. ftp://contrib.redhat.com/ , ftp://developer.redhat.com/ , or ftp://updates.redhat.com/ will have almost everything you need, and Red Hat 5.2 ships with most necessary software. Those of you running Debian (or a different distribution that supports .deb packages) can look in the "unstable" and "project/experimental" directories of your favorite Debian mirror. The Debian 2.0 release ships with most packages you need as well. Please send info about any other packages that 2.2 "broke" or about any new features of 2.2 that require extra or new packages for use to Chris Ricker (kaboom@gatech.edu or chris.ricker@genetics.utah.edu). Linux kernel coding style This is a short document describing the preferred coding style for the linux kernel. Coding style is very personal, and I won't _force_ my views on anybody, but this is what goes for anything that I have to be able to maintain, and I'd prefer it for most other things too. Please at least consider the points made here. First off, I'd suggest printing out a copy of the GNU coding standards, and NOT read it. Burn them, it's a great symbolic gesture. Anyway, here goes: Chapter 1: Indentation Tabs are 8 characters, and thus indentations are also 8 characters. There are heretic movements that try to make indentations 4 (or even 2!) characters deep, and that is akin to trying to define the value of PI to be 3. Rationale: The whole idea behind indentation is to clearly define where a block of control starts and ends. Especially when you've been looking at your screen for 20 straight hours, you'll find it a lot easier to see how the indentation works if you have large indentations. Now, some people will claim that having 8-character indentations makes the code move too far to the right, and makes it hard to read on a 80-character terminal screen. The answer to that is that if you need more than 3 levels of indentation, you're screwed anyway, and should fix your program. In short, 8-char indents make things easier to read, and have the added benefit of warning you when you're nesting your functions too deep. Heed that warning. Chapter 2: Placing Braces The other issue that always comes up in C styling is the placement of braces. Unlike the indent size, there are few technical reasons to choose one placement strategy over the other, but the preferred way, as shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first, thusly: if (x is true) { we do y } However, there is one special case, namely functions: they have the opening brace at the beginning of the next line, thus: int function(int x) { body of function } Heretic people all over the world have claimed that this inconsistency is ... well ... inconsistent, but all right-thinking people know that (a) K&R are _right_ and (b) K&R are right. Besides, functions are special anyway (you can't nest them in C). Note that the closing brace is empty on a line of its own, _except_ in the cases where it is followed by a continuation of the same statement, ie a "while" in a do-statement or an "else" in an if-statement, like this: do { body of do-loop } while (condition); and if (x == y) { .. } else if (x > y) { ... } else { .... } Rationale: K&R. Also, note that this brace-placement also minimizes the number of empty (or almost empty) lines, without any loss of readability. Thus, as the supply of new-lines on your screen is not a renewable resource (think 25-line terminal screens here), you have more empty lines to put comments on. Chapter 3: Naming C is a Spartan language, and so should your naming be. Unlike Modula-2 and Pascal programmers, C programmers do not use cute names like ThisVariableIsATemporaryCounter. A C programmer would call that variable "tmp", which is much easier to write, and not the least more difficult to understand. HOWEVER, while mixed-case names are frowned upon, descriptive names for global variables are a must. To call a global function "foo" is a shooting offense. GLOBAL variables (to be used only if you _really_ need them) need to have descriptive names, as do global functions. If you have a function that counts the number of active users, you should call that "count_active_users()" or similar, you should _not_ call it "cntusr()". Encoding the type of a function into the name (so-called Hungarian notation) is brain damaged - the compiler knows the types anyway and can check those, and it only confuses the programmer. No wonder MicroSoft makes buggy programs. LOCAL variable names should be short, and to the point. If you have some random integer loop counter, it should probably be called "i". Calling it "loop_counter" is non-productive, if there is no chance of it being mis-understood. Similarly, "tmp" can be just about any type of variable that is used to hold a temporary value. If you are afraid to mix up your local variable names, you have another problem, which is called the function-growth-hormone-imbalance syndrome. See next chapter. Chapter 4: Functions Functions should be short and sweet, and do just one thing. They should fit on one or two screenfuls of text (the ISO/ANSI screen size is 80x24, as we all know), and do one thing and do that well. The maximum length of a function is inversely proportional to the complexity and indentation level of that function. So, if you have a conceptually simple function that is just one long (but simple) case-statement, where you have to do lots of small things for a lot of different cases, it's OK to have a longer function. However, if you have a complex function, and you suspect that a less-than-gifted first-year high-school student might not even understand what the function is all about, you should adhere to the maximum limits all the more closely. Use helper functions with descriptive names (you can ask the compiler to in-line them if you think it's performance-critical, and it will probably do a better job of it that you would have done). Another measure of the function is the number of local variables. They shouldn't exceed 5-10, or you're doing something wrong. Re-think the function, and split it into smaller pieces. A human brain can generally easily keep track of about 7 different things, anything more and it gets confused. You know you're brilliant, but maybe you'd like to understand what you did 2 weeks from now. Chapter 5: Commenting Comments are good, but there is also a danger of over-commenting. NEVER try to explain HOW your code works in a comment: it's much better to write the code so that the _working_ is obvious, and it's a waste of time to explain badly written code. Generally, you want your comments to tell WHAT your code does, not HOW. Also, try to avoid putting comments inside a function body: if the function is so complex that you need to separately comment parts of it, you should probably go back to chapter 4 for a while. You can make small comments to note or warn about something particularly clever (or ugly), but try to avoid excess. Instead, put the comments at the head of the function, telling people what it does, and possibly WHY it does it. Chapter 6: You've made a mess of it That's OK, we all do. You've probably been told by your long-time Unix user helper that "GNU emacs" automatically formats the C sources for you, and you've noticed that yes, it does do that, but the defaults it uses are less than desirable (in fact, they are worse than random typing - a infinite number of monkeys typing into GNU emacs would never make a good program). So, you can either get rid of GNU emacs, or change it to use saner values. To do the latter, you can stick the following in your .emacs file: (defun linux-c-mode () "C mode with adjusted defaults for use with the Linux kernel." (interactive) (c-mode) (c-set-style "K&R") (setq c-basic-offset 8)) This will define the M-x linux-c-mode command. When hacking on a module, if you put the string -*- linux-c -*- somewhere on the first two lines, this mode will be automatically invoked. Also, you may want to add (setq auto-mode-alist (cons '("/usr/src/linux.*/.*\\.[ch]$" . linux-c-mode) auto-mode-alist)) to your .emacs file if you want to have linux-c-mode switched on automagically when you edit source files under /usr/src/linux. But even if you fail in getting emacs to do sane formatting, not everything is lost: use "indent". Now, again, GNU indent has the same brain dead settings that GNU emacs has, which is why you need to give it a few command line options. However, that's not too bad, because even the makers of GNU indent recognize the authority of K&R (the GNU people aren't evil, they are just severely misguided in this matter), so you just give indent the options "-kr -i8" (stands for "K&R, 8 character indents"). "indent" has a lot of options, and especially when it comes to comment re-formatting you may want to take a look at the manual page. But remember: "indent" is not a fix for bad programming. Computone Intelliport II/Plus Multiport Serial Driver ----------------------------------------------------- Release Notes For Linux Kernel 2.2 and higher. These notes are for the drivers which have already been integrated into the kernel and have been tested on Linux kernels 2.0, 2.2, 2.3, and 2.4. Version: 1.2.14 Date: 11/01/2001 Historical Author: Andrew Manison Primary Author: Doug McNash Support: support@computone.com Fixes and Updates: Mike Warfield This file assumes that you are using the Computone drivers which are integrated into the kernel sources. For updating the drivers or installing drivers into kernels which do not already have Computone drivers, please refer to the instructions in the README.computone file in the driver patch. 1. INTRODUCTION This driver supports the entire family of Intelliport II/Plus controllers with the exception of the MicroChannel controllers. It does not support products previous to the Intelliport II. This driver was developed on the v2.0.x Linux tree and has been tested up to v2.4.14; it will probably not work with earlier v1.X kernels,. 2. QUICK INSTALLATION Hardware - If you have an ISA card, find a free interrupt and io port. List those in use with `cat /proc/interrupts` and `cat /proc/ioports`. Set the card dip switches to a free address. You may need to configure your BIOS to reserve an irq for an ISA card. PCI and EISA parameters are set automagically. Insert card into computer with the power off before or after drivers installation. Note the hardware address from the Computone ISA cards installed into the system. These are required for editing ip2.c or editing /etc/modules.conf, or for specification on the modprobe command line. Note that the /etc/modules.conf file is named /etc/conf.modules with older versions of the module utilities. Software - Module installation: a) Determine free irq/address to use if any (configure BIOS if need be) b) Run "make config" or "make menuconfig" or "make xconfig" Select (m) module for CONFIG_COMPUTONE under character devices. CONFIG_PCI and CONFIG_MODULES also may need to be set. c) Set address on ISA cards then: edit /usr/src/linux/drivers/char/ip2.c if needed or edit /etc/modules.conf if needed (module). or both to match this setting. d) Run "make dep" e) Run "make modules" f) Run "make modules_install" g) Run "/sbin/depmod -a" h) install driver using `modprobe ip2 ` (options listed below) i) run ip2mkdev (either the script below or the binary version) Kernel installation: a) Determine free irq/address to use if any (configure BIOS if need be) b) Run "make config" or "make menuconfig" or "make xconfig" Select (y) kernel for CONFIG_COMPUTONE under character devices. CONFIG_PCI may need to be set if you have PCI bus. c) Set address on ISA cards then: edit /usr/src/linux/drivers/char/ip2.c (Optional - may be specified on kernel command line now) d) Run "make dep" e) Run "make zImage" or whatever target you prefer. f) mv /usr/src/linux/arch/i386/boot/zImage to /boot. g) Add new config for this kernel into /etc/lilo.conf, run "lilo" or copy to a floppy disk and boot from that floppy disk. h) Reboot using this kernel i) run ip2mkdev (either the script below or the binary version) Kernel command line options: When compiling the driver into the kernel, io and irq may be compiled into the driver by editing ip2.c and setting the values for io and irq in the appropriate array. An alternative is to specify a command line parameter to the kernel at boot up. ip2=io0,irq0,io1,irq1,io2,irq2,io3,irq3 Note that this order is very different from the specifications for the modload parameters which have separate IRQ and IO specifiers. The io port also selects PCI (1) and EISA (2) boards. io=0 No board io=1 PCI board io=2 EISA board else ISA board io address You only need to specify the boards which are present. Examples: 2 PCI boards: ip2=1,0,1,0 1 ISA board at 0x310 irq 5: ip2=0x310,5 This can be added to and "append" option in lilo.conf similar to this: append="ip2=1,0,1,0" 3. INSTALLATION Previously, the driver sources were packaged with a set of patch files to update the character drivers' makefile and configuration file, and other kernel source files. A build script (ip2build) was included which applies the patches if needed, and build any utilities needed. What you receive may be a single patch file in conventional kernel patch format build script. That form can also be applied by running patch -p1 < ThePatchFile. Otherwise run ip2build. The driver can be installed as a module (recommended) or built into the kernel. This is selected as for other drivers through the `make config` command from the root of the Linux source tree. If the driver is built into the kernel you will need to edit the file ip2.c to match the boards you are installing. See that file for instructions. If the driver is installed as a module the configuration can also be specified on the modprobe command line as follows: modprobe ip2 irq=irq1,irq2,irq3,irq4 io=addr1,addr2,addr3,addr4 where irqnum is one of the valid Intelliport II interrupts (3,4,5,7,10,11, 12,15) and addr1-4 are the base addresses for up to four controllers. If the irqs are not specified the driver uses the default in ip2.c (which selects polled mode). If no base addresses are specified the defaults in ip2.c are used. If you are autoloading the driver module with kerneld or kmod the base addresses and interrupt number must also be set in ip2.c and recompile or just insert and options line in /etc/modules.conf or both. The options line is equivalent to the command line and takes precidence over what is in ip2.c. /etc/modules.conf sample: options ip2 io=1,0x328 irq=1,10 alias char-major-71 ip2 alias char-major-72 ip2 alias char-major-73 ip2 The equivalent in ip2.c: static int io[IP2_MAX_BOARDS]= { 1, 0x328, 0, 0 }; static int irq[IP2_MAX_BOARDS] = { 1, 10, -1, -1 }; The equivalent for the kernel command line (in lilo.conf): append="ip2=1,1,0x328,10" Note: Both io and irq should be updated to reflect YOUR system. An "io" address of 1 or 2 indicates a PCI or EISA card in the board table. The PCI or EISA irq will be assigned automatically. Specifying an invalid or in-use irq will default the driver into running in polled mode for that card. If all irq entries are 0 then all cards will operate in polled mode. If you select the driver as part of the kernel run : make depend make zlilo (or whatever you do to create a bootable kernel) If you selected a module run : make modules && make modules_install The utility ip2mkdev (see 5 and 7 below) creates all the device nodes required by the driver. For a device to be created it must be configured in the driver and the board must be installed. Only devices corresponding to real IntelliPort II ports are created. With multiple boards and expansion boxes this will leave gaps in the sequence of device names. ip2mkdev uses Linux tty naming conventions: ttyF0 - ttyF255 for normal devices, and cuf0 - cuf255 for callout devices. If you are using devfs, existing devices are automatically created within the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will create symbolic links in /dev from the old conventional names to the newer devfs names as follows: /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3 /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3 /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255 /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255 Only devices for existing ports and boards will be created. IMPORTANT NOTE: The naming convention used for devfs by this driver was changed from 1.2.12 to 1.2.13. The old naming convention was to use ttf/%d for the tty device and cuf/%d for the cua device. That has been changed to conform to an agreed-upon standard of placing all the tty devices under tts. The device names are now tts/F%d for the tty device and cua/F%d for the cua devices. If you were using the older devfs names, you must update for the newer convention. You do not need to run ip2mkdev if you are using devfs and only want to use the devfs native device names. 4. USING THE DRIVERS As noted above, the driver implements the ports in accordance with Linux conventions, and the devices should be interchangeable with the standard serial devices. (This is a key point for problem reporting: please make sure that what you are trying do works on the ttySx/cuax ports first; then tell us what went wrong with the ip2 ports!) Higher speeds can be obtained using the setserial utility which remaps 38,400 bps (extb) to 57,600 bps, 115,200 bps, or a custom speed. Intelliport II installations using the PowerPort expansion module can use the custom speed setting to select the highest speeds: 153,600 bps, 230,400 bps, 307,200 bps, 460,800bps and 921,600 bps. The base for custom baud rate configuration is fixed at 921,600 for cards/expansion modules with ST654's and 115200 for those with Cirrus CD1400's. This corresponds to the maximum bit rates those chips are capable. For example if the baud base is 921600 and the baud divisor is 18 then the custom rate is 921600/18 = 51200 bps. See the setserial man page for complete details. Of course if stty accepts the higher rates now you can use that as well as the standard ioctls(). 5. ip2mkdev and assorted utilities... Several utilities, including the source for a binary ip2mkdev utility are available under .../drivers/char/ip2. These can be build by changing to that directory and typing "make" after the kernel has be built. If you do not wish to compile the binary utilities, the shell script below can be cut out and run as "ip2mkdev" to create the necessary device files. To use the ip2mkdev script, you must have procfs enabled and the proc file system mounted on /proc. You do not need to run ip2mkdev if you are using devfs and only want to use the devfs native device names. 6. DEVFS DEVFS is the DEVice File System available as an add on package for the 2.2.x kernels and available as a configuration option in 2.3.46 and higher. Devfs allows for the automatic creation and management of device names under control of the device drivers themselves. The Devfs namespace is hierarchical and reduces the clutter present in the normal flat /dev namespace. Devfs names and conventional device names may be intermixed. A userspace daemon, devfsd, exists to allow for automatic creation and management of symbolic links from the devfs name space to the conventional names. More details on devfs can be found on the DEVFS home site at or in the file kernel documentation files, .../linux/Documentation/filesystems/devfs/REAME. If you are using devfs, existing devices are automatically created within the devfs name space. Normal devices will be tts/F0 - tts/F255 and callout devices will be cua/F0 - cua/F255. With devfs installed, ip2mkdev will create symbolic links in /dev from the old conventional names to the newer devfs names as follows: /dev/ip2ipl[n] -> /dev/ip2/ipl[n] n = 0 - 3 /dev/ip2stat[n] -> /dev/ip2/stat[n] n = 0 - 3 /dev/ttyF[n] -> /dev/tts/F[n] n = 0 - 255 /dev/cuf[n] -> /dev/cua/F[n] n = 0 - 255 Only devices for existing ports and boards will be created. IMPORTANT NOTE: The naming convention used for devfs by this driver was changed from 1.2.12 to 1.2.13. The old naming convention was to use ttf/%d for the tty device and cuf/%d for the cua device. That has been changed to conform to an agreed-upon standard of placing all the tty devices under tts. The device names are now tts/F%d for the tty device and cua/F%d for the cua devices. If you were using the older devfs names, you must update for the newer convention. You do not need to run ip2mkdev if you are using devfs and only want to use the devfs native device names. 7. NOTES This is a release version of the driver, but it is impossible to test it in all configurations of Linux. If there is any anomalous behaviour that does not match the standard serial port's behaviour please let us know. 8. ip2mkdev shell script Previously, this script was simply attached here. It is now attached as a shar archive to make it easier to extract the script from the documentation. To create the ip2mkdev shell script change to a convenient directory (/tmp works just fine) and run the following command: unshar /usr/src/linux/Documentation/computone.txt (This file) You should now have a file ip2mkdev in your current working directory with permissions set to execute. Running that script with then create the necessary devices for the Computone boards, interfaces, and ports which are present on you system at the time it is run. #!/bin/sh # This is a shell archive (produced by GNU sharutils 4.2.1). # To extract the files from this archive, save it to some FILE, remove # everything before the `!/bin/sh' line above, then type `sh FILE'. # # Made on 2001-10-29 10:32 EST by . # Source directory was `/home2/src/tmp'. # # Existing files will *not* be overwritten unless `-c' is specified. # # This shar contains: # length mode name # ------ ---------- ------------------------------------------ # 4251 -rwxr-xr-x ip2mkdev # save_IFS="${IFS}" IFS="${IFS}:" gettext_dir=FAILED locale_dir=FAILED first_param="$1" for dir in $PATH do if test "$gettext_dir" = FAILED && test -f $dir/gettext \ && ($dir/gettext --version >/dev/null 2>&1) then set `$dir/gettext --version 2>&1` if test "$3" = GNU then gettext_dir=$dir fi fi if test "$locale_dir" = FAILED && test -f $dir/shar \ && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) then locale_dir=`$dir/shar --print-text-domain-dir` fi done IFS="$save_IFS" if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED then echo=echo else TEXTDOMAINDIR=$locale_dir export TEXTDOMAINDIR TEXTDOMAIN=sharutils export TEXTDOMAIN echo="$gettext_dir/gettext -s" fi if touch -am -t 200112312359.59 $$.touch >/dev/null 2>&1 && test ! -f 200112312359.59 -a -f $$.touch; then shar_touch='touch -am -t $1$2$3$4$5$6.$7 "$8"' elif touch -am 123123592001.59 $$.touch >/dev/null 2>&1 && test ! -f 123123592001.59 -a ! -f 123123592001.5 -a -f $$.touch; then shar_touch='touch -am $3$4$5$6$1$2.$7 "$8"' elif touch -am 1231235901 $$.touch >/dev/null 2>&1 && test ! -f 1231235901 -a -f $$.touch; then shar_touch='touch -am $3$4$5$6$2 "$8"' else shar_touch=: echo $echo 'WARNING: not restoring timestamps. Consider getting and' $echo "installing GNU \`touch', distributed in GNU File Utilities..." echo fi rm -f 200112312359.59 123123592001.59 123123592001.5 1231235901 $$.touch # if mkdir _sh17581; then $echo 'x -' 'creating lock directory' else $echo 'failed to create lock directory' exit 1 fi # ============= ip2mkdev ============== if test -f 'ip2mkdev' && test "$first_param" != -c; then $echo 'x -' SKIPPING 'ip2mkdev' '(file already exists)' else $echo 'x -' extracting 'ip2mkdev' '(text)' sed 's/^X//' << 'SHAR_EOF' > 'ip2mkdev' && #!/bin/sh - # # ip2mkdev # # Make or remove devices as needed for Computone Intelliport drivers # # First rule! If the dev file exists and you need it, don't mess # with it. That prevents us from screwing up open ttys, ownership # and permissions on a running system! # # This script will NOT remove devices that no longer exist if their # board or interface box has been removed. If you want to get rid # of them, you can manually do an "rm -f /dev/ttyF* /dev/cuaf*" # before running this script. Running this script will then recreate # all the valid devices. # # Michael H. Warfield # /\/\|=mhw=|\/\/ # mhw@wittsend.com # # Updated 10/29/2000 for version 1.2.13 naming convention # under devfs. /\/\|=mhw=|\/\/ # # Updated 03/09/2000 for devfs support in ip2 drivers. /\/\|=mhw=|\/\/ # X if test -d /dev/ip2 ; then # This is devfs mode... We don't do anything except create symlinks # from the real devices to the old names! X cd /dev X echo "Creating symbolic links to devfs devices" X for i in `ls ip2` ; do X if test ! -L ip2$i ; then X # Remove it incase it wasn't a symlink (old device) X rm -f ip2$i X ln -s ip2/$i ip2$i X fi X done X for i in `( cd tts ; ls F* )` ; do X if test ! -L tty$i ; then X # Remove it incase it wasn't a symlink (old device) X rm -f tty$i X ln -s tts/$i tty$i X fi X done X for i in `( cd cua ; ls F* )` ; do X DEVNUMBER=`expr $i : 'F\(.*\)'` X if test ! -L cuf$DEVNUMBER ; then X # Remove it incase it wasn't a symlink (old device) X rm -f cuf$DEVNUMBER X ln -s cua/$i cuf$DEVNUMBER X fi X done X exit 0 fi X if test ! -f /proc/tty/drivers then X echo "\ Unable to check driver status. Make sure proc file system is mounted." X X exit 255 fi X if test ! -f /proc/tty/driver/ip2 then X echo "\ Unable to locate ip2 proc file. Attempting to load driver" X X if /sbin/insmod ip2 X then X if test ! -f /proc/tty/driver/ip2 X then X echo "\ Unable to locate ip2 proc file after loading driver. Driver initialization failure or driver version error. " X exit 255 X fi X else X echo "Unable to load ip2 driver." X exit 255 X fi fi X # Ok... So we got the driver loaded and we can locate the procfs files. # Next we need our major numbers. X TTYMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/tt/!d' -e 's/.*tt[^ ]*[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers` CUAMAJOR=`sed -e '/^ip2/!d' -e '/\/dev\/cu/!d' -e 's/.*cu[^ ]*[ ]*\([0-9]*\)[ ]*.*/\1/' < /proc/tty/drivers` BRDMAJOR=`sed -e '/^Driver: /!d' -e 's/.*IMajor=\([0-9]*\)[ ]*.*/\1/' < /proc/tty/driver/ip2` X echo "\ TTYMAJOR = $TTYMAJOR CUAMAJOR = $CUAMAJOR BRDMAJOR = $BRDMAJOR " X # Ok... Now we should know our major numbers, if appropriate... # Now we need our boards and start the device loops. X grep '^Board [0-9]:' /proc/tty/driver/ip2 | while read token number type alltherest do X # The test for blank "type" will catch the stats lead-in lines X # if they exist in the file X if test "$type" = "vacant" -o "$type" = "Vacant" -o "$type" = "" X then X continue X fi X X BOARDNO=`expr "$number" : '\([0-9]\):'` X PORTS=`expr "$alltherest" : '.*ports=\([0-9]*\)' | tr ',' ' '` X MINORS=`expr "$alltherest" : '.*minors=\([0-9,]*\)' | tr ',' ' '` X X if test "$BOARDNO" = "" -o "$PORTS" = "" X then # This may be a bug. We should at least get this much information X echo "Unable to process board line" X continue X fi X X if test "$MINORS" = "" X then # Silently skip this one. This board seems to have no boxes X continue X fi X X echo "board $BOARDNO: $type ports = $PORTS; port numbers = $MINORS" X X if test "$BRDMAJOR" != "" X then X BRDMINOR=`expr $BOARDNO \* 4` X STSMINOR=`expr $BRDMINOR + 1` X if test ! -c /dev/ip2ipl$BOARDNO ; then X mknod /dev/ip2ipl$BOARDNO c $BRDMAJOR $BRDMINOR X fi X if test ! -c /dev/ip2stat$BOARDNO ; then X mknod /dev/ip2stat$BOARDNO c $BRDMAJOR $STSMINOR X fi X fi X X if test "$TTYMAJOR" != "" X then X PORTNO=$BOARDBASE X X for PORTNO in $MINORS X do X if test ! -c /dev/ttyF$PORTNO ; then X # We got the harware but no device - make it X mknod /dev/ttyF$PORTNO c $TTYMAJOR $PORTNO X fi X done X fi X X if test "$CUAMAJOR" != "" X then X PORTNO=$BOARDBASE X X for PORTNO in $MINORS X do X if test ! -c /dev/cuf$PORTNO ; then X # We got the harware but no device - make it X mknod /dev/cuf$PORTNO c $CUAMAJOR $PORTNO X fi X done X fi done X Xexit 0 SHAR_EOF (set 20 01 10 29 10 32 01 'ip2mkdev'; eval "$shar_touch") && chmod 0755 'ip2mkdev' || $echo 'restore of' 'ip2mkdev' 'failed' if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then md5sum -c << SHAR_EOF >/dev/null 2>&1 \ || $echo 'ip2mkdev:' 'MD5 check failed' cb5717134509f38bad9fde6b1f79b4a4 ip2mkdev SHAR_EOF else shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'ip2mkdev'`" test 4251 -eq "$shar_count" || $echo 'ip2mkdev:' 'original size' '4251,' 'current size' "$shar_count!" fi fi rm -fr _sh17581 exit 0 # Maintained by Axel Boldt (boldt@math.ucsb.edu) # # This version of the Linux kernel configuration help texts # corresponds to the kernel versions 2.2.x. # # Translations of this file available on the WWW: # # - Japanese, maintained by the JF Project (JF@linux.or.jp), at # http://www.linux.or.jp/JF/JFdocs/Configure.help/ # - Russian, by kaf@linux.nevod.perm.su, at # http://nevod.perm.su/service/linux/doc/kernel/Configure.help # - French, by Pierre Tane (tanep@bigfoot.com), at # http://www.traduc.org/kernelfr # - Spanish, by Carlos Perell Marn (fperllo@ehome.encis.es), at # http://visar.csustan.edu/~carlos/ # - Polish, by Cezar Cichocki (cezar@cs.net.pl), at # http://www.cs.net.pl/~cezar/Kernel # - German, by Jrg Strebel (jstrebel@suse.de) and Karl Eichwalder # (ke@suse.de), at http://www.suse.de/~ke/kernel/Configure.de.help.gz # # Information about what a kernel is, what it does, how to patch and # compile it and much more is contained in the Kernel-HOWTO, available # via FTP (user: anonymous) from metalab.unc.edu in the directory # /pub/Linux/docs/HOWTO. Before you start compiling, make sure that # you have the necessary versions of all programs and libraries # required to compile and run this kernel; they are listed in the file # Documentation/Changes. Make sure to read the toplevel kernel README # file as well. # # Format of this file: descriptionvariablehelp text. If # the question being documented is of type "choice", we list only the # first occurring config variable. The help texts may contain empty # lines, but every non-empty line must be indented two positions. # Order of the help texts does not matter, however, no variable should # be documented twice: if it is, only the first occurrence will be # used by Configure. We try to keep the help texts of related variables # close together. Lines starting with `#' are ignored. To be nice to # menuconfig, limit your line length to 70 characters. Use emacs' # kfill.el to edit and ispell.el to spell check this file or you lose. # # If you add a help text to this file, please try to be as gentle as # possible. Don't use unexplained acronyms and generally write for the # hypothetical ignorant but intelligent user who has just bought a PC, # removed Windows, installed Linux and is now recompiling the kernel # for the first time. Tell them what to do if they're unsure. Technical # information should go in a README in the Documentation directory. # Mention all the relevant READMEs and HOWTOs in the help text. # Repetitions are fine since the help texts are not meant to be read # in sequence. # # All this was shamelessly stolen from several different sources. Many # thanks to all the contributors. Feel free to use these help texts in # your own kernel configuration tools. The texts are copyrighted (c) # 1995-1999 by Axel Boldt and many others and are governed by the GNU # General Public License. Prompt for development and/or incomplete code/drivers CONFIG_EXPERIMENTAL Some of the various things that Linux supports (such as network drivers, filesystems, network protocols, etc.) can be in a state of development where the functionality, stability, or the level of testing is not yet high enough for general use. This is usually known as the "alpha-test" phase amongst developers. If a feature is currently in alpha-test, then the developers usually discourage uninformed widespread use of this feature by the general public to avoid "Why doesn't this work?" type mail messages. However, active testing and use of these systems is welcomed. Just be aware that it may not meet the normal level of reliability or it may fail to work in some special cases. Detailed bug reports from people familiar with the kernel internals are usually welcomed by the developers (before submitting bug reports, please read the documents README, MAINTAINERS, REPORTING_BUGS, Documentation/BUG-HUNTING, and Documentation/oops-tracing.txt in the kernel source). Unless you intend to help test and develop a feature or driver that falls into this category, or you have a situation that requires using these features you should probably say N here, which will cause this configure script to present you with fewer choices. If you say Y here, you will be offered the choice of using features or drivers that are currently considered to be in the alpha-test phase. Symmetric Multi Processing CONFIG_SMP This enables support for systems with more than one CPU. If you have a system with only one CPU, like most personal computers, say N. If you have a system with more than one CPU, say Y. If you say N here, the kernel will run on single and multiprocessor machines, but will use only one CPU of a multiprocessor machine. If you say Y here, the kernel will run on many, but not all, singleprocessor machines. On a singleprocessor machine, the kernel will run faster if you say N here. Note that if you say Y here and choose architecture "586" or "Pentium" under "Processor family", the kernel will not work on 486 architectures. Similarly, multiprocessor kernels for the "PPro" architecture may not work on all Pentium based boards. People using multiprocessor machines who say Y here should also say Y to "Enhanced Real Time Clock Support", below. The "Advanced Power Management" code will be disabled if you say Y here. See also: Documentation/SMP.txt, Documentation/smp.tex, Documentation/smp.txt, and Documentation/IO-APIC.txt. Also see the SMP-FAQ on the WWW at http://www.irisa.fr/prive/mentre/smp-faq/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you don't know what to do here, say N. Kernel math emulation CONFIG_MATH_EMULATION Linux can emulate a math coprocessor (used for floating point operations) if you don't have one. 486DX and Pentium processors have a math coprocessor built in, 486SX and 386 do not, unless you added a 487DX or 387, respectively. (The messages during boot time can give you some hints here ["man dmesg"].) Everyone needs either a coprocessor or this emulation. If you don't have a math coprocessor, you need to say Y here; if you say Y here even though you have a coprocessor, the coprocessor will be used nevertheless. (This behavior can be changed with the kernel command line option "no387", which comes handy if your coprocessor is broken. Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) This means that it is a good idea to say Y here if you intend to use this kernel on different machines. More information about the internals of the Linux math coprocessor emulation can be found in arch/i386/math-emu/README. If you are not sure, say Y; apart from resulting in a 45 KB bigger kernel, it won't hurt. Timer and CPU usage LEDs CONFIG_LEDS If you define this option, the LEDs on your machine will be used to provide useful information about your current system status. If you are compiling a kernel for a NetWinder or EBSA-285, you will be able to select which LEDs are active using the options below. If you are compiling a kernel for the EBSA-110 however, the red LED will simply flash regularly to indicate that the system is still functional. It is still safe to say yes here if you have a CATS system, but the driver will do nothing. Timer LED CONFIG_LEDS_TIMER If you say yes here, one of the system LEDs (the green one on the NetWinder or the amber one on the EBSA285) will flash regularly to indicate that the system is still operational. This is mainly useful to kernel hackers who are debugging unstable kernels. CPU usage LED CONFIG_LEDS_CPU If you say yes here, the red LED will be used to give a good real time indication of CPU usage, by lighting whenever the idle task is not currently executing. Kernel FP software completion CONFIG_MATHEMU This option is required for IEEE compliant floating point arithmetic on the Alpha. The only time you would ever not say Y is to say M in order to debug the code. Say Y unless you know what you are doing. Normal PC floppy disk support CONFIG_BLK_DEV_FD If you want to use the floppy disk drive(s) of your PC under Linux, say Y. Information about this driver, especially important for IBM Thinkpad users, is contained in drivers/block/README.fd. This file also contains the location of the Floppy driver FAQ as well as location of the fdutils package used to configure additional parameters of the driver at run time. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called floppy.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Support for PowerMac floppy CONFIG_MAC_FLOPPY If you have a SWIM-3 (Super Woz Integrated Machine 3; from Apple) floppy controller, say Y here. Most commonly found in PowerMacs. RAM disk support CONFIG_BLK_DEV_RAM Saying Y here will allow you to use a portion of your RAM memory as a block device, so that you can make filesystems on it, read and write to it and do all the other things that you can do with normal block devices (such as hard drives). It is usually used to load and store a copy of a minimal root file system off of a floppy into RAM during the initial install of Linux. Note that the kernel command line option "ramdisk=XX" is now obsolete. For details, read Documentation/ramdisk.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M and read Documentation/modules.txt. The module will be called rd.o. Most normal users won't need the RAM disk functionality, and can thus say N here. Default RAM disk size CONFIG_BLK_DEV_RAM_SIZE The default value is 4096. Only change this if you know what are you doing. If you are using IBM S/390, then set this to 8192. Initial RAM disk (initrd) support CONFIG_BLK_DEV_INITRD The initial RAM disk is a RAM disk that is loaded by the boot loader (loadlin or lilo) and that is mounted as root before the normal boot procedure. It is typically used to load modules needed to mount the "real" root file system, etc. See Documentation/initrd.txt for details. Loop device support CONFIG_BLK_DEV_LOOP Saying Y here will allow you to use a regular file as a block device; you can then create a file system on that block device and mount it just as you would mount other block devices such as hard drive partitions, CDROM drives or floppy drives. This is useful if you want to check an ISO 9660 file system before burning the CD, or if you want to use floppy images without first writing them to floppy. The loop device driver can also be used to "hide" a filesystem in a disk partition, floppy, or regular file, either using encryption (scrambling the data) or steganography (hiding the data in the low bits of, say, a sound file). This is also safe if the file resides on a remote file server. If you want to do this, you will first have to acquire and install a kernel patch from ftp://ftp.replay.com/pub/crypto/linux/all or ftp://verden.pvv.org/pub/linux/kerneli/v2.1/, and then you need to say Y to this option. Note that alternative ways to use encrypted filesystems are provided by the cfs package, which can be gotten via FTP (user: anonymous) from ftp://ftp.replay.com/pub/crypto/disk/, and the newer tcfs package, available at http://tcfs.dia.unisa.it/. You do not need to say Y here if you want to use one of these. However, using cfs requires saying Y to "NFS filesystem support" below while using tcfs requires applying a kernel patch. To use the loop device, you need the losetup utility and a recent version of the mount program, both contained in the util-linux package. The location and current version number of util-linux is contained in the file Documentation/Changes. Note that this loop device has nothing to do with the loopback device used for network connections from the machine to itself. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called loop.o. Most users will answer N here. Network Block Device support CONFIG_BLK_DEV_NBD Saying Y here will allow your computer to be a client for network block devices, i.e. it will be able to use block devices exported by servers (mount filesystems on them etc.). Communication between client and server works over TCP/IP networking, but to the client program this is hidden: it looks like a regular local file access to a block device special file such as /dev/nd0. Network block devices also allows you to run a block-device in userland (making server and client physically the same computer, communicating using the loopback network device). Read Documentation/nbd.txt for more information, especially about where to find the server code, which runs in user space and does not need special kernel support. Note that this has nothing to do with the network file systems NFS or Coda; you can say N here even if you intend to use NFS or Coda. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called nbd.o. If unsure, say N. Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support CONFIG_BLK_DEV_IDE If you say Y here, you will use the full-featured IDE driver to control up to four IDE interfaces, each being able to serve a "master" and a "slave" device, for a total of up to eight IDE disk/cdrom/tape/floppy drives. People with SCSI-only systems can say N here. Useful information about large (>540 MB) IDE disks, multiple interfaces, what to do if IDE devices are not automatically detected, sound card IDE ports, module support, and other topics, is contained in Documentation/ide.txt. For detailed information about hard drives, consult the Disk-HOWTO and the Multi-Disk-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. To fine-tune IDE drive/interface parameters for improved performance, look for the hdparm package at ftp://metalab.unc.edu/pub/Linux/kernel/patches/diskdrives/ If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt and Documentation/ide.txt. The module will be called ide.o. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on an IDE device. If you have one or more IDE drives, say Y or M here. If your system has no IDE drives, or if memory requirements are really tight, you could say N here, and select the "Old hard disk driver" below instead to save about 13 KB of memory in the kernel. Old hard disk (MFM/RLL/IDE) driver CONFIG_BLK_DEV_HD_ONLY There are two drivers for MFM/RLL/IDE hard disks. Most people use the newer enhanced driver, but this old one is still around for two reasons. Some older systems have strange timing problems and seem to work only with the old driver (which itself does not work with some newer systems). The other reason is that the old driver is smaller, since it lacks the enhanced functionality of the new one. This makes it a good choice for systems with very tight memory restrictions, or for systems with only older MFM/RLL/ESDI drives. Choosing the old driver can save 13 KB or so of kernel memory. If you are unsure, then just choose the Enhanced IDE/MFM/RLL driver instead of this one. For more detailed information, read the Disk-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. People with SCSI-only systems can say N here. Use old disk-only driver on primary interface CONFIG_BLK_DEV_HD_IDE There are two drivers for MFM/RLL/IDE disks. Most people use just the new enhanced driver by itself. This option however installs the old hard disk driver to control the primary IDE/disk interface in the system, leaving the new enhanced IDE driver to take care of only the 2nd/3rd/4th IDE interfaces. Doing this will prevent you from having an IDE/ATAPI CDROM or tape drive connected to the primary IDE interface. Choosing this option may be useful for older systems which have MFM/RLL/ESDI controller+drives at the primary port address (0x1f0), along with IDE drives at the secondary/3rd/4th port addresses. Normally, just say N here; you will then use the new driver for all 4 interfaces. People with SCSI-only systems don't need this and can say N here as well. Include IDE/ATA-2 DISK support CONFIG_BLK_DEV_IDEDISK This will include enhanced support for MFM/RLL/IDE hard disks. If you have a MFM/RLL/IDE disk, and there is no special reason to use the old hard disk driver instead, say Y. If you have an SCSI-only system, you can say N here. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-disk.o. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on the IDE disk. If unsure, say Y. Include IDE/ATAPI CDROM support CONFIG_BLK_DEV_IDECD If you have a CDROM drive using the ATAPI protocol, say Y. ATAPI is a newer protocol used by IDE CDROM and TAPE drives, similar to the SCSI protocol. Most new CDROM drives use ATAPI, including the NEC-260, Mitsumi FX400, Sony 55E, and just about all non-SCSI double(2X) or better speed drives. If you say Y here, the CDROM drive will be identified at boot time along with other IDE devices, as "hdb" or "hdc", or something similar (check the boot messages with dmesg). If this is your only CDROM drive, you can say N to all other CDROM options, but be sure to say Y or M to "ISO 9660 CDROM filesystem support". Read the CDROM-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and the file Documentation/cdrom/ide-cd. Note that older versions of lilo (the Linux boot loader) cannot properly deal with IDE/ATAPI CDROMs, so install lilo-16 or higher, available from ftp://metalab.unc.edu/pub/Linux/system/Linux-boot/lilo. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-cd.o. Include IDE/ATAPI TAPE support CONFIG_BLK_DEV_IDETAPE If you have an IDE tape drive using the ATAPI protocol, say Y. ATAPI is a newer protocol used by IDE tape and CDROM drives, similar to the SCSI protocol. If you have an SCSI tape drive however, you can say N here. If you say Y here, the tape drive will be identified at boot time along with other IDE devices, as "hdb" or "hdc", or something similar, and will be mapped to a character device such as "ht0" (check the boot messages with dmesg). Be sure to consult the drivers/block/ide-tape.c and Documentation/ide.txt files for usage information. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-tape.o. Include IDE/ATAPI FLOPPY support CONFIG_BLK_DEV_IDEFLOPPY If you have an IDE floppy drive which uses the ATAPI protocol, answer Y. ATAPI is a newer protocol used by IDE CDROM/tape/floppy drives, similar to the SCSI protocol. The LS-120 and the IDE/ATAPI Iomega ZIP drive are also supported by this driver. (ATAPI PD-CD/CDR drives are not supported by this driver; support for PD-CD/CDR drives is available if you answer Y to "SCSI emulation support", below). If you say Y here, the FLOPPY drive will be identified along with other IDE devices, as "hdb" or "hdc", or something similar (check the boot messages with dmesg). If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ide-floppy.o. SCSI emulation support CONFIG_BLK_DEV_IDESCSI This will provide SCSI host adapter emulation for IDE ATAPI devices, and will allow you to use a SCSI device driver instead of a native ATAPI driver. This is useful if you have an ATAPI device for which no native driver has been written (for example, an ATAPI PD-CD or CDR drive); you can then use this emulation together with an appropriate SCSI device driver. In order to do this, say Y here and to "SCSI support" and "SCSI generic support", below. Note that this option does NOT allow you to attach SCSI devices to a box that doesn't have a SCSI host adapter installed. If both this SCSI emulation and native ATAPI support are compiled into the kernel, the native support will be used. People with SCSI-only systems can say N here. If unsure, say N. CMD640 chipset bugfix/support CONFIG_BLK_DEV_CMD640 The CMD-Technologies CMD640 IDE chip is used on many common 486 and Pentium motherboards, usually in combination with a "Neptune" or "SiS" chipset. Unfortunately, it has a number of rather nasty design flaws that can cause severe data corruption under many common conditions. Say Y here to include code which tries to automatically detect and correct the problems under Linux. This option also enables access to the secondary IDE ports in some CMD640 based systems. This driver will work automatically in PCI based systems (most new systems have PCI slots). But if your system uses VESA local bus (VLB) instead of PCI, you must also supply a kernel boot parameter to enable the CMD640 bugfix/support: "ide0=cmd640_vlb". (Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) The CMD640 chip is also used on add-in cards by Acculogic, and on the "CSA-6400E PCI to IDE controller" that some people have. For details, read Documentation/ide.txt. People with SCSI-only systems should say N here. If unsure, say Y. CMD640 enhanced support CONFIG_BLK_DEV_CMD640_ENHANCED This option includes support for setting/autotuning PIO modes and prefetch on CMD640 IDE interfaces. For details, read Documentation/ide.txt. If you have a CMD640 IDE interface and your BIOS does not already do this for you, then say Y here. Otherwise say N. RZ1000 chipset bugfix/support CONFIG_BLK_DEV_RZ1000 The PC-Technologies RZ1000 IDE chip is used on many common 486 and Pentium motherboards, usually along with the "Neptune" chipset. Unfortunately, it has a rather nasty design flaw that can cause severe data corruption under many conditions. Say Y here to include code which automatically detects and corrects the problem under Linux. This may slow disk throughput by a few percent, but at least things will operate 100% reliably. People with SCSI-only systems should say N here. If unsure, say Y. Generic PCI IDE chipset support CONFIG_BLK_DEV_IDEPCI Say Y here for PCI systems which use IDE drive(s). This option helps the IDE driver to automatically detect and configure all PCI-based IDE interfaces in your system. People with SCSI-only systems should say N here; if unsure say Y. Generic PCI bus-master DMA support CONFIG_BLK_DEV_IDEDMA If your PCI system uses IDE drive(s) (as opposed to SCSI, say) and is capable of bus-master DMA operation (most Pentium PCI systems), you will want to say Y here to reduce CPU overhead. You can then use the "hdparm" utility to enable DMA for drives for which it was not enabled automatically. By default, DMA is not enabled automatically for these drives, but you can change that by saying Y to the following question "Use DMA by default when available". You can get the latest version of the hdparm utility via anonymous FTP from ftp://metalab.unc.edu/pub/Linux/system/hardware/. Read the comments at the beginning of drivers/block/idedma.c and the file Documentation/ide.txt for more information. It is safe to say Y to this question. Winbond SL82c105 support CONFIG_BLK_DEV_SL82C105 If you have a Winbond SL82c105 IDE controller, say Y here to enable special configuration for this chip. This is common on various CHRP motherboards, but could be used elsewhere. If in doubt, say Y. Boot off-board chipsets first support CONFIG_BLK_DEV_OFFBOARD Normally, IDE controllers built into the motherboard (on-board controllers) are assigned to ide0 and ide1 while those on add-in PCI cards (off-board controllers) are relegated to ide2 and ide3. Answering Y here will reverse the situation, with off-board controllers on ide0/1 and on-board controllers on ide2/3. This can improve the usability of some boot managers such as LILO when booting from a drive on an off-board controller. Note that, if you say Y here, the order of the hd* devices will be rearranged which may require modification of fstab and other files. If in doubt, say N. Use DMA by default when available CONFIG_IDEDMA_AUTO Prior to kernel version 2.1.112, Linux used to automatically use DMA for IDE drives and chipsets which support it. Due to concerns about a couple of cases where buggy hardware may have caused damage, the default is now to NOT use DMA automatically. To revert to the previous behaviour, say Y to this question. If you suspect your hardware is at all flakey, say N here. Do NOT email the IDE kernel people regarding this issue! It is normally safe to answer Y to this question unless your motherboard uses a VIA VP2 chipset, in which case you should say N. Other IDE chipset support CONFIG_IDE_CHIPSETS Say Y here if you want to include enhanced support for various IDE interface chipsets used on motherboards and add-on cards. You can then pick your particular IDE chip from among the following options. This enhanced support may be necessary for Linux to be able to access the 3rd/4th drives in some systems. It may also enable setting of higher speed I/O rates to improve system performance with these chipsets. Most of these also require special kernel boot parameters to actually turn on the support at runtime; you can find a list of these in the file Documentation/ide.txt. People with SCSI-only systems can say N here. Generic 4 drives/port support CONFIG_BLK_DEV_4DRIVES Certain older chipsets, including the Tekram 690CD, use a single set of I/O ports at 0x1f0 to control up to four drives, instead of the customary two drives per port. Support for this can be enabled at runtime using the "ide0=four" kernel boot parameter if you say Y here. DTC-2278 support CONFIG_BLK_DEV_DTC2278 This driver is enabled at runtime using the "ide0=dtc2278" kernel boot parameter. It enables support for the secondary IDE interface of the DTC-2278 card, and permits faster I/O speeds to be set as well. See the Documentation/ide.txt and drivers/block/dtc2278.c files for more info. Holtek HT6560B support CONFIG_BLK_DEV_HT6560B This driver is enabled at runtime using the "ide0=ht6560b" kernel boot parameter. It enables support for the secondary IDE interface of the Holtek card, and permits faster I/O speeds to be set as well. See the Documentation/ide.txt and drivers/block/ht6560b.c files for more info. PROMISE DC4030 support (EXPERIMENTAL) CONFIG_BLK_DEV_PDC4030 This driver provides support for the secondary IDE interface and cache of Promise IDE chipsets, e.g. DC4030 and DC5030. This driver is known to incur timeouts/retries during heavy I/O to drives attached to the secondary interface. CDROM and TAPE devices are not supported yet. This driver is enabled at runtime using the "ide0=dc4030" kernel boot parameter. See the Documentation/ide.txt and drivers/block/pdc4030.c files for more info. PS/2 ESDI hard disk support CONFIG_BLK_DEV_PS2 Say Y here if you have a PS/2 machine with a MCA bus and an ESDI hard disk. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ps2esdi.o. ALI M15X3 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_ALI15X3 This driver ensures (U)DMA support for ALI 1543 and 1543C, 1535, 1535D onboard chipsets. Tekram TRM290 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_TRM290 This driver adds support for bus master DMA transfers using the Tekram TRM290 PCI IDE chip. Volunteers are needed for further tweaking and development. Please read the comments at the top of drivers/block/trm290.c. OPTi 82C621 enhanced support (EXPERIMENTAL) CONFIG_BLK_DEV_OPTI621 This is a driver for the OPTi 82C621 EIDE controller. Please read the comments at the top of drivers/block/opti621.c. NS87415 support (EXPERIMENTAL) CONFIG_BLK_DEV_NS87415 This driver adds detection and support for the NS87415 chip (used in SPARC64, among others). Please read the comments at the top of drivers/block/ns87415.c. VIA82C586 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_VIA82C586 This adds initial timing settings for VIA (U)DMA onboard ide controllers that are ATA3 compliant. May work with ATA4 systems, but not tested to date. If you say Y here, you also need to say Y to "Use DMA by default when available", above. If unsure, say N. CMD646 chipset support (EXPERIMENTAL) CONFIG_BLK_DEV_CMD646 Say Y here if you have an IDE controller like this. Cyrix CS5530 MediaGX chipset support CONFIG_BLK_DEV_CS5530 Include support for UDMA on the Cyrix MediaGX 5530 chipset. This will automatically be detected and configured if found. It is safe to say Y to this question. QDI QD6580 support CONFIG_BLK_DEV_QD6580 This driver is enabled at runtime using the "ide0=qd6580" kernel boot parameter. It permits faster I/O speeds to be set. See the files Documentation/ide.txt and drivers/block/qd6580.c for more info. UMC 8672 support CONFIG_BLK_DEV_UMC8672 This driver is enabled at runtime using the "ide0=umc8672" kernel boot parameter. It enables support for the secondary IDE interface of the UMC-8672, and permits faster I/O speeds to be set as well. See the files Documentation/ide.txt and drivers/block/umc8672.c for more info. ALI M14xx support CONFIG_BLK_DEV_ALI14XX This driver is enabled at runtime using the "ide0=ali14xx" kernel boot parameter. It enables support for the secondary IDE interface of the ALI M1439/1443/1445/1487/1489 chipsets, and permits faster I/O speeds to be set as well. See the files Documentation/ide.txt and drivers/block/ali14xx.c for more info. Generic PC I/O port IDE interface support CONFIG_BLK_DEV_PCIDE This is the IDE driver for most generic PC style IDE interfaces. Say Y if you have a PC and want to use IDE devices (hard disks, CD-ROM drives, etc.) that are connected to the builtin IDE interface. Amiga builtin Gayle IDE interface support CONFIG_BLK_DEV_GAYLE This is the IDE driver for the builtin IDE interface on some Amiga models. It supports both the `A1200 style' (used in A600 and A1200) and `A4000 style' (used in A4000 and A4000T) of the Gayle IDE interface. Say Y if you have such an Amiga model and want to use IDE devices (hard disks, CD-ROM drives, etc.) that are connected to the builtin IDE interface. Falcon IDE interface support CONFIG_BLK_DEV_FALCON_IDE This is the IDE driver for the builtin IDE interface on the Atari Falcon. Say Y if you have a Falcon and want to use IDE devices (hard disks, CD-ROM drives, etc.) that are connected to the builtin IDE interface. Amiga Buddha/Catweasel IDE interface support (EXPERIMENTAL) CONFIG_BLK_DEV_BUDDHA This is the IDE driver for the IDE interfaces on the Buddha and Catweasel expansion boards. It supports up to two interfaces on the Buddha and three on the Catweasel. Say Y if you have a Buddha or Catweasel expansion board and want to use IDE devices (hard disks, CD-ROM drives, etc.) that are connected to one of its IDE interfaces. Amiga IDE Doubler support (EXPERIMENTAL) CONFIG_BLK_DEV_IDEDOUBLER This driver provides support for the so called `IDE doublers' (made by various manufacturers, e.g. Eyetech) that can be connected to the builtin IDE interface of some Amiga models. Using such an IDE doubler, you can connect up to four instead of two IDE devices on the Amiga's builtin IDE interface. Note that the normal Amiga Gayle IDE driver may not work correctly if you have an IDE doubler and don't enable this driver! Say Y if you have an IDE doubler. The driver is enabled at kernel runtime using the "ide=doubler" kernel boot parameter. XT hard disk support CONFIG_BLK_DEV_XD Very old 8 bit hard disk controllers used in the IBM XT computer will be supported if you say Y here. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called xd.o. It's pretty unlikely that you have one of these: say N. Mylex DAC960/DAC1100 PCI RAID Controller support CONFIG_BLK_DEV_DAC960 This driver adds support for the Mylex DAC960, AcceleRAID, and eXtremeRAID PCI RAID controllers. See README.DAC960 for further information about this driver. If you want to compile the driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called DAC960.o. 3ware Hardware ATA-RAID support CONFIG_BLK_DEV_3W_XXXX_RAID 3ware is the only hardware ATA-Raid product in Linux to date. This card is 2,4, or 8 channel master mode support only. SCSI support required!!! Please read the comments at the top of drivers/scsi/3w-xxxx.c RapIDE interface support CONFIG_BLK_DEV_IDE_RAPIDE Say Y here if you want to support the Yellowstone RapIDE controller manufactured for use with Acorn computers. WarpEngine SCSI support CONFIG_WARPENGINE_SCSI Support for MacroSystem Development's WarpEngine Amiga SCSI-2 controller. Info at . Builtin PowerMac IDE support CONFIG_BLK_DEV_IDE_PMAC This driver provides support for the built-in IDE controller on most of the recent Apple Power Macintoshes and PowerBooks. If unsure, say Y. PowerMac IDE DMA support CONFIG_BLK_DEV_IDEDMA_PMAC This option allows the driver for the built-in IDE controller on Power Macintoshes and PowerBooks to use DMA (direct memory access) to transfer data to and from memory. Saying Y is safe and improves performance. ICS IDE interface support CONFIG_BLK_DEV_IDE_ICSIDE On Acorn systems, say Y here if you wish to use the ICS IDE interface card. This is not required for ICS partition support. If you are unsure, say N to this. Parallel port IDE device support CONFIG_PARIDE There are many external CD-ROM and disk devices that connect through your computer's parallel port. Most of them are actually IDE devices using a parallel port IDE adapter. This option enables the PARIDE subsystem which contains drivers for many of these external drives. Read linux/Documentation/paride.txt for more information. If you have said Y to the "Parallel-port support" configuration option, you may share a single port between your printer and other parallel port devices. Answer Y to build PARIDE support into your kernel, or M if you would like to build it as a loadable module. If your parallel port support is in a loadable module, you must build PARIDE as a module. If you built PARIDE support into your kernel, you may still build the individual protocol modules and high-level drivers as loadable modules. If you build this support as a module, it will be called paride.o. To use the PARIDE support, you must say Y or M here and also to at least one high-level driver (e.g. "Parallel port IDE disks", "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and to at least one protocol driver (e.g. "ATEN EH-100 protocol", "MicroSolutions backpack protocol", "DataStor Commuter protocol" etc.). Parallel port IDE disks CONFIG_PARIDE_PD This option enables the high-level driver for IDE-type disk devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port IDE driver, otherwise you should answer M to build it as a loadable module. The module will be called pd.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the SyQuest EZ-135, EZ-230 and SparQ drives, the Avatar Shark and the backpack hard drives from MicroSolutions. Parallel port ATAPI CD-ROMs CONFIG_PARIDE_PCD This option enables the high-level driver for ATAPI CD-ROM devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI CD-ROM driver, otherwise you should answer M to build it as a loadable module. The module will be called pcd.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the MicroSolutions backpack CD-ROM drives and the Freecom Power CD. If you have such a CD-ROM drive, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. Parallel port ATAPI disks CONFIG_PARIDE_PF This option enables the high-level driver for ATAPI disk devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI disk driver, otherwise you should answer M to build it as a loadable module. The module will be called pf.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver are the MicroSolutions backpack PD/CD drive and the Imation Superdisk LS-120 drive. Parallel port ATAPI tapes CONFIG_PARIDE_PT This option enables the high-level driver for ATAPI tape devices connected through a parallel port. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port ATAPI disk driver, otherwise you should answer M to build it as a loadable module. The module will be called pt.o. You must also have at least one parallel port protocol driver in your system. Among the devices supported by this driver is the parallel port version of the HP 5GB drive. Parallel port generic ATAPI devices CONFIG_PARIDE_PG This option enables a special high-level driver for generic ATAPI devices connected through a parallel port. The driver allows user programs, such as cdrecord, to send ATAPI commands directly to a device. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the parallel port generic ATAPI driver, otherwise you should answer M to build it as a loadable module. The module will be called pg.o. You must also have at least one parallel port protocol driver in your system. This driver implements an API loosely related to the generic SCSI driver. See /usr/include/linux/pg.h for details. You can obtain the most recent version of cdrecord from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . Versions 1.6.1a3 and later fully support this driver. ATEN EH-100 protocol CONFIG_PARIDE_ATEN This option enables support for the ATEN EH-100 parallel port IDE protocol. This protocol is used in some inexpensive low performance parallel port kits made in Hong Kong. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called aten.o. You must also have a high-level driver for the type of device that you want to support. MicroSolutions backpack protocol CONFIG_PARIDE_BPCK This option enables support for the MicroSolutions backpack parallel port IDE protocol. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called bpck.o. You must also have a high-level driver for the type of device that you want to support. DataStor Commuter protocol CONFIG_PARIDE_COMM This option enables support for the Commuter parallel port IDE protocol from DataStor. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called comm.o. You must also have a high-level driver for the type of device that you want to support. DataStor EP-2000 protocol CONFIG_PARIDE_DSTR This option enables support for the EP-2000 parallel port IDE protocol from DataStor. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called dstr.o. You must also have a high-level driver for the type of device that you want to support. Shuttle EPAT/EPEZ protocol CONFIG_PARIDE_EPAT This option enables support for the EPAT parallel port IDE protocol. EPAT is a parallel port IDE adapter manufactured by Shuttle Technology and widely used in devices from major vendors such as Hewlett-Packard, SyQuest, Imation and Avatar. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called epat.o. You must also have a high-level driver for the type of device that you want to support. Shuttle EPIA protocol CONFIG_PARIDE_EPIA This option enables support for the (obsolete) EPIA parallel port IDE protocol from Shuttle Technology. This adapter can still be found in some no-name kits. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called epia.o. You must also have a high-level driver for the type of device that you want to support. FIT TD-2000 protocol CONFIG_PARIDE_FIT2 This option enables support for the TD-2000 parallel port IDE protocol from Fidelity International Technology. This is a simple (low speed) adapter that is used in some portable hard drives. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called ktti.o. You must also have a high-level driver for the type of device that you want to support. FIT TD-3000 protocol CONFIG_PARIDE_FIT3 This option enables support for the TD-3000 parallel port IDE protocol from Fidelity International Technology. This protocol is used in newer models of their portable disk, CD-ROM and PD/CD devices. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called fit3.o. You must also have a high-level driver for the type of device that you want to support. Freecom IQ ASIC-2 protocol CONFIG_PARIDE_FRIQ This option enables support for version 2 of the Freecom IQ parallel port IDE adapter. This adapter is used by the Maxell Superdisk drive. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called friq.o. You must also have a high-level driver for the type of device that you want to support. FreeCom power protocol CONFIG_PARIDE_FRPW This option enables support for the Freecom power parallel port IDE protocol. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called frpw.o. You must also have a high-level driver for the type of device that you want to support. KingByte KBIC-951A/971A protocols CONFIG_PARIDE_KBIC This option enables support for the KBIC-951A and KBIC-971A parallel port IDE protocols from KingByte Information Corp. KingByte's adapters appear in many no-name portable disk and CD-ROM products, especially in Europe. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called kbic.o. You must also have a high-level driver for the type of device that you want to support. KT PHd protocol CONFIG_PARIDE_KTTI This option enables support for the "PHd" parallel port IDE protocol from KT Technology. This is a simple (low speed) adapter that is used in some 2.5" portable hard drives. If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called ktti.o. You must also have a high-level driver for the type of device that you want to support. OnSpec 90c20 protocol CONFIG_PARIDE_ON20 This option enables support for the (obsolete) 90c20 parallel port IDE protocol from OnSpec (often marketed under the ValuStore brand name). If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called on20.o. You must also have a high-level driver for the type of device that you want to support. OnSpec 90c26 protocol CONFIG_PARIDE_ON26 This option enables support for the 90c26 parallel port IDE protocol from OnSpec Electronics (often marketed under the ValuStore brand name). If you chose to build PARIDE support into your kernel, you may answer Y here to build in the protocol driver, otherwise you should answer M to build it as a loadable module. The module will be called on26.o. You must also have a high-level driver for the type of device that you want to support. Multiple devices driver support CONFIG_BLK_DEV_MD This driver lets you combine several hard disk partitions into one logical block device. This can be used to simply append one partition to another one or to combine several redundant hard disks to a RAID1/4/5 device so as to provide protection against hard disk failures. This is called "Software RAID" since the combining of the partitions is done by the kernel. "Hardware RAID" means that the combining is done by a dedicated controller; if you have such a controller, you do not need to say Y here. More information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If unsure, say N. Linear (append) mode CONFIG_MD_LINEAR If you say Y here, then your multiple devices driver will be able to use the so-called linear mode, i.e. it will combine the hard disk partitions by simply appending one to the other. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called linear.o. If unsure, say Y. RAID-0 (striping) mode CONFIG_MD_STRIPED If you say Y here, then your multiple devices driver will be able to use the so-called raid0 mode, i.e. it will combine the hard disk partitions into one logical device in such a fashion as to fill them up evenly, one chunk here and one chunk there. This will increase the throughput rate if the partitions reside on distinct disks. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called raid0.o. If unsure, say Y. RAID-1 (mirroring) mode CONFIG_MD_MIRRORING A RAID-1 set consists of several disk drives which are exact copies of each other. In the event of a mirror failure, the RAID driver will continue to use the operational mirrors in the set, providing an error free MD (multiple device) to the higher levels of the kernel. In a set with N drives, the available space is the capacity of a single drive, and the set protects against a failure of (N - 1) drives. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-1 set, say Y. This code is also available as a module called raid1.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say Y. RAID-4/RAID-5 mode CONFIG_MD_RAID5 A RAID-5 set of N drives with a capacity of C MB per drive provides the capacity of C * (N - 1) drives, and protects against a failure of a single drive. For a given sector (row) number, (N - 1) drives contain data sectors, and one drive contains the parity protection. For a RAID-4 set, the parity blocks are present on a single drive, while a RAID-5 set distributes the parity across the drives in one of the available parity distribution methods. Information about Software RAID on Linux is contained in the Software-RAID mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. There you will also learn where to get the supporting user space utilities raidtools. If you want to use such a RAID-4/RAID-5 set, say Y. This code is also available as a module called raid5.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say Y. Boot support (linear, striped) CONFIG_MD_BOOT To boot with an initial linear or striped md device you have to answer Y here. For lilo and loadlin options see the file Documentation/md.txt. Support for Deskstation RPC44 CONFIG_DESKSTATION_RPC44 This is a machine with a R4400 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Acer PICA 1 chipset CONFIG_ACER_PICA_61 This is a machine with a R4400 133/150 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Algorithmics P4032 CONFIG_ALGOR_P4032 This is an evaluation board of the British company Algorithmics. The board uses the R4300 and a R5230 CPUs. For more information about this board see http://www.algor.co.uk. Support for BAGET MIPS series CONFIG_BAGET_MIPS This enables support for the Baget, a Russian embedded system. For more details about the Baget see the Linux/MIPS FAQ on . Baget AMD LANCE support CONFIG_BAGETLANCE Say Y to enable kernel support for AMD Lance Ethernet cards on the MIPS-32-based Baget embedded system. This chipset is better known via the NE2100 cards. Support for DECstations CONFIG_DECSTATION This enables support for DEC's MIPS based workstations. For details see the Linux/MIPS FAQ on and the DECstation porting pages on . If you have one of the following DECstation Models you definitely want to choose R4xx0 for the CPU Type: DECstation 5000/50 DECstation 5000/150 DECstation 5000/260 DECsystem 5900/260 otherwise choose R3000. IDE card support CONFIG_BLK_DEV_IDE_CARDS On Acorn systems, enable this if you wish to use an IDE interface expansion card. If you do not or are unsure, say N to this. ICS IDE interface CONFIG_BLK_DEV_IDE_ICS On Acorn systems, enable this if you wish to use the ICS IDE interface card. This is not required for ICS partition support. If you are unsure, say N to this. ADFS partition support CONFIG_BLK_DEV_PART This allows Linux on Acorn systems to determine its partitions in the 'non-ADFS' partition area of the hard disk - usually located after the ADFS partition. You are probably using this system, so you should enable it. Support for Mips Magnum 4000 CONFIG_MIPS_MAGNUM_4000 This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for Olivetti M700 CONFIG_OLIVETTI_M700 This is a machine with a R4000 100 MHz CPU. To compile a Linux kernel that runs on these, say Y here. For details about Linux on the MIPS architecture, check out the Linux/MIPS FAQ on the WWW at http://lena.fnet.fr/ (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Support for SNI RM200 PCI CONFIG_SNI_RM200_PCI The SNI RM200 PCI was a MIPS-based platform manufactured by Siemens Nixdorf Informationssysteme (SNI), parent company of Pyramid Technology and now in turn merged with Fujitsu. Say Y here to support this machine type. MIPS JAZZ onboard SONIC Ethernet support CONFIG_MIPS_JAZZ_SONIC This is the driver for the onboard card of MIPS Magnum 4000, Acer PICA, Olivetti M700-10 and a few other identical OEM systems. MIPS JAZZ FAS216 SCSI support CONFIG_JAZZ_ESP This is the driver for the onboard SCSI host adapter of MIPS Magnum 4000, Acer PICA, Olivetti M700-10 and a few other identical OEM systems. SGI PROM Console Support CONFIG_SGI_PROM_CONSOLE Say Y here to set up the boot console on serial port 0. DZ11 Serial Support CONFIG_DZ DZ11-family serial controllers for VAXstations, including the DC7085, M7814, and M7819. TURBOchannel support CONFIG_TC TurboChannel is a DEC (now Compaq) bus for Alpha and MIPS processors. Documentation on writing device drivers for TurboChannel is available at: . Z85C30 Serial Support CONFIG_ZS Documentation on the Zilog 85C350 serial communications controller is downloadable at . CPU type CONFIG_CPU_R3000 Give the type of your machine's MIPS CPU. For this question, it suffices to give a unique prefix of the option you want to choose. In case of doubt select the R3000 CPU. The kernel will then run on other MIPS machines but with slightly reduced performance. R3000 MIPS Technologies R3000-series processors, including the 3041, 3051, and 3081. R6000 MIPS Technologies R6000-series processors, including the 64474, 64475, 64574 and 64575. R4300 MIPS Technologies R4300-series processors. R4x00 MIPS Technologies R4000-series processors other than 4300, including the 4640, 4650, and 4700. R5000 MIPS Technologies R5000-series processors other than the Nevada. R52xx MIPS Technologies R52x0-series ("Nevada") processors. R8000 MIPS Technologies R8000-series processors. R10000 MIPS Technologies R10000-series processors. R6000 CONFIG_CPU_R6000 MIPS Technologies R6000-series processors, including the 64474, 64475, 64574 and 64575. R4300 CONFIG_CPU_R4300 MIPS Technologies R4300-series processors. R4x00 CONFIG_CPU_R4X00 MIPS Technologies R4000-series processors other than 4300, including the 4640, 4650, and 4700. R5000 CONFIG_CPU_R5000 MIPS Technologies R5000-series processors other than the Nevada. R52xx CONFIG_CPU_NEVADA MIPS Technologies R52x0-series ("Nevada") processors. R8000 CONFIG_CPU_R8000 MIPS Technologies R8000-series processors. R10000 CONFIG_CPU_R10000 MIPS Technologies R10000-series processors. Compile the kernel into the ECOFF object format CONFIG_ECOFF_KERNEL Some machines require a kernel in the ECOFF format. You will have to say Y here for example if you want to use a Mips Magnum 3000 or a DECstation. Generate little endian code CONFIG_CPU_LITTLE_ENDIAN Some MIPS machines can be configured for either little or big endian byte order. These modes require different kernels. Say Y if your machine is little endian, N if it's a big endian machine. Use power LED as a heartbeat CONFIG_HEARTBEAT Use the power-on LED on your machine as a load meter. The exact behavior is platform-dependent, but normally the flash frequency is a hyperbolic function of the 5-minute load average. Kernel support for IRIX binaries CONFIG_BINFMT_IRIX If you say Y here, the kernel will support running of IRIX binaries. You will need IRIX libraries for this to work. Networking support CONFIG_NET Unless you really know what you are doing, you should say Y here. The reason is that some programs need kernel networking support even when running on a stand-alone machine that isn't connected to any other computer. If you are upgrading from an older kernel, you should consider updating your networking tools too because changes in the kernel and the tools often go hand in hand. The tools are contained in the package net-tools, the location and version number of which are given in Documentation/Changes. For a general introduction to Linux networking, it is highly recommended to read the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Socket filtering CONFIG_FILTER The Linux Socket Filter is derived from the Berkeley Packet Filter. If you say Y here, user-space programs can attach a filter to any socket and thereby tell the kernel that it should allow or disallow certain types of data to get through the socket. Linux Socket Filtering works on all socket types except TCP for now. See the text file linux/Documentation/networking/filter.txt for more information. If unsure, say N. Network firewalls CONFIG_FIREWALL A firewall is a computer which protects a local network from the rest of the world: all traffic to and from computers on the local net is inspected by the firewall first, and sometimes blocked or modified. The type of firewall you'll get if you say Y here is called a "packet filter": it can block network traffic based on type, origin and destination. By contrast, "proxy-based" firewalls are more secure but more intrusive and more bothersome to set up; they inspect the network traffic much more closely, modify it and have knowledge about the higher level protocols, which packet filters lack. They also often require changes in the programs running on the local clients. Proxy-based firewalls don't need support by the kernel, but they are often combined with packet filters, which only works if you say Y here. If you want to configure your Linux box as a packet filter firewall for a local network, say Y here. If your local network is TCP/IP based, you will then also have to say Y to "IP: firewalling", below. You also need to say Y here and to "IP firewalling" below in order to be able to use IP masquerading (i.e. local computers can chat with an outside host, but that outside host is made to think that it is talking to the firewall box -- makes the local network completely invisible to the outside world and avoids the need to allocate globally valid IP host addresses for the machines on the local net) and IP transparent proxying (makes the computers on the local network think they're talking to a remote computer, while in reality the traffic is redirected by your Linux firewall to a local proxy server). Make sure to say N to "Fast switching" below if you intend to say Y here. Chances are that you should say Y here for every machine which is run as a router and N for every regular host. If unsure, say N. SYN flood protection CONFIG_SYN_COOKIES Normal TCP/IP networking is open to an attack known as "SYN flooding". This denial-of-service attack prevents legitimate remote users from being able to connect to your computer during an ongoing attack and requires very little work from the attacker, who can operate from anywhere on the Internet. SYN cookies provide protection against this type of attack. If you say Y here, the TCP/IP stack will use a cryptographic challenge protocol known as "SYN cookies" to enable legitimate users to continue to connect, even when your machine is under attack. There is no need for the legitimate users to change their TCP/IP software; SYN cookies work transparently to them. For technical information about SYN cookies, check out ftp://koobera.math.uic.edu/syncookies.html . If you are SYN flooded, the source address reported by the kernel is likely to have been forged by the attacker; it is only reported as an aid in tracing the packets to their actual source and should not be taken as absolute truth. SYN cookies may prevent correct error reporting on clients when the server is really overloaded. If this happens frequently better turn them off. If you say Y here, note that SYN cookies aren't enabled by default; you can enable them by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the command echo 1 >/proc/sys/net/ipv4/tcp_syncookies at boot time after the proc filesystem has been mounted. If unsure, say Y. Sun floppy controller support CONFIG_BLK_DEV_SUNFD This is support for floppy drives on Sun SPARC workstations. Say Y if you have a floppy drive, otherwise N. Easy. Alpha system type CONFIG_ALPHA_GENERIC This is the system type of your hardware. A "generic" kernel will run on any supported Alpha system. However, if you configure a kernel for your specific system, it will be faster and smaller. To find out what type of Alpha system you have, you may want to check out the Linux/Alpha FAQ, accessible on the WWW from http://www.alphalinux.org (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). In summary: Alcor/Alpha-XLT AS 600 Alpha-XL XL-233, XL-266 AlphaBook1 Alpha laptop Avanti AS 200, AS 205, AS 250, AS 255, AS 300, AS 400 Cabriolet AlphaPC64, AlphaPCI64 DP264 DP264 EB164 EB164 21164 evaluation board EB64+ EB64+ 21064 evaluation board EB66 EB66 21066 evaluation board EB66+ EB66+ 21066 evaluation board Jensen DECpc 150, DEC 2000 model 300, DEC 2000 model 500 LX164 AlphaPC164-LX Miata Personal Workstation 433a, 433au, 500a, 500au, 600a, or 600au Mikasa AS 1000 Noname AXPpci33, UDB (Multia) Noritake AS 1000A, AS 600A, AS 800 PC164 AlphaPC164 Rawhide AS 1200, AS 4000, AS 4100 Ruffian RPX164-2, AlphaPC164-UX, AlphaPC164-BX SX164 AlphaPC164-SX Sable AS 2000, AS 2100 Takara Takara If you don't know what to do, choose "generic". # Most of the information on these variants is from # http://www.alphalinux.org/docs/alpha-howto.html Alcor/Alpha-XLT CONFIG_ALPHA_ALCOR For systems using the Digital ALCOR chipset: 5 chips (4, 64-bit data slices (Data Switch, DSW) - 208-pin PQFP and 1 control (Control, I/O Address, CIA) - a 383 pin plastic PGA). It provides a DRAM controller (256-bit memory bus) and a PCI interface. It also does all the work required to support an external Bcache and to maintain memory coherence when a PCI device DMAs into (or out of) memory. Alpha-XL CONFIG_ALPHA_XL XL-233 and XL-266-based Alpha systems. AlphaBook1 CONFIG_ALPHA_BOOK1 Dec AlphaBook1/Burns Alpha-based laptops. Avanti CONFIG_ALPHA_AVANTI Avanti AS 200, AS 205, AS 250, AS 255, AS 300, and AS 400-based Alphas. Info at . Cabriolet CONFIG_ALPHA_CABRIOLET Cabriolet AlphaPC64, AlphaPCI64 systems. Derived from EB64+ but now baby-AT with Flash boot ROM, no on-board SCSI or Ethernet. 3 ISA slots, 4 PCI slots (one pair are on a shared slot), uses plug-in Bcache SIMMs. Requires power supply with 3.3V output. DP264 CONFIG_ALPHA_DP264 Hard Data HD-DP264-based Alpha systems. There is a Hard Data website at . EB164 CONFIG_ALPHA_EB164 EB164 21164 evaluation board from DEC. Uses 21164 and ALCOR. Has ISA and PCI expansion (3 ISA slots, 2 64-bit PCI slots (one is shared with an ISA slot) and 2 32-bit PCI slots. Uses plus-in Bcache SIMMs. I/O sub-system provides SuperI/O (2S, 1P, FD), KBD, MOUSE (PS2 style), RTC/NVRAM. Boot ROM is Flash. PC-AT-sized motherboard. Requires power supply with 3.3V output. EB64+ CONFIG_ALPHA_EB64P Uses 21064 or 21064A and APECs. Has ISA and PCI expansion (3 ISA, 2 PCI, one pair are on a shared slot). Supports 36-bit DRAM SIMs. ISA bus generated by Intel SaturnI/O PCI-ISA bridge. On-board SCSI (NCR 810 on PCI) Ethernet (Digital 21040), KBD, MOUSE (PS2 style), SuperI/O (2S, 1P, FD), RTC/NVRAM. Boot ROM is EPROM. PC-AT size. Runs from standard PC power supply. EB66 CONFIG_ALPHA_EB66 A Digital DS group board. Uses 21066 or 21066A. I/O sub-system is identical to EB64+. Baby PC-AT size. Runs from standard PC power supply. The EB66 schematic was published as a marketing poster advertising the 21066 as "the first microprocessor in the world with embedded PCI" EB66+ CONFIG_ALPHA_EB66P Later variant of the EB66 board. Eiger CONFIG_ALPHA_EIGER Apparently an obscure OEM single-board computer based on the Typhoon/Tsunami chipset family. Information on it is scanty. Jensen CONFIG_ALPHA_JENSEN DEC PC 150 AXP (aka Jensen): This is a very old Digital system - one of the first-generation Alpha systems. A number of these systems seem to be available on the second- hand market. The Jensen is a floor-standing tower system which originally used a 150MHz 21064 It used programmable logic to interface a 486 EISA I/O bridge to the CPU. LX164 CONFIG_ALPHA_LX164 A technical overview of this board is available at . Miata CONFIG_ALPHA_MIATA The Digital PersonalWorkStation (PWS 433a, 433au, 500a, 500au, 600a, or 600au). There is an Installation HOWTO for this hardware at . Mikasa CONFIG_ALPHA_MIKASA AlphaServer 1000-based Alpha systems. Nautilus CONFIG_ALPHA_NAUTILUS Alpha systems based on the AMD 751 & ALI 1543C chipsets. Noname CONFIG_ALPHA_NONAME The AXPpci33 (aka NoName), is based on the EB66 (includes the Multia UDB). This design was produced by Digital's Technical OEM (TOEM) group. It uses the 21066 processor running at 166MHz or 233MHz. It is a baby-AT size, and runs from a standard PC power supply. It has 5 ISA slots and 3 PCI slots (one pair are a shared slot). There are 2 versions, with either PS/2 or large DIN connectors for the keyboard. Noritake CONFIG_ALPHA_NORITAKE AlphaServer 1000A, AlphaServer 600A, and AlphaServer 800-based systems. Rawhide CONFIG_ALPHA_RAWHIDE AlphaServer 1200, AlphaServer 4000 and AlphaServer 4100 machines. See HOWTO at . Ruffian CONFIG_ALPHA_RUFFIAN Samsung APC164UX. There is a page on known problems and workarounds at . Sable CONFIG_ALPHA_SABLE Digital AlphaServer 2000 and 2100-based systems. Takara CONFIG_ALPHA_TAKARA Alpha 11164-based OEM single-board computer. EV5 CPU daughtercard CONFIG_ALPHA_PRIMO Say Y if you have an AS 1000 5/xxx or an AS 1000A 5/xxx. EV5 CPU(s) CONFIG_ALPHA_GAMMA Say Y if you have an AS 2000 5/xxx or an AS 2100 5/xxx. Using SRM as bootloader CONFIG_ALPHA_SRM There are two different types of booting firmware on Alphas: SRM, which is command line driven, and ARC, which uses menus and arrow keys. Details about the Linux/Alpha booting process are contained in the Linux/Alpha FAQ, accessible on the WWW from http://www.alphalinux.org (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). The usual way to load Linux on an Alpha machine is to use MILO (a bootloader that lets you pass command line parameters to the kernel just like lilo does for the x86 architecture) which can be loaded either from ARC or can be installed directly as a permanent firmware replacement from floppy (which requires changing a certain jumper on the motherboard). If you want to do either of these, say N here. If MILO doesn't work on your system (true for Jensen motherboards), you can bypass it altogether and boot Linux directly from an SRM console; say Y here in order to do that. Note that you won't be able to boot from an IDE disk using SRM. If unsure, say N. Use SRM PCI setup CONFIG_ALPHA_SRM_SETUP This option controls whether or not the PCI configuration set up by SRM is modified. If you say Y, the existing PCI configuration will be left intact. Non-standard serial port support CONFIG_SERIAL_NONSTANDARD Say Y here if you have any non-standard serial boards -- boards which aren't supported using the standard "dumb" serial driver. This includes intelligent serial boards such as Cyclades, Digiboards, etc. These are usually used for systems that need many serial ports because they serve many terminals or dial-in connections. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about non-standard serial boards. Most people can say N here. Extended dumb serial driver options CONFIG_SERIAL_EXTENDED If you wish to use any non-standard features of the standard "dumb" driver, say Y here. This includes HUB6 support, shared serial interrupts, special multiport support, support for more than the four COM 1/2/3/4 boards, etc. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about serial driver options. If unsure, say N. Support more than 4 serial ports CONFIG_SERIAL_MANY_PORTS Say Y here if you have dumb serial boards other than the four standard COM 1/2/3/4 ports. This may happen if you have an AST FourPort, Accent Async, Boca (read the Boca mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini), or other custom serial port hardware which acts similar to standard serial port hardware. If you only use the standard COM 1/2/3/4 ports, you can say N here to save some memory. You can also say Y if you have an "intelligent" multiport card such as Cyclades, Digiboards, etc. Support for sharing serial interrupts CONFIG_SERIAL_SHARE_IRQ Some serial boards have hardware support which allows multiple dumb serial ports on the same board to share a single IRQ. To enable support for this in the serial driver, say Y here. Auto detect IRQ on standard ports (unsafe) CONFIG_SERIAL_DETECT_IRQ Say Y here if you want the kernel to try to guess which IRQ to use for your serial port. This is considered unsafe; it is far better to configure the IRQ in a boot script using the setserial command. If unsure, say N. Support special multiport boards CONFIG_SERIAL_MULTIPORT Some multiport serial ports have special ports which are used to signal when there are any serial ports on the board which need servicing. Say Y here to enable the serial driver to take advantage of those special I/O ports. SGI Zilog85C30 serial support CONFIG_SGI_SERIAL If you want to use your SGI's built-in serial ports under Linux, answer Y. SGI Newport Graphics support CONFIG_SGI_NEWPORT_GFX If you have an SGI machine and you want to compile the graphics drivers, say Y here. This will include the code for the /dev/graphics and /dev/gfx drivers into the kernel for supporting virtualized access to your graphics hardware. SGI Newport Console support CONFIG_SGI_NEWPORT_CONSOLE Say Y here if you want the console on the Newport aka XL graphics card of your Indy. Most people say Y here. SGI DS1286 RTC support CONFIG_SGI_DS1286 If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you will get access to the real time clock built into your computer. Every SGI has such a clock built in. It reports status information via the file /proc/rtc and its behaviour is set by various ioctls on /dev/rtc. SGI graphics support CONFIG_SGI_GRAPHICS If you have an SGI machine and you want to compile the graphics drivers, say Y here. This will include the code for the /dev/graphics and /dev/gfx drivers into the kernel for supporting virtualized access to your graphics hardware. Support the Bell Technologies HUB6 card CONFIG_HUB6 Say Y here to enable support in the dumb serial driver to support the HUB6 card. PCI support CONFIG_PCI Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside your box. Other bus systems are ISA, EISA, Microchannel (MCA) or VESA. If you have PCI, say Y, otherwise N. The PCI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, contains valuable information about which PCI hardware does work under Linux and which doesn't. PCI access mode CONFIG_PCI_GOBIOS On PCI systems, the BIOS can be used to detect the PCI devices and determine their configuration. However, some old PCI motherboards have BIOS bugs and may crash if this is done. Also, some embedded PCI-based systems don't have any BIOS at all. Linux can also try to detect the PCI hardware directly without using the BIOS. With this option, you can specify how Linux should detect the PCI devices. If you choose "BIOS", the BIOS will be used, if you choose "Direct", the BIOS won't be used, and if you choose "Any", the kernel will try the direct access method and falls back to the BIOS if that doesn't work. If unsure, go with the default. PCI quirks CONFIG_PCI_QUIRKS If you have a broken BIOS, it may fail to set up the PCI bus in a correct or optimal fashion. Saying Y here will correct that problem. If your BIOS is fine you can say N here for a very slightly smaller kernel. If unsure, say Y. PCI bridge optimization (experimental) CONFIG_PCI_OPTIMIZE This can improve access times for some hardware devices if you have a really broken BIOS and your computer uses a PCI bus system. Say Y if you think it might help, but try turning it off if you experience any problems with the PCI bus. N is the safe answer. Backward-compatible /proc/pci CONFIG_PCI_OLD_PROC Older kernels supported a /proc/pci file containing brief textual descriptions of all PCI devices in the system. Several programs tried to parse this file, so it became almost impossible to add new fields without breaking compatibility. So a new /proc interface to PCI (/proc/bus/pci) has been implemented and the old one is supported for compatibility reasons only; you'll get the old one (in addition to the new one) if you say Y here and to "/proc filesystem support", below. If unsure, say Y. If you say N, you'll only get the new /proc/bus/pci interface. MCA support CONFIG_MCA MicroChannel Architecture is found in some IBM PS/2 machines and laptops. It is a bus system similar to PCI or ISA. See Documentation/mca.txt (and especially the web page given there) before attempting to build an MCA bus kernel. SGI Visual Workstation support CONFIG_VISWS The SGI Visual Workstation series is an IA32-based workstation based on SGI systems chips with some legacy PC hardware attached. Say Y here to create a kernel to run on the SGI 320 or 540. A kernel compiled for the Visual Workstation will not run on other PC boards and vice versa. See Documentation/sgi-visws.txt for more. SGI Visual Workstation framebuffer support CONFIG_FB_SGIVW SGI Visual Workstation support for framebuffer graphics. I2O support CONFIG_I2O The Intelligent Input/Output (I2O) architecture allows hardware drivers to be split into two parts: an operating system specific module called the OSM and an hardware specific module called the HDM. The OSM can talk to a whole range of HDM's, and ideally the HDM's are not OS dependent. This allows for the same HDM driver to be used under different operating systems if the relevant OSM is in place. In order for this to work, you need to have an I2O interface adapter card in your computer. This card contains a special I/O processor (IOP), thus allowing high speeds since the CPU does not have to deal with I/O. If you say Y here, you will get a choice of interface adapter drivers and OSM's with the following questions. This support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. You will get modules called i2o_core.o and i2o_config.o. If unsure, say N. I2O PCI support CONFIG_I2O_PCI Say Y for support of PCI bus I2O interface adapters. Currently this is the only variety supported, so you should say Y. This support is also available as a module called i2o_pci.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. I2O Block OSM CONFIG_I2O_BLOCK Include support for the I2O Block OSM. The Block OSM presents disk and other structured block devices to the operating system. This support is also available as a module called i2o_block.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. I2O SCSI OSM CONFIG_I2O_SCSI Allows direct SCSI access to SCSI devices on a SCSI or FibreChannel I2O controller. You can use both the SCSI and Block OSM together if you wish. This support is also available as a module called i2o_scsi.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. System V IPC CONFIG_SYSVIPC Inter Process Communication is a suite of library functions and system calls which let processes (running programs) synchronize and exchange information. It is generally considered to be a good thing, and some programs won't run unless you say Y here. In particular, if you want to run the DOS emulator dosemu under Linux (read the DOSEMU-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO), you'll need to say Y here. You can find documentation about IPC with "info ipc" and also in section 6.4 of the Linux Programmer's Guide, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/LDP/programmers-guide. Saying Y here enlarges your kernel by about 7 KB. Just say Y. BSD Process Accounting CONFIG_BSD_PROCESS_ACCT If you say Y here, a user level program will be able to instruct the kernel (via a special system call) to write process accounting information to a file: whenever a process exits, information about that process will be appended to the file by the kernel. The information includes things such as creation time, owning user, command name, memory usage, controlling terminal etc. (the complete list is in the struct acct in include/linux/acct.h). It is up to the user level program to do useful things with this information. This is generally a good idea, so say Y. Sysctl support CONFIG_SYSCTL The sysctl interface provides a means of dynamically changing certain kernel parameters and variables on the fly without requiring a recompile of the kernel or reboot of the system. The primary interface consists of a system call, but if the /proc filesystem is enabled, a tree of modifiable sysctl entries will be generated beneath the /proc/sys directory. They are explained in the files in Documentation/sysctl/. Note that enabling this option will enlarge the kernel by at least 8 KB. As it is generally a good thing, you should say Y here unless building a kernel for install/rescue disks or your system is very limited in memory. Kernel support for ELF binaries CONFIG_BINFMT_ELF ELF (Executable and Linkable Format) is a format for libraries and executables used across different architectures and operating systems. Saying Y here will enable your kernel to run ELF binaries and enlarge it by about 2 KB. ELF support under Linux has now all but replaced the traditional Linux a.out formats (QMAGIC and ZMAGIC) because it is portable (this does *not* mean that you will be able to run executables from different architectures or operating systems however) and makes building run-time libraries very easy. Many new executables are distributed solely in ELF format. You definitely want to say Y here. Information about ELF is contained in the ELF HOWTO available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you find that after upgrading from Linux kernel 1.2 and saying Y here, you still can't run any ELF binaries (they just crash), then you'll have to install the newest ELF runtime libraries, including ld.so (check the file Documentation/Changes for location and latest version). If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called binfmt_elf.o. Saying M or N here is dangerous because some crucial programs on your system might be in ELF format. Kernel support for A.OUT binaries CONFIG_BINFMT_AOUT A.out (Assembler.OUTput) is a set of formats for libraries and executables used in the earliest versions of UNIX. Linux used the a.out formats QMAGIC and ZMAGIC until they were replaced with the ELF format. As more and more programs are converted to ELF, the use for a.out will gradually diminish. If you disable this option it will reduce your kernel by one page. This is not much and by itself does not warrant removing support. However its removal is a good idea if you wish to ensure that absolutely none of your programs will use this older executable format. If you don't know what to answer at this point then answer Y. If someone told you "You need a kernel with QMAGIC support" then you'll have to say Y here. You may answer M to compile a.out support as a module and later load the module when you want to use a program or library in a.out format. The module will be called binfmt_aout.o. Saying M or N here is dangerous though, because some crucial programs on your system might still be in A.OUT format. Kernel support for JAVA binaries (obsolete) CONFIG_BINFMT_JAVA JAVA(tm) is an object oriented programming language developed by SUN; JAVA programs are compiled into "JAVA bytecode" binaries which can then be interpreted by run time systems on many different architectures and operating systems. These JAVA binaries are becoming a universal executable format. If you want to execute JAVA binaries, read the Java on Linux HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You will then need to install the run time system contained in the Java Developers Kit (JDK) as described in the HOWTO. This is completely independent of the Linux kernel and you do NOT need to say Y here for this to work. Saying Y here allows you to execute a JAVA bytecode binary just like any other Linux program: by simply typing in its name. (You also need to have the JDK installed for this to work). As more and more Java programs become available, the use for this will gradually increase. You can even execute HTML files containing JAVA applets (little embedded JAVA binaries) if those files start with the string "". If you want to use this, say Y here and read Documentation/java.txt. If you disable this option it will reduce your kernel by about 4 KB. This is not much and by itself does not warrant removing support. However its removal is a good idea if you do not have the JDK installed. You may answer M for module support and later load the module when you install the JDK or find an interesting Java program that you can't live without. The module will be called binfmt_java.o. The complete functionality of this Java support is also provided by the more general option "Kernel support for MISC binaries", below. This option is therefore considered obsolete and you should say N here and Y to "Kernel support for MISC binaries" if you're interested in transparently executing Java programs. Kernel support for Linux/Intel ELF binaries CONFIG_BINFMT_EM86 Say Y here if you want to be able to execute Linux/Intel ELF binaries just like native Alpha binaries on your Alpha machine. For this to work, you need to have the emulator /usr/bin/em86 in place. You may answer M to compile the emulation support as a module and later load the module when you want to use a Linux/Intel binary. The module will be called binfmt_em86.o. If unsure, say Y. Kernel support for MISC binaries CONFIG_BINFMT_MISC If you say Y here, it will be possible to plug wrapper-driven binary formats into the kernel. You will like this especially when you use programs that need an interpreter to run like Java, Python or Emacs-Lisp. It's also useful if you often run DOS executables under the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO). Once you have registered such a binary class with the kernel, you can start one of those programs simply by typing in its name at a shell prompt; Linux will automatically feed it to the correct interpreter. If you say Y here, you won't need "Kernel support for JAVA binaries" (CONFIG_BINFMT_JAVA) or "Kernel support for Linux/Intel ELF binaries" (CONFIG_BINFMT_EM86), as this is a more general solution. You can do other nice things, too. Read Documentation/binfmt_misc.txt to learn how to use this feature, and Documentation/java.txt for information about how to include Java support. You must say Y to "proc filesystem support" (CONFIG_PROC_FS) to use this part of the kernel. You may say M here for module support and later load the module when you have use for it; the module is called binfmt_misc.o. If you don't know what to answer at this point, say Y. Solaris binary emulation CONFIG_SOLARIS_EMUL This is experimental code which will enable you to run (many) Solaris binaries on your SPARC Linux machine. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called solaris.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. SUN SME environment monitoring CONFIG_ENVCTRL Kernel support for temperature and fan monitoring on Sun SME machines. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called envctrl.o. If you want to compile it as a module, say M here and read . Processor family CONFIG_M386 This is the processor type of your CPU. This information is used for optimizing purposes. In order to compile a kernel that can run on all x86 CPU types (albeit not optimally fast), you can specify "386" here. If you specify one of "486" or "586" or "Pentium" or "PPro", then the kernel will not necessarily run on earlier architectures (e.g. a Pentium optimized kernel will run on a PPro, but not necessarily on a i486). Here are the settings recommended for greatest speed: "386" Select this for the AMD/Cyrix/Intel 386DX/DXL/SL/SLC/SX, Cyrix/TI, 486DLC/DLC2 and UMC 486SX-S. Only "386" kernels will run on a 386 class machine. "486/Cx486" Select this for a x486 processor, ether Intel or one of the compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, DX2, and DX4 variants. Also SL/SLC/SLC2/SLC3/SX/SX2, NexGen Nx586 and UMC U5D or U5S. "586/K5/5x86/6x86" Select this for an x586 or x686 processor such as the AMD K5, the Cyrix 5x86 or 6x86, or the Cyrix 6x86MX. This choice does not assume the RDTSC (time stamp counter) instruction. "Pentium/K6/TSC/CyrixIII" Select this for a Pentium Classic, Pentium MMX, AMD K5, K5 and K6-3D, as well as the Cyrix/VIA, CyrixIII with the RDTSC (Read Time Stamp Counter) instruction. "PPro/6X86MX" Select this for the Cyrix/IBM/National Semiconductor 6x86MX/MII and Intel Pentium II/Pentium Pro. If you don't know what to do, choose "386". 486 CONFIG_M486 Select this for a x486 processor, ether Intel or one of the compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. 586/K5/5x86/6x86/6x86MX CONFIG_M586 Select this for an x586 or x686 processor such as the AMD K5, the Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not assume the RDTSC instruction. Pentium Classic CONFIG_M586TSC Select this for a Pentium Classic processor with the RDTSC (Read Time Stamp Counter) instruction for benchmarking. VGA text console CONFIG_VGA_CONSOLE Saying Y here will allow you to use Linux in text mode through a display that complies with the generic VGA standard. Virtually everyone wants that. The program SVGATextMode can be used to utilize SVGA video cards to their full potential in text mode. Download it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/utils/console. Say Y. Video mode selection support CONFIG_VIDEO_SELECT This enables support for text mode selection on kernel startup. If you want to take advantage of some high-resolution text mode your card's BIOS offers, but the traditional Linux utilities like SVGATextMode don't, you can say Y here and set the mode using the "vga=" option from your boot loader (lilo or loadlin) or set "vga=ask" which brings up a video mode menu on kernel startup. Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Read Documentation/svga.txt for more information about the Video mode selection support. If unsure, say N. Support for frame buffer devices (EXPERIMENTAL) CONFIG_FB The frame buffer device provides an abstraction for the graphics hardware. It represents the frame buffer of some video hardware and allows application software to access the graphics hardware through a well-defined interface, so the software doesn't need to know anything about the low-level (hardware register) stuff. Frame buffer devices work identically across the different architectures supported by Linux and make the implementation of application programs easier and more portable; at this point, an X server exists which uses the frame buffer device exclusively. On several non-X86 architectures, the frame buffer device is the only way to use the graphics hardware. The device is accessed through special device nodes, usually located in the /dev directory, i.e. /dev/fb*. You need an utility program called fbset to make full use of frame buffer devices. Please read Documentation/fb/framebuffer.txt and the Framebuffer-HOWTO at http://www.tahallah.demon.co.uk/programming/prog.html for more information. Say Y here and to the driver for your graphics board below if you are compiling a kernel for a non-x86 architecture. If you are compiling for the x86 architecture, you can say Y if you want to play with it, but it is not essential. Please note that running graphical applications that directly touch the hardware (e.g. an accelerated X server) and that are not frame buffer device-aware may cause unexpected results. If unsure, say N. Acorn VIDC support CONFIG_FB_ACORN This is the frame buffer device driver for the Acorn VIDC graphics chipset. Permedia2 support CONFIG_FB_PM2 This is the frame buffer device driver for the Permedia2 AGP frame buffer card from ASK, aka `Graphic Blaster Exxtreme'. There is a product page at . Enable FIFO disconnect feature CONFIG_FB_PM2_FIFO_DISCONNECT Support the Permedia2 FIFOI disconnect feature (see CONFIG_FB_PM2). Generic Permedia2 PCI board support CONFIG_FB_PM2_PCI Say Y to enable support for Permedia2 AGP frame buffer card from 3Dlabs (aka `Graphic Blaster Exxtreme') on the PCI bus. Phase5 CVisionPPC/BVisionPPC support CONFIG_FB_PM2_CVPPC Say Y to enable support for the Amiga Phase 5 CVisionPPC BVisionPPC framebuffer cards. Phase 5 is no longer with us, alas. Apollo frame buffer device CONFIG_FB_APOLLO This is the frame buffer device driver for the monochrome graphics hardware found in some Apollo workstations. Amiga native chipset support CONFIG_FB_AMIGA This is the frame buffer device driver for the builtin graphics chipset found in Amigas. Amiga OCS chipset support CONFIG_FB_AMIGA_OCS This enables support for the original Agnus and Denise video chips, found in the Amiga 1000 and most A500's and A2000's. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga ECS chipset support CONFIG_FB_AMIGA_ECS This enables support for the Enhanced Chip Set, found in later A500's, later A2000's, the A600, the A3000, the A3000T and CDTV. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga AGA chipset support CONFIG_FB_AMIGA_AGA This enables support for the Advanced Graphics Architecture (also known as the AGA or AA) Chip Set, found in the A1200, A4000, A4000T and CD32. If you intend to run Linux on any of these systems, say Y; otherwise say N. Amiga CyberVision support CONFIG_FB_CYBER This enables support for the Cybervision 64 graphics card from Phase5. Please note that its use is not all that intuitive (i.e. if you have any questions, be sure to ask!). Say N unless you have a Cybervision 64 or plan to get one before you next recompile the kernel. Please note that this driver DOES NOT support the Cybervision 64 3D card, as they use incompatible video chips. CyberPro 20x0 support CONFIG_FB_CYBER2000 This enables support for the Integraphics CyberPro 20x0 and 5000 VGA chips used in the Rebel.com Netwinder and other machines. Say Y if you have a NetWinder or a graphics card containing this device, otherwise say N. Amiga CyberVision3D support (EXPERIMENTAL) CONFIG_FB_VIRGE This enables support for the Cybervision 64/3D graphics card from Phase5. Please note that its use is not all that intuitive (i.e. if you have any questions, be sure to ask!). Say N unless you have a Cybervision 64/3D or plan to get one before you next recompile the kernel. Please note that this driver DOES NOT support the older Cybervision 64 card, as they use incompatible video chips. Amiga RetinaZ3 support (EXPERIMENTAL) CONFIG_FB_RETINAZ3 This enables support for the Retina Z3 graphics card. Say N unless you have a Retina Z3 or plan to get one before you next recompile the kernel. Amiga CLgen driver (EXPERIMENTAL) CONFIG_FB_CLGEN This enables support for Cirrus Logic GD542x/543x based boards on Amiga: SD64, Piccolo, Picasso II/II+, Picasso IV, or EGS Spectrum. Say N unless you have such a graphics board or plan to get one before you next recompile the kernel. Apollo support CONFIG_APOLLO Say Y here if you want to run Linux on an MC680x0-based Apollo Domain workstation such as the DN3500. Apollo 3c505 support CONFIG_APOLLO_ELPLUS Say Y or M here if your Apollo has a 3Com 3c505 ISA Ethernet card. If you don't have one made for Apollos, you can use one from a PC, except that your Apollo won't be able to boot from it (because the code in the ROM will be for a PC). Atari native chipset support CONFIG_FB_ATARI This is the frame buffer device driver for the builtin graphics chipset found in Ataris. Amiga FrameMaster II/Rainbow II support CONFIG_FB_FM2 This is the frame buffer device driver for the Amiga FrameMaster card from BSC (exhibited 1992 but not shipped as a CBM product). Open Firmware frame buffer device support CONFIG_FB_OF Say Y if you want support with Open Firmware for your graphics board. S3 Trio frame buffer device support CONFIG_FB_S3TRIO If you have a S3 Trio say Y. Say N for S3 Virge. ATI Mach64 display support CONFIG_FB_ATY This driver supports graphics boards with the ATI Mach64 chips. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called atyfb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. ATI Rage128 display support (EXPERIMENTAL) CONFIG_FB_ATY128 This driver supports graphics boards with the ATI Rage128 chips. Say Y if you have such a graphics board. The driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called aty128fb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. PowerMac "control" frame buffer device support CONFIG_FB_CONTROL This driver supports a frame buffer for the graphics adapter in the Power Macintosh 7300 and others. PowerMac "platinum" frame buffer device support CONFIG_FB_PLATINUM This driver supports a frame buffer for the "platinum" graphics adapter in some Power Macintoshes. PowerMac "valkyrie" frame buffer device support CONFIG_FB_VALKYRIE This driver supports a frame buffer for the "valkyrie" graphics adapter found in some Power Macintoshes, as well as the 580 and 630 series 68k Macintoshes. Chips 65550 display support CONFIG_FB_CT65550 This is the frame buffer device driver for the Chips & Technologies 65550 graphics chip in PowerBooks. Mac frame buffer device CONFIG_FB_MAC This is the a generic frame buffer device driver for the graphics hardware in m68k Macintoshes. It can only use the video mode set by MacOS at boot time. You should probably say Y here. HP300 frame buffer device CONFIG_FB_HP300 This is the frame buffer device driver for the Topcat graphics hardware found in HP300 workstations. TGA frame buffer support CONFIG_FB_TGA This is the frame buffer device driver for generic TGA graphic cards. Say Y if you have one of those. VESA VGA graphics console CONFIG_FB_VESA This is the frame buffer device driver for generic VESA 2.0 compliant graphic cards. The older VESA 1.2 cards are not supported. You will get a boot time penguin logo at no additional cost. Please read Documentation/fb/vesafb.txt. If unsure, say Y. VGA 16-color planar support CONFIG_FBCON_VGA_PLANES This low level frame buffer console driver enable the kernel to use the 16-color planar modes of the old VGA cards where the bits of each pixel are separated into 4 planes. Only answer Y here if you have a (very old) VGA card that isn't VESA 2 compatible. VGA 16-color graphics console CONFIG_FB_VGA16 This is the frame buffer device driver for VGA 16 color graphic cards. Say Y if you have such a card. Select other compiled-in fonts CONFIG_FBCON_FONTS Say Y here if you would like to use fonts other than the default your frame buffer console usually use. Note that the answer to this question won't directly affect the kernel: saying N will just cause the configurator to skip all the questions about foreign fonts. If unsure, say N (the default choices are safe). VGA 8x16 font CONFIG_FONT_8x16 This is the "high resolution" font for the VGA frame buffer (the one provided by the VGA text console 80x25 mode. If unsure, say Y. Support only 8 pixels wide fonts CONFIG_FBCON_FONTWIDTH8_ONLY Answer Y here will make the kernel provide only the 8x8 fonts (these are the less readable). If unsure, say N. Sparc console 8x16 font CONFIG_FONT_SUN8x16 This is the high resolution console font for Sun machines. Say Y. Sparc console 12x22 font (not supported by all drivers) CONFIG_FONT_SUN12x22 This is the high resolution console font for Sun machines with very big letters (like the letters used in the SPARC PROM). If the standard font is unreadable for you, say Y, otherwise say N. VGA 8x8 font CONFIG_FONT_8x8 This is the "high resolution" font for the VGA frame buffer (the one provided by the text console 80x50 (and higher) modes). Note that this is a poor quality font. The VGA 8x16 font is quite a lot more readable. Given the resolution provided by the frame buffer device, answer N here is safe. Mac console 6x11 font (not supported by all drivers) CONFIG_FONT_6x11 Small console font with Macintosh-style high-half glyphs. Some Mac framebuffer drivers don't support this one at all. Pearl (old m68k) console 8x8 font CONFIG_FONT_PEARL_8x8 Small console font with PC-style control-character and high-half glyphs. Acorn console 8x8 font CONFIG_FONT_ACORN_8x8 Small console font with PC-style control characters and high-half glyphs. Backward compatibility mode for Xpmac CONFIG_FB_COMPAT_XPMAC If you use the Xpmac X server (common with mklinux), you'll need to say Y here to use X. You should consider changing to XFree86 which includes a server that supports the frame buffer device directly (XF68_FBDev). Matrox unified accelerated driver CONFIG_FB_MATROX Say Y here if you have Matrox Millennium, Matrox Millennium II, Matrox Mystique, Matrox Mystique 220, Matrox Productiva G100, Matrox Mystique G200, Matrox Millennium G200 or Matrox Marvel G200 video card in your box. At this time, support for the G100, Mystique G200 and Marvel G200 is untested. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called matroxfb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. You can pass several parameters to the driver at boot time or at module load time. The parameters look like "video=matrox:XXX", where the meaning of XXX can be found at the end of the main source file (drivers/video/matroxfb.c). Please see the file Documentation/fb/matroxfb.txt. Matrox Millennium support CONFIG_FB_MATROX_MILLENIUM Say Y here if you have a Matrox Millennium or Matrox Millennium II video card. If you select "Advanced lowlevel driver options" below, you should check 4 bpp packed pixel, 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox Mystique support CONFIG_FB_MATROX_MYSTIQUE Say Y here if you have a Matrox Mystique or Matrox Mystique 220 video card. If you select "Advanced lowlevel driver options" below, you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox G100/G200 support CONFIG_FB_MATROX_G100 Say Y here if you have a Matrox Productiva G100, Matrox Mystique G200, Matrox Marvel G200 or Matrox Millennium G200 video card. If you select "Advanced lowlevel driver options", you should check 8 bpp packed pixel, 16 bpp packed pixel, 24 bpp packed pixel and 32 bpp packed pixel. You can also use font widths different from 8. Matrox unified driver multihead support CONFIG_FB_MATROX_MULTIHEAD Say Y here if you have more than one (supported) Matrox device in your computer and you want to use all of them. If you have only one device, you should say N because the driver compiled with Y is larger and a bit slower, especially on ia32 (ix86). If you said M to "Matrox unified accelerated driver" and N here, you will still be able to use several Matrox devices simultaneously. This is slightly faster but uses 40 KB of kernel memory per Matrox card. You do this by inserting several instances of the module matroxfb.o into the kernel with insmod, supplying the parameter "dev=N" where N is 0, 1, etc. for the different Matrox devices. MDA text console (dual-headed) CONFIG_MDA_CONSOLE Say Y here if you have an old MDA or monochrome Hercules graphics adapter in your system acting as a second head ( = video card). You will then be able to use two monitors with your Linux system. Do not say Y here if your MDA card is the primary card in your system; the normal VGA driver will handle it. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called mdacon.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. SBUS and UPA frame buffers CONFIG_FB_SBUS Say Y if you want support for SBUS or UPA based frame buffer device. Creator/Creator3D support CONFIG_FB_CREATOR This is the frame buffer device driver for the Creator and Creator3D graphics boards. CGsix (GX,TurboGX) support CONFIG_FB_CGSIX This is the frame buffer device driver for the CGsix (GX, TurboGX) frame buffer. BWtwo support CONFIG_FB_BWTWO This is the frame buffer device driver for the BWtwo frame buffer. CGthree support CONFIG_FB_CGTHREE This is the frame buffer device driver for the CGthree frame buffer. CGfourteen (SX) support CONFIG_FB_CGFOURTEEN This is the frame buffer device driver for the CGfourteen frame buffer on Desktop SPARCsystems with the SX graphics option. Leo (ZX) support CONFIG_FB_LEO This is the frame buffer device driver for the SBUS-based Sun ZX (leo) frame buffer cards. IGA 168x display support CONFIG_FB_IGA This is the framebuffer device for the INTERGRAPHICS 1680 and successor frame buffer cards. TCX (SS4/SS5 only) support CONFIG_FB_TCX This is the frame buffer device driver for the TCX 24/8bit frame buffer. IMS Twin Turbo display support CONFIG_FB_IMSTT The IMS Twin Turbo is a PCI-based frame buffer card bundled with many Macintosh and compatible computers. Virtual Frame Buffer support (ONLY FOR TESTING!) CONFIG_FB_VIRTUAL This is a `virtual' frame buffer device. It operates on a chunk of unswapable kernel memory instead of on the memory of a graphics board. This means you cannot see any output sent to this frame buffer device, while it does consume precious memory. The main use of this frame buffer device is testing and debugging the frame buffer subsystem. Do NOT enable it for normal systems! To protect the innocent, it has to be enabled explicitly at boot time using the kernel option `video=vfb:'. This driver is also available as a module ( = code which can be inserted and removed from the running kernel whenever you want). The module will be called vfb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Advanced low level driver options CONFIG_FBCON_ADVANCED The frame buffer console uses character drawing routines that are tailored to the specific organization of pixels in the memory of your graphics hardware. These are called the low level frame buffer console drivers. Note that they are used for text console output only; they are NOT needed for graphical applications. If you say N here, the needed low level drivers are automatically enabled, depending on what frame buffer devices you selected above. This is recommended for most users. If you say Y here, you have more fine-grained control over which low level drivers are enabled. You can e.g. leave out low level drivers for color depths you do not intend to use for text consoles. Low level frame buffer console drivers can be modules ( = code which can be inserted and removed from the running kernel whenever you want). The modules will be called fbcon-*.o. If you want to compile (some of) them as modules, read Documentation/modules.txt. If unsure, say N. Monochrome support CONFIG_FBCON_MFB This is the low level frame buffer console driver for monochrome (2 colors) packed pixels. 2 bpp packed pixels support CONFIG_FBCON_CFB2 This is the low level frame buffer console driver for 2 bits per pixel (4 colors) packed pixels. 4 bpp packed pixels support CONFIG_FBCON_CFB4 This is the low level frame buffer console driver for 4 bits per pixel (16 colors) packed pixels. 8 bpp packed pixels support CONFIG_FBCON_CFB8 This is the low level frame buffer console driver for 8 bits per pixel (256 colors) packed pixels. 16 bpp packed pixels support CONFIG_FBCON_CFB16 This is the low level frame buffer console driver for 15 or 16 bits per pixel (32K or 64K colors, also known as `hicolor') packed pixels. 24 bpp packed pixels support CONFIG_FBCON_CFB24 This is the low level frame buffer console driver for 24 bits per pixel (16M colors, also known as `truecolor') packed pixels. It is NOT for `sparse' 32 bits per pixel mode. 32 bpp packed pixels support CONFIG_FBCON_CFB32 This is the low level frame buffer console driver for 32 bits per pixel (16M colors, also known as `truecolor') sparse packed pixels. Amiga bitplanes support CONFIG_FBCON_AFB This is the low level frame buffer console driver for 1 to 8 bitplanes (2 to 256 colors) on Amiga. Amiga interleaved bitplanes support CONFIG_FBCON_ILBM This is the low level frame buffer console driver for 1 to 8 interleaved bitplanes (2 to 256 colors) on Amiga. Atari interleaved bitplanes (2 planes) support CONFIG_FBCON_IPLAN2P2 This is the low level frame buffer console driver for 2 interleaved bitplanes (4 colors) on Atari. Atari interleaved bitplanes (4 planes) support CONFIG_FBCON_IPLAN2P4 This is the low level frame buffer console driver for 4 interleaved bitplanes (16 colors) on Atari. Atari interleaved bitplanes (8 planes) support CONFIG_FBCON_IPLAN2P8 This is the low level frame buffer console driver for 8 interleaved bitplanes (256 colors) on Atari. Mac variable bpp packed pixels support CONFIG_FBCON_MAC This is the low level frame buffer console driver for 1/2/4/8/16/32 bits per pixel packed pixels on Mac. It supports variable font widths for low resolution screens. VGA characters/attributes support CONFIG_FBCON_VGA This is the low level frame buffer console driver for VGA text mode; it is used if you said Y to "VGA chipset support (text only)" above. Parallel-port support CONFIG_PARPORT If you want to use devices connected to your machine's parallel port (the connector at the computer with 25 holes), e.g. printer, ZIP drive, PLIP link (Parallel Line Internet Protocol is mainly used to create a mini network by connecting the parallel ports of two local machines) etc., then you need to say Y here; please read Documentation/parport.txt and drivers/misc/BUGS-parport. For extensive information about drivers for many devices attaching to the parallel port see http://www.torque.net/linux-pp.html on the WWW (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). It is possible to share a single parallel port among several devices and it is safe to compile all the corresponding drivers into the kernel. If you want to compile parallel port support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called parport.o. If you have more than one parallel port and want to specify which port and IRQ to be used by this driver at module load time, read Documentation/parport.txt. If unsure, say Y. PC-style hardware CONFIG_PARPORT_PC You should say Y here if you have a PC-style parallel port. All IBM PC compatible computers and some Alphas have PC-style parallel ports. This code is also available as a module. If you want to compile it as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called parport_pc.o. If unsure, say Y. Support foreign hardware CONFIG_PARPORT_OTHER Say Y here if you want to be able to load driver modules to support other non-standard types of parallel ports. This causes a performance loss, so most people say N. Sun Ultra/AX-style hardware CONFIG_PARPORT_AX Say Y here if you need support for the parallel port hardware on Sun Ultra/AX machines. This code is also available as a module (say M), called parport_ax.o. If in doubt, saying N is the safe plan. Plug and Play support CONFIG_PNP Plug and Play support allows the kernel to automatically configure some peripheral devices. Say Y to enable PnP. Auto-probe for parallel devices CONFIG_PNP_PARPORT Some IEEE-1284 conforming parallel-port devices can identify themselves when requested. Say Y to enable this feature, or M to compile it as a module (parport_probe.o). If in doubt, say N. Enable loadable module support CONFIG_MODULES Kernel modules are small pieces of compiled code which can be inserted in or removed from the running kernel, using the programs insmod and rmmod. This is described in the file Documentation/modules.txt, including the fact that you have to say "make modules" in order to compile the modules that you chose during kernel configuration. Modules can be device drivers, file systems, binary executable formats, and so on. If you think that you may want to make use of modules with this kernel in the future, then say Y here. If unsure, say Y. Set version information on all symbols for modules CONFIG_MODVERSIONS Usually, modules have to be recompiled whenever you switch to a new kernel. Saying Y here makes it possible, and safe, to use the same modules even after compiling a new kernel; this requires the program modprobe. All the software needed for module support is in the modutils package (check the file Documentation/Changes for location and latest version). NOTE: if you say Y here but don't have the program genksyms (which is also contained in the above mentioned modutils package), then the building of your kernel will fail. If you are going to use modules that are generated from non-kernel sources, you would benefit from this option. Otherwise it's not that important. So, N ought to be a safe bet. Kernel module loader support CONFIG_KMOD Normally when you have selected some drivers and/or filesystems to be created as loadable modules, you also have the responsibility to load the corresponding modules (using the programs insmod or modprobe) before you can use them. If you say Y here however, the kernel will be able to load modules for itself: when a part of the kernel needs a module, it runs modprobe with the appropriate arguments, thereby loading the module if it is available. (This is a replacement for kerneld.) Say Y here and read about configuring it in Documentation/kmod.txt. ARP daemon support (EXPERIMENTAL) CONFIG_ARPD Normally, the kernel maintains an internal cache which maps IP addresses to hardware addresses on the local network, so that Ethernet/Token Ring/ etc. frames are sent to the proper address on the physical networking layer. For small networks having a few hundred directly connected hosts or less, keeping this address resolution (ARP) cache inside the kernel works well. However, maintaining an internal ARP cache does not work well for very large switched networks, and will use a lot of kernel memory if TCP/IP connections are made to many machines on the network. If you say Y here, the kernel's internal ARP cache will never grow to more than 256 entries (the oldest entries are expired in a LIFO manner) and communication will be attempted with the user space ARP daemon arpd. Arpd then answers the address resolution request either from its own cache or by asking the net. This code is experimental. If you do say Y here, you should obtain a copy of arpd from http://www.loran.com/~layes/arpd/index.html, and you should also say Y to "Kernel/User network link driver", below. If unsure, say N. TCP/IP networking CONFIG_INET These are the protocols used on the Internet and on most local Ethernets. It is highly recommended to say Y here (this will enlarge your kernel by about 35 KB), since some programs (e.g. the X window system) use TCP/IP even if your machine is not connected to any other computer. You will get the so-called loopback device which allows you to ping yourself (great fun, that!). For an excellent introduction to Linux networking, please read the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This option is also necessary if you want to use the full power of term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer; for more information, read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html). If you say Y here and also to "/proc filesystem support" and "Sysctl support" below, you can change various aspects of the behavior of the TCP/IP code by writing to the (virtual) files in /proc/sys/net/ipv4/*; the options are explained in the file Documentation/Networking/ip-sysctl.txt. Short answer: say Y. IP: multicasting CONFIG_IP_MULTICAST This is code for addressing several networked computers at once, enlarging your kernel by about 2 kB. You need multicasting if you intend to participate in the MBONE, a high bandwidth network on top of the Internet which carries audio and video broadcasts. More information about the MBONE is on the WWW at http://www.best.com/~prince/techinfo/mbone.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Information about the multicast capabilities of the various network cards is contained in Documentation/networking/multicast.txt. For most people, it's safe to say N. IP: advanced router CONFIG_IP_ADVANCED_ROUTER If you intend to run your Linux box mostly as a router, i.e. as a computer that forwards and redistributes network packets, say Y; you will then be presented with several options that allow more precise control about the routing process. The answer to this question won't directly affect the kernel: answering N will just cause this configure script to skip all the questions about advanced routing. Note that your box can only act as a router if you enable IP forwarding in your kernel; you can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. If you turn on IP forwarding, you will also get the rp_filter, which automatically rejects incoming packets if the routing table entry for their source address doesn't match the network interface they're arriving on. This has security advantages because it prevents the so-called IP spoofing, however it can pose problems if you use asymmetric routing (packets from you to a host take a different path than packets from that host to you) or if you operate a non-routing host which has several IP addresses on different interfaces. To turn rp_filter off use: echo 0 > /proc/sys/net/ipv4/conf//rp_filter or echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter If unsure, say N here. IP: policy routing CONFIG_IP_MULTIPLE_TABLES Normally, a router decides what to do with a received packet based solely on the packet's final destination address. If you say Y here, the Linux router will also be able to take the packet's source address into account. Furthermore, if you also say Y to "IP: use TOS value as routing key" below, the TOS (Type-Of-Service) field of the packet can be used for routing decisions as well. In addition, if you say Y here and to "IP: fast network address translation" below, the router will also be able to modify source and destination addresses of forwarded packets. If you are interested in this, please see the preliminary documentation at http://www.compendium.com.ar/policy-routing.txt and ftp://post.tepkom.ru/pub/vol2/Linux/docs/advanced-routing.tex. You will need supporting software from ftp://ftp.inr.ac.ru/ip-routing/ If unsure, say N. IP: equal cost multipath CONFIG_IP_ROUTE_MULTIPATH Normally, the routing tables specify a single action to be taken in a deterministic manner for a given packet. If you say Y here however, it becomes possible to attach several actions to a packet pattern, in effect specifying several alternative paths to travel for those packets. The router considers all these paths to be of equal "cost" and chooses one of them in a non-deterministic fashion if a matching packet arrives. IP: use TOS value as routing key CONFIG_IP_ROUTE_TOS The header of every IP packet carries a TOS (Type of Service) value with which the packet requests a certain treatment, e.g. low latency (for interactive traffic), high throughput, or high reliability. If you say Y here, you will be able to specify different routes for packets with different TOS values. IP: use FWMARK value as routing key CONFIG_IP_ROUTE_FWMARK If you say Y here, you will be able to specify different routes for packets with different FWMARK ("firewalling mark") values (see ipchains(8), "-m" argument). IP: verbose route monitoring CONFIG_IP_ROUTE_VERBOSE If you say Y here, which is recommended, then the kernel will print verbose messages regarding the routing, for example warnings about received packets which look strange and could be evidence of an attack or a misconfigured system somewhere. The information is handled by the klogd daemon which is responsible for kernel messages ("man klogd"). IP: large routing tables CONFIG_IP_ROUTE_LARGE_TABLES If you have routing zones that grow to more than about 64 entries, you may want to say Y here to speed up the routing process. IP: fast network address translation CONFIG_IP_ROUTE_NAT If you say Y here, your router will be able to modify source and destination addresses of packets that pass through it, in a manner you specify. General information about Network Address Translation can be gotten from the document http://www.csn.tu-chemnitz.de/~mha/linux-ip-nat/diplom/nat.html IP: optimize as router not host CONFIG_IP_ROUTER Some Linux network drivers use a technique called copy and checksum to optimize host performance. For a machine which acts as a router most of the time and is forwarding most packets to another host this is however a loss. If you say Y here, copy and checksum will be switched off. In the future, it may make other changes which optimize for router operation. Note that your box can only act as a router if you enable IP forwarding in your kernel; you can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. You can do that even if you say N here. If unsure, say N here. IP: firewalling CONFIG_IP_FIREWALL If you want to configure your Linux box as a packet filter firewall for a local TCP/IP based network, say Y here. You may want to read the FIREWALL-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also, you will need the ipchains tool (available on the WWW at http://netfilter.kernelnotes.org/ipchains/) to allow selective blocking of Internet traffic based on type, origin and destination. Note that the Linux firewall code has changed and the old program called ipfwadm won't work anymore. Please read the IPCHAINS-HOWTO. The type of firewall provided by ipchains and this kernel support is called a "packet filter". The other type of firewall, a "proxy-based" one, is more secure but more intrusive and more bothersome to set up; it inspects the network traffic much more closely, modifies it and has knowledge about the higher level protocols, which a packet filter lacks. Moreover, proxy-based firewalls often require changes to the programs running on the local clients. Proxy-based firewalls don't need support by the kernel, but they are often combined with a packet filter, which only works if you say Y here. The firewalling code will only work if IP forwarding is enabled in your kernel. You can do that by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the line echo "1" > /proc/sys/net/ipv4/ip_forward at boot time after the /proc filesystem has been mounted. You need to say Y to "IP firewalling" in order to be able to use IP masquerading (masquerading means that local computers can chat with an outside host, but that outside host is made to think that it is talking to the firewall box -- makes the local network completely invisible to the outside world and avoids the need to allocate globally valid IP host addresses for the machines on the local net) and IP packet logging and accounting (keeping track of what is using all your network bandwidth) and IP transparent proxying (makes the computers on the local network think they're talking to a remote computer, while in reality the traffic is redirected by your Linux firewall to a local proxy server). If in doubt, say N here. IP: firewall packet netlink device CONFIG_IP_FIREWALL_NETLINK If you say Y here, you can use the ipchains tool to copy all or part of any packet you specify that hits your Linux firewall to optional user space monitoring software that can then look for attacks and take actions such as paging the administrator of the site. To use this, you need to create a character special file under /dev with major number 36 and minor number 3 using mknod ("man mknod"), and you need (to write) a program that reads from that device and takes appropriate action. IP: kernel level autoconfiguration CONFIG_IP_PNP This enables automatic configuration of IP addresses of devices and of the routing table during kernel boot, based on either information supplied at the kernel command line or by BOOTP or RARP protocols. You need to say Y only for diskless machines requiring network access to boot (in which case you want to say Y to "Root file system on NFS" as well), because all other machines configure the network in their startup scripts. BOOTP support CONFIG_IP_PNP_BOOTP If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS and you want the IP address of your computer to be discovered automatically at boot time using the BOOTP protocol (a special protocol designed for doing this job), say Y here. In case the boot ROM of your network card was designed for booting Linux and does BOOTP itself, providing all necessary information on the kernel command line, you can say N here. If unsure, say Y. Note that if you want to use BOOTP, a BOOTP server must be operating on your network. Read Documentation/nfsroot.txt for details. DHCP support CONFIG_IP_PNP_DHCP If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS and you want the IP address of your computer to be discovered automatically at boot time using the DHCP protocol (a special protocol designed for doing this job), say Y here. In case the boot ROM of your network card was designed for booting Linux and does DHCP itself, providing all necessary information on the kernel command line, you can say N here. If unsure, say Y. Note that if you want to use DHCP, a DHCP server must be operating on your network. Read Documentation/nfsroot.txt for details. RARP support CONFIG_IP_PNP_RARP If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS and you want the IP address of your computer to be discovered automatically at boot time using the RARP protocol (an older protocol which is being obsoleted by BOOTP and DHCP), say Y here. Note that if you want to use RARP, a RARP server must be operating on your network. Read Documentation/nfsroot.txt for details. IP: tunneling CONFIG_NET_IPIP Tunneling means encapsulating data of one protocol type within another protocol and sending it over a channel that understands the encapsulating protocol. This particular tunneling driver implements encapsulation of IP within IP, which sounds kind of pointless, but can be useful if you want to make your (or some other) machine appear on a different network than it physically is, or to use mobile-IP facilities (allowing laptops to seamlessly move between networks without changing their IP addresses; check out http://anchor.cs.binghamton.edu/~mobileip/LJ/index.html). Saying Y to this option will produce two modules ( = code which can be inserted in and removed from the running kernel whenever you want). Most people won't need this and can say N. IP: GRE tunnels over IP CONFIG_NET_IPGRE Tunneling means encapsulating data of one protocol type within another protocol and sending it over a channel that understands the encapsulating protocol. This particular tunneling driver implements GRE (Generic Routing Encapsulation) and at this time allows encapsulating of IPv4 or IPv6 over existing IPv4 infrastructure. This driver is useful if the other endpoint is a Cisco router: Cisco likes GRE much better than the other Linux tunneling driver ("IP: tunneling" above). In addition, GRE allows multicast redistribution through the tunnel. IP: broadcast GRE over IP CONFIG_NET_IPGRE_BROADCAST One application of GRE/IP is to construct a broadcast WAN (Wide Area Network), which looks like a normal Ethernet LAN (Local Area Network), but can be distributed all over the Internet. If you want to do that, say Y here and to "IP: multicast routing" below. IP: transparent proxying CONFIG_IP_TRANSPARENT_PROXY This enables your Linux firewall to transparently redirect any network traffic originating from the local network and destined for a remote host to a local server, called a "transparent proxy server". This makes the local computers think they are talking to the remote end, while in fact they are connected to the local proxy. Redirection is activated by defining special input firewall rules (using the ipchains utility) and/or by doing an appropriate bind() system call. IP: masquerading CONFIG_IP_MASQUERADE If one of the computers on your local network for which your Linux box acts as a firewall wants to send something to the outside, your box can "masquerade" as that computer, i.e. it forwards the traffic to the intended outside destination, but makes it look like it came from the firewall box itself. It works both ways: if the outside host replies, the Linux firewall will silently forward the traffic to the corresponding local computer. This way, the computers on your local net are completely invisible to the outside world, even though they can reach the outside and can receive replies. This makes it possible to have the computers on the local network participate on the Internet even if they don't have officially registered IP addresses. (This last problem can also be solved by connecting the Linux box to the Internet using SLiRP [SLiRP is a SLIP/PPP emulator that works if you have a regular dial up shell account on some UNIX computer; get it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/ ].) The IP masquerading code will only work if IP forwarding is enabled in your kernel; you can do this by saying Y to "/proc filesystem support" and "Sysctl support" below and then executing a line like echo "1" > /proc/sys/net/ipv4/ip_forward from a boot time script after the /proc filesystem has been mounted. Enabling masquerading automagically enables ip_always_defrag too. Details on how to set things up are contained in the IP Masquerade mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini; there's also some information on the WWW at http://www.tor.shaw.wave.ca/~ambrose/kernel21.html. If you say Y here, then the modules ip_masq_ftp.o (for ftp file transfers), ip_masq_irc.o (for irc chats), ip_masq_quake.o (you guessed it), ip_masq_vdolive.o (for VDOLive video connections), ip_masq_cuseeme.o (for CU-SeeMe broadcasts) and ip_masq_raudio.o (for RealAudio downloads) will automatically be compiled. They are needed to make masquerading for these protocols work. Modules are pieces of code which can be inserted in and removed from the running kernel whenever you want; read Documentation/modules.txt for details. IP: UDP masquerading loose checking CONFIG_IP_MASQUERADE_UDP_LOOSE Whether UDP masquerading does address checking in a loose fashion. If you say Y here, then UDP masqueraded connections will allow any external system to be connect back through the firewall to the port on the internal machine. However it will allow the more efficient use of masqueraded ports, and may be required for some gaming uses. You should only say Y here if you understand the consequences since it will open your internal network to external probing and potential attacks. In all other cases choose N IP: ICMP masquerading CONFIG_IP_MASQUERADE_ICMP The basic masquerade code described for "IP: masquerading" above only handles TCP or UDP packets (and ICMP errors for existing connections). This option adds additional support for masquerading ICMP packets, such as ping or the probes used by the Windows 95 tracert program. If you want this, say Y. IP: masquerading special modules support CONFIG_IP_MASQUERADE_MOD This provides support for special modules that can modify the rewriting rules used when masquerading. Please note that this feature adds a little overhead in the input packet processing chain. Examples of such modules are ipautofw (allowing the masquerading of protocols which don't have their own protocol helpers) and port forwarding (making an incoming port of a local computer visible through the masquerading host). You will need the user space program "ipmasqadm" to use these additional modules; you can download it from http://juanjox.kernelnotes.org/ All this additional code is still under development and so is currently marked EXPERIMENTAL. If you want to try, for example, PORT FORWARDING, say Y. IP: ipautofw masquerade support (Experimental) CONFIG_IP_MASQUERADE_IPAUTOFW ipautofw is a program which allows the masquerading of protocols which do not (as yet) have their own protocol helpers. Information and source for ipautofw is available via FTP (user: anonymous) from ftp://ftp.netis.com/pub/members/rlynch/ You will also need the ipmasqadm tool available from http://juanjox.kernelnotes.org/ . The ipautofw code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_autofw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: ipportfw masquerade support CONFIG_IP_MASQUERADE_IPPORTFW Port Forwarding is an addition to IP Masquerading which allows some forwarding of packets from outside to inside a firewall on given ports. This could be useful if, for example, you want to run a web server behind the firewall or masquerading host and that web server should be accessible from the outside world. An external client sends a request to port 80 of the firewall, the firewall forwards this request to the web server, the web server handles the request and the results are sent through the firewall to the original client. The client thinks that the firewall machine itself is running the web server. This can also be used for load balancing if you have a farm of identical web servers behind the firewall. Information about this feature is available from http://www.monmouth.demon.co.uk/ipsubs/portforwarding.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). For general info, please see ftp://ftp.compsoc.net/users/steve/ipportfw/linux21/ You will need the user space program "ipmasqadm" which can be downloaded from http://juanjox.kernelnotes.org/ The portfw code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_portfw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: ipmarkfw masquerade support CONFIG_IP_MASQUERADE_MFW Firewall Mark Forwarding provides functionality similar to port forwarding (see "IP: ipportfw masquerade support", above), the difference being that Firewall Mark Forwarding uses "firewalling mark" to select which packets must be forwarded (see ipchains(8), "-m" argument). This code is still under development and so is currently marked EXPERIMENTAL. If you want to try it, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ip_masq_markfw.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IP: aliasing support CONFIG_IP_ALIAS Sometimes it is useful to give several IP addresses to a single physical network interface (serial port or Ethernet card). The most common case is that you want to serve different WWW or ftp documents to the outside depending on which of your host names was used to connect to you. This is called "multihosting" or "virtual domains" or "virtual hosting services" and is explained in detail on the WWW at http://www.thesphere.com/~dlp/TwoServers/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and also in the Virtual-Services-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Another scenario would be that there are two logical networks living on your local Ethernet and you want to access them both with the same Ethernet card. This can also be done if you say Y here. The configuration of these alias addresses is done with a special name syntax explained in Documentation/networking/alias.txt and in the IP-Alias mini-HOWTO. If you want this, say Y. Most people don't need it and say N. IP: multicast routing CONFIG_IP_MROUTE This is used if you want your machine to act as a router for IP packets that have several destination addresses. It is needed on the MBONE, a high bandwidth network on top of the Internet which carries audio and video broadcasts. In order to do that, you would most likely run the program mrouted. Information about the multicast capabilities of the various network cards is contained in Documentation/networking/multicast.txt. If you haven't heard about it, you don't need it. IP: PIM-SM version 1 support CONFIG_IP_PIMSM_V1 Kernel side support for Sparse Mode PIM (Protocol Independent Multicast) version 1. This multicast routing protocol is used widely because Cisco supports it. You need special software to use it (pimd-v1). Please see http://netweb.usc.edu/pim/ for more information about PIM (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Say Y if you want to use PIM-SM v1. Note that you can say N here if you just want to use Dense Mode PIM. IP: PIM-SM version 2 support CONFIG_IP_PIMSM_V2 Kernel side support for Sparse Mode PIM version 2. In order to use this, you need an experimental routing daemon supporting it (pimd or gated-5). This routing protocol is not used widely, so say N unless you want to play with it. PC/TCP compatibility mode CONFIG_INET_PCTCP If you have been having difficulties telnetting to your Linux machine from a DOS system that uses (broken) PC/TCP networking software (all versions up to OnNet 2.0) over your local Ethernet try saying Y here. Everyone else says N. People having problems with NCSA telnet should see the file linux/Documentation/networking/ncsa-telnet. Reverse ARP server CONFIG_INET_RARP If there are (usually diskless or portable) machines on your local network that know their hardware Ethernet addresses but don't know their IP addresses upon startup, they can send out a Reverse Address Resolution Protocol (RARP) request to find out their own IP addresses. Diskless Sun 3 machines use this procedure at boot time, and diskless Linux boxes can be configured to do it as well. If you want your Linux box to be able to *answer* such requests, answer Y here; you'll then have to run the program rarp ("man rarp") on your box. If you actually want to use a diskless Sun 3 machine as an X terminal to Linux, say Y here and fetch Linux-Xkernel from ftp://metalab.unc.edu/pub/Linux/system/network/boot.net/. Superior solutions to the problem of booting and configuring machines over a net connection are given by the protocol BOOTP and its successor DHCP. See the DHCP FAQ http://web.syr.edu/~jmwobus/comfaqs/dhcp.faq.html for details (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile RARP support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called rarp.o. If you don't understand a word of the above, say N and rest in peace. Assume subnets are local CONFIG_INET_SNARL Say Y if you are on a subnetted network with all machines connected by Ethernet segments only, as this option optimizes network access for this special case. If there are other connections, e.g. SLIP links, between machines of your IP network, say N. If in doubt, answer N. The PATH mtu discovery facility will cover most cases anyway. Path MTU Discovery (normally enabled) CONFIG_PATH_MTU_DISCOVERY MTU (maximal transfer unit) is the size of the chunks we send out over the net. "Path MTU Discovery" means that, instead of always sending very small chunks, we start out sending big ones and if we then discover that some host along the way likes its chunks smaller, we adjust to a smaller size. This is good, so most people say Y here. However, some DOS software (versions of DOS NCSA telnet and Trumpet Winsock in PPP mode) is broken and won't be able to connect to your Linux machine correctly in all cases (especially through a terminal server) unless you say N here. See Documentation/networking/ncsa-telnet for the location of fixed NCSA telnet clients. If in doubt, say Y. Disable NAGLE algorithm (normally enabled) CONFIG_TCP_NAGLE_OFF The NAGLE algorithm works by requiring an acknowledgment before sending small IP frames (packets). This keeps tiny telnet and rlogin packets from congesting Wide Area Networks. Most people strongly recommend to say N here, thereby leaving NAGLE enabled. Those programs that would benefit from disabling this facility can do it on a per connection basis themselves. IP: Allow large windows (not recommended if <16 MB of memory) CONFIG_SKB_LARGE On high speed, long distance networks the performance limit on networking becomes the amount of data the sending machine can buffer until the other end confirms its reception. (At 45 Mbit/second there are a lot of bits between New York and London ...). If you say Y here, bigger buffers can be used which allows larger amounts of data to be "in flight" at any given time. It also means a user process can require a lot more memory for network buffers and thus this option is best used only on machines with 16 MB of memory or higher. Unless you are using long links with end to end speeds of over 2 Mbit a second or satellite links this option will make no difference to performance. Unix domain sockets CONFIG_UNIX If you say Y here, you will include support for Unix domain sockets; sockets are the standard Unix mechanism for establishing and accessing network connections. Many commonly used programs such as the X Window system and syslog use these sockets even if your machine is not connected to any network. Unless you are working on an embedded system or something similar, you therefore definitely want to say Y here. However, the socket support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called unix.o. If you try building this as a module and you have said Y to "Kernel module loader support" above, be sure to add 'alias net-pf-1 unix' to your /etc/conf.modules file. Note that several important services won't work correctly if you say M here and then neglect to load the module. Say Y unless you know what you are doing. The IPv6 protocol CONFIG_IPV6 This is experimental support for the next version of the Internet Protocol: IP version 6 (also called IPng "IP next generation"). Features of this new protocol include: expanded address space, authentication and privacy, and seamless interoperability with the current version of IP (IP version 4). For general information about IPv6, see http://playground.sun.com/pub/ipng/html/ipng-main.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape); for specific information about IPv6 under Linux read the file net/ipv6/README in the kernel source. If you want to use IPv6, please upgrade to the newest net-tools as given in Documentation/Changes. You will still be able to do regular IPv4 networking as well. This protocol support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ipv6.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. It is safe to say N here for now. IPv6: enable EUI-64 token format CONFIG_IPV6_EUI64 6bone, the network of computers using the IPv6 protocol, is moving to a new aggregatable address format and a new link local address assignment (EUI-64). Say Y if your site has upgraded already, or has started to upgrade. IPv6: disable provider based addresses CONFIG_IPV6_NO_PB Linux tries to operate correctly when your site has moved to EUI-64 only partially. Unfortunately, the two address formats (old: "provider based" and new: "aggregatable") are incompatible. Say Y if your site finished the upgrade to EUI-64, and/or you encountered some problems caused by the presence of two link-local addresses on an interface. IPv6: routing messages via old netlink CONFIG_IPV6_NETLINK You can say Y here to receive routing messages from the IPv6 code through the old netlink interface. However, a better option is to say Y to "Kernel/User network link driver" and to "Routing messages" instead. IPX networking CONFIG_IPX This is support for the Novell networking protocol, IPX, commonly used for local networks of Windows machines. You need it if you want to access Novell NetWare file or print servers using the Linux Novell client ncpfs (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/filesystems/) or from within the Linux DOS emulator DOSEMU (read the DOSEMU-HOWTO, available in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO). In order to do the former, you'll also have to say Y to "NCP filesystem support", below. IPX is similar in scope to IP, while SPX, which runs on top of IPX, is similar to TCP. There is also experimental support for SPX in Linux (see "SPX networking", below). To turn your Linux box into a fully featured NetWare file server and IPX router, say Y here and fetch either lwared from ftp://metalab.unc.edu/pub/Linux/system/network/daemons/ or mars_nwe from ftp://ftp.gwdg.de/pub/linux/misc/ncpfs. For more information, read the IPX-HOWTO in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). The IPX driver would enlarge your kernel by about 5 kB. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ipx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Unless you want to integrate your Linux box with a local Novell network, say N. IPX: Full internal IPX network CONFIG_IPX_INTERN Every IPX network has an address that identifies it. Sometimes it is useful to give an IPX "network" address to your Linux box as well (for example if your box is acting as a file server for different IPX networks: it will then be accessible from everywhere using the same address). The way this is done is to create a virtual internal "network" inside your box and to assign an IPX address to this network. Say Y here if you want to do this; read the IPX-HOWTO at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO for details. The full internal IPX network enables you to allocate sockets on different virtual nodes of the internal network. This is done by evaluating the field sipx_node of the socket address given to the bind call. So applications should always initialize the node field to 0 when binding a socket on the primary network. In this case the socket is assigned the default node that has been given to the kernel when the internal network was created. By enabling the full internal IPX network the cross-forwarding of packets targeted at 'special' sockets to sockets listening on the primary network is disabled. This might break existing applications, especially RIP/SAP daemons. A RIP/SAP daemon that works well with the full internal net can be found on ftp://ftp.gwdg.de/pub/linux/misc/ncpfs. If you don't know what you are doing, say N. IPX: SPX networking (EXPERIMENTAL) CONFIG_SPX The Sequenced Packet eXchange protocol is a transport layer protocol built on top of IPX. It is used in Novell NetWare systems for client-server applications and is similar to TCP (which runs on top of IP). Note that Novell NetWare file sharing does not use SPX; it uses a protocol called NCP, for which separate Linux support is available ("NCP filesystem support" below for the client side, and the user space programs lwared or mars_nwe for the server side). Say Y here if you have use for SPX; read the IPX-HOWTO at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO for details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called af_spx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AppleTalk DDP CONFIG_ATALK AppleTalk is the way Apple computers speak to each other on a network. If your Linux box is connected to such a network and you want to join the conversation, say Y. You will need to use the netatalk package so that your Linux box can act as a print and file server for Macs as well as access AppleTalk printers. Check out http://threepio.hitchcock.org/cgi-bin/faq/netatalk/faq.pl on the WWW for details (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). EtherTalk is the name used for AppleTalk over Ethernet and the cheaper and slower LocalTalk is AppleTalk over a proprietary Apple network using serial links. EtherTalk and LocalTalk are fully supported by Linux. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO contains valuable information as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called appletalk.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. I hear that the GNU boycott of Apple is over, so even politically correct people are allowed to say Y here. AppleTalk-IP driver support CONFIG_IPDDP This allows IP networking for users who only have AppleTalk networking available. This feature is experimental. With this driver, you can encapsulate IP inside AppleTalk (e.g. if your Linux box is stuck on an AppleTalk only network) or decapsulate (e.g. if you want your Linux box to act as an Internet gateway for a zoo of AppleTalk connected Macs). Please see the file Documentation/networking/ipddp.txt for more information. If you say Y here, the AppleTalk-IP support will be compiled into the kernel. In this case, you can either use encapsulation or decapsulation, but not both. With the following two questions, you decide which one you want. If you say M here, the AppleTalk-IP support will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want, read Documentation/modules.txt). The module is called ipddp.o. In this case, you will be able to use both encapsulation and decapsulation simultaneously, by loading two copies of the module and specifying different values for the module option ipddp_mode. IP to AppleTalk-IP Encapsulation support CONFIG_IPDDP_ENCAP If you say Y here, the AppleTalk-IP code will be able to encapsulate IP packets inside AppleTalk frames; this is useful if your Linux box is stuck on an AppleTalk network (which hopefully contains a decapsulator somewhere). Please see Documentation/networking/ipddp.txt for more information. If you said Y to "AppleTalk-IP driver support" above and you say Y here, then you cannot say Y to "AppleTalk-IP to IP Decapsulation support", below. AppleTalk-IP to IP Decapsulation support CONFIG_IPDDP_DECAP If you say Y here, the AppleTalk-IP code will be able to decapsulate AppleTalk-IP frames to IP packets; this is useful if you want your Linux box to act as an Internet gateway for an AppleTalk network. Please see Documentation/networking/ipddp.txt for more information. If you said Y to "AppleTalk-IP driver support" above and you say Y here, then you cannot say Y to "IP to AppleTalk-IP Encapsulation support", above. Apple/Farallon LocalTalk PC card support CONFIG_LTPC This allows you to use the AppleTalk PC card to connect to LocalTalk networks. The card is also known as the Farallon PhoneNet PC card. If you are in doubt, this card is the one with the 65C02 chip on it. You also need version 1.3.3 or later of the netatalk package. This driver is experimental, which means that it may not work. See the file Documentation/networking/ltpc.txt. COPS LocalTalk PC card support CONFIG_COPS This allows you to use COPS AppleTalk cards to connect to LocalTalk networks. You also need version 1.3.3 or later of the netatalk package. This driver is experimental, which means that it may not work. This driver will only work if you choose "AppleTalk DDP" networking support, above. Please read the file Documentation/networking/cops.txt. Dayna firmware support CONFIG_COPS_DAYNA Support COPS compatible cards with Dayna style firmware (Dayna DL2000/ Daynatalk/PC (half length), COPS LT-95, Farallon PhoneNET PC III, Farallon PhoneNET PC II). Tangent firmware support CONFIG_COPS_TANGENT Support COPS compatible cards with Tangent style firmware (Tangent ATB_II, Novell NL-1000, Daystar Digital LT-200. Amateur Radio support CONFIG_HAMRADIO If you want to connect your Linux box to an amateur radio, answer Y here. You want to read http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and the HAM-HOWTO and the AX25-HOWTO, both available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about amateur radio. Amateur Radio AX.25 Level 2 CONFIG_AX25 This is the protocol used for computer communication over amateur radio. It is either used by itself for point-to-point links, or to carry other protocols such as tcp/ip. To use it, you need a device that connects your Linux box to your amateur radio. You can either use a low speed TNC (a Terminal Node Controller acts as a kind of modem connecting your computer's serial port to your radio's microphone input and speaker output) supporting the KISS protocol or one of the various SCC cards that are supported by the generic Z8530 or the DMA SCC driver. Another option are the Baycom modem serial and parallel port hacks or the sound card modem (supported by their own drivers). If you say Y here, you also have to say Y to one of those drivers. Information about where to get supporting software for Linux amateur radio as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You might also want to check out the file Documentation/networking/ax25.txt in the kernel source. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ax25.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AX.25 DAMA Slave support CONFIG_AX25_DAMA_SLAVE DAMA is a mechanism to prevent collisions when doing AX.25 networking. A DAMA server (called "master") accepts incoming traffic from clients (called "slaves") and redistributes it to other slaves. If you say Y here, your Linux box will act as a DAMA slave; this is transparent in that you don't have to do any special DAMA configuration. (Linux cannot yet act as a DAMA server.) If unsure, say N. AX.25 DAMA Master support CONFIG_AX25_DAMA_MASTER DAMA is a mechanism to prevent collisions when doing AX.25 networking. A DAMA server (called "master") accepts incoming traffic from clients (called "slaves") and redistributes it to other slaves. If you say Y here, your Linux box will act as a DAMA server. If unsure, say N. Amateur Radio NET/ROM CONFIG_NETROM NET/ROM is a network layer protocol on top of AX.25 useful for routing. A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called netrom.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amateur Radio X.25 PLP (Rose) CONFIG_ROSE The Packet Layer Protocol (PLP) is a way to route packets over X.25 connections in general and amateur radio AX.25 connections in particular, essentially an alternative to NET/ROM. A comprehensive listing of all the software for Linux amateur radio users as well as information about how to configure an AX.25 port is contained in the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You also might want to check out the file Documentation/networking/ax25.txt. More information about digital amateur radio in general is on the WWW at http://www.tapr.org/tapr/html/pkthome.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called rose.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Serial port KISS driver for AX.25 CONFIG_MKISS KISS is a protocol used for the exchange of data between a computer and a Terminal Node Controller (a small embedded system commonly used for networking over AX.25 amateur radio connections; it connects the computer's serial port with the radio's microphone input and speaker output). Although KISS is less advanced than the 6pack protocol, it has the advantage that it is already supported by most modern TNCs without the need for a firmware upgrade. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called mkiss.o. Serial port 6PACK driver for AX.25 CONFIG_6PACK 6pack is a transmission protocol for the data exchange between your PC and your TNC (the Terminal Node Controller acts as a kind of modem connecting your computer's serial port to your radio's microphone input and speaker output). This protocol can be used as an alternative to KISS for networking over AX.25 amateur radio connections, but it has some extended functionality. Note that this driver is still experimental and might cause problems. For details about the features and the usage of the driver, read Documentation/networking/6pack.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called 6pack.o. BPQ Ethernet driver CONFIG_BPQETHER AX.25 is the protocol used for computer communication over amateur radio. If you say Y here, you will be able to send and receive AX.25 traffic over Ethernet (also called "BPQ AX.25"), which could be useful if some other computer on your local network has a direct amateur radio connection. High-speed (DMA) SCC driver for AX.25 CONFIG_DMASCC This is a driver for high-speed SCC boards, i.e. those supporting DMA on one port. You usually use those boards to connect your computer to an amateur radio modem (such as the WA4DSY 56kbps modem), in order to send and receive AX.25 packet radio network traffic. Currently, this driver supports Ottawa PI/PI2 (http://hydra.carleton.ca/info/pi2.html) and Gracilis PackeTwin (http://www.paccomm.com/gracilis.html) boards. They are detected automatically. If you have one of these cards, say Y here and read the AX25-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/. This driver can operate multiple boards simultaneously. If you compile it as a module (by saying M instead of Y), it will be called dmascc.o. If you don't pass any parameter to the driver, all possible I/O addresses are probed. This could irritate other devices that are currently not in use. You may specify the list of addresses to be probed by "dmascc=addr1,addr2,..." (when compiled into the kernel image) or "io=addr1,addr2,..." (when loaded as a module). The network interfaces will be called dmascc0 and dmascc1 for the board detected first, dmascc2 and dmascc3 for the second one, and so on. Before you configure each interface with ifconfig, you MUST set certain parameters, such as channel access timing, clock mode, and DMA channel. This is accomplished with a small utility program, dmascc_cfg, available at http://www.nt.tuwien.ac.at/~kkudielk/Linux/. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Z8530 SCC driver for AX.25 CONFIG_SCC These cards are used to connect your Linux box to an amateur radio in order to communicate with other computers. If you want to use this, read Documentation/networking/z8530drv.txt and the AX25-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also make sure to say Y to "Amateur Radio AX.25 Level 2" support. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called scc.o. additional delay for PA0HZP OptoSCC compatible boards CONFIG_SCC_DELAY Say Y here if you experience problems with the SCC driver not working properly; please read Documentation/networking/z8530drv.txt for details. If unsure, say N. Support for TRX that feedback the tx signal to rx CONFIG_SCC_TRXECHO Some transmitters feed the transmitted signal back to the receive line. Say Y here to foil this by explicitly disabling the receiver during data transmission. If in doubt, say Y. YAM driver for AX.25 CONFIG_YAM Support for the YAM modem on serial port. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. BAYCOM picpar and par96 driver for AX.25 CONFIG_BAYCOM_PAR This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the picpar and par96 designs. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_par.o. BAYCOM EPP driver for AX.25 CONFIG_BAYCOM_EPP This is a driver for Baycom style simple amateur radio modems that connect to a parallel interface. The driver supports the EPP designs. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_par.o. BAYCOM ser12 full duplex driver for AX.25 CONFIG_BAYCOM_SER_FDX This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the ser12 design in full duplex mode. In addition, it allows the baudrate to be set between 300 and 4800 baud (however not all modems support all baudrates). This is the preferred driver. The next driver, "BAYCOM ser12 half duplex driver for AX.25" is the old driver and still provided in case this driver does not work with your serial interface chip. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_ser_fdx.o. BAYCOM ser12 half duplex driver for AX.25 CONFIG_BAYCOM_SER_HDX This is one of two drivers for Baycom style simple amateur radio modems that connect to a serial interface. The driver supports the ser12 design in full duplex mode. This is the old driver. It is still provided in case your serial interface chip does not work with the full duplex driver. This driver is depreciated. To configure the driver, use the sethdlc utility available in the standard ax25 utilities package. For information on the modems, see http://www.baycom.de (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/baycom.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called baycom_ser_hdx.o. Sound card modem driver for AX.25 CONFIG_SOUNDMODEM This experimental driver allows a standard Sound Blaster or WindowsSoundSystem compatible sound card to be used as a packet radio modem (NOT as a telephone modem!), to send digital traffic over amateur radio. To configure the driver, use the sethdlc, smdiag and smmixer utilities available in the standard ax25 utilities package. For information on how to key the transmitter, see http://www.ife.ee.ethz.ch/~sailer/pcf/ptt_circ/ptt.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and Documentation/networking/soundmodem.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called soundmodem.o. Sound card modem support for Sound Blaster and compatible cards CONFIG_SOUNDMODEM_SBC This option enables the soundmodem driver to use Sound Blaster and compatible cards. If you have a dual mode card (i.e. a WSS cards with a Sound Blaster emulation) you should say N here and Y to "Sound card modem support for WSS and Crystal cards", below, because this usually results in better performance. This option also supports SB16/32/64 in full duplex mode. Sound card modem support for WSS and Crystal cards CONFIG_SOUNDMODEM_WSS This option enables the soundmodem driver to use WindowsSoundSystem compatible cards. These cards feature a codec chip from either Analog Devices (such as AD1848, AD1845, AD1812) or Crystal Semiconductors (such as CS4248, CS423x). This option also supports the WSS full duplex operation which currently works with Crystal CS423x chips. If you don't need full duplex operation, do not enable it to save performance. Sound card modem support for 1200 baud AFSK modulation CONFIG_SOUNDMODEM_AFSK1200 This option enables the soundmodem driver 1200 baud AFSK modem, compatible to popular modems using TCM3105 or AM7911. The demodulator requires about 12% of the CPU power of a Pentium 75 CPU per channel. Sound card modem support for 2400 baud AFSK modulation (7.3728MHz crystal) CONFIG_SOUNDMODEM_AFSK2400_7 This option enables the soundmodem driver 2400 baud AFSK modem, compatible to TCM3105 modems (over-)clocked with a 7.3728MHz crystal. Note that the availability of this driver does _not_ imply that I recommend building such links. It is only here since users especially in eastern Europe have asked me to do so. In fact this modulation scheme has many disadvantages, mainly its incompatibility with many transceiver designs and the fact that the TCM3105 (if used) is operated widely outside its specifications. Sound card modem support for 2400 baud AFSK modulation (8MHz crystal) CONFIG_SOUNDMODEM_AFSK2400_8 This option enables the soundmodem driver 2400 baud AFSK modem, compatible to TCM3105 modems (over-)clocked with an 8MHz crystal. Note that the availability of this driver does _not_ imply that I recommend building such links. It is only here since users especially in eastern Europe have asked me to do so. In fact this modulation scheme has many disadvantages, mainly its incompatibility with many transceiver designs and the fact that the TCM3105 (if used) is operated widely outside its specifications. Sound card modem support for 2666 baud AFSK modulation CONFIG_SOUNDMODEM_AFSK2666 This option enables the soundmodem driver 2666 baud AFSK modem. This modem is experimental, and not compatible to anything else I know of. Sound card modem support for 4800 baud 8PSK modulation CONFIG_SOUNDMODEM_PSK4800 This option enables the soundmodem driver 4800 baud 8PSK modem. This modem is experimental, and not compatible to anything else I know of. Sound card modem support for 4800 baud HAPN-1 modulation CONFIG_SOUNDMODEM_HAPN4800 This option enables the soundmodem driver 4800 baud HAPN-1 compatible modem. This modulation seems to be widely used 'down under' and in the Netherlands. Here, nobody uses it, so I could not test if it works. It is compatible to itself, however :-) Sound card modem support for 9600 baud FSK G3RUH modulation CONFIG_SOUNDMODEM_FSK9600 This option enables the soundmodem driver 9600 baud FSK modem, compatible to the G3RUH standard. The demodulator requires about 4% of the CPU power of a Pentium 75 CPU per channel. You can say Y to both 1200 baud AFSK and 9600 baud FSK if you want (but obviously you can only use one protocol at a time, depending on what the other end can understand). CCITT X.25 Packet Layer CONFIG_X25 X.25 is a set of standardized network protocols, similar in scope to frame relay; the one physical line from your box to the X.25 network entry point can carry several logical point-to-point connections (called "virtual circuits") to other computers connected to the X.25 network. Governments, banks, and other organizations tend to use it to connect to each other or to form Wide Area Networks (WANs). Many countries have public X.25 networks. X.25 consists of two protocols: the higher level Packet Layer Protocol (PLP) (say Y here if you want that) and the lower level data link layer protocol LAPB (say Y to "LAPB Data Link Driver" below if you want that). You can read more about X.25 at http://www.sangoma.com/x25.html and http://www.cisco.com/univercd/data/doc/software/11_0/rpcg/cx25.htm (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Information about X.25 for Linux is contained in the files Documentation/networking/x25.txt and Documentation/networking/x25-iface.txt. One connects to an X.25 network either with a dedicated network card using the X.21 protocol (not yet supported by Linux) or one can do X.25 over a standard telephone line using an ordinary modem (say Y to "X.25 async driver" below) or over Ethernet using an ordinary Ethernet card and either the 802.2 LLC protocol (say Y to "802.2 LLC" below) or LAPB over Ethernet (say Y to "LAPB Data Link Driver" and "LAPB over Ethernet driver" below). If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called x25.o. If unsure, say N. LAPB Data Link Driver (EXPERIMENTAL) CONFIG_LAPB Link Access Procedure, Balanced (LAPB) is the data link layer (i.e. the lower) part of the X.25 protocol. It offers a reliable connection service to exchange data frames with one other host, and it is used to transport higher level protocols (mostly X.25 Packet Layer, the higher part of X.25, but others are possible as well). Usually, LAPB is used with specialized X.21 network cards, but Linux currently supports LAPB only over Ethernet connections. If you want to use LAPB connections over Ethernet, say Y here and to "LAPB over Ethernet driver" below. Read Documentation/networking/lapb-module.txt for technical details. If you want to compile this driver as a module though ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lapb.o. If unsure, say N. 802.2 LLC (VERY EXPERIMENTAL) CONFIG_LLC This is a Logical Link Layer protocol used for X.25 connections over Ethernet, using ordinary Ethernet cards. Bridging (EXPERIMENTAL) CONFIG_BRIDGE If you say Y here, then your Linux box will be able to act as an Ethernet bridge, which means that the different Ethernet segments it is connected to will appear as one Ethernet to the participants. Several such bridges can work together to create even larger networks of Ethernets using the IEEE802.1 spanning tree algorithm. As this is a standard, Linux bridges will interwork properly with other third party bridge products. In order to use this, you'll need the bridge configuration tools available from http://lrp.plain.co.nz/tarballs/bridgex-0.30.tar.gz Note that if your box acts as a bridge, it probably contains several Ethernet devices, but the kernel is not able to recognize more than one ISA ethernet card at boot time without help; for details read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The Bridging code is still in test. If unsure, say N. Frame Diverter (EXPERIMENTAL) CONFIG_NET_DIVERT The Frame Diverter allows you to divert packets from the network, that are not aimed at the interface receiving it (in promisc. mode). Typically, a Linux box setup as an ethernet bridge with the Frames Diverter on, can do some *really* transparent www caching using a Squid proxy for example. This is very useful when you don't want to change your router's config (or if you simply don't have access to it). The other possible usages of diverting Ethernet Frames are numberous: - reroute smtp traffic to another interface - traffic-shape certain network streams - transparently proxy smtp connections - etc... For more informations, please refer to: http://www.freshmeat.net/projects/etherdivert http://perso.wanadoo.fr/magpie/EtherDivert.html If unsure, say N Packet socket CONFIG_PACKET The Packet protocol is used by applications which communicate directly with network devices without an intermediate network protocol implemented in the kernel, e.g. tcpdump. If you want them to work, choose Y. This driver is also available as a module called af_packet.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. You will need to add 'alias net-pf-17 af_packet' to your /etc/conf.modules file for the module version to function automatically. If unsure, say Y. Kernel/User network link driver CONFIG_NETLINK This driver allows for two-way communication between the kernel and user processes. It does so by creating a new socket family, PF_NETLINK. Over this socket, the kernel can send and receive datagrams carrying information. It is documented on many systems in netlink(7), a HOWTO is provided as well, for example on http://snafu.freedom.org/linux2.2/docs/netlink-HOWTO.html So far, the kernel uses this feature to publish some network related information if you say Y to "Routing messages", below. You also need to say Y here if you want to use arpd, a daemon that helps keep the internal ARP cache (a mapping between IP addresses and hardware addresses on the local network) small. The ethertap device, which lets user space programs read and write raw Ethernet frames, also needs the network link driver. If unsure, say Y. Routing messages CONFIG_RTNETLINK If you say Y here, user space programs can receive some network related routing information over the netlink. 'rtmon', supplied with the iproute2 package (ftp://ftp.inr.ac.ru), can read and interpret this data. Information sent to the kernel over this link is ignored. Netlink device emulation CONFIG_NETLINK_DEV This option will be removed soon. Any programs that want to use character special nodes like /dev/tap0 or /dev/route (all with major number 36) need this option, and need to be rewritten soon to use the real netlink socket. This is a backward compatibility option, choose Y for now. SCSI support? CONFIG_SCSI If you want to use a SCSI hard disk, SCSI tape drive, SCSI CDROM or any other SCSI device under Linux, say Y and make sure that you know the name of your SCSI host adapter (the card inside your computer that "speaks" the SCSI protocol, also called SCSI controller), because you will be asked for it. You also need to say Y here if you want support for the parallel port version of the 100 MB IOMEGA ZIP drive. Please read the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. The SCSI-Programming-HOWTO contains information about how to add or remove an SCSI device from a running Linux machine without rebooting. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called scsi_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt. However, do not compile this as a module if your root filesystem (the one containing the directory /) is located on a SCSI device. SCSI disk support CONFIG_BLK_DEV_SD If you want to use a SCSI hard disk or the SCSI or parallel port version of the IOMEGA ZIP drive under Linux, say Y and read the SCSI-HOWTO, the Disk-HOWTO and the Multi-Disk-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This is NOT for SCSI CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sd_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt. Do not compile this driver as a module if your root filesystem (the one containing the directory /) is located on a SCSI disk. In this case, do not compile the driver for your SCSI host adapter (below) as a module either. SCSI tape support CONFIG_CHR_DEV_ST If you want to use a SCSI tape drive under Linux, say Y and read the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and drivers/scsi/README.st in the kernel source. This is NOT for SCSI CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called st.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt . OnStream SC-x0 SCSI tape support CONFIG_CHR_DEV_OSST The OnStream SC-x0 SCSI tape drives can not be driven by the standard st driver, but instead need this special osst driver and use the /dev/osstX char device nodes (major 206). For more information, you may have a look at the SCSI-HOWTO ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and drivers/scsi/README.osst in the kernel source. Most info may be found on http://linux1.onstream.nl/test/ Please also have a look at the standard st docu, as most of it applies to osst as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called osst.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt . SCSI CDROM support CONFIG_BLK_DEV_SR If you want to use a SCSI CDROM under Linux, say Y and read the SCSI-HOWTO and the CDROM-HOWTO from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also make sure to say Y or M to "ISO 9660 CDROM filesystem support" later. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sr_mod.o. If you want to compile it as a module, say M here and read Documentation/modules.txt and Documentation/scsi.txt . Enable vendor-specific extensions (for SCSI CDROM) CONFIG_BLK_DEV_SR_VENDOR This enables the usage of vendor specific SCSI commands. This is required to support multisession CDs with old NEC/TOSHIBA cdrom drives (and HP Writers). If you have such a drive and get the first session only, try saying Y here; everybody else says N. SCSI generic support CONFIG_CHR_DEV_SG If you want to use SCSI scanners, synthesizers or CD-writers or just about anything having "SCSI" in its name other than hard disks, CDROMs or tapes, say Y here. These won't be supported by the kernel directly, so you need some additional software which knows how to talk to these devices using the SCSI protocol. For scanners, look at SANE (www.mostang.com/sane). For CD writer software look at cdrecord (www.fokus.gmd.de/research/cc/glone/employees/joerg.schilling/private /cdrecord.html) and for burning a "disk at once": cdrdao (www.ping.de/sites/daneb/cdrdao.html). Cdparanoia is a high quality digital reader of audio CDs (www.xiph.org/paranoia). For other devices, it's possible that you'll have to write the driver software yourself. Please read the file Documentation/scsi-generic.txt for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt and Documentation/scsi.txt. The module will be called sg.o. If unsure, say N. Probe all LUNs on each SCSI device CONFIG_SCSI_MULTI_LUN If you have a SCSI device that supports more than one LUN (Logical Unit Number), e.g. a CD jukebox, and only one LUN is detected, you can say Y here to force the SCSI driver to probe for multiple LUNs. A SCSI device with multiple LUNs acts logically like multiple SCSI devices. The vast majority of SCSI devices have only one LUN, and so most people can say N here and should in fact do so, because it is safer. Verbose SCSI error reporting (kernel size +=12K) CONFIG_SCSI_CONSTANTS The error messages regarding your SCSI hardware will be easier to understand if you say Y here; it will enlarge your kernel by about 12 KB. If in doubt, say Y. SCSI logging facility CONFIG_SCSI_LOGGING This turns on a logging facility that can be used to debug a number of SCSI related problems. If you say Y here, no logging output will appear by default, but you can enable logging by saying Y to "/proc filesystem support" and "Sysctl support" below and executing the command echo "scsi log token [level]" > /proc/scsi/scsi at boot time after the /proc filesystem has been mounted. There are a number of things that can be used for 'token' (you can find them in the source: drivers/scsi/scsi.c), and this allows you to select the types of information you want, and the level allows you to select the level of verbosity. If you say N here, it may be harder to track down some types of SCSI problems. If you say Y here your kernel will be somewhat larger, but there should be no noticeable performance impact as long as you have logging turned off. SGI WD93C93 SCSI Driver CONFIG_SCSI_SGIWD93 Say Y here to support the on-board WD93C93 SCSI controller found (a) on the Indigo2 and other MIPS-based SGI machines, and (b) on ARCS ARM-based machines. DEC NCR53C94 SCSI Driver CONFIG_SCSI_DECNCR Say Y here to support the NCR53C94 SCSI controller chips on IOASIC based TURBOchannel DECstations and TURBOchannel PMAZ-A cards. AdvanSys SCSI support CONFIG_SCSI_ADVANSYS This is a driver for all SCSI host adapters manufactured by AdvanSys. It is documented in the kernel source in drivers/scsi/advansys.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called advansys.o. Adaptec AHA152X/2825 support CONFIG_SCSI_AHA152X This is a driver for the AHA-1510, AHA-1520, AHA-1522, and AHA-2825 SCSI host adapters. It also works for the AVA-1505, but the IRQ etc. must be manually specified in this case. It is explained in section 3.3 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You might also want to read the comments at the top of drivers/scsi/aha152x.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aha152x.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Adaptec AHA1542 support CONFIG_SCSI_AHA1542 This is support for a SCSI host adapter. It is explained in section 3.4 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that Trantor was recently purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1542.h. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called aha1542.o. Adaptec AHA1740 support CONFIG_SCSI_AHA1740 This is support for a SCSI host adapter. It is explained in section 3.5 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/aha1740.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aha1740.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Adaptec AIC7xxx chipset SCSI controller support CONFIG_SCSI_AIC7XXX This is support for the various aic7xxx based Adaptec SCSI controllers. These include the 274x EISA cards; 284x VLB cards; 2902, 2910, 293x, 294x, 394x, 3985 and several other PCI and motherboard based SCSI controllers from Adaptec. It does not support the AAA-13x RAID controllers from Adaptec, nor will it likely ever support them. It does not support the 2920 cards from Adaptec that use the Future Domain SCSI controller chip. For those cards, you need the "Future Domain 16xx SCSI support" driver. In general, if the controller is based on an Adaptec SCSI controller chip from the aic777x series or the aic78xx series, this driver should work. The only exception is the 7810 which is specifically not supported (that's the RAID controller chip on the AAA-13x cards). Note that the AHA2920 SCSI host adapter is *not* supported by this driver; choose "Future Domain 16xx SCSI support" instead if you have one of those. Information on the configuration options for this controller can be found by checking the help file for each of the available configuration options. You should read drivers/scsi/README.aic7xxx at a minimum before contacting the maintainer with any questions. The SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO can also be of great help. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called aic7xxx.o. Enable or Disable Tagged Command Queueing by default CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT This option causes the aic7xxx driver to attempt to use tagged command queueing on any devices that claim to support it. If this is set to yes, you can still turn off TCQ on troublesome devices with the use of the tag_info boot parameter. See /usr/src/linux/drivers/scsi/README.aic7xxx for more information on that and other aic7xxx setup commands. If this option is turned off, you may still enable TCQ on known good devices by use of the tag_info boot parameter. If you are unsure about your devices then it is safest to say N here. However, TCQ can increase performance on some hard drives by as much as 50% or more, so I would recommend that if you say N here, that you at least read the README.aic7xxx file so you will know how to enable this option manually should your drives prove to be safe in regards to TCQ. Conversely, certain drives are known to lock up or cause bus resets when TCQ is enabled on them. If you have a Western Digital Enterprise SCSI drive for instance, then don't even bother to enable TCQ on it as the drive will become unreliable, and it will actually reduce performance. Default number of TCQ commands per device CONFIG_AIC7XXX_CMDS_PER_DEVICE Specify the number of commands you would like to allocate per SCSI device when Tagged Command Queueing (TCQ) is enabled on that device. Reasonable figures are in the range of 8 to 24 commands per device, but depending on hardware could be increased or decreased from that figure. If the number is too high for any particular device, the driver will automatically compensate usually after only 10 minutes of uptime. It will not hinder performance if some of your devices eventually have their command depth reduced, but is a waste of memory if all of your devices end up reducing this number down to a more reasonable figure. NOTE: Certain very broken drives are known to lock up when given more commands than they like to deal with. Quantum Fireball drives are the most common in this category. For the Quantum Fireball drives I would suggest no more than 8 commands per device. Default: 8 Collect statistics to report in /proc CONFIG_AIC7XXX_PROC_STATS This option tells the driver to keep track of how many commands have been sent to each particular device and report that information to the user via the /proc/scsi/aic7xxx/n file, where n is the number of the aic7xxx controller you want the information on. This adds a small amount of overhead to each and every SCSI command the aic7xxx driver handles, so if you aren't really interested in this information, it is best to leave it disabled. This will only work if you also say Y to "/proc filesystem support", below. If unsure, say N. Delay in seconds after SCSI bus reset CONFIG_AIC7XXX_RESET_DELAY This sets how long the driver will wait after resetting the SCSI bus before attempting to communicate with the devices on the SCSI bus again. This delay will be used during the reset phase at bootup time as well as after any reset that might occur during normal operation. Reasonable numbers range anywhere from 5 to 15 seconds depending on your devices. DAT tape drives are notorious for needing more time after a bus reset to be ready for the next command, but most hard drives and CD-ROM devices are ready in only a few seconds. This option has a maximum upper limit of 20 seconds to avoid bad interactions between the aic7xxx driver and the rest of the linux kernel. The default value has been reduced to 5 seconds. If this doesn't work with your hardware, try increasing this value. IBM ServeRAID Support CONFIG_SCSI_IPS This is support for the IBM ServeRAID hardware RAID controllers. See http://www.developer.ibm.com/welcome/netfinity/serveraid.html for more information. If this driver does not work correctly without modification please contact the author by email at ipslinux@us.ibm.com. BusLogic SCSI support CONFIG_SCSI_BUSLOGIC This is support for BusLogic MultiMaster and FlashPoint SCSI Host Adapters. Consult the SCSI-HOWTO, available via anonymous FTP from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, and the files README.BusLogic and README.FlashPoint in drivers/scsi for more information. If this driver does not work correctly without modification, please contact the author, Leonard N. Zubkoff, by email to lnz@dandelion.com. You can also build this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), but only a single instance may be loaded. If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called BusLogic.o. Omit BusLogic SCSI FlashPoint support CONFIG_SCSI_OMIT_FLASHPOINT This option allows you to omit the FlashPoint support from the BusLogic SCSI driver. The FlashPoint SCCB Manager code is substantial, so users of MultiMaster Host Adapters may wish to omit it. DTC3180/3280 SCSI support CONFIG_SCSI_DTC3280 This is support for DTC 3180/3280 SCSI Host Adapters. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and the file drivers/scsi/README.dtc3x80. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dtc.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support CONFIG_SCSI_EATA_DMA This is support for the EATA-DMA protocol compliant SCSI Host Adapters like the SmartCache III/IV, SmartRAID controller families and the DPT PM2011B and PM2012B controllers. Note that this driver is obsolete; if you have one of the above SCSI Host Adapters, you should normally say N here and Y to "EATA ISA/EISA/PCI support", below. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eata_dma.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA-PIO (old DPT PM2001, PM2012A) support CONFIG_SCSI_EATA_PIO This driver supports all EATA-PIO protocol compliant SCSI Host Adapters like the DPT PM2001 and the PM2012A. EATA-DMA compliant host adapters could also use this driver but are discouraged from doing so, since this driver only supports hard disks and lacks numerous features. You might want to have a look at the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called eata_pio.o. UltraStor 14F/34F support CONFIG_SCSI_U14_34F This is support for the UltraStor 14F and 34F SCSI-2 host adapters. The source at drivers/scsi/u14-34f.c contains some information about this hardware. If the driver doesn't work out of the box, you may have to change some settings in drivers/scsi/u14-34f.c. Read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that there is also another driver for the same hardware: "UltraStor SCSI support", below. You should say Y to both only if you want 24F support as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called u14-34f.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. enable elevator sorting CONFIG_SCSI_U14_34F_LINKED_COMMANDS This option enables elevator sorting for all probed SCSI disks and CDROMs. It definitely reduces the average seek distance when doing random seeks, but this does not necessarily result in a noticeable performance improvement: your mileage may vary... The safe answer is N. maximum number of queued commands CONFIG_SCSI_U14_34F_MAX_TAGS This specifies how many SCSI commands can be maximally queued for each probed SCSI device. You should reduce the default value of 8 only if you have disks with buggy or limited tagged command support. Minimum is 2 and maximum is 14. This value is also the window size used by the elevator sorting option above. The effective value used by the driver for each probed SCSI device is reported at boot time. Future Domain 16xx SCSI/AHA-2920A support CONFIG_SCSI_FUTURE_DOMAIN This is support for Future Domain's 16-bit SCSI host adapters (TMC-1660/1680, TMC-1650/1670, TMC-3260, TMC-1610M/MER/MEX) and other adapters based on the Future Domain chipsets (Quantum ISA-200S, ISA-250MG; Adaptec AHA-2920A; and at least one IBM board). It is explained in section 3.7 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. NOTE: Newer Adaptec AHA-2920C boards use the Adaptec AIC-7850 chip and should use the aic7xxx driver ("Adaptec AIC7xxx chipset SCSI controller support"). This Future Domain driver works with the older Adaptec AHA-2920A boards with a Future Domain chip on them. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called fdomain.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Future Domain MCS-600/700 SCSI support CONFIG_SCSI_FD_MCS This is support for Future Domain MCS 600/700 MCA SCSI adapters. Some PS/2 computers are equipped with IBM Fast SCSI Adapter/A which is identical to the MCS 700 and hence also supported by this driver. This driver also supports the Reply SB16/SCSI card (the SCSI part). It supports multiple adapters in the same system. Generic NCR5380/53c400 SCSI support CONFIG_SCSI_GENERIC_NCR5380 This is the generic NCR family of SCSI controllers, not to be confused with the NCR 53c7 or 8xx controllers. It is explained in section 3.8 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/g_NCR5380.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called g_NCR5380.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Enable NCR53c400 extensions CONFIG_SCSI_GENERIC_NCR53C400 This enables certain optimizations for the NCR53c400 SCSI cards. You might as well try it out. Note that this driver will only probe for the Trantor T130B in its default configuration; you might have to pass a command line option to the kernel at boot time if it doesn't detect your card. See the file drivers/scsi/README.g_NCR5380 for details. NCR5380/53c400 mapping method (use Port for T130B) CONFIG_SCSI_G_NCR5380_PORT The NCR5380 and NCR53c400 SCSI controllers come in two varieties: port or memory mapped. You should know what you have. The most common card, Trantor T130B, uses port mapped mode. NCR53c7,8xx SCSI support CONFIG_SCSI_NCR53C7xx This is a driver for the 53c7 and 8xx NCR family of SCSI controllers, not to be confused with the NCR 5380 controllers. It is explained in section 3.8 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/53c7,8xx.h. Please read drivers/scsi/README.ncr53c7xx for the available boot time command line options. Note: there is another driver for the 53c8xx family of controllers ("NCR53C8XX SCSI support" below). If you want to use them both, you need to say M to both and build them as modules, but only one may be active at a time. If you have a 53c8xx board, it's better to use the other driver. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 53c7,8xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. always negotiate synchronous transfers CONFIG_SCSI_NCR53C7xx_sync In general, this is good; however, it is a bit dangerous since there are some broken SCSI devices out there. Take your chances. Safe bet is N. allow FAST-SCSI [10MHz] CONFIG_SCSI_NCR53C7xx_FAST This will enable 10MHz FAST-SCSI transfers with your host adapter. Some systems have problems with that speed, so it's safest to say N here. allow DISCONNECT CONFIG_SCSI_NCR53C7xx_DISCONNECT This enables the disconnect/reconnect feature of the NCR SCSI controller. When you say Y here, a slow SCSI device will not lock the SCSI bus while processing a request, allowing simultaneous use of e.g. a SCSI hard disk and SCSI tape or CD-ROM drive, and providing much better performance when using slow and fast SCSI devices at the same time. Some devices, however, do not operate properly with this option enabled, and will cause your SCSI system to hang, which might cause a system crash. The safe answer therefore is to say N. NCR53C8XX SCSI support CONFIG_SCSI_NCR53C8XX This is the BSD ncr driver adapted to Linux for the NCR53C8XX family of PCI-SCSI controllers. This driver supports parity checking, tagged command queuing and fast synchronous data transfers up to 80 MB/s with wide FAST-40 LVD devices and controllers. This driver does not support SYM53C1010 Ultra-160 PCI-SCSI chips. Support for SYM53C1010 chips requires the "SYM53C8XX SCSI option" to be configured. This option will configure a different driver. Recent versions of the 53C8XX chips are better supported by the option "SYM53C8XX SCSI support", below. If you want the kernel to select the recommended driver for each of of your NCR/SYM53C8XX controllers you may just configure both the NCR53C8XX and the SYM53C8XX options to Y, or if modules are preferred, load first the sym53c8xx.o module and then the ncr53c8xx.o module. Note: there is yet another driver for the 53c8xx family of controllers ("NCR53c7,8xx SCSI support" above). If you want to use them both, you need to say M to both and build them as modules, but only one may be active at a time. If you have a 53c8xx board, you probably do not want to use the "NCR53c7,8xx SCSI support". Please read drivers/scsi/README.ncr53c8xx for more information. SYM53C8XX SCSI support CONFIG_SCSI_SYM53C8XX This driver supports all the features of recent 53C8XX chips (used in PCI SCSI controllers), notably the hardware phase mismatch feature of the SYM53C896, SYM53C895A and SYM53C1010. It also supports Ultra-160 SCSI data transfers for the SYM53C1010. Older versions of the 53C8XX chips are not supported by this driver. If your system uses either a 810 rev. < 16, a 815, or a 825 rev. < 16 PCI SCSI processor, you must use the generic NCR53C8XX driver ("NCR53C8XX SCSI support" above) or configure both the NCR53C8XX and this SYM53C8XX drivers either as module or linked to the kernel image. When both drivers are linked to the kernel, the SYM53C8XX driver is called first at initialization and you can use the 'excl=ioaddr' driver boot option to exclude attachment of adapters by the SYM53C8XX driver. For instance, entering 'sym53c8xx=excl:0xb400,excl=0xc000' at lilo prompt prevents adapters at io address 0xb400 and 0xc000 from being attached by the SYM53C8XX driver, thus allowing the NCR53C8XX driver to attach them. The 'excl' option is also supported by the NCR53C8XX driver. Please read drivers/scsi/README.ncr53c8xx for more information. synchronous data transfers frequency CONFIG_SCSI_NCR53C8XX_SYNC The SCSI Parallel Interface-2 Standard defines 5 classes of transfer rates: FAST-5, FAST-10, FAST-20, FAST-40 and FAST-80. The numbers are respectively the maximum data transfer rates in mega-transfers per second for each class. For example, a FAST-20 Wide 16 device is able to transfer data at 20 million 16 bit packets per second for a total rate of 40 MB/s. You may specify 0 if you want to only use asynchronous data transfers. This is the safest and slowest option. Otherwise, specify a value between 5 and 80, depending on the capability of your SCSI controller. The higher the number, the faster the data transfer. Note that 80 should normally be ok since the driver decreases the value automatically according to the controller's capabilities. Your answer to this question is ignored for controllers with NVRAM, since the driver will get this information from the user set-up. It also can be overridden using a boot setup option, as follows (example): 'ncr53c8xx=sync:12' will allow the driver to negotiate for FAST-20 synchronous data transfer (20 mega-transfers per second). The normal answer therefore is not to go with the default but to select the maximum value 80 allowing the driver to use the maximum value supported by each controller. If this causes problems with your SCSI devices, you should come back and decrease the value. There is no safe option other than using good cabling, right terminations and SCSI conformant devices. use normal IO CONFIG_SCSI_NCR53C8XX_IOMAPPED If you say Y here, the driver will use normal IO, as opposed to memory mapped IO. Memory mapped IO has less latency than normal IO and works for most Intel-based hardware. Under Linux/Alpha only normal IO is currently supported by the driver and so, this option has no effect on those systems. The normal answer therefore is N; try Y only if you encounter SCSI related problems. not allow targets to disconnect CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT This option is only provided for safety if you suspect some SCSI device of yours to not support properly the target-disconnect feature. In that case, you would say Y here. In general however, to not allow targets to disconnect is not reasonable if there is more than 1 device on a SCSI bus. The normal answer therefore is N. default tagged command queue depth CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS "Tagged command queuing" is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Some SCSI devices don't implement this properly; if you want to disable this feature, enter 0 or 1 here (it doesn't matter which). The default value is 8 and should be supported by most hard disks. This value can be overridden from the boot command line using the 'tags' option as follows (example): 'ncr53c8xx=tags:4/t2t3q16/t0u2q10' will set default queue depth to 4, set queue depth to 16 for target 2 and target 3 on controller 0 and set queue depth to 10 for target 0 / lun 2 on controller 1. The normal answer therefore is to go with the default 8 and to use a boot command line option for devices that need to use a different command queue depth. There is no safe option other than using good SCSI devices. maximum number of queued commands CONFIG_SCSI_NCR53C8XX_MAX_TAGS This option allows you to specify the maximum number of commands that can be queued to any device, when tagged command queuing is possible. The default value is 32. Minimum is 2, maximum is 64 for the generic NCR53C8XX driver and 255 for the SYM53C8XX driver. Modern hard disks are able to support 64 tags and even more, but do not seem to be faster when more than 32 tags are being used. So, the normal answer here is to go with the default value 32 unless you are using very large hard disks with large cache (>= 1 MB) that are able to take advantage of more than 32 tagged commands. There is no safe option and the default answer is recommended. assume boards are SYMBIOS compatible CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT This option allows you to enable some features depending on GPIO wiring. These General Purpose Input/Output pins can be used for vendor specific features or implementation of the standard SYMBIOS features. Genuine SYMBIOS controllers use GPIO0 in output for controller LED and GPIO3 bit as a flag indicating singled-ended/differential interface. The Tekram DC-390U/F boards uses a different GPIO wiring. Your answer to this question is ignored if all your controllers have NVRAM, since the driver is able to detect the board type from the NVRAM format. If all the controllers in your system are genuine SYMBIOS boards or use BIOS and drivers from SYMBIOS, you would want to say Y here, otherwise N. N is the safe answer. enable profiling statistics gathering CONFIG_SCSI_NCR53C8XX_PROFILE This option allows you to enable profiling information gathering. These statistics are not very accurate due to the low frequency of the kernel clock (100 Hz on i386) and have performance impact on systems that use very fast devices. The normal answer therefore is N. include support for the NCR PQS/PDS SCSI card CONFIG_SCSI_NCR53C8XX_PQS_PDS Say Y here if you have a special SCSI adapter produced by NCR corporation called a PCI Quad SCSI or PCI Dual SCSI. You do not need this if you do not have one of these adapters. However, since this device is detected as a specific PCI device, this option is quite safe. The common answer here is N, but answering Y is safe. IBMMCA SCSI support CONFIG_SCSI_IBMMCA This is support for the IBM SCSI adapter found in many of the PS/2 series computers. These machines have an MCA bus, so you need to answer Y to "MCA support" as well and read Documentation/mca.txt. If the adapter isn't found during boot (a common problem for models 56, 57, 76, and 77) you'll need to use the 'ibmmcascsi=' kernel option, where is the id of the SCSI subsystem (usually 7, but if that doesn't work check your reference diskette). Owners of model 95 with a LED-matrix-display can in addition activate some activity info like under OS/2, but more informative, by setting 'ibmmcascsi=display' as an additional kernel parameter. Try "man bootparam" or see the documentation of your boot loader about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ibmmca.o. Standard SCSI-order CONFIG_IBMMCA_SCSI_ORDER_STANDARD In the PC-world and in most modern SCSI-BIOS-setups, SCSI-hard disks are assigned to the drive letters, starting with the lowest SCSI-id (physical number -- pun) to be drive C:, as seen from DOS and similar operating systems. When looking into papers describing the ANSI-SCSI-standard, this assignment of drives appears to be wrong. The SCSI-standard follows a hardware-hierarchy which says that id 7 has the highest priority and id 0 the lowest. Therefore, the host adapters are still today everywhere placed as SCSI-id 7 by default. In the SCSI-standard, the drive letters express the priority of the disk. C: should be the hard disk, or a partition on it, with the highest priority. This must therefore be the disk with the highest SCSI-id (e.g. 6) and not the one with the lowest! IBM-BIOS kept the original definition of the SCSI-standard as also industrial- and process-control-machines, like VME-CPUs running under realtime-OSs (e.g. LynxOS, OS9) do. If you like to run Linux on your MCA-machine with the same assignment of hard disks as seen from e.g. DOS or OS/2 on your machine, which is in addition conformant to the SCSI-standard, you must say Y here. This is also necessary for MCA-Linux users who want to keep downward compatibility to older releases of the IBM-MCA-SCSI-driver (older than driver-release 2.00 and older than June 1997). If you like to have the lowest SCSI-id assigned as drive C:, as modern SCSI-BIOSes do, which does not conform to the standard, but is widespread and common in the PC-world of today, you must say N here. If unsure, say Y. Reset SCSI-devices at boot time CONFIG_IBMMCA_SCSI_DEV_RESET By default, SCSI-devices are reset when the machine is powered on. However, some devices exist, like special-control-devices, SCSI-CNC-machines, SCSI-printer or scanners of older type, that do not reset when switched on. If you say Y here, each device connected to your SCSI-bus will be issued a reset-command after it has been probed, while the kernel is booting. This may cause problems with more modern devices, like hard disks, which do not appreciate these reset commands, and can cause your system to hang. So say Y only if you know that one of your older devices needs it; N is the safe answer. NCR 53C9x MCA support CONFIG_SCSI_MCA_53C9X Some Microchannel machines, notably the NCR 35xx line, use a SCSI controller based on the NCR 53C94. This driver will allow use of the controller on the 3550, and very possibly others. If you want to compile this as a module (= code which can be inserted and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called mca_53c9x.o. Always IN2000 SCSI support CONFIG_SCSI_IN2000 This is support for an ISA bus SCSI host adapter. You'll find more information in drivers/scsi/in2000.readme. If it doesn't work out of the box, you may have to change the jumpers for IRQ or address selection. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called in2000.o. Initio 91XXU(W) SCSI support CONFIG_SCSI_INITIO This is support for the Initio 91XXU(W) SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called initio.o PAS16 SCSI support CONFIG_SCSI_PAS16 This is support for a SCSI host adapter. It is explained in section 3.10 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/pas16.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called pas16.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Initio INI-A100U2W SCSI support CONFIG_SCSI_INIA100 This is support for the Initio INI-A100U2W SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called a100u2w.o PCI2000 support CONFIG_SCSI_PCI2000 This is support for the PCI2000I EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called pci2000.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PCI2220i support CONFIG_SCSI_PCI2220I This is support for the PCI2220i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called pci2220i.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PSI240i support CONFIG_SCSI_PSI240I This is support for the PSI240i EIDE interface card which acts as a SCSI host adapter. Please read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module called psi240i.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic FAS SCSI support CONFIG_SCSI_QLOGIC_FAS This is a driver for the ISA, VLB, and PCMCIA versions of the Qlogic FastSCSI! cards as well as any other card based on the FASXX chip (including the Control Concepts SCSI/IDE/SIO/PIO/FDC cards). This driver does NOT support the PCI versions of these cards. The PCI versions are supported by the Qlogic ISP driver ("Qlogic ISP SCSI support"), below. Information about this driver is contained in drivers/scsi/README.qlogicfas. You should also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicfas.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic ISP SCSI support (EXPERIMENTAL) CONFIG_SCSI_QLOGIC_ISP This driver works for all QLogic PCI SCSI host adapters (IQ-PCI, IQ-PCI-10, IQ_PCI-D) except for the PCI-basic card. (This latter card is supported by the "AM53/79C974 PCI SCSI" driver). If you say Y here, make sure to choose "BIOS" at the question "PCI access mode". Please read the file drivers/scsi/README.qlogicisp. You should also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicisp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Qlogic ISP FC SCSI support CONFIG_SCSI_QLOGIC_FC This is a driver for the QLogic ISP2100 SCSI-FCP host adapter. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called qlogicfc.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Compaq 64-bit / 66MHz PCI Fibre Channel Host Adapter CONFIG_SCSI_CPQFCTS This driver supports Compaq HBA part #120186-B21, the non- intelligent Tachyon TL/TS (HPFC-5166A/1.2) based adapter. Kernel linked or kernel module, SMP support. Information at /proc/scsi/cpqfcTS/* Only supports FC-AL (non-loop mode not supported). Supports Fabric (FL_Port, public device); tested on Brocade switches. Supports hot- plug of new devices and movement of devices across ports (i.e., dynamic re-assignment of 24-bit FC port_id). Tested on Compaq RA4x00 (f/w ver 2.40 or newer), RA8000, with Vixel Rapport 1000 (7-port non-managed), Gadzoox 12-port, Gadzoox Capellix 3000, Brocade 2010, 2400, 2800. Selective Storage Presentation (SSP) on RA4x00 f/w 2.54 (no redundancy). Seagate ST-02 and Future Domain TMC-8xx SCSI support CONFIG_SCSI_SEAGATE These are 8-bit SCSI controllers; the ST-01 is also supported by this driver. It is explained in section 3.9 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/seagate.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called seagate.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Trantor T128/T128F/T228 SCSI support CONFIG_SCSI_T128 This is support for a SCSI host adapter. It is explained in section 3.11 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/t128.h. Note that Trantor was purchased by Adaptec, and some former Trantor products are being sold under the Adaptec name. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called t128.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. UltraStor SCSI support CONFIG_SCSI_ULTRASTOR This is support for the UltraStor 14F, 24F and 34F SCSI-2 host adapter family. This driver is explained in section 3.12 of the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If it doesn't work out of the box, you may have to change some settings in drivers/scsi/ultrastor.h. Note that there is also another driver for the same hardware: "UltraStor 14F/34F support", above. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ultrastor.o. 7000FASST SCSI support CONFIG_SCSI_7000FASST This driver supports the Western Digital 7000 SCSI host adapter family. Some information is in the source: drivers/scsi/wd7000.c. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wd7000.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. ACARD SCSI support CONFIG_SCSI_ACARD This driver supports the ACARD 870U/W SCSI host adapter. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called atp870u.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support CONFIG_SCSI_EATA This driver supports all EATA/DMA-compliant SCSI host adapters. DPT ISA and all EISA i/o addresses are probed looking for the "EATA" signature. If you chose "BIOS" at the question "PCI access mode", the addresses of all the PCI SCSI controllers reported by the PCI subsystem are probed as well. You want to read the start of drivers/scsi/eata.c and the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that there is also another driver for the same hardware available: "EATA-DMA support". You should say Y to only one of them. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called eata.o. enable tagged command queuing CONFIG_SCSI_EATA_TAGGED_QUEUE This is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Most EATA adapters negotiate this feature automatically with the device, even if your answer is N. The safe answer is N. enable elevator sorting CONFIG_SCSI_EATA_LINKED_COMMANDS This option enables elevator sorting for all probed SCSI disks and CDROMs. It definitely reduces the average seek distance when doing random seeks, but this does not necessarily result in a noticeable performance improvement: your mileage may vary... The safe answer is N. maximum number of queued commands CONFIG_SCSI_EATA_MAX_TAGS This specifies how many SCSI commands can be maximally queued for each probed SCSI device. You should reduce the default value of 16 only if you have disks with buggy or limited tagged command support. Minimum is 2 and maximum is 62. This value is also the window size used by the elevator sorting option above. The effective value used by the driver for each probed SCSI device is reported at boot time. NCR53c406a SCSI support CONFIG_SCSI_NCR53C406A This is support for the NCR53c406a SCSI host adapter. For user configurable parameters, check out drivers/scsi/NCR53c406.c in the kernel source. Also read the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called NCR53c406.o. Symbios Logic sym53c416 support CONFIG_SCSI_SYM53C416 This is support for the sym53c416 SCSI host adapter, the SCSI adapter that comes with some HP scanners. This driver requires that the sym53c416 is configured first using some sort of pnp configuration program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then you need to compile this driver as a module and then load it using insmod after isapnp has run. The parameters of the configured card(s) should be passed to the driver. The format is: insmod sym53c416 sym53c416=, [sym53c416_1=,] There is support for up to four adapters. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called sym53c416.o. Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support CONFIG_SCSI_DC390T This driver supports PCI SCSI host adapters based on the Am53C974A chip, e.g. Tekram DC390(T), DawiControl 2974 and some onboard PCscsi/PCnet (Am53/79C974) solutions. Documentation can be found in linux/drivers/scsi/README.tmscsim. Note that this driver does NOT support Tekram DC390W/U/F, which are based on NCR/Symbios chips. Use "NCR53C8XX SCSI support" for those. Also note that there is another generic Am53C974 driver, "AM53/79C974 PCI SCSI support" below. You can pick either one. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called tmscsim.o. Omit support for other Am53/79C974 based SCSI adapters CONFIG_SCSI_DC390T_NOGENSUPP If you say N here, the DC390(T) SCSI driver relies on the DC390 EEPROM to get initial values for its settings, such as speed, termination, etc. If it can't find this EEPROM, it will use defaults or the user supplied boot/module parameters. For details on driver configuration see linux/drivers/scsi/README.tmscsim. If you say Y here and if no EEPROM is found, the driver gives up and thus only supports Tekram DC390(T) adapters. This can be useful if you have a DC390(T) and another Am53C974 based adapter, which, for some reason, you want to drive with the other AM53C974 driver. If unsure, say N. AM53/79C974 PCI SCSI support CONFIG_SCSI_AM53C974 This is support for the AM53/79C974 SCSI host adapters. Please read drivers/scsi/README.AM53C974 for details. Also, the SCSI-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, is for you. Note that there is another driver for AM53C974 based adapters: "Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support", above. You can pick either one. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called AM53C974.o. AMI MegaRAID support CONFIG_SCSI_MEGARAID This driver supports the AMI MegaRAID 418, 428, 438, 466, 762, 490 and 467 SCSI host adapters. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called megaraid.o. ### ### What is this? ### #Concurrent IO commands on MegaRAID #CONFIG_MEGARAID_MULTI_IO GDT SCSI Disk Array Controller support CONFIG_SCSI_GDTH This is a driver for all SCSI Disk Array Controllers (EISA/ISA/PCI) manufactured by ICP vortex. It is documented in the kernel source in drivers/scsi/gdth.c and drivers/scsi/gdth.h. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. IOMEGA parallel port (ppa - older drives) CONFIG_SCSI_PPA This driver supports older versions of IOMEGA's parallel port ZIP drive (a 100 MB removable media device). Note that you can say N here if you have the SCSI version of the ZIP drive: it will be supported automatically if you said Y to the generic "SCSI disk support", above. If you have the ZIP Plus drive or a more recent parallel port ZIP drive (if the supplied cable with the drive is labeled "AutoDetect") then you should say N here and Y to "IOMEGA parallel port (imm - newer drives)", below. For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. This driver is also available as a module which can be inserted in and removed from the running kernel whenever you want. To compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called ppa.o. IOMEGA parallel port (imm - newer drives) CONFIG_SCSI_IMM This driver supports newer versions of IOMEGA's parallel port ZIP drive (a 100 MB removable media device). Note that you can say N here if you have the SCSI version of the ZIP drive: it will be supported automatically if you said Y to the generic "SCSI disk support", above. If you have the ZIP Plus drive or a more recent parallel port ZIP drive (if the supplied cable with the drive is labeled "AutoDetect") then you should say Y here; if you have an older ZIP drive, say N here and Y to "IOMEGA Parallel Port (ppa - older drives)", above. For more information about this driver and how to use it you should read the file drivers/scsi/README.ppa. You should also read the SCSI-HOWTO, which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use this driver, you will still be able to use the parallel port for other tasks, such as a printer; it is safe to compile both drivers into the kernel. This driver is also available as a module which can be inserted in and removed from the running kernel whenever you want. To compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called imm.o. Force the Iomega ZIP drivers to use EPP-16 CONFIG_SCSI_IZIP_EPP16 EPP (Enhanced Parallel Port) is a standard for parallel ports which allows them to act as expansion buses that can handle up to 64 peripheral devices. Some parallel port chipsets are slower than their motherboard, and so we have to control the state of the chipset's FIFO queue every now and then to avoid data loss. This will be done if you say Y here. Generally, saying Y is the safe option and slows things down a bit. Assume slow parallel port control register CONFIG_SCSI_IZIP_SLOW_CTR Some parallel ports are known to have excessive delays between changing the parallel port control register and good data being available on the parallel port data/status register. This option forces a small delay (1.0 usec to be exact) after changing the control register to let things settle out. Enabling this option may result in a big drop in performance but some very old parallel ports (found in 386 vintage machines) will not work properly. Generally, saying N is fine. SCSI Debug host simulator. CONFIG_SCSI_DEBUG This is a host adapter simulator that can be programmed to simulate a large number of conditions that could occur on a real bus. The advantage is that many hard to reproduce problems can be tested in a controlled environment where there is reduced risk of losing important data. This is primarily of use to people trying to debug the middle and upper layers of the SCSI subsystem. If unsure, say N. Fibre Channel support CONFIG_FC4 This is an experimental support for storage arrays connected to the system using Fibre Optic and the "X3.269-199X Fibre Channel Protocol for SCSI" specification. You'll also need the generic SCSI support, as well as the drivers for the storage array itself and for the interface adapter such as SOC. This subsystem could even serve for IP networking, with some code extensions. If unsure, say N. Sun SOC CONFIG_FC4_SOC Serial Optical Channel is an interface card with one or two Fibre Optic ports, each of which can be connected to a disk array. Only the SBus incarnation of the adapter is supported at the moment. Sun SOC+ (aka SOCAL) CONFIG_FC4_SOCAL Serial Optical Channel Plus is an interface card with up to two Fibre Optic ports. This card supports FC Arbitrated Loop (usually A5000 or internal FC disks in E[3-6]000 machines through the Interface Board). You'll probably need the microcode from the Solaris driver to make it work. This support is also available as a module called socal.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . SparcSTORAGE Array 100 and 200 series CONFIG_SCSI_PLUTO If you never bought a disk array made by Sun, go with N. Sun Enterprise Network Array (A5000 and EX500) CONFIG_SCSI_FCAL This driver drives FC-AL disks connected through a Fibre Channel card using the drivers/fc4 layer (currently only SOCAL). The most common is either A5000 array or internal disks in E[3-6]000 machines. This support is also available as a module called fcal.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . If unsure, say N. AcornSCSI support CONFIG_SCSI_ACORNSCSI_3 This enables support for the Acorn SCSI card (aka30). If you have an Acorn system with one of these, say Y. If unsure, say N. Acorn SCSI tagged queue support CONFIG_SCSI_ACORNSCSI_TAGGED_QUEUE Say Y here to enable tagged queuing support on the Acorn SCSI card. This is a feature of SCSI-2 which improves performance: the host adapter can send several SCSI commands to a device's queue even if previous commands haven't finished yet. Some SCSI devices don't implement this properly, so the safe answer is N. Acorn SCSI Synchronous transfers support CONFIG_SCSI_ACORNSCSI_SYNC Say Y here to enable synchronous transfer negotiation with all targets on the Acorn SCSI card. In general, this improves performance; however some SCSI devices don't implement it properly, so the safe answer is N. ARXE SCSI support CONFIG_SCSI_ARXESCSI Around 1991, Arxe Systems Limited released a high density floppy disc interface for the Acorn Archimedes range, to allow the use of HD discs from the then new A5000 on earlier models. This interface was either sold on its own or with an integral SCSI controller. Technical details on this NCR53c94-based device are available at Say Y here to compile in support for the SCSI controller. Oak SCSI support CONFIG_SCSI_OAK1 This enables support for the Oak SCSI card. If you have an Acorn system with one of these, say Y. If unsure, say N. Cumana SCSI I support CONFIG_SCSI_CUMANA_1 This enables support for the Cumana SCSI I card. If you have an Acorn system with one of these, say Y. If unsure, say N. Cumana SCSI II support CONFIG_SCSI_CUMANA_2 This enables support for the Cumana SCSI II card. If you have an Acorn system with one of these, say Y. If unsure, say N. EcoSCSI support CONFIG_SCSI_ECOSCSI This enables support for the EcoSCSI card -- a small card that sits in the Econet socket. If you have an Acorn system with one of these, say Y. If unsure, say N. EESOX SCSI support CONFIG_SCSI_EESOXSCSI This enables support for the EESOX SCSI card. If you have an Acorn system with one of these, say Y, otherwise say N. Powertec SCSI support CONFIG_SCSI_POWERTECSCSI This enables support for the Powertec SCSI card on Acorn systems. If you have one of these, say Y. If unsure, say N. Network device support? CONFIG_NETDEVICES You can say N here if you don't intend to connect your Linux box to any other computer at all or if all your connections will be over a telephone line with a modem either via UUCP (UUCP is a protocol to forward mail and news between unix hosts over telephone lines; read the UUCP-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO) or dialing up a shell account or a BBS, even using term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). You'll have to say Y if your computer contains a network card that you want to use under Linux (make sure you know its name because you will be asked for it and read the Ethernet-HOWTO (especially if you plan to use more than one network card under Linux), available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini) or if you want to use SLIP (Serial Line Internet Protocol is the protocol used to send Internet traffic over telephone lines or null modem cables) or CSLIP (compressed SLIP) or PPP (Point to Point Protocol, a better and newer replacement for SLIP) or PLIP (Parallel Line Internet Protocol is mainly used to create a mini network by connecting the parallel ports of two local machines) or AX.25/KISS (protocol for sending Internet traffic over amateur radio links). Make sure to read the NET-3-HOWTO. Eventually, you will have to read Olaf Kirch's excellent and free book "Network Administrator's Guide", to be found in ftp://metalab.unc.edu/pub/Linux/docs/LDP. If unsure, say Y. Dummy net driver support CONFIG_DUMMY This is essentially a bit-bucket device (i.e. traffic you send to this device is consigned into oblivion) with a configurable IP address. It is most commonly used in order to make your currently inactive SLIP address seem like a real address for local programs. If you use SLIP or PPP, you might want to say Y here. Read about it in the Network Administrator's Guide, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/LDP. Since this thing often comes in handy, the default is Y. It won't enlarge your kernel either. What a deal. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called dummy.o. If you want to use more than one dummy device at a time, you need to compile this driver as a module. Instead of 'dummy', the devices will then be called 'dummy0', 'dummy1' etc. Bonding driver support CONFIG_BONDING Say 'Y' or 'M' if you wish to be able to 'bond' multiple Ethernet Channels together. This is called 'Etherchannel' by Cisco, 'Trunking' by Sun, and 'Bonding' in Linux. If you have two Ethernet connections to some other computer, you can make them behave like one double speed connection using this driver. Naturally, this has to be supported at the other end as well, either with a similar Bonding Linux driver, a Cisco 5500 switch or a SunTrunking SunSoft driver. This is similar to the EQL driver, but it merges Ethernet segments instead of serial lines. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . The module will be called bonding.o. SLIP (serial line) support CONFIG_SLIP Say Y if you intend to use SLIP or CSLIP (compressed SLIP) to connect to your Internet service provider or to connect to some other local Unix box or if you want to configure your Linux box as a Slip/CSlip server for other people to dial in. SLIP (Serial Line Internet Protocol) is a protocol used to send Internet traffic over serial connections such as telephone lines or null modem cables; nowadays, the protocol PPP is more commonly used for this same purpose. Normally, your access provider has to support SLIP in order for you to be able to use it, but there is now a SLIP emulator called SLiRP around (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/ ) which allows you to use SLIP over a regular dial up shell connection. If you plan to use SLiRP, make sure to say Y to CSLIP, below. The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, explains how to configure SLIP. Note that you don't need this option if you just want to run term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected Unix computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). SLIP support will enlarge your kernel by about 4 KB. If unsure, say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called slip.o. CSLIP compressed headers CONFIG_SLIP_COMPRESSED This protocol is faster than SLIP because it uses compression on the TCP/IP headers (not on the data itself), but it has to be supported on both ends. Ask your access provider if you are not sure and answer Y, just in case. You will still be able to use plain SLIP. If you plan to use SLiRP, the SLIP emulator (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/) which allows you to use SLIP over a regular dial up shell connection, you definitely want to say Y here. The NET-3-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, explains how to configure CSLIP. This won't enlarge your kernel. Keepalive and linefill CONFIG_SLIP_SMART Adds additional capabilities to the SLIP driver to support the RELCOM line fill and keepalive monitoring. Ideal on poor quality analogue lines. Six bit SLIP encapsulation CONFIG_SLIP_MODE_SLIP6 Just occasionally you may need to run IP over hostile serial networks that don't pass all control characters or are only seven bit. Saying Y here adds an extra mode you can use with SLIP: "slip6". In this mode, SLIP will only send normal ASCII symbols over the serial device. Naturally, this has to be supported at the other end of the link as well. It's good enough, for example, to run IP over the async ports of a Camtec JNT Pad. If unsure, say N. PPP (point-to-point) support CONFIG_PPP PPP (Point to Point Protocol) is a newer and better SLIP. It serves the same purpose: sending Internet traffic over telephone (and other serial) lines. Ask your access provider if they support it, because otherwise you can't use it (not quite true any more: the free program SLiRP can emulate a PPP line if you just have a regular dial up shell account on some UNIX computer; get it via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/network/serial/). Note that you don't need "PPP support" if you just want to run term (term is a program which gives you almost full Internet connectivity if you have a regular dial up shell account on some Internet connected UNIX computer. Read http://www.bart.nl/~patrickr/term-howto/Term-HOWTO.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)). To use PPP, you need an additional program called pppd as described in Documentation/networking/ppp.txt and in the PPP-HOWTO, available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you upgrade from an older kernel, you might need to upgrade pppd as well. The PPP option enlarges your kernel by about 16 KB. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you said Y to "Version information on all symbols" above, then you cannot compile the PPP driver into the kernel; you can then only compile it as a module. The module will be called ppp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Note that, no matter what you do, the BSD compression code (used to compress the IP packets sent over the serial line; has to be supported at the other end as well) will always be compiled as a module; it is called bsd_comp.o and will show up in the directory modules once you have said "make modules". If unsure, say N. Wireless LAN (non-hamradio) CONFIG_NET_RADIO Support for wireless LANs and everything having to do with radio, but not with amateur radio or FM broadcasting. Saying Y here also enables the Wireless Extensions (creates /proc/net/wireless and enables ifconfig access). The Wireless Extension is a generic API allowing a driver to expose to the user space configuration and statistics specific to common Wireless LANs. The beauty of it is that a single set of tool can support all the variations of Wireless LANs, regardless of their type (as long as the driver supports Wireless Extension). Another advantage is that these parameters may be changed on the fly without restarting the driver (or Linux). If you wish to use Wireless Extensions with wireless PCMCIA (PC-) cards, you need to say Y here; you can fetch the tools from . Some user-level drivers for scarab devices which don't require special kernel support are available via FTP (user: anonymous) from ftp://shadow.cabi.net/pub/Linux. STRIP (Metricom Starmode radio IP) CONFIG_STRIP Say Y if you have a Metricom radio and intend to use Starmode Radio IP. STRIP is a radio protocol developed for the MosquitoNet project (On the WWW at http://mosquitonet.stanford.edu/; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) to send Internet traffic using Metricom radios. Metricom radios are small, battery powered, 100kbit/sec packet radio transceivers, about the size and weight of a cellular telephone. (You may also have heard them called "Metricom modems" but we avoid the term "modem" because it misleads many people into thinking that you can plug a Metricom modem into a phone line and use it as a modem.) You can use STRIP on any Linux machine with a serial port, although it is obviously most useful for people with laptop computers. If you think you might get a Metricom radio in the future, there is no harm in saying Y to STRIP now, except that it makes the kernel a bit bigger. You can also compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called strip.o. AT&T WaveLAN & DEC RoamAbout DS support CONFIG_WAVELAN The Lucent WaveLAN (formerly NCR and AT&T; or DEC RoamAbout DS) is a Radio LAN (wireless Ethernet-like Local Area Network) using the radio frequencies 900 MHz and 2.4 GHz. This driver support the ISA version of the WaveLAN card. A separate driver for the PCMCIA (PC-card) hardware is available in David Hinds' pcmcia-cs package (see the file Documentation/Changes for location). If you want to use an ISA WaveLAN card under Linux, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Some more specific information is contained in Documentation/networking/wavelan.txt and in the source code drivers/net/wavelan.p.h. You will also need the wireless tools package available from ftp://ftp.inka.de/pub/comp/Linux/networking/NetTools/contrib/. Please read the man pages contained therein. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wavelan.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Aironet Arlan 655 & IC2200 DS support CONFIG_ARLAN Aironet makes Arlan. www.aironet.com. Uses www.Telxon.com chip, which is used on several similar cards. Driver is tested on 655 and IC2200 series. Look for http://www.ylenurme.ee/~elmer/655/ for latest information. Driver is build as two modules, arlan and arlan-proc. The later is /proc interface and not needed most of time. On some computers the card ends up in non-valid state after some time. Use a ping-reset script to clear it. LAPB over Ethernet driver CONFIG_LAPBETHER This is a driver for a pseudo device (typically called /dev/lapb0) which allows you to open an LAPB point-to-point connection to some other computer on your Ethernet network. In order to do this, you need to say Y or M to the driver for your Ethernet card as well as to "LAPB Data Link Driver". If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lapbether.o. If unsure, say N. X.25 async driver CONFIG_X25_ASY This is a driver for sending and receiving X.25 frames over regular asynchronous serial lines such as telephone lines equipped with ordinary modems. Experts should note that this driver doesn't currently comply with the asynchronous HDLS framing protocols in CCITT recommendation X.25. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called x25_asy.o. If unsure, say N. Shortwave radio modem driver CONFIG_HFMODEM This experimental driver is used by a package (to be released) that implements the shortwave radio protocols RTTY, Sitor (Amtor), Pactor 1 and GTOR using a standard PC sound card. If unsure, say N. Shortwave radio modem driver support for Sound Blaster and compatible cards CONFIG_HFMODEM_SBC This option enables the hfmodem driver to use Sound Blaster and compatible cards. It requires a 16bit capable card, i.e. SB16 or better, or ESS1688 or newer. Shortwave radio modem driver support for WSS and Crystal cards CONFIG_HFMODEM_WSS This option enables the hfmodem driver to use WindowsSoundSystem compatible cards. These cards feature a codec chip from either Analog Devices (such as AD1848, AD1845) or Crystal Semiconductors (such as CS4248, CS423x). PLIP (parallel port) support CONFIG_PLIP PLIP (Parallel Line Internet Protocol) is used to create a reasonably fast mini network consisting of two (or, rarely, more) local machines. A PLIP link from a Linux box is a popular means to install a Linux distribution on a machine which doesn't have a CDROM drive (a minimal system has to be transferred with floppies first). The kernels on both machines need to have this PLIP option enabled for this to work. The PLIP driver has two modes, mode 0 and mode 1. The parallel ports (the connectors at the computers with 25 holes) are connected with "null printer" or "Turbo Laplink" cables which can transmit 4 bits at a time (mode 0) or with special PLIP cables, to be used on bidirectional parallel ports only, which can transmit 8 bits at a time (mode 1); you can find the wiring of these cables in Documentation/networking/PLIP.txt. The cables can be up to 15m long. Mode 0 works also if one of the machines runs DOS/Windows and has some PLIP software installed, e.g. the Crynwr PLIP packet driver (http://oak.oakland.edu/simtel.net/msdos/pktdrvr-pre.html; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) and winsock or NCSA's telnet. If you want to use PLIP, say Y and read the PLIP mini-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini as well as the NET-3-HOWTO in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the PLIP protocol was changed and this PLIP driver won't work together with the PLIP support in Linux versions 1.0.x. This option enlarges your kernel by about 8 KB. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called plip.o. If unsure, say Y or M, in case you buy a laptop later. EQL (serial line load balancing) support CONFIG_EQUALIZER If you have two serial connections to some other computer (this usually requires two modems and two telephone lines) and you use SLIP (the protocol for sending Internet traffic over telephone lines) or PPP (a better SLIP) on them, you can make them behave like one double speed connection using this driver. Naturally, this has to be supported at the other end as well, either with a similar EQL Linux driver or with a Livingston Portmaster 2e. Say Y if you want this and read Documentation/networking/eql.txt. You may also want to read section 6.2 of the NET-3-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eql.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Ethertap network tap CONFIG_ETHERTAP If you say Y here (and have said Y to "Kernel/User network link driver", above) and create a character special file /dev/tap0 with major number 36 and minor number 16 using mknod ("man mknod"), you will be able to have a user space program read and write raw Ethernet frames from/to that special file. tap0 can be configured with ifconfig and route like any other Ethernet device but it is not connected to any physical LAN; everything written by the user to /dev/tap0 is treated by the kernel as if it had come in from a LAN to the device tap0; everything the kernel wants to send out over the device tap0 can instead be read by the user from /dev/tap0: the user mode program replaces the LAN that would be attached to an ordinary Ethernet device. Please read the file Documentation/networking/ethertap.txt for more information. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ethertap.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you don't know what to use this for, you don't need it. Sealevel Systems 4021 support CONFIG_SEALEVEL_4021 This is a driver for the Sealevel Systems ACB 56 serial I/O adapter. This driver can only be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to do that, say M here. The module will be called sealevel.o. SyncLink HDLC/SYNCPPP support CONFIG_SYNCLINK_SYNCPPP Enables HDLC/SYNCPPP support for the SyncLink WAN driver. Normally the SyncLink WAN driver works with the main PPP driver (ppp.c) and pppd program. HDLC/SYNCPPP support allows use of the Cisco HDLC/PPP driver (syncppp.c). The SyncLink WAN driver (in character devices) must also be enabled. FarSync T-Series support CONFIG_FARSYNC This driver supports the FarSync T-Series X.21 (and V.35/V.24) cards from FarSite Communications Ltd. Synchronous communication is supported on all ports at speeds up to 8Mb/s (128K on V.24) using synchronous PPP or Cisco HDLC. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want) say M here and read Documentation/modules.txt. The module will be called farsync.o and if you want the module to be automatically loaded when the interface is reference then you should add "alias syncX farsync" to /etc/conf.modules for each interface, where X is 0, 1, 2, ... Frame Relay (DLCI) support CONFIG_DLCI This is support for the frame relay protocol; frame relay is a fast low-cost way to connect to a remote Internet access provider or to form a private wide area network. The one physical line from your box to the local "switch" (i.e. the entry point to the frame relay network, usually at the phone company) can carry several logical point-to-point connections to other computers connected to the frame relay network. For a general explanation of the protocol, check out http://www.frforum.com/ on the WWW. (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape.) To use frame relay, you need supporting hardware (called FRAD) and certain programs from the net-tools package as explained in Documentation/networking/framerelay.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dlci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Max open DLCI CONFIG_DLCI_COUNT This is the maximal number of logical point-to-point frame relay connections (the identifiers of which are called DCLIs) that the driver can handle. The default is probably fine. Max DLCI per device CONFIG_DLCI_MAX You can specify here how many logical point-to-point frame relay connections (the identifiers of which are called DCLIs) should be handled by each of your hardware frame relay access devices. Go with the default. Sangoma S502A FRAD support CONFIG_SDLA Say Y here if you need a driver for the Sangoma S502A, S502E, and S508 Frame Relay Access Devices. These are multi-protocol cards, but only frame relay is supported by the driver at this time. Please read Documentation/framerelay.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sdla.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Acorn Econet/AUN protocols (EXPERIMENTAL) CONFIG_ECONET Econet is a fairly old and slow networking protocol mainly used by Acorn computers to access file and print servers. It uses native Econet network cards. AUN is an implementation of the higher level parts of Econet that runs over ordinary Ethernet connections, on top of the UDP packet protocol, which in turn runs on top of the Internet protocol IP. If you say Y here, you can choose with the next two options whether to send Econet/AUN traffic over a UDP Ethernet connection or over a native Econet network card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called econet.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. AUN over UDP CONFIG_ECONET_AUNUDP Say Y here if you want to send Econet/AUN traffic over a UDP connection (UDP is a packet based protocol that runs on top of the Internet protocol IP) using an ordinary Ethernet network card. Native Econet CONFIG_ECONET_NATIVE Say Y here if you have a native Econet network card installed in your computer. WAN Router CONFIG_WAN_ROUTER Wide Area Networks (WANs), such as X.25, frame relay and leased lines, are used to interconnect Local Area Networks (LANs) over vast distances with data transfer rates significantly higher than those achievable with commonly used asynchronous modem connections. Usually, a quite expensive external device called a `WAN router' is needed to connect to a WAN. As an alternative, WAN routing can be built into the Linux kernel. With relatively inexpensive WAN interface cards available on the market, a perfectly usable router can be built for less than half the price of an external router. If you have one of those cards and wish to use your Linux box as a WAN router, say Y here and also to the WAN driver for your card, below. You will then need the wan-tools package which is available via FTP (user: anonymous) from ftp://ftp.sangoma.com. Read Documentation/networking/wan-router.txt for more information. The WAN routing support is only available as a module called wanrouter.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Fast switching (read help!) CONFIG_NET_FASTROUTE Saying Y here enables direct NIC-to-NIC (NIC = Network Interface Card) data transfers, which is fast. *** This option is NOT COMPATIBLE with several important *** *** networking options: especially CONFIG*FIREWALL. *** *** Say N here if you intend to use Linux as a firewall. *** However, it will work with all options in CONFIG_IP_ADVANCED_ROUTER section (except for CONFIG_IP_ROUTE_TOS and CONFIG_IP_ROUTE_FWMARK). At the moment, few devices support fast switching (tulip is one of them, modified 8390 can be found at ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz). If unsure, say N. Forwarding between high speed interfaces CONFIG_NET_HW_FLOWCONTROL This option enables NIC (Network Interface Card) hardware throttling during periods of extremal congestion. At the moment only a couple of device drivers support it (really only one -- tulip, modified 8390 can be found at ftp://ftp.inr.ac.ru/ip-routing/fastroute/fastroute-8390.tar.gz). Really, this option is applicable to any machine attached to a fast enough network, and even a 10 Mb NIC is able to kill a not very slow box, such as a 120MHz Pentium. However, do not say Y here if you did not experience any serious problems. CPU is too slow to handle full bandwidth CONFIG_CPU_IS_SLOW If you suspect that your CPU is not fast enough to handle the full bandwidth of your network connection, try saying Y here. If unsure, say N. QoS and/or fair queueing CONFIG_NET_SCHED When the kernel has several packets to send out over the network devices, it has to make a decision which one to send first. This is especially important if some of the network devices are real time devices that need a certain minimum data flow rate. There are several different algorithms for how to do this "fairly"; they are called packet schedulers. If you want to stick to the default scheduling algorithm, say N here. If you want to experiment with a couple of different algorithms, say Y. You can then attach different schedulers to different network devices. Currently, this is only recommended for experts. To administer these schedulers, you'll need the user-level utilities from the package iproute2+tc at ftp://ftp.inr.ac.ru/ip-routing/ If you say Y here and to "/proc filesystem" below, you will be able to read status information about priority schedulers from the file /proc/net/psched. The available schedulers are listed in the following questions; you can say Y to as many as you like. If unsure, say N now. CBQ packet scheduler CONFIG_NET_SCH_CBQ Say Y here if you want to use the Class-Based Queueing (CBQ) packet scheduling algorithm for some of your network devices. This algorithm classifies the waiting packets into a tree-like hierarchy of classes; the leaves of this tree are in turn scheduled by separate algorithms (called "disciplines" in this context) which you can choose below from among the various queueing algorithms. See the top of net/sched/sch_cbq.c for references about the CBQ algorithm. This code is also available as a module called sch_cbq.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. CSZ packet scheduler CONFIG_NET_SCH_CSZ Say Y here if you want to use the Clark-Shenker-Zhang (CSZ) packet scheduling algorithm for some of your network devices. At the moment, this is the only algorithm that can guarantee service for real-time applications (see the top of net/sched/sch_csz.c for details and references about the algorithm). Note: this scheduler is currently broken. This code is also available as a module called sch_csz.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The simplest PRIO pseudo scheduler CONFIG_NET_SCH_PRIO Say Y here if you want to use an n-band priority queue packet "scheduler" for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm. This code is also available as a module called sch_prio.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. RED queue CONFIG_NET_SCH_RED Say Y here if you want to use the Random Early Detection (RED) packet scheduling algorithm for some of your network devices (see the top of net/sched/sch_red.c for details and references about the algorithm). This code is also available as a module called sch_red.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SFQ queue CONFIG_NET_SCH_SFQ Say Y here if you want to use the Stochastic Fairness Queueing (SFQ) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm (see the top of net/sched/sch_sfq.c for details and references about the SFQ algorithm). This code is also available as a module called sch_sfq.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. TEQL queue CONFIG_NET_SCH_TEQL Say Y here if you want to use the True Link Equalizer (TLE) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm. This queueing discipline allows the combination of several physical devices into one virtual device. (see the top of net/sched/sch_teql.c for details). This code is also available as a module called sch_teql.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. TBF queue CONFIG_NET_SCH_TBF Say Y here if you want to use the Simple Token Bucket Filter (TBF) packet scheduling algorithm for some of your network devices or as a leaf discipline for the CBQ scheduling algorithm (see the top of net/sched/sch_tbf.c for a description of the TBF algorithm). This code is also available as a module called sch_tbf.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. QoS support CONFIG_NET_QOS Say Y here if you want to include Quality Of Service scheduling features, which means that you will be able to request certain rate-of-flow limits for your net devices. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about QoS support. Rate estimator CONFIG_NET_ESTIMATOR In order for Quality of Service scheduling to work, the current rate-of-flow for a network device has to be estimated; if you say Y here, the kernel will do just that. Packet classifier API CONFIG_NET_CLS The CBQ scheduling algorithm requires that network packets which are scheduled to be sent out over a network device be classified in some way. If you say Y here, you will get a choice of several different packet classifiers with the following questions. Traffic policing (needed for in/egress) CONFIG_NET_CLS_POLICE Say Y to support traffic policing (bandwidth limits). Needed for ingress and egress rate limiting. Routing tables based classifier CONFIG_NET_CLS_ROUTE4 If you say Y here, you will be able to classify outgoing packets according to the route table entry they matched. If unsure, say Y. This code is also available as a module called cls_route.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Firewall based classifier CONFIG_NET_CLS_FW If you say Y here, you will be able to classify outgoing packets according to firewall criteria you specified. This code is also available as a module called cls_fw.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . U32 classifier CONFIG_NET_CLS_U32 If you say Y here, you will be able to classify outgoing packets according to their destination address. If unsure, say Y. This code is also available as a module called cls_u32.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Special RSVP classifier CONFIG_NET_CLS_RSVP The Resource Reservation Protocol (RSVP) permits end systems to request a minimum and maximum data flow rate for a connection; this is important for real time data such as streaming sound or video. Say Y here if you want to be able to classify outgoing packets based on their RSVP requests. This code is also available as a module called cls_rsvp.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Special RSVP classifier for IPv6 CONFIG_NET_CLS_RSVP6 The Resource Reservation Protocol (RSVP) permits end systems to request a minimum and maximum data flow rate for a connection; this is important for real time data such as streaming sound or video. Say Y here if you want to be able to classify outgoing packets based on their RSVP requests and you are using the new Internet Protocol IPv6 as opposed to the older and more common IPv4. This code is also available as a module called cls_rsvp6.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Network code profiler CONFIG_NET_PROFILE If you say Y here and to "/proc filesystem support" below, some obscure and undocumented information about the network code's performance will be written to /proc/net/profile. If you don't know what it is about, you don't need it: say N. Comtrol Hostess SV-11 support CONFIG_HOSTESS_SV11 This is a network card for low speed synchronous serial links, at up to 256Kbps. It supports both PPP and Cisco HDLC. At this point, the driver can only be compiled as a module. COSA/SRP sync serial boards support CONFIG_COSA This is a driver for COSA and SRP synchronous serial boards. These boards allow to connect synchronous serial devices (for example base-band modems, or any other device with the X.21, V.24, V.35 or V.36 interface) to your Linux box. The cards can work as the character device, synchronous PPP network device, or the Cisco HDLC network device. To actually use the COSA or SRP board, you will need user-space utilities for downloading the firmware to the cards and to set them up. Look at the http://www.fi.muni.cz/~kas/cosa/ for more information about the cards (including the pointer to the user-space utilities). You can also read the comment at the top of the drivers/net/cosa.c for details about the cards and the driver itself. The driver will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cosa.o. For general information about modules read Documentation/modules.txt. Lan Media sync serial boards support CONFIG_LANMEDIA This is a driver for the following Lan Media family of serial boards. LMC 1000 board allows you to connect synchronous serial devices (for example base-band modems, or any other device with the X.21, V.24, V.35 or V.36 interface) to your Linux box. LMC 1200 with on board DSU board allows you to connect your Linux box dirrectly to a T1 or E1 circuit. LMC 5200 board provides a HSSI interface capable of runnig up to 52 mbits per second. LMC 5245 board connects directly to a T3 circuit saving the additional external hardware. To change setting such as syncPPP vs cisco HDLC or clock source you will need lmcctl. It it available at ftp.lanmedia.com. The driver will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called lmc.o. For general information about modules read Documentation/modules.txt. Fibre Channel driver support CONFIG_NET_FC Fibre Channel is a high speed serial protocol mainly used to connect large storage devices to the computer; it is compatible with and intended to replace SCSI. If you intend to use Fibre Channel, you need to have a Fibre channel adaptor card in your computer; say Y here and to the driver for your adaptor below. You also should have said Y to "SCSI support" and "SCSI generic support". Interphase 5526 Tachyon chipset based adaptor support CONFIG_IPHASE5526 Say Y here if you have a Fibre Channel adaptor of this kind. The driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called iph5526.o. For general information about modules read . Red Creek Hardware VPN (EXPERIMENTAL) CONFIG_RCPCI This is a driver for hardware which provides a Virtual Private Network (VPN). Say Y if you have it. This code is also available as a module called rcpci.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SBNI Leased Line Adapters CONFIG_SBNI This is a driver for ISA SBNI12-xx cards that is a low cost alternative to leased line modems. Say Y if you want to insert driver into kernel or say M to compile driver as a module. You can find more information and last versions of drivers and utilities at http://www.granch.ru. If you have any question you can mail to sbni@granch.ru. Say N if unsure. WAN Drivers CONFIG_WAN_DRIVERS Say Y to this option if your Linux box contains a WAN card and you are planning to use the box as a WAN ( = Wide Area Network) router ( = device used to interconnect local area networks over wide area communication links, such as leased lines or public data networks, e.g. X.25 or frame relay) and you will be offered a list of drivers for WAN cards currently available. For more information, read Documentation/networking/wan-router.txt. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about WAN card drivers. If unsure, say N. Sangoma WANPIPE(tm) multiprotocol cards CONFIG_VENDOR_SANGOMA WANPIPE from Sangoma Technologies Inc. (http://www.sangoma.com; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) is a family of intelligent multiprotocol WAN adapters with data transfer rates up to T1 (1.544 Mbps). They are also known as Synchronous Data Link Adapters (SDLA) and designated S503 or S508. These cards support the X.25, Frame Relay, PPP, Cisco HDLC protocols. The driver also offers API support for protocols like HDLC (LAPB), HDLC Streaming and BiSync. If you have one or more of these cards, say M to this option; you may then also want to read the file Documentation/networking/wanpipe.txt. The next questions will ask you about the protocols you want the driver to support. The driver will be compiled as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wanpipe.o. For general information about modules read Documentation/modules.txt. Maximum number of cards CONFIG_WANPIPE_CARDS Enter number of WANPIPE adapters installed in your machine. The driver can support up to 8 cards. You may enter more than you actually have if you plan to add more cards in the future without re-compiling the driver, but remember that in this case you'll waste some kernel memory (about 1K per card). WANPIPE X.25 support CONFIG_WANPIPE_X25 Say Y to this option if you are planning to connect a WANPIPE card to an X.25 network. If you say N, the X.25 support will not be included in the driver. The X.25 option is ONLY supported on S508 cards. WANPIPE Frame Relay support CONFIG_WANPIPE_FR Say Y to this option if you are planning to connect a WANPIPE card to a frame relay network. If you say N, the frame relay support will not be included in the driver. The Frame Relay option is ONLY supported on S508 cards. WANPIPE PPP support CONFIG_WANPIPE_PPP Say Y to this option if you are planning to connect a WANPIPE card to a leased line using Point-to-Point protocol (PPP). If you say N, the PPP support will not be included in the driver. The PPP option is ONLY supported on S508 cards. WANPIPE Cisco HDLC support CONFIG_WANPIPE_CHDLC Say Y to this option if you are planning to connect a WANPIPE card to a leased line using the Cisco HDLC protocol. This now supports Dual Port Cisco HDLC on the S508 card ONLY. This support also allows user to build applications using the HDLC streaming API. If you say N, the Cisco HDLC support and HDLC streaming API will not be included in the driver. MultiGate/COMX support CONFIG_COMX Say Y if you want to use any board from the MultiGate (COMX) family. These boards are synchronous serial adapters for the PC, manufactured by ITConsult-Pro Co, Hungary. Read linux/Documentation/networking/comx.txt for help on configuring and using COMX interfaces. Further info on these cards can be found at http://www.itc.hu or . If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx.o. COMX/CMX/HiCOMX board support CONFIG_COMX_HW_COMX Hardware driver for the 'CMX', 'COMX' and 'HiCOMX' boards from the MultiGate family. Say Y if you have one of these. You will need additional firmware to use these cards, which are downloadable from ftp://ftp.itc.hu/. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-comx.o. LoCOMX board support CONFIG_COMX_HW_LOCOMX Hardware driver for the 'LoCOMX' board from the MultiGate family. Say Y if you have a board like this. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-locomx.o. MixCOM board support CONFIG_COMX_HW_MIXCOM Hardware driver for the 'MixCOM' board from the MultiGate family. Say Y if you have a board like this. If you want to use the watchdog device on this card, you should select it in the Watchdog Cards section of the Character Devices configuration. The ISDN interface of this card is Teles 16.3 compatible, you should enable it in the ISDN configuration menu. The driver for the flash ROM of this card is available separately on ftp://ftp.itc.hu/. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-hw-mixcom.o. i810 TCO support CONFIG_I810_TCO Hardware driver for the TCO timer built into the Intel i810 and i815 chipset family. The TCO (Total Cost of Ownership) timer is a watchdog timer that will reboot the machine after it's second expiration. The expiration time can be configured by commandline argument "i810_margin=" where is the counter initial value. It is decremented every 0.6 secs, the default is 50 which gives a timeout of 30 seconds and one minute until reset. On some motherboards the driver may fail to reset the chipset's NO_REBOOT flag which prevents the watchdog from rebooting the machine. If this is the case you will get a kernel message like "i810tco init: failed to reset NO_REBOOT flag". If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called i810-tco.o. MultiGate Cisco-HDLC and synchronous PPP protocol support CONFIG_COMX_PROTO_PPP Cisco-HDLC and synchronous PPP protocol driver for all MultiGate boards. Say Y if you want to use either protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-ppp.o. MultiGate LAPB protocol support CONFIG_COMX_PROTO_LAPB LAPB protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-lapb.o. MultiGate Frame Relay protocol support CONFIG_COMX_PROTO_FR Frame Relay protocol driver for all MultiGate boards. Say Y if you want to use this protocol on your MultiGate boards. If you want to compile this as a module, say M and read Documentation/modules.txt. The module will be called comx-proto-fr.o. Xpeed DSL NIC support CONFIG_XPEED This driver supports Xpeed Inc. PCI network cards. The following cards are supported with this driver: Xpeed X200 IDSL NIC (http://www.xpeed.com/Products/x200/x200_c.html) Xpeed X300 SDSL NIC (http://www.xpeed.com/Products/x300/x300_c.html) This driver handles frame relay encapsulation of WAN link and presents the card to the kernel as an ethernet-like device called dsl0, dsl1, etc. Currently the driver only functions as a module. Detailed configuration information can be found in Documentation/networking/README.xpeed Generic HDLC driver CONFIG_HDLC Say Y to this option if your Linux box contains a WAN card supported by this driver and you are planning to connect the box to a WAN ( = Wide Area Network). You will need supporting software from ftp://ftp.pm.waw.pl/pub/Linux/hdlc/ If unsure, say N here. SDL RISCom/N2 driver CONFIG_N2 This driver is for RISCom/N2 single or dual channel ISA cards made by SDL Communications Inc. If you have such a card, say Y here. This driver requires Generic HDLC driver and its supporting utility available from ftp://ftp.pm.waw.pl/pub/Linux/hdlc/ Note that N2csu and N2dds cards are not supported by this driver. If unsure, say N here. Moxa C101 driver CONFIG_C101 This driver is for C101 SuperSync ISA cards made by Moxa Technologies Co., Ltd. If you have such a card, say Y here. This driver requires Generic HDLC driver and its supporting utility available from ftp://ftp.pm.waw.pl/pub/Linux/hdlc/ If unsure, say N here. SBE wanXL driver CONFIG_WANXL This driver is for wanXL PCI cards made by SBE Inc. If you have such a card, say Y here. This driver requires Generic HDLC driver and its supporting utility available from ftp://ftp.pm.waw.pl/pub/Linux/hdlc/ and a firmware available from SBE Inc. If unsure, say N here. Cyclades-PC300 support CONFIG_PC300 This is a driver for the Cyclades-PC300 synchronous communication boards. These boards provide synchronous serial interfaces to your Linux box. All protocols supported by the HDLC generic driver (currently synchronous PPP, Cisco HDLC and Frame Relay) are available by default. If you wish to support other protocols, please select one of the available options below this one. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called pc300.o. If unsure, say N here. Cyclades-PC300 X.25 Support CONFIG_PC300_X25 Say Y to this option if you intend to use the Cyclades-PC300 to provide X.25 interfaces to your Linux box. IMPORTANT: Additional X.25 support must be enabled in the kernel for this support to be functional (say Y to "CCITT X.25 Packet Layer" and "LAPB Data Link Driver", in the "Networking Options" configuration section). If unsure, say N here. Ethernet (10 or 100Mbit) CONFIG_NET_ETHERNET Ethernet (also called IEEE 802.3 or ISO 8802-2) is the most common type of Local Area Network (LAN) in universities and companies. Common varieties of Ethernet are: 10BASE-2 or Thinnet (10 Mbps over coaxial cable, linking computers in a chain), 10BASE-T or twisted pair (10 Mbps over twisted pair cable, linking computers to central hubs), 10BASE-F (10 Mbps over optical fiber links, using hubs), 100BASE-TX (100 Mbps over two twisted pair cables, using hubs), 100BASE-T4 (100 Mbps over 4 standard voice-grade twisted pair cables, using hubs), 100BASE-FX (100 Mbps over optical fiber links) [the 100BASE varieties are also known as Fast Ethernet], and Gigabit Ethernet (1 Gbps over optical fiber or short copper links). If your Linux machine will be connected to an Ethernet and you have an Ethernet network interface card (NIC) installed in your computer, say Y here and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. You will then also have to say Y to the driver for your particular NIC. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about Ethernet network cards. If unsure, say N. Sun LANCE Ethernet support CONFIG_SUN_LANCE This is support for lance Ethernet cards on Sun workstations such as the SPARCstation IPC (any SPARC with a network interface 'le0' under SunOS basically). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called lance.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sun Intel Ethernet support CONFIG_SUN_INTEL This is support for the Intel Ethernet cards on some Sun workstations (all those with a network interface 'ie0' under SunOS). Western Digital/SMC cards CONFIG_NET_VENDOR_SMC If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about Western Digital cards. If you say Y, you will be asked for your specific card in the following questions. WD80*3 support CONFIG_WD80x3 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra MCA support CONFIG_ULTRAMCA If you have a network (Ethernet) card of this type and are running an MCA based system (PS/2), say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-mca.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra support CONFIG_ULTRA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Important: There have been many reports that, with some motherboards mixing an SMC Ultra and an Adaptec AHA154x SCSI card (or compatible, such as some BusLogic models) causes corruption problems with many operating systems. The Linux smc-ultra driver has a work-around for this but keep it in mind if you have such a SCSI card and have problems. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-ultra.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC Ultra32 EISA support CONFIG_ULTRA32 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc-ultra32.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC 9194 Support CONFIG_SMC9194 This is support for the SMC9xxx based Ethernet cards. Choose this option if you have a DELL laptop with the docking station, or another SMC9192/9194 based chipset. Say Y if you want it compiled into the kernel, and read the file Documentation/networking/smc9.txt and the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called smc9194.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. PCI NE2000 support CONFIG_NE2K_PCI This driver is for NE2000 compatible PCI cards. It will not work with ISA NE2000 cards (they have their own driver, "NE2000/NE1000 support" below). If you have a PCI NE2000 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne2k-pci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. PCI DM9102 support CONFIG_DM9102 This driver is for DM9102 compatible PCI cards from Davicom (http://www.davicom.com.tw) If you have a PCI DM9102 network (Ethernet) card, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dmfe.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Racal-Interlan (Micom) NI cards CONFIG_NET_VENDOR_RACAL If you have a network (Ethernet) card belonging to this class, such as the NI5010, NI5210 or NI6210, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about NI cards. If you say Y, you will be asked for your specific card in the following questions. NI5010 support CONFIG_NI5010 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that this is still experimental code. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni5010.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. NI5210 support CONFIG_NI52 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni52.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. NI6510 support CONFIG_NI65 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ni65.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. RealTek 8129/8139 (not 8019/8029!) support CONFIG_RTL8139 This is a driver for the Fast Ethernet PCI network cards based on the RTL8129 and RTL8139 chips. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called rtl8139.o. Alternative RealTek 8129/8139 driver (8139too) support CONFIG_RTL8139TOO This is a sophisticated, multi platform driver for RealTek 8129 and 8139x based Fast Ethernet cards. It tries to work around several not well documented hardware bugs in these chips and is also usually faster than the original driver. If you have one of these cards, choose this driver. You can find more information in the Ethernet-HOWTO, available by anonymous FTP from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO . If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called 8139too.o . Use PIO instead of MMIO CONFIG_8139TOO_PIO This instructs the driver to use PIO (only on i386 architecture) instead of memory mapped IO. This can possibly solve some problems in case your mainboard has memory consistency issues. If unsure, say n. Support for automatic channel equalization CONFIG_8139TOO_TUNE_TWISTER This implements a function which might come in handy in case you are using low quality on long cabling. It tries to match the transceiver to the cable characteristics. This is experimental since hardly documented by the manufacturer. If unsure, say n. Support for RealTek 8129 CONFIG_8139TOO_8129 To include 8129 support, say y here. The RTL-8129 chip is basically the same as the RTL-8139 except for the fact that boards with this chip use an external Ethernet transceiver. SiS 900/7016 support CONFIG_SIS900 This is a driver for the Fast Ethernet PCI network cards based on the SiS 900 and SiS 7016 chips. The SiS 900 core is also embedded in SiS 630 and SiS 540 chipsets. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Please read Documentation/networking/sis900.txt and comments at the beginning of drivers/net/sis900.c for more information. This driver also supports AMD 79C901 HomePNA such that you can use your phone line as network cable. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called sis900.o. Packet Engines Yellowfin Gigabit-NIC support CONFIG_YELLOWFIN Say Y here if you have a Packet Engines G-NIC PCI Gigabit Ethernet adapter. This adapter is used by the Beowulf Linux cluster project. See http://cesdis.gsfc.nasa.gov/linux/drivers/yellowfin.html for more information about this driver in particular and Beowulf in general (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called yellowfin.o. General Instruments Surfboard 1000 CONFIG_NET_SB1000 This is a driver for the General Instrument SURFboard 1000 internal cable modem. This is an ISA card which is used by a number of cable TV companies to provide cable modem access. It's a one-way downstream-only cable modem, meaning that your upstream net link is provided by your regular phone modem. At present this driver only compiles as a module, so say M here if you have this card. Then read Documentation/networking/README.sb1000 for information on how to use this module, as it needs special ppp scripts for establishing a connection. Further documentation and the necessary scripts can be found at: http://www.jacksonville.net/~fventuri/ http://home.adelphia.net/~siglercm/sb1000.html http://linuxpower.cx/~cable/ If you don't have this card, of course say N. Adaptec Starfire support (EXPERIMENTAL) CONFIG_ADAPTEC_STARFIRE Say Y here if you have an Adaptec Starfire (or DuraLAN) PCI network adapter. The DuraLAN chip is used on the 64 bit PCI boards from Adaptec e.g. the ANA-6922A. The older 32 bit boards use the tulip driver. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called starfire.o. Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support CONFIG_ACENIC Say Y here if you have an Alteon AceNIC or 3Com 3C985 PCI Gigabit Ethernet adapter. The driver allows for using the Jumbo Frame option (9000 bytes/frame) however it requires that your switches can handle this as well. To enable Jumbo Frames, add `mtu 9000' to your ifconfig line. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called acenic.o. SysKonnect SK-98xx support CONFIG_SK98LIN Say Y here if you have a SysKonnect SK-98xx Gigabit Ethernet Server Adapter. The following adapters are supported by this driver: - SK-9841 (single link 1000Base-LX) - SK-9842 (dual link 1000Base-LX) - SK-9843 (single link 1000Base-SX) - SK-9844 (dual link 1000Base-SX) - SK-9821 (single link 1000Base-T) - SK-9822 (dual link 1000Base-T) The adapters support Jumbo Frames. The dual link adapters support a link-failover feature. Read Documentation/networking/sk98lin.txt for information about optional driver parameters. Questions concerning this driver may be addressed to: linux@syskonnect.de If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called sk98lin.o. MyriCOM Gigabit Ethernet support CONFIG_MYRI_SBUS This driver supports MyriCOM Sbus gigabit Ethernet cards. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . This is recommended. The module will be called myri_sbus.o. AMD LANCE and PCnet (AT1500 and NE2100) support CONFIG_LANCE If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Some LinkSys cards are of this type. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called lance.o. 3COM cards CONFIG_NET_VENDOR_3COM If you have a network (Ethernet) card belonging to this class, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about 3COM cards. If you say Y, you will be asked for your specific card in the following questions. 3c501 support CONFIG_EL1 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also, consider buying a new card, since the 3c501 is slow, broken, and obsolete: you will have problems. Some people suggest to ping ("man ping") a nearby machine every minute ("man cron") when using this card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c501.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c503 support CONFIG_EL2 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c503.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c505 support CONFIG_ELPLUS Information about this network (Ethernet) card can be found in Documentation/networking/3c505.txt. If you have a card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called 3c505.o. 3c507 support CONFIG_EL16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c507.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c523 support CONFIG_ELMC If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c523.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c527 support CONFIG_ELMC_II If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called 3c527.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. 3c509/3c579 support CONFIG_EL3 If you have a network (Ethernet) card belonging to the 3Com EtherLinkIII series, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If your card is not working you may need to use the DOS setup disk to disable Plug & Play mode, and to select the default media type. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called 3c509.o. 3c515 ISA Fast EtherLink CONFIG_3C515 If you have a 3Com ISA EtherLink XL "Corkscrew" 3c515 Fast Ethernet network card, say Y and read the Ethernet-HOWTO, available from . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read as well as . The module will be called 3c515.o. 3c590 series (592/595/597) "Vortex" support CONFIG_VORTEX If you have a 3Com "Vortex" (Fast EtherLink 3c590/3c592/3c595/3c597) or "Boomerang" series (EtherLink XL 3c900 or 3c905) network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is in Documentation/networking/vortex.txt and in the comments at the beginning of drivers/net/3c59x.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Other ISA cards CONFIG_NET_ISA If your network (Ethernet) card hasn't been mentioned yet and its bus system (that's the way the cards talks to the other components of your computer) is ISA (as opposed to EISA, VLB or PCI), say Y. Make sure you know the name of your card. Read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If unsure, say Y. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the remaining ISA network card questions. If you say Y, you will be asked for your specific card in the following questions. Generic ARCnet support CONFIG_ARCNET If you have a network card of this type, say Y and check out the (arguably) beautiful poetry in Documentation/networking/arcnet.txt. You need both this driver, and the driver for the particular ARCnet chipset of your card. If you don't know, then it's probably a COM90xx type card, so say Y (or M) to "ARCnet COM90xx chipset support" below. You might also want to have a look at the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO (even though ARCnet is not really Ethernet). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called arcnet.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Enable arc0e (ARCnet "ether-encap" packet format) CONFIG_ARCNET_ETH This allows you to use "Ethernet encapsulation" with your ARCnet card via the virtual arc0e device. You only need arc0e if you want to talk to nonstandard ARCnet software, specifically, DOS/Windows-style "NDIS" drivers. You do not need to say Y here to communicate with industry-standard RFC1201 implementations, like the arcether.com packet driver or most DOS/Windows ODI drivers. RFC1201 is included automatically as the arc0 device. Please read the ARCnet documentation in Documentation/networking/arcnet.txt for more information about using arc0e and arc0s. Enable arc0s (ARCnet RFC1051 packet format) CONFIG_ARCNET_1051 This allows you to use RFC1051 with your ARCnet card via the virtual arc0s device. You only need arc0s if you want to talk to ARCnet software complying with the "old" standard, specifically, the DOS arcnet.com packet driver, Amigas running AmiTCP, and some variants of NetBSD. You do not need to say Y here to communicate with industry-standard RFC1201 implementations, like the arcether.com packet driver or most DOS/Windows ODI drivers. RFC1201 is included automatically as the arc0 device. Please read the ARCnet documentation in Documentation/networking/arcnet.txt for more information about using arc0e and arc0s. ARCnet COM90xx (normal) chipset driver CONFIG_ARCNET_COM90xx This is the chipset driver for the standard COM90xx cards. If you have always used the old ARCnet driver without knowing what type of card you had, this is probably the one for you. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com90xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM90xx (IO mapped) chipset driver CONFIG_ARCNET_COM90xxIO This is the chipset driver for the COM90xx cards, using them in IO-mapped mode instead of memory-mapped mode. This is slower than the normal driver. Only use it if your card doesn't support shared memory. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com90io.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM90xx (RIM I) chipset driver CONFIG_ARCNET_RIM_I This is yet another chipset driver for the COM90xx cards, but this time only using memory-mapped mode, and no IO ports at all. This driver is completely untested, so if you have one of these cards, please mail David.Woodhouse@mvhi.com, especially if it works! This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called arc-rimi.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ARCnet COM20020 chipset driver CONFIG_ARCNET_COM20020 This is the driver for the new COM20020 chipset. It supports such things as promiscuous mode, so packet sniffing is possible, and extra diagnostic information. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called com20020.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Cabletron E21xx support CONFIG_E2100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called e2100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. CS89x0 support CONFIG_CS89x0 Support for CS89x0 chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO as well as Documentation/networking/cs89x0.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called cs89x.o. DEPCA support CONFIG_DEPCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO as well as drivers/net/depca.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called depca.o. EtherWorks 3 support CONFIG_EWRK3 This driver supports the DE203, DE204 and DE205 network (Ethernet) cards. If this is for you, say Y and read Documentation/networking/ewrk3.txt in the kernel source as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called ewrk3.o. SEEQ8005 support CONFIG_SEEQ8005 This is a driver for the SEEQ 8005 network (Ethernet) card. If this is for you, read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. AT1700/1720 support CONFIG_AT1700 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called at1700.o. FMV-181/182/183/184 support CONFIG_FMV18X If you have a Fujitsu FMV-181/182/183/184 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you use an FMV-183 or FMV-184 and it is not working, you may need to disable Plug & Play mode of the card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called fmv18x.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress PRO support CONFIG_EEXPRESS_PRO If you have a network (Ethernet) card of this type, say Y. This driver supports intel i82595{FX,TX} based boards. Note however that the EtherExpress PRO/100 Ethernet card has its own separate driver. Please read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eepro.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress support CONFIG_EEXPRESS If you have an EtherExpress16 network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the Intel EtherExpress16 card used to be regarded as a very poor choice because the driver was very unreliable. We now have a new driver that should do better. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called eexpress.o. Packet Engines Hamachi GNIC-II support CONFIG_HAMACHI If you have a Gigabit Ethernet card of this type, say Y and read the Ethernet-HOWTO, available from . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read as well as . The module will be called hamachi.o. HP PCLAN+ (27247B and 27252A) support CONFIG_HPLAN_PLUS If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hp-plus.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. HP PCLAN (27245 and other 27xxx series) support CONFIG_HPLAN If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hp.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. HP 10/100VG PCLAN (ISA, EISA, PCI) support CONFIG_HP100 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called hp100.o. NE2000/NE1000 support CONFIG_NE2000 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Many Ethernet cards without a specific driver are compatible with NE2000. If you have a PCI NE2000 card however, say N here and Y to "PCI NE2000 support", above. If you have a NE2000 card and are running on an MCA system (a bus system used on some IBM PS/2 computers and laptops), say N here and Y to "NE/2 (ne2000 MCA version) support", below. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SK_G16 support CONFIG_SK_G16 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. NE/2 (ne2000 MCA version) support CONFIG_NE2_MCA If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne2.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SKnet MCA support CONFIG_SKMC This are Micro Channel ethernet adapters. You need to set CONFIG_MCA to use this driver. It's both available as an in-kernel driver and as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. If you plan to use more than one network card under linux, read the Multiple-Ethernet-mini-HOWTO, available from sunsite.unc.edu:/pub/Linux/docs/HOWTO/mini. Supported cards are the SKnet Junior MC2 and the SKnet MC2(+). Distinguishing both cards is done automatically. Note that using multiple boards of different type hasn't been tested with this driver. EISA, VLB, PCI and on board controllers CONFIG_NET_EISA This is another class of network cards which attach directly to the bus. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about this class of network cards. If you say Y, you will be asked for your specific card in the following questions. If you are unsure, say Y. AMD PCnet32 (VLB and PCI) support CONFIG_PCNET32 If you have a PCnet32 or PCnetPCI based network (Ethernet) card, answer Y here and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called pcnet32.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Ansel Communications EISA 3200 support CONFIG_AC3200 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ac3200.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Mylex EISA LNE390A/LNE390B support CONFIG_LNE390 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called lne390.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Novell/Eagle/Microdyne NE3210 EISA support CONFIG_NE3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that this driver will NOT WORK for NE3200 cards as they are completely different. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ne3210.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Apricot Xen-II on board Ethernet CONFIG_APRICOT If you have a network (Ethernet) controller of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. The module will be called apricot.o. LP486E on board Ethernet CONFIG_LP486E If you have an Intel Panther motherboard with on board 82596 network (Ethernet) controller, say Y here. The initialization code tries to guess the ethernet address by looking at the EISA configuration area. Probably it finds precisely one thing that looks like an address, but if this fails use the command ifconfig eth0 hw ether a1:a2:a3:a4:a5:a6 to assign the address (revealed by the BIOS Setup) by hand. Generic DECchip & DIGITAL EtherWORKS PCI/EISA CONFIG_DE4X5 This is support for the DIGITAL series of PCI/EISA Ethernet cards. These include the DE425, DE434, DE435, DE450 and DE500 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/de4x5.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called de4x5.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. DECchip Tulip (dc21x4x) PCI support CONFIG_DEC_ELCP This driver is developed for the SMC EtherPower series Ethernet cards and also works with cards based on the DECchip 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are of this type. (If your card is NOT SMC EtherPower 10/100 PCI (smc9332dst), you can also try the driver for "Generic DECchip" cards, above. However, most people with a network card of this type will say Y here.) Do read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/tulip.txt. This is the new version of this driver. If it does not work for you please try older version which is also available. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called tulip.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Old DECchip Tulip (dc21x4x) PCI support CONFIG_DEC_ELCP_OLD This driver is developed for the SMC EtherPower series Ethernet cards and also works with cards based on the DECchip 21040/21041/21140 (Tulip series) chips. Some LinkSys PCI cards are of this type. (If your card is NOT SMC EtherPower 10/100 PCI (smc9332dst), you can also try the driver for "Generic DECchip" cards, above. However, most people with a network card of this type will say Y here.) Do read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/tulip.txt. This an older version of the driver which supports some cards the new version does not (yet) support. Use it if the new driver does not work for you. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called old_tulip.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Digi Intl. RightSwitch support CONFIG_DGRS This is support for the Digi International RightSwitch series of PCI/EISA Ethernet switch cards. These include the SE-4 and the SE-6 models. If you have a network card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. More specific information is contained in Documentation/networking/dgrs.txt. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dgrs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. EtherExpress PRO/100 support CONFIG_EEXPRESS_PRO100 If you have an Intel EtherExpress PRO/100 PCI network (Ethernet) card, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eepro100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. ICL EtherTeam 16i/32 support CONFIG_ETH16I If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called eth16i.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. TI ThunderLAN support (EXPERIMENTAL) CONFIG_TLAN If you have a PCI Ethernet network card based on the ThunderLAN chip which is supported by this driver, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Devices currently supported by this driver are Compaq Netelligent, Compaq NetFlex and Olicom cards. Please read the file Documentation/networking/tlan.txt for more details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called tlan.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Please email feedback to torben.mathiasen@compaq.com. VIA Rhine support CONFIG_VIA_RHINE If you have a VIA "rhine" based network card (Rhine-I (3043) or Rhine-2 (VT86c100A)), say Y here. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called via-rhine.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. Racal-Interlan EISA ES3210 support CONFIG_ES3210 If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called es3210.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. SMC EtherPower II (EXPERIMENTAL) CONFIG_EPIC100 If you have an SMC EtherPower II 9432 PCI Ethernet network card which is based on the SMC83c170, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called epic100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt as well as Documentation/networking/net-modules.txt. DEC LANCE Ethernet controller support CONFIG_DECLANCE This driver is for the series of Ethernet controllers produced by DEC (now Compaq) based on the AMD Lance chipset, including the DEPCA series. (This chipset is better known via the NE2100 cards.) SGI Seeq ethernet controller support CONFIG_SGISEEQ Say Y here if you have an Seeq based Ethernet network card. This is used in many Silicon Graphics machines. Zenith Z-Note support CONFIG_ZNET The Zenith Z-Note notebook computer has a built-in network (Ethernet) card, and this is the Linux driver for it. Note that the IBM Thinkpad 300 is compatible with the Z-Note and is also supported by this driver. Read the Ethernet-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Pocket and portable adapters CONFIG_NET_POCKET Cute little network (Ethernet) devices which attach to the parallel port ("pocket adapters"), commonly used with laptops. If you have one of those, say Y and read the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to plug a network (or some other) card into the PCMCIA (or PC-card) slot of your laptop instead (PCMCIA is the standard for credit card size extension cards used by all modern laptops), you need the pcmcia-cs package (location contained in the file Documentation/Changes) and you can say N here. Laptop users should read the Linux Laptop home page at http://www.cs.utexas.edu/users/kharker/linux-laptop/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about this class of network devices. If you say Y, you will be asked for your specific device in the following questions. AT-LAN-TEC/RealTek pocket adapter support CONFIG_ATP This is a network (Ethernet) device which attaches to your parallel port. Read drivers/net/atp.c as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. If you intend to use this driver, you should have said N to the Parallel Printer support, because the two drivers don't like each other. D-Link DE600 pocket adapter support CONFIG_DE600 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called de600.o. D-Link DE620 pocket adapter support CONFIG_DE620 This is a network (Ethernet) device which attaches to your parallel port. Read Documentation/networking/DLINK.txt as well as the Ethernet-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO if you want to use this. It is possible to have several devices share a single parallel port and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called de620.o. Token Ring driver support CONFIG_TR Token Ring is IBM's way of communication on a local network; the rest of the world uses Ethernet. To participate on a Token Ring network, you need a special Token ring network card. If you are connected to such a Token Ring network and want to use your Token Ring card under Linux, say Y here and to the driver for your particular card below and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Most people can say N here. IBM Tropic chipset based adapter support CONFIG_IBMTR This is support for all IBM Token Ring cards that don't use DMA. If you have such a beast, say Y and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Warning: this driver will almost definitely fail if more than one active Token Ring card is present. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ibmtr.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IBM Olympic chipset PCI adapter support CONFIG_IBMOL This is support for all non-Lanstreamer IBM PCI Token Ring Cards. Specifically this is all IBM PCI, PCI Wake On Lan, PCI II, PCI II Wake On Lan, and PCI 100/16/4 adapters. If you have such an adapter, say Y and read the Token-Ring mini-HOWTO, available via FTP (user:anonymous) from ftp://metalab.unc/edu/pub/Linux/docs/HOWTO. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will will be called olympic.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Also read the linux/Documentation/networking/olympic.txt or check the Linux Token Ring Project site for the latest information at http://www.linuxtr.net IBM Lanstreamer chipset PCI adapter support CONFIG_IBMLS This is support for IBM Lanstreamer PCI Token Ring Cards. If you have such an adapter, say Y and read the Token-Ring mini-HOWTO available via FTP (user:anonymous) from ftp://metalab.unc/edu/pub/Linux/docs/HOWTO. This driver is also available as a modules ( = code which can be inserted in and removed from the running kernel whenever you want). The modules will be called lanstreamer.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. SysKonnect adapter support CONFIG_SKTR This is support for all SysKonnect Token Ring cards, specifically SysKonnect TR4/16(+) ISA (SK-4190), SysKonnect TR4/16(+) PCI (SK-4590), SysKonnect TR4/16 PCI (SK-4591) adapters. It also supports Compaq PCI Token Ring adapters and Proteon ISA Token Ring adapters (1392 and 1392+). If you have such an adapter and would like to use it, say Y or M and read the Token-Ring mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Also read the file linux/Documentation/networking/sktr.txt or check the Linux-SNA WWW site for the latest information at http://samba.anu.edu.au/linux-sna/documents/drivers/SysKonnect/ Sun Happy Meal 10/100baseT support CONFIG_HAPPYMEAL This driver supports the "hme" interface present on most Ultra systems and as an option on older Sbus systems. This driver supports both PCI and Sbus devices. This driver also supports the "qfe" quad 100baseT device available in both PCI and Sbus configurations. This support is also available as a module called sunhme.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Sun Lance support CONFIG_SUNLANCE This driver supports the "le" interface present on all 32-bit Sparc systems, on some older Ultra systems and as an Sbus option. These cards are based on the AMD Lance chipset, which is better known via the NE2100 cards. This support is also available as a module called sunlance.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Sun BigMAC 10/100baseT support CONFIG_SUNBMAC This driver supports the "be" interface available as an Sbus option. This is Sun's older 100baseT Ethernet device. This support is also available as a module called sunbmac.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Sun QuadEthernet support CONFIG_SUNQE This driver supports the "qe" 10baseT Ethernet device, available as an Sbus option. Note that this is not the same as Quad FastEthernet "qfe" which is supported by the Happy Meal driver instead. This support is also available as a module called sunqe.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Traffic Shaper (EXPERIMENTAL) CONFIG_SHAPER The traffic shaper is a virtual network device that allows you to limit the rate of outgoing data flow over some other network device. See Documentation/networking/shaper.txt for more information. To set up and configure shaper devices, you need the shapecfg program, available via FTP (user: anonymous) from ftp://shadow.cabi.net/pub/Linux in the shaper package. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called shaper.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. FDDI driver support CONFIG_FDDI Fiber Distributed Data Interface is a high speed local area network design; essentially a replacement for high speed Ethernet. FDDI can run over copper or fiber. If you are connected to such a network and want a driver for the FDDI card in your computer, say Y here (and then also Y to the driver for your FDDI card, below). Most people will say N. Digital DEFEA and DEFPA adapter support CONFIG_DEFXX This is support for the DIGITAL series of EISA (DEFEA) and PCI (DEFPA) controllers which can connect you to a local FDDI network. SysKonnect FDDI PCI support CONFIG_SKFP Say Y here if you have a SysKonnect FDDI PCI adapter. The following adapters are supported by this driver: - SK-5521 (SK-NET FDDI-UP) - SK-5522 (SK-NET FDDI-UP DAS) - SK-5541 (SK-NET FDDI-FP) - SK-5543 (SK-NET FDDI-LP) - SK-5544 (SK-NET FDDI-LP DAS) - SK-5821 (SK-NET FDDI-UP64) - SK-5822 (SK-NET FDDI-UP64 DAS) - SK-5841 (SK-NET FDDI-FP64) - SK-5843 (SK-NET FDDI-LP64) - SK-5844 (SK-NET FDDI-LP64 DAS) - Netelligent 100 FDDI DAS Fibre SC - Netelligent 100 FDDI SAS Fibre SC - Netelligent 100 FDDI DAS UTP - Netelligent 100 FDDI SAS UTP - Netelligent 100 FDDI SAS Fibre MIC Read Documentation/networking/skfp.txt for information about the driver. Questions concerning this driver can be addressed to: linux@syskonnect.de If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. This is recommended. The module will be called skfp.o. HIgh Performance Parallel Interface support (EXPERIMENTAL) CONFIG_HIPPI HIgh Performance Parallel Interface (HIPPI) is a 800Mbit/sec and 1600Mbit/sec dual-simplex switched or point-to-point network. HIPPI can run over copper (25m) or fiber (300m on multi-mode or 10km on single-mode). HIPPI networks are commonly used for clusters and to connect to super computers. If you are connected to a HIPPI network and have a HIPPI network card in your computer that you want to use under Linux, say Y here (you must also remember to enable the driver for your HIPPI card below). Most people will say N here. Essential RoadRunner HIPPI PCI adapter support CONFIG_ROADRUNNER Say Y here if this is your PCI HIPPI network card. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called rrunner.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Use large TX/RX rings CONFIG_ROADRUNNER_LARGE_RINGS If you say Y here, the RoadRunner driver will preallocate up to 2 MB of additional memory to allow for fastest operation, both for transmitting and receiving. This memory cannot be used by any other kernel code or by user space programs. Say Y here only if you have the memory. Acorn Ether1 card CONFIG_ARM_ETHER1 If you have an Acorn system with one of these (AKA25) network cards, you should say Y to this option if you wish to use it with Linux. Acorn/ANT Ether3 card CONFIG_ARM_ETHER3 If you have an Acorn system with one of these network cards, you should say Y to this option if you wish to use it with Linux. I Cubed EtherH card CONFIG_ARM_ETHERH If you have an Acorn system with one of these network cards, you should say Y to this option if you wish to use it with Linux. EBSA-110 Ethernet interface CONFIG_ARM_AM79C961A If you wish to compile a kernel for the EBSA-110, then you should always answer Y to this. Support CDROM drives that are not SCSI or IDE/ATAPI CONFIG_CD_NO_IDESCSI If you have a CDROM drive that is neither SCSI nor IDE/ATAPI, say Y here, otherwise N. Read the CDROM-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about these CDROM drives. If you are unsure what you have, say Y and find out whether you have one of the following drives. For each of these drivers, a file Documentation/cdrom/ exists. Especially in cases where you do not know exactly which kind of drive you have you should read there. Most of these drivers use a file drivers/cdrom/.h where you can define your interface parameters and switch some internal goodies. All these CDROM drivers are also usable as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile them as module, say M instead of Y and read Documentation/modules.txt. If you want to use any of these CDROM drivers, you also have to answer Y or M to "ISO 9660 CDROM filesystem support" below (this answer will get "defaulted" for you if you enable any of the Linux CDROM drivers). Sony CDU31A/CDU33A CDROM support CONFIG_CDU31A These CDROM drives have a spring-pop-out caddyless drawer, and a rectangular green LED centered beneath it. NOTE: these CDROM drives will not be auto detected by the kernel at boot time; you have to provide the interface address as an option to the kernel at boot time as described in Documentation/cdrom/cdu31a or fill in your parameters into drivers/cdrom/cdu31a.c. Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel. The lilo procedure is also explained in the SCSI-HOWTO. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cdu31a.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Standard Mitsumi [no XA/Multisession] CDROM support CONFIG_MCD This is the older of the two drivers for the older Mitsumi models LU-005, FX-001 and FX-001D. This is not the right driver for the FX-001DE and the triple or quad speed models (all these are IDE/ATAPI models). Please also the file Documentation/cdrom/mcd. With the old LU-005 model, the whole drive chassis slides out for cd insertion. The FX-xxx models use a motorized tray type mechanism. Note that this driver does not support XA or MultiSession CDs (PhotoCDs). There is a new driver (next question) which can do this. If you want that one, say N here. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. IRQ channel for Mitsumi CD-ROM CONFIG_MCD_IRQ This allows you to specify the default value of the IRQ used by the driver. This setting can be overridden by passing the "mcd=" parameter to the kernel at boot time (or at module load time if you said M to "Standard Mitsumi CDROM support"). I/O base address for Mitsumi CD-ROM CONFIG_MCD_BASE This allows you to specify the default value of the I/O base address used by the driver. This setting can be overridden by passing the "mcd=" parameter to the kernel at boot time (or at module load time if you said M to "Standard Mitsumi CDROM support"). Mitsumi [XA/MultiSession] support CONFIG_MCDX Use this driver if you want to be able to read XA or MultiSession CDs (PhotoCDs) as well as ordinary CDs with your Mitsumi LU-005, FX-001 or FX-001D CDROM drive. In addition, this driver uses much less kernel memory than the old one, if that is a concern. This driver is able to support more than one drive, but each drive needs a separate interface card. Please read the file Documentation/cdrom/mcdx. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mcdx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support CONFIG_SBPCD This driver supports most of the drives which use the Panasonic or Sound Blaster interface. Please read the file Documentation/cdrom/sbpcd. The Matsushita CR-521, CR-522, CR-523, CR-562, CR-563 drives (sometimes labeled "Creative"), the Creative Labs CD200, the Longshine LCS-7260, the "IBM External ISA CDROM" (in fact a CR-56x model), the TEAC CD-55A fall under this category. Some other "electrically compatible" drives (Vertos, Genoa, some Funai models) are currently not supported; for the Sanyo H94A drive currently a separate driver (asked later) is responsible. Most drives have a uniquely shaped faceplate, with a caddyless motorized drawer, but without external brand markings. The older CR-52x drives have a caddy and manual loading/eject, but still no external markings. The driver is able to do an extended auto-probing for interface addresses and drive types; this can help to find facts in cases you are not sure, but can consume some time during the boot process if none of the supported drives gets found. Once your drive got found, you should enter the reported parameters into drivers/cdrom/sbpcd.h and set "DISTRIBUTION 0" there. This driver can support up to four CDROM controller cards, and each card can support up to four CDROM drives; if you say Y here, you will be asked how many controller cards you have. If compiled as a module, only one controller card (but with up to four drives) is usable. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sbpcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Matsushita/Panasonic, ... second CDROM controller support CONFIG_SBPCD2 Say Y here only if you have two CDROM controller cards of this type (usually only if you have more than four drives). You should enter the parameters for the second, third and fourth interface card into linux/include/linux/sbpcd.h before compiling the new kernel. Read the file Documentation/cdrom/sbpcd. Matsushita/Panasonic, ... third CD-ROM controller support CONFIG_SBPCD3 Say Y here only if you have three CD-ROM controller cards of this type (usually only if you have more than six drives). You should enter the parameters for the second, third and fourth interface card into include/linux/sbpcd.h before compiling the new kernel. Read the file . Matsushita/Panasonic, ... fourth CD-ROM controller support CONFIG_SBPCD4 Say Y here only if you have four CD-ROM controller cards of this type (usually only if you have more than eight drives). You should enter the parameters for the second, third and fourth interface card into include/linux/sbpcd.h before compiling the new kernel. Read the file . Aztech/Orchid/Okano/Wearnes/TXC/CyDROM CDROM support CONFIG_AZTCD This is your driver if you have an Aztech CDA268-01A, Orchid CD-3110, Okano or Wearnes CDD110, Conrad TXC, or CyCDROM CR520 or CR540 CDROM drive. This driver -- just like all these CDROM drivers -- is NOT for CDROM drives with IDE/ATAPI interfaces, such as Aztech CDA269-031SE. Please read the file Documentation/cdrom/aztcd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called aztcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sony CDU535 CDROM support CONFIG_CDU535 This is the driver for the older Sony CDU-535 and CDU-531 CDROM drives. Please read the file Documentation/cdrom/sonycd535. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sonycd535.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Goldstar R420 CDROM support CONFIG_GSCD If this is your CDROM drive, say Y here. As described in the file linux/Documentation/cdrom/gscd, you might have to change a setting in the file linux/drivers/cdrom/gscd.h before compiling the kernel. Please read the file Documentation/cdrom/gscd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called gscd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Philips/LMS CM206 CDROM support CONFIG_CM206 If you have a Philips/LMS CDROM drive cm206 in combination with a cm260 host adapter card, say Y here. Please also read the file Documentation/cdrom/cm206. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cm206.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Optics Storage DOLPHIN 8000AT CDROM support CONFIG_OPTCD This is the driver for the 'DOLPHIN' drive with a 34-pin Sony compatible interface. It also works with the Lasermate CR328A. If you have one of those, say Y. This driver does not work for the Optics Storage 8001 drive; use the IDE-ATAPI CDROM driver for that one. Please read the file Documentation/cdrom/optcd. If you say Y here, you should also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called optcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sanyo CDR-H94A CDROM support CONFIG_SJCD If this is your CDROM drive, say Y here and read the file Documentation/cdrom/sjcd. You should then also say Y or M to "ISO 9660 CDROM filesystem support" below, because that's the filesystem used on CDROMs. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sjcd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Soft configurable cdrom interface card support CONFIG_CDI_INIT If you want to include boot-time initialization of any cdrom interface card that is software configurable, say Y here. Currently only the ISP16/MAD16/Mozart sound cards with built-in cdrom interfaces are supported. Note that the answer to this question doesn't directly affect the kernel: saying N will just cause this configure script to skip all the questions about these CDROM drives. ISP16/MAD16/Mozart soft configurable cdrom interface support CONFIG_ISP16_CDI These are sound cards with built-in cdrom interfaces using the OPTi 82C928 or 82C929 chips. Say Y here to have them detected and possibly configured at boot time. In addition, You'll have to say Y to a driver for the particular cdrom drive you have attached to the card. Read Documentation/cdrom/isp16 for details. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called isp16.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Quota support CONFIG_QUOTA If you say Y here, you will be able to set per user limits for disk usage (also called disk quotas). Currently, it works only for the ext2 filesystem. You need additional software in order to use quota support; for details, read the Quota mini-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini. Probably the quota support is only useful for multi user systems. If unsure, say N. Support for USB CONFIG_USB Universal Serial Bus (USB) is a specification for a serial bus subsystem which offers higher speeds and more features than the traditional PC serial port. The bus supplies power to peripherals and allows for hot swapping. Up to 127 USB peripherals can be connected to a single USB port in a tree structure. The USB port is the root of the tree, the peripherals are the leaves and the inner nodes are special USB devices called hubs. Many newer PC's have USB ports and newer peripherals such as scanners, keyboards, mice, modems, and printers support the USB protocol and can be connected to the PC via those ports. Say Y here if your computer has a USB port and you want to use USB devices. You then need to say Y to at least one of "UHCI support" or "OHCI support" below (the type of interface that the USB hardware in your computer provides to the operating system) and then choose from among the drivers for USB peripherals. You may want to check out the information provided in Documentation/usb/ and especially the links given in Documentation/usb/usb-help.txt. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbcore.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB verbose debug messages CONFIG_USB_DEBUG Say Y here if you want the USB core & hub drivers to produce a bunch of debug messages to the system log. Select this if you are having a problem with USB support and want to see more of what is going on. UHCI (intel PIIX4, VIA, ...) support? CONFIG_USB_UHCI The Universal Host Controller Interface is a standard by Intel for accessing the USB hardware in the PC (which is also called the USB host controller). If your USB host controller conforms to this standard, you may want to say Y, but see below. All recent boards with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX, i810, i820) conform to this standard. Also all VIA PCI chipsets (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro 133). Currently there exist two drivers for UHCI host controllers: this one and the so-called JE driver, which you can get from "UHCI alternate (JE) support", below. You need only one. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usb-uhci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. UHCI (intel PIIX4, VIA, ...) alternate (JE) support? CONFIG_USB_UHCI_ALT The Universal Host Controller Interface is a standard by Intel for accessing the USB hardware in the PC (which is also called the USB host controller). If your USB host controller conforms to this standard, you may want to say Y, but see below. All recent boards with Intel PCI chipsets (like intel 430TX, 440FX, 440LX, 440BX, i810, i820) conform to this standard. Also all VIA PCI chipsets (like VIA VP2, VP3, MVP3, Apollo Pro, Apollo Pro II or Apollo Pro 133). If unsure, say Y. Currently there exist two drivers for UHCI host controllers: this so-called JE driver, and the one you get from "UHCI support", above. You need only one. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called uhci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. UHCI unlink optimizations (EXPERIMENTAL) CONFIG_USB_UHCI_ALT_UNLINK_OPTIMIZE This option currently does nothing. You may say Y or N. OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support CONFIG_USB_OHCI The Open Host Controller Interface is a standard by Compaq/Microsoft/National for accessing the USB PC hardware (also called USB host controller). If your USB host controller conforms to this standard, say Y. The USB host controllers on most non-Intel architectures and on several x86 compatibles with non-Intel chipsets -- like SiS (aktual 610, 610 and so on) or ALi (ALi IV, ALi V, Aladdin Pro..) -- conform to this standard. You may want to read the file Documentation/usb/ohci.txt. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usb-ohci.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Human Interface Device (HID) support CONFIG_USB_HID Say Y here if you want to connect keyboards, mice, joysticks, graphic tablets, or any other HID based devices to your computer via USB. More information is available: Documentation/usb/input.txt. If unsure, say Y. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called hid.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB HIDBP Keyboard support CONFIG_USB_KBD Say Y here if you don't want to use the generic HID driver for your USB keyboard and prefer to use the keyboard in its limited Boot Protocol mode. This driver is much smaller than the HID one. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbkbd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. USB HIDBP Mouse support CONFIG_USB_MOUSE Say Y here if you don't want to use the generic HID driver for your USB mouse and prefer to use the mouse in its limited Boot Protocol mode. This driver is much smaller than the HID one. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbmouse.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Wacom Intuos/Graphire tablet support CONFIG_USB_WACOM Say Y here if you want to use the USB version of the Wacom Intuos or Graphire tablet. Make sure to say Y to "Mouse support" (CONFIG_INPUT_MOUSEDEV) and/or "Event interface support" (CONFIG_INPUT_EVDEV) as well. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wacom.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Use input layer for ADB devices CONFIG_INPUT_ADBHID Say Y here if you want to have ADB (Apple Desktop Bus) HID devices such as keyboards, mice, joysticks, or graphic tablets handled by the input layer. If you say Y here, make sure to say Y to the corresponding drivers "Keyboard support" (CONFIG_INPUT_KEYBDEV), "Mouse Support" (CONFIG_INPUT_MOUSEDEV) and "Event interface support" (CONFIG_INPUT_EVDEV) as well. If you say N here, you still have the option of using the old ADB keyboard and mouse drivers. If unsure, say Y. Logitech WingMan Force joystick support CONFIG_USB_WMFORCE Say Y here if you want to use the Logitech WingMan Force with Linux on the USB port. No force-feedback support yet, but other than that it should work like a normal joystick. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called wmforce.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Keyboard support CONFIG_INPUT_KEYBDEV Say Y here if you want your USB HID keyboard to be able to serve as a system keyboard. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called keybdev.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Mouse support CONFIG_INPUT_MOUSEDEV Say Y here if you want your USB HID mouse (or ADB mouse handled by the input layer) to be accessible as char devices 13:32+ - /dev/input/mouseX and 13:63 - /dev/input/mice as an emulated ImPS/2 mouse. That way, all user space programs will be able to use your mouse. If unsure, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mousedev.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Horizontal screen resolution CONFIG_INPUT_MOUSEDEV_SCREEN_X If you're using a digitizer, or a graphic tablet, and want to use it as a mouse then the mousedev driver needs to know the X window screen resolution you are using to correctly scale the data. If you're not using a digitizer, this value is ignored. Vertical screen resolution CONFIG_INPUT_MOUSEDEV_SCREEN_Y If you're using a digitizer, or a graphic tablet, and want to use it as a mouse then the mousedev driver needs to know the X window screen resolution you are using to correctly scale the data. If you're not using a digitizer, this value is ignored. Joystick support CONFIG_INPUT_JOYDEV Say Y here if you want your USB HID joystick or gamepad to be accessible as char device 13:0+ - /dev/input/jsX device. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called joydev.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Event interface support CONFIG_INPUT_EVDEV Say Y here if you want your USB or ADB HID device events be accessible under char device 13:64+ - /dev/input/eventX in a generic way. This is the future ... USB Scanner support CONFIG_USB_SCANNER Say Y here if you want to connect a USB scanner to your computer's USB port. Please read Documentation/usb/scanner.txt and Documentation/usb/scanner-hp-sane.txt for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called scanner.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Audio support CONFIG_USB_AUDIO Say Y here if you want to connect UAB audio equipment such as speakers to your computer's USB port. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called audio.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Modem (CDC ACM) support CONFIG_USB_ACM This driver supports USB modems and ISDN adapters which support the Communication Device Class Abstract Control Model interface. Please read Documentation/usb/acm.txt for details. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acm.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Serial converter support CONFIG_USB_SERIAL Say Y here if you have a USB device that provides normal serial ports, and you want to connect it to your USB bus. Supported devices are the Tech WhiteHEAT multi-port USB to serial converter, and the FTDI or Keyspan single port USB to serial converter Handspring Visor. In addition to saying Y here, you need to say Y to the driver for your specific hardware below. Some other devices may also be used if you say Y to "USB Generic Serial Driver", below. Please read Documentation/usb/usb-serial.txt for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usbserial.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Generic Serial Driver CONFIG_USB_SERIAL_GENERIC Say Y here if you want to use the generic USB serial driver. Please read Documentation/usb/usb-serial.txt for more information on using this driver. It is recommended that the "USB Serial converter support" be compiled as a module for this driver to be used properly. USB ConnectTech WhiteHEAT Serial Driver CONFIG_USB_SERIAL_WHITEHEAT Say Y here if you want to use a ConnectTech WhiteHEAT 4 port USB to serial converter device. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called whiteheat.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Handspring Visor Driver CONFIG_USB_SERIAL_VISOR Say Y here if you want to connect to your HandSpring Visor through its USB docking station. See http://usbvisor.sourceforge.net for more information on using this driver. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called visor.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Belkin and Paracom Single Port Serial Driver CONFIG_USB_SERIAL_BELKIN Say Y here if you want to use a Belkin USB Serial single port adaptor (F5U103 is one of the model numbers) or the Peracom single port USB to serial adapter. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called belkin_sa.o. If you want to compile it as a module, say M here and read . USB FTDI Single Port Serial Driver CONFIG_USB_SERIAL_FTDI_SIO Say Y here if you want to use a FTDI SIO single port USB to serial converter device. The implementation I have is called the USC-1000. See http://reality.sgi.com/bryder_wellington/ftdi_sio for more information on this driver and the device. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ftdi_sio.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Keyspan PDA Single Port Serial Driver CONFIG_USB_SERIAL_KEYSPAN_PDA Say Y here if you want to use a Keyspan PDA single port USB to serial converter device. This driver makes use of firmware developed from scratch by Brian Warner. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called keyspan_pda.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Keyspan USA-xxx Serial Driver CONFIG_USB_SERIAL_KEYSPAN Say Y here if you want to use Keyspan USB to serial converter devices. This driver makes use of Keyspan's official firmware and was developed with their support. You must also include firmware to support your particular device(s). See http://www.linuxcare.com.au/hugh/keyspan.html for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called keyspan.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Keyspan USA-28 Firmware CONFIG_USB_SERIAL_KEYSPAN_USA28 Say Y here to include firmware for the USA-28 converter. USB Keyspan USA-28X Firmware CONFIG_USB_SERIAL_KEYSPAN_USA28X Say Y here to include firmware for the USA-28X converter. USB Keyspan USA-19 Firmware CONFIG_USB_SERIAL_KEYSPAN_USA19 Say Y here to include firmware for the USA-19 converter. USB Keyspan USA-18X Firmware CONFIG_USB_SERIAL_KEYSPAN_USA18X Say Y here to include firmware for the USA-18X converter. USB Keyspan USA-19W Firmware CONFIG_USB_SERIAL_KEYSPAN_USA19W Say Y here to include firmware for the USA-19W converter. USB Keyspan USA-49W Firmware CONFIG_USB_SERIAL_KEYSPAN_USA49W Say Y here to include firmware for the USA-49W converter. USB ZyXEL omni.net LCD Plus Driver CONFIG_USB_SERIAL_OMNINET Say Y here if you want to use a ZyXEL omni.net LCD ISDN TA. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called omninet.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Digi International AccelePort USB Serial Driver CONFIG_USB_SERIAL_DIGI_ACCELEPORT Say Y here if you want to use Digi AccelePort USB 2 or 4 devices, 2 port (plus parallel port) and 4 port USB serial converters. The parallel port on the USB 2 appears as a third serial port on Linux. The Digi Acceleport USB 8 is not yet supported by this driver. This driver works under SMP with the usb-uhci driver. It does not work under SMP with the uhci driver. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called digi_acceleport.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Empeg empeg-car Mark I/II Driver CONFIG_USB_SERIAL_EMPEG Say Y here if you want to connect to your Empeg empeg-car Mark I/II mp3 player via USB. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called empeg.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB MCT Single Port Serial Driver CONFIG_USB_SERIAL_MCT_U232 Say Y here if you want to use a USB Serial single port adapter from Magic Control Technology Corp. (U232 is one of the model numbers). This driver also works with Sitecom U232-P25 and D-Link DU-H3SP USB BAY devices. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mct_u232.o. If you want to compile it as a module, say M here and read . USB Edgeport Serial Driver CONFIG_USB_SERIAL_EDGEPORT Say Y here if you want to use any of the following devices from Inside Out Networks (Digi): Edgeport/4 Rapidport/4 Edgeport/4t Edgeport/2 Edgeport/4i Edgeport/2i Edgeport/421 Edgeport/21 Edgeport/8 Edgeport/8 Dual Edgeport/2D8 Edgeport/4D8 Edgeport/8i Edgeport/2 DIN Edgeport/4 DIN Edgeport/16 Dual This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called io_edgeport.o. If you want to compile it as a module, say M here and read . USB Serial Converter verbose debug CONFIG_USB_SERIAL_DEBUG Say Y here if you want verbose debug messages from the USB Serial Converter. USB Printer support CONFIG_USB_PRINTER Say Y here if you want to connect a USB printer to your computer's USB port. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called printer.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB IBM (Xirlink) C-It Camera support CONFIG_USB_IBMCAM Say Y here if you want to connect a IBM "C-It" camera, also known as "Xirlink PC Camera" to your computer's USB port. For more information, read Documentation/usb/ibmcam.txt. This driver uses the Video For Linux API. You must enable (Y or M in config) Video For Linux (under Character Devices) to use this driver. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml . This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ibmcam.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. This camera has several configuration options which can be specified when you load the module. Read Documentation/usb/ibmcam.txt to learn more. USB OV511 Camera support CONFIG_USB_OV511 Say Y here if you want to connect this type of camera to your computer's USB port. See Documentation/usb/ov511.txt for more information and for a list of supported cameras. This driver uses the Video For Linux API. You must say Y or M to "Video For Linux" (under Character Devices) to use this driver. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml . This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ov511.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB ADMtek Pegasus-based ethernet device support CONFIG_USB_PEGASUS Say Y if you want to use your USB ethernet device. Supported cards until now are: ADMtek AN986 (eval. board) Accton 10/100 Billington USB-100 Corega FEter USB-TX MELCO/BUFFALO LUA-TX D-Link DSB-650TX, DSB-650TX-PNA, DSB-650, DU-E10, DU-E100 Linksys USB100TX, USB10TX LANEED Ethernet LD-USB/TX SMC 202 SOHOware NUB Ethernet If you have devices with vendor IDs other than noted above you should add them in the driver code and send a message to me (petkan@dce.bg) for update. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called pegasus.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Kodak DC-2xx Camera support CONFIG_USB_DC2XX Say Y here if you want to connect this type of still camera to your computer's USB port. See Documentation/usb/dc2xx.txt for more information; some non-Kodak cameras may also work with this driver, given application support (such as www.gPhoto.org). This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dc2xx.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Mustek MDC800 Digital Camera Support CONFIG_USB_MDC800 Say Y here if you want to connect this type of still camera to your computer's USB port. This driver can be used with gphoto 0.4.3 and higher (look at http://www.gphoto.org ). To use it create a device node with "mknod /dev/mustek c 180 32" and configure it in your software. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mdc800.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Mass Storage support CONFIG_USB_STORAGE Say Y here if you want to connect USB mass storage devices to your computer's USB port. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called usb-storage.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Mass Storage verbose debug CONFIG_USB_STORAGE_DEBUG Say Y here in order to have the USB Mass Storage code generate verbose debugging messages. USS720 parport driver CONFIG_USB_USS720 This driver is for USB parallel port adapters that use the Lucent Technologies USS-720 chip. These cables are plugged into your USB port and provide USB compatibility to peripherals designed with parallel port interfaces. The chip has two modes: automatic mode and manual mode. In automatic mode, it looks to the computer like a standard USB printer. Only printers may be connected to the USS-720 in this mode. The generic USB printer driver ("USB Printer support", above) may be used in that mode, and you can say N here if you want to use the chip only in this mode. Manual mode is not limited to printers, any parallel port device should work. This driver utilizes manual mode. Note however that some operations are three orders of magnitude slower than on a PCI/ISA Parallel Port, so timing critical applications might not work. Say Y here if you own an USS-720 USB->Parport cable and intend to connect anything other than a printer to it. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called uss720.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB device file system CONFIG_USB_DEVICEFS If you say Y here (and to "/proc file system support" below), you will get a file /proc/usb/devices which lists the devices currently connected to your USB busses, a file /proc/usb/drivers which lists the USB kernel client drivers currently loaded, and for every connected device a file named "/proc/usb/xxx/yyy", where xxx is the bus number and yyy the device number; the latter files can be used by user space programs to talk directly to the device. These files are "virtual", meaning they are generated on the fly and not stored on the hard drive. For the format of the /proc/usb/ files, please read Documentation/usb/proc_usb_info.txt. Please note that this code is completely unrelated to devfs, the "/dev file system support". Most users want to say Y here. Support for hot-pluggable USB devices CONFIG_HOTPLUG Say Y here if you want to plug devices into your computer while the system is running, and be able to use them quickly. In many cases, the devices can likewise be unplugged at any time too. Enable this with KMOD, and your kernel will automatically call out to a user mode "policy agent" to load drivers and other modules needed to use USB devices you plug in. With a bit of work, it can invoke other device setup tasks. Get such agent software (at http://www.linux-usb.org/policy.html) and install it. USB Bandwidth allocation CONFIG_USB_BANDWIDTH If you say Y here, the USB subsystem enforces USB bandwidth allocation and will prevent some device opens from succeeding if they would cause USB bandwidth usage to go above 90% of the bus bandwidth. If you say N here, these conditions will cause warning messages about USB bandwidth usage to be logged and some devices or drivers may not work correctly. DABUSB driver CONFIG_USB_DABUSB A Digital Audio Broadcasting (DAB) Receiver for USB and Linux brought to you by the DAB-Team (http://dab.in.tum.de). This driver can be taken as an example for URB-based bulk, control, and isochronous transactions. URB's are explained in Documentation/usb/URB.txt. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dabusb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. PLUSB driver CONFIG_USB_PLUSB A driver for the Prolific PL-2302 USB-to-USB network device. This 'USB cable' connects two hosts via a point-to-point network with bandwidth of 5 Mbit/s. Configure this driver after connecting the USB cable via ifconfig plusb0 10.0.0.1 pointopoint 10.0.0.2 (and vice versa on the other host). This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called plusb.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. USB Diamond Rio500 support CONFIG_USB_RIO500 Say Y here if you want to connect a USB Rio500 mp3 player to your computer's USB port. Please read Documentation/usb/rio.txt for more information. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called rio500.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. D-Link DSB-R100 FM radio support CONFIG_USB_DSBR Say Y here if you want to connect this type of radio to your computer's USB port. Note that the audio is not digital, and you must connect the line out connector to a sound card or a set of speakers. This driver uses the Video For Linux API. You must enable (Y or M in config) Video For Linux (under Character Devices) to use this driver. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml . This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called dsbr100.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Microtek USB scanner support CONFIG_USB_MICROTEK Say Y here if you want support for the Microtek X6USB and possibly some other scanners by that vendor. The scanner will appear as a scsi generic device to the rest of the system. A patched version of SANE is necessary to use the scanner. It's available at http://fachschaft.cup.uni-muenchen.de/~neukum/scanner.html This driver can be compiled as a module. USB Bluetooth support CONFIG_USB_BLUETOOTH Say Y here if you want to connect a USB Bluetooth device to your computer's USB port. You will need the Bluetooth stack (available at http://developer.axis.com/software/index.shtml) to fully use the device. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called bluetooth.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Kawasaki USB ethernet controller support CONFIG_USB_KAWETH Say Y here if you want support for devices based on the Kawasaki LSI KL5KUSB100 USB to Ethernet 1-Chip Controller, such as the NetGear EA101 USB to Ethernet Adapter. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called kaweth.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Minix fs support CONFIG_MINIX_FS Minix is a simple operating system used in many classes about OS's. The minix filesystem (method to organize files on a hard disk partition or a floppy disk) was the original filesystem for Linux, but has been superseded by the second extended filesystem ext2fs. You don't want to use the minix filesystem on your hard disk because of certain built-in restrictions, but it is sometimes found on older Linux floppy disks. This option will enlarge your kernel by about 25 kB. If unsure, say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called minix.o. Note that the filesystem of your root partition (the one containing the directory /) cannot be compiled as a module. Second extended fs support CONFIG_EXT2_FS This is the de facto standard Linux filesystem (method to organize files on a storage device) for hard disks. You want to say Y here, unless you intend to use Linux exclusively from inside a DOS partition using the umsdos filesystem. The advantage of the latter is that you can get away without repartitioning your hard drive (which often implies backing everything up and restoring afterwards); the disadvantage is that Linux becomes susceptible to DOS viruses and that umsdos is somewhat slower than ext2fs. Even if you want to run Linux in this fashion, it might be a good idea to have ext2fs around: it enables you to read more floppy disks and facilitates the transition to a *real* Linux partition later. Another (rare) case which doesn't require ext2fs is a diskless Linux box which mounts all files over the network using NFS (in this case it's sufficient to say Y to "NFS filesystem support" below). Saying Y here will enlarge your kernel by about 41 kB. The Ext2fs-Undeletion mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini, gives information about how to retrieve deleted files on ext2fs filesystems. To change the behavior of ext2 filesystems, you can use the tune2fs utility ("man tune2fs"). To modify attributes of files and directories on ext2 filesystems, use chattr ("man chattr"). Ext2fs partitions can be read from within DOS using the ext2tool command line tool package (available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/system/filesystems/ext2) and from within Windows NT using the ext2nt command line tool package from ftp://metalab.unc.edu/pub/Linux/utils/dos. Explore2fs is a graphical explorer for ext2fs partitions which runs on Windows 95 and Windows NT and includes experimental write support; it is available from http://jnewbigin-pc.it.swin.edu.au/Linux/Explore2fs.htm. If you want to compile this filesystem as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ext2.o. Be aware however that the filesystem of your root partition (the one containing the directory /) cannot be compiled as a module, and so this could be dangerous. Most everyone wants to say Y here. ISO 9660 CDROM filesystem support CONFIG_ISO9660_FS This is the standard filesystem used on CDROMs. It was previously known as "High Sierra Filesystem" and is called "hsfs" on other Unix systems. The so-called Rock-Ridge extensions which allow for long Unix filenames and symbolic links are also supported by this driver. If you have a CDROM drive and want to do more with it than just listen to audio CDs and watch its LEDs, say Y (and read Documentation/filesystems/isofs.txt and the CDROM-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO), thereby enlarging your kernel by about 27 kB; otherwise say N. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called isofs.o. Microsoft Joliet cdrom extensions CONFIG_JOLIET Joliet is a Microsoft extension for the ISO 9660 CDROM filesystem which allows for long filenames in unicode format (unicode is the new 16 bit character code, successor to ASCII, which encodes the characters of almost all languages of the world; see http://www.unicode.org for more information; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). Say Y here if you want to be able to read Joliet CDROMs under Linux. fat fs support CONFIG_FAT_FS If you want to use one of the FAT-based filesystems (the MS-DOS, VFAT (Windows 95) and UMSDOS (used to run Linux on top of an ordinary DOS partition) filesystems), then you must say Y or M here to include FAT support. You will then be able to mount partitions or diskettes with FAT-based filesystems and transparently access the files on them, i.e. MSDOS files will look and behave just like all other Unix files. This FAT support is not a filesystem in itself, it only provides the foundation for the other filesystems. You will have to say Y or M to at least one of "msdos fs support" or "vfat fs support" in order to make use of it. Another way to read and write MSDOS floppies and hard drive partitions from within Linux (but not transparently) is with the mtools ("man mtools") program suite. This doesn't require the FAT filesystem support. It is now also becoming possible to read and write compressed FAT filesystems; read Documentation/filesystems/fat_cvf.txt for details. The FAT support will enlarge your kernel by about 24 kB. If unsure, say Y. If you want to compile this as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called fat.o. Note that if you compile the FAT support as a module, you cannot compile any of the FAT-based filesystems into the kernel -- they will have to be modules as well. The filesystem of your root partition (the one containing the directory /) cannot be a module, so don't say M here if you intend to use UMSDOS as your root filesystem. msdos fs support CONFIG_MSDOS_FS This allows you to mount MSDOS partitions of your hard drive (unless they are compressed; to access compressed MSDOS partitions under Linux, you can either use the DOS emulator DOSEMU, described in the DOSEMU-HOWTO, available via FTP (user: anonymous) at ftp://metalab.unc.edu/pub/Linux/docs/HOWTO, or try dmsdosfs in ftp://metalab.unc.edu/pub/Linux/system/filesystems/dosfs. If you intend to use dosemu with a non-compressed MSDOS partition, say Y here) and MSDOS floppies. This means that file access becomes transparent, i.e. the MSDOS files look and behave just like all other Unix files. If you want to use umsdos, the Unix-like filesystem on top of DOS, which allows you to run Linux from within a DOS partition without repartitioning, you'll have to say Y or M here. If you have Windows 95 or Windows NT installed on your MSDOS partitions, you should use the VFAT filesystem (say Y to "vfat fs support" below), or you will not be able to see the long filenames generated by Windows 95 / Windows NT. This option will enlarge your kernel by about 7 kB. If unsure, answer Y. This will only work if you said Y to "fat fs support" as well. If you want to compile this as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called msdos.o. vfat fs support CONFIG_VFAT_FS This option provides support for normal Windows filesystems with long filenames. That includes non-compressed FAT-based filesystems used by Windows 95, Windows 98, Windows NT 4.0, and mtools. You cannot use the VFAT filesystem for your Linux root partition (the one containing the directory /); use UMSDOS instead if you want to run Linux from within a DOS partition (i.e. say Y to "umsdos: Unix like fs on top of std MSDOS fs", below). The VFAT support enlarges your kernel by about 10 kB and it only works if you said Y to the "fat fs support" above. Please read the file Documentation/filesystems/vfat.txt for details. If unsure, say Y. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called vfat.o. umsdos: Unix like fs on top of std MSDOS fs CONFIG_UMSDOS_FS Say Y here if you want to run Linux from within an existing DOS partition of your hard drive. The advantage of this is that you can get away without repartitioning your hard drive (which often implies backing everything up and restoring afterwards) and hence you're able to quickly try out Linux or show it to your friends; the disadvantage is that Linux becomes susceptible to DOS viruses and that UMSDOS is somewhat slower than ext2fs. Another use of UMSDOS is to write files with long unix filenames to MSDOS floppies; it also allows Unix-style softlinks and owner/permissions of files on MSDOS floppies. You will need a program called umssync in order to make use of umsdos; read Documentation/filesystems/umsdos.txt. This option enlarges your kernel by about 25 kB and it only works if you said Y to both "fat fs support" and "msdos fs support" above. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called umsdos.o. Note that the filesystem of your root partition (the one containing the directory /) cannot be a module, so saying M could be dangerous. If unsure, say N. /proc filesystem support CONFIG_PROC_FS This is a virtual filesystem providing information about the status of the system. "Virtual" means that it doesn't take up any space on your hard disk: the files are created on the fly by the kernel when you try to access them. Also, you cannot read the files with older version of the program less: you need to use more or cat. It's totally cool; for example, "cat /proc/interrupts" gives information about what the different IRQs are used for at the moment (there is a small number of Interrupt ReQuest lines in your computer that are used by the attached devices to gain the CPU's attention -- often a source of trouble if two devices are mistakenly configured to use the same IRQ). The /proc filesystem is explained in the file Documentation/proc.txt, in the Kernel Hacker's Guide at http://www.redhat.com:8080/HyperNews/get/khg.html on the WWW (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape), and also on the proc(8) manpage ("man 8 proc"). This option will enlarge your kernel by about 18 KB. Several programs depend on this, so everyone should say Y here. NFS filesystem support CONFIG_NFS_FS If you are connected to some other (usually local) Unix computer (using SLIP, PLIP, PPP or Ethernet) and want to mount files residing on that computer (the NFS server) using the Network File Sharing protocol, say Y. "Mounting files" means that the client can access the files with usual UNIX commands as if they were sitting on the client's hard disk. For this to work, the server must run the programs nfsd and mountd (but does not need to have NFS filesystem support enabled in its kernel). NFS is explained in the Network Administrator's Guide, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/LDP, on its man page: "man nfs", and in the NFS-HOWTO. A superior but less widely used alternative to NFS is provided by the Coda filesystem; see "Coda filesystem support" below. If you say Y here, you should have said Y to TCP/IP networking also. This option would enlarge your kernel by about 27 kB. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called nfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you are configuring a diskless machine which will mount its root filesystem over NFS at boot time, say Y here and to "IP: kernel level autoconfiguration" above and to "Root file system on NFS" below. You cannot compile this driver as a module in this case. There are two packages designed for booting diskless machines over the net: netboot and etherboot, both available via FTP from ftp://metalab.unc.edu/pub/Linux/system/boot/ethernet/ . If you don't know what all this is about, say N. Provide NFS over TCP server support DEVELOPER ONLY CONFIG_NFSD_TCP If you are a developer and want to work on fixing problems with NFS server over TCP support, say Y here. If unsure, say N. Some problems can be found by looking for FIXME in net/sunrpc/svcsock.c Provide NFSv3 client support CONFIG_NFS_V3 Say Y here if you want your NFS client to be able to speak the newer version 3 of the NFS protocol. If unsure, say N. Root file system on NFS CONFIG_ROOT_NFS If you want your Linux box to mount its whole root filesystem (the one containing the directory /) from some other computer over the net via NFS (presumably because your box doesn't have a hard disk), say Y. Read Documentation/nfsroot.txt for details. It is likely that in this case, you also want to say Y to "IP: kernel level autoconfiguration" so that your box can discover its network address at boot time. Most people say N here. NFS server support CONFIG_NFSD If you want your Linux box to act as an NFS *server*, so that other computers on your local network which support NFS can access certain directories on your box transparently, you have two options: you can use the self-contained user space program nfsd, in which case you should say N here, or you can say Y and use the kernel based NFS server. The kernel based solution is faster and is now the recommended solution: no further development is occurring on the userspace server and support of it may be discontinued in future. In either case, you will need support software; the respective locations are given in the file Documentation/Changes in the NFS section. Please read the NFS-HOWTO, available from http://www.linuxdoc.org/HOWTO/NFS-HOWTO.html . The NFS server is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called nfsd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Provide NFSv3 server support CONFIG_NFSD_V3 If you would like to include the NFSv3 server as well as the NFSv2 server, say Y here. File locking, via the NLMv4 protocol, is also supported. If unsure, say N. OS/2 HPFS filesystem support (read only) CONFIG_HPFS_FS OS/2 is IBM's operating system for PC's, the same as Warp, and HPFS is the filesystem used for organizing files on OS/2 hard disk partitions. Say Y if you want to be able to read files from an OS/2 HPFS partition of your hard drive. OS/2 floppies however are in regular MSDOS format, so you don't need this option in order to be able to read them. Read Documentation/filesystems/hpfs.txt. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hpfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Windows NT NTFS support (read only) CONFIG_NTFS_FS NTFS is the file system of Microsoft Windows NT. Say Y if you want to get read access to files on NTFS partitions of your hard drive. The Linux NTFS driver supports most of the mount options of the VFAT driver, see Documentation/filesystems/ntfs.txt. Saying Y here will give you read-only access to NTFS partitions. This code is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called ntfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. NTFS read-write support (DANGEROUS) CONFIG_NTFS_RW If you say Y here, you will (maybe) be able to write to NTFS file systems as well as read from them. The read-write support in NTFS is far from being complete and is not well tested. If you enable this, back up your NTFS volume first since it may get damaged. Also, make sure to run chkdsk from within Microsoft Windows NT after having performed any writes to a NTFS partition from Linux to detect any problems as early as possible. Please note that write support is limited to Windows NT4 and earlier versions. If unsure, say N. System V, Version 7 and Coherent filesystem support CONFIG_SYSV_FS SCO, Xenix and Coherent are commercial Unix systems for Intel machines, and Version 7 was used on the DEC PDP-11. Saying Y here would allow you to read to and write from their floppies and hard disk partitions. If you have floppies or hard disk partitions like that, it is likely that they contain binaries from those other Unix systems; in order to run these binaries, you will want to install iBCS2 (Intel Binary Compatibility Standard is a kernel module which lets you run SCO, Xenix, Wyse, UnixWare, Dell Unix and System V programs under Linux and is often needed to run commercial software that's only available for those systems. It's available via FTP (user: anonymous) from ftp://tsx-11.mit.edu/pub/linux/BETA). If you only intend to mount files from some other Unix over the network using NFS, you don't need the System V filesystem support (but you need NFS filesystem support obviously). Note that this option is generally not needed for floppies, since a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). Note also that this option has nothing whatsoever to do with the option "System V IPC". Read about the System V filesystem in Documentation/filesystems/sysv-fs.txt. Saying Y here will enlarge your kernel by about 34 KB. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called sysv.o. If you haven't heard about all of this before, it's safe to say N. Amiga FFS filesystem support CONFIG_AFFS_FS The Fast File System (FFS) is the common filesystem used on hard disks by Amiga(tm) systems since AmigaOS Version 1.3 (34.20). Say Y if you want to be able to read and write files from and to an Amiga FFS partition on your hard drive. Amiga floppies however cannot be read with this driver due to an incompatibility of the floppy controller used in an Amiga and the standard floppy controller in PCs and workstations. Read Documentation/filesystems/affs.txt and fs/affs/Changes. With this driver you can also mount disk files used by Bernd Schmidt's Un*X Amiga Emulator (http://www.freiburg.linux.de/~uae/; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to do this, you will also need to say Y or M to "Loop device support", above. This filesystem is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called affs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. Apple Macintosh filesystem support (experimental) CONFIG_HFS_FS If you say Y here, you will be able to mount Macintosh-formatted floppy disks and hard drive partitions with full read-write access. Please read fs/hfs/HFS.txt to learn about the available mount options. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. ROM filesystem support CONFIG_ROMFS_FS This is a very small read-only filesystem mainly intended for initial ram disks of installation disks, but it could be used for other read-only media as well. Read Documentation/filesystems/romfs.txt for details. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called romfs.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you don't know whether you need it, then you don't need it: answer N. QNX4 filesystem support (EXPERIMENTAL) CONFIG_QNX4FS_FS This is the filesystem used by the operating system QNX 4. Say Y if you intend to mount QNX hard disks or floppies. Unless you say Y to "QNX4FS write support" below, you will only be able to read these filesystems. This filesystem support is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called qnx4.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you don't know whether you need it, then you don't need it: answer N. QNX4FS write support (DANGEROUS) CONFIG_QNX4FS_RW Say Y if you want to test write support for QNX4 filesystems. Kernel automounter support CONFIG_AUTOFS_FS The automounter is a tool to automatically mount remote filesystems on demand. This implementation is partially kernel-based to reduce overhead in the already-mounted case; this is unlike the BSD automounter (amd), which is a pure user space daemon. To use the automounter you need the user-space tools from ftp://ftp.kernel.org/pub/linux/daemons/autofs; you also want to answer Y to "NFS filesystem support", below. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called autofs.o. If you are not a part of a fairly large, distributed network, you probably do not need an automounter, and can say N here. UFS filesystem support CONFIG_UFS_FS BSD and derivate versions of Unix (such as SunOS, FreeBSD, NetBSD, OpenBSD and NeXTstep) use a filesystem called UFS. Some System V Unixes can create and mount hard disk partitions and diskettes using this filesystem as well. Saying Y here will allow you to read from these partitions; if you also want to write to them, say Y to the experimental "UFS filesystem write support", below. Please read the file Documentation/filesystems/ufs.txt for more information. If you only intend to mount files from some other Unix over the network using NFS, you don't need the UFS filesystem support (but you need NFS filesystem support obviously). Note that this option is generally not needed for floppies, since a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). When accessing NeXTstep files, you may need to convert them from the NeXT character set to the Latin1 character set; use the program recode ("info recode") for this purpose. If you want to compile the UFS filesystem support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ufs.o. If you haven't heard about all of this before, it's safe to say N. UFS filesystem write support (experimental) CONFIG_UFS_FS_WRITE Say Y here if you want to try writing to UFS partitions. This is experimental, so you should back up your UFS partitions beforehand. EFS filesystem support (experimental) CONFIG_EFS_FS EFS is the filesystem used for CDROMs and filesystems by SGI's IRIX. This implementation only offers read-only access. If you don't know what all this is about, it's safe to say N. For more information about EFS see it's homepage at http://aeschi.ch.eu.org/efs. SGI disklabel support CONFIG_SGI_DISKLABEL Say Y to this only if you plan on mounting disks with SGI disklabels. This is not required to mount EFS-format CDROMs. BSD disklabel (FreeBSD partition tables) support CONFIG_BSD_DISKLABEL FreeBSD uses its own hard disk partition scheme on your PC. It requires only one entry in the primary partition table of your disk and manages it similarly to DOS extended partitions, putting in its first sector a new partition table in BSD disklabel format. Saying Y here allows you to read these disklabels and further mount FreeBSD partitions from within Linux if you have also said Y to "UFS filesystem support", above. If you don't know what all this is about, say N. SMD disklabel (Sun partition tables) support CONFIG_SMD_DISKLABEL Like most systems, SunOS uses its own hard disk partition table format, incompatible with all others. Saying Y here allows you to read these partition tables and further mount SunOS disks from within Linux if you have also said Y to "UFS filesystem support", above. This is mainly used to carry data from a SPARC under SunOS to your Linux box via a removable medium like magneto-optical or ZIP drives; note however that a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). If you don't know what all this is about, say N. Solaris (x86) partition table support CONFIG_SOLARIS_X86_PARTITION Like most systems, Solaris x86 uses its own hard disk partition table format, incompatible with all others. Saying Y here allows you to read these partition tables and further mount Solaris x86 disks from within Linux if you have also said Y to "UFS filesystem support", above. ADFS filesystem support (read only) (EXPERIMENTAL) CONFIG_ADFS_FS The Acorn Disc Filing System is the standard filesystem of the RiscOS operating system which runs on Acorn's ARM-based Risc PC systems and the Acorn Archimedes range of machines. If you say Y here, Linux will be able to read from ADFS partitions on hard drives and from ADFS-formatted floppy discs. The ADFS partition should be the first partition (i.e., /dev/[hs]d?1) on each of your drives. This code is also available as a module called adfs.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. If unsure, say N. /dev/pts filesystem for Unix98 PTYs CONFIG_DEVPTS_FS You should say Y here if you said Y to "Unix98 PTY support" above. You'll then get a virtual filesystem which can be mounted on /dev/pts with "mount -t devpts". This, together with the pseudo terminal master multiplexer /dev/ptmx, is used for pseudo terminal support as described in The Open Group's Unix98 standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseudo terminal is then made available to the process and the pseudo terminal slave can be accessed as /dev/pts/. What was traditionally /dev/ttyp2 will then be /dev/pts/2, for example. The GNU C library glibc 2.1 contains the requisite support for this mode of operation; you also need client programs that use the Unix98 API. UnixWare slices support (EXPERIMENTAL) CONFIG_UNIXWARE_DISKLABEL Like some systems, UnixWare uses its own slice table inside a partition (VTOC - Virtual Table of Contents). Its format is incompatible with all other OSes. Saying Y here allows you to read VTOC and further mount UnixWare partitions read-only from within Linux if you have also said Y to "UFS filesystem support" or "System V and Coherent filesystem support", above. This is mainly used to carry data from a UnixWare box to your Linux box via a removable medium like magneto-optical, ZIP or removable IDE drives. Note, however, that a good portable way to transport files and directories between unixes (and even other operating systems) is given by the tar program ("man tar" or preferably "info tar"). If you don't know what all this is about, say N. Macintosh partition map support CONFIG_MAC_PARTITION Say Y here if you want your Linux system to be able to read the partition tables of Macintosh hard drives, and thus use partitions on those drives. Minix subpartition support CONFIG_MINIX_SUBPARTITION Minix 2.0.0/2.0.2 subpartition table support for Linux. Say Y here if you want to mount and use Minix 2.0.0/2.0.2 subpartitions. SMB filesystem support (to mount Windows shares etc...) CONFIG_SMB_FS SMB (Server Message Block) is the protocol Windows for Workgroups (WfW), Windows 95/98, Windows NT and OS/2 Lan Manager use to share files and printers over local networks. Saying Y here allows you to mount their filesystems (often called "shares" in this context) and access them just like any other Unix directory. Currently, this works only if the Windows machines use TCP/IP as the underlying transport protocol, and not NetBEUI. For details, read Documentation/filesystems/smbfs.txt and the SMB-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. Note: if you just want your box to act as an SMB *server* and make files and printing services available to Windows clients (which need to have a TCP/IP stack), you don't need to say Y here; you can use the program samba (available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/system/network/samba) for that. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile the SMB support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called smbfs.o. Most people say N, however. use nls by default CONFIG_SMB_NLS_DEFAULT Enabling this will make smbfs use nls translations by default. You need to specify the local charset (CONFIG_NLS_DEFAULT) in the nls settings and you need to give the default nls for the SMB server as CONFIG_SMB_NLS_REMOTE. nls support setting CONFIG_SMB_NLS_REMOTE This setting allows you to specify a default value for which codepage the server uses. If this field is left blank no translations will be done. The local codepage/charset default to CONFIG_NLS_DEFAULT, you need to set that value in the NLS menu. Coda filesystem support CONFIG_CODA_FS Coda is an advanced network filesystem, similar to NFS in that it enables you to mount filesystems of a remote server and access them with regular Unix commands as if they were sitting on your hard disk. Coda has several advantages over NFS: support for disconnected operation (e.g. for laptops), read/write server replication, security model for authentication and encryption, persistent client caches and write back caching. If you say Y here, your Linux box will be able to act as a Coda *client*. You will need user level code as well, both for the client and server. Servers are currently user level, i.e. need no kernel support. Please read Documentation/filesystems/coda.txt and check out the Coda home page http://www.coda.cs.cmu.edu (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile the coda client support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called coda.o. NCP filesystem support (to mount NetWare volumes) CONFIG_NCP_FS NCP (NetWare Core Protocol) is a protocol that runs over IPX and is used by Novell NetWare clients to talk to file servers. It is to IPX what NFS is to TCP/IP, if that helps. Saying Y here allows you to mount NetWare file server volumes and to access them just like any other Unix directory. For details, please read the file Documentation/filesystems/ncpfs.txt in the kernel source and the IPX-HOWTO on ftp://metalab.unc.edu/pub/Linux/docs/howto. You do not have to say Y here if you want your Linux box to act as a file *server* for Novell NetWare clients. General information about how to connect Linux, Windows machines and Macs is on the WWW at http://www.eats.com/linux_mac_win.html (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called ncpfs.o. Say N unless you are connected to a Novell network. Packet signatures CONFIG_NCPFS_PACKET_SIGNING NCP allows packets to be signed for stronger security. If you want security, say Y. Normal users can leave it off. To be able to use packet signing you must use ncpfs > 2.0.12. Proprietary file locking CONFIG_NCPFS_IOCTL_LOCKING Allows locking of records on remote volumes. Say N unless you have special applications which are able to utilize this locking scheme. Clear remove/delete inhibit when needed CONFIG_NCPFS_STRONG Allows manipulation of files flagged as Delete or Rename Inhibit. To use this feature you must mount volumes with the ncpmount parameter "-s" (ncpfs-2.0.12 and newer). Say Y unless you are not mounting volumes with -f 444. Use NFS namespace when available CONFIG_NCPFS_NFS_NS Allows you to utilize NFS namespace on NetWare servers. It brings you case sensitive filenames. Say Y. You can disable it at mount-time with the `-N nfs' parameter of ncpmount. Use OS2/LONG namespace when available CONFIG_NCPFS_OS2_NS Allows you to utilize OS2/LONG namespace on NetWare servers. Filenames in this namespace are limited to 255 characters, they are case insensitive, and case in names is preserved. Say Y. You can disable it at mount time with the -N os2 parameter of ncpmount. Lowercase DOS filenames on LONG namespace volume CONFIG_NCPFS_SMALLDOS If you say Y here, every filename on a NetWare server volume using the OS2/LONG namespace will be converted to lowercase characters. (For regular NetWare file server volumes with DOS namespace, this is done automatically, even if you say N here.) Saying N here will give you these filenames in uppercase. This is only a cosmetic option since the OS2/LONG namespace is case insensitive. The only major reason for this option is backward compatibility when moving from DOS to OS2/LONG namespace support. Long filenames (created by Win95) will not be affected. This option does not solve the problem that filenames appear differently under Linux and under Windows, since Windows does an additional conversions on the client side. You can achieve similar effects by saying Y to "Allow using of Native Language Support" below. Allow mounting of volume subdirectories CONFIG_NCPFS_MOUNT_SUBDIR Allows you to mount not only whole servers or whole volumes, but also subdirectories from a volume. It can be used to reexport data and so on. There is no reason to say N, so Y is recommended unless you count every byte. To utilize this feature you must use ncpfs-2.0.12 or newer. NDS interserver authentication domains CONFIG_NCPFS_NDS_DOMAINS This allows storing NDS private keys in kernel space where they can be used to authenticate another server as interserver NDS accesses need it. You must use ncpfs-2.0.12.1 or newer to utilize this feature. Say Y if you are using NDS connections to NetWare servers. Do not say Y if security is primary for you because root can read your session key (from /proc/kcore). Allow using of Native Language Support CONFIG_NCPFS_NLS Allows you to use codepages and I/O charsets for file name translation between the server file system and input/output. This may be useful, if you want to access the server with other operating systems, e.g. Windows 95. See also NLS for more Information. To select codepages and I/O charsets use ncpfs-2.2.0.13 or newer. Symbolic links and mode permission bits CONFIG_NCPFS_EXTRAS This enables the use of symbolic links and an execute permission bit on NCPFS. The file server need not have long name space or NFS name space loaded for these to work. To use the new attributes, it is recommended to use the flags '-f 600 -d 755' on the ncpmount command line. nls default codepage CONFIG_NLS_DEFAULT The default NLS used when mounting filesystem. Currently, the valid values are cp437, cp737, cp775, cp850, cp852, cp855, cp857, cp860, cp861, cp862, cp863, cp864, cp865, cp866, cp869, cp874, cp932, cp936, cp949, cp950, iso8859-1, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-9, iso8859-14, iso8859-15, koi8-r. If you specify a wrong value, it will use the built-in NLS; compatible with iso8859-1. If unsure, specify it as "cp437". nls codepage 437 CONFIG_NLS_CODEPAGE_437 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used in the United States and parts of Canada. This is recommended. nls codepage 737 CONFIG_NLS_CODEPAGE_737 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for Greek. If unsure, say N. nls codepage 775 CONFIG_NLS_CODEPAGE_775 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for the Baltic Rim Languages. If unsure, say N. nls codepage 850 CONFIG_NLS_CODEPAGE_850 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage that is used for much of Europe -- United Kingdom, Germany, Spain, Italy, and [add more countries here]. It has some characters useful to many European languages that are not part of the US codepage 437. If unsure, say Y. nls codepage 852 CONFIG_NLS_CODEPAGE_852 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the Latin 2 codepage used by DOS for much of Central and Eastern Europe. It has all the required characters for these languages: Albanian, Croatian, Czech, English, Finnish, Hungarian, Irish, German, Polish, Romanian, Serbian (Latin transcription), Slovak, Slovenian, and Sorbian. nls codepage 855 CONFIG_NLS_CODEPAGE_855 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Cyrillic. nls codepage 857 CONFIG_NLS_CODEPAGE_857 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Turkish. nls codepage 860 CONFIG_NLS_CODEPAGE_860 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Portuguese. nls codepage 861 CONFIG_NLS_CODEPAGE_861 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Icelandic. nls codepage 862 CONFIG_NLS_CODEPAGE_862 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Hebrew. nls codepage 863 CONFIG_NLS_CODEPAGE_863 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Canadian French. nls codepage 864 CONFIG_NLS_CODEPAGE_864 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Arabic. nls codepage 865 CONFIG_NLS_CODEPAGE_865 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for the Nordic European countries. nls codepage 866 CONFIG_NLS_CODEPAGE_866 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Cyrillic/Russian. nls codepage 869 CONFIG_NLS_CODEPAGE_869 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Greek. ### ### Why do we have two codepages for Greek and Cyrillic? ### nls codepage 874 CONFIG_NLS_CODEPAGE_874 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Thai. nls codepage 932 CONFIG_NLS_CODEPAGE_932 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Shift-JIS. nls codepage 936 CONFIG_NLS_CODEPAGE_936 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Simplified Chinese(GBK). nls codepage 949 CONFIG_NLS_CODEPAGE_949 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for UHC. nls codepage 950 CONFIG_NLS_CODEPAGE_950 The Microsoft fat filesystem family can deal with filenames in native language character sets. These character sets are stored in so-called DOS codepages. You need to include the appropriate codepage if you want to be able to read/write these filenames on DOS/Windows partitions correctly. This does apply to the filenames only, not to the file contents. You can include several codepages; say Y here if you want to include the DOS codepage for Traditional Chinese(Big5). nls iso8859-1 CONFIG_NLS_ISO8859_1 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 1 character set, which covers most West European languages such as Albanian, Catalan, Danish, Dutch, English, Faeroese, Finnish, French, German, Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish, and Swedish. It is also the default for the US. If unsure, say Y. nls iso8859-2 CONFIG_NLS_ISO8859_2 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 2 character set, which works for most Latin-written Slavic and Central European languages: Czech, German, Hungarian, Polish, Rumanian, Croatian, Slovak, Slovene. nls iso8859-3 CONFIG_NLS_ISO8859_3 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 3 character set, which is popular with authors of Esperanto, Galician, Maltese, and Turkish. nls iso8859-4 CONFIG_NLS_ISO8859_4 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 4 character set which introduces letters for Estonian, Latvian, and Lithuanian. It is an incomplete predecessor of Latin 6. nls iso8859-5 CONFIG_NLS_ISO8859_5 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-5, a Cyrillic character set with which you can type Bulgarian, Byelorussian, Macedonian, Russian, Serbian, and Ukrainian. Note that the charset KOI8-R is preferred in Russia. nls iso8859-6 CONFIG_NLS_ISO8859_6 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-6, the Arabic character set. nls iso8859-7 CONFIG_NLS_ISO8859_7 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-7, the Modern Greek character set. nls iso8859-8 CONFIG_NLS_ISO8859_8 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for ISO8859-8, the Hebrew character set. nls iso8859-9 CONFIG_NLS_ISO8859_9 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 5 character set, and it replaces the rarely needed Icelandic letters in Latin 1 with the Turkish ones. Useful in Turkey. nls iso8859-10 CONFIG_NLS_ISO8859_10 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 6 character set, which adds the last Inuit (Greenlandic) and Sami (Lappish) letters that were missing in Latin 4 to cover the entire Nordic area. nls iso8859-14 CONFIG_NLS_ISO8859_14 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 8 character set, which adds the last accented vowels for Welsh (and Manx Gaelic) that were missing in Latin 1. http://linux.speech.cymru.org/ has further information. nls iso8859-15 CONFIG_NLS_ISO8859_15 If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the Latin 9 character set, which covers most West European languages such as Albanian, Catalan, Danish, Dutch, English, Estonian, Faeroese, Finnish, French, German, Galician, Irish, Icelandic, Italian, Norwegian, Portuguese, Spanish, and Swedish. Latin 9 is an update to Latin 1 (ISO 8859-1) that removes a handful of rarely used characters and instead adds support for Estonian, corrects the support for French and Finnish, and adds the new Euro character. If unsure, say Y. nls koi8-r CONFIG_NLS_KOI8_R If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the preferred Russian character set. nls koi8-ru CONFIG_NLS_KOI8_RU If you want to display filenames with native language characters from the Microsoft fat filesystem family or from JOLIET CDROMs correctly on the screen, you need to include the appropriate input/output character sets. Say Y here for the preferred Russian character set. Virtual terminal CONFIG_VT If you say Y here, you will get support for terminal devices with display and keyboard devices. These are called "virtual" because you can run several virtual terminals (also called virtual consoles) on one physical terminal. This is rather useful, for example one virtual terminal can collect system messages and warnings, another one can be used for a text-mode user session, and a third could run an X session, all in parallel. Switching between virtual terminals is done with certain key combinations, usually Alt-. The setterm command ("man setterm") can be used to change the properties (such as colors) of a virtual terminal. You need at least one virtual terminal device in order to make use of your keyboard and monitor. Therefore, only people configuring an embedded system would want to say N here in order to save some memory; the only way to log into such a system is then via a serial or network connection. If unsure, say Y, or else you won't be able to do much with your new shiny Linux system :-) Support for console on virtual terminal CONFIG_VT_CONSOLE The system console is the device which receives all kernel messages and warnings and which allows logins in single user mode. If you answer Y here, a virtual terminal (the device used to interact with a physical terminal) can be used as system console. This is the most common mode of operations, so you should say Y here unless you want the kernel messages be output only to a serial port (in which case you should say Y to "Console on serial port", below). If you do say Y here, by default the currently visible virtual terminal (/dev/tty0) will be used as system console. You can change that with a kernel command line option such as "console=tty3" which would use the third virtual terminal as system console. (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) If unsure, say Y. Software generated cursor CONFIG_SOFTCURSOR If you say Y here, you'll be able to do lots of nice things with the cursors of your virtual consoles -- for example turn them into non-blinking block cursors which are more visible on laptop screens, or change their colors depending on the virtual console they're on. See Documentation/VGA-softcursor.txt for more information. Support for PowerMac keyboard CONFIG_MAC_KEYBOARD This option allows you to use an ADB keyboard attached to your machine. Note that this disables any other (ie. PS/2) keyboard support, even if your machine is physically capable of using both at the same time. If you use an ADB keyboard (4 pin connector), say Y here. If you use a PS/2 keyboard (6 pin connector), say N here. Standard/generic serial support CONFIG_SERIAL This selects whether you want to include the driver for the standard serial ports. The standard answer is Y. People who might say N here are those that are setting up dedicated Ethernet WWW/FTP servers, or users that have one of the various bus mice instead of a serial mouse and don't intend to use their machine's standard serial port for anything. (Note that the Cyclades and Stallion multi serial port drivers do not need this driver built in for them to work.) If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called serial.o. [WARNING: Do not compile this driver as a module if you are using non-standard serial ports, since the configuration information will be lost when the driver is unloaded. This limitation may be lifted in the future.] BTW1: If you have a mouseman serial mouse which is not recognized by the X window system, try running gpm first. BTW2: If you intend to connect a so-called Winmodem to your machine's serial port, forget it. These modems are crippled and require proprietary drivers which are only available under Windows. Most people will say Y or M here, so that they can use serial mice, modems and similar devices connecting to the standard serial ports. Support for console on serial port CONFIG_SERIAL_CONSOLE If you say Y here, it will be possible to use a serial port as the system console (the system console is the device which receives all kernel messages and warnings and which allows logins in single user mode). This could be useful if some terminal or printer is connected to that serial port. Even if you say Y here, the currently visible virtual console (/dev/tty0) will still be used as the system console by default, but you can alter that using a kernel command line option such as "console=ttyS1". (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) If you don't have a VGA card installed and you say Y here, the kernel will automatically use the first serial line, /dev/ttyS0, as system console. If unsure, say N. Support for PowerMac serial ports CONFIG_MAC_SERIAL If you have Macintosh style serial ports (8 pin mini-DIN), say Y here. If you also have regular serial ports and enable the driver for them, you can't currently use the serial console feature. Comtrol Rocketport support CONFIG_ROCKETPORT This is a driver for the Comtrol Rocketport cards which provide multiple serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called rocket.o. Digiboard Intelligent async support CONFIG_DIGIEPCA This is a driver for Digi International's Xx, Xeve, and Xem series of cards which provide multiple serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. This driver supports the original PC (ISA) boards as well as PCI, and EISA. If you have a card like this, say Y here and read the file Documentation/digiepca.txt. NOTE: There is another, separate driver for the Digiboard PC boards: "Digiboard PC/Xx Support" below. You should (and can) only select one of the two drivers. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called epca.o. Digiboard PC/Xx Support CONFIG_DIGI This is a driver for the Digiboard PC/Xe, PC/Xi, and PC/Xeve cards that give you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/digiboard.txt. If you want to compile this driver as a module, say M here and read Documentation/modules.txt. The module will be called pcxx.o. SDL RISCom/8 card support CONFIG_RISCOM8 This is a driver for the SDL Communications RISCom/8 multiport card, which gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/riscom8.txt. Also it's possible to say M here and compile this driver as kernel loadable module; the module will be called riscom8.o. Computone IntelliPort Plus serial support CONFIG_COMPUTONE This driver supports the entire family of Intelliport II/Plus controllers with the exception of the MicroChannel controllers and products previous to the Intelliport II. These are multiport cards, which give you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . You will get two modules called ip2.o and ip2main.o. Specialix IO8+ card support CONFIG_SPECIALIX This is a driver for the Specialix IO8+ multiport card (both the ISA and the PCI version) which gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you have a card like that, say Y here and read the file Documentation/specialix.txt. Also it's possible to say M here and compile this driver as kernel loadable module which will be called specialix.o. Specialix DTR/RTS pin is RTS CONFIG_SPECIALIX_RTSCTS The Specialix card can only support either RTS or DTR. If you say N here, the driver will use the pin as "DTR" when the tty is in software handshake mode. If you say Y here or hardware handshake is on, it will always be RTS. Read the file Documentation/specialix.txt for more information. Specialix SX card support CONFIG_SX This is a driver for the Specialix SX multiport card (both the ISA and the PCI version of both the older SI/XIO and the newer SX variants of the card) which gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. You will also need the specialix_sxtools package to be able to initialize and use the SX system. This driver does NOT support the rev 1 cards (+/- 1990), or the EISA version of the card. Sorry. If you have one of these cards, say Y here and read the file Documentation/sx.txt. Also it's possible to say M here and compile this driver as kernel loadable module which will be called sx.o. Specialix RIO system support CONFIG_RIO This is a driver for the Specialix RIO hostcard (both the ISA and the PCI versions of the card). This hostcard allows you to connect many remote terminal adapters, each supporting 8 or 16 serial ports. These cards are ideal if you have more than 100 terminals that need to be connected to your server. (But don't worry if you have only 32 ports.... That works too). You will also need the specialix_riotools to be able to initialize and configure your rio system. If you have one of these cards, say Y here. Also it's possible to say M here and compile this driver as kernel loadable module which will be called rio.o. Specialix OLD RIO/PCI support CONFIG_RIO_OLDPCI This turns on support for the older PCI card. If you include this support, performance on the newer cards will suffer a bit. If you have one of these cards, say Y here. Cyclades async mux support CONFIG_CYCLADES This is a driver for a card that gives you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. For information about the Cyclades-Z card, read drivers/char/README.cycladesZ. As of 1.3.9x kernels, this driver's minor numbers start at 0 instead of 32. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called cyclades.o. If you haven't heard about it, it's safe to say N. Cyclades-Z interrupt mode operation (EXPERIMENTAL) CONFIG_CYZ_INTR The Cyclades-Z family of multiport cards allows 2 (two) driver op modes: polling and interrupt. In polling mode, the driver will check the status of the Cyclades-Z ports every certain amount of time (which is called polling cycle and is configurable). In interrupt mode, it will use an interrupt line (IRQ) in order to check the status of the Cyclades-Z ports. The default op mode is polling. If unsure, say N. Stallion multiport serial support CONFIG_STALDRV Stallion cards give you many serial ports. You would need something like this to connect more than two modems to your Linux box, for instance in order to become a dial-in server. If you say Y here, you will be asked for your specific card model in the next questions. Make sure to read drivers/char/README.stallion in this case. If you have never heard about all this, it's safe to say N. Stallion EasyIO or EC8/32 support CONFIG_STALLION If you have an EasyIO or EasyConnection 8/32 multiport Stallion card, then this is for you; say Y. Make sure to read Documentation/stallion.txt. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called stallion.o. Stallion EC8/64, ONboard, Brumby support CONFIG_ISTALLION If you have an EasyConnection 8/64, ONboard, Brumby or Stallion serial multiport card, say Y here. Make sure to read Documentation/stallion.txt. To compile it as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called istallion.o. Microgate SyncLink adapter support CONFIG_SYNCLINK Provides support for the SyncLink ISA and PCI multiprotocol serial adapters. These adapters support asynchronous and HDLC bit synchronous communication up to 10Mbps (PCI adapter). This driver can only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called synclink.o. If you want to do that, say M here. Synchronous HDLC line discipline support CONFIG_N_HDLC Allows synchronous HDLC communications with tty device drivers that support synchronous HDLC such as the Microgate SyncLink adapter. This driver can only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called n_hdlc.o. If you want to do that, say M here. Hayes ESP serial port support CONFIG_ESPSERIAL This is a driver which supports Hayes ESP serial ports. Both single port cards and multiport cards are supported. Make sure to read Documentation/hayes-esp.txt. To compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called esp.o. If unsure, say N. Moxa Intellio support CONFIG_MOXA_INTELLIO Say Y here if you have a Moxa Intellio multiport serial card. This driver can also be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called moxa.o. If you want to do that, say M here. Moxa SmartIO support CONFIG_MOXA_SMARTIO Say Y here if you have a Moxa SmartIO multiport serial card. This driver can also be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called mxser.o. If you want to do that, say M here. Multi-Tech multiport card support CONFIG_ISI This is a driver for the Multi-Tech cards which provide several serial ports. The driver is experimental and can currently only be built as a module ( = code which can be inserted in and removed from the running kernel whenever you want). Please read Documentation/modules.txt. The module will be called isicom.o Unix98 PTY support CONFIG_UNIX98_PTYS A pseudo terminal (PTY) is a software device consisting of two halves: a master and a slave. The slave device behaves identical to a physical terminal; the master device is used by a process to read data from and write data to the slave, thereby emulating a terminal. Typical programs for the master side are telnet servers and xterms. Linux has traditionally used the BSD-like names /dev/ptyxx for masters and /dev/ttyxx for slaves of pseudo terminals. This scheme has a number of problems. The GNU C library glibc 2.1 and later, however, supports the Unix98 naming standard: in order to acquire a pseudo terminal, a process opens /dev/ptmx; the number of the pseudo terminal is then made available to the process and the pseudo terminal slave can be accessed as /dev/pts/. What was traditionally /dev/ttyp2 will then be /dev/pts/2, for example. The entries in /dev/pts/ are created on the fly by a virtual filesystem; therefore, if you say Y here you should say Y to "/dev/pts filesystem for Unix98 PTYs" as well. If you want to say Y here, you need to have the C library glibc 2.1 or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*"). Read the instructions in Documentation/Changes pertaining to pseudo terminals. It's safe to say N. Maximum number of Unix98 PTYs in use (0-2048) CONFIG_UNIX98_PTY_COUNT The maximum number of Unix98 PTYs that can be used at any one time. The default is 256, and should be enough for desktop systems. Server machines which support incoming telnet/rlogin/ssh connections and/or serve several X terminals may want to increase this: every incoming connection and every xterm uses up one PTY. When not in use, each additional set of 256 PTYs occupy approximately 8 KB of kernel memory on 32-bit architectures. Parallel printer support CONFIG_PRINTER If you intend to attach a printer to the parallel port of your Linux box (as opposed to using a serial printer; if the connector at the printer has 9 or 25 holes ["female"], then it's serial), say Y. Also read the Printing-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. It is possible to share one parallel port among several devices (e.g. printer and ZIP drive) and it is safe to compile the corresponding drivers into the kernel. If you want to compile this driver as a module however ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called lp.o. If you have several parallel ports, you can specify which ports to use with the "lp" kernel command line option. (Try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time. The lilo procedure is also explained in the SCSI-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO.) The syntax of the "lp" command line option can be found in drivers/char/lp.c. If you have more than 3 printers, you need to increase the LP_NO variable in lp.c. Amiga built-in parallel port support CONFIG_PARPORT_AMIGA Say Y here if you need support for the parallel port hardware on Amiga machines. This code is also available as a module (say M), called parport_amiga.o. If in doubt, saying N is the safe plan. Atari built-in parallel port support CONFIG_PARPORT_ATARI Say Y here if you need support for the parallel port hardware on Atari machines. This code is also available as a module (say M), called parport_atari.o. If in doubt, saying N is the safe plan. Multiface 3 parallel port card support CONFIG_PARPORT_MFC3 Say Y here if you need parallel port support for the MFC3 card. This code is also available as a module (say M), called parport_mfc3.o. If in doubt, saying N is the safe plan. Support IEEE1284 status readback CONFIG_PRINTER_READBACK If your printer conforms to IEEE 1284, it may be able to provide a status indication when you read from it (for example, with `cat /dev/lp1'). To use this feature, say Y here. Mouse Support (not serial mice) CONFIG_MOUSE This is for machines with a bus mouse or a PS/2 mouse as opposed to a serial mouse. Most people have a regular serial MouseSystem or Microsoft mouse (made by Logitech) that plugs into a COM port (rectangular with 9 or 25 pins). These people say N here. If you have something else, read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO and say Y here. If you have a laptop, you either have to check the documentation or experiment a bit to find out whether the trackball is a serial mouse or not; it's best to say Y here for you. Note that the answer to this question won't directly affect the kernel: saying N will just cause this configure script to skip all the questions about non-serial mice. If unsure, say Y. Logitech busmouse support CONFIG_BUSMOUSE Logitech mouse connected to a proprietary interface card. It's generally a round connector with 9 pins. Note that the newer mice made by Logitech don't use the Logitech protocol anymore; for those, you don't need this option. You want to read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called busmouse.o. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. PS/2 mouse (aka "auxiliary device") support CONFIG_PSMOUSE The PS/2 mouse connects to a special mouse port that looks much like the keyboard port (small circular connector with 6 pins). This way, the mouse does not use any serial ports. This port can also be used for other input devices like light pens, tablets, keypads. Compaq, AST and IBM all use this as their mouse port on currently shipping machines. The trackballs of some laptops are PS/2 mice also. In particular, the C&T 82C710 mouse on TI Travelmates is a PS/2 mouse. Although PS/2 mice are not technically bus mice, they are explained in detail in the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. When using a PS/2 mouse, you can get problems if you want to use the mouse both on the Linux console and under X. Using the "-R" option of the Linux mouse managing program gpm (available from ftp://metalab.unc.edu/pub/Linux/system/Daemons) solves this problem, or you can get the "mconv" utility also from metalab. C&T 82C710 mouse port support (as on TI Travelmate) CONFIG_82C710_MOUSE This is a certain kind of PS/2 mouse used on the TI Travelmate. If you are unsure, try first to say N here and come back if the mouse doesn't work. Read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. PC110 digitizer pad support CONFIG_PC110_PAD This drives the digitizer pad on the IBM PC110 palmtop (see http://toy.cabi.net; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). It can turn the digitizer pad into a PS/2 mouse emulation with tap gestures or into an absolute pad. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called pc110pad.o. Microsoft busmouse support CONFIG_MS_BUSMOUSE These animals (also called Inport mice) are connected to an expansion board using a round connector with 9 pins. If this is what you have, say Y and read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. Also be aware that several vendors talk about 'Microsoft busmouse' and actually mean PS/2 busmouse -- so count the pins on the connector. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called msbusmouse.o. ATIXL busmouse support CONFIG_ATIXL_BUSMOUSE This is a rare type of busmouse that is connected to the back of an ATI video card. Note that most ATI mice are actually Microsoft busmice. Read the Busmouse-HOWTO, available via FTP (user: anonymous) in ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called atixlmouse.o. If you are unsure, say N and read the HOWTO nevertheless: it will tell you what you have. Support for PowerMac ADB mouse CONFIG_ADBMOUSE If you have an ADB mouse (4 pin connector) as is common on Macintoshes, say Y here. QIC-02 tape support CONFIG_QIC02_TAPE If you have a non-SCSI tape drive like that, say Y. Or, if you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called tpqic02.o. Do you want runtime configuration for QIC-02 CONFIG_QIC02_DYNCONF You can either configure this driver once and for all by editing a header file (include/linux/tpqic02.h), in which case you should say N, or you can fetch a program via anonymous FTP which is able to configure this driver during runtime. The program to do this is called 'qic02conf' and it is part of the tpqic02-support-X.Y.tar.gz support package. If you want to use the qic02conf program, say Y. Floppy tape drive (QIC-80/40/3010/3020/TR-1/TR-2/TR-3) support CONFIG_FTAPE If you have a tape drive that is connected to your floppy controller, say Y here. Some tape drives (like the Seagate "Tape Store 3200" or the Iomega "Ditto 3200" or the Exabyte "Eagle TR-3") come with a "high speed" controller of their own. These drives (and their companion controllers) are also supported if you say Y here. If you have a special controller (such as the CMS FC-10, FC-20, Mountain Mach-II, or any controller that is based on the Intel 82078 FDC like the high speed controllers by Seagate and Exabyte and Iomega's "Ditto Dash") you must configure it by selecting the appropriate entries from the "Floppy tape controllers" sub-menu below and possibly modify the default values for the IRQ and DMA channel and the IO base in ftape's configuration menu. If you want to use your floppy tape drive on a PCI-bus based system, please read the file drivers/char/ftape/README.PCI. The ftape kernel driver is also available as a runtime loadable module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called ftape.o. Note that the Ftape-HOWTO is out of date (sorry) and documents the older version 2.08 of this software but still contains useful information. There is a web page with more recent documentation at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/ . This page always contains the latest release of the ftape driver and useful information (backup software, ftape related patches and documentation, FAQ). (To browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape.) Note that the file system interface has changed quite a bit compared to previous versions of ftape. Please read Documentation/ftape.txt. The file system interface for ftape CONFIG_ZFTAPE Normally, you want to say Y or M. DON'T say N here or you WON'T BE ABLE TO USE YOUR FLOPPY TAPE DRIVE. The ftape module itself no longer contains the routines necessary to interface with the kernel VFS layer (i.e. to actually write data to and read data from the tape drive). Instead the file system interface (i.e. the hardware independent part of the driver) has been moved to a separate module. If you say M zftape will be compiled as a runtime loadable module ( = code which can be inserted in and removed from the running kernel whenever you want). In this case you should read Documentation/modules.txt. The module will be called zftape.o. Regardless of whether you say Y or M here, an additional runtime loadable module called `zft-compressor.o' which contains code to support user transparent on-the-fly compression based on Ross William's lzrw3 algorithm will be produced. If you have enabled the kernel module loader (i.e. have said Y to "Kernel module loader support", above) then `zft-compressor.o' will be loaded automatically by zftape when needed. Despite its name, zftape does NOT use compression by default. The file Documentation/ftape.txt contains a short description of the most important changes in the file system interface compared to previous versions of ftape. The ftape home page http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape/ contains further information (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape). IMPORTANT NOTE: zftape can read archives created by previous versions of ftape and provide file mark support (i.e. fast skipping between tape archives) but previous version of ftape will lack file mark support when reading archives produced by zftape. Default block size for zftape CONFIG_ZFT_DFLT_BLK_SZ If unsure leave this at its default value, i.e. 10240. Note that you specify only the default block size here. The block size can be changed at run time using the MTSETBLK tape operation with the MTIOCTOP ioctl (i.e. with "mt -f /dev/qft0 setblk #BLKSZ" from the shell command line). The probably most striking difference between zftape and previous versions of ftape is the fact that all data must be written or read in multiples of a fixed block size. The block size defaults to 10240 which is what GNU tar uses. The values for the block size should be either 1 or multiples of 1024 up to a maximum value of 63488 (i.e. 62 K). If you specify `1' then zftape's builtin compression will be disabled. Reasonable values are `10240' (GNU tar's default block size), `5120' (afio's default block size), `32768' (default block size some backup programs assume for SCSI tape drives) or `1' (no restriction on block size, but disables builtin compression). Number of DMA buffers CONFIG_FT_NR_BUFFERS Please leave this at `3' unless you REALLY know what you are doing. It is not necessary to change this value. Values below 3 make the proper use of ftape impossible, values greater than 3 are a waste of memory. You can change the amount of DMA memory used by ftape at runtime with "mt -f /dev/qft0 setdrvbuffer #NUMBUFFERS". Each buffer wastes 32 KB of memory. Please note that this memory cannot be swapped out. Procfs entry for ftape CONFIG_FT_PROC_FS Optional. Saying Y will result in creation of a directory `/proc/ftape' under the proc file system. The files can be viewed with your favorite pager (i.e. use "more /proc/ftape/history" or "less /proc/ftape/history" or simply "cat /proc/ftape/history"). The file will contain some status information about the inserted cartridge, the kernel driver, your tape drive, the floppy disk controller and the error history for the most recent use of the kernel driver. Saying Y will enlarge the size of the ftape driver by approximately 2 KB. WARNING: When compiling ftape as a module (i.e. saying M to "Floppy tape drive") it is dangerous to use ftape's proc file system interface. Accessing `/proc/ftape' while the module is unloaded will result in a kernel Oops. This cannot be fixed from inside ftape. Controlling the amount of debugging output of ftape CONFIG_FT_NORMAL_DEBUG This option controls the amount of debugging output the ftape driver is ABLE to produce; it does not increase or diminish the debugging level itself. If unsure, leave this at its default setting, i.e. choose "Normal". Ftape can print lots of debugging messages to the system console resp. kernel log files. Reducing the amount of possible debugging output reduces the size of the kernel module by some KB, so it might be a good idea to use "None" for emergency boot floppies. If you want to save memory then the following strategy is recommended: leave this option at its default setting "Normal" until you know that the driver works as expected, afterwards reconfigure the kernel, this time specifying "Reduced" or "None" and recompile and install the kernel as usual. Note that choosing "Excessive" debugging output does not increase the amount of debugging output printed to the console but only makes it possible to produce "Excessive" debugging output. Please read Documentation/ftape.txt for a short description how to control the amount of debugging output. Excessive CONFIG_FT_FULL_DEBUG Extremely verbose output for driver debugging purposes. Reduced CONFIG_FT_NO_TRACE Reduced tape driver debugging output. None CONFIG_FT_NO_TRACE_AT_ALL Suppress all debugging output from the tape drive. The floppy drive controller for ftape CONFIG_FT_STD_FDC Only change this setting if you have a special controller. If you didn't plug any add-on card into your computer system but just plugged the floppy tape cable into the already existing floppy drive controller then you don't want to change the default setting, i.e. choose "Standard". Choose "MACH-2" if you have a Mountain Mach-2 controller. Choose "FC-10/FC-20" if you have a Colorado FC-10 or FC-20 controller. Choose "Alt/82078" if you have another controller that is located at an IO base address different from the standard floppy drive controller's base address of `0x3f0', or uses an IRQ (interrupt) channel different from `6', or a DMA channel different from `2'. This is necessary for any controller card that is based on Intel's 82078 FDC such as Seagate's, Exabyte's and Iomega's "high speed" controllers. If you choose something other than "Standard" then please make sure that the settings for the IO base address and the IRQ and DMA channel in the configuration menus below are correct. Use the manual of your tape drive to determine the correct settings! If you are already successfully using your tape drive with another operating system then you definitely should use the same settings for the IO base, the IRQ and DMA channel that have proven to work with that other OS. Note that this menu lets you specify only the default setting for the hardware setup. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you have said Y to "Floppy tape drive") or module load time (i.e. if you have said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. If you want to use your floppy tape drive on a PCI-bus based system, please read the file drivers/char/ftape/README.PCI. IO base of the floppy disk controller used with Ftape CONFIG_FT_FDC_BASE You don't need to specify a value if the following default settings for the base IO address are correct: <<< MACH-2 : 0x1E0 >>> <<< FC-10/FC-20: 0x180 >>> <<< Secondary : 0x370 >>> Secondary refers to a secondary FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the IO base. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you specified Y to "Floppy tape drive") or module load time (i.e. if you have said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. IRQ channel for the floppy disk controller used with Ftape CONFIG_FT_FDC_IRQ You don't need to specify a value if the following default settings for the interrupt channel are correct: <<< MACH-2 : 6 >>> <<< FC-10/FC-20: 9 >>> <<< Secondary : 6 >>> Secondary refers to secondary a FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the IRQ channel. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you said Y to "Floppy tape drive") or module load time (i.e. if you said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. DMA channel for the floppy disk controller used with Ftape CONFIG_FT_FDC_DMA You don't need to specify a value if the following default settings for the DMA channel are correct: <<< MACH-2 : 2 >>> <<< FC-10/FC-20: 3 >>> <<< Secondary : 2 >>> Secondary refers to a secondary FDC controller like the "high speed" controllers delivered by Seagate or Exabyte or Iomega's Ditto Dash. Please make sure that the setting for the IO base address specified here is correct. USE THE MANUAL OF YOUR TAPE DRIVE OR CONTROLLER CARD TO DETERMINE THE CORRECT SETTING. If you are already successfully using the tape drive with another operating system then you definitely should use the same settings for the IO base that has proven to work with that other OS. Note that this menu lets you specify only the default setting for the DMA channel. The hardware configuration can be changed at boot time (when ftape is compiled into the kernel, i.e. if you said Y to "Floppy tape drive") or module load time (i.e. if you said M to "Floppy tape drive"). Please read also the file Documentation/ftape.txt which contains a short description of the parameters that can be set at boot or load time. FDC FIFO Threshold before requesting DMA service CONFIG_FT_FDC_THR Set the FIFO threshold of the FDC. If this is higher the DMA controller may serve the FDC after a higher latency time. If this is lower, fewer DMA transfers occur leading to less bus contention. You may try to tune this if ftape annoys you with "reduced data rate because of excessive overrun errors" messages. However, this doesn't seem to have too much effect. If unsure, don't touch the initial value, i.e. leave it at "8". FDC maximum data rate CONFIG_FT_FDC_MAX_RATE With some motherboard/FDC combinations ftape will not be able to run your FDC/tape drive combination at the highest available speed. If this is the case you'll encounter "reduced data rate because of excessive overrun errors" messages and lots of retries before ftape finally decides to reduce the data rate. In this case it might be desirable to tell ftape beforehand that it need not try to run the tape drive at the highest available speed. If unsure, leave this disabled, i.e. leave it at 2000 bits/sec. Direct Rendering Manager (XFree86 DRI support) CONFIG_DRM Kernel-level support for the Direct Rendering Infrastructure (DRI) introduced in XFree86 4.x. These modules provide support for synchronization, security, and DMA transfers. Select the module that provides support for your graphics card. 3dfx Banshee/Voodoo3+ CONFIG_DRM_TDFX Choose M here if you have a 3dfx Banshee/Voodoo3 graphics card. 3dlabs GMX 2000 CONFIG_DRM_GAMMA Choose M here if you have a 3dlabs GMX 2000 graphics card. ATI Rage 128 CONFIG_DRM_R128 Choose M here if you have a ATI Rage 128 graphics card. Intel I810 CONFIG_DRM_I810 Choose M here if you have an Intel I810 AGP graphics card. Matrox g200/g400 CONFIG_DRM_MGA Choose M here if you have a Matrox g200/g400 AGP graphics card. Creator/Creator3D/Elite3D CONFIG_DRM_FFB Choose this option if you have one of Sun's Creator3D-based graphics and frame buffer cards. Product page at . MTRR control and configuration CONFIG_MTRR On Intel P6 family processors (Pentium Pro, Pentium II and later) the Memory Type Range Registers (MTRRs) may be used to control processor access to memory ranges. This is most useful when you have a video (VGA) card on a PCI or AGP bus. Enabling write-combining allows bus write transfers to be combined into a larger transfer before bursting over the PCI/AGP bus. This can increase performance of image write operations 2.5 times or more. This option creates a /proc/mtrr file which may be used to manipulate your MTRRs. Typically the X server should use this. This should have a reasonably generic interface so that similar control registers on other processors can be easily supported. The Cyrix 6x86, 6x86MX and M II processors have Address Range Registers (ARRs) which provide a similar functionality to MTRRs. For these, the ARRs are used to emulate the MTRRs. The AMD K6-2 (stepping 8 and above) and K6-3 processors have two MTRRs. These are supported. The Centaur C6 (WinChip) and WinChip 2&3 processors have 8 MCRs. These are supported. Note that, due to the design of the WinChip 2&3, setting the access for normal memory to uncachable or write-combine on these processors will result in instant kernel panic. It is okay to set this for non-cacheable (video) memory. Saying Y here also fixes a problem with buggy SMP BIOSes which only set the MTRRs for the boot CPU and not the secondary CPUs. This can lead to all sorts of problems. You can safely say Y even if your machine doesn't have MTRRs, you'll just add about 3k to your kernel. See Documentation/mtrr.txt for more information. Main CPU frequency, only for DEC alpha machine CONFIG_FT_ALPHA_CLOCK On some DEC Alpha machines the CPU clock frequency cannot be determined automatically, so you need to specify it here ONLY if running a DEC Alpha, otherwise this setting has no effect. Zilog serial support CONFIG_SUN_ZS If you are asked this question, something is wrong with config scripts. Zilog serial driver is always enabled in sparc architecture. Double Talk PC internal speech card support CONFIG_DTLK This driver is for the DoubleTalk PC, a speech synthesizer manufactured by RC Systems (http://www.rcsys.com/). It is also called the `internal DoubleTalk'. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called dtlk.o. Intel Random Number Generator support CONFIG_INTEL_RNG This driver provides kernel-side support for the Random Number Generator hardware found on Intel i8xx-based motherboards. Both a character driver, used to read() entropy data, and a timer function which automatically adds entropy directly into the kernel pool, are exported by this driver. To compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . The module will be called i810_rng.o. If unsure, say N. Advanced Power Management CONFIG_APM APM is a BIOS specification for saving power using several different techniques. This is mostly useful for battery powered laptops with APM compliant BIOSes. If you say Y here, the system time will be reset after a RESUME operation, the /proc/apm device will provide battery status information, and user-space programs will receive notification of APM "events" (e.g. battery status change). If you select "Y" here, you can disable actual use of the APM BIOS by passing the "apm=off" option to the kernel at boot time. Note that the APM support is almost completely disabled for machines with more than one CPU. Supporting software is available; for more information, read the Battery Powered Linux mini-HOWTO, available from http://www.linuxdoc.org/docs.html#howto . This driver does not spin down disk drives (see the hdparm(8) manpage ("man 8 hdparm") for that), and it doesn't turn off VESA-compliant "green" monitors. This driver does not support the TI 4000M TravelMate and the ACER 486/DX4/75 because they don't have compliant BIOSes. Many "green" desktop machines also don't have compliant BIOSes, and this driver may cause those machines to panic during the boot phase. If you are running Linux on a laptop, you may also want to read the Linux Laptop home page on the WWW at http://www.cs.utexas.edu/users/kharker/linux-laptop/ . Generally, if you don't have a battery in your machine, there isn't much point in using this driver and you should say N. If you get random kernel OOPSes or reboots that don't seem to be related to anything, try disabling/enabling this option (or disabling/enabling APM in your BIOS). Some other things you should try when experiencing seemingly random, "weird" problems: 1) make sure that you have enough swap space and that it is enabled. 2) pass the "no-hlt" option to the kernel 3) switch on floating point emulation in the kernel and pass the "no387" option to the kernel 4) pass the "floppy=nodma" option to the kernel 5) pass the "mem=4M" option to the kernel (thereby disabling all but the first 4 MB of RAM) 6) make sure that the CPU is not over clocked. 7) read the sig11 FAQ at http://www.bitwizard.nl/sig11/ 8) disable the cache from your BIOS settings 9) install a fan for the video card or exchange video RAM 10) install a better fan for the CPU 11) exchange RAM chips 12) exchange the motherboard. Ignore USER SUSPEND CONFIG_APM_IGNORE_USER_SUSPEND This option will ignore USER SUSPEND requests. On machines with a compliant APM BIOS, you want to say N. However, on the NEC Versa M series notebooks, it is necessary to say Y because of a BIOS bug. Enable APM at boot time CONFIG_APM_DO_ENABLE Enable APM features at boot time. From page 36 of the APM BIOS specification: "When disabled, the APM BIOS does not automatically power manage devices, enter the Standby State, enter the Suspend State, or take power saving steps in response to CPU Idle calls." This driver will make CPU Idle calls when Linux is idle (unless this feature is turned off -- see "Do CPU IDLE calls", below). This should always save battery power, but more complicated APM features will be dependent on your BIOS implementation. You may need to turn this option off if your computer hangs at boot time when using APM support, or if it beeps continuously instead of suspending. Turn this off if you have a NEC UltraLite Versa 33/C or a Toshiba T400CDT. This is off by default since most machines do fine without this feature. Do CPU IDLE calls CONFIG_APM_CPU_IDLE Enable calls to APM CPU Idle/CPU Busy inside the kernel's idle loop. On some machines, this can activate improved power savings, such as a slowed CPU clock rate, when the machine is idle. These idle calls are made after the idle loop has run for some length of time (e.g., 333 mS). On some machines, this will cause a hang at boot time or whenever the CPU becomes idle. (On machines with more than one CPU, this option does nothing.) Enable console blanking using APM CONFIG_APM_DISPLAY_BLANK Enable console blanking using the APM. Some laptops can use this to turn off the LCD backlight when the screen blanker of the Linux virtual console blanks the screen. Note that this is only used by the virtual console screen blanker, and won't turn off the backlight when using the X Window system. This also doesn't have anything to do with your VESA-compliant power-saving monitor. Further, this option doesn't work for all laptops -- it might not turn off your backlight at all, or it might print a lot of errors to the console, especially if you are using gpm. Ignore multiple suspend/resume cycles CONFIG_APM_IGNORE_SUSPEND_BOUNCE This option is necessary on the Dell Inspiron 3200 and others, but should be safe for all other laptops. When enabled, a system suspend event that occurs within three seconds of a resume is ignored. Without this the Inspiron will shut itself off a few seconds after you open the lid, requiring you to press the power button to resume it a second time. Say Y. RTC stores time in GMT CONFIG_APM_RTC_IS_GMT Say Y here if your RTC (Real Time Clock a.k.a. hardware clock) stores the time in GMT (Greenwich Mean Time). Say N if your RTC stores localtime. It is in fact recommended to store GMT in your RTC, because then you don't have to worry about daylight savings time changes. The only reason not to use GMT in your RTC is if you also run a broken OS that doesn't understand GMT. Allow interrupts during APM BIOS calls CONFIG_APM_ALLOW_INTS Normally we disable external interrupts while we are making calls to the APM BIOS as a measure to lessen the effects of a badly behaving BIOS implementation. The BIOS should reenable interrupts if it needs to. Unfortunately, some BIOSes do not - especially those in many of the newer IBM Thinkpads. If you experience hangs when you suspend, try setting this to Y. Otherwise, say N. Use real mode APM BIOS call to power off CONFIG_APM_REAL_MODE_POWER_OFF Use real mode APM BIOS calls to switch off the computer. This is a work-around for a number of buggy BIOSes. Switch this option on if your computer crashes instead of powering off properly. Watchdog Timer Support CONFIG_WATCHDOG If you say Y here (and to one of the following options) and create a character special file /dev/watchdog with major number 10 and minor number 130 using mknod ("man mknod"), you will get a watchdog, i.e.: subsequently opening the file and then failing to write to it for longer than 1 minute will result in rebooting the machine. This could be useful for a networked machine that needs to come back online as fast as possible after a lock-up. There's both a watchdog implementation entirely in software (which can sometimes fail to reboot the machine) and a driver for hardware watchdog boards, which are more robust and can also keep track of the temperature inside your computer. For details, read Documentation/watchdog.txt in the kernel source. The watchdog is usually used together with the watchdog daemon which is available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/linux/system/daemons/watchdog. This daemon can check a larger part of the system. For instance it can monitor NFS connections and reboot the machine when the process table is full or the workload exceeds a predefined value. If unsure, say N. Disable watchdog shutdown on close CONFIG_WATCHDOG_NOWAYOUT The default watchdog behaviour (which you get if you say N here) is to stop the timer if the process managing it closes the file /dev/watchdog. It's always remotely possible that this process might get killed. If you say Y here, the watchdog cannot be stopped once it has been started. WDT Watchdog timer CONFIG_WDT If you have a WDT500P or WDT501P watchdog board, say Y here, otherwise N. It is not possible to probe for this board, which means that you have to set the IO port and IRQ it uses in the kernel source at the top of drivers/char/wdt.c. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called wdt.o. WDT PCI Watchdog timer CONFIG_WDTPCI If you have a PCI WDT500/501 watchdog board, say Y here, otherwise N. It is not possible to probe for this board, which means that you have to inform the kernel about the IO port and IRQ using the "wdt=" kernel option (try "man bootparam" or see the documentation of your boot loader (lilo or loadlin) about how to pass options to the kernel at boot time). If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . The module will be called wdt_pci.o. WDT501 features CONFIG_WDT_501 Saying Y here and creating a character special file /dev/temperature with major number 10 and minor number 131 ("man mknod") will give you a thermometer inside your computer: reading from /dev/temperature yields one byte, the temperature in degrees Fahrenheit. This works only if you have a WDT501P watchdog board installed. Fan Tachometer CONFIG_WDT_501_FAN Enable the Fan Tachometer on the WDT501. Only do this if you have a fan tachometer actually set up. Software Watchdog CONFIG_SOFT_WATCHDOG A software monitoring watchdog. This will fail to reboot your system from some situations that the hardware watchdog will recover from. Equally it's a lot cheaper to install. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called softdog.o. Berkshire Products PC Watchdog CONFIG_PCWATCHDOG This is the driver for the Berkshire Products PC Watchdog card. This card simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is like the WDT501 driver but for different hardware. Please read Documentation/pcwd-watchdog.txt. The PC watchdog cards can be ordered from http://www.berkprod.com. Some example rc.local files are available from ftp://ftp.bitgate.com. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called pcwd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Most people will say N. Acquire SBC Watchdog Timer CONFIG_ACQUIRE_WDT This is the driver for the hardware watchdog on the PSC-6x86 Single Board Computer produced by Acquire Inc (and others). This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is like the WDT501 driver but for different hardware. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called pscwdt.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Most people will say N. Advantech SBC Watchdog Timer CONFIG_ADVANTECH_WDT If you are configuring a Linux kernel for the Advantech single-board computer, say `Y' here to support its built-in watchdog timer feature. See the help for CONFIG_WATCHDOG for discussion. SBC-60XX Watchdog Timer CONFIG_60XX_WDT This driver can be used with the watchdog timer found on some single board computers, namely the 6010 PII based computer. It may well work with other cards. It reads port 0x443 to enable and re-set the watchdog timer, and reads port 0x45 to disable the watchdog. If you have a card that behave in similar ways, you can probably make this driver work with your card as well. You can compile this driver directly into the kernel, or use it as a module. The module will be called sbc60xxwdt.o. Mixcom Watchdog CONFIG_MIXCOMWD This is a driver for the Mixcom hardware watchdog cards. This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called mixcomwd.o. If you want to compile it as a module, say M here and read . Most people will say N. ZF MachZ Watchdog CONFIG_MACHZ_WDT If you are using a ZF Micro MachZ processor, say Y here, otherwise N. This is the driver for the watchdog timer builtin on that processor using ZF-Logic interface. This watchdog simply watches your kernel to make sure it doesn't freeze, and if it does, it reboots your computer after a certain amount of time. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called machzwd.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. CONFIG_MICROCODE /dev/cpu/microcode - Intel IA32 CPU microcode support If you say Y here you will be able to update the microcode on Intel processors in the IA32 family, e.g. Pentium Pro, Pentium II, Pentium III, Xeon, Pentium 4 etc. You will obviously need the actual microcode binary data itself which is not shipped with the Linux kernel. For latest news and information on obtaining all the required ingredients for this driver, check: http://www.urbanmyth.org/microcode/ This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called microcode.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you use modprobe or kmod you may also want to add the line 'alias char-major-10-184 microcode' to your /etc/modules.conf file. /dev/cpu/*/msr - Model-specific register support CONFIG_X86_MSR This device gives privileged processes access to the x86 Model-Specific Registers (MSRs). It is a character device with major 202 and minors 0 to 31 for /dev/cpu/0/msr to /dev/cpu/31/msr. MSR accesses are directed to a specific CPU on multi-processor systems. /dev/cpu/*/cpuid - CPU information support CONFIG_X86_CPUID This device gives processes access to the x86 CPUID instruction to be executed on a specific processor. It is a character device with major 203 and minors 0 to 31 for /dev/cpu/0/cpuid to /dev/cpu/31/cpuid. Enhanced Real Time Clock Support CONFIG_RTC If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you will get access to the real time clock built into your computer. Every PC has such a clock built in. It can be used to generate signals from as low as 1Hz up to 8192Hz, and can also be used as a 24 hour alarm. It reports status information via the file /proc/rtc and its behaviour is set by various ioctls on /dev/rtc. If you run Linux on a multiprocessor machine and said Y to "Symmetric Multi Processing" above, you should say Y here to read and set the RTC clock in an SMP compatible fashion. If you think you have a use for such a device (such as periodic data sampling), then say Y here, and read Documentation/rtc.txt for details. AGP/GART support CONFIG_AGP This provides a kernel interface (/dev/agpgart) for programming AGP transfers on motherboards that support them. Primarily, this is used for hardware-accelerated 3d graphics, though any other AGP device could take advantage of it. If you have a 3d-capable AGP video card say 'M' or 'Y' here. Otherwise, say 'N'. You will also have to indicate support for your specific chipset. Consult the output of lspci, your motherboard manual, or the inside of your computer if unsure what to choose. Multiple selections are ok. Intel 440LX/BX/GX support CONFIG_AGP_INTEL This option gives you AGP support for the GLX component of XFree86 4.x on Intel 440LX/BX/GX, 815, and 840 chipsets. For the moment, most people should say no, unless you want to test the GLX component which can be downloaded from http://glx.on.openprojects.net/ Intel I810/I810 DC100/I810e support CONFIG_AGP_I810 This option gives you AGP support for XFree86 on the Intel 810 and 815 chipsets for their on-board integrated graphics. This is required to do any useful video modes with these boards. VIA VP3/MVP3/Apollo Pro support CONFIG_AGP_VIA This option give you AGP support for the GLX component of the "soon to be released" XFree86-4 on VIA MPV3/Apollo Pro chipsets. For the moment, most people should say no, unless you want to test the GLX component which can be downloaded from http://glx.on.openprojects.net/ AMD Irongate support CONFIG_AGP_AMD This option give you AGP support for the GLX component of the "soon to be released" XFree86-4 on Intel AMD Irongate chipset. For the moment, most people should say no, unless you want to test the GLX component which can be downloaded from http://glx.on.openprojects.net/ Generic SiS support CONFIG_AGP_SIS This option give you AGP support for the GLX component of the "soon to be released" XFree86-4 on Silicon Integrated Systems [SiS] chipsets. Note than 5591/5592 AGP chipsets are NOT supported. For the moment, most people should say no, unless you want to test the GLX component which can be downloaded from http://glx.on.openprojects.net/ ALI M1541 support CONFIG_AGP_ALI This option give you AGP support for the GLX component of the "soon to be released" XFree86-4 on ALI M1541 chipset. For the moment, most people should say no, unless you want to test the GLX component which can be downloaded from http://glx.on.openprojects.net/ Tadpole ANA H8 Support CONFIG_H8 The Hitachi H8/337 is a microcontroller used to deal with the power and thermal environment. If you say Y here, you will be able to communicate with it via a character special device. If unsure, say N. /dev/nvram support CONFIG_NVRAM If you say Y here and create a character special file /dev/nvram with major number 10 and minor number 144 using mknod ("man mknod"), you get read and write access to the 50 bytes of non-volatile memory in the real time clock (RTC), which is contained in every PC and most Ataris. This memory is conventionally called "CMOS RAM" on PCs and "NVRAM" on Ataris. /dev/nvram may be used to view settings there, or to change them (with some utility). It could also be used to frequently save a few bits of very important data that may not be lost over power-off and for which writing to disk is too insecure. Note however that most NVRAM space in a PC belongs to the BIOS and you should NEVER idly tamper with it. See Ralf Brown's interrupt list for a guide to the use of CMOS bytes by your BIOS. On Atari machines, /dev/nvram is always configured and does not need to be selected. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called nvram.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atomwide Serial Support CONFIG_ATOMWIDE_SERIAL If you have an Atomwide Serial card for an Acorn system, say Y to this option. The driver can handle 1, 2, or 3 port cards. If unsure, say N The Serial Port Dual Serial Port CONFIG_DUALSP_SERIAL If you have the Serial Port's dual serial card for an Acorn system, say Y to this option. If unsure, say N Joystick support CONFIG_JOYSTICK If you have a joystick, 6dof controller, gamepad, steering wheel, weapon control system or something like that you can say Y here to enable generic support for these controllers. You will also need to say Y or M to at least one of the hardware specific drivers. This will make the controllers available as /dev/jsX devices. Please read the file Documentation/joystick.txt which contains more information and the location of the joystick package that you'll need. Classic PC analog CONFIG_JOY_ANALOG Say Y here if you have a controller that connects to the PC gameport. This supports many different types, including joysticks with throttle control, with rudders, or with extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. For more information on how to use the driver please read Documentation/joystick.txt FPGaming and MadCatz A3D CONFIG_JOY_ASSASSIN Say Y here if you have an FPGaming or MadCatz controller using the A3D protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Gravis GrIP CONFIG_JOY_GRAVIS Say Y here if you have a Gravis controller using the GrIP protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Logitech ADI CONFIG_JOY_LOGITECH Say Y here if you have a Logitech controller using the ADI protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Microsoft SideWinder CONFIG_JOY_SIDEWINDER Say Y here if you have a Microsoft controller using the Digital Overdrive protocol over PC gameport. For more information on how to use the driver please read Documentation/joystick.txt ThrustMaster DirectConnect CONFIG_JOY_THRUSTMASTER Say Y here if you have a ThrustMaster controller using the DirectConnect (BSP) protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt Creative Labs Blaster CONFIG_JOY_CREATIVE Say Y here if you have a Creative Labs controller using the Blaster protocol over the PC gameport. For more information on how to use the driver please read Documentation/joystick.txt PDPI Lightning 4 card CONFIG_JOY_LIGHTNING Say Y here if you have a PDPI Lightning 4 gamecard and an analog joystick or gamepad connected to it. For more information on how to use the driver please read Documentation/joystick.txt Trident 4DWave/Aureal Vortex/ALi 5451 gameport CONFIG_JOY_PCI Say Y here if you have a Trident 4DWave DX/NX or Aureal Vortex 1/2 card or an ALi 5451 chip on your motherboard and want to use its gameport in its enhanced digital mode with an ordinary analog joystick. For more information on how to use the driver please read Documentation/joystick.txt Magellan and Space Mouse CONFIG_JOY_MAGELLAN Say Y here if you have a Magellan or Space Mouse 6DOF controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt SpaceTec SpaceOrb 360 and SpaceBall Avenger CONFIG_JOY_SPACEORB Say Y here if you have a SpaceOrb 360 or SpaceBall Avenger 6DOF controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt SpaceTec SpaceBall 4000 FLX CONFIG_JOY_SPACEBALL Say Y here if you have a SpaceTec SpaceBall 4000 FLX controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt Logitech WingMan Warrior CONFIG_JOY_WARRIOR Say Y here if you have a Logitech WingMan Warrior controller connected to your computer's serial port. For more information on how to use the driver please read Documentation/joystick.txt NES, SNES, N64, PSX, Multi CONFIG_JOY_CONSOLE Say Y here if you have a Nintendo Entertainment System gamepad, Super Nintendo Entertainment System gamepad, Nintendo 64 gamepad, Sony PlayStation gamepad or a Multisystem -- Atari, Amiga, Commodore, Amstrad CPC joystick connected to your parallel port. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt Sega, Multi CONFIG_JOY_DB9 Say Y here if you have a Sega Master System gamepad, Sega Genesis gamepad, Sega Saturn gamepad, or a Multisystem -- Atari, Amiga, Commodore, Amstrad CPC joystick connected to your parallel port. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt TurboGraFX interface CONFIG_JOY_TURBOGRAFX Say Y here if you have the TurboGraFX interface by Steffen Schwenke, and want to use it with Multiststem -- Atari, Amiga, Commodore, Amstrad CPC joystick. For more information on how to use the driver please read Documentation/joystick.txt and Documentation/joystick-parport.txt Amiga joysticks CONFIG_JOY_AMIGA Say Y here if you have an Amiga with a digital joystick connected to it. For more information on how to use the driver please read Documentation/joystick.txt NetWinder Button CONFIG_NWBUTTON If you enable this driver and create a character device node /dev/nwbutton with major and minor numbers 10 and 158 ("man mknod"), then every time the orange button is pressed a number of times, the number of times the button was pressed will be written to that device. This is most useful for applications, as yet unwritten, which perform actions based on how many times the button is pressed in a row. Do not hold the button down for too long, as the driver does not alter the behaviour of the hardware reset circuitry attached to the button; it will still execute a hard reset if the button is held down for longer than approximately five seconds. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called nwbutton.o. Most people will answer Y to this question and "Reboot Using Button" below to be able to initiate a system shutdown from the button. Reboot Using Button CONFIG_NWBUTTON_REBOOT If you enable this option, then you will be able to initiate a system shutdown and reboot by pressing the orange button a number of times. The number of presses to initiate the shutdown is two by default, but this can be altered by modifying the value of NUM_PRESSES_REBOOT in nwbutton.h and recompiling the driver or, if you compile the driver as a module, you can specify the number of presses at load time with "insmod button reboot_count=". Sound card support CONFIG_SOUND If you have a sound card in your computer, i.e. if it can say more than an occasional beep, say Y. Be sure to have all the information about your sound card and its configuration down (I/O port, interrupt and DMA channel), because you will be asked for it. You want to read the Sound-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. General information about the modular sound system is contained in the files Documentation/sound/Introduction. The file Documentation/sound/README.OSS contains some slightly outdated but still useful information as well. If you have a PnP sound card and you want to configure it at boot time using the ISA PnP tools (read http://www.roestock.demon.co.uk/isapnptools/ (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape)), then you need to compile the sound card support as a module ( = code which can be inserted in and removed from the running kernel whenever you want) and load that module after the PnP configuration is finished. To do this, say M here and read Documentation/modules.txt as well as Documentation/sound/README.modules; the module will be called soundcore.o. I'm told that even without a sound card, you can make your computer say more than an occasional beep, by programming the PC speaker. Kernel patches and supporting utilities to do that are in the pcsp package, available at ftp://ftp.infradead.org/pub/pcsp/. OSS sound modules CONFIG_SOUND_OSS OSS is the Open Sound System suite of sound card drivers. They make sound programming easier since they provide a common API. Say Y or M here (the module will be called sound.o) if you haven't found a driver for your sound card above, then pick your driver from the list below. Persistent DMA buffers CONFIG_SOUND_DMAP Linux can often have problems allocating DMA buffers for ISA sound cards on machines with more than 16MB of RAM. This is because ISA DMA buffers must exist below the 16MB boundary and it is quite possible that a large enough free block in this region cannot be found after the machine has been running for a while. If you say Y here the DMA buffers (64Kb) will be allocated at boot time and kept until the shutdown. This option is only useful if you said Y to "OSS sound modules", above. If you said M to "OSS sound modules" then you can get the persistent DMA buffer functionality by passing the command-line argument "dmabuf=1" to the sound.o module. Say Y unless you have 16MB or less RAM or a PCI sound card. Crystal SoundFusion (CS461x) CONFIG_SOUND_FUSION This module drives the Crystal SoundFusion devices (CS46xx series) when wired as native sound drivers with AC97 codecs. If this driver does not work try the CS4232 driver. Support for Aztech Sound Galaxy (non-PnP) cards CONFIG_SOUND_SGALAXY This module initializes the older non Plug and Play sound galaxy cards from Aztech. It supports the Waverider Pro 32 - 3D and the Galaxy Washington 16. Support for AD1816(A) based cards (EXPERIMENTAL) CONFIG_SOUND_AD1816 Say M here if you have a sound card based on the Analog Devices AD1816(A) chip. NOTE: This driver is still EXPERIMENTAL. See Documentation/sound/AD1816 for further information. Yamaha OPL3-SA1 audio controller CONFIG_SOUND_OPL3SA1 Say Y or M if you have a Yamaha OPL3-SA1 sound chip, which is usually built into motherboards. Read Documentation/sound/OPL3-SA for details. ProAudioSpectrum 16 support CONFIG_SOUND_PAS Answer Y only if you have a Pro Audio Spectrum 16, ProAudio Studio 16 or Logitech SoundMan 16 sound card. Don't answer Y if you have some other card made by Media Vision or Logitech since they are not PAS16 compatible. Enable PAS16 joystick port CONFIG_PAS_JOYSTICK Say Y here to enable the Pro Audio Spectrum 16's auxiliary joystick port. 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support CONFIG_SOUND_SB Answer Y if you have an original Sound Blaster card made by Creative Labs or a 100% hardware compatible clone (like the Thunderboard or SM Games). For an unknown card you may answer Y if the card claims to be Sound Blaster-compatible. Please read the file Documentation/sound/Soundblaster. You should also say Y here for cards based on the Avance Logic ALS-007 chip (read Documentation/sound/ALS007) and for cards based on ESS chips (read Documentation/sound/ESS1868 and Documentation/sound/ESS). If you have an SB AWE 32 or SB AWE 64, say Y here and also to "Additional lowlevel drivers" and to "SB32/AWE support" below and read Documentation/sound/INSTALL.awe. If you have an IBM Mwave card, say Y here and read Documentation/sound/mwave. You can say M here to compile this driver as a module; the module is called sb.o. Crystal Sound CS4281 CONFIG_SOUND_CS4281 Picture and feature list at . VIDC 16-bit sound CONFIG_SOUND_VIDC 16-bit support for the VIDC onboard sound hardware found on Acorn machines. Loopback MIDI device support CONFIG_SOUND_VMIDI Support for MIDI loopback on port 1 or 2. Yamaha YMF7xx PCI audio (native mode) CONFIG_SOUND_YMFPCI Support for Yamaha cards including the YMF711, YMF715, YMF718, YMF719, YMF724, Waveforce 192XG, and Waveforce 192 Digital. Yamaha PCI legacy ports support CONFIG_SOUND_YMFPCI_LEGACY Support for YMF7xx PCI cards emulating an MP401. Gravis Ultrasound support CONFIG_SOUND_GUS Say Y here for any type of Gravis Ultrasound card, including the GUS or GUS MAX. See also Documentation/sound/ultrasound for more information on configuring this card with modules. MPU-401 support (NOT for SB16) CONFIG_SOUND_MPU401 Be careful with this question. The MPU401 interface is supported by all sound cards. However, some natively supported cards have their own driver for MPU401. Enabling this MPU401 option with these cards will cause a conflict. Also, enabling MPU401 on a system that doesn't really have a MPU401 could cause some trouble. If your card was in the list of supported cards, look at the card specific instructions in the drivers/sound/Readme.cards file. It's safe to answer Y if you have a true MPU401 MIDI interface card. 6850 UART support CONFIG_SOUND_UART6850 This option enables support for MIDI interfaces based on the 6850 UART chip. This interface is rarely found on sound cards. It's safe to answer N to this question. VIDC Sound CONFIG_VIDC_SOUND Say Y here for ARM systems with the VIDC video controller and 16-bit Linear sound DACs. If unsure, say N. PSS (AD1848, ADSP-2115, ESC614) support CONFIG_SOUND_PSS Answer Y or M if you have an Orchid SW32, Cardinal DSP16, Beethoven ADSP-16 or some other card based on the PSS chipset (AD1848 codec + ADSP-2115 DSP chip + Echo ESC614 ASIC CHIP). For more information on how to compile it into the kernel or as a module see the file Documentation/sound/PSS. Enable PSS mixer (Beethoven ADSP-16 and other compatible) CONFIG_PSS_MIXER Answer Y for Beethoven ADSP-16. You may try to say Y also for other cards if they have master volume, bass, treble, and you can't control it under Linux. If you answer N for Beethoven ADSP-16, you can't control master volume, bass, treble and synth volume. If you said M to "PSS support" above, you may enable or disable this PSS mixer with the module parameter pss_mixer. For more information see the file Documentation/sound/PSS. Have DSPxxx.LD firmware file CONFIG_PSS_HAVE_BOOT If you have the DSPxxx.LD file or SYNTH.LD file for you card, say Y to include this file. Without this file the synth device (OPL) may not work. Full pathname of DSPxxx.LD firmware file CONFIG_PSS_BOOT_FILE Enter the full pathname of your DSPxxx.LD file or SYNTH.LD file, starting from /. 16 bit sampling option of GUS (_NOT_ GUS MAX) CONFIG_SOUND_GUS16 Answer Y if you have installed the 16 bit sampling daughtercard on your GUS. Answer N if you have a GUS MAX, since saying Y here disables GUS MAX support. GUS MAX support CONFIG_SOUND_GUSMAX Answer Y only if you have a Gravis Ultrasound MAX. Microsoft Sound System support CONFIG_SOUND_MSS Again think carefully before answering Y to this question. It's safe to answer Y if you have the original Windows Sound System card made by Microsoft or Aztech SG 16 Pro (or NX16 Pro). Also you may say Y in case your card is NOT among these: ATI Stereo F/X, AdLib, Audio Excell DSP16, Cardinal DSP16, Ensoniq SoundScape (and compatibles made by Reveal and Spea), Gravis Ultrasound, Gravis Ultrasound ACE, Gravis Ultrasound Max, Gravis Ultrasound with 16 bit option, Logitech Sound Man 16, Logitech SoundMan Games, Logitech SoundMan Wave, MAD16 Pro (OPTi 82C929), Media Vision Jazz16, MediaTriX AudioTriX Pro, Microsoft Windows Sound System (MSS/WSS), Mozart (OAK OTI-601), Orchid SW32, Personal Sound System (PSS), Pro Audio Spectrum 16, Pro Audio Studio 16, Pro Sonic 16, Roland MPU-401 MIDI interface, Sound Blaster 1.0, Sound Blaster 16, Sound Blaster 16ASP, Sound Blaster 2.0, Sound Blaster AWE32, Sound Blaster Pro, TI TM4000M notebook, ThunderBoard, Turtle Beach Tropez, Yamaha FM synthesizers (OPL2, OPL3 and OPL4), 6850 UART MIDI Interface. For cards having native support in VoxWare, consult the card specific instructions in drivers/sound/Readme.cards. Some drivers have their own MSS support and saying Y to this option will cause a conflict. SoundPro chip support CONFIG_SOUND_SPRO If you have a (usually Taiwanese) motherboard with the SoundPro chip on board, say Y here. Otherwise say N. Ensoniq Soundscape support CONFIG_SOUND_SSCAPE Answer Y if you have a sound card based on the Ensoniq SoundScape chipset. Such cards are being manufactured at least by Ensoniq, Spea and Reveal (Reveal makes also other cards). MediaTriX AudioTriX Pro support CONFIG_SOUND_TRIX Answer Y if you have the AudioTriX Pro sound card manufactured by MediaTrix. Have TRXPRO.HEX firmware file CONFIG_TRIX_HAVE_BOOT The MediaTrix AudioTrix Pro has an on-board microcontroller which needs to be initialized by downloading the code from the file TRXPRO.HEX in the DOS driver directory. If you don't have the TRXPRO.HEX file handy you may skip this step. However, the SB and MPU-401 modes of AudioTrix Pro will not work without this file! Full pathname of TRXPRO.HEX firmware file CONFIG_TRIX_BOOT_FILE Enter the full pathname of your TRXPRO.HEX file, starting from /. Support for OPTi MAD16 and/or Mozart based cards CONFIG_SOUND_MAD16 Answer Y if your card has a Mozart (OAK OTI-601) or MAD16 (OPTi 82C928 or 82C929 or 82C931) audio interface chip. These chips are quite common so it's possible that many no-name cards have one of them. In addition the MAD16 chip is used in some cards made by known manufacturers such as Turtle Beach (Tropez), Reveal (some models) and Diamond (latest ones). Note however that the Tropez sound cards have their own driver; if you have one of those, say N here and Y or M to "Full support for Turtle Beach WaveFront", below. See also Documentation/sound/Opti and Documentation/sound/MAD16 for more information on setting these cards up as modules. VIA 82Cxxx audio support CONFIG_SOUND_VIA82CXXX Answer Y if you have a VIA82C686 chip, typically found built onto a motherboard. Full support for Turtle Beach WaveFront synth/sound cards CONFIG_SOUND_WAVEFRONT Answer Y or M if you have a Tropez Plus, Tropez or Maui sound card and read the files Documentation/sound/Wavefront and Documentation/sound/Tropez+. Support MIDI in older MAD16 based cards (requires SB) CONFIG_MAD16_OLDCARD Answer Y (or M) if you have an older card based on the C928 or Mozart chipset and you want to have MIDI support. If you enable this option you also need to enable support for Sound Blaster. Support for Crystal CS4232 based (PnP) cards CONFIG_SOUND_CS4232 Say Y here if you have a card based on the Crystal CS4232 chip set, which uses its own Plug and Play protocol. See Documentation/sound/CS4232 for more information on configuring this card. Support for Yamaha OPL3-SA2, SA3, and SAx based PnP cards CONFIG_SOUND_OPL3SA2 Say Y or M if you have a card based on one of these Yamaha sound chipsets. Read Documentation/sound/OPL3-SA2 for more information on configuring these cards. Support for Turtle Beach Wave Front (Maui, Tropez) synthesizers CONFIG_SOUND_MAUI Say Y here if you have a Turtle Beach Wave Front, Maui, or Tropez sound card. Have OSWF.MOT firmware file CONFIG_MAUI_HAVE_BOOT Turtle Beach Maui and Tropez sound cards have a microcontroller which needs to be initialized prior to use. OSWF.MOT is a file distributed with the card's DOS/Windows drivers. Answer Y if you have this file. Full pathname of OSWF.MOT firmware file CONFIG_MAUI_BOOT_FILE Enter the full pathname of your OSWF.MOT file, starting from /. Support for Turtle Beach MultiSound Classic, Tahiti, Monterey CONFIG_SOUND_MSNDCLAS Say M here if you have a Turtle Beach MultiSound Classic, Tahiti or Monterey (not for the Pinnacle or Fiji). See Documentation/sound/MultiSound for important information about this driver. MSND Classic I/O CONFIG_MSNDCLAS_IO I/O port address for the MultiSound Classic and related cards. MSND Classic IRQ CONFIG_MSNDCLAS_IRQ Interrupt Request line for the MultiSound Classic and related cards. MSND Classic memory address CONFIG_MSNDCLAS_MEM Memory-mapped I/O base address for the MultiSound Classic and related cards. Full pathname of MSNDINIT.BIN firmware file CONFIG_MSNDCLAS_INIT_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Full pathname of MSNDPERM.BIN firmware file CONFIG_MSNDCLAS_PERM_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Support for Turtle Beach MultiSound Pinnacle, Fiji CONFIG_SOUND_MSNDPIN Say M here if you have a Turtle Beach MultiSound Pinnacle or Fiji. See Documentation/sound/MultiSound for important information about this driver. MSND Pinnacle IDE I/O 0 CONFIG_MSNDPIN_IDE_IO0 CD-ROM drive 0 memory-mapped I/O base address for the MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle IDE I/O 1 CONFIG_MSNDPIN_IDE_IO1 CD-ROM drive 1 memory-mapped I/O base address for the MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle IDE IRQ CONFIG_MSNDPIN_IDE_IRQ Interrupt request number for the IDE CD-ROM interface on the MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle I/O CONFIG_MSNDPIN_IO Memory-mapped I/O base address for the primary synthesizer on MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle MPU I/O CONFIG_MSNDPIN_MPU_IO Memory-mapped I/O base address for the Kurzweil daughterboard synthesizer on MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle MPU IRQ CONFIG_MSNDPIN_MPU_IRQ Iinterrupt request number for the Kurzweil daughterboard synthesizer on MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle IRQ CONFIG_MSNDPIN_IRQ Interrupt request line for the primary synthesizer on MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle joystick I/O CONFIG_MSNDPIN_JOYSTICK_IO Memory-mapped I/O base address for the joystick port on MultiSound Pinnacle and Fiji sound cards. MSND Pinnacle memory CONFIG_MSNDPIN_MEM Memory-mapped I/O base address for the primary synthesizer on MultiSound Pinnacle and Fiji sound cards. Full pathname of PNDSPINI.BIN firmware file CONFIG_MSNDPIN_INIT_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. Full pathname of PNDSPERM.BIN firmware file CONFIG_MSNDPIN_PERM_FILE The MultiSound cards have two firmware files which are required for operation, and are not currently included. These files can be obtained from Turtle Beach. See Documentation/sound/MultiSound for information on how to obtain this. MSND Pinnacle have S/PDIF I/O CONFIG_MSNDPIN_DIGITAL If you have the S/PDIF daughter board for the Pinnacle or Fiji, answer Y here; otherwise, say N. If you have this, you will be able to play and record from the S/PDIF port (digital signal). See Documentation/sound/MultiSound for information on how to make use of this capability. MSND Pinnacle non-PnP Mode CONFIG_MSNDPIN_NONPNP The Pinnacle and Fiji card resources can be configured either with PnP, or through a configuration port. Say Y here if your card is NOT in PnP mode. For the Pinnacle, configuration in non-PnP mode allows use of the IDE and joystick peripherals on the card as well; these do not show up when the card is in PnP mode. Specifying zero for any resource of a device will disable the device. If you are running the card in PnP mode, you must say N here and use isapnptools to configure the card's resources. MSND Pinnacle config port CONFIG_MSNDPIN_CFG This is the port which the Pinnacle and Fiji uses to configure the card's resources when not in PnP mode. If your card is in PnP mode, then be sure to say N to the previous option, "MSND Pinnacle Non-PnP Mode". MSND buffer size (kB) CONFIG_MSND_FIFOSIZE Configures the size of each audio buffer, in kilobytes, for recording and playing in the MultiSound drivers (both the Classic and Pinnacle). Larger values reduce the chance of data overruns at the expense of overall latency. If unsure, use the default. /dev/dsp and /dev/audio support CONFIG_SOUND_AUDIO If you say Y here, you will get the /dev/dsp and /dev/audio devices; these are the analog-digital and digital-analog converter devices and are very useful, so say Y. MIDI interface support CONFIG_SOUND_MIDI Answering N disables /dev/midixx devices and access to any MIDI ports using /dev/sequencer and /dev/music. This option also affects any MPU401 and/or General MIDI compatible devices. Answer Y. FM synthesizer (YM3812/OPL-3) support CONFIG_SOUND_YM3812 Answer Y if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4). Answering Y is usually a safe and recommended choice, however some cards may have software (TSR) FM emulation. Enabling FM support with these cards may cause trouble (I don't currently know of any such cards, however). Please read the file Documentation/sound/OPL3 if your card has an OPL3 chip. If unsure, say Y. Sun Audio support CONFIG_SUN_AUDIO This is support for the sound cards on Sun workstations. The code does not exist yet, so you might as well say N here. Additional low level drivers CONFIG_LOWLEVEL_SOUND If you need additional low level sound drivers which have not yet appeared, say Y. The answer to this question does not directly affect the kernel; saying Y will simply cause this configure script to present you with more options. If unsure, say Y. ACI mixer (miroPCM12/PCM20) CONFIG_ACI_MIXER ACI (Audio Command Interface) is a protocol used to communicate with the microcontroller on some sound cards produced by miro, e.g. the miroSOUND PCM12 and PCM20. The main function of the ACI is to control the mixer and to get a product identification. This Voxware ACI driver currently only supports the ACI functions on the miroSOUND PCM12 and PCM20 cards. On the PCM20, ACI also controls the radio tuner. This is supported in the video4linux radio-miropcm20 driver. Micronas Intermetall MSP 3400 support CONFIG_VIDEO_MSP3400 This option enables the driver for the Micronas Intermetall MSP 3400 series sound decoder/mixer chips often found on BT848-style TV cards. Say Y here if your sound card has a MSP 3400 series sound decoder or mixer chip. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called msp3400.o. SB32/AWE support CONFIG_AWE32_SYNTH Say Y here if you have a Sound Blaster SB32, AWE32-PnP, SB AWE64 or similar sound card. See Documentation/sound/README.awe, Documentation/sound/AWE32 and the Soundblaster-AWE mini-HOWTO, available via FTP (user: anonymous) from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO/mini for more info. Gallant's Audio Excel DSP 16 support (SC-6000 and SC-6600) CONFIG_AEDSP16 Answer Y if you have a Gallant's Audio Excel DSP 16 card. This driver supports Audio Excel DSP 16 but not the III nor PnP versions of this card. The Gallant's Audio Excel DSP 16 card can emulate either an SBPro or a Microsoft Sound System card, so you should have said Y to either "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support" or "Microsoft Sound System support", above, and you need to answer the "MSS emulation" and "SBPro emulation" questions below accordingly. You should say Y to one and only one of these two questions. Read the drivers/sound/lowlevel/README.aedsp16 file and the head of drivers/sound/lowlevel/aedsp16.c as well as Documentation/sound/AudioExcelDSP16 to get more information about this driver and its configuration. I/O base for Audio Excel DSP 16 CONFIG_AEDSP16_BASE This is the base I/O address of the Audio Excel DSP 16 card. It must be 220 or 240. If you compiled aedsp16.o as a module you can specify this parameter as 'io=0xNNN'. Audio Excel DSP 16 (SBPro emulation) CONFIG_AEDSP16_SBPRO Answer Y if you want your audio card to emulate Sound Blaster Pro. You should then say Y to "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support" and N to "Audio Excel DSP 16 (MSS emulation)". Audio Excel DSP 16 IRQ CONFIG_AEDSP16_SB_IRQ This is the IRQ of the Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 11. If you compiled aedsp16.o as a module you can specify this parameter as 'irq=NN'. Audio Excel DSP 16 DMA CONFIG_AEDSP16_SB_DMA This is the IRQ of the Audio Excel DSP 16 card. It must be 0, 1 or 3. If you compiled aedsp16.o as a module you can specify this parameter as 'dma=NN'. Audio Excel DSP 16 (MSS emulation) CONFIG_AEDSP16_MSS Answer Y if you want your audio card to emulate Microsoft Sound System. You should then say Y to "Microsoft Sound System support" and say N to "Audio Excel DSP 16 (SBPro emulation)". Audio Excel DSP 16 IRQ CONFIG_AEDSP16_MSS_IRQ This is the IRQ of the Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 11. If you compiled aedsp16.o as a module you can specify this parameter as 'irq=NN'. Audio Excel DSP 16 DMA CONFIG_AEDSP16_MSS_DMA This is the IRQ of the Audio Excel DSP 16 card. It must be 0, 1 or 3. If you compiled aedsp16.o as a module you can specify this parameter as 'dma=NN'. SC-6600 based audio cards (new Audio Excel DSP 16) CONFIG_SC6600 The SC6600 is the new version of DSP mounted on the Audio Excel DSP 16 cards. Find in the manual the FCC ID of your audio card and answer Y if you have an SC6600 DSP. SC-6600 Joystick Interface CONFIG_SC6600_JOY Say Y here in order to use the joystick interface of the Audio Excel DSP 16 card. SC-6600 CDROM Interface CONFIG_SC6600_CDROM This is used to activate the the CDROM interface of the Audio Excel DSP 16 card. Enter: 0 for Sony, 1 for Panasonic, 2 for IDE, 4 for no CDROM present. SC-6600 CD-ROM Interface I/O Address CONFIG_SC6600_CDROMBASE Base I/O port address for the CD-ROM interface of the Audio Excel DSP 16 card. C-Media PCI (CMI8338/8378) CONFIG_SOUND_CMPCI Say Y or M if you have a PCI sound card using the CMI8338 or the CMI8378 chip.set. Data on this chip is available at . Audio Excel DSP 16 (MPU401 emulation) CONFIG_AEDSP16_MPU401 Answer Y if you want your audio card to emulate the MPU-401 midi interface. You should then also say Y to "MPU-401 support". Note that the I/O base for MPU-401 support of aedsp16 is the same you have selected for "MPU-401 support". If you are using this driver as a module you have to specify the MPU I/O base address with the parameter 'mpu_base=0xNNN'. MPU401 IRQ for Audio Excel DSP 16 CONFIG_AEDSP16_MPU_IRQ This is the IRQ of the MPU-401 emulation of your Audio Excel DSP 16 card. It must be 5, 7, 9, 10 or 0 (to disable MPU-401 interface). If you compiled aedsp16.o as a module you can specify this parameter as 'mpu_irq=NN'. SGI Visual Workstation on-board audio CONFIG_SOUND_VWSND Say Y or M if you have an SGI Visual Workstation and you want to be able to use its on-board audio. Read Documentation/sound/visws for more info on this driver's capabilities. Creative EMU10K1 based PCI sound cards CONFIG_SOUND_EMU10K1 Say Y or M if you have a PCI sound card using the EMU10K1 chipset, such as the Creative SBLive!, SB PCI512 or Emu-APS. Ensoniq ES1370 based PCI sound cards CONFIG_SOUND_ES1370 Say Y or M if you have a PCI sound card utilizing the Ensoniq ES1370 chipset, such as Ensoniq's AudioPCI (non-97). To find out if your sound card uses an ES1370 without removing your computer's cover, use lspci -n and look for the PCI ID 1274:5000. Since Ensoniq was bought by Creative Labs, Sound Blaster 64/PCI models are either ES1370 or ES1371 based. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/es1370. Joystick support at boot time CONFIG_SOUND_ES1370_JOYPORT_BOOT Say Y here to use the joystick port of your sound card. Ensoniq ES1371 based PCI sound cards CONFIG_SOUND_ES1371 Say Y or M if you have a PCI sound card utilizing the Ensoniq ES1371 chipset, such as Ensoniq's AudioPCI97. To find out if your sound card uses an ES1371 without removing your computer's cover, use lspci -n and look for the PCI ID 1274:1371. Since Ensoniq was bought by Creative Labs, Sound Blaster 64/PCI models are either ES1370 or ES1371 based. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/es1371. Joystick support at boot time CONFIG_SOUND_ES1371_JOYPORT_BOOT Say Y here to use the joystick port of your sound card. Gameport I/O-range selection CONFIG_SOUND_ES1371_GAMEPORT Select the I/O-range of the gameport on a ES1371 based sound card. The card uses 8 ioports and the gameport is available at all eight ioports. Legal hexadecimal values are 200, 208, 210 and 218. The joystick driver will by default use 0x201. Leave the default 200 unless you have a joystick not attached to your sound card. ESS Solo1 based PCI sound cards (eg. SC1938) CONFIG_SOUND_ESSSOLO1 Say Y or M if you have a PCI sound card utilizing the ESS Technology Solo1 chip. To find out if your sound card uses a Solo1 chip without removing your computer's cover, use lspci -n and look for the PCI ID 125D:1969. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/solo1. S3 SonicVibes based PCI sound cards CONFIG_SOUND_SONICVIBES Say Y or M if you have a PCI sound card utilizing the S3 SonicVibes chipset. To find out if your sound card uses a SonicVibes chip without removing your computer's cover, use lspci -n and look for the PCI ID 5333:CA00. This driver differs slightly from OSS/Free, so PLEASE READ Documentation/sound/sonicvibes. Trident 4DWave DX/NX or SiS 7018 PCI Audio Core or ALi 5451 CONFIG_SOUND_TRIDENT Say Y or M if you have a PCI sound card utilizing the Trident 4DWave-DX/NX chipset or your mother board chipset has SiS 7018 built-in, or if you have an ALi 5451. The SiS 7018 PCI Audio Core is embedded in SiS960 Super South Bridge and SiS540/630 Single Chipset. Use lspci -n to find out if your sound card or chipset uses Trident 4DWave or SiS 7018. PCI ID 1023:2000 or 1023:2001 stands for Trident 4Dwave. PCI ID 1039:7018 stands for SiS7018. PCI ID 10b9:5451 stands for ALi 5451. This driver differs slightly from OSS/Free, so PLEASE READ the comments at the beginning of driver/sound/trident.c Rockwell WaveArtist CONFIG_SOUND_WAVEARTIST Say Y here to include support for the Rockwell WaveArtist sound system. This driver is mainly for the NetWinder. NeoMagic 256AV/256ZX sound chipsets CONFIG_SOUND_NM256 Say M here to include audio support for the NeoMagic 256AV/256ZX chipsets. These are the audio chipsets found in the Sony Z505S/SX/DX, some Sony F-series, and the Dell Latitude CPi and CPt laptops. It includes support for an AC97-compatible mixer and an apparently proprietary sound engine. See Documentation/sound/NM256 for further information. ESS Maestro sound chipsets CONFIG_SOUND_MAESTRO Say Y or M if you have a sound system driven by ESS's Maestro line of PCI sound chips. These include the Maestro 1, Maestro 2, and Maestro 2E, but _does not_ include the Maestro 3 and Allegro line of chips. See Documentation/sound/Maestro for more details on the 1/2/2e line. ESS Maestro3/Allegro sound chipsets CONFIG_SOUND_MAESTRO3 Say Y or M if you have a sound system driven by ESS's Maestro3 line of PCI sound chips. This includes the Allegro sound chip that is a lighter version of the Maestro3. Intel ICH audio support CONFIG_SOUND_ICH Support for integral audio in Intel's I/O Controller Hub (ICH) chipset, as used on the 810/820/840 motherboards. Are you using a crosscompiler CONFIG_CROSSCOMPILE Say Y here if you are compiling the kernel on a different architecture than the one it is intended to run on. Build fp exception handler module CONFIG_MIPS_FPE_MODULE Build the floating point exception handler module. This option is only useful for people working on the floating point exception handler. If you don't, say N. Remote GDB kernel debugging CONFIG_REMOTE_DEBUG If you say Y here, it will be possible to remotely debug the MIPS kernel using gdb. This enlarges your kernel image disk size by several megabytes and requires a machine with more than 16 MB, better 32 MB RAM to avoid excessive linking time. This is only useful for kernel hackers. If unsure, say N. Magic System Request Key support CONFIG_MAGIC_SYSRQ If you say Y here, you will have some control over the system even if the system crashes for example during kernel debugging (e.g., you will be able to flush the buffer cache to disk, reboot the system immediately or dump some status information). This is accomplished by pressing various keys while holding SysRq (Alt+PrintScreen). The keys are documented in Documentation/sysrq.txt. Don't say Y unless you really know what this hack does. ISDN subsystem CONFIG_ISDN ISDN ("Integrated Services Digital Networks", called RNIS in France) is a special type of fully digital telephone service; it's mostly used to connect to your Internet service provider (with SLIP or PPP). The main advantage is that the speed is higher than ordinary modem/telephone connections, and that you can have voice conversations while downloading stuff. It only works if your computer is equipped with an ISDN card and both you and your service provider purchased an ISDN line from the phone company. For details, read http://alumni.caltech.edu/~dank/isdn/ on the WWW. This driver allows you to use an ISDN-card for networking connections and as dialin/out device. The isdn-tty's have a built in AT-compatible modem emulator. Network devices support autodial, channel-bundling, callback and caller-authentication without having a daemon running. A reduced T.70 protocol is supported with tty's suitable for German BTX. On D-Channel, the protocols EDSS1 (Euro-ISDN) and 1TR6 (German style) are supported. See Documentation/isdn/README for more information. If you want to compile the ISDN code as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called isdn.o. If unsure, say N. Support synchronous PPP CONFIG_ISDN_PPP Over digital connections such as ISDN, there is no need to synchronize sender and recipient's clocks with start and stop bits as is done over analog telephone lines. Instead, one can use "synchronous PPP". Saying Y here will include this protocol. This protocol is used by Cisco and Sun for example. So you want to say Y here if the other end of your ISDN connection supports it. You will need a special version of pppd (called ipppd) for using this feature. See Documentation/isdn/README.syncppp and Documentation/isdn/syncPPP.FAQ for more information. Support generic MP (RFC 1717) CONFIG_ISDN_MPP With synchronous PPP enabled, it is possible to increase throughput by bundling several ISDN-connections, using this protocol. See Documentation/isdn/README.syncppp for more information. Use VJ-compression with synchronous PPP CONFIG_ISDN_PPP_VJ This enables Van Jacobson header compression for synchronous PPP. Say Y if the other end of the connection supports it. Support BSD compression CONFIG_ISDN_PPP_BSDCOMP Support for the BSD-Compress compression method for PPP, which uses the LZW compression method to compress each PPP packet before it is sent over the wire. The machine at the other end of the PPP link (usually your ISP) has to support the BSD-Compress compression method as well for this to be useful. Even if they don't support it, it is safe to say Y here. Support audio via ISDN CONFIG_ISDN_AUDIO If you say Y here, the modem-emulator will support a subset of the EIA Class 8 Voice commands. Using a getty with voice-support (mgetty+sendfax by gert@greenie.muc.de with an extension, available with the ISDN utility package for example), you will be able to use your Linux box as an ISDN-answering machine. Of course, this must be supported by the lowlevel driver also. Currently, the HiSax driver is the only voice-supporting driver. See Documentation/isdn/README.audio for more information. X.25 PLP on top of ISDN CONFIG_ISDN_X25 This feature provides the X.25 protocol over ISDN connections. See Documentation/isdn/README.x25 for more information if you are thinking about using this. ISDN diversion services support CONFIG_ISDN_DIVERSION This option allows you to use some supplementary diversion services in conjunction with the HiSax driver on an EURO/DSS1 line. Supported options are CD (call deflection), CFU (Call forward unconditional), CFB (Call forward when busy) and CFNR (call forward not reachable). Additionally the actual CFU, CFB and CFNR state may be interrogated. The use of CFU, CFB, CFNR and interrogation may be limited to some countries. The keypad protocol is still not implemented. CD should work in all countries if the service has been subscribed to. Please read the file Documentation/isdn/README.diversion. ICN 2B and 4B support CONFIG_ISDN_DRV_ICN This enables support for two kinds of ISDN-cards made by a German company called ICN. 2B is the standard version for a single ISDN line with two B-channels, 4B supports two ISDN lines. For running this card, additional firmware is necessary, which has to be downloaded into the card using a utility which is distributed separately. See Documentation/isdn/README and README.icn for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called icn.o. isdnloop support CONFIG_ISDN_DRV_LOOP This driver provides a virtual ISDN card. Its primary purpose is testing of linklevel features or configuration without getting charged by your service-provider for lots of phone calls. You need will need the loopctrl utility from the latest isdn4k-utils package to set up this driver. HiSax SiemensChipSet driver support CONFIG_ISDN_DRV_HISAX This is a driver supporting the Siemens chipset on various ISDN-cards (like AVM A1, Elsa ISDN cards, Teles S0-16.0, Teles S0-16.3, Teles S0-8, Teles/Creatix PnP, ITK micro ix1 and many compatibles). HiSax is just the name of this driver, not the name of any hardware. If you have a card with such a chipset, you should say Y here and also to the configuration option of the driver for your particular card, below. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called hisax.o. See Documentation/isdn/README.HiSax for more information on using this driver. HiSax Support for EURO/DSS1 CONFIG_HISAX_EURO Enable this if you have a EURO ISDN line. Support for german chargeinfo CONFIG_DE_AOC If you have german AOC, you can enable this to get the charginfo. Disable sending complete CONFIG_HISAX_NO_SENDCOMPLETE If you have trouble with some ugly exchanges or you live in Australia select this option. Disable sending low layer compatibility CONFIG_HISAX_NO_LLC If you have trouble with some ugly exchanges try to select this option. Disable keypad protocol option CONFIG_HISAX_NO_KEYPAD If you like to send special dialstrings including * or # without using the keypad protocol, select this option. HiSax Support for german 1TR6 CONFIG_HISAX_1TR6 Enable this if you have a old german 1TR6 line. HiSax Support for US NI1 CONFIG_HISAX_NI1 Enable this if you like to use ISDN in US on a NI1 basic rate interface. Teles 16.0/8.0 CONFIG_HISAX_16_0 This enables HiSax support for the Teles ISDN-cards S0-16.0, S0-8 and many compatibles. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port/shmem settings. Teles 16.3 or PNP or PCMCIA CONFIG_HISAX_16_3 This enables HiSax support for the Teles ISDN-cards S0-16.3 the Teles/Creatix PnP and the Teles PCMCIA. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. Teles PCI CONFIG_HISAX_TELESPCI This enables HiSax support for the Teles PCI. See Documentation/isdn/README.HiSax on how to configure it. Teles S0Box CONFIG_HISAX_S0BOX This enables HiSax support for the Teles/Creatix parallel port S0BOX. See Documentation/isdn/README.HiSax on how to configure it. AVM A1 (Fritz) CONFIG_HISAX_AVM_A1 This enables HiSax support for the AVM A1 (aka "Fritz"). See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. AVM PnP/PCI (Fritz!PNP/PCI) CONFIG_HISAX_FRITZPCI This enables HiSax support for the AVM "Fritz!PnP" and "Fritz!PCI". See Documentation/isdn/README.HiSax on how to configure it. AVM A1 PCMCIA (Fritz) CONFIG_HISAX_AVM_A1_PCMCIA This enables HiSax support for the AVM A1 "Fritz!PCMCIA"). See Documentation/isdn/README.HiSax on how to configure it. Elsa cards CONFIG_HISAX_ELSA This enables HiSax support for the Elsa Mircolink ISA cards, for the Elsa Quickstep series cards and Elsa PCMCIA. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. ITK ix1-micro Revision 2 CONFIG_HISAX_IX1MICROR2 This enables HiSax support for the ITK ix1-micro Revision 2 card. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. Eicon.Diehl Diva cards CONFIG_HISAX_DIEHLDIVA This enables HiSax support for the Eicon.Diehl Diva none PRO versions passive ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. ASUSCOM ISA cards CONFIG_HISAX_ASUSCOM This enables HiSax support for the AsusCom and their OEM versions passive ISDN ISA cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. TELEINT cards CONFIG_HISAX_TELEINT This enables HiSax support for the TELEINT SA1 semiactiv ISDN card. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. HFC-S based cards CONFIG_HISAX_HFCS This enables HiSax support for the HFC-S 2BDS0 based cards, like teles 16.3c. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. Sedlbauer cards CONFIG_HISAX_SEDLBAUER This enables HiSax support for the Sedlbauer passive ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using the different cards, a different D-channel protocol, or non-standard IRQ/port settings. USR Sportster internal TA CONFIG_HISAX_SPORTSTER This enables HiSax support for the USR Sportster internal TA card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. MIC card CONFIG_HISAX_MIC This enables HiSax support for the ITH MIC card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. NETjet card CONFIG_HISAX_NETJET This enables HiSax support for the NetJet from Traverse Technologies. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. NETspider U card CONFIG_HISAX_NETJET_U This enables HiSax support for the Netspider U interface ISDN card from Traverse Technologies. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. Niccy PnP/PCI card CONFIG_HISAX_NICCY This enables HiSax support for the Dr. Neuhaus Niccy PnP or PCI. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. Siemens I-Surf card CONFIG_HISAX_ISURF This enables HiSax support for the Siemens I-Talk/I-Surf card with ISAR chip. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HST Saphir card CONFIG_HISAX_HSTSAPHIR This enables HiSax support for the HST Saphir card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. Telekom A4T card CONFIG_HISAX_BKM_A4T This enables HiSax support for the Telekom A4T card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. Scitel Quadro card CONFIG_HISAX_SCT_QUADRO This enables HiSax support for the Scitel Quadro card. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. Gazel cards CONFIG_HISAX_GAZEL This enables HiSax support for the Gazel cards. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HFC PCI-Bus cards CONFIG_HISAX_HFC_PCI This enables HiSax support for the HFC-S PCI 2BDS0 based cards. For more informations see under Documentation/isdn/README.hfc-pci. Winbond W6692 based cards CONFIG_HISAX_W6692 This enables HiSax support for Winbond W6692 based PCI ISDN cards. See Documentation/isdn/README.HiSax on how to configure it using a different D-channel protocol, or non-standard IRQ/port settings. HFC-S+, HFC-SP, HFC-PCMCIA cards (EXPERIMENTAL) CONFIG_HISAX_HFC_SX This enables HiSax support for the HFC-S+, HFC-SP and HFC-PCMCIA cards. This code is not finished yet. Am7930 (EXPERIMENTAL) CONFIG_HISAX_AMD7930 This enables HiSax support for the AMD7930 chips on some SPARCs. This code is not finished yet. PCBIT-D support CONFIG_ISDN_DRV_PCBIT This enables support for the PCBIT ISDN-card. This card is manufactured in Portugal by Octal. For running this card, additional firmware is necessary, which has to be downloaded into the card using a utility which is distributed separately. See Documentation/isdn/README and Documentation/isdn/README.pcbit for more information. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called pcbit.o. Spellcaster support (EXPERIMENTAL) CONFIG_ISDN_DRV_SC This enables support for the Spellcaster BRI ISDN boards. This driver currently builds only in a modularized version ( = code which can be inserted in and removed from the running kernel whenever you want, details in Documentation/modules.txt); the module will be called sc.o. See Documentation/isdn/README.sc and http://www.spellcast.com for more information. Eicon active card support CONFIG_ISDN_DRV_EICON Say Y here if you have an Eicon active ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using the eiconctrl utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.eicon for more information. Eicon legacy driver CONFIG_ISDN_DRV_EICON_OLD Say Y here to use your Eicon active ISDN card with ISDN4Linux isdn module. Eicon Diva Server card support CONFIG_ISDN_DRV_EICON_PCI Say Y here if you have an Eicon Diva Server (BRI/PRI/4BRI) ISDN card. Please read Documentation/isdn/README.eicon for more information. Eicon old-type card support CONFIG_ISDN_DRV_EICON_ISA Say Y here if you have an old-type Eicon active ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using the eiconctrl utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.eicon for more information. Eicon driver type standalone CONFIG_ISDN_DRV_EICON_DIVAS Enable this option if you want the eicon driver as standalone version with no interface to the ISDN4Linux isdn module. If you say Y here, the eicon module only supports the Diva Server PCI cards and will provide its own IDI interface. You should say N here. Support AT-Fax Class 2 commands CONFIG_ISDN_TTY_FAX If you say Y here, the modem-emulator will support a subset of the Fax Class 2 commands. Using a getty with fax-support (mgetty+sendfax, hylafax), you will be able to use your Linux box as an ISDN-fax-machine. This must be supported by the lowlevel driver also. See Documentation/isdn/README.fax for more information. CAPI2.0 support CONFIG_ISDN_CAPI This option enables a CAPI2.0 (Common ISDN Application Programming Interface), a standard making it easy for programs to access ISDN hardware, see http://www.capi.org/ CAPI2.0 /dev/capi20 support CONFIG_ISDN_CAPI_CAPI20 This option will provide the CAPI 2.0 interface to userspace applications via /dev/capi20. Applications should use the standardized libcapi20 to access this functionality. You should say Y/M here. CAPI2.0 Middleware support CONFIG_ISDN_CAPI_MIDDLEWARE This option enables CAPI2.0 Middleware support CAPI2.0 filesystem support CONFIG_ISDN_CAPIFS This option enables CAPI CAPI2.0 filesystem support CAPI2.0 capidrv interface support CONFIG_ISDN_CAPI_CAPIDRV This option provides the glue code to hook up CAPI driven cards to the legacy isdn4linux link layer. If you have a card which is supported by a CAPI driver, but still want to use old features like ippp interfaces or ttyI emulation, say Y/M here. AVM B1 ISA support CONFIG_ISDN_DRV_AVMB1_B1ISA Enable support for the ISA version of the AVM B1 card. AVM B1 PCI support CONFIG_ISDN_DRV_AVMB1_B1PCI Enable support for the PCI version of the AVM B1 card. AVM B1 PCI V4 support CONFIG_ISDN_DRV_AVMB1_B1PCIV4 Enable support for the V4 version of AVM B1 PCI card. AVM T1/T1-B ISA support CONFIG_ISDN_DRV_AVMB1_T1ISA Enable support for the AVM T1 T1B card. Note: This is a PRI card and handle 30 B-channels. AVM B1/M1/M2 PCMCIA support CONFIG_ISDN_DRV_AVMB1_B1PCMCIA Enable support for the PCMCIA version of the AVM B1 card. AVM T1/T1-B PCI support CONFIG_ISDN_DRV_AVMB1_T1PCI Enable support for the AVM T1 T1B card. Note: This is a PRI card and handle 30 B-channels. AVM C4 support CONFIG_ISDN_DRV_AVMB1_C4 Enable support for the AVM C4 PCI card. This card handle 4 BRI ISDN lines (8 channels). Verbose reason code reporting (kernel size +=7K) CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON If you say Y here, the AVM B1 driver will give verbose reasons for disconnecting. This will increase the size of the kernel by 7 KB. If unsure, say Y. IBM Active 2000 support (EXPERIMENTAL) CONFIG_ISDN_DRV_ACT2000 Say Y here if you have an IBM Active 2000 ISDN card. In order to use this card, additional firmware is necessary, which has to be loaded into the card using a utility which is part of the latest isdn4k-utils package. Please read the file Documentation/isdn/README.act2000 for more information. Support for AP1000 multicomputer CONFIG_AP1000 This enables support for a SPARC based parallel multi-computer called AP1000+. For details on our efforts to port Linux to this machine see http://cap.anu.edu.au/cap/projects/linux (to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape) or mail to hackers@cafe.anu.edu.au Hypercope HYSDN cards (Champ, Ergo, Metro) support (module) CONFIG_HYSDN Say Y here if you have one of Hypercope's active PCI ISDN cards Champ, Ergo and Metro. You will then get a module called hysdn.o. Please read the file for more information. HYSDN CAPI 2.0 support CONFIG_HYSDN_CAPI Say Y here if you like to use Hypercope's CAPI 2.0 interface Support for Sun4 architecture CONFIG_SUN4 Say Y here if, and only if, your machine is a Sun4. Note that a kernel compiled with this option will run only on Sun4. (And the current version will probably work only on sun4/330.) SPARC ESP SCSI support CONFIG_SCSI_SUNESP This is the driver for the Sun ESP SCSI host adapter. The ESP chipset is present in most SPARC-based computers. PTI Qlogic, ISP Driver CONFIG_SCSI_QLOGICPTI This driver supports SBUS SCSI controllers from PTI or QLogic. These controllers are known under Solaris as qpti and in the openprom as PTI,ptisp or QLGC,isp. Note that PCI QLogic SCSI controllers are driven by a different driver. This support is also available as a module called qlogicpti.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Sun PROM console CONFIG_PROM_CONSOLE Say Y to build a console driver for Sun machines that uses the terminal emulation built into their console PROMS. SPARC /dev/openprom compatibility driver CONFIG_SUN_OPENPROMIO This driver provides user programs with an interface to the SPARC PROM device tree. The driver implements a SunOS-compatible interface and a NetBSD-compatible interface. If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M and read Documentation/modules.txt. If unsure, say Y. Openprom tree appears in /proc/openprom CONFIG_SUN_OPENPROMFS If you say Y, the OpenPROM device tree will be available as a virtual file system, which you can mount to /proc/openprom by "mount -t openpromfs none /proc/openprom". If you want to compile the /proc/openprom support as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read . The module will be called openpromfs.o. If unsure, say M. Kernel support for Linux/Sparc 32bit binary compatibility CONFIG_SPARC32_COMPAT This allows you to run 32-bit binaries on your Ultra. Everybody wants this; say Y. Kernel support for 32-bit ELF binaries CONFIG_BINFMT_ELF32 This allows you to run 32-bit Linux/ELF binaries on your Ultra. Everybody wants this; say Y. Kernel support for 32-bit (ie. SunOS) a.out binaries CONFIG_BINFMT_AOUT32 This allows you to run 32-bit a.out format binaries on your Ultra. If you want to run SunOS binaries (see SunOS binary emulation below) or other a.out binaries, say Y. If unsure, say N. SunOS binary emulation CONFIG_SUNOS_EMUL This allows you to run most SunOS binaries. If you want to do this, say Y here and place appropriate files in /usr/gnemul/sunos. See for more information. If you want to run SunOS binaries on an Ultra you must also say Y to "Kernel support for 32-bit a.out binaries" above. Mostek real time clock support CONFIG_SUN_MOSTEK_RTC The Mostek RTC chip is used on all knows Sun computers except some JavaStation-s. For a JavaStation you need to say Y both here and to CONFIG_RTC. Say Y here unless you are building a special purpose kernel. OBP Flash Device support CONFIG_OBP_FLASH The OpenBoot PROM on Ultra systems is flashable. If you want to be able to upgrade the OBP firmware, say Y here. Siemens SAB82532 serial support CONFIG_SAB82532 This driver supports the serial ports on newer (PCI) Ultra systems. Say Y if you want to be able to use your serial ports. Videopix Frame Grabber CONFIG_SUN_VIDEOPIX Say Y here to support the Videopix Frame Grabber from Sun Microsystems, commonly found on SPARCstations. This card, which is based on the Phillips SAA9051, can handle NTSC and PAL/SECAM and SVIDEO signals. Sun bidirectional parallel port support CONFIG_SUN_BPP Say Y here to support Sun's obsolete variant of IEEE1284 bidirectional parallel port protocol as /dev/bppX. Can be built on x86 machines. Aurora Multiboard 1600se CONFIG_SUN_AURORA The Aurora Multiboard is a multi-port high-speed serial controller. If you have one of these, say Y. Audio support CONFIG_SPARCAUDIO This driver provides support for the build-in sound devices on most Sun machines. If you want to be able to use this, select this option and one or more of the lowlevel drivers below. See for more information. AMD7930 Lowlevel Driver CONFIG_SPARCAUDIO_AMD7930 This driver supports the AMD 7930 chip found on sun4c, 4/6xx, and SparcClassic systems. CS4231 Lowlevel Driver CONFIG_SPARCAUDIO_CS4231 This driver supports the Crystal Semiconductor CS4231 chip found on the SS4, SS5, and Ultras. DBRI Lowlevel Driver CONFIG_SPARCAUDIO_DBRI This driver supports the DBRI audio interface found on the SS10, SS20, Sparcbook 3, and Voyager systems. Dummy Lowlevel Driver CONFIG_SPARCAUDIO_DUMMY This is a pseudo-driver used for debugging and testing the sparcaudio subsystem. Say N unless you want to work on this subsystem. /proc/hardware support CONFIG_PROC_HARDWARE Say Y here to support the /proc/hardware file, which gives you access to information about the machine you're running on, including the model, CPU, MMU, clock speed, BogoMIPS rating, and memory size. # # m68k-specific kernel options # Documented by Chris Lawrence et al. # Amiga support CONFIG_AMIGA This option enables support for the Amiga series of computers. If you plan to use this kernel on an Amiga, say Y here and browse the material available in Documentation/m68k; otherwise say N. A4000T SCSI support CONFIG_A4000T_SCSI Support for the NCR53C710 SCSI controller on the Amiga 4000T. A4091 SCSI support CONFIG_A4091_SCSI Support for the NCR53C710 chip on the Amiga 4091 Z3 SCSI2 controller (1993). Very obscure -- the 4091 was part of an Amiga 4000 upgrade plan at the time the Amiga business was sold to DKB. Atari support CONFIG_ATARI This option enables support for the 68000-based Atari series of computers (including the TT, Falcon and Medusa). If you plan to use this kernel on an Atari, say Y here and browse the material available in Documentation/m68k; otherwise say N. Hades support CONFIG_HADES This option enables support for the Hades Atari clone. If you plan to use this kernel on a Hades, say Y here; otherwise say N. Macintosh support CONFIG_MAC This option enables support for the Apple Macintosh series of computers (yes, there is experimental support now, at least for part of the series). Say N unless you're willing to code the remaining necessary support. ;) HP9000/300 support CONFIG_HP300 This option enables support for the HP9000/300 series of workstations. Support for these machines is still very experimental. If you plan to try to use the kernel on such a machine say Y here. Everybody else says N. Q40/Q60 support CONFIG_Q40 The Q40 is a Motorola 68040-based successor to the Sinclair QL manufactured in Germany. There is an official Q40 home page at . This option enables support for the Q40 and Q60. Select your CPU below. For 68LC060 don't forget to enable FPU emulation. Sun 3 support CONFIG_SUN3 This option enables support for the Sun 3 series of workstations. Currently, only the Sun 3/80 is supported within the Sun 3x family. You will also want to enable 68030 support. General Linux information on the Sun 3x series (now discontinued) is at . If you don't want to compile a kernel for a Sun 3, say N. Sun 3X support CONFIG_SUN3X This option enables support for the Sun 3x series of workstations. Be warned that this support is very experimental. You will also want to say Y to 68020 support and N to the other processors below. General Linux information on the Sun 3x series (now discontinued) is at . If you don't want to compile a kernel for a Sun 3x, say N. Sun3x builtin serial support CONFIG_SUN3X_ZS ZS refers to a type of asynchronous serial port built in to the Sun3 and Sun3x workstations; if you have a Sun 3, you probably have these. Say 'Y' to support ZS ports directly. This option must be enabled in order to support the keyboard and mouse ports. Sun keyboard support CONFIG_SUN_KEYBOARD Say Y here to support the keyboard found on Sun 3 and 3x workstations. It can also be used support Sun Type-5 keyboards through an adaptor. See and for details on the latter. 68020 support CONFIG_M68020 If you anticipate running this kernel on a computer with a MC68020 processor, say Y. Otherwise, say N. Note that the 68020 requires a 68851 MMU (Memory Management Unit) to run Linux/m68k. 68030 support CONFIG_M68030 If you anticipate running this kernel on a computer with a MC68030 processor, say Y. Otherwise, say N. Note that a MC68EC030 will not work, as it does not include an MMU (Memory Management Unit). 68040 support CONFIG_M68040 If you anticipate running this kernel on a computer with a MC68LC040 or MC68040 processor, say Y. Otherwise, say N. Note that an MC68EC040 will not work, as it does not include an MMU (Memory Management Unit). 68060 support CONFIG_M68060 If you anticipate running this kernel on a computer with a MC68060 processor, say Y. Otherwise, say N. Math emulation support CONFIG_FPU_EMU At some point in the future, this will cause floating-point math instructions to be emulated by the kernel on machines that lack a floating-point math coprocessor. Thrill-seekers and chronically sleep-deprived psychotic hacker types can say Y now, everyone else should probably wait a while. Math emulation only kernel CONFIG_FPU_EMU_ONLY This option prevents any floating-point instructions from being compiled into the kernel, thereby the kernel doesn't save any floating point context anymore during task switches, so this kernel will only be usable on machines without a floating-point math coprocessor. This makes the kernel a bit faster as no tests needs to be executed whether a floating-point instruction in the kernel should be executed or not. Math emulation extra precision CONFIG_FPU_EMU_EXTRAPREC The fpu uses normally a few bit more during calculations for correct rounding, the emulator can (often) do the same but this extra calculation can cost quite some time, so you can disable it here. The emulator will then only calculate with a 64 bit mantissa and round slightly incorrect. Advanced configuration options CONFIG_ADVANCED This gives you access to some advanced options for the CPU. The defaults should be fine for most users, but these options may make it possible for you to improve performance somewhat if you know what you are doing. Note that the answer to this question won't directly affect the kernel: saying N will just cause the configurator to skip all the questions about these options. Most users should say N to this question. Use one physical chunk of memory only CONFIG_SINGLE_MEMORY_CHUNK Ignore all but the first contiguous chunk of physical memory for VM purposes. This will save a few bytes kernel size and may speed up some operations. Say N if not sure. Advanced processor options CONFIG_ADVANCED_CPU This gives you access to some advanced options for the CPU. The defaults should be fine for most users, but these options may make it possible for you to improve performance somewhat if you know what you are doing. Most users should say N to this question. Use read-modify-write instructions CONFIG_RMW_INSNS This allows to use certain instructions that work with indivisible read-modify-write bus cycles. While this is faster than the workaround of disabling interrupts, it can conflict with DMA ( = direct memory access) on many Amiga systems, and it is also said to destabilize other machines. It is very likely that this will cause serious problems on any Amiga or Atari Medusa if set. The only configuration where it should work are 68030-based Ataris, where it apparently improves performance. But you've been warned! Unless you really know what you are doing, say N. Try Y only if you're quite adventurous. Amiga AutoConfig Identification CONFIG_ZORRO This enables support for automatic identification of Amiga expansion cards that obey the AutoConfig(tm) specification. Say Y if you want your expansion cards to be identified on bootup; it will enlarge your kernel by about 10 KB. The identification information is also available through /proc/zorro (say Y to "/proc filesystem support"!). Note that even if you say N here, you can still use your expansion cards. If in doubt, say Y. Amiga 1200/600 PCMCIA support CONFIG_AMIGA_PCMCIA Include support in the kernel for pcmcia on Amiga 1200 and Amiga 600. If you intend to use pcmcia cards say Y; otherwise say N. Hisoft Whippet PCMCIA serial support CONFIG_WHIPPET_SERIAL HiSoft has a web page at , but there is no listing for the Whippet in their Amiga section. Amiga GSP (TMS340x0) support CONFIG_AMIGA_GSP Include support for Amiga graphics cards that use the Texas Instruments TMS340x0 GSP (Graphics Signal Processor) chips. Say Y if you want to use a DMI Resolver or Commodore A2410 (Lowell) graphics card on an Amiga; otherwise, say N. DMI Resolver support CONFIG_GSP_RESOLVER Include support in the kernel for the DMI Resolver graphics card. If you have one, say Y; otherwise, say N. A2410 support CONFIG_GSP_A2410 Include support in the kernel for the Commodore/University of Lowell A2410 graphics card. If you have one, say Y; otherwise, say N. Amiga Zorro II ramdisk support CONFIG_AMIGA_Z2RAM This enables support for using Chip RAM and Zorro II RAM as a ramdisk or as a swap partition. Say Y if you want to include this driver in the kernel. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called z2ram.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari ST-RAM swap support CONFIG_STRAM_SWAP This enables support for using (parts of) ST-RAM as swap space, instead of as normal system memory. This can first enhance system performance if you have lots of alternate RAM (compared to the size of ST-RAM), because executable code always will reside in faster memory. ST-RAM will remain as ultra-fast swap space. On the other hand, it allows much improved dynamic allocations of ST-RAM buffers for device driver modules (e.g. floppy, ACSI, SLM printer, DMA sound). The probability that such allocations at module load time fail is drastically reduced. ST-RAM statistics in /proc CONFIG_STRAM_PROC Say Y here to report ST-RAM usage statistics in /proc/stram. See the help for CONFIG_STRAM_SWAP for discussion of ST-RAM and its uses. Atari ACSI support CONFIG_ATARI_ACSI This enables support for the Atari ACSI interface. The driver supports hard disks and CD-ROMs, which have 512-byte sectors, or can be switched to that mode. Due to the ACSI command format, only disks up to 1 GB are supported. Special support for certain ACSI to SCSI adapters, which could relax that, isn't included yet. The ACSI driver is also the basis for certain other drivers for devices attached to the ACSI bus: Atari SLM laser printer, BioNet-100 Ethernet, and PAMsNet Ethernet. If you want to use one of these devices, you need ACSI support, too. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acsi.o. Probe all LUNs on each ACSI device CONFIG_ACSI_MULTI_LUN If you have a ACSI device that supports more than one LUN (Logical Unit Number), e.g. a CD jukebox, you should say Y here so that all will be found by the ACSI driver. An ACSI device with multiple LUNs acts logically like multiple ACSI devices. The vast majority of ACSI devices have only one LUN, and so most people can say N here and should in fact do so, because it is safer. Atari SLM laser printer support CONFIG_ATARI_SLM If you have an Atari SLM laser printer, say Y to include support for it in the kernel. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called acsi_slm.o. Be warned: the driver needs much ST-RAM and can cause problems due to that fact! A3000 WD33C93A support CONFIG_A3000_SCSI If you have an Amiga 3000 and have SCSI devices connected to the built-in SCSI controller, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called wd33c93.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. A2091 WD33C93A support CONFIG_A2091_SCSI If you have a Commodore A2091 SCSI controller, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called wd33c93.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. GVP Series II WD33C93A support CONFIG_GVP11_SCSI If you have a Great Valley Products Series II SCSI controller, answer Y. Also say Y if you have a later model of GVP SCSI controller (such as the GVP A4008 or a Combo board). Otherwise, answer N. This driver does NOT work for the T-Rex series of accelerators from TekMagic and GVP-M. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called gvp11.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Cyberstorm SCSI support CONFIG_CYBERSTORM_SCSI If you have an Amiga with an original (MkI) Phase5 Cyberstorm accelerator board and the optional Cyberstorm SCSI controller, answer Y. Otherwise, say N. Cyberstorm II SCSI support CONFIG_CYBERSTORMII_SCSI If you have an Amiga with a Phase5 Cyberstorm MkII accelerator board and the optional Cyberstorm SCSI controller, say Y. Otherwise, answer N. Blizzard 2060 SCSI support CONFIG_BLZ2060_SCSI If you have an Amiga with a Phase5 Blizzard 2060 accelerator board and want to use the onboard SCSI controller, say Y. Otherwise, answer N. Blizzard 1230IV/1260 SCSI support CONFIG_BLZ1230_SCSI If you have an Amiga 1200 with a Phase5 Blizzard 1230IV or Blizzard 1260 accelerator, and the optional SCSI module, say Y. Otherwise, say N. Blizzard PowerUP 603e+ SCSI support CONFIG_BLZ603EPLUS_SCSI If you have an Amiga 1200 with a Phase5 Blizzard PowerUP 603e+ accelerator, say Y. Otherwise, say N. Fastlane SCSI support CONFIG_FASTLANE_SCSI If you have the Phase5 Fastlane Z3 SCSI controller, or plan to use one in the near future, say Y to this question. Otherwise, say N. BSC Oktagon SCSI support CONFIG_OKTAGON_SCSI If you have the BSC Oktagon SCSI disk controller for the Amiga, say Y to this question. If you're in doubt about whether you have one, see the picture at . Atari native SCSI support CONFIG_ATARI_SCSI If you have an Atari with built-in NCR5380 SCSI controller (TT, Falcon, ...) say Y to get it supported. Of course also, if you have a compatible SCSI controller (e.g. for Medusa). This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called atari_scsi.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. This driver supports both styles of NCR integration into the system: the TT style (separate DMA), and the Falcon style (via ST-DMA, replacing ACSI). It does NOT support other schemes, like in the Hades (without DMA). Long delays for Toshiba CD-ROMs CONFIG_ATARI_SCSI_TOSHIBA_DELAY This option increases the delay after a SCSI arbitration to accommodate some flaky Toshiba CD-ROM drives. Say Y if you intend to use a Toshiba CD-ROM drive; otherwise, the option is not needed and would impact performance a bit, so say N. Reset SCSI-devices at boottime CONFIG_ATARI_SCSI_RESET_BOOT Reset the devices on your Atari whenever it boots. This makes the boot process fractionally longer but may assist recovery from errors that leave the devices with SCSI operations partway completed. Hades SCSI DMA emulator (EXPERIMENTAL) CONFIG_TT_DMA_EMUL This option enables code which emulates the TT SCSI DMA chip on the Hades. This increases the SCSI transfer rates at least ten times compared to PIO transfers. Note that this code is experimental and has only been tested on a Hades with a 68060 processor. Before you use this, make backups of your entire hard disk. Macintosh NCR5380 (II-series) SCSI CONFIG_MAC_SCSI If you have a Macintosh with NCR5380-based SCSI, say Y. Otherwise, say N. This SCSI adaptor is found on all 68030-based Macs, including the II, IIx, IIcx, IIci, IIsi, IIvx, IIvi, Color Classic, Classic II, LC II, LC III, and their associated Performa models, as well as the 68030-based PowerBooks and Duos. Macintosh NCR53c9[46] (Quadra/Centris) SCSI CONFIG_SCSI_MAC_ESP If you have a Macintosh with NCR53c96 or NCR53c94-based SCSI, say Y. Otherwise, say N. These SCSI adaptors are found on all 68040-based Macs, including all Quadra and Centris models, the LC 475/476 and 575, and the Performa 575, 580, and 630. Ariadne support CONFIG_ARIADNE If you have a Village Tronic Ariadne Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called ariadne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Ariadne II support CONFIG_ARIADNE2 If you have a Village Tronic Ariadne II Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called ariadne2.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. A2065 support CONFIG_A2065 If you have a Commodore A2065 Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called a2065.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Hydra support CONFIG_HYDRA If you have a Hydra Ethernet adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called hydra.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Sun3x ESP SCSI driver CONFIG_SUN3X_ESP The ESP was an on-board SCSI controller used on Sun 3/80 machines. Say Y here to compile in support for it. Pcmcia NE2000 compatible support CONFIG_APNE If you have a pcmcia ne2000 compatible adapter, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called apne.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari Lance support CONFIG_ATARILANCE Say Y to include support for several Atari Ethernet adapters based on the AMD Lance chipset: RieblCard (with or without battery), or PAMCard VME (also the version by Rhotron, with different addresses). BioNet-100 support CONFIG_ATARI_BIONET Say Y to include support for BioData's BioNet-100 Ethernet adapter for the ACSI port. The driver works (has to work...) with a polled I/O scheme, so it's rather slow :-( PAMsNet support CONFIG_ATARI_PAMSNET Say Y to include support for the PAMsNet Ethernet adapter for the ACSI port ("ACSI node"). The driver works (has to work...) with a polled I/O scheme, so it's rather slow :-( Macintosh NS 8390 based ethernet cards CONFIG_DAYNAPORT Say Y to include support for Macintosh ethernet adaptors based on the National Semiconductor 8390 and ST-NIC chips. This family of cards includes the majority of NuBus ethernet cards, as well as many LC-PDS slot cards, from Apple, Asante, Cabletron, Farallon, and other manufacturers. Macintosh SONIC based ethernet CONFIG_MACSONIC Say Y to include support for Macintosh ethernet adaptors based on the National Semiconductor SONIC chip (83932 and 83934). If you have a Quadra with onboard SONIC ethernet, say Y here. Onboard SONIC ethernet chips are found on all Quadra 605, 610, 650, 700, 800, 900, and 950 models, all Centris 650, most Centris 610, and all LC475/476 models. It is also found in the DuoDock Plus and DuoDock II, as well as many NuBus, LC-PDS, and comm-slot cards. Macintosh NS8390 based Ethernet support CONFIG_MAC8390 If you want to include a driver to support Nubus or LC-PDS Ethernet cards using an NS8390 chipset or its equivalent, say Y and read the Ethernet-HOWTO, available from . Macintosh CS89x0 based Ethernet support CONFIG_MAC89x0 Support for CS89x0 chipset based Ethernet cards. If you have a Nubus or LC-PDS network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from . If you want to compile this as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read as well as . This module will be called mac89x0.o. Macintosh (AV) onboard MACE ethernet CONFIG_MACMACE Say Y here if you have a Centris 660AV, a Quadra 660AV, or a Quadra 840AV, and you would like to use the onboard MACE Ethernet adaptor. Multiface Card III parallel support CONFIG_MULTIFACE_III_LP If you have a Multiface III card for your Amiga, and want to use its parallel port in Linux, say Y. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called lp_m68k.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga mouse support CONFIG_AMIGAMOUSE If you want to be able to use an Amiga mouse in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called amigamouse.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Amiga Copper Console CONFIG_COPCON This configures the console to use the Amiga's graphics coprocessor for scrolling, instead of using the CPU. This option markedly improves response times in the high color modes (5 bitplanes and up). If you would like to use this, say Y; otherwise, say N. Atari mouse support CONFIG_ATARIMOUSE If you want to be able to use an Atari mouse in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module is called atarimouse.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari MFP serial support CONFIG_ATARI_MFPSER If you like to use the MFP serial ports ("Modem1", "Serial1") under Linux, say Y. The driver equally supports all kinds of MFP serial ports and automatically detects whether Serial1 is available. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Note for Falcon users: You also have an MFP port, it's just not wired to the outside... But you could use the port under Linux. Atari SCC serial support CONFIG_ATARI_SCC If you have serial ports based on a Zilog SCC chip (Modem2, Serial2, LAN) and like to use them under Linux, say Y. All built-in SCC's are supported (TT, MegaSTE, Falcon), and also the ST-ESCC. If you have two connectors for channel A (Serial2 and LAN), they are visible as two separate devices. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari SCC serial DMA support CONFIG_ATARI_SCC_DMA This enables DMA support for receiving data on channel A of the SCC. If you have a TT you may say Y here and read drivers/char/atari_SCC.README. All other users should say N here, because only the TT has SCC-DMA, even if your machine keeps claiming so at boot time. Atari MIDI serial support CONFIG_ATARI_MIDI If you want to use your Atari's MIDI port in Linux, say Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Atari DSP56k Digital Signal Processor support CONFIG_ATARI_DSP56K If you want to be able to use the DSP56001 in Falcons, say Y. This driver is still experimental, and if you don't know what it is, or if you don't have this processor, just say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Support for early boot text console CONFIG_BOOTX_TEXT Say Y here to see progress messages from the boot firmware in text mode. Requires either BootX or Open Firmware. Amiga builtin serial support CONFIG_AMIGA_BUILTIN_SERIAL If you want to use your Amiga's built-in serial port in Linux, answer Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. GVP IO-Extender support CONFIG_GVPIOEXT If you want to use a GVP IO-Extender serial card in Linux, say Y. Otherwise, say N. GVP IO-Extender parallel printer support CONFIG_GVPIOEXT_LP Say Y to enable driving a printer from the parallel port on your GVP IO-Extender card, N otherwise GVP IO-Extender PLIP support CONFIG_GVPIOEXT_PLIP Say Y to enable doing IP over the parallel port on your GVP IO-Extender card, N otherwise Multiface Card III serial support CONFIG_MULTIFACE_III_TTY If you want to use a Multiface III card's serial port in Linux, answer Y. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Macintosh SCC serial support CONFIG_MAC_SCC If you have a Macintosh and would like to use its serial ("Printer" and "Modem") ports in Linux, say Y. Otherwise, say N. Amiga or Atari DMA sound support CONFIG_DMASOUND If you want to use the internal audio of your Atari or Amiga in Linux, answer Y to this question. This will provide a Sun-like /dev/audio, compatible with the Linux/i386 sound system. Otherwise, say N. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. HP DCA serial support CONFIG_HPDCA If you want to use the internal "DCA" serial ports on an HP300 machine, say Y here. HP on-board LANCE support CONFIG_HPLANCE If you want to use the builtin "LANCE" Ethernet controller on an HP300 machine, say Y here. DIO bus support CONFIG_DIO Say Y here to enable support for the "DIO" expansion bus used in HP300 machines. If you are using such a system you almost certainly want this. MSDOS partition support CONFIG_MSDOS_PARTITION This option enables support for using hard disks that were partitioned on an MS-DOS system. This may be useful if you are sharing a hard disk between i386 and m68k Linux boxes, for example. Say Y if you need this feature; users who are only using their system-native partitioning scheme can say N here. Processor Type CONFIG_6xx There are two types of PowerPC chips supported. The more common types (601,603,604,740,750) and the embedded versions (821 and 860). Unless you are building a kernel for one of the embedded boards using the 821 or 860 choose 6xx. Machine Type CONFIG_PMAC Linux currently supports several different kinds of PowerPC-based machines: Apple Power Macintoshes and clones (such as the Motorola Starmax series), PReP (PowerPC Reference Platform) machines such as the Motorola PowerStack, Amiga Power-Up systems (APUS), CHRP and the embedded MBX boards from Motorola. Currently, a single kernel binary only supports one type or the other. However, there is very early work on support for CHRP, PReP and PowerMac's from a single binary. # Choice: ppc6xxtype Machine Type CONFIG_ALL_PPC Linux currently supports several different kinds of PowerPC-based machines: Apple Power Macintoshes and clones (such as the Motorola Starmax series), PReP (PowerPC Reference Platform) machines such as the Motorola PowerStack, CHRP (Common Hardware Reference Platform), the embedded MBX boards from Motorola and many others. Currently, the default option is to build a kernel which works on the first three. Support for other machines is currently incomplete. Select PowerMac/PReP/MTX/CHRP if configuring for any of the above. Select Gemini if configuring for a Synergy Microsystems' Gemini series Single Board Computer. More information is available at: Select APUS if configuring for a PowerUP Amiga. More information is available at: Gemini CONFIG_GEMINI Select Gemini if configuring for a Synergy Microsystems' Gemini series Single Board Computer. More information is available at: Apus CONFIG_APUS Select APUS if configuring for a PowerUP Amiga. More information is available at: Power management support for PowerBooks CONFIG_PMAC_PBOOK This provides support for putting a PowerBook to sleep; it also enables media bay support. Power management works on the PB2400/3400/3500, Wallstreet, Lombard, and Bronze PowerBook G3. You must get the power management daemon, pmud, to make it work and you must have the /dev/pmu device (see the pmud README). Get pmud from . If you have a PowerBook, you should say Y. You may also want to compile the dma sound driver as a module and have it autoloaded. The act of removing the module shuts down the sound hardware for more power savings. MBX CONFIG_MBX MBX is a line of Motorola single-board computer based around the MPC821 and MPC860 processors, and intended for embedded-controller applications. Say Y here to support these boards directly. AltiVec support CONFIG_ALTIVEC Say Y here to compile in support for Motorola AltiVec boards. The AltiVec board is baced on the MPC7400 embedded version of the PowerPC and adds a SIMD vector-processing unit. Product information at . ADB raw keycode support CONFIG_MAC_ADBKEYCODES This provides support for sending raw ADB keycodes to console devices. This is the default up to 2.4.0, but in future this may be phased out in favor of generic Linux keycodes. If you say Y here, you can dynamically switch via the /proc/sys/dev/mac_hid/keyboard_sends_linux_keycodes sysctl and with the "keyboard_sends_linux_keycodes=" kernel argument. If unsure, say Y here. Mouse button 2+3 emulation support CONFIG_MAC_EMUMOUSEBTN This provides generic support for emulating the 2nd and 3rd mouse button with keypresses. If you say Y here, the emulation is still disabled by default. The emulation is controlled by these sysctl entries: /proc/sys/dev/mac_hid/mouse_button_emulation /proc/sys/dev/mac_hid/mouse_button2_keycode /proc/sys/dev/mac_hid/mouse_button3_keycode Enhanced Real Time Clock Support (/dev/rtc) CONFIG_PPC_RTC If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you will get access to the real time clock (or hardware clock) built into your computer. If unsure, say Y here. Support for Open Firmware device tree in /proc CONFIG_PROC_DEVICETREE This option adds a device-tree directory under /proc which contains an image of the device tree that the kernel copies from Open Firmware. If unsure, say Y here. MESH (Power Mac internal SCSI) support CONFIG_SCSI_MESH Many Power Macintoshes and clones have a MESH (Macintosh Enhanced SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the other Power Macintoshes do). Say Y to include support for this SCSI adaptor. This driver is also available as a module called mesh.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Maximum synchronous transfer rate CONFIG_SCSI_MESH_SYNC_RATE On Power Macintoshes (and clones) where the MESH SCSI bus adaptor drives a bus which is entirely internal to the machine (such as the 7500, 7600, 8500, etc.), the MESH is capable of synchronous operation at up to 10 MB/s. On machines where the SCSI bus controlled by the MESH can have external devices connected, it is usually rated at 5 MB/s. 5 is a safe value here unless you know the MESH SCSI bus is internal only; in that case you can say 10. Say 0 to disable synchronous operation. 53C94 (Power Mac external SCSI) support CONFIG_SCSI_MAC53C94 On Power Macintoshes (and clones) with two SCSI buses, the external SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older machines which only have one SCSI bus, such as the 7200, also use the 53C94. Say Y to include support for the 53C94. This driver is also available as a module called mac53c94.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. MACE (Power Mac Ethernet) support CONFIG_MACE Power Macintoshes and clones with Ethernet built-in on the motherboard will usually use a MACE (Medium Access Control for Ethernet) interface. Say Y to include support for the MACE chip. This driver is also available as a module called mace.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Use AAUI port instead of TP by default CONFIG_MACE_AAUI_PORT Some Apple machines (notably the Apple Network Server) which use the MACE ethernet chip have an Apple AUI port (small 15-pin connector), instead of an 8-pin RJ45 connector for twisted-pair ethernet. Say Y here if you have such a machine. If unsure, say N. BMAC (G3/G4 ethernet) support CONFIG_BMAC Say Y for support of BMAC and BMAC+ Ethernet interfaces. These are used on G3 and G4 computers (Apple Power Macintoshes and PowerBooks). This driver is also available as a module called bmac.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. GMAC (Core99 ethernet) support CONFIG_GMAC Say Y for support of the GMAC Ethernet interfaces. This interface is used on some Apple G4 PowerMacs (recent ones), new iMacs, iBooks and PowerBook 2000 (aka "Pismo"). This driver is also available as a module called gmac.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Symbios 53c885 (Synergy Ethernet) support CONFIG_NCR885E This is and Ethernet driver for the dual-function NCR 53C885 SCSI/Ethernet controller. This driver is also available as a module called ncr885e.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read . Video For Linux CONFIG_VIDEO_DEV Support for audio/video capture and overlay devices and FM radio cards. The exact capabilities of each device vary. User tools for this are available from ftp://ftp.uk.linux.org/pub/linux/video4linux. If you are interested in writing a driver for such an audio/video device or user software interacting with such a driver, please read the file Documentation/video4linux/API.html. This driver is also available as a module called videodev.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. AIMSlab RadioTrack (aka RadioReveal) support CONFIG_RADIO_RTRACK Choose Y here if you have one of these FM radio cards, and then fill in the port address below. Note that newer AIMSlab RadioTrack cards have a different chipset and are not supported by this driver. For these cards, use the RadioTrack II driver below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. More information is contained in the file Documentation/video4linux/radiotrack.txt. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-aimslab.o. RadioTrack i/o port CONFIG_RADIO_RTRACK_PORT Enter either 0x30f or 0x20f here. The card default is 0x30f, if you haven't changed the jumper setting on the card. AIMSlab RadioTrack II support CONFIG_RADIO_RTRACK2 Choose Y here if you have this FM radio card, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-rtrack2.o. RadioTrack II i/o port CONFIG_RADIO_RTRACK2_PORT Enter either 0x30c or 0x20c here. The card default is 0x30c, if you haven't changed the jumper setting on the card. Aztech/Packard Bell Radio CONFIG_RADIO_AZTECH Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-aztech.o. Aztech/Packard Bell radio card i/o port CONFIG_RADIO_AZTECH_PORT Enter either 0x350 or 0x358 here. The card default is 0x350, if you haven't changed the setting of jumper JP3 on the card. Removing the jumper sets the card to 0x358. ADS Cadet AM/FM Radio Tuner Card CONFIG_RADIO_CADET Choose Y here if you have one of these AM/FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. Further documentation on this driver can be found on the WWW at http://linux.blackhawke.net/cadet.html. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-cadet.o. ADS Cadet AM/FM Radio Tuner Card I/O Port CONFIG_RADIO_CADET_PORT Enter the I/O address of the card here (most commonly 330). Maestro Radio CONFIG_RADIO_MAESTRO Choose Y here if you have one of these Maestro sound cards with FM radio included. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-maestro.o SF16FMI Radio CONFIG_RADIO_SF16FMI Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-sf16fmi.o SF16FMI I/O port (0x284 or 0x384) CONFIG_RADIO_SF16FMI_PORT Enter the I/O port of your SF16FMI radio card. Typhoon Radio CONFIG_RADIO_TYPHOON Choose Y here if you have one of these FM radio cards, and then fill in the port address and the frequency used for muting below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-typhoon.o Support for /proc/radio-typhoon CONFIG_RADIO_TYPHOON_PROC_FS Say Y here if you want the typhoon radio card driver to write status information (frequency, volume, muted, mute frequency, base address) to /proc/radio-typhoon. The file can be viewed with your favorite pager (i.e. use "more /proc/radio-typhoon" or "less /proc/radio-typhoon" or simply "cat /proc/radio-typhoon"). Typhoon I/O port (0x316 or 0x336) CONFIG_RADIO_TYPHOON_PORT Enter the I/O port of your Typhoon or EcoRadio radio card. Typhoon frequency set when muting the device (kHz) CONFIG_RADIO_TYPHOON_MUTEFREQ Enter the frequency used for muting the radio. The device is never completely silent. If the volume is just turned down, you can still hear silent voices and music. For that reason, the frequency of the radio device is set to the frequency you can enter here whenever the device is muted. There should be no local radio station at that frequency. Zoltrix Radio CONFIG_RADIO_ZOLTRIX Choose Y here if you have one of these FM radio cards, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-zoltrix.o ZOLTRIX I/O port (0x20c or 0x30c) CONFIG_RADIO_ZOLTRIX_PORT Enter the I/O port of your Zoltrix radio card. Miro PCM20 Radio CONFIG_RADIO_MIROPCM20 Choose Y here if you have this FM radio card. You also need to say Y to "ACI mixer (miroPCM12/PCM20)" (in "additional low level sound drivers") for this to work. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-miropcm20.o GemTek Radio Card CONFIG_RADIO_GEMTEK Choose Y here if you have this FM radio card, and then fill in the port address below. If you have GemTeks combined (PnP) sound- and radio card you might want to use this driver as a module and setup the card with isapnptools. You must also pass the module a suitable io parameter. If you have trouble getting the driver to work with the card as a module, please try building it into the kernel by answering Y. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found on the WWW at http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW, you need to have access to a machine on the Internet that has a program like lynx or netscape. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-gemtek.o. GemTek i/o port CONFIG_RADIO_GEMTEK_PORT Enter either 0x20c, 0x30c, 0x24c or 0x34c here. 0x20c and 0x248 have been reported to work with the combined sound/radio card. The card default is 0x34c, if you haven't changed the jumper setting on the card. Trust FM Radio Card CONFIG_RADIO_TRUST Choose Y here if you have this FM radio card, and then fill in the port address below. In order to control your radio card, you will need to use programs that are compatible with the Video for Linux API. Information on this API and pointers to "v4l" programs may be found at http://roadrunner.swansea.uk.linux.org/v4l.shtml. If you want to compile this driver as a module ( = code which can be inserted in and removed from the running kernel whenever you want), say M here and read Documentation/modules.txt. The module will be called radio-trust.o. Trust FM Radio I/O port CONFIG_RADIO_TRUST_PORT Enter the I/O port of your card (usually 0x350 or 0x358). BT848 Video For Linux CONFIG_VIDEO_BT848 Support for BT848 based frame grabber/overlay boards. This includes the Miro, Hauppauge and STB boards. Please read the material in Documentation/video4linux/bttv for more information. This driver is also available as a module called bttv.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. SGI Vino Video For Linux CONFIG_VIDEO_VINO Say Y here to build in support for the Vino video input system found on SGI Indy machines. Zoran ZR36057/36060 Video For Linux CONFIG_VIDEO_ZORAN Say Y here to include support for video cards based on the the Zoran ZR36057/36060 encoder/decoder chip (including the Iomega Buz and the Miro DC10 and DC30 video capture cards). Include support for Iomega Buz CONFIG_VIDEO_BUZ Say Y here to include support for the Iomega Buz video card. There is a Buz/Linux homepage at . SAA5249 Teletext processor CONFIG_VIDEO_SAA5249 Support for I2C bus based teletext using the SAA5249 chip. At the moment this is only useful on some European WinTV cards. This driver is also available as a module called saa5249.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Quickcam BW Video For Linux CONFIG_VIDEO_BWQCAM Say Y have if you the black and white version of the QuickCam camera. See the next option for the color version. This driver is also available as a module called bw-qcam.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. Colour QuickCam Video For Linux CONFIG_VIDEO_CQCAM This is the video4linux driver for the colour version of the Connectix Quickcam. If you have one of these cameras, say Y here, otherwise say N. This driver does not work with the original monochrome Quickcam, Quickcam VC or QuickClip. It is also available as a module (c-qcam.o). Mediavision Pro Movie Studio Video For Linux CONFIG_VIDEO_PMS Say Y if you have such a thing. This driver is also available as a module called pms.o ( = code which can be inserted in and removed from the running kernel whenever you want). If you want to compile it as a module, say M here and read Documentation/modules.txt. PlanB Video-In for PowerMacs CONFIG_VIDEO_PLANB PlanB is the V4L driver for the PowerMac 7x00/8x00 series video input hardware. If you want to experiment with this, say Y. Otherwise, or if you don't understand a word, say N. See http://www.cpu.lu/~mlan/planb.html for more info. Saying M will compile this driver as a module (planb.o). # # ARM options # # Choice: armtype A5000 CONFIG_ARCH_A5K Say Y here to to support the Acorn A5000. Linux can support the internal IDE disk and CD-ROM interface, serial and parallel port, and the floppy drive. Note that on some A5000s the floppy is plugged into the wrong socket on the motherboard. EBSA-110 CONFIG_ARCH_EBSA110 This is an evaluation board for the StrongARM processor available from Digital. It has limited hardware on-board, including an onboard Ethernet interface, two PCMCIA sockets, two serial ports and a parallel port. RiscPC CONFIG_ARCH_RPC On the Acorn Risc-PC, Linux can support the internal IDE disk and CD-ROM interface, serial and parallel port, and the floppy drive. 2MB physical memory CONFIG_PAGESIZE_16 Say Y here if your Archimedes or A5000 system has only 2MB of memory, otherwise say N. The resulting kernel will not run on a machine with 4MB of memory. CPU Optimization CONFIG_CPU_ARM2 This selects the processor type of your CPU. This is only used to determine C compiler optimization options, and can affect the compatibility of the kernel on other processors. If you specify ARM6, the kernel should work on all 32-bit processors. If you specify ARM2, ARM250 or ARM3, it should work on all 26-bit processors. If you're not sure, set it to "None". ARM System type CONFIG_ARCH_ARC This selects what ARM system you wish to build the kernel for. It also selects to some extent the CPU type. If you are unsure what to set this option to, please consult any information supplied with your system. Include support for Chalice CATS boards CONFIG_CATS Say Y here if you intend to run this kernel on a CATS system. Include support for Intel EBSA285 CONFIG_ARCH_EBSA285 Say Y here if you intend to run this kernel on an EBSA-285 evaluation board. Include support for the NetWinder CONFIG_ARCH_NETWINDER Say Y here if you intend to run this kernel on the NetWinder. Support StrongARM SA-110 processor CONFIG_CPU_SA110 The Intel StrongARM(R) SA-110 is a 32-bit microprocessor and is available at five speeds ranging from 100 MHz to 233 MHz. More information is available at Say Y if you want support for the SA-110 processor. Otherwise, say N. Math emulation CONFIG_NWFPE Say Y to include the NWFPE floating point emulator in the kernel. This is necessary to run most binaries. Linux does not currently support floating point hardware so you need to say Y here even if your machine has an FPA or floating point co-processor podule. It is also possible to say M to build the emulator as a module (nwfpe.o) or indeed to leave it out altogether. However, unless you know what you are doing this can easily render your machine unbootable. Saying Y is the safe option. You may say N here if you are going to load the Acorn FPEmulator early in the bootup. DS1620 Thermometer support CONFIG_DS1620 Say Y here to include support for the thermal management hardware found in the NetWinder. This driver allows the user to control the temperature set points and to read the current temperature. It is also possible to say M here to build it as a module (ds1620.o) It is recommended to be used on a NetWinder, but it is not a necessity. Verbose kernel error messages CONFIG_DEBUG_ERRORS This option controls verbose debugging information which can be printed when the kernel detects an internal error. This debugging information is useful to kernel hackers when tracking down problems, but mostly meaningless to other people. It's safe to say Y unless you are concerned with the code size or don't want to see these messages. Compile kernel with frame pointer CONFIG_FRAME_POINTER If you say Y here, the resulting kernel will be slightly larger and slower, but it will give useful debugging information. If you don't debug the kernel, you can say N. User fault debugging CONFIG_DEBUG_USER When a user program crashes due to an exception, the kernel can print a brief message explaining what the problem was. This is sometimes helpful for debugging but serves no purpose on a production system. Most people should say N here. Include gdb debugging information in kernel binary CONFIG_DEBUG_INFO Say Y here to include source-level debugging information in the `vmlinux' binary image. This is handy if you want to use gdb or addr2line to debug the kernel. It has no impact on the in-memory footprint of the running kernel but it can increase the amount of time and disk space needed for compilation. If in doubt say N. Kernel low-level debugging functions CONFIG_DEBUG_LL Say Y here to include definitions of printascii, printchar, printhex in the kernel. This is helpful if you are debugging code that executes before the console is initialized. Kernel low-level debugging messages via footbridge serial port CONFIG_DEBUG_DC21285_PORT Say Y here if you want the low-level print routines to direct their output to the serial port in the DC21285 (Footbridge). Saying N will cause the debug messages to appear on the first 16550 serial port. Include kgdb kernel debugger CONFIG_KGDB Include in-kernel hooks for kgdb, the Linux kernel source level debugger. This project has a web page at . Include xmon kernel debugger CONFIG_XMON Include in-kernel hooks for the xmon kernel monitor/debugger supported by the PPC port. Split initialisation functions into discardable section CONFIG_TEXT_SECTIONS Normally code that is only used during initialisation is collected into a special area of the kernel so that it can be discarded and the memory reclaimed when initialisation is complete. In addition, if the kernel you wish to build is able to run on multiple architectures, it allows the unused code to be discarded. Some versions of binutils, however, have a bug that causes the kernel to crash during startup when this option is enabled. Say Y unless you experience problems that you suspect may be caused by this. Disable pgtable cache CONFIG_NO_PGT_CACHE Normally the kernel maintains a `quicklist' of preallocated pagetable structures in order to increase performance. On machines with very few pages this may however be a loss. Say Y here to disable the pgtable cache. RISC OS personality CONFIG_ARTHUR Say Y here to include the kernel code necessary if you want to run Acorn RISC OS/Arthur binaries under Linux. This code is still very experimental; if this sounds frightening, say N and sleep in peace. You can also say M here to compile this support as a module (which will be called arthur.o). Initial kernel command line CONFIG_CMDLINE On some architectures (EBSA110 and CATS), there is currently no way for the boot loader to pass arguments to the kernel. For these architectures, you should supply some command-line options at build time by entering them here. As a minimum, you should specify the memory size and the root device (eg, mem=64M root=/dev/nfs) Hardware alignment trap CONFIG_ALIGNMENT_TRAP ARM processors can not fetch/store information which is not naturally aligned on the bus, ie, a 4 byte fetch must start at an address divisable by 4. On 32-bit ARM processors, these instructions can be emulated in software with a severe performance impact. This is necessary for correct operation of some network protocols. With an IP-only configuration it is safe to say N, otherwise say Y. 21285 serial port support CONFIG_SERIAL_21285 If you have a machine based on a 21285 (Footbridge) StrongARM/PCI bridge you can enable its onboard serial port by enabling this option. The device has major ID 4, minor 64. Console on 21285 serial port CONFIG_SERIAL_21285_CONSOLE If you have enabled the serial port on the 21285 footbridge you can make it the console by answering 'Y' to this option. Footbridge Mode CONFIG_HOST_FOOTBRIDGE The 21285 Footbridge chip can operate in either `host mode' or `add-in' mode. Say Y if your 21285 is in host mode, and therefore is the configuration master, otherwise say N. MFM harddisk support CONFIG_BLK_DEV_MFM Support the MFM hard drives on the Acorn Archimedes both on-board the A4x0 motherboards and via the Acorn MFM podules. Drives upto 64MB are supported. If you haven't got one of these machines or drives just say 'N'. Old Archimedes floppy (1772) support CONFIG_BLK_DEV_FD1772 Support the floppy drive on the Acorn Archimedes (A300, A4x0, A540, R140 and R260) series of computers; it supports only 720K floppies at the moment. If you don't have one of these machines just answer 'N'. Autodetect hard drive geometry CONFIG_BLK_DEV_MFM_AUTODETECT If you answer 'Y' the MFM code will attempt to automatically detect the cylinders/heads/sectors count on your hard drive. WARNING: This sometimes doesn't work and it also does some dodgy stuff which potentially might damage your drive. IrDA Protocols CONFIG_IRDA Say Y here if you want to build support for the IrDA (TM) protocols. The Infrared Data Associations (tm) specifies standards for wireless infrared communication and is supported by most laptops and PDA's. To use Linux support for the IrDA (tm) protocols, you will also need some user-space utilities like the irmanager and probably irattach as well. For more information, see the file Documentation/networking/irda.txt. You also want to read the IR-HOWTO, available from ftp://metalab.unc.edu/pub/Linux/docs/HOWTO. This support is also available as a module. If you want to compile it as a module, say M here and read Documentation/modules.txt. The module will be called Ultra (connectionless) protocol CONFIG_IRDA_ULTRA Say Y here to support the connectionless Ultra IRDA protocol, also called IrOBEX. IrDA protocol options CONFIG_IRDA_OPTIONS Say Y here if you want to configure any of the following IrDA options. IrDA Cache last LSAP CONFIG_IRDA_CACHE_LAST_LSAP Say Y here if you want IrLMP to cache the last LSAP used. This makes sense since most frames will be sent/received on the same connection. Enabling this option will save a hash-lookup per frame. If unsure, say Y. IrDA Fast RR's CONFIG_IRDA_FAST_RR Say Y here is you want IrLAP to send fast RR (Receive Ready) frames when acting as a primary station. This will make IrLAP send out a RR frame immediately when receiving a frame if its own transmit queue is currently empty. This will give a lot of speed improvement when receiving much data since the secondary station will not have to wait the max. turn around time before it is allowed to transmit the next time. If the transmit queue of the secondary is also empty the primary will back off waiting longer for sending out the RR frame until the timeout reaches the normal value. Enabling this option will make the IR-diode burn more power and thus reduce your battery life. If unsure, say N. IrDA Debug CONFIG_IRDA_DEBUG Say Y here if you want the IrDA subsystem to write debug information to your syslog. You can change the debug level in /proc/sys/net/irda/debug If unsure, say Y (since it makes it easier to find the bugs). IrLAP Compression support CONFIG_IRDA_COMPRESSION Compression is _not_ part of the IrDA(tm) protocol specification, but it's working great! Linux is the first to try out compression support at the IrLAP layer. This means that you will only benefit from compression if you are running a Linux <-> Linux configuration. If you say Y here, you also need to say Y or M to a compression protocol below. IrLAP Deflate Compression Protocol CONFIG_IRDA_DEFLATE Say Y here if you want to build support for the Deflate compression protocol. The deflate compression (GZIP) is exactly the same as the one used by the PPP protocol. If you want to compile this compression support as a module, say M here and read Documentation/modules.txt. The module will be called irda_deflate.o. IrLAN Protocol CONFIG_IRLAN Say Y here if you want to build support for the IrLAN protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrLAN emulates an Ethernet and makes it possible to put up a wireless LAN using infrared beams. The IrLAN protocol can be used to talk with infrared access points like the HP NetbeamIR, or the ESI JetEye NET. You can also connect to another Linux machine running the IrLAN protocol for ad-hoc networking! IrCOMM Protocol CONFIG_IRCOMM Say Y here if you want to build support for the IrCOMM protocol. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrCOMM implements serial port emulation, and makes it possible to use all existing applications that understands TTY's with an infrared link. Thus you should be able to use application like PPP, minicom and others. Enabling this option will create two modules called ircomm and ircomm-tty. IrTTY IrDA Device Driver CONFIG_IRTTY_SIR Say Y here if you want to build support for the IrTTY line discipline. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrTTY makes it possible to use Linux's own serial driver for all IrDA ports that are 16550 compatible. Most IrDA chips are 16550 compatible so you should probably say Y to this option. Using IrTTY will however limit the speed of the connection to 115200 bps (IrDA SIR mode) If unsure, say Y. IrPORT IrDA Device Driver CONFIG_IRPORT_SIR Say Y here if you want to build support for the IrPORT IrDA device driver. If you want to compile it as a module, say M here and read Documentation/modules.txt. IrPORT can be used instead of IrTTY and sometimes this can be better. One example is if your IrDA port does not have echo-canceling, which will work OK with IrPORT since this driver is working in half-duplex mode only. You don't need to use irattach with IrPORT, but you just insert it the same way as FIR drivers (insmod irport io=0x3e8 irq=11). Notice that IrPORT is a SIR device driver which means that speed is limited to 115200 bps. If unsure, say Y. Winbond W83977AF IrDA Device Driver CONFIG_WINBOND_FIR Say Y here if you want to build IrDA support for the Winbond W83977AF super-io chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This driver should be used for the IrDA chipset in the Corel NetWinder. The driver supports SIR, MIR and FIR (4Mbps) speeds. NSC IrDA Device Driver CONFIG_NSC_FIR Say Y here if you want to build support for the NSC PC87108 and PC87338 IrDA chipsets. If you want to compile it as a module, say M here and read Documentation/modules.txt. This driver supports SIR, MIR and FIR (4Mbps) speeds. Toshiba Type-O IR Port Device Driver CONFIG_TOSHIBA_FIR Say Y here if you want to build support for the Toshiba Type-O IR chipset. If you want to compile it as a module, say M here and read Documentation/modules.txt. This chipset is used by the Toshiba Libretto 100CT, and many more laptops. SMC IrCC CONFIG_SMC_IRCC_FIR Say Y here if you want to build support for the SMC Infrared Communications Controller. It is used in the Fujitsu Lifebook 635t and Sony PCG-505TX. If you want to compile it as a module, say M here and read . The module will be called smc-ircc.o. Serial dongle support CONFIG_DONGLE Say Y here if you have an infrared device that connects to your computer's serial port. These devices are called dongles. Then say Y or M to the driver for your particular dongle below. Note that the answer to this question won't directly affect the kernel: saying N will just cause the configurator to skip all the questions about serial dongles. ESI JetEye PC Dongle CONFIG_ESI_DONGLE Say Y here if you want to build support for the Extended Systems JetEye PC dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The ESI dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for ESI dongles you will have to start irattach like this: "irattach -d esi". ACTiSYS IR-220L and IR220L+ dongle CONFIG_ACTISYS_DONGLE Say Y here if you want to build support for the ACTiSYS IR-220L and IR220L+ dongles. If you want to compile it as a module, say M here and read Documentation/modules.txt. The ACTiSYS dongles attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for ACTiSYS dongles you will have to start irattach like this: "irattach -d actisys" or "irattach -d actisys+". Tekram IrMate 210B dongle CONFIG_TEKRAM_DONGLE Say Y here if you want to build support for the Tekram IrMate 210B dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Tekram dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Tekram dongles you will have to start irattach like this: "irattach -d tekram". Greenwich GIrBIL dongle CONFIG_GIRBIL_DONGLE Say Y here if you want to build support for the Greenwich GIrBIL dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Greenwich dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Greenwich dongles you will have to insert "irattach -d girbil" in the /etc/irda/drivers script. Parallax Litelink dongle CONFIG_LITELINK_DONGLE Say Y here if you want to build support for the Parallax Litelink dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Parallax dongle attaches to the normal 9-pin serial port connector, and can currently only be used by IrTTY. To activate support for Parallax dongles you will have to start irattach like this "irattach -d litelink". Old Belkin dongle CONFIG_OLD_BELKIN_DONGLE Say Y here if you want to build support for the old Belkin SmartBeam dongle. If you want to compile it as a module, say M here and read Documentation/modules.txt. The Belkin SmartBeam dongle (F5F500) come in two variants. The only way to distinguish those is to open the dongle and check the presence of a jumper (the jumper, on the new dongle, toggle between IrDA and ASK modes). This driver only support the old dongle. The old dongle is also limited to 9600 b/s (which is not very fun). To activate support for old Belkin dongles you will have to start irattach like this: "irattach -d old_dongle". VME (Motorola and BVM) support CONFIG_VME Say Y here if you want to build a kernel for a 680x0 based VME board. Boards currently supported include Motorola boards MVME162, MVME166, MVME167, MVME172, and MVME177. BVME4000 and BVME6000 boards from BVM Ltd are also supported. MVME147 support CONFIG_MVME147 Say Y to include support for early Motorola VME boards. This will build a kernel which can run on MVME147 single-board computers. If you select this option you will have to select the appropriate drivers for SCSI, Ethernet and serial ports later on. MVME162, 166 and 167 support CONFIG_MVME16x Say Y to include support for Motorola VME boards. This will build a kernel which can run on MVME162, MVME166, MVME167, MVME172, and MVME177 boards. If you select this option you will have to select the appropriate drivers for SCSI, Ethernet and serial ports later on. BVME4000 and BVME6000 support CONFIG_BVME6000 Say Y to include support for VME boards from BVM Ltd. This will build a kernel which can run on BVME4000 and BVME6000 boards. If you select this option you will have to select the appropriate drivers for SCSI, Ethernet and serial ports later on. Use write-through caching for 68060 supervisor accesses CONFIG_060_WRITETHROUGH The 68060 generally uses copyback caching of recently accessed data. Copyback caching means that memory writes will be held in an on-chip cache and only written back to memory some time later. Saying Y here will force supervisor (kernel) accesses to use writethrough caching. Writethrough caching means that data is written to memory straight away, so that cache and memory data always agree. Writethrough caching is less efficient, but is needed for some drivers on 68060 based systems where the 68060 bus snooping signal is hardwired on. The 53c710 SCSI driver is known to suffer from this problem. WD33C93 SCSI driver for MVME147 CONFIG_MVME147_SCSI Support for the on-board SCSI controller on the Motorola MVME147 single-board computer. SCC support for MVME147 serial ports CONFIG_MVME147_SCC This is the driver for the serial ports on the Motorola MVME147 boards. Everyone using one of these boards should say Y here. MVME147 (Lance) Ethernet support CONFIG_MVME147_NET Support for the on-board Ethernet interface on the Motorola MVME147 single-board computer. Say Y here to include the driver for this chip in your kernel. If you want to compile it as a module, say M here and read . NCR53C710 SCSI driver for MVME16x CONFIG_MVME16x_SCSI The Motorola MVME162, 166, 167, 172 and 177 boards use the NCR53C710 SCSI controller chip. Almost everyone using one of these boards will want to say Y to this question. NCR53C710 SCSI driver for BVME6000 CONFIG_BVME6000_SCSI The BVME4000 and BVME6000 boards from BVM Ltd use the NCR53C710 SCSI controller chip. Almost everyone using one of these boards will want to say Y to this question. Simple 53c710 SCSI support (Compaq, NCR machines) CONFIG_SCSI_SIM710 This is a driver for the NCR53C710 chip commonly found in Compaq and NCR machines. If you are looking for 53C710 support for an Amiga or some 680x0 based VME card then you probably want the other NCR53C710 driver. MVME16x Ethernet support CONFIG_MVME16x_NET This is the driver for the Ethernet interface on the Motorola MVME162, 166, 167, 172 and 177 boards. Say Y here to include the driver for this chip in your kernel. If you want to compile it as a module, say M here and read Documentation/modules.txt. BVME6000 Ethernet support CONFIG_BVME6000_NET This is the driver for the Ethernet interface on BVME4000 and BVME6000 VME boards. Say Y here to include the driver for this chip in your kernel. If you want to compile it as a module, say M here and read Documentation/modules.txt. CD2401 support for MVME166/7 serial ports CONFIG_SERIAL167 This is the driver for the serial ports on the Motorola MVME166, 167, and 172 boards. Everyone using one of these boards should say Y here. SCC support for MVME162 serial ports CONFIG_MVME162_SCC This is the driver for the serial ports on the Motorola MVME162 and 172 boards. Everyone using one of these boards should say Y here. SCC support for BVME6000 serial ports CONFIG_BVME6000_SCC This is the driver for the serial ports on the BVME4000 and BVME6000 boards from BVM Ltd. Everyone using one of these boards should say Y here. IBM's S/390 architecture CONFIG_ARCH_S390 Select this option, if you want to run the Kernel on one of IBM's mainframes of the S/390 generation. You should have installed the s390-compiler released by IBM (based on gcc-2.95.1) before. Merge some code into the kernel to make the image IPLable CONFIG_IPL If you want to use the produced kernel to IPL directly from a device, you have to merge a bootsector specific to the device into the first bytes of the kernel. You will have to select the IPL device. Merge some code into the kernel to make the image IPLable CONFIG_IPLABLE If you want to use the produced kernel to IPL directly from a device, you have to merge a bootsector specific to the device into the first bytes of the kernel. You will have to select the IPL device on another question, that pops up, when you select CONFIG_IPLABE. IPL from a S/390 tape unit CONFIG_IPL_TAPE Select this option if you want to IPL the image from a tape. IPL from a virtual card reader emulated by VM/ESA CONFIG_IPL_RDR_VM Select this option if you are running under VM/ESA and want to IPL the image from the emulated card reader. IPL from a real card reader CONFIG_IPL_RDR Select this option if you want to IPL the image from a real card reader. Maybe you still got one and want to try. We didn't test. IBMs S/390 Harddisks (DASDs) CONFIG_DASD Enable this option if you want to access DASDs directly utilizing S/390s channel subsystem commands. This is necessary for running natively on a single image or an LPAR. Enable DASD fast write CONFIG_DASD_FAST_IO Enable fast I/O for DASDs. That means that the next I/O command is already issued at interrupt time, if an I/O request is pending. This option gives significant speedup of I/O, because we don't schedule the bottom-halves as often as Intel. Support for IBM-style disk-labels (S/390) CONFIG_S390_PARTITION Enable this option to assure standard IBM labels on the DASDs. You must enable it, if you are planning to access DASDs also attached to another IBM mainframe operation system (OS/390, VM/ESA, VSE/ESA). ECKD devices CONFIG_DASD_ECKD ECKD devices are the most commonly used devices. you should enable this option unless you are very sure to have no ECKD device. CKD devices CONFIG_DASD_CKD CKD devices are currently unsupported. FBA devices CONFIG_DASD_FBA FBA devices are e.g. the Vitual disk in storage under VM/ESA and others. Support for 3215 line mode terminal CONFIG_3215 Include support for IBM 3215 line-mode terminals. Can't be used if 3270 console support is chosen. Support for console on 3215 line mode terminal CONFIG_3215_CONSOLE Include support for using an IBM 3215 line-mode terminal as the Linux system console. Can't be used if 3270 console support is chosen. Support for HWC line mode terminal CONFIG_HWC Include support for IBM HWC line-mode terminals. Console on HWC line mode terminal CONFIG_HWC_CONSOLE Include support for using an IBM HWC line-mode terminal as the Linux system console. CTC device support CONFIG_CTC Select this option if you want to use channel-to-channel networking on IBM S/390 or zSeries. This device driver supports real CTC coupling using ESCON. It also supports virtual CTCs when running under VM. It will use the channel device configuration if this is available. This option is also available as a module which will be called ctc.o. If you do not know what it is, it's safe to say "Y". XPRAM disk support CONFIG_BLK_DEV_XPRAM Select this option if you want to use your expanded storage on S/390 or zSeries as a disk. This is useful as a _fast_ swap device if you want to access more than 2G of memory when running in 31 bit mode. This option is also available as a module which will be called xpram.o. If unsure, say "N". Fast IRQ handling CONFIG_FAST_IRQ Select this option in order to get the interrupts processed faster on your S/390 or zSeries machine. If selected, after an interrupt is processed, the channel subsystem will be asked for other pending interrupts which will also be processed before leaving the interrupt context. This speeds up the I/O a lot. Say "Y". IUCV device support (VM only) CONFIG_IUCV Select this option if you want to use inter-user communication vehicle networking under VM or VIF. This option is also available as a module which will be called iucv.o. If unsure, say "Y". Show crashed user process info CONFIG_PROCESS_DEBUG Say Y to print all process fault locations to the console. This is a debugging option; you probably do not want to set it unless you are an S390 port maintainer. Diag access to CMS formatted minidisk CONFIG_DASD_MDSK By using this access method you can acess any disk supported by VM/ESA. You have to format the disk using CMS and then specify the parameter dasd_force_diag= in the parameter line of the kernel. Compaq SMART2 support CONFIG_BLK_CPQ_DA This is the driver for Compaq Smart Array controllers. Everyone using these boards should say Y here. See "linux/Documentation/cpqarray.txt" for the current list of boards supported by this driver, and for further information on the use of this driver. Compaq Smart Array support CONFIG_BLK_CPQ_CISS_DA This is the driver for Compaq Smart Array 5xxx controllers. Everyone using these boards should say Y here. See "linux/Documentation/cciss.txt" for the current list of boards supported by this driver, and for further information on the use of this driver. Linux telephony support CONFIG_PHONE Say Y here if you have a telephony card, which for example allows you to use a regular phone for voice-over-IP applications. Note: this has nothing to do with modems. You do not need to say Y here in order to be able to use a modem under Linux. This support is also available as a module. If you want to compile it as a module, say M here and read . The module will be called phonedev.o. QuickNet Internet LineJack/PhoneJack support CONFIG_PHONE_IXJ Say M if you have a telephony card manufactured by Quicknet Technologies, Inc. These include the Internet PhoneJACK and Internet LineJACK Telephony Cards. For the ISA versions of these products, you can configure the cards using the isapnp tools (pnpdump/isapnp) or you can use the backported isapnp module. Please read: /usr/src/linux/Documentation/telephony/ixj.txt. For more information on these cards, see Quicknet's website at: http://www.quicknet.net/ If you do not have any Quicknet telephony cards, you can safely ignore this option. Toshiba Laptop support CONFIG_TOSHIBA This adds a driver to safely access the System Management Mode of the CPU on Toshiba portables. The System Management Mode is used to set the BIOS and power saving options on Toshiba portables. For information on utilities to make use of this driver see the Toshiba Linux utilities web site at: Say Y if you intend to run this kernel on a Toshiba portable. Say N otherwise. CPiA Video For Linux CONFIG_VIDEO_CPIA This is the video4linux driver for cameras based on Vision's CPiA (Colour Processor Interface ASIC), such as the Creative Labs Video Blaster Webcam II. If you have one of these cameras, say Y here and select parallel port lowlevel support below (the USB-version, is not supported on this kernel-version) otherwise say N. This will not work with the Creative Webcam III. It is also available as a module (cpia.o). For more information (supported camera models, module autoloading, DMA interrupt settings, supported applications, etc.) read Documentation/video4linux/README.cpia. CPiA Parallel Port Lowlevel Support CONFIG_VIDEO_CPIA_PP This is the lowlevel parallel port support for cameras based on Vision's CPiA (Colour Processor Interface ASIC), such as the Creative Webcam II. If you have the parallel port version of one of these cameras, say Y here, otherwise say N. It is also available as a module (cpia_pp.o). CPiA USB Lowlevel Support CONFIG_VIDEO_CPIA_USB This is the lowlevel USB support for cameras based on Vision's CPiA (Colour Processor Interface ASIC), such as the Creative Webcam II. If you have the USB version of one of these cameras, say Y here, otherwise say N. This will not work with the Creative Webcam III. It is also available as a module (cpia_usb.o). CPiA Parallel Port DMA Support CONFIG_VIDEO_CPIA_PP_DMA This will use DMA if possible to reduce CPU usage. If in doubt, say Y here. 7-Segment Display support CONFIG_DISPLAY7SEG This is the driver for the digital display and LED present on Sun Microsystems CompactPCI models CP1400 and CP1500. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called display7seg.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you do not have a CompactPCI model CP1400 or CP1500, or another UltraSPARC-IIi-cEngine boardset with digital display, you should say N to this option. CP1XXX Hardware Watchdog support CONFIG_WATCHDOG_CP1XXX This is the driver for the hardware watchdog timers present on Sun Microsystems CompactPCI models CP1400 and CP1500. This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called cpwatchdog.o. If you want to compile it as a module, say M here and read Documentation/modules.txt. If you do not have a CompactPCI model CP1400 or CP1500, or another UltraSPARC-IIi-cEngine boardset with hardware watchdog, you should say N to this option. # # A couple of things I keep forgetting: # capitalize: AppleTalk, Ethernet, DOS, DMA, FAT, FTP, Internet, # Intel, IRQ, Linux, MSDOS, NetWare, NetWinder, NFS, # PCI, SCSI, SPARC # two words: hard drive, hard disk, sound card, home page # other: it's safe to save; daemon; use --, not - or --- # # # This is used by Emacs' spell checker ispell.el: # # LocalWords: CONFIG coprocessor DX Pentium SX lilo loadlin HOWTO ftp metalab # LocalWords: unc edu docs emu README kB BLK DEV FD Thinkpad fd MFM RLL IDE gz # LocalWords: cdrom diskless netboot nfs xzvf ATAPI MB ide pavia pl pd # LocalWords: HD CDROMs IDECD NEC MITSUMI filesystem XT XD PCI BIOS cezar ATEN # LocalWords: ISA EISA Microchannel VESA BIOSes IPC SYSVIPC ipc Ctrl dmesg hlt # LocalWords: BINFMT Linkable http ac uk jo html GCC SPARC AVANTI CABRIOLET EB # LocalWords: netscape gcc LD CC toplevel MODVERSIONS insmod rmmod modprobe IP # LocalWords: genksyms INET loopback gatewaying ethernet PPP ARP Arp MEMSIZE # LocalWords: howto multicasting MULTICAST MBONE firewalling ipfw ACCT resp ip # LocalWords: proc acct IPIP encapsulator decapsulator klogd PCTCP RARP EXT PS # LocalWords: telnetting subnetted NAGLE rlogin NOSR ttyS TGA techinfo mbone nl # LocalWords: Mb SKB IPX Novell dosemu Appletalk DDP ATALK vmalloc visar ehome # LocalWords: SD CHR scsi thingy SG CD LUNs LUN jukebox Adaptec BusLogic EATA # LocalWords: buslogic DMA DPT ATT eata dma PIO UltraStor fdomain umsdos ext # LocalWords: QLOGIC qlogic TMC seagate Trantor ultrastor FASST wd NETDEVICES # LocalWords: unix BBS linux CSLIP PLIP Kirch's LDP CSlip SL SCC IRQ csustan # LocalWords: Turbo Laplink plip NCSA port's ReQuest IRQs EQL SMC AMD PCnet NE # LocalWords: COM ELPLUS Com EtherLinkIII VLB Arcnet Cabletron DEPCA DE carlos # LocalWords: depca EtherWorks EWRK ewrk SEEQ EtherExpress EEXPRESS NI xxx dia # LocalWords: EtherExpress WaveLAN wavelan PCLAN HPLAN VG SK Ansel Xen de ZNET # LocalWords: PCMCIA cb stanford LAN TEC RealTek ATP atp DLINK NetTools VISWS # LocalWords: TR Sony CDU caddyless cdu Mitsumi MCD cd mcd XA MultiSession CDA # LocalWords: Matsushita Panasonic SBPCD Soundblaster Longshine sbpcd Aztech # LocalWords: Okano Wearnes AZTCD CDD SE aztcd sonycd Goldstar GSCD Philips fs # LocalWords: LMS OPTCD Sanyo SJCD minix faqs xiafs XIA msdos mtools Cichocki # LocalWords: std softlinks umssync NetworkFileSharing nfsd mountd CDs HPFS TI # LocalWords: hpfs SYSV SCO iBCS Wyse WordPerfect tsx mit unixes sysv NR irisa # LocalWords: SMB WfW Cyclades async mux Logitech busmouse MouseSystem aka AST # LocalWords: PSMOUSE Compaq trackballs Travelmate Inport ATIXL ATI busmice ld # LocalWords: gpm config QIC DYNCONF FTAPE Stor Ftape ftape pcsndrv manpage NT # LocalWords: readprofile diskdrives org com masq EtherTalk tcp netrom sunacm # LocalWords: misc AIC aic pio scc Portmaster eql GIS PhotoCDs MCDX Perell PG # LocalWords: mcdx gscd optcd sjcd ISP hdparm Workgroups Lan samba PARIDE PCD # LocalWords: filesystems smbfs ATA ppp PCTech RZ www powerquest txt CMD ESDI # LocalWords: chipset FB multicast MROUTE appletalk ifconfig IBMTR multiport # LocalWords: Multisession STALDRV EasyIO EC EasyConnection ISTALLION ONboard # LocalWords: Brumby pci TNC cis ohio faq usenet NETLINK dev hydra ca Tyne mem # LocalWords: carleton Deskstation DECstation SUNFD JENSEN Noname XXXM SLiRP # LocalWords: pppd Zilog ZS SRM bootloader ez mainmenu rarp ipfwadm paride pcd # LocalWords: RTNETLINK mknod xos MTU lwared Macs mac netatalk macs cs Wolff # LocalWords: dartmouth flowerpt MultiMaster FlashPoint tudelft etherexpress # LocalWords: ICL EtherTeam ETH IDESCSI TXC SmartRAID SmartCache httpd sjc dlp # LocalWords: thesphere TwoServers BOOTP DHCP ncpfs BPQETHER BPQ MG HIPPI cern # LocalWords: bsd comp SPARCstation le SunOS ie Gracilis PackeTwin PT pt LU FX # LocalWords: FX TEAC CR LCS mS ramdisk IDETAPE cmd fperllo encis tcfs unisa # LocalWords: Vertos Genoa Funai hsfs NCP NetWare tgz APM apm ioctls UltraLite # LocalWords: TravelMate CDT LCD backlight VC RPC Mips AXP barlow cdrecord pg # LocalWords: PMAX MILO Alphas Multia Tseng linuxelf endian mipsel mips drv HT # LocalWords: kerneld callouts AdvanSys advansys Admin WDT DataStor EP verden # LocalWords: wdt hdb hdc bugfix SiS vlb Acculogic CSA DTC dtc Holtek ht QDI # LocalWords: QD qd UMC umc ALI ali lena fnet fr azstarnet cdr fb MDA ps esdi # LocalWords: Avanti XL AlphaStations Jensen DECpc AXPpci UDB Cabriolet MCA RC # LocalWords: AlphaPC mca AOUT OUTput PPro sipx gwdg lo nwe FourPort Boca unm # LocalWords: Keepalive linefill RELCOM keepalive analogue CDR conf CDI INIT # LocalWords: OPTi isp irq noisp VFAT vfat NTFS losetup dmsdosfs dosfs ISDN MP # LocalWords: NOWAYOUT behaviour dialin isdn callback BTX Teles ICN EDSS Cisco # LocalWords: ipppd syncppp RFC MPP VJ downloaded icn NICCY Creatix shmem ufr # LocalWords: ibp md ARCnet ether encap NDIS arcether ODI Amigas AmiTCP NetBSD # LocalWords: initrd tue util DES funet des OnNet BIOSP smc Travan Iomega CMS # LocalWords: FC DC dc PPA IOMEGA's ppa RNFS FMV Fujitsu ARPD arpd loran layes # LocalWords: FRAD indiana framerelay DLCI DCLIs Sangoma SDLA mrouted sync sec # LocalWords: Starmode Metricom MosquitoNet mosquitonet kbit nfsroot Digiboard # LocalWords: DIGI Xe Xeve digiboard UMISC touchscreens mtu ethernets HBAs MEX # LocalWords: Shifflett netcom js jshiffle WIC DECchip ELCP EtherPower dst RTC # LocalWords: rtc SMP lp Digi Intl RightSwitch DGRS dgrs AFFS Amiga UFS SDL AP # LocalWords: Solaris RISCom riscom syncPPP PCBIT pcbit sparc anu au artoo MFB # LocalWords: hitchcock Crynwr cnam pktdrvr NCSA's CyDROM CyCDROM FreeBSD NeXT # LocalWords: NeXTstep disklabel disklabels SMD FFS tm AmigaOS diskfiles Un IQ # LocalWords: Bernd informatik rwth aachen uae affs multihosting bytecode java # LocalWords: applets applet JDK ncsa cabi SNI Alphatronix readme LANs scarab # LocalWords: winsock RNIS caltech OSPF honour Honouring Mbit LocalTalk DEFRAG # LocalWords: localtalk download Packetwin Baycom baycom interwork ASCII JNT # LocalWords: Camtec proxying indyramp defragment defragmented UDP FAS FASXX # LocalWords: FastSCSI SIO FDC qlogicfas QLogic qlogicisp setbaycom ife ee LJ # LocalWords: ethz ch Travelmates ProAudioSpectrum ProAudio SoundMan SB SBPro # LocalWords: Thunderboard SM OPL FM ADLIB TSR Gravis MPU PSS ADI SW DSP codec # LocalWords: ADSP ESC ASIC daughtercard GUSMAX MSS NX AdLib Excell Ensoniq YM # LocalWords: SoundScape Spea MediaTriX AudioTriX WSS OTI ThunderBoard VoxWare # LocalWords: Soundscape SSCAPE TRIX MediaTrix PnP Maui dsp midixx EIA getty # LocalWords: mgetty sendfax gert greenie muc lowlevel Lasermate LanManager io # LocalWords: OOPSes trackball binghamton mobileip ncr IOMAPPED settags ns ser # LocalWords: setsync NEGO MPARITY autotuning prefetch PIIX cdwrite utils rc # LocalWords: PCWATCHDOG berkprod bitgate boldt ucsb jf kyoto jp euc Tetsuyasu # LocalWords: YAMADA tetsu cauchy nslab ntt nevod perm su doc kaf kheops wsc # LocalWords: traduc Bourgin dbourgin menuconfig kfill READMEs HOWTOs Virge WA # LocalWords: IDEDISK IDEFLOPPY EIDE firewalls QMAGIC ZMAGIC LocalWords opti # LocalWords: SVGATextMode vga svga Xkernel syr jmwobus comfaqs dhcp flakey GD # LocalWords: IPv IPng interoperability ipng ipv radio's tapr pkthome PLP nano # LocalWords: Ses Mhz sethdlc SOUNDMODEM WindowsSoundSystem smdiag pcf inka ES # LocalWords: smmixer ptt circ soundmodem MKISS FDDI DEFEA DEFPA DEFXX redhat # LocalWords: HyperNews khg mconv sed lina wuftpd MicroChannel netlink irc cum # LocalWords: raudio RealAudio PPROP NETBIOS GUI IBMMCA ELMC Racal Interlan fi # LocalWords: eth shapecfg src esp PCWD PREVSTAT bootparam sig bitwizard SBC # LocalWords: downloads AFSK TCM FP Karn KA FSK RUH LinkSys cron mouseman LLC # LocalWords: SyQuest SyQuest's CCITT MicroSolutions BPCD bpcd ESPSERIAL PROM # LocalWords: SUNESP openprom OPENPROMIO quango themall al TT MC MMU LC RMW AA # LocalWords: INSNS Ataris AutoConfig ZORRO OCS AMIFB Agnus Denise ECS CDTV GB # LocalWords: AGA Cybervision CYBER GSP TMS DMI Zorro ACSI ROMs SLM BioNet GVP # LocalWords: PAMsNet TekMagic Cyberstorm MkI CYBERSTORMII MkII BLZ onboard cx # LocalWords: Village Tronic ATARILANCE RieblCard PAMCard VME MFP sangoma LAPB # LocalWords: Rhotron BioData's Multiface AMIGAMOUSE COPCON Amiga's bitplanes # LocalWords: ATARIMOUSE MFPSER SCC's MegaSTE ESCC Atari's GVPIOEXT DMASOUND # LocalWords: fdutils cisco univercd rpcg htm iface lapb LAPBETHER tpqic qic # LocalWords: SYNTH xd en binfmt aout ipip terra ipx sd sr sg wic framebuffer # LocalWords: ibmmca lapbether mkiss dlci sdla fmv eepro eexpress ni hp ne es # LocalWords: ibmtr isofs ROMFS romfs pcxx cyclades istallion psaux msbusmouse # LocalWords: atixlmouse sbin softdog pcwd USS Lite ACI miroSOUND PCM miroPCM # LocalWords: microcontroller miro Voxware downloading teles acsi slm gvp ltpc # LocalWords: atari ariadne amigamouse atarimouse builtin IPDDP maths bradford # LocalWords: AppleTalk Farallon PhoneNet Zubkoff lnz SCCB HAPN WANs vesafb nt # LocalWords: wanrouter WANPIPE multiprotocol Mbps wanpipe EtherWORKS nodma SC # LocalWords: smp HiSax SiemensChipSet Siemens AVM Elsa ITK hisax PCC MICROR # LocalWords: Mircolink EURO DSS Spellcaster BRI sc spellcast Digiboards GPIO # LocalWords: SYMBIOS COMPAT SDMS rev ASUS Tekram HX VX API ibmmcascsi ASY asy # LocalWords: loader's PCnetPCI automounter AUTOFS amd autofs VT Gallant's Pnp # LocalWords: AEDSP aedsp enskip tik Sysctl sysctl PARPORT parport pnp IDs EPP # LocalWords: Autoprobe bart patrickr HDLS READBACK AB usr DAMA DS SparQ aten # LocalWords: Symbios PCscsi tmscsim RoamAbout GHz Hinds contrib mathematik ok # LocalWords: darmstadt okir DIGIEPCA International's Xem digiepca epca bootup # LocalWords: zorro CAPI AVMB capi avmb VP SYN syncookies EM em pc Ethertalk # LocalWords: Dayna DL Daynatalk LT PhoneNET ATB Daystar queueing CMDS SCBs ls # LocalWords: SCB STATS Thinnet ThunderLAN TLAN Netelligent NetFlex tlan james # LocalWords: caldera Preload Preloading slowdowns schoebel uni NBD nbd prog # LocalWords: stuttgart rdist TRANS hostnames mango jukeboxes ESS userland PD # LocalWords: hardlinked NAMETRANS env mtab fstab umount nologin runlevel gid # LocalWords: transname filespace adm Nodename hostname uname Kernelname bootp # LocalWords: KERNNAME kname ktype kernelname Kerneltype KERNTYPE Alt RX mdafb # LocalWords: dataless kerneltype SYSNAME Comtrol Rocketport palmtop fbset EGS # LocalWords: nvram SYSRQ SysRq PrintScreen sysrq NVRAMs NvRAM Shortwave RTTY # LocalWords: HFMODEM shortwave Sitor Amtor Pactor GTOR hfmodem hayes TX TMOUT # LocalWords: IDEPCI IDEDMA idedma PDC pdc TRM trm raidtools luthien nuclecu # LocalWords: unam mx miguel koobera uic EMUL solaris pp ieee lpsg co DMAs TOS # LocalWords: BLDCONFIG preloading jumperless BOOTINIT modutils multipath GRE # LocalWords: misconfigured autoconfiguration IPGRE ICMP tracert ipautofw PIM # LocalWords: netis rlynch autofw ipportfw monmouth ipsubs portforwarding pimd # LocalWords: portfw PIMSM netweb usc pim pf EUI aggregatable PB decapsulate # LocalWords: ipddp Decapsulation DECAP bool HAMRADIO tcpdump af CDs tx FBCON # LocalWords: ethertap multisession PPC MMIO GDT GDTH ICP gdth hamradio bpp # LocalWords: lmh weejock AIMSlab RadioTrack RTRACK HZP OptoSCC TRX rx TRXECHO # LocalWords: DMASCC paccomm dmascc addr cfg oevsv oe kib picpar FDX baudrate # LocalWords: baudrates fdx HDX hdx PSK kanren frforum QoS SCHED CBQ SCH sched # LocalWords: sch cbq CSZ Shenker Zhang csz SFQ sfq TBF tbf PFIFO fifo PRIO RW # LocalWords: prio Micom xIO dwmw rimi OMIRR omirr omirrd unicode ntfs cmu NIC # LocalWords: Braam braam Schmidt's freiburg nls codepages codepage Romanian # LocalWords: Slovak Slovenian Sorbian Nordic iso Catalan Faeroese Galician SZ # LocalWords: Valencian Slovene Esperanto Estonian Latvian Byelorussian KOI mt # LocalWords: charset Inuit Greenlandic Sami Lappish koi SOFTCURSOR softcursor # LocalWords: Specialix specialix DTR RTS RTSCTS cycladesZ Exabyte ftape's inr # LocalWords: Iomega's LBFM claus ZFTAPE VFS zftape zft William's lzrw DFLT kb # LocalWords: MTSETBLK MTIOCTOP qft setblk zftape's tar's afio's setdrvbuffer # LocalWords: Procfs Exabyte's THR FCD sysvinit init PSC pscwdt VMIDI Euro SAB # LocalWords: Mostek Fastlane PowerMac PReP PMAC PowerPC Macintoshes Starmax # LocalWords: PowerStack Starmaxes MCOMMON DEVICETREE ATY IMS IMSTT videodev # LocalWords: BT Hauppauge STB bttv Quickcam BW BWQCAM bw qcam Mediavision PMS # LocalWords: pms Avatar Freecom Imation Superdisk BPCK bpck COMM comm DSTR ru # LocalWords: dstr EPAT EPEZ epat EPIA epia FreeCom FRPW frpw KingByte KBIC HW # LocalWords: KingByte's kbic OnSpec ValuStore FASTROUTE fastroute FLOWCONTROL # LocalWords: struct APIC realtime OSs LynxOS CNC tmp cvf HFS hfs ADFS Risc os # LocalWords: adfs ncpmount namespace SUBDIR reexport NDS kcore FT SPX spx DAT # LocalWords: interserver BLKSZ NUMBUFFERS apmd Tadpole ANA roestock QuickCam # LocalWords: isapnptools Colour CQCAM colour Connectix QuickClip prive mentre # LocalWords: KMOD kmod conformant utexas kharker UnixWare Mwave cgi cl ts ibm # LocalWords: eXchange threepio oakland simtel pre ULTRAMCA EtherLink isa luik # LocalWords: EtherLink OpenBSD pts DEVPTS devpts ptmx ttyp glibc readback SA # LocalWords: mwave OLDCARD isdnloop linklevel loopctrl Eicon Diehl DIEHLDIVA # LocalWords: ASUSCOM AsusCom TELEINT semiactiv Sedlbauer Sportster TA MIC ITH # LocalWords: NETjet NetJet Niccy Neuhaus sparcs AOC AOCD AOCE Microlink SAA # LocalWords: teletext WinTV saa iproute tc Quadra Performa PowerBook tor AUN # LocalWords: setserial compsoc steve Econet econet AUNUDP psched TEQL TLE CLS # LocalWords: teql FW Ingres TwistedPair MTRR MTRRs mtrr cfs crypto TD ktti KT # LocalWords: PHd ICS ipchains adelaide rustcorp syslog Cumana steganography # LocalWords: AcornSCSI EcoSCSI EESOX EESOXSCSI Powertec POWERTECSCSI dec SF # LocalWords: RadioReveal gatekeeper aimslab aztech FMI sf fmi RTL rtl cesdis # LocalWords: Yellowfin gsfc nasa gov yellowfin pcnet Mylex LNE lne EtherH hs # LocalWords: EBSA chattr RiscOS Winmodem AGP Atomwide DUALSP pcsp robinson CT # LocalWords: SGALAXY Waverider DSPxxx TRXPRO AudioTrix OSWF MOT CFB DSY kbps # LocalWords: tuwien kkudielk LVD mega lun MAXTAGS Gbps arcnet Olicom SKTR SNA # LocalWords: SysKonnect sktr sna etherboot ufs NetBEUI MultiSound MSNDCLAS GX # LocalWords: MSNDINIT MSNDPERM MSNDPIN PNDSPINI PNDSPERM Ensoniq's RetinaZ SS # LocalWords: AudioPCI lspci SonicVibes sonicvibes SPARCs roadrunner CLgen UPA # LocalWords: swansea shtml Zoltrix zoltrix BINUTILS EGCS binutils VIDC DACs # LocalWords: CyberVision Cirrus PowerBooks Topcat SBUS CGsix TurboGX BWtwo SS # LocalWords: CGthree TCX unswapable vfb fbcon hicolor truecolor AFB ILBM SOC # LocalWords: IPLAN gracilis Fibre SBus SparcSTORAGE SV jnewbigin swin QNX qnx # LocalWords: PTY PTYS ptyxx ttyxx PTYs ssh sb Avance ALS pss pvv kerneli hd # LocalWords: synth WaveFront MSND NONPNP AudioExcelDSP STRAM APUS CHRP MBX Nx # LocalWords: PowerMac's BMAC radiotrack rtrack miropcm OFFBOARD HPT UDMA DVD # LocalWords: hpt fokus gmd Cyrix DXL SLC DLC NexGen MediaGX GXm IDT WinChip # LocalWords: MMX MII valkyrie mdacon vdolive VDOLive cuseeme CU hippi rrunner # LocalWords: SeeMe ipmasqadm juanjox ipmarkfw markfw TNCs Microdyne rhine lib # LocalWords: libc jsX gamepad gameport CHF FCS FPGaming MadCatz ASSASIN GrIP # LocalWords: Assasin gamepads GamePad PDPI gamecards gamecard WingMan BSP WCS # LocalWords: ThunderPad CyberMan SideWinder ThrustMaster DirectConnect NES XF # LocalWords: Millenium SNES PSX Multisystem Nintendo PlayStation Amstrad CPC # LocalWords: Sega TurboGraFX Steffen Schwenke Multiststem PDIF FIFOSIZE EPLUS # LocalWords: PowerUP RoadRunner tahallah dos functionkey setterm imladris Woz # LocalWords: PowerMacs Winbond Algorithmics ALGOR algor ECOFF IRIX SGI SGI's # LocalWords: gfx virtualized Xpmac mklinux XFree FBDev Woodhouse mvhi Seeq fp # LocalWords: SGISEEQ HIgh ADB ADBMOUSE crosscompiler CROSSCOMPILE FPE GDB gdb # LocalWords: JOYPORT rp spoofing DawiControl NOGENSUPP EEPROM HSSI Alessandro # LocalWords: singleprocessor tex MATHEMU FRIQ Maxell friq Alcor XLT AlphaBook # LocalWords: AlphaPCI DP LX Miata Mikasa Noritake RPX UX BX Takara EV PRIMO # LocalWords: TSC Matrox Productiva matroxfb matrox multihead ia linuxhq MFW # LocalWords: mfw AAA MCS Initio XXU initio imm AutoDetect IZIP CTR usec HDLC # LocalWords: COSA SRP muni cz kas cosa Alteon AceNIC acenic VTOC OSes GMT SAx # LocalWords: Inspiron localtime INTS Thinkpads Ralf Brown's Flightstick NNN # LocalWords: Xterminator Blackhawk NN mpu ioports DCA HPDCA HPLANCE DIO Corel # LocalWords: GemTek gemtek CMDLINE IrDA PDA's irmanager irattach RR AVA DN rg # LocalWords: uit dagb irda LSAP IrLMP RR's IrLAP IR alloc skb's kfree skb's # LocalWords: GZIP IrLAN NetbeamIR ESI JetEye IrOBEX IrCOMM TTY's minicom dti # LocalWords: ircomm ircomm pluto thiguchi IrTTY Linux's bps NetWinder MIR NSC # LocalWords: ACTiSYS Dongle dongle dongles esi actisys IrMate tekram BVM MVME # LocalWords: BVME BVME WRITETHROUGH copyback writethrough fwmark syncookie tu # LocalWords: alphalinux GOBIOS csn chemnitz nat ACARD AMI MegaRAID megaraid # LocalWords: QNX4FS ISI isicom xterms Apollos VPN RCPCI rcpci sgi visws pcmcia # LocalWords: IrLPT UIRCC Tecra This driver is for Compaq's SMART2 Intelligent Disk Array Controllers. Supported Cards: ---------------- This driver is known to work with the following cards: * SMART (EISA) * SMART-2/E (EISA) * SMART-2/P * SMART-2DH * SMART-2SL * SMART-221 * SMART-3100ES * SMART-3200 * Integrated Smart Array Controller * SA 4200 * SA 4250ES * SA 431 * RAID LC2 Controller It should also work with some really old Disk array adapters, but I am unable to test against these cards: * IDA * IDA-2 * IAES Installing: ----------- You need to build a new kernel to use this device, even if you want to use a loadable module. Apply the patch to a 2.2.x kernel: # cd linux # patch -p1 400504: 00 40 04 f4 .long 0x004004f4 # compiler now puts constant pool in code to so it saves an instruction 400508: 18 0f lr %r0,%r15 40050a: a7 fa ff a0 ahi %r15,-96 40050e: 50 00 f0 00 st %r0,0(%r15) return(test(5)); 400512: 58 10 d0 00 l %r1,0(%r13) 400516: a7 28 00 05 lhi %r2,5 40051a: 0d e1 basr %r14,%r1 # compiler adds 1 extra instruction to epilogue this is done to # avoid processor pipeline stalls owing to data dependencies on g5 & # above as register 14 in the old code was needed directly after being loaded # by the lm %r11,%r15,140(%r15) for the br %14. 40051c: 58 40 f0 98 l %r4,152(%r15) 400520: 98 7f f0 7c lm %r7,%r15,124(%r15) 400524: 07 f4 br %r4 } Hartmut ( our compiler developer ) also has been threatening to take out the stack backchain in optimised code as this also causes pipeline stalls, you have been warned. Compiling programs for debugging on Linux for s/390 & zSeries ============================================================= -gdwarf2 now works & normal -g debugging works much better now Thanks to the IBM java compiler developers bug reports. This is typically done adding/appending the flags -g to the CFLAGS & LDFLAGS variables Makefile of the program concerned. If using gdb & you would like accurate displays of registers & stack traces compile without optimisation i.e make sure that there is no -O2 or similar on the CFLAGS line of the Makefile & the emitted gcc commands, obviously this will produce worse code ( not advisable for shipment ) but it is an aid to the debugging process. This aids debugging because the compiler will copy parameters passed in in registers onto the stack so backtracing & looking at passed in parameters will work, however some larger programs which use inline functions will not compile without optimisation. Debugging with optimisation has since much improved after fixing some bugs, please make sure you are using gdb-5.0 or later developed after Nov'2000. Figuring out gcc compile errors =============================== If you are getting a lot of syntax errors compiling a program & the problem isn't blatantly obvious from the source. It often helps to just preprocess the file, this is done with the -E option in gcc. What this does is that it runs through the very first phase of compilation ( compilation in gcc is done in several stages & gcc calls many programs to achieve its end result ) with the -E option gcc just calls the gcc preprocessor (cpp). The c preprocessor does the following, it joins all the files #included together recursively ( #include files can #include other files ) & also the c file you wish to compile. It puts a fully qualified path of the #included files in a comment & it does macro expansion. This is useful for debugging because 1) You can double check whether the files you expect to be included are the ones that are being included ( e.g. double check that you aren't going to the i386 asm directory ). 2) Check that macro definitions aren't clashing with typedefs, 3) Check that definitons aren't being used before they are being included. 4) Helps put the line emitting the error under the microscope if it contains macros. For convenience the Linux kernel's makefile will do preprocessing automatically for you by suffixing the file you want built with .i ( instead of .o ) e.g. from the linux directory type make arch/s390/kernel/signal.i this will build s390-gcc -D__KERNEL__ -I/home1/barrow/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -D__SMP__ -pipe -fno-strength-reduce -E arch/s390/kernel/signal.c > arch/s390/kernel/signal.i Now look at signal.i you should see something like. # 1 "/home1/barrow/linux/include/asm/types.h" 1 typedef unsigned short umode_t; typedef __signed__ char __s8; typedef unsigned char __u8; typedef __signed__ short __s16; typedef unsigned short __u16; If instead you are getting errors further down e.g. unknown instruction:2515 "move.l" or better still unknown instruction:2515 "Fixme not implemented yet, call Martin" you are probably are attempting to compile some code meant for another architecture or code that is simply not implemented, with a fixme statement stuck into the inline assembly code so that the author of the file now knows he has work to do. To look at the assembly emitted by gcc just before it is about to call gas ( the gnu assembler ) use the -S option. Again for your convenience the Linux kernel's Makefile will hold your hand & do all this donkey work for you also by building the file with the .s suffix. e.g. from the Linux directory type make arch/s390/kernel/signal.s s390-gcc -D__KERNEL__ -I/home1/barrow/linux/include -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -fno-strict-aliasing -D__SMP__ -pipe -fno-strength-reduce -S arch/s390/kernel/signal.c -o arch/s390/kernel/signal.s This will output something like, ( please note the constant pool & the useful comments in the prologue to give you a hand at interpreting it ). .LC54: .string "misaligned (__u16 *) in __xchg\n" .LC57: .string "misaligned (__u32 *) in __xchg\n" .L$PG1: # Pool sys_sigsuspend .LC192: .long -262401 .LC193: .long -1 .LC194: .long schedule-.L$PG1 .LC195: .long do_signal-.L$PG1 .align 4 .globl sys_sigsuspend .type sys_sigsuspend,@function sys_sigsuspend: # leaf function 0 # automatics 16 # outgoing args 0 # need frame pointer 0 # call alloca 0 # has varargs 0 # incoming args (stack) 0 # function length 168 STM 8,15,32(15) LR 0,15 AHI 15,-112 BASR 13,0 .L$CO1: AHI 13,.L$PG1-.L$CO1 ST 0,0(15) LR 8,2 N 5,.LC192-.L$PG1(13) Debugging Tools: ================ objdump ======= This is a tool with many options the most useful being ( if compiled with -g). objdump --source > The whole kernel can be compiled like this ( Doing this will make a 17MB kernel & a 200 MB listing ) however you have to strip it before building the image using the strip command to make it a more reasonable size to boot it. A source/assembly mixed dump of the kernel can be done with the line objdump --source vmlinux > vmlinux.lst Also if the file isn't compiled -g this will output as much debugging information as it can ( e.g. function names ), however, this is very slow as it spends lots of time searching for debugging info, the following self explanitory line should be used instead if the code isn't compiled -g. objdump --disassemble-all --syms vmlinux > vmlinux.lst as it is much faster As hard drive space is valuble most of us use the following approach. 1) Look at the emitted psw on the console to find the crash address in the kernel. 2) Look at the file System.map ( in the linux directory ) produced when building the kernel to find the closest address less than the current PSW to find the offending function. 3) use grep or similar to search the source tree looking for the source file with this function if you don't know where it is. 4) rebuild this object file with -g on, as an example suppose the file was ( /arch/s390/kernel/signal.o ) 5) Assuming the file with the erroneous function is signal.c Move to the base of the Linux source tree 6) rm /arch/s390/kernel/signal.o 7) make /arch/s390/kernel/signal.o 8) watch the gcc command line emitted 9) type it in again or alernatively cut & paste it on the console adding the -g option. 10) objdump --source arch/s390/kernel/signal.o > signal.lst This will output the source & the assembly intermixed, as the snippet below shows This will unfortunately output addresses which aren't the same as the kernel ones you should be able to get around the mental arithmetic by playing with the --adjust-vma parameter to objdump. extern inline void spin_lock(spinlock_t *lp) { a0: 18 34 lr %r3,%r4 a2: a7 3a 03 bc ahi %r3,956 __asm__ __volatile(" lhi 1,-1\n" a6: a7 18 ff ff lhi %r1,-1 aa: 1f 00 slr %r0,%r0 ac: ba 01 30 00 cs %r0,%r1,0(%r3) b0: a7 44 ff fd jm aa saveset = current->blocked; b4: d2 07 f0 68 mvc 104(8,%r15),972(%r4) b8: 43 cc return (set->sig[0] & mask) != 0; } 6) If debugging under VM go down to that section in the document for more info. I now have a tool which takes the pain out of --adjust-vma & you are able to do something like make /arch/s390/kernel/traps.lst & it automatically generates the correctly relocated entries for the text segment in traps.lst. Add the following lines to you Rules.make %.lst: %.c $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -g -c -o $*.o $< $(TOPDIR)/scripts/makelst $* $(TOPDIR) $(OBJDUMP) Copy the code snippet below into the scripts directory in a file called makelst it is'nt very pretty but it works & dont forget to chmod 755 makelst to make it an executable. # $(CC) $(CFLAGS) $(EXTRA_CFLAGS) $(CFLAGS_$@) -g -c -o $*.o $< # $(TOPDIR)/scripts/makelst $* $(TOPDIR) $(OBJDUMP) # # Copyright (C) 2000 IBM Corporation # Author(s): DJ Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) # t1=`$3 --syms $2/$1.o | grep .text | grep " F " | head -n 1` t2=`echo $t1 | gawk '{ print $6 }'` t3=`grep $t2 $2/System.map` t4=`echo $t3 | gawk '{ print $1 }'` t5=`echo $t1 | gawk '{ print $1 }'` t6=`echo $t4 - $t5 | sed s/a/A/ | sed s/b/B/ | sed s/c/C/ | sed s/d/D/ | sed s/e/E/ | sed s/f/F/` t7=`( echo ibase=16 ; echo $t6 ) | bc` $3 --source --adjust-vma=$t7 $2/$1.o > $2/$1.lst strace: ------- Q. What is it ? A. It is a tool for intercepting calls to the kernel & logging them to a file & on the screen. Q. What use is it ? A. You can used it to find out what files a particular program opens. Example 1 --------- If you wanted to know does ping work but didn't have the source strace ping -c 1 127.0.0.1 & then look at the man pages for each of the syscalls below, ( In fact this is sometimes easier than looking at some spagetti source which conditionally compiles for several architectures ) Not everything that it throws out needs to make sense immeadiately Just looking quickly you can see that it is making up a RAW socket for the ICMP protocol. Doing an alarm(10) for a 10 second timeout & doing a gettimeofday call before & after each read to see how long the replies took, & writing some text to stdout so the user has an idea what is going on. socket(PF_INET, SOCK_RAW, IPPROTO_ICMP) = 3 getuid() = 0 setuid(0) = 0 stat("/usr/share/locale/C/libc.cat", 0xbffff134) = -1 ENOENT (No such file or directory) stat("/usr/share/locale/libc/C", 0xbffff134) = -1 ENOENT (No such file or directory) stat("/usr/local/share/locale/C/libc.cat", 0xbffff134) = -1 ENOENT (No such file or directory) getpid() = 353 setsockopt(3, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0 setsockopt(3, SOL_SOCKET, SO_RCVBUF, [49152], 4) = 0 fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(3, 1), ...}) = 0 mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40008000 ioctl(1, TCGETS, {B9600 opost isig icanon echo ...}) = 0 write(1, "PING 127.0.0.1 (127.0.0.1): 56 d"..., 42PING 127.0.0.1 (127.0.0.1): 56 data bytes ) = 42 sigaction(SIGINT, {0x8049ba0, [], SA_RESTART}, {SIG_DFL}) = 0 sigaction(SIGALRM, {0x8049600, [], SA_RESTART}, {SIG_DFL}) = 0 gettimeofday({948904719, 138951}, NULL) = 0 sendto(3, "\10\0D\201a\1\0\0\17#\2178\307\36"..., 64, 0, {sin_family=AF_INET, sin_port=htons(0), sin_addr=inet_addr("127.0.0.1")}, 16) = 64 sigaction(SIGALRM, {0x8049600, [], SA_RESTART}, {0x8049600, [], SA_RESTART}) = 0 sigaction(SIGALRM, {0x8049ba0, [], SA_RESTART}, {0x8049600, [], SA_RESTART}) = 0 alarm(10) = 0 recvfrom(3, "E\0\0T\0005\0\0@\1|r\177\0\0\1\177"..., 192, 0, {sin_family=AF_INET, sin_port=htons(50882), sin_addr=inet_addr("127.0.0.1")}, [16]) = 84 gettimeofday({948904719, 160224}, NULL) = 0 recvfrom(3, "E\0\0T\0006\0\0\377\1\275p\177\0"..., 192, 0, {sin_family=AF_INET, sin_port=htons(50882), sin_addr=inet_addr("127.0.0.1")}, [16]) = 84 gettimeofday({948904719, 166952}, NULL) = 0 write(1, "64 bytes from 127.0.0.1: icmp_se"..., 5764 bytes from 127.0.0.1: icmp_seq=0 ttl=255 time=28.0 ms Example 2 --------- strace passwd 2>&1 | grep open produces the following output open("/etc/ld.so.cache", O_RDONLY) = 3 open("/opt/kde/lib/libc.so.5", O_RDONLY) = -1 ENOENT (No such file or directory) open("/lib/libc.so.5", O_RDONLY) = 3 open("/dev", O_RDONLY) = 3 open("/var/run/utmp", O_RDONLY) = 3 open("/etc/passwd", O_RDONLY) = 3 open("/etc/shadow", O_RDONLY) = 3 open("/etc/login.defs", O_RDONLY) = 4 open("/dev/tty", O_RDONLY) = 4 The 2>&1 is done to redirect stderr to stdout & grep is then filtering this input through the pipe for each line containing the string open. Example 3 --------- Getting sophistocated telnetd crashes on & I don't know why Steps ----- 1) Replace the following line in /etc/inetd.conf telnet stream tcp nowait root /usr/sbin/in.telnetd -h with telnet stream tcp nowait root /blah 2) Create the file /blah with the following contents to start tracing telnetd #!/bin/bash /usr/bin/strace -o/t1 -f /usr/sbin/in.telnetd -h 3) chmod 700 /blah to make it executable only to root 4) killall -HUP inetd or ps aux | grep inetd get inetd's process id & kill -HUP inetd to restart it. Important options ----------------- -o is used to tell strace to output to a file in our case t1 in the root directory -f is to follow children i.e. e.g in our case above telnetd will start the login process & subsequently a shell like bash. You will be able to tell which is which from the process ID's listed on the left hand side of the strace output. -p will tell strace to attach to a running process, yup this can be done provided it isn't being traced or debugged already & you have enough privileges, the reason 2 processes cannot trace or debug the same program is that strace becomes the parent process of the one being debugged & processes ( unlike people ) can have only one parent. However the file /t1 will get big quite quickly to test it telnet 127.0.0.1 now look at what files in.telnetd execve'd 413 execve("/usr/sbin/in.telnetd", ["/usr/sbin/in.telnetd", "-h"], [/* 17 vars */]) = 0 414 execve("/bin/login", ["/bin/login", "-h", "localhost", "-p"], [/* 2 vars */]) = 0 Whey it worked!. Other hints: ------------ If the program is not very interactive ( i.e. not much keyboard input ) & is crashing in one architecture but not in another you can do an strace of both programs under as identical a scenario as you can on both architectures outputting to a file then. do a diff of the two traces using the diff program i.e. diff output1 output2 & maybe you'll be able to see where the call paths differed, this is possibly near the cause of the crash. More info --------- Look at man pages for strace & the various syscalls e.g. man strace, man alarm, man socket. Debugging under VM ================== Notes ----- Addresses & values in the VM debugger are always hex never decimal Address ranges are of the format - or . e.g. The address range 0x2000 to 0x3000 can be described described as 2000-3000 or 2000.1000 The VM Debugger is case insensitive. VM's strengths are usually other debuggers weaknesses you can get at any resource no matter how sensitive e.g. memory managment resources,change address translation in the PSW. For kernel hacking you will reap dividends if you get good at it. The VM Debugger displays operators but not operands, probably because some of it was written when memory was expensive & the programmer was probably proud that it fitted into 2k of memory & the programmers & didn't want to shock hardcore VM'ers by changing the interface :-), also the debugger displays useful information on the same line & the author of the code probably felt that it was a good idea not to go over the 80 columns on the screen. As some of you are probably in a panic now this isn't as unintuitive as it may seem as the 390 instructions are easy to decode mentally & you can make a good guess at a lot of them as all the operands are nibble ( half byte aligned ) & if you have an objdump listing also it is quite easy to follow, if you don't have an objdump listing keep a copy of the s/390 Reference Summary & look at between pages 2 & 7 or alternatively the s/390 principles of operation. e.g. even I can guess that 0001AFF8' LR 180F CC 0 is a ( load register ) lr r0,r15 Also it is very easy to tell the length of a 390 instruction from the 2 most significant bits in the instruction ( not that this info is really useful except if you are trying to make sense of a hexdump of code ). Here is a table Bits Instruction Length ------------------------------------------ 00 2 Bytes 01 4 Bytes 10 4 Bytes 11 6 Bytes The debugger also displays other useful info on the same line such as the addresses being operated on destination addresses of branches & condition codes. e.g. 00019736' AHI A7DAFF0E CC 1 000198BA' BRC A7840004 -> 000198C2' CC 0 000198CE' STM 900EF068 >> 0FA95E78 CC 2 Useful VM debugger commands =========================== I suppose I'd better mention this before I start to list the current active traces do Q TR there can be a maximum of 255 of these per set ( more about trace sets later ). To stop traces issue a TR END. To delete a particular breakpoint issue TR DEL The PA1 key drops to CP mode so you can issue debugger commands, Doing alt c (on my 3270 console at least ) clears the screen. hitting b comes back to the running operating system from cp mode ( in our case linux ). It is typically useful to add shortcuts to your profile.exec file if you have one ( this is roughly equivalent to autoexec.bat in DOS ). file here are a few from mine. /* this gives me command history on issuing f12 */ set pf12 retrieve /* this continues */ set pf8 imm b /* goes to trace set a */ set pf1 imm tr goto a /* goes to trace set b */ set pf2 imm tr goto b /* goes to trace set c */ set pf3 imm tr goto c Instruction Tracing ------------------- Setting a simple breakpoint TR I PSWA
To debug a particular function try TR I R TR I on its own will single step. TR I DATA will trace for particular mnemonics e.g. TR I DATA 4D R 0197BC.4000 will trace for BAS'es ( opcode 4D ) in the range 0197BC.4000 if you were inclined you could add traces for all branch instructions & suffix them with the run prefix so you would have a backtrace on screen when a program crashes. TR BR will trace branches into or out of an address. e.g. TR BR INTO 0 is often quite useful if a program is getting awkward & deciding to branch to 0 & crashing as this will stop at the address before in jumps to 0. TR I R
RUN cmd d g single steps a range of addresses but stays running & displays the gprs on each step. Displaying & modifying Registers -------------------------------- D G will display all the gprs D X will display all the control registers D AR will display all the access registers D AR4-7 will display access registers 4 to 7 CPU ALL D G will display the GRPS of all CPUS in the configuration D PSW will display the current PSW st PSW 2000 will put the value 2000 into the PSW & cause crash your machine. D PREFIX Displaying Memory ----------------- To display memory mapped using the current PSW's mapping try D To make VM display a message each time it hits a particular address & continue try D I will disassemble/display a range of instructions. ST addr 32 bit word will store a 32 bit aligned address D T will display the EBCDIC in an address ( if you are that way inclined ) D R will display real addresses ( without DAT ) but with prefixing. There are other complex options to display if you need to get at say home space but are in primary space the easiest thing to do is to temporarily modify the PSW to the other addressing mode, display the stuff & then restore it. Hints ----- If you want to issue a debugger command without halting your virtual machine with the PA1 key try prefixing the command with #CP e.g. #cp tr i pswa 2000 also suffixing most debugger commands with RUN will cause them not to stop just display the mnemonic at the current instruction on the console. If you have several breakpoints you want to put into your program & you get fed up of cross referencing with System.map you can do the following trick for several symbols. grep do_signal System.map which emits the following among other things 0001f4e0 T do_signal now you can do TR I PSWA 0001f4e0 cmd msg * do_signal This sends a message to your own console each time do_signal is entered. ( As an aside I wrote a perl script once which automatically generated a REXX script with breakpoints on every kernel procedure, this isn't a good idea because there are thousands of these routines & VM can only set 255 breakpoints at a time so you nearly had to spend as long pruning the file down as you would entering the msg's by hand ),however, the trick might be useful for a single object file. On linux'es 3270 emulator x3270 there is a very useful option under the file ment Save Screens In File this is very good of keeping a copy of traces. Tracing Program Exceptions -------------------------- If you get a crash which says something like illegal operation or specification exception followed by a register dump You can restart linux & trace these using the tr prog trace option. The most common ones you will normally be tracing for is 1=operation exception 2=privileged operation exception 4=protection exception 5=addressing exception 6=specification exception 10=segment translation exception 11=page translation exception The full list of these is on page 22 of the current s/390 Reference Summary. e.g. tr prog 10 will trace segment translation exceptions. tr prog on its own will trace all program interruption codes. Trace Sets ---------- On starting VM you are initially in the INITIAL trace set. You can do a Q TR to verify this. If you have a complex tracing situation where you wish to wait for instance till a driver is open before you start tracing IO, but know in your heart that you are going to have to make several runs through the code till you have a clue whats going on. What you can do is TR I PSWA hit b to continue till breakpoint reach the breakpoint now do your TR GOTO B TR IO 7c08-7c09 or whatever & trace tour IO to got back to the initial trace set do TR GOTO INITIAL & the TR I PSWA will be the only active breakpoint again. Tracing linux syscalls under VM ------------------------------- Syscalls are implemented on Linux for S390 by the Supervisor call instruction (SVC) there 256 possibilities of these as the instruction is made up of a 0xA opcode & the second byte being the syscall number. They are traced using the simple command. TR SVC the syscalls are defined in linux/include/asm-s390/unistd.h e.g. to trace all file opens just do TR SVC 5 ( as this is the syscall number of open ) SMP Specific commands --------------------- To find out how many cpus you have Q CPUS displays all the CPU's available to your virtual machine To find the cpu that the current cpu VM debugger commands are being directed at do Q CPU to change the current cpu cpu VM debugger commands are being directed at do CPU On a SMP guest issue a command to all CPUs try prefixing the command with cpu all. To issue a command to a particular cpu try cpu e.g. CPU 01 TR I R 2000.3000 If you are running on a guest with several cpus & you have a IO related problem & cannot follow the flow of code but you know it isnt smp related. from the bash prompt issue shutdown -h now or halt. do a Q CPUS to find out how many cpus you have detach each one of them from cp except cpu 0 by issueing a DETACH CPU 01-(number of cpus in configuration) & reboot linux. TR SIGP will trace inter processor signal processor instructions. Help for displaying ascii textstrings ------------------------------------- As textstrings are cannot be displayed in ASCII under the VM debugger ( I love EBDIC too ) I have written this little program which will convert a command line of hex digits to ascii text which can be compiled under linux & you can copy the hex digits from your x3270 terminal to your xterm if you are debugging from a linuxbox. This is quite useful when looking at a parameter passed in as a text string under VM ( unless you are good at decoding ASCII in your head ). e.g. consider tracing an open syscall TR SVC 5 We have stopped at a breakpoint 000151B0' SVC 0A05 -> 0001909A' CC 0 D 20.8 to check the SVC old psw in the prefix area & see was it from userspace ( for the layout of the prefix area consult P18 of the s/390 390 Reference Summary if you have it available ). V00000020 070C2000 800151B2 The problem state bit wasn't set & it's also too early in the boot sequence for it to be a userspace SVC if it was we would have to temporarily switch the psw to user space addressing so we could get at the first parameter of the open in gpr2. Next do a D G2 GPR 2 = 00014CB4 Now display what gpr2 is pointing to D 00014CB4.20 V00014CB4 2F646576 2F636F6E 736F6C65 00001BF5 V00014CC4 FC00014C B4001001 E0001000 B8070707 Now copy the text till the first 00 hex ( which is the end of the string to an xterm & do hex2ascii on it. hex2ascii 2F646576 2F636F6E 736F6C65 00 outputs Decoded Hex:=/ d e v / c o n s o l e 0x00 We were opening the console device, You can compile the code below yourself for practice :-), /* * hex2ascii.c * a useful little tool for converting a hexadecimal command line to ascii * * Author(s): Denis Joseph Barrow (djbarrow@de.ibm.com,barrow_dj@yahoo.com) * (C) 2000 IBM Deutschland Entwicklung GmbH, IBM Corporation. */ #include int main(int argc,char *argv[]) { int cnt1,cnt2,len,toggle=0; int startcnt=1; unsigned char c,hex; if(argc>1&&(strcmp(argv[1],"-a")==0)) startcnt=2; printf("Decoded Hex:="); for(cnt1=startcnt;cnt1='0'&&c<='9') c=c-'0'; if(c>='A'&&c<='F') c=c-'A'+10; if(c>='a'&&c<='F') c=c-'a'+10; switch(toggle) { case 0: hex=c<<4; toggle=1; break; case 1: hex+=c; if(hex<32||hex>127) { if(startcnt==1) printf("0x%02X ",(int)hex); else printf("."); } else { printf("%c",hex); if(startcnt==1) printf(" "); } toggle=0; break; } } } printf("\n"); } Stack tracing under VM ---------------------- A basic backtrace ----------------- Here are the tricks I use 9 out of 10 times it works pretty well, When your backchain reaches a dead end -------------------------------------- This can happen when an exception happens in the kernel & the kernel is entered twice if you reach the NULL pointer at the end of the back chain you should be able to sniff further back if you follow the following tricks. 1) A kernel address should be easy to recognise since it is in primary space & the problem state bit isn't set & also The Hi bit of the address is set. 2) Another backchain should also be easy to recognise since it is an address pointing to another address approximately 100 bytes or 0x70 hex behind the current stackpointer. Here is some practice. boot the kernel & hit PA1 at some random time d g to display the gprs, this should display something like GPR 0 = 00000001 00156018 0014359C 00000000 GPR 4 = 00000001 001B8888 000003E0 00000000 GPR 8 = 00100080 00100084 00000000 000FE000 GPR 12 = 00010400 8001B2DC 8001B36A 000FFED8 Note that GPR14 is a return address but as we are real men we are going to trace the stack. display 0x40 bytes after the stack pointer. V000FFED8 000FFF38 8001B838 80014C8E 000FFF38 V000FFEE8 00000000 00000000 000003E0 00000000 V000FFEF8 00100080 00100084 00000000 000FE000 V000FFF08 00010400 8001B2DC 8001B36A 000FFED8 Ah now look at whats in sp+56 (sp+0x38) this is 8001B36A our saved r14 if you look above at our stackframe & also agrees with GPR14. now backchain d 000FFF38.40 we now are taking the contents of SP to get our first backchain. V000FFF38 000FFFA0 00000000 00014995 00147094 V000FFF48 00147090 001470A0 000003E0 00000000 V000FFF58 00100080 00100084 00000000 001BF1D0 V000FFF68 00010400 800149BA 80014CA6 000FFF38 This displays a 2nd return address of 80014CA6 now do d 000FFFA0.40 for our 3rd backchain V000FFFA0 04B52002 0001107F 00000000 00000000 V000FFFB0 00000000 00000000 FF000000 0001107F V000FFFC0 00000000 00000000 00000000 00000000 V000FFFD0 00010400 80010802 8001085A 000FFFA0 our 3rd return address is 8001085A as the 04B52002 looks suspiciously like rubbish it is fair to assume that the kernel entry routines for the sake of optimisation dont set up a backchain. now look at System.map to see if the addresses make any sense. grep -i 0001b3 System.map outputs among other things 0001b304 T cpu_idle so 8001B36A is cpu_idle+0x66 ( quiet the cpu is asleep, don't wake it ) grep -i 00014 System.map produces among other things 00014a78 T start_kernel so 0014CA6 is start_kernel+some hex number I can't add in my head. grep -i 00108 System.map this produces 00010800 T _stext so 8001085A is _stext+0x5a Congrats you've done your first backchain. S390 IO Overview ================ I am not going to give a course in 390 IO architecture as this would take me quite a while & I'm no expert. Instead I'll give a 390 IO architecture summary for Dummies if you have the s/390 principles of operation available read this instead. If nothing else you may find a few useful keywords in here & be able to use them on a web search engine like altavista to find more useful information. Unlike other bus architectures modern 390 systems do their IO using mostly fibre optics & devices such as tapes & disks can be shared between several mainframes, also S390 can support upto 65536 devices while a high end PC based system might be choking with around 64. Here is some of the common IO terminology Subchannel: This is the logical number most IO commands use to talk to an IO device there can be upto 0x10000 (65536) of these in a configuration typically there is a few hundred. Under VM for simplicity they are allocated contiguously, however on the native hardware they are not they typically stay consistent between boots provided no new hardware is inserted or removed. Under Linux for 390 we use these as IRQ's & also when issuing an IO command (CLEAR SUBCHANNEL, HALT SUBCHANNEL,MODIFY SUBCHANNEL,RESUME SUBCHANNEL,START SUBCHANNEL,STORE SUBCHANNEL & TEST SUBCHANNEL ) we use this as the ID of the device we wish to talk to, the most important of these instructions are START SUBCHANNEL ( to start IO ), TEST SUBCHANNEL ( to check whether the IO completed successfully ), & HALT SUBCHANNEL ( to kill IO ), a subchannel can have up to 8 channel paths to a device this offers redunancy if one is not available. Device Number: This number remains static & Is closely tied to the hardware, there are 65536 of these also they are made up of a CHPID ( Channel Path ID, the most significant 8 bits ) & another lsb 8 bits. These remain static even if more devices are inserted or removed from the hardware, there is a 1 to 1 mapping between Subchannels & Device Numbers provided devices arent inserted or removed. Channel Control Words: CCWS are linked lists of instructions initially pointed to by an operation request block (ORB), which is initially given to Start Subchannel (SSCH) command along with the subchannel number for the IO subsystem to process while the CPU continues executing normal code. These come in two flavours, Format 0 ( 24 bit for backward ) compatibility & Format 1 ( 31 bit ). These are typically used to issue read & write ( & many other instructions ) they consist of a length field & an absolute address field. For each IO typically get 1 or 2 interrupts one for channel end ( primary status ) when the channel is idle & the second for device end ( secondary status ) sometimes you get both concurrently, you check how the IO went on by issueing a TEST SUBCHANNEL at each interrupt, from which you receive an Interruption response block (IRB). If you get channel & device end status in the IRB without channel checks etc. your IO probably went okay. If you didn't you probably need a doctorto examine the IRB & extended status word etc. If an error occurs more sophistocated control units have a facitity known as concurrent sense this means that if an error occurs Extended sense information will be presented in the Extended status word in the IRB if not you have to issue a subsequent SENSE CCW command after the test subchannel. TPI( Test pending interrupt) can also be used for polled IO but in multitasking multiprocessor systems it isn't recommended except for checking special cases ( i.e. non looping checks for pending IO etc. ). Store Subchannel & Modify Subchannel can be used to examine & modify operating characteristics of a subchannel ( e.g. channel paths ). Other IO related Terms: Sysplex: S390's Clustering Technology QDIO: S390's new high speed IO architecture to support devices such as gigabit ethernet, this architecture is also designed to be forward compatible with up & coming 64 bit machines. General Concepts Input Output Processors (IOP's) are responsible for communicating between the mainframe CPU's & the channel & relieve the mainframe CPU's from the burden of communicating with IO devices directly, this allows the CPU's to concentrate on data processing. IOP's can use one or more links ( known as channel paths ) to talk to each IO device. It first checks for path availability & chooses an available one, then starts ( & sometimes terminates IO ). There are two types of channel path ESCON & the Paralell IO interface. IO devices are attached to control units, control units provide the logic to interface the channel paths & channel path IO protocols to the IO devices, they can be integrated with the devices or housed separately & often talk to several similar devices ( typical examples would be raid controllers or a control unit which connects to 1000 3270 terminals ). +---------------------------------------------------------------+ | +-----+ +-----+ +-----+ +-----+ +----------+ +----------+ | | | CPU | | CPU | | CPU | | CPU | | Main | | Expanded | | | | | | | | | | | | Memory | | Storage | | | +-----+ +-----+ +-----+ +-----+ +----------+ +----------+ | |---------------------------------------------------------------+ | IOP | IOP | IOP | |--------------------------------------------------------------- | C | C | C | C | C | C | C | C | C | C | C | C | C | C | C | C | ---------------------------------------------------------------- || || || Bus & Tag Channel Path || ESCON || ====================== || Channel || || || || Path +----------+ +----------+ +----------+ | | | | | | | CU | | CU | | CU | | | | | | | +----------+ +----------+ +----------+ | | | | | +----------+ +----------+ +----------+ +----------+ +----------+ |I/O Device| |I/O Device| |I/O Device| |I/O Device| |I/O Device| +----------+ +----------+ +----------+ +----------+ +----------+ CPU = Central Processing Unit C = Channel IOP = IP Processor CU = Control Unit The 390 IO systems come in 2 flavours the current 390 machines support both The Older 360 & 370 Interface,sometimes called the paralell I/O interface, sometimes called Bus-and Tag & sometimes Original Equipment Manufacturers Interface (OEMI). This byte wide paralell channel path/bus has parity & data on the "Bus" cable & control lines on the "Tag" cable. These can operate in byte multiplex mode for sharing between several slow devices or burst mode & monopolize the channel for the whole burst. Upto 256 devices can be addressed on one of these cables. These cables are about one inch in diameter. The maximum unextended length supported by these cables is 125 Meters but this can be extended up to 2km with a fibre optic channel extended such as a 3044. The maximum burst speed supported is 4.5 megabytes per second however some really old processors support only transfer rates of 3.0, 2.0 & 1.0 MB/sec. One of these paths can be daisy chained to up to 8 control units. ESCON if fibre optic it is also called FICON Was introduced by IBM in 1990. Has 2 fibre optic cables & uses either leds or lasers for communication at a signaling rate of upto 200 megabits/sec. As 10bits are transferred for every 8 bits info this drops to 160 megabits/sec & to 18.6 Megabytes/sec once control info & CRC are added. ESCON only operates in burst mode. ESCONs typical max cable length is 3km for the led version & 20km for the laser version known as XDF ( extended distance facility ). This can be further extended by using an ESCON director which triples the above mentioned ranges. Unlike Bus & Tag as ESCON is serial it uses a packet switching architecture the standard Bus & Tag control protocol is however present within the packets. Upto 256 devices can be attached to each control unit that uses one of these interfaces. Common 390 Devices include: Network adapters typically OSA2,3172's,2116's & OSA-E gigabit ethernet adapters, Consoles 3270 & 3215 ( a teletype emulated under linux for a line mode console ). DASD's direct access storage devices ( otherwise known as hard disks ). Tape Drives. CTC ( Channel to Channel Adapters ), ESCON or Paralell Cables used as a very high speed serial link between 2 machines. We use 2 cables under linux to do a bi-directional serial link. Debugging IO on S390 under VM ============================= Now we are ready to go on with IO tracing commands under VM A few self explanatory queries: Q OSA Q CTC Q DISK Q DASD Q osa on my machine returns OSA 7C08 ON OSA 7C08 SUBCHANNEL = 0000 OSA 7C09 ON OSA 7C09 SUBCHANNEL = 0001 OSA 7C14 ON OSA 7C14 SUBCHANNEL = 0002 OSA 7C15 ON OSA 7C15 SUBCHANNEL = 0003 Now using the device numbers returned by this command we will Trace the io starting up on the first device 7c08 & 7c09 In our simplest case we can trace the start subchannels like TR SSCH 7C08-7C09 or the halt subchannels or TR HSCH 7C08-7C09 MSCH's ,STSCH's I think you can guess the rest Ingo's favourite trick is tracing all the IO's & CCWS & spooling them into the reader of another VM guest so he can ftp the logfile back to his own machine.I'll do a small bit of this & give you a look at the output. 1) Spool stdout to VM reader SP PRT TO (another vm guest ) or * for the local vm guest 2) Fill the reader with the trace TR IO 7c08-7c09 INST INT CCW PRT RUN 3) Start up linux i 00c 4) Finish the trace TR END 5) close the reader C PRT 6) list reader contents RDRLIST 7) copy it to linux4's minidisk RECEIVE / LOG TXT A1 ( replace 8) filel & press F11 to look at it You should see someting like. 00020942' SSCH B2334000 0048813C CC 0 SCH 0000 DEV 7C08 CPA 000FFDF0 PARM 00E2C9C4 KEY 0 FPI C0 LPM 80 CCW 000FFDF0 E4200100 00487FE8 0000 E4240100 ........ IDAL 43D8AFE8 IDAL 0FB76000 00020B0A' I/O DEV 7C08 -> 000197BC' SCH 0000 PARM 00E2C9C4 00021628' TSCH B2354000 >> 00488164 CC 0 SCH 0000 DEV 7C08 CCWA 000FFDF8 DEV STS 0C SCH STS 00 CNT 00EC KEY 0 FPI C0 CC 0 CTLS 4007 00022238' STSCH B2344000 >> 00488108 CC 0 SCH 0000 DEV 7C08 If you don't like messing up your readed ( because you possibly booted from it ) you can alternatively spool it to another readers guest. GDB on S390 =========== N.B. if compiling for debugging gdb works better without optimisation ( see Compiling programs for debugging ) invocation ---------- gdb Online help ----------- help: gives help on commands e.g. help help display Note gdb's online help is very good use it. Assembly -------- info registers: displays registers other than floating point. info all-registers: displays floating points as well. disassemble: dissassembles e.g. disassemble without parameters will disassemble the current function disassemble $pc $pc+10 Viewing & modifying variables ----------------------------- print or p: displays variable or register e.g. p/x $sp will display the stack pointer display: prints variable or register each time program stops e.g. display/x $pc will display the program counter display argc undisplay : undo's display's info breakpoints: shows all current breakpoints info stack: shows stack back trace ( if this dosent work too well, I'll show you the stacktrace by hand below ). info locals: displays local variables. info args: display current procedure arguments. set args: will set argc & argv each time the victim program is invoked. set =value set argc=100 set $pc=0 Modifying execution ------------------- step: steps n lines of sourcecode step steps 1 line. step 100 steps 100 lines of code. next: like step except this will not step into subroutines stepi: steps a single machine code instruction. e.g. stepi 100 nexti: steps a single machine code instruction but will not step into subroutines. finish: will run until exit of the current routine run: (re)starts a program cont: continues a program quit: exits gdb. breakpoints ------------ break sets a breakpoint e.g. break main break *$pc break *0x400618 heres a really useful one for large programs rbr Set a breakpoint for all functions matching REGEXP e.g. rbr 390 will set a breakpoint with all functions with 390 in their name. info breakpoints lists all breakpoints delete: delete breakpoint by number or delete them all e.g. delete 1 will delete the first breakpoint delete will delete them all watch: This will set a watchpoint ( usually hardware assisted ), This will watch a variable till it changes e.g. watch cnt, will watch the variable cnt till it changes. As an aside unfortunately gdb's, architecture independent watchpoint code is inconsistent & not very good, watchpoints usually work but not always. info watchpoints: Display currently active watchpoints condition: ( another useful one ) Specify breakpoint number N to break only if COND is true. Usage is `condition N COND', where N is an integer and COND is an expression to be evaluated whenever breakpoint N is reached. User defined functions/macros ----------------------------- define: ( Note this is very very useful,simple & powerful ) usage define end examples which you should consider putting into .gdbinit in your home directory define d stepi disassemble $pc $pc+10 end define e nexti disassemble $pc $pc+10 end Other hard to classify stuff ---------------------------- signal n: sends the victim program a signal. e.g. signal 3 will send a SIGQUIT. info signals: what gdb does when the victim receives certain signals. list: e.g. list lists current function source list 1,10 list first 10 lines of curret file. list test.c:1,10 directory: Adds directories to be searched for source if gdb cannot find the source. (note it is a bit sensititive about slashes ) e.g. To add the root of the filesystem to the searchpath do directory // call This calls a function in the victim program, this is pretty powerful e.g. (gdb) call printf("hello world") outputs: $1 = 11 You might now be thinking that the line above didn't work, something extra had to be done. (gdb) call fflush(stdout) hello world$2 = 0 As an aside the debugger also calls malloc & free under the hood to make space for the "hello world" string. hints ----- 1) command completion works just like bash ( if you are a bad typist like me this really helps ) e.g. hit br & cursor up & down :-). 2) if you have a debugging problem that takes a few steps to recreate put the steps into a file called .gdbinit in your current working directory if you have defined a few extra useful user defined commands put these in your home directory & they will be read each time gdb is launched. A typical .gdbinit file might be. break main run break runtime_exception cont stack chaining in gdb by hand ----------------------------- This is done using a the same trick described for VM p/x (*($sp+56))&0x7fffffff get the first backchain. this outputs $5 = 0x528f18 on my machine. Now you can use info symbol (*($sp+56))&0x7fffffff you might see something like. rl_getc + 36 in section .text telling you what is located at address 0x528f18 Now do. p/x (*(*$sp+56))&0x7fffffff This outputs $6 = 0x528ed0 Now do. info symbol (*(*$sp+56))&0x7fffffff rl_read_key + 180 in section .text now do p/x (*(**$sp+56))&0x7fffffff & so on. Note: Remember gdb has history just like bash you don't need to retype the whole line just use the up & down arrows. For more info ------------- From your linuxbox do man gdb or info gdb. core dumps ---------- What a core dump ?, A core dump is a file generated by the kernel ( if allowed ) which contains the registers, & all active pages of the program which has crashed. From this file gdb will allow you to look at the registers & stack trace & memory of the program as if it just crashed on your system, it is usually called core & created in the current working directory. This is very useful in that a customer can mail a core dump to a technical support department & the technical support department can reconstruct what happened. Provided the have an indentical copy of this program with debugging symbols compiled in & the source base of this build is available. In short it is far more useful than something like a crash log could ever hope to be. In theory all that is missing to restart a core dumped program is a kernel patch which will do the following. 1) Make a new kernel task structure 2) Reload all the dumped pages back into the kernels memory managment structures. 3) Do the required clock fixups 4) Get all files & network connections for the process back into an identical state ( really difficult ). 5) A few more difficult things I haven't thought of. Why have I never seen one ?. Probably because you haven't used the command ulimit -c unlimited in bash to allow core dumps, now do ulimit -a to verify that the limit was accepted. A sample core dump To create this I'm going to do ulimit -c unlimited gdb to launch gdb (my victim app. ) now be bad & do the following from another telnet/xterm session to the same machine ps -aux | grep gdb kill -SIGSEGV or alternatively use killall -SIGSEGV gdb if you have the killall command. Now look at the core dump. ./gdb ./gdb core Displays the following GNU gdb 4.18 Copyright 1998 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "s390-ibm-linux"... Core was generated by `./gdb'. Program terminated with signal 11, Segmentation fault. Reading symbols from /usr/lib/libncurses.so.4...done. Reading symbols from /lib/libm.so.6...done. Reading symbols from /lib/libc.so.6...done. Reading symbols from /lib/ld-linux.so.2...done. #0 0x40126d1a in read () from /lib/libc.so.6 Setting up the environment for debugging gdb. Breakpoint 1 at 0x4dc6f8: file utils.c, line 471. Breakpoint 2 at 0x4d87a4: file top.c, line 2609. (top-gdb) info stack #0 0x40126d1a in read () from /lib/libc.so.6 #1 0x528f26 in rl_getc (stream=0x7ffffde8) at input.c:402 #2 0x528ed0 in rl_read_key () at input.c:381 #3 0x5167e6 in readline_internal_char () at readline.c:454 #4 0x5168ee in readline_internal_charloop () at readline.c:507 #5 0x51692c in readline_internal () at readline.c:521 #6 0x5164fe in readline (prompt=0x7ffff810 "\177x\177\177x") at readline.c:349 #7 0x4d7a8a in command_line_input (prrompt=0x564420 "(gdb) ", repeat=1, annotation_suffix=0x4d6b44 "prompt") at top.c:2091 #8 0x4d6cf0 in command_loop () at top.c:1345 #9 0x4e25bc in main (argc=1, argv=0x7ffffdf4) at main.c:635 LDD === This is a program which lists the shared libraries which a library needs, Note you also get the relocations of the shared library text segments which help when using objdump --source. e.g. ldd ./gdb outputs libncurses.so.4 => /usr/lib/libncurses.so.4 (0x40018000) libm.so.6 => /lib/libm.so.6 (0x4005e000) libc.so.6 => /lib/libc.so.6 (0x40084000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) Debugging shared libraries ========================== Most programs use shared libraries, however it can be very painful when you single step instruction into a function like printf for the first time & you end up in functions like _dl_runtime_resolve this is the ld.so doing lazy binding, lazy binding is a concept in ELF where shared library functions are not loaded into memory unless they are actually used, great for saving memory but a pain to debug. To get around this either relink the program -static or exit gdb type export LD_BIND_NOW=true this will stop lazy binding & restart the gdb'ing the program in question. Debugging modules ================= As modules are dynamically loaded into the kernel their address can be anywhere to get around this use the -m option with insmod to emit a load map which can be piped into a file if required. The proc file system ==================== What is it ?. It is a filesystem created by the kernel with files which are created on demand by the kernel if read, or can be used to modify kernel parameters, it is a powerful concept. e.g. cat /proc/sys/net/ipv4/ip_forward On my machine outputs 0 telling me ip_forwarding is not on to switch it on I can do echo 1 > /proc/sys/net/ipv4/ip_forward cat it again cat /proc/sys/net/ipv4/ip_forward On my machine now outputs 1 IP forwarding is on. There is a lot of useful info in here best found by going in & having a look around, so I'll take you through some entries I consider important. All the processes running on the machine have there own entry defined by /proc/ So lets have a look at the init process cd /proc/1 cat cmdline emits init [2] cd /proc/1/fd This contains numerical entries of all the open files, some of these you can cat e.g. stdout (2) cat /proc/29/maps on my machine emits 00400000-00478000 r-xp 00000000 5f:00 4103 /bin/bash 00478000-0047e000 rw-p 00077000 5f:00 4103 /bin/bash 0047e000-00492000 rwxp 00000000 00:00 0 40000000-40015000 r-xp 00000000 5f:00 14382 /lib/ld-2.1.2.so 40015000-40016000 rw-p 00014000 5f:00 14382 /lib/ld-2.1.2.so 40016000-40017000 rwxp 00000000 00:00 0 40017000-40018000 rw-p 00000000 00:00 0 40018000-4001b000 r-xp 00000000 5f:00 14435 /lib/libtermcap.so.2.0.8 4001b000-4001c000 rw-p 00002000 5f:00 14435 /lib/libtermcap.so.2.0.8 4001c000-4010d000 r-xp 00000000 5f:00 14387 /lib/libc-2.1.2.so 4010d000-40111000 rw-p 000f0000 5f:00 14387 /lib/libc-2.1.2.so 40111000-40114000 rw-p 00000000 00:00 0 40114000-4011e000 r-xp 00000000 5f:00 14408 /lib/libnss_files-2.1.2.so 4011e000-4011f000 rw-p 00009000 5f:00 14408 /lib/libnss_files-2.1.2.so 7fffd000-80000000 rwxp ffffe000 00:00 0 Showing us the shared libraries init uses where they are in memory & memory access permissions for each virtual memory area. /proc/1/cwd is a softlink to the current working directory. /proc/1/root is the root of the filesystem for this process. /proc/1/mem is the current running processes memory which you can read & write to like a file. strace uses this sometimes as it is a bit faster than the rather inefficent ptrace interface for peeking at DATA. cat status Name: init State: S (sleeping) Pid: 1 PPid: 0 Uid: 0 0 0 0 Gid: 0 0 0 0 Groups: VmSize: 408 kB VmLck: 0 kB VmRSS: 208 kB VmData: 24 kB VmStk: 8 kB VmExe: 368 kB VmLib: 0 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 7fffffffd7f0d8fc SigCgt: 00000000280b2603 CapInh: 00000000fffffeff CapPrm: 00000000ffffffff CapEff: 00000000fffffeff User PSW: 070de000 80414146 task: 004b6000 tss: 004b62d8 ksp: 004b7ca8 pt_regs: 004b7f68 User GPRS: 00000400 00000000 0000000b 7ffffa90 00000000 00000000 00000000 0045d9f4 0045cafc 7ffffa90 7fffff18 0045cb08 00010400 804039e8 80403af8 7ffff8b0 User ACRS: 00000000 00000000 00000000 00000000 00000001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 Kernel BackChain CallChain BackChain CallChain 004b7ca8 8002bd0c 004b7d18 8002b92c 004b7db8 8005cd50 004b7e38 8005d12a 004b7f08 80019114 Showing among other things memory usage & status of some signals & the processes'es registers from the kernel task_structure as well as a backchain which may be useful if a process crashes in the kernel for some unknown reason. Starting points for debugging scripting languages etc. ====================================================== bash/sh bash -x e.g. bash -x /usr/bin/bashbug displays the following lines as it executes them. + MACHINE=i586 + OS=linux-gnu + CC=gcc + CFLAGS= -DPROGRAM='bash' -DHOSTTYPE='i586' -DOSTYPE='linux-gnu' -DMACHTYPE='i586-pc-linux-gnu' -DSHELL -DHAVE_CONFIG_H -I. -I. -I./lib -O2 -pipe + RELEASE=2.01 + PATCHLEVEL=1 + RELSTATUS=release + MACHTYPE=i586-pc-linux-gnu perl -d runs the perlscript in a fully intercative debugger . Type 'h' in the debugger for help. for debugging java type jdb another fully interactive gdb style debugger. & type ? in the debugger for help. References: ----------- Enterprise Systems Architecture Reference Summary Enterprise Systems Architecture Principles of Operation Hartmut Penners 390 stack frame sheet. IBM Mainframe Channel Attachment a technology brief from a CISCO webpage Various bits of man & info pages of Linux. Linux & GDB source. Various info & man pages. CMS Help on tracing commands. Linux for zSeries and S/390 Elf Application Binary Interface ( Highly Recommended ) z/Architecture Principles of Operation LINUX ALLOCATED DEVICES Maintained by H. Peter Anvin Last revised: December 29, 2000 This list is the Linux Device List, the official registry of allocated device numbers and /dev directory nodes for the Linux operating system. The latest version of this list is included with the Linux kernel sources. It is also available separately from http://www.kernel.org/pub/linux/docs/device-list/ or ftp://ftp.kernel.org/pub/linux/docs/device-list/. The LaTeX version of this document is no longer maintained. This document is included by reference into the Filesystem Hierarchy Standard (FHS). The FHS is available from http://www.pathname.com/fhs/. Allocations marked (68k/Amiga) apply to Linux/68k on the Amiga platform only. Allocations marked (68k/Atari) apply to Linux/68k on the Atari platform only. The symbol {2.6} means the allocation is obsolete and scheduled for removal once kernel version 2.6 (or equivalent) is released. This document is in the public domain. The author requests, however, that semantically altered versions are not distributed without permission of the author, assuming the author can be contacted without an unreasonable effort. In particular, please don't sent patches for this list to Linus, at least not without contacting me first. I do not have any information about these devices beyond what appears on this list. Any such information requests will be deleted without reply. **** DEVICE DRIVERS AUTHORS PLEASE READ THIS **** To have a major number allocated, or a minor number in situations where that applies (e.g. busmice), please contact me with the appropriate device information. Also, if you have additional information regarding any of the devices listed below, or if I have made a mistake, I would greatly appreciate a note. I do, however, make a few requests about the nature of your report. This is necessary for me to be able to keep this list up to date and correct in a timely manner. First of all, *please* send it to the correct address... . I receive hundreds of email messages a day, so mail sent to other addresses may very well get lost in the avalanche. Please put in a descriptive subject, so I can find your mail again should I need to. Too many people send me email saying just "device number request" in the subject. Second, please include a description of the device *in the same format as this list*. The reason for this is that it is the only way I have found to ensure I have all the requisite information to publish your device and avoid conflicts. Third, please don't assume that the distributed version of the list is up to date. Due to the number of registrations I have to maintain it in "batch mode", so there is likely additional registrations that haven't been listed yet. Finally, sometimes I have to play "namespace police." Please don't be offended. I often get submissions for /dev names that would be bound to cause conflicts down the road. I am trying to avoid getting in a situation where we would have to suffer an incompatible forward change. Therefore, please consult with me *before* you make your device names and numbers in any way public, at least to the point where it would be at all difficult to get them changed. Your cooperation is appreciated. 0 Unnamed devices (e.g. non-device mounts) 0 = reserved as null device number 1 char Memory devices 1 = /dev/mem Physical memory access 2 = /dev/kmem Kernel virtual memory access 3 = /dev/null Null device 4 = /dev/port I/O port access 5 = /dev/zero Null byte source 6 = /dev/core OBSOLETE - replaced by /proc/kcore 7 = /dev/full Returns ENOSPC on write 8 = /dev/random Nondeterministic random number gen. 9 = /dev/urandom Faster, less secure random number gen. 10 = /dev/aio Asyncronous I/O notification interface block RAM disk 0 = /dev/ram0 First RAM disk 1 = /dev/ram1 Second RAM disk ... 250 = /dev/initrd Initial RAM disk {2.6} Older kernels had /dev/ramdisk (1, 1) here. /dev/initrd refers to a RAM disk which was preloaded by the boot loader; newer kernels use /dev/ram0 for the initrd. 2 char Pseudo-TTY masters 0 = /dev/ptyp0 First PTY master 1 = /dev/ptyp1 Second PTY master ... 255 = /dev/ptyef 256th PTY master Pseudo-tty's are named as follows: * Masters are "pty", slaves are "tty"; * the fourth letter is one of pqrstuvwxyzabcde indicating the 1st through 16th series of 16 pseudo-ttys each, and * the fifth letter is one of 0123456789abcdef indicating the position within the series. These are the old-style (BSD) PTY devices; Unix98 devices are on major 128 and above and use the PTY master multiplex (/dev/ptmx) to acquire a PTY on demand. block Floppy disks 0 = /dev/fd0 Controller 0, drive 0, autodetect 1 = /dev/fd1 Controller 0, drive 1, autodetect 2 = /dev/fd2 Controller 0, drive 2, autodetect 3 = /dev/fd3 Controller 0, drive 3, autodetect 128 = /dev/fd4 Controller 1, drive 0, autodetect 129 = /dev/fd5 Controller 1, drive 1, autodetect 130 = /dev/fd6 Controller 1, drive 2, autodetect 131 = /dev/fd7 Controller 1, drive 3, autodetect To specify format, add to the autodetect device number: 0 = /dev/fd? Autodetect format 4 = /dev/fd?d360 5.25" 360K in a 360K drive(1) 20 = /dev/fd?h360 5.25" 360K in a 1200K drive(1) 48 = /dev/fd?h410 5.25" 410K in a 1200K drive 64 = /dev/fd?h420 5.25" 420K in a 1200K drive 24 = /dev/fd?h720 5.25" 720K in a 1200K drive 80 = /dev/fd?h880 5.25" 880K in a 1200K drive(1) 8 = /dev/fd?h1200 5.25" 1200K in a 1200K drive(1) 40 = /dev/fd?h1440 5.25" 1440K in a 1200K drive(1) 56 = /dev/fd?h1476 5.25" 1476K in a 1200K drive 72 = /dev/fd?h1494 5.25" 1494K in a 1200K drive 92 = /dev/fd?h1600 5.25" 1600K in a 1200K drive(1) 12 = /dev/fd?u360 3.5" 360K Double Density(2) 16 = /dev/fd?u720 3.5" 720K Double Density(1) 120 = /dev/fd?u800 3.5" 800K Double Density(2) 52 = /dev/fd?u820 3.5" 820K Double Density 68 = /dev/fd?u830 3.5" 830K Double Density 84 = /dev/fd?u1040 3.5" 1040K Double Density(1) 88 = /dev/fd?u1120 3.5" 1120K Double Density(1) 28 = /dev/fd?u1440 3.5" 1440K High Density(1) 124 = /dev/fd?u1600 3.5" 1600K High Density(1) 44 = /dev/fd?u1680 3.5" 1680K High Density(3) 60 = /dev/fd?u1722 3.5" 1722K High Density 76 = /dev/fd?u1743 3.5" 1743K High Density 96 = /dev/fd?u1760 3.5" 1760K High Density 116 = /dev/fd?u1840 3.5" 1840K High Density(3) 100 = /dev/fd?u1920 3.5" 1920K High Density(1) 32 = /dev/fd?u2880 3.5" 2880K Extra Density(1) 104 = /dev/fd?u3200 3.5" 3200K Extra Density 108 = /dev/fd?u3520 3.5" 3520K Extra Density 112 = /dev/fd?u3840 3.5" 3840K Extra Density(1) 36 = /dev/fd?CompaQ Compaq 2880K drive; obsolete? (1) Autodetectable format (2) Autodetectable format in a Double Density (720K) drive only (3) Autodetectable format in a High Density (1440K) drive only NOTE: The letter in the device name (d, q, h or u) signifies the type of drive: 5.25" Double Density (d), 5.25" Quad Density (q), 5.25" High Density (h) or 3.5" (any model, u). The use of the capital letters D, H and E for the 3.5" models have been deprecated, since the drive type is insignificant for these devices. 3 char Pseudo-TTY slaves 0 = /dev/ttyp0 First PTY slave 1 = /dev/ttyp1 Second PTY slave ... 255 = /dev/ttyef 256th PTY slave These are the old-style (BSD) PTY devices; Unix98 devices are on major 136 and above. block First MFM, RLL and IDE hard disk/CD-ROM interface 0 = /dev/hda Master: whole disk (or CD-ROM) 64 = /dev/hdb Slave: whole disk (or CD-ROM) For partitions, add to the whole disk device number: 0 = /dev/hd? Whole disk 1 = /dev/hd?1 First partition 2 = /dev/hd?2 Second partition ... 63 = /dev/hd?63 63rd partition For Linux/i386, partitions 1-4 are the primary partitions, and 5 and above are logical partitions. Other versions of Linux use partitioning schemes appropriate to their respective architectures. 4 char TTY devices 0 = /dev/tty0 Current virtual console 1 = /dev/tty1 First virtual console ... 63 = /dev/tty63 63rd virtual console 64 = /dev/ttyS0 First UART serial port ... 255 = /dev/ttyS191 192nd UART serial port UART serial ports refer to 8250/16450/16550 series devices. Older versions of the Linux kernel used this major number for BSD PTY devices. As of Linux 2.1.115, this is no longer supported. Use major numbers 2 and 3. 5 char Alternate TTY devices 0 = /dev/tty Current TTY device 1 = /dev/console System console 2 = /dev/ptmx PTY master multiplex 64 = /dev/cua0 Callout device for ttyS0 ... 255 = /dev/cua191 Callout device for ttyS191 (5,1) is /dev/console starting with Linux 2.1.71. See the section on terminal devices for more information on /dev/console. 6 char Parallel printer devices 0 = /dev/lp0 Parallel printer on parport0 1 = /dev/lp1 Parallel printer on parport1 ... Current Linux kernels no longer have a fixed mapping between parallel ports and I/O addresses. Instead, they are redirected through the parport multiplex layer. 7 char Virtual console capture devices 0 = /dev/vcs Current vc text contents 1 = /dev/vcs1 tty1 text contents ... 63 = /dev/vcs63 tty63 text contents 128 = /dev/vcsa Current vc text/attribute contents 129 = /dev/vcsa1 tty1 text/attribute contents ... 191 = /dev/vcsa63 tty63 text/attribute contents NOTE: These devices permit both read and write access. block Loopback devices 0 = /dev/loop0 First loopback device 1 = /dev/loop1 Second loopback device ... The loopback devices are used to mount filesystems not associated with block devices. The binding to the loopback devices is handled by mount(8) or losetup(8). 8 block SCSI disk devices (0-15) 0 = /dev/sda First SCSI disk whole disk 16 = /dev/sdb Second SCSI disk whole disk 32 = /dev/sdc Third SCSI disk whole disk ... 240 = /dev/sdp Sixteenth SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 9 char SCSI tape devices 0 = /dev/st0 First SCSI tape, mode 0 1 = /dev/st1 Second SCSI tape, mode 0 ... 32 = /dev/st0l First SCSI tape, mode 1 33 = /dev/st1l Second SCSI tape, mode 1 ... 64 = /dev/st0m First SCSI tape, mode 2 65 = /dev/st1m Second SCSI tape, mode 2 ... 96 = /dev/st0a First SCSI tape, mode 3 97 = /dev/st1a Second SCSI tape, mode 3 ... 128 = /dev/nst0 First SCSI tape, mode 0, no rewind 129 = /dev/nst1 Second SCSI tape, mode 0, no rewind ... 160 = /dev/nst0l First SCSI tape, mode 1, no rewind 161 = /dev/nst1l Second SCSI tape, mode 1, no rewind ... 192 = /dev/nst0m First SCSI tape, mode 2, no rewind 193 = /dev/nst1m Second SCSI tape, mode 2, no rewind ... 224 = /dev/nst0a First SCSI tape, mode 3, no rewind 225 = /dev/nst1a Second SCSI tape, mode 3, no rewind ... "No rewind" refers to the omission of the default automatic rewind on device close. The MTREW or MTOFFL ioctl()'s can be used to rewind the tape regardless of the device used to access it. block Metadisk (RAID) devices 0 = /dev/md0 First metadisk group 1 = /dev/md1 Second metadisk group ... The metadisk driver is used to span a filesystem across multiple physical disks. 10 char Non-serial mice, misc features 0 = /dev/logibm Logitech bus mouse 1 = /dev/psaux PS/2-style mouse port 2 = /dev/inportbm Microsoft Inport bus mouse 3 = /dev/atibm ATI XL bus mouse 4 = /dev/jbm J-mouse 4 = /dev/amigamouse Amiga mouse (68k/Amiga) 5 = /dev/atarimouse Atari mouse 6 = /dev/sunmouse Sun mouse 7 = /dev/amigamouse1 Second Amiga mouse 8 = /dev/smouse Simple serial mouse driver 9 = /dev/pc110pad IBM PC-110 digitizer pad 10 = /dev/adbmouse Apple Desktop Bus mouse 11 = /dev/vrtpanel Vr41xx embedded touch panel 13 = /dev/vpcmouse Connectix Virtual PC Mouse 14 = /dev/touchscreen/ucb1x00 UCB 1x00 touchscreen 15 = /dev/touchscreen/mk712 MK712 touchscreen 128 = /dev/beep Fancy beep device 129 = /dev/modreq Kernel module load request {2.6} 130 = /dev/watchdog Watchdog timer port 131 = /dev/temperature Machine internal temperature 132 = /dev/hwtrap Hardware fault trap 133 = /dev/exttrp External device trap 134 = /dev/apm_bios Advanced Power Management BIOS 135 = /dev/rtc Real Time Clock 139 = /dev/openprom SPARC OpenBoot PROM 140 = /dev/relay8 Berkshire Products Octal relay card 141 = /dev/relay16 Berkshire Products ISO-16 relay card 142 = /dev/msr x86 model-specific registers {2.6} 143 = /dev/pciconf PCI configuration space 144 = /dev/nvram Non-volatile configuration RAM 145 = /dev/hfmodem Soundcard shortwave modem control {2.6} 146 = /dev/graphics Linux/SGI graphics device 147 = /dev/opengl Linux/SGI OpenGL pipe 148 = /dev/gfx Linux/SGI graphics effects device 149 = /dev/input/mouse Linux/SGI Irix emulation mouse 150 = /dev/input/keyboard Linux/SGI Irix emulation keyboard 151 = /dev/led Front panel LEDs 153 = /dev/mergemem Memory merge device 154 = /dev/pmu Macintosh PowerBook power manager 155 = /dev/isictl MultiTech ISICom serial control 156 = /dev/lcd Front panel LCD display 157 = /dev/ac Applicom Intl Profibus card 158 = /dev/nwbutton Netwinder external button 159 = /dev/nwdebug Netwinder debug interface 160 = /dev/nwflash Netwinder flash memory 161 = /dev/userdma User-space DMA access 162 = /dev/smbus System Management Bus 163 = /dev/lik Logitech Internet Keyboard 164 = /dev/ipmo Intel Intelligent Platform Management 165 = /dev/vmmon VMWare virtual machine monitor 166 = /dev/i2o/ctl I2O configuration manager 167 = /dev/specialix_sxctl Specialix serial control 168 = /dev/tcldrv Technology Concepts serial control 169 = /dev/specialix_rioctl Specialix RIO serial control 170 = /dev/smapi IBM Thinkpad SMAPI 171 = /dev/srripc QNX4 API IPC manager 172 = /dev/usemaclone Semaphore clone device 173 = /dev/ipmikcs Intelligent Platform Management 174 = /dev/uctrl SPARCbook 3 microcontroller 175 = /dev/agpgart AGP Graphics Address Remapping Table 176 = /dev/gtrsc Gorgy Timing radio clock 177 = /dev/cbm Serial CBM bus 178 = /dev/jsflash JavaStation OS flash SIMM 179 = /dev/xsvc High-speed shared-mem/semaphore service 180 = /dev/vrbuttons Vr41xx button input device 181 = /dev/toshiba Toshiba laptop SMM support 182 = /dev/perfctr Performance-monitoring counters 183 = /dev/intel_rng Intel i8x0 random number generator 184 = /dev/cpu/microcode CPU microcode update interface 186 = /dev/atomicps Atomic shapshot of process state data 187 = /dev/irnet IrNET device 188 = /dev/smbusbios SMBus BIOS 189 = /dev/ussp_ctl User space serial port control 190 = /dev/crash Mission Critical Linux crash dump facility 191 = /dev/pcl181 192 = /dev/nas_xbus NAS xbus LCD/buttons access 193 = /dev/d7s SPARC 7-segment display 194 = /dev/zkshim Zero-Knowledge network shim control 195 = /dev/elographics/e2201 Elographics touchscreen E271-2201 198 = /dev/sexec Signed executable interface 199 = /dev/scanners/cuecat :CueCat barcode scanner 200 = /dev/net/tun TAP/TUN network device 201 = /dev/button/gulpb Transmeta GULP-B buttons 204 = /dev/video/em8300 EM8300 DVD decoder control 205 = /dev/video/em8300_mv EM8300 DVD decoder video 206 = /dev/video/em8300_ma EM8300 DVD decoder audio 207 = /dev/video/em8300_sp EM8300 DVD decoder subpicture 208 = /dev/compaq/cpqphpc Compaq PCI Hot Plug Controller 209 = /dev/compaq/cpqrid Compaq Remote Insight Driver 240-255 Reserved for local use 11 char Raw keyboard device 0 = /dev/kbd Raw keyboard device The raw keyboard device is used on Linux/SPARC only. block SCSI CD-ROM devices 0 = /dev/sr0 First SCSI CD-ROM 1 = /dev/sr1 Second SCSI CD-ROM ... The prefix /dev/scd instead of /dev/sr has been used as well, and might make more sense. 12 char QIC-02 tape 2 = /dev/ntpqic11 QIC-11, no rewind-on-close 3 = /dev/tpqic11 QIC-11, rewind-on-close 4 = /dev/ntpqic24 QIC-24, no rewind-on-close 5 = /dev/tpqic24 QIC-24, rewind-on-close 6 = /dev/ntpqic120 QIC-120, no rewind-on-close 7 = /dev/tpqic120 QIC-120, rewind-on-close 8 = /dev/ntpqic150 QIC-150, no rewind-on-close 9 = /dev/tpqic150 QIC-150, rewind-on-close The device names specified are proposed -- if there are "standard" names for these devices, please let me know. block MSCDEX CD-ROM callback support {2.6} 0 = /dev/dos_cd0 First MSCDEX CD-ROM 1 = /dev/dos_cd1 Second MSCDEX CD-ROM ... 13 char PC speaker (OBSOLETE) 0 = /dev/pcmixer Emulates /dev/mixer 1 = /dev/pcsp Emulates /dev/dsp (8-bit) 4 = /dev/pcaudio Emulates /dev/audio 5 = /dev/pcsp16 Emulates /dev/dsp (16-bit) The current PC speaker driver uses the Open Sound System interface, and these devices are obsolete. block 8-bit MFM/RLL/IDE controller 0 = /dev/xda First XT disk whole disk 64 = /dev/xdb Second XT disk whole disk Partitions are handled in the same way as IDE disks (see major number 3). 14 char Open Sound System (OSS) 0 = /dev/mixer Mixer control 1 = /dev/sequencer Audio sequencer 2 = /dev/midi00 First MIDI port 3 = /dev/dsp Digital audio 4 = /dev/audio Sun-compatible digital audio 6 = /dev/sndstat Sound card status information {2.6} 7 = /dev/audioctl SPARC audio control device 8 = /dev/sequencer2 Sequencer -- alternate device 16 = /dev/mixer1 Second soundcard mixer control 17 = /dev/patmgr0 Sequencer patch manager 18 = /dev/midi01 Second MIDI port 19 = /dev/dsp1 Second soundcard digital audio 20 = /dev/audio1 Second soundcard Sun digital audio 33 = /dev/patmgr1 Sequencer patch manager 34 = /dev/midi02 Third MIDI port 50 = /dev/midi03 Fourth MIDI port block BIOS harddrive callback support {2.6} 0 = /dev/dos_hda First BIOS harddrive whole disk 64 = /dev/dos_hdb Second BIOS harddrive whole disk 128 = /dev/dos_hdc Third BIOS harddrive whole disk 192 = /dev/dos_hdd Fourth BIOS harddrive whole disk Partitions are handled in the same way as IDE disks (see major number 3). 15 char Joystick 0 = /dev/js0 First analog joystick 1 = /dev/js1 Second analog joystick ... 128 = /dev/djs0 First digital joystick 129 = /dev/djs1 Second digital joystick ... block Sony CDU-31A/CDU-33A CD-ROM 0 = /dev/sonycd Sony CDU-31a CD-ROM 16 char Non-SCSI scanners 0 = /dev/gs4500 Genius 4500 handheld scanner block GoldStar CD-ROM 0 = /dev/gscd GoldStar CD-ROM 17 char Chase serial card 0 = /dev/ttyH0 First Chase port 1 = /dev/ttyH1 Second Chase port ... block Optics Storage CD-ROM 0 = /dev/optcd Optics Storage CD-ROM 18 char Chase serial card - alternate devices 0 = /dev/cuh0 Callout device for ttyH0 1 = /dev/cuh1 Callout device for ttyH1 ... block Sanyo CD-ROM 0 = /dev/sjcd Sanyo CD-ROM 19 char Cyclades serial card 0 = /dev/ttyC0 First Cyclades port ... 31 = /dev/ttyC31 32nd Cyclades port block "Double" compressed disk 0 = /dev/double0 First compressed disk ... 7 = /dev/double7 Eighth compressed disk 128 = /dev/cdouble0 Mirror of first compressed disk ... 135 = /dev/cdouble7 Mirror of eighth compressed disk See the Double documentation for the meaning of the mirror devices. 20 char Cyclades serial card - alternate devices 0 = /dev/cub0 Callout device for ttyC0 ... 31 = /dev/cub31 Callout device for ttyC31 block Hitachi CD-ROM (under development) 0 = /dev/hitcd Hitachi CD-ROM 21 char Generic SCSI access 0 = /dev/sg0 First generic SCSI device 1 = /dev/sg1 Second generic SCSI device ... Most distributions name these /dev/sga, /dev/sgb...; this sets an unnecessary limit of 26 SCSI devices in the system and is counter to standard Linux device-naming practice. block Acorn MFM hard drive interface 0 = /dev/mfma First MFM drive whole disk 64 = /dev/mfmb Second MFM drive whole disk This device is used on the ARM-based Acorn RiscPC. Partitions are handled the same way as for IDE disks (see major number 3). 22 char Digiboard serial card 0 = /dev/ttyD0 First Digiboard port 1 = /dev/ttyD1 Second Digiboard port ... block Second IDE hard disk/CD-ROM interface 0 = /dev/hdc Master: whole disk (or CD-ROM) 64 = /dev/hdd Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 23 char Digiboard serial card - alternate devices 0 = /dev/cud0 Callout device for ttyD0 1 = /dev/cud1 Callout device for ttyD1 ... block Mitsumi proprietary CD-ROM 0 = /dev/mcd Mitsumi CD-ROM 24 char Stallion serial card 0 = /dev/ttyE0 Stallion port 0 card 0 1 = /dev/ttyE1 Stallion port 1 card 0 ... 64 = /dev/ttyE64 Stallion port 0 card 1 65 = /dev/ttyE65 Stallion port 1 card 1 ... 128 = /dev/ttyE128 Stallion port 0 card 2 129 = /dev/ttyE129 Stallion port 1 card 2 ... 192 = /dev/ttyE192 Stallion port 0 card 3 193 = /dev/ttyE193 Stallion port 1 card 3 ... block Sony CDU-535 CD-ROM 0 = /dev/cdu535 Sony CDU-535 CD-ROM 25 char Stallion serial card - alternate devices 0 = /dev/cue0 Callout device for ttyE0 1 = /dev/cue1 Callout device for ttyE1 ... 64 = /dev/cue64 Callout device for ttyE64 65 = /dev/cue65 Callout device for ttyE65 ... 128 = /dev/cue128 Callout device for ttyE128 129 = /dev/cue129 Callout device for ttyE129 ... 192 = /dev/cue192 Callout device for ttyE192 193 = /dev/cue193 Callout device for ttyE193 ... block First Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd0 Panasonic CD-ROM controller 0 unit 0 1 = /dev/sbpcd1 Panasonic CD-ROM controller 0 unit 1 2 = /dev/sbpcd2 Panasonic CD-ROM controller 0 unit 2 3 = /dev/sbpcd3 Panasonic CD-ROM controller 0 unit 3 26 char Quanta WinVision frame grabber {2.6} 0 = /dev/wvisfgrab Quanta WinVision frame grabber block Second Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd4 Panasonic CD-ROM controller 1 unit 0 1 = /dev/sbpcd5 Panasonic CD-ROM controller 1 unit 1 2 = /dev/sbpcd6 Panasonic CD-ROM controller 1 unit 2 3 = /dev/sbpcd7 Panasonic CD-ROM controller 1 unit 3 27 char QIC-117 tape 0 = /dev/qft0 Unit 0, rewind-on-close 1 = /dev/qft1 Unit 1, rewind-on-close 2 = /dev/qft2 Unit 2, rewind-on-close 3 = /dev/qft3 Unit 3, rewind-on-close 4 = /dev/nqft0 Unit 0, no rewind-on-close 5 = /dev/nqft1 Unit 1, no rewind-on-close 6 = /dev/nqft2 Unit 2, no rewind-on-close 7 = /dev/nqft3 Unit 3, no rewind-on-close 16 = /dev/zqft0 Unit 0, rewind-on-close, compression 17 = /dev/zqft1 Unit 1, rewind-on-close, compression 18 = /dev/zqft2 Unit 2, rewind-on-close, compression 19 = /dev/zqft3 Unit 3, rewind-on-close, compression 20 = /dev/nzqft0 Unit 0, no rewind-on-close, compression 21 = /dev/nzqft1 Unit 1, no rewind-on-close, compression 22 = /dev/nzqft2 Unit 2, no rewind-on-close, compression 23 = /dev/nzqft3 Unit 3, no rewind-on-close, compression 32 = /dev/rawqft0 Unit 0, rewind-on-close, no file marks 33 = /dev/rawqft1 Unit 1, rewind-on-close, no file marks 34 = /dev/rawqft2 Unit 2, rewind-on-close, no file marks 35 = /dev/rawqft3 Unit 3, rewind-on-close, no file marks 36 = /dev/nrawqft0 Unit 0, no rewind-on-close, no file marks 37 = /dev/nrawqft1 Unit 1, no rewind-on-close, no file marks 38 = /dev/nrawqft2 Unit 2, no rewind-on-close, no file marks 39 = /dev/nrawqft3 Unit 3, no rewind-on-close, no file marks block Third Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd8 Panasonic CD-ROM controller 2 unit 0 1 = /dev/sbpcd9 Panasonic CD-ROM controller 2 unit 1 2 = /dev/sbpcd10 Panasonic CD-ROM controller 2 unit 2 3 = /dev/sbpcd11 Panasonic CD-ROM controller 2 unit 3 28 char Stallion serial card - card programming 0 = /dev/staliomem0 First Stallion card I/O memory 1 = /dev/staliomem1 Second Stallion card I/O memory 2 = /dev/staliomem2 Third Stallion card I/O memory 3 = /dev/staliomem3 Fourth Stallion card I/O memory char Atari SLM ACSI laser printer (68k/Atari) 0 = /dev/slm0 First SLM laser printer 1 = /dev/slm1 Second SLM laser printer ... block Fourth Matsushita (Panasonic/SoundBlaster) CD-ROM 0 = /dev/sbpcd12 Panasonic CD-ROM controller 3 unit 0 1 = /dev/sbpcd13 Panasonic CD-ROM controller 3 unit 1 2 = /dev/sbpcd14 Panasonic CD-ROM controller 3 unit 2 3 = /dev/sbpcd15 Panasonic CD-ROM controller 3 unit 3 block ACSI disk (68k/Atari) 0 = /dev/ada First ACSI disk whole disk 16 = /dev/adb Second ACSI disk whole disk 32 = /dev/adc Third ACSI disk whole disk ... 240 = /dev/adp 16th ACSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15, like SCSI. 29 char Universal frame buffer 0 = /dev/fb0 First frame buffer 32 = /dev/fb1 Second frame buffer ... 224 = /dev/fb7 Eighth frame buffer All additional minor numbers are reserved. block Aztech/Orchid/Okano/Wearnes CD-ROM 0 = /dev/aztcd Aztech CD-ROM 30 char iBCS-2 compatibility devices 0 = /dev/socksys Socket access 1 = /dev/spx SVR3 local X interface 2 = /dev/inet/arp Network access 2 = /dev/inet/icmp Network access 2 = /dev/inet/ip Network access 2 = /dev/inet/udp Network access 2 = /dev/inet/tcp Network access Additionally, iBCS-2 requires /dev/nfsd to be a link to /dev/socksys, and /dev/X0R to be a link to /dev/null. block Philips LMS CM-205 CD-ROM 0 = /dev/cm205cd Philips LMS CM-205 CD-ROM /dev/lmscd is an older name for this device. This driver does not work with the CM-205MS CD-ROM. 31 char MPU-401 MIDI 0 = /dev/mpu401data MPU-401 data port 1 = /dev/mpu401stat MPU-401 status port block ROM/flash memory card 0 = /dev/rom0 First ROM card (rw) ... 7 = /dev/rom7 Eighth ROM card (rw) 8 = /dev/rrom0 First ROM card (ro) ... 15 = /dev/rrom7 Eighth ROM card (ro) 16 = /dev/flash0 First flash memory card (rw) ... 23 = /dev/flash7 Eighth flash memory card (rw) 24 = /dev/rflash0 First flash memory card (ro) ... 31 = /dev/rflash7 Eighth flash memory card (ro) The read-write (rw) devices support back-caching written data in RAM, as well as writing to flash RAM devices. The read-only devices (ro) support reading only. 32 char Specialix serial card 0 = /dev/ttyX0 First Specialix port 1 = /dev/ttyX1 Second Specialix port ... block Philips LMS CM-206 CD-ROM 0 = /dev/cm206cd Philips LMS CM-206 CD-ROM 33 char Specialix serial card - alternate devices 0 = /dev/cux0 Callout device for ttyX0 1 = /dev/cux1 Callout device for ttyX1 ... block Third IDE hard disk/CD-ROM interface 0 = /dev/hde Master: whole disk (or CD-ROM) 64 = /dev/hdf Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 34 char Z8530 HDLC driver 0 = /dev/scc0 First Z8530, first port 1 = /dev/scc1 First Z8530, second port 2 = /dev/scc2 Second Z8530, first port 3 = /dev/scc3 Second Z8530, second port ... In a previous version these devices were named /dev/sc1 for /dev/scc0, /dev/sc2 for /dev/scc1, and so on. block Fourth IDE hard disk/CD-ROM interface 0 = /dev/hdg Master: whole disk (or CD-ROM) 64 = /dev/hdh Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 35 char tclmidi MIDI driver 0 = /dev/midi0 First MIDI port, kernel timed 1 = /dev/midi1 Second MIDI port, kernel timed 2 = /dev/midi2 Third MIDI port, kernel timed 3 = /dev/midi3 Fourth MIDI port, kernel timed 64 = /dev/rmidi0 First MIDI port, untimed 65 = /dev/rmidi1 Second MIDI port, untimed 66 = /dev/rmidi2 Third MIDI port, untimed 67 = /dev/rmidi3 Fourth MIDI port, untimed 128 = /dev/smpte0 First MIDI port, SMPTE timed 129 = /dev/smpte1 Second MIDI port, SMPTE timed 130 = /dev/smpte2 Third MIDI port, SMPTE timed 131 = /dev/smpte3 Fourth MIDI port, SMPTE timed block Slow memory ramdisk 0 = /dev/slram Slow memory ramdisk 36 char Netlink support 0 = /dev/route Routing, device updates, kernel to user 1 = /dev/skip enSKIP security cache control 3 = /dec/fwmonitor Firewall packet copies 16 = /dev/tap0 First Ethertap device ... 31 = /dev/tap15 16th Ethertap device block MCA ESDI hard disk 0 = /dev/eda First ESDI disk whole disk 64 = /dev/edb Second ESDI disk whole disk ... Partitions are handled in the same way as IDE disks (see major number 3). 37 char IDE tape 0 = /dev/ht0 First IDE tape 1 = /dev/ht1 Second IDE tape ... 128 = /dev/nht0 First IDE tape, no rewind-on-close 129 = /dev/nht1 Second IDE tape, no rewind-on-close ... Currently, only one IDE tape drive is supported. block Zorro II ramdisk 0 = /dev/z2ram Zorro II ramdisk 38 char Myricom PCI Myrinet board 0 = /dev/mlanai0 First Myrinet board 1 = /dev/mlanai1 Second Myrinet board ... This device is used for status query, board control and "user level packet I/O." This board is also accessible as a standard networking "eth" device. block Reserved for Linux/AP+ 39 char ML-16P experimental I/O board 0 = /dev/ml16pa-a0 First card, first analog channel 1 = /dev/ml16pa-a1 First card, second analog channel ... 15 = /dev/ml16pa-a15 First card, 16th analog channel 16 = /dev/ml16pa-d First card, digital lines 17 = /dev/ml16pa-c0 First card, first counter/timer 18 = /dev/ml16pa-c1 First card, second counter/timer 19 = /dev/ml16pa-c2 First card, third counter/timer 32 = /dev/ml16pb-a0 Second card, first analog channel 33 = /dev/ml16pb-a1 Second card, second analog channel ... 47 = /dev/ml16pb-a15 Second card, 16th analog channel 48 = /dev/ml16pb-d Second card, digital lines 49 = /dev/ml16pb-c0 Second card, first counter/timer 50 = /dev/ml16pb-c1 Second card, second counter/timer 51 = /dev/ml16pb-c2 Second card, third counter/timer ... block Reserved for Linux/AP+ 40 char Matrox Meteor frame grabber {2.6} 0 = /dev/mmetfgrab Matrox Meteor frame grabber block Syquest EZ135 parallel port removable drive 0 = /dev/eza Parallel EZ135 drive, whole disk This device is obsolete and will be removed in a future version of Linux. It has been replaced with the parallel port IDE disk driver at major number 45. Partitions are handled in the same way as IDE disks (see major number 3). 41 char Yet Another Micro Monitor 0 = /dev/yamm Yet Another Micro Monitor block MicroSolutions BackPack parallel port CD-ROM 0 = /dev/bpcd BackPack CD-ROM This device is obsolete and will be removed in a future version of Linux. It has been replaced with the parallel port ATAPI CD-ROM driver at major number 46. 42 Demo/sample use This number is intended for use in sample code, as well as a general "example" device number. It should never be used for a device driver that is being distributed; either obtain an official number or use the local/experimental range. The sudden addition or removal of a driver with this number should not cause ill effects to the system (bugs excepted.) IN PARTICULAR, ANY DISTRIBUTION WHICH CONTAINS A DEVICE DRIVER USING MAJOR NUMBER 42 IS NONCOMPLIANT. 43 char isdn4linux virtual modem 0 = /dev/ttyI0 First virtual modem ... 63 = /dev/ttyI63 64th virtual modem block Network block devices 0 = /dev/nb0 First network block device 1 = /dev/nb1 Second network block device ... Network Block Device is somehow similar to loopback devices: If you read from it, it sends packet accross network asking server for data. If you write to it, it sends packet telling server to write. It could be used to mounting filesystems over the net, swapping over the net, implementing block device in userland etc. 44 char isdn4linux virtual modem - alternate devices 0 = /dev/cui0 Callout device for ttyI0 ... 63 = /dev/cui63 Callout device for ttyI63 block Flash Translatio Layer (FTL) filesystems 0 = /dev/ftla FTL on first Memory Technology Device 16 = /dev/ftlb FTL on second Memory Technology Device 32 = /dev/ftlc FTL on third Memory Technology Device ... 240 = /dev/ftlp FTL on 16th Memory Technology Device Partitions are handled in the same way as for IDE disks (see major number 3) expect that the partition limit is 15 rather than 63 per disk (same as SCSI.) 45 char isdn4linux ISDN BRI driver 0 = /dev/isdn0 First virtual B channel raw data ... 63 = /dev/isdn63 64th virtual B channel raw data 64 = /dev/isdnctrl0 First channel control/debug ... 127 = /dev/isdnctrl63 64th channel control/debug 128 = /dev/ippp0 First SyncPPP device ... 191 = /dev/ippp63 64th SyncPPP device 255 = /dev/isdninfo ISDN monitor interface block Parallel port IDE disk devices 0 = /dev/pda First parallel port IDE disk 16 = /dev/pdb Second parallel port IDE disk 32 = /dev/pdc Third parallel port IDE disk 48 = /dev/pdd Fourth parallel port IDE disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the partition limit is 15 rather than 63 per disk. 46 char Comtrol Rocketport serial card 0 = /dev/ttyR0 First Rocketport port 1 = /dev/ttyR1 Second Rocketport port ... block Parallel port ATAPI CD-ROM devices 0 = /dev/pcd0 First parallel port ATAPI CD-ROM 1 = /dev/pcd1 Second parallel port ATAPI CD-ROM 2 = /dev/pcd2 Third parallel port ATAPI CD-ROM 3 = /dev/pcd3 Fourth parallel port ATAPI CD-ROM 47 char Comtrol Rocketport serial card - alternate devices 0 = /dev/cur0 Callout device for ttyR0 1 = /dev/cur1 Callout device for ttyR1 ... block Parallel port ATAPI disk devices 0 = /dev/pf0 First parallel port ATAPI disk 1 = /dev/pf1 Second parallel port ATAPI disk 2 = /dev/pf2 Third parallel port ATAPI disk 3 = /dev/pf3 Fourth parallel port ATAPI disk This driver is intended for floppy disks and similar devices and hence does not support partitioning. 48 char SDL RISCom serial card 0 = /dev/ttyL0 First RISCom port 1 = /dev/ttyL1 Second RISCom port ... block Mylex DAC960 PCI RAID controller; first controller 0 = /dev/rd/c0d0 First disk, whole disk 8 = /dev/rd/c0d1 Second disk, whole disk ... 248 = /dev/rd/c0d15 16th disk, whole disk For partitions add: 0 = /dev/rd/c?d? Whole disk 1 = /dev/rd/c?d?p1 First partition ... 7 = /dev/rd/c?d?p7 Seventh partition 49 char SDL RISCom serial card - alternate devices 0 = /dev/cul0 Callout device for ttyL0 1 = /dev/cul1 Callout device for ttyL1 ... block Mylex DAC960 PCI RAID controller; second controller 0 = /dev/rd/c1d0 First disk, whole disk 8 = /dev/rd/c1d1 Second disk, whole disk ... 248 = /dev/rd/c1d15 16th disk, whole disk Partitions are handled as for major 48. 50 char Reserved for GLINT block Mylex DAC960 PCI RAID controller; third controller 0 = /dev/rd/c2d0 First disk, whole disk 8 = /dev/rd/c2d1 Second disk, whole disk ... 248 = /dev/rd/c2d15 16th disk, whole disk 51 char Baycom radio modem 0 = /dev/bc0 First Baycom radio modem 1 = /dev/bc1 Second Baycom radio modem ... block Mylex DAC960 PCI RAID controller; fourth controller 0 = /dev/rd/c3d0 First disk, whole disk 8 = /dev/rd/c3d1 Second disk, whole disk ... 248 = /dev/rd/c3d15 16th disk, whole disk Partitions are handled as for major 48. 52 char Spellcaster DataComm/BRI ISDN card 0 = /dev/dcbri0 First DataComm card 1 = /dev/dcbri1 Second DataComm card 2 = /dev/dcbri2 Third DataComm card 3 = /dev/dcbri3 Fourth DataComm card block Mylex DAC960 PCI RAID controller; fifth controller 0 = /dev/rd/c4d0 First disk, whole disk 8 = /dev/rd/c4d1 Second disk, whole disk ... 248 = /dev/rd/c4d15 16th disk, whole disk Partitions are handled as for major 48. 53 char BDM interface for remote debugging MC683xx microcontrollers 0 = /dev/pd_bdm0 PD BDM interface on lp0 1 = /dev/pd_bdm1 PD BDM interface on lp1 2 = /dev/pd_bdm2 PD BDM interface on lp2 4 = /dev/icd_bdm0 ICD BDM interface on lp0 5 = /dev/icd_bdm1 ICD BDM interface on lp1 6 = /dev/icd_bdm2 ICD BDM interface on lp2 This device is used for the interfacing to the MC683xx microcontrollers via Background Debug Mode by use of a Parallel Port interface. PD is the Motorola Public Domain Interface and ICD is the commercial interface by P&E. block Mylex DAC960 PCI RAID controller; sixth controller 0 = /dev/rd/c5d0 First disk, whole disk 8 = /dev/rd/c5d1 Second disk, whole disk ... 248 = /dev/rd/c5d15 16th disk, whole disk Partitions are handled as for major 48. 54 char Electrocardiognosis Holter serial card 0 = /dev/holter0 First Holter port 1 = /dev/holter1 Second Holter port 2 = /dev/holter2 Third Holter port A custom serial card used by Electrocardiognosis SRL to transfer data from Holter 24-hour heart monitoring equipment. block Mylex DAC960 PCI RAID controller; seventh controller 0 = /dev/rd/c6d0 First disk, whole disk 8 = /dev/rd/c6d1 Second disk, whole disk ... 248 = /dev/rd/c6d15 16th disk, whole disk Partitions are handled as for major 48. 55 char DSP56001 digital signal processor 0 = /dev/dsp56k First DSP56001 block Mylex DAC960 PCI RAID controller; eigth controller 0 = /dev/rd/c7d0 First disk, whole disk 8 = /dev/rd/c7d1 Second disk, whole disk ... 248 = /dev/rd/c7d15 16th disk, whole disk Partitions are handled as for major 48. 56 char Apple Desktop Bus 0 = /dev/adb ADB bus control Additional devices will be added to this number, all starting with /dev/adb. block Fifth IDE hard disk/CD-ROM interface 0 = /dev/hdi Master: whole disk (or CD-ROM) 64 = /dev/hdj Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 57 char Hayes ESP serial card 0 = /dev/ttyP0 First ESP port 1 = /dev/ttyP1 Second ESP port ... block Sixth IDE hard disk/CD-ROM interface 0 = /dev/hdk Master: whole disk (or CD-ROM) 64 = /dev/hdl Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 58 char Hayes ESP serial card - alternate devices 0 = /dev/cup0 Callout device for ttyP0 1 = /dev/cup1 Callout device for ttyP1 ... block Reserved for logical volume manager 59 char sf firewall package 0 = /dev/firewall Communication with sf kernel module block Generic PDA filesystem device 0 = /dev/pda0 First PDA device 1 = /dev/pda1 Second PDA device ... The pda devices are used to mount filesystems on remote pda's (basically slow handheld machines with proprietary OS's and limited memory and storage running small fs translation drivers) through serial / IRDA / parallel links. NAMING CONFLICT -- PROPOSED REVISED NAME /dev/rpda0 etc 60-63 LOCAL/EXPERIMENTAL USE Allocated for local/experimental use. For devices not assigned official numbers, these ranges should be used, in order to avoid conflicting with future assignments. 64 char ENskip kernel encryption package 0 = /dev/enskip Communication with ENskip kernel module 65 char Sundance "plink" Transputer boards 0 = /dev/plink0 First plink device 1 = /dev/plink1 Second plink device 2 = /dev/plink2 Third plink device 3 = /dev/plink3 Fourth plink device 64 = /dev/rplink0 First plink device, raw 65 = /dev/rplink1 Second plink device, raw 66 = /dev/rplink2 Third plink device, raw 67 = /dev/rplink3 Fourth plink device, raw 128 = /dev/plink0d First plink device, debug 129 = /dev/plink1d Second plink device, debug 130 = /dev/plink2d Third plink device, debug 131 = /dev/plink3d Fourth plink device, debug 192 = /dev/rplink0d First plink device, raw, debug 193 = /dev/rplink1d Second plink device, raw, debug 194 = /dev/rplink2d Third plink device, raw, debug 195 = /dev/rplink3d Fourth plink device, raw, debug This is a commercial driver; contact James Howes for information. block SCSI disk devices (16-31) 0 = /dev/sdq 16th SCSI disk whole disk 16 = /dev/sdr 17th SCSI disk whole disk 32 = /dev/sds 18th SCSI disk whole disk ... 240 = /dev/sdaf 32nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 66 char YARC PowerPC PCI coprocessor card 0 = /dev/yppcpci0 First YARC card 1 = /dev/yppcpci1 Second YARC card ... block SCSI disk devices (32-47) 0 = /dev/sdag 33th SCSI disk whole disk 16 = /dev/sdah 34th SCSI disk whole disk 32 = /dev/sdai 35th SCSI disk whole disk ... 240 = /dev/sdav 48nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 67 char Coda network file system 0 = /dev/cfs0 Coda cache manager See http://www.coda.cs.cmu.edu for information about Coda. block SCSI disk devices (48-63) 0 = /dev/sdaw 49th SCSI disk whole disk 16 = /dev/sdax 50th SCSI disk whole disk 32 = /dev/sday 51st SCSI disk whole disk ... 240 = /dev/sdbl 64th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 68 char CAPI 2.0 interface 0 = /dev/capi20 Control device 1 = /dev/capi20.00 First CAPI 2.0 application 2 = /dev/capi20.01 Second CAPI 2.0 application ... 20 = /dev/capi20.19 19th CAPI 2.0 application ISDN CAPI 2.0 driver for use with CAPI 2.0 applications; currently supports the AVM B1 card. block SCSI disk devices (64-79) 0 = /dev/sdbm 64th SCSI disk whole disk 16 = /dev/sdbn 65th SCSI disk whole disk 32 = /dev/sdbo 66th SCSI disk whole disk ... 240 = /dev/sdcb 80th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 69 char MA16 numeric accelerator card 0 = /dev/ma16 Board memory access block SCSI disk devices (80-95) 0 = /dev/sdcc 81st SCSI disk whole disk 16 = /dev/sdcd 82nd SCSI disk whole disk 32 = /dev/sdce 83th SCSI disk whole disk ... 240 = /dev/sdcr 96th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 70 char SpellCaster Protocol Services Interface 0 = /dev/apscfg Configuration interface 1 = /dev/apsauth Authentication interface 2 = /dev/apslog Logging interface 3 = /dev/apsdbg Debugging interface 64 = /dev/apsisdn ISDN command interface 65 = /dev/apsasync Async command interface 128 = /dev/apsmon Monitor interface block SCSI disk devices (96-111) 0 = /dev/sdcs 97th SCSI disk whole disk 16 = /dev/sdct 98th SCSI disk whole disk 32 = /dev/sdcu 99th SCSI disk whole disk ... 240 = /dev/sddh 112nd SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 71 char Computone IntelliPort II serial card 0 = /dev/ttyF0 IntelliPort II board 0, port 0 1 = /dev/ttyF1 IntelliPort II board 0, port 1 ... 63 = /dev/ttyF63 IntelliPort II board 0, port 63 64 = /dev/ttyF64 IntelliPort II board 1, port 0 65 = /dev/ttyF65 IntelliPort II board 1, port 1 ... 127 = /dev/ttyF127 IntelliPort II board 1, port 63 128 = /dev/ttyF128 IntelliPort II board 2, port 0 129 = /dev/ttyF129 IntelliPort II board 2, port 1 ... 191 = /dev/ttyF191 IntelliPort II board 2, port 63 192 = /dev/ttyF192 IntelliPort II board 3, port 0 193 = /dev/ttyF193 IntelliPort II board 3, port 1 ... 255 = /dev/ttyF255 IntelliPort II board 3, port 63 block SCSI disk devices (112-127) 0 = /dev/sddi 113th SCSI disk whole disk 16 = /dev/sddj 114th SCSI disk whole disk 32 = /dev/sddk 115th SCSI disk whole disk ... 240 = /dev/sddx 128th SCSI disk whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 72 char Computone IntelliPort II serial card - alternate devices 0 = /dev/cuf0 Callout device for ttyF0 1 = /dev/cuf1 Callout device for ttyF1 ... 63 = /dev/cuf63 Callout device for ttyF63 64 = /dev/cuf64 Callout device for ttyF64 65 = /dev/cuf65 Callout device for ttyF65 ... 127 = /dev/cuf127 Callout device for ttyF127 128 = /dev/cuf128 Callout device for ttyF128 129 = /dev/cuf129 Callout device for ttyF129 ... 191 = /dev/cuf191 Callout device for ttyF191 192 = /dev/cuf192 Callout device for ttyF192 193 = /dev/cuf193 Callout device for ttyF193 ... 255 = /dev/cuf255 Callout device for ttyF255 block Compaq Intelligent Drive Array, first controller 0 = /dev/ida/c0d0 First logical drive whole disk 16 = /dev/ida/c0d1 Second logical drive whole disk ... 240 = /dev/ida/c0d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 73 char Computone IntelliPort II serial card - control devices 0 = /dev/ip2ipl0 Loadware device for board 0 1 = /dev/ip2stat0 Status device for board 0 4 = /dev/ip2ipl1 Loadware device for board 1 5 = /dev/ip2stat1 Status device for board 1 8 = /dev/ip2ipl2 Loadware device for board 2 9 = /dev/ip2stat2 Status device for board 2 12 = /dev/ip2ipl3 Loadware device for board 3 13 = /dev/ip2stat3 Status device for board 3 block Compaq Intelligent Drive Array, second controller 0 = /dev/ida/c1d0 First logical drive whole disk 16 = /dev/ida/c1d1 Second logical drive whole disk ... 240 = /dev/ida/c1d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 74 char SCI bridge 0 = /dev/SCI/0 SCI device 0 1 = /dev/SCI/1 SCI device 1 ... Currently for Dolphin Interconnect Solutions' PCI-SCI bridge. block Compaq Intelligent Drive Array, third controller 0 = /dev/ida/c2d0 First logical drive whole disk 16 = /dev/ida/c2d1 Second logical drive whole disk ... 240 = /dev/ida/c2d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 75 char Specialix IO8+ serial card 0 = /dev/ttyW0 First IO8+ port, first card 1 = /dev/ttyW1 Second IO8+ port, first card ... 8 = /dev/ttyW8 First IO8+ port, second card ... block Compaq Intelligent Drive Array, fourth controller 0 = /dev/ida/c3d0 First logical drive whole disk 16 = /dev/ida/c3d1 Second logical drive whole disk ... 240 = /dev/ida/c3d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 76 char Specialix IO8+ serial card - alternate devices 0 = /dev/cuw0 Callout device for ttyW0 1 = /dev/cuw1 Callout device for ttyW1 ... 8 = /dev/cuw8 Callout device for ttyW8 ... block Compaq Intelligent Drive Array, fifth controller 0 = /dev/ida/c4d0 First logical drive whole disk 16 = /dev/ida/c4d1 Second logical drive whole disk ... 240 = /dev/ida/c4d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 77 char ComScire Quantum Noise Generator 0 = /dev/qng ComScire Quantum Noise Generator block Compaq Intelligent Drive Array, sixth controller 0 = /dev/ida/c5d0 First logical drive whole disk 16 = /dev/ida/c5d1 Second logical drive whole disk ... 240 = /dev/ida/c5d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 78 char PAM Software's multimodem boards 0 = /dev/ttyM0 First PAM modem 1 = /dev/ttyM1 Second PAM modem ... block Compaq Intelligent Drive Array, seventh controller 0 = /dev/ida/c6d0 First logical drive whole disk 16 = /dev/ida/c6d1 Second logical drive whole disk ... 240 = /dev/ida/c6d15 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 79 char PAM Software's multimodem boards - alternate devices 0 = /dev/cum0 Callout device for ttyM0 1 = /dev/cum1 Callout device for ttyM1 ... block Compaq Intelligent Drive Array, eigth controller 0 = /dev/ida/c7d0 First logical drive whole disk 16 = /dev/ida/c7d1 Second logical drive whole disk ... 240 = /dev/ida/c715 16th logical drive whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 80 char Photometrics AT200 CCD camera 0 = /dev/at200 Photometrics AT200 CCD camera block I2O hard disk 0 = /dev/i2o/hda First I2O hard disk, whole disk 16 = /dev/i2o/hdb Second I2O hard disk, whole disk ... 240 = /dev/i2o/hdp 16th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 81 char video4linux 0 = /dev/video0 Video capture/overlay device ... 63 = /dev/video63 Video capture/overlay device 64 = /dev/radio0 Radio device ... 127 = /dev/radio63 Radio device 192 = /dev/vtx0 Teletext device ... 223 = /dev/vtx31 Teletext device 224 = /dev/vbi0 Vertical blank interrupt ... 255 = /dev/vbi31 Vertical blank interrupt block I2O hard disk 0 = /dev/i2o/hdq 17th I2O hard disk, whole disk 16 = /dev/i2o/hdr 18th I2O hard disk, whole disk ... 240 = /dev/i2o/hdaf 32nd I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 82 char WiNRADiO communications receiver card 0 = /dev/winradio0 First WiNRADiO card 1 = /dev/winradio1 Second WiNRADiO card ... The driver and documentation may be obtained from http://www.proximity.com.au/~brian/winradio/ block I2O hard disk 0 = /dev/i2o/hdag 33rd I2O hard disk, whole disk 16 = /dev/i2o/hdah 34th I2O hard disk, whole disk ... 240 = /dev/i2o/hdav 48th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 83 char Teletext/videotext interfaces {2.6} 0 = /dev/vtx Teletext decoder 16 = /dev/vttuner TV tuner on teletext interface Devices for the driver contained in the VideoteXt package. More information on http://home.pages.de/~videotext/ block I2O hard disk 0 = /dev/i2o/hdaw 49th I2O hard disk, whole disk 16 = /dev/i2o/hdax 50th I2O hard disk, whole disk ... 240 = /dev/i2o/hdbl 64th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 84 char Ikon 1011[57] Versatec Greensheet Interface 0 = /dev/ihcp0 First Greensheet port 1 = /dev/ihcp1 Second Greensheet port block I2O hard disk 0 = /dev/i2o/hdbm 65th I2O hard disk, whole disk 16 = /dev/i2o/hdbn 66th I2O hard disk, whole disk ... 240 = /dev/i2o/hdcb 80th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 85 char Linux/SGI shared memory input queue 0 = /dev/shmiq Master shared input queue 1 = /dev/qcntl0 First device pushed 2 = /dev/qcntl1 Second device pushed ... block I2O hard disk 0 = /dev/i2o/hdcc 81st I2O hard disk, whole disk 16 = /dev/i2o/hdcd 82nd I2O hard disk, whole disk ... 240 = /dev/i2o/hdcr 96th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 86 char SCSI media changer 0 = /dev/sch0 First SCSI media changer 1 = /dev/sch1 Second SCSI media changer ... block I2O hard disk 0 = /dev/i2o/hdcs 97th I2O hard disk, whole disk 16 = /dev/i2o/hdct 98th I2O hard disk, whole disk ... 240 = /dev/i2o/hddh 112th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 87 char Sony Control-A1 stereo control bus 0 = /dev/controla0 First device on chain 1 = /dev/controla1 Second device on chain ... block I2O hard disk 0 = /dev/i2o/hddi 113rd I2O hard disk, whole disk 16 = /dev/i2o/hddj 114th I2O hard disk, whole disk ... 240 = /dev/i2o/hddx 128th I2O hard disk, whole disk Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 88 char COMX synchronous serial card 0 = /dev/comx0 COMX channel 0 1 = /dev/comx1 COMX channel 1 ... block Seventh IDE hard disk/CD-ROM interface 0 = /dev/hdm Master: whole disk (or CD-ROM) 64 = /dev/hdn Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 89 char I2C bus interface 0 = /dev/i2c-0 First I2C adapter 1 = /dev/i2c-1 Second I2C adapter ... block Eighth IDE hard disk/CD-ROM interface 0 = /dev/hdo Master: whole disk (or CD-ROM) 64 = /dev/hdp Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 90 char Memory Technology Device (RAM, ROM, Flash) 0 = /dev/mtd0 First MTD (rw) 1 = /dev/mtdr0 First MTD (ro) ... 30 = /dev/mtd15 16th MTD (rw) 31 = /dev/mtdr15 16th MTD (ro) block Ninth IDE hard disk/CD-ROM interface 0 = /dev/hdq Master: whole disk (or CD-ROM) 64 = /dev/hdr Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 91 char CAN-Bus devices 0 = /dev/can0 First CAN-Bus controller 1 = /dev/can1 Second CAN-Bus controller ... block Tenth IDE hard disk/CD-ROM interface 0 = /dev/hds Master: whole disk (or CD-ROM) 64 = /dev/hdt Slave: whole disk (or CD-ROM) Partitions are handled the same way as for the first interface (see major number 3). 92 char Reserved for ith Kommunikationstechnik MIC ISDN card block PPDD encrypted disk driver 0 = /dev/ppdd0 First encrypted disk 1 = /dev/ppdd1 Second encrypted disk ... Partitions are handled in the same way as for IDE disks (see major number 3) except that the limit on partitions is 15. 93 char IBM Smart Capture Card frame grabber {2.6} 0 = /dev/iscc0 First Smart Capture Card 1 = /dev/iscc1 Second Smart Capture Card ... 128 = /dev/isccctl0 First Smart Capture Card control 129 = /dev/isccctl1 Second Smart Capture Card control ... block NAND Flash Translation Layer filesystem 0 = /dev/nftla First NFTL layer 16 = /dev/nftlb Second NFTL layer ... 240 = /dev/nftlp 16th NTFL layer 94 char miroVIDEO DC10/30 capture/playback device {2.6} 0 = /dev/dcxx0 First capture card 1 = /dev/dcxx1 Second capture card ... 95 char IP filter 0 = /dev/ipl Filter control device/log file 1 = /dev/ipnat NAT control device/log file 2 = /dev/ipstate State information log file 3 = /dev/ipauth Authentication control device/log file block IBM S/390 DASD block storage 0 = /dev/dasd0 First DASD device, major 1 = /dev/dasd0a First DASD device, block 1 2 = /dev/dasd0b First DASD device, block 2 3 = /dev/dasd0c First DASD device, block 3 4 = /dev/dasd1 Second DASD device, major 5 = /dev/dasd1a Second DASD device, block 1 6 = /dev/dasd1b Second DASD device, block 2 7 = /dev/dasd1c Second DASD device, block 3 ... 96 char Parallel port ATAPI tape devices 0 = /dev/pt0 First parallel port ATAPI tape 1 = /dev/pt1 Second parallel port ATAPI tape ... 128 = /dev/npt0 First p.p. ATAPI tape, no rewind 129 = /dev/npt1 Second p.p. ATAPI tape, no rewind ... block IBM S/390 VM/ESA minidisk 0 = /dev/msd0 First VM/ESA minidisk 1 = /dev/msd1 Second VM/ESA minidisk ... 97 char Parallel port generic ATAPI interface 0 = /dev/pg0 First parallel port ATAPI device 1 = /dev/pg1 Second parallel port ATAPI device 2 = /dev/pg2 Third parallel port ATAPI device 3 = /dev/pg3 Fourth parallel port ATAPI device These devices support the same API as the generic SCSI devices. block Packet writing for CD/DVD devices 0 = /dev/pktcdvd0 First packet-writing module 1 = /dev/pktcdvd1 Second packet-writing module ... 98 char Control and Measurement Device (comedi) 0 = /dev/comedi0 First comedi device 1 = /dev/comedi1 Second comedi device ... See http://stm.lbl.gov/comedi or http://www.llp.fu-berlin.de/. block User-mode virtual block device 0 = /dev/ubd0 First user-mode block device 1 = /dev/ubd1 Second user-mode block device ... This device is used by the user-mode virtual kernel port. 99 char Raw parallel ports 0 = /dev/parport0 First parallel port 1 = /dev/parport1 Second parallel port ... block JavaStation flash disk 0 = /dev/jsfd JavaStation flash disk 100 char Telephony for Linux 0 = /dev/phone0 First telephony device 1 = /dev/phone1 Second telephony device ... 101 char Motorola DSP 56xxx board 0 = /dev/mdspstat Status information 1 = /dev/mdsp1 First DSP board I/O controls ... 16 = /dev/mdsp16 16th DSP board I/O controls block AMI HyperDisk RAID controller 0 = /dev/amiraid/ar0 First array whole disk 16 = /dev/amiraid/ar1 Second array whole disk ... 240 = /dev/amiraid/ar15 16th array whole disk For each device, partitions are added as: 0 = /dev/amiraid/ar? Whole disk 1 = /dev/amiraid/ar?p1 First partition 2 = /dev/amiraid/ar?p2 Second partition ... 15 = /dev/amiraid/ar?p15 15th partition 102 char Philips SAA5249 Teletext signal decoder {2.6} 0 = /dev/tlk0 First Teletext decoder 1 = /dev/tlk1 Second Teletext decoder 2 = /dev/tlk2 Third Teletext decoder 3 = /dev/tlk3 Fourth Teletext decoder 103 char Arla network file system 0 = /dev/xfs0 Arla XFS Arla is a free clone of the Andrew File System, AFS. Any resemblance with the Swedish milk producer is coincidental. For more information about the project, write to or subscribe to the arla announce mailing list by sending a mail to . block Audit device 0 = /dev/audit Audit device 104 char Flash BIOS support block Compaq Next Generation Drive Array, first controller 0 = /dev/cciss/c0d0 First logical drive, whole disk 16 = /dev/cciss/c0d1 Second logical drive, whole disk ... 240 = /dev/cciss/c0d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 105 char Comtrol VS-1000 serial controller 0 = /dev/ttyV0 First VS-1000 port 1 = /dev/ttyV1 Second VS-1000 port ... block Compaq Next Generation Drive Array, second controller 0 = /dev/cciss/c1d0 First logical drive, whole disk 16 = /dev/cciss/c1d1 Second logical drive, whole disk ... 240 = /dev/cciss/c1d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 106 char Comtrol VS-1000 serial controller - alternate devices 0 = /dev/cuv0 First VS-1000 port 1 = /dev/cuv1 Second VS-1000 port ... block Compaq Next Generation Drive Array, third controller 0 = /dev/cciss/c2d0 First logical drive, whole disk 16 = /dev/cciss/c2d1 Second logical drive, whole disk ... 240 = /dev/cciss/c2d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 107 char 3Dfx Voodoo Graphics device 0 = /dev/3dfx Primary 3Dfx graphics device block Compaq Next Generation Drive Array, fourth controller 0 = /dev/cciss/c3d0 First logical drive, whole disk 16 = /dev/cciss/c3d1 Second logical drive, whole disk ... 240 = /dev/cciss/c3d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 108 char Device independent PPP interface 0 = /dev/ppp Device independent PPP interface block Compaq Next Generation Drive Array, fifth controller 0 = /dev/cciss/c4d0 First logical drive, whole disk 16 = /dev/cciss/c4d1 Second logical drive, whole disk ... 240 = /dev/cciss/c4d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 109 char Reserved for logical volume manager block Compaq Next Generation Drive Array, sixth controller 0 = /dev/cciss/c5d0 First logical drive, whole disk 16 = /dev/cciss/c5d1 Second logical drive, whole disk ... 240 = /dev/cciss/c5d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 110 char miroMEDIA Surround board 0 = /dev/srnd0 First miroMEDIA Surround board 1 = /dev/srnd1 Second miroMEDIA Surround board ... block Compaq Next Generation Drive Array, seventh controller 0 = /dev/cciss/c6d0 First logical drive, whole disk 16 = /dev/cciss/c6d1 Second logical drive, whole disk ... 240 = /dev/cciss/c6d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 111 char Philips SAA7146-based audio/video card {2.6} 0 = /dev/av0 First A/V card 1 = /dev/av1 Second A/V card ... block Compaq Next Generation Drive Array, eigth controller 0 = /dev/cciss/c7d0 First logical drive, whole disk 16 = /dev/cciss/c7d1 Second logical drive, whole disk ... 240 = /dev/cciss/c7d15 16th logical drive, whole disk Partitions are handled the same way as for Mylex DAC960 (see major number 48) except that the limit on partitions is 15. 112 char ISI serial card 0 = /dev/ttyM0 First ISI port 1 = /dev/ttyM1 Second ISI port ... There is currently a device-naming conflict between these and PAM multimodems (major 78). 113 char ISI serial card - alternate devices 0 = /dev/cum0 Callout device for ttyM0 1 = /dev/cum1 Callout device for ttyM1 ... 114 char Picture Elements ISE board 0 = /dev/ise0 First ISE board 1 = /dev/ise1 Second ISE board ... 128 = /dev/isex0 Control node for first ISE board 129 = /dev/isex1 Control node for second ISE board ... The ISE board is an embedded computer, optimized for image processing. The /dev/iseN nodes are the general I/O access to the board, the /dev/isex0 nodes command nodes used to control the board. 115 char Console driver speaker 0 = /dev/speaker Speaker device file Plays music using IBM BASIC style strings. 116 char Advanced Linux Sound Driver (ALSA) 117 char COSA/SRP synchronous serial card 0 = /dev/cosa0c0 1st board, 1st channel 1 = /dev/cosa0c1 1st board, 2nd channel ... 16 = /dev/cosa1c0 2nd board, 1st channel 17 = /dev/cosa1c1 2nd board, 2nd channel ... 118 char Solidum ??? 0 = /dev/solnp0 1 = /dev/solnp1 ... 128 = /dev/solnpctl0 129 = /dev/solnpctl1 ... 119 char VMware virtual network control 0 = /dev/vnet0 1st virtual network 1 = /dev/vnet1 2nd virtual network ... 120-127 LOCAL/EXPERIMENTAL USE 128-135 char Unix98 PTY masters These devices should not have corresponding device nodes; instead they should be accessed through the /dev/ptmx cloning interface. 136-143 char Unix98 PTY slaves 0 = /dev/pts/0 First Unix98 pseudo-TTY 1 = /dev/pts/1 Second Unix98 pesudo-TTY ... These device nodes are automatically generated with the proper permissions and modes by mounting the devpts filesystem onto /dev/pts with the appropriate mount options (distribution dependent, however, on *most* distributions the appropriate options are "mode=0620,gid=".) 144 char Encapsulated PPP 0 = /dev/pppox0 First PPP over Ethernet ... 63 = /dev/pppox63 64th PPP over Ethernet This is primarily used for ADSL. The SST 5136-DN DeviceNet interface driver has been relocated to major 183 due to an unfortunate conflict. 145 char SAM9407-based soundcard 0 = /dev/sam0_mixer 1 = /dev/sam0_sequencer 2 = /dev/sam0_midi00 3 = /dev/sam0_dsp 4 = /dev/sam0_audio 6 = /dev/sam0_sndstat 18 = /dev/sam0_midi01 34 = /dev/sam0_midi02 50 = /dev/sam0_midi03 64 = /dev/sam1_mixer ... 128 = /dev/sam2_mixer ... 192 = /dev/sam3_mixer ... Device functions match OSS, but offer a number of addons, which are sam9407 specific. OSS can be operated simultaneously, taking care of the codec. 146 char SYSTRAM SCRAMNet mirrored-memory network 0 = /dev/scramnet0 First SCRAMNet device 1 = /dev/scramnet1 Second SCRAMNet device ... 147 char Aueral Semiconductor Vortex Audio device 0 = /dev/aureal0 First Aureal Vortex 1 = /dev/aureal1 Second Aureal Vortex ... 148 char Technology Concepts serial card 0 = /dev/ttyT0 First TCL port 1 = /dev/ttyT1 Second TCL port ... 149 char Technology Concepts serial card - alternate devices 0 = /dev/cut0 Callout device for ttyT0 1 = /dev/cut0 Callout device for ttyT1 ... 150 char Real-Time Linux FIFOs 0 = /dev/rtf0 First RTLinux FIFO 1 = /dev/rtf1 Second RTLinux FIFO ... 151 char DPT I2O SmartRaid V controller 0 = /dev/dpti0 First DPT I2O adapter 1 = /dev/dpti1 Second DPT I2O adapter ... 154 char Specialix RIO serial card 0 = /dev/ttySR0 First RIO port ... 255 = /dev/ttySR255 256th RIO port 155 char Specialix RIO serial card - alternate devices 0 = /dev/cusr0 Callout device for ttySR0 ... 255 = /dev/cusr255 Callout device for ttySR255 156 char Specialix RIO serial card 0 = /dev/ttySR256 257th RIO port ... 255 = /dev/ttySR511 512th RIO port 157 char Specialix RIO serial card - alternate devices 0 = /dev/cusr256 Callout device for ttySR256 ... 255 = /dev/cusr511 Callout device for ttySR511 158 char Dialogic GammaLink fax driver 0 = /dev/gfax0 GammaLink channel 0 1 = /dev/gfax1 GammaLink channel 1 ... 159 RESERVED 160 char General Purpose Instrument Bus (GPIB) 0 = /dev/gpib0 First GPIB bus 1 = /dev/gpib1 Second GPIB bus ... 161 char IrCOMM devices (IrDA serial/parallel emulation) 0 = /dev/ircomm0 First IrCOMM device 1 = /dev/ircomm1 Second IrCOMM device ... 16 = /dev/irlpt0 First IrLPT device 17 = /dev/irlpt1 Second IrLPT device ... 162 char Raw block device interface 0 = /dev/raw Raw I/O control device 1 = /dev/raw1 First raw I/O device 2 = /dev/raw2 Second raw I/O device ... 163 char Radio Tech BIM-XXX-RS232 radio modem 0 = /dev/bimrt0 First BIM radio modem 1 = /dev/bimrt1 Second BIM radio modem ... 164 char Chase Research AT/PCI-Fast serial card 0 = /dev/ttyCH0 AT/PCI-Fast board 0, port 0 ... 15 = /dev/ttyCH15 AT/PCI-Fast board 0, port 15 16 = /dev/ttyCH16 AT/PCI-Fast board 1, port 0 ... 31 = /dev/ttyCH31 AT/PCI-Fast board 1, port 15 32 = /dev/ttyCH32 AT/PCI-Fast board 2, port 0 ... 47 = /dev/ttyCH47 AT/PCI-Fast board 2, port 15 48 = /dev/ttyCH48 AT/PCI-Fast board 3, port 0 ... 63 = /dev/ttyCH63 AT/PCI-Fast board 3, port 15 165 char Chase Research AT/PCI-Fast serial card - alternate devices 0 = /dev/cuch0 Callout device for ttyCH0 ... 63 = /dev/cuch63 Callout device for ttyCH63 166 char ACM USB modems 0 = /dev/ttyACM0 First ACM modem 1 = /dev/ttyACM1 Second ACM modem ... 167 char ACM USB modems - alternate devices 0 = /dev/cuacm0 Callout device for ttyACM0 1 = /dev/cuacm1 Callout device for ttyACM1 ... 168 char Eracom CSA7000 PCI encryption adaptor 0 = /dev/ecsa0 First CSA7000 1 = /dev/ecsa1 Second CSA7000 ... 169 char Eracom CSA8000 PCI encryption adaptor 0 = /dev/ecsa8-0 First CSA8000 1 = /dev/ecsa8-1 Second CSA8000 ... 170 char AMI MegaRAC remote access controller 0 = /dev/megarac0 First MegaRAC card 1 = /dev/megarac1 Second MegaRAC card ... 171 char Reserved for IEEE 1394 (Firewire) 172 char Moxa Intellio serial card 0 = /dev/ttyMX0 First Moxa port 1 = /dev/ttyMX1 Second Moxa port ... 127 = /dev/ttyMX127 128th Moxa port 128 = /dev/moxactl Moxa control port 173 char Moxa Intellio serial card - alternate devices 0 = /dev/cumx0 Callout device for ttyMX0 1 = /dev/cumx1 Callout device for ttyMX1 ... 127 = /dev/cumx127 Callout device for ttyMX127 174 char SmartIO serial card 0 = /dev/ttySI0 First SmartIO port 1 = /dev/ttySI1 Second SmartIO port ... 175 char SmartIO serial card - alternate devices 0 = /dev/cusi0 Callout device for ttySI0 1 = /dev/cusi1 Callout device for ttySI1 ... 176 char nCipher nFast PCI crypto accelerator 0 = /dev/nfastpci0 First nFast PCI device 1 = /dev/nfastpci1 First nFast PCI device ... 177 char TI PCILynx memory spaces 0 = /dev/pcilynx/aux0 AUX space of first PCILynx card ... 15 = /dev/pcilynx/aux15 AUX space of 16th PCILynx card 16 = /dev/pcilynx/rom0 ROM space of first PCILynx card ... 31 = /dev/pcilynx/rom15 ROM space of 16th PCILynx card 32 = /dev/pcilynx/ram0 RAM space of first PCILynx card ... 47 = /dev/pcilynx/ram15 RAM space of 16th PCILynx card 178 char Giganet cLAN1xxx virtual interface adapter 0 = /dev/clanvi0 First cLAN adapter 1 = /dev/clanvi1 Second cLAN adapter ... 179 char CCube DVXChip-based PCI products 0 = /dev/dvxirq0 First DVX device 1 = /dev/dvxirq1 Second DVX device ... 180 char USB devices 0 = /dev/usb/lp0 First USB printer ... 15 = /dev/usb/lp15 16th USB printer 16 = /dev/usb/mouse0 First USB mouse ... 31 = /dev/usb/mouse15 16th USB mouse 32 = /dev/usb/ez0 First USB firmware loader ... 47 = /dev/usb/ez15 16th USB firmware loader 48 = /dev/usb/scanner0 First USB scanner ... 63 = /dev/usb/scanner15 16th USB scanner 64 = /dev/usb/rio500 Diamond Rio 500 181 char Conrad Electronic parallel port radio clocks 0 = /dev/pcfclock0 First Conrad radio clock 1 = /dev/pcfclock1 Second Conrad radio clock ... 182 char Picture Elements THR2 binarizer 0 = /dev/pethr0 First THR2 board 1 = /dev/pethr1 Second THR2 board ... 183 char SST 5136-DN DeviceNet interface 0 = /dev/ss5136dn0 First DeviceNet interface 1 = /dev/ss5136dn1 Second DeviceNet interface ... This device used to be assigned to major number 144. It had to be moved due to an unfortunate conflict. 184 char Picture Elements' video simulator/sender 0 = /dev/pevss0 First sender board 1 = /dev/pevss1 Second sender board ... 185 char InterMezzo high availability file system 0 = /dev/intermezzo0 First cache manager 1 = /dev/intermezzo1 Second cache manager ... See http://www.inter-mezzo.org/ for more information. 186 char Object-based storage control device 0 = /dev/obd0 First obd control device 1 = /dev/obd1 Second obd control device ... See ftp://ftp.lustre.org/pub/obd for code and information. 187 char DESkey hardware encryption device 0 = /dev/deskey0 First DES key 1 = /dev/deskey1 Second DES key ... 188 char USB serial converters 0 = /dev/ttyUSB0 First USB serial converter 1 = /dev/ttyUSB1 Second USB serial converter ... 189 char USB serial converters - alternate devices 0 = /dev/cuusb0 Callout device for ttyUSB0 1 = /dev/cuusb1 Callout device for ttyUSB1 ... 190 char Kansas City tracker/tuner card 0 = /dev/kctt0 First KCT/T card 1 = /dev/kctt1 Second KCT/T card ... 191 char Reserved for PCMCIA 192 char Kernel profiling interface 0 = /dev/profile Profiling control device 1 = /dev/profile0 Profiling device for CPU 0 2 = /dev/profile1 Profiling device for CPU 1 ... 193 char Kernel event-tracing interface 0 = /dev/trace Tracing control device 1 = /dev/trace0 Tracing device for CPU 0 2 = /dev/trace1 Tracing device for CPU 1 ... 194 char linVideoStreams (LINVS) 0 = /dev/mvideo/status0 Video compression status 1 = /dev/mvideo/stream0 Video stream 2 = /dev/mvideo/frame0 Single compressed frame 3 = /dev/mvideo/rawframe0 Raw uncompressed frame 4 = /dev/mvideo/codec0 Direct codec access 5 = /dev/mvideo/video4linux0 Video4Linux compatibility 16 = /dev/mvideo/status1 Second device ... 32 = /dev/mvideo/status2 Third device ... ... 240 = /dev/mvideo/status15 16th device ... 195 char Nvidia graphics devices 0 = /dev/nvidia0 First Nvidia card 1 = /dev/nvidia1 Second Nvidia card ... 255 = /dev/nvidiactl Nvidia card control device 196-197 UNASSIGNED 198 char Total Impact TPMP2 quad coprocessor PCI card 0 = /dev/tpmp2/0 First card 1 = /dev/tpmp2/1 Second card ... 199 char Veritas volume manager (VxVM) volumes 0 = /dev/vx/rdsk/*/* First volume 1 = /dev/vx/rdsk/*/* Second volume ... block Veritas volume manager (VxVM) volumes 0 = /dev/vx/dsk/*/* First volume 1 = /dev/vx/dsk/*/* First volume ... The namespace in these directories is maintained by the user space VxVM software. 200 char Veritas VxVM configuration interface 0 = /dev/vx/config Configuration access node 1 = /dev/vx/trace Volume i/o trace access node 2 = /dev/vx/iod Volume i/o daemon access node 3 = /dev/vx/info Volume information access node 4 = /dev/vx/task Volume tasks access node 5 = /dev/vx/taskmon Volume tasks monitor daemon 201 char Veritas VxVM dynamic multipathing driver 0 = /dev/vx/rdmp/* First multipath device 1 = /dev/vx/rdmp/* Second multipath device ... block Veritas VxVM dynamic multipathing driver 0 = /dev/vx/dmp/* First multipath device 1 = /dev/vx/dmp/* Second multipath device ... The namespace in these directories is maintained by the user space VxVM software. 202 char CPU model-specific registers 0 = /dev/cpu/0/msr MSRs on CPU 0 1 = /dev/cpu/1/msr MSRs on CPU 1 ... 203 char CPU CPUID information 0 = /dev/cpu/0/cpuid CPUID on CPU 0 1 = /dev/cpu/1/cpuid CPUID on CPU 1 ... 204 char Low-density serial ports 0 = /dev/ttyLU0 LinkUp Systems L72xx UART - port 0 1 = /dev/ttyLU1 LinkUp Systems L72xx UART - port 1 2 = /dev/ttyLU2 LinkUp Systems L72xx UART - port 2 3 = /dev/ttyLU3 LinkUp Systems L72xx UART - port 3 4 = /dev/ttyFB0 Intel Footbridge (ARM) 5 = /dev/ttySA0 StrongARM builtin serial port 0 6 = /dev/ttySA1 StrongARM builtin serial port 1 7 = /dev/ttySA2 StrongARM builtin serial port 2 8 = /dev/ttySC0 SCI serial port (SuperH) - port 0 9 = /dev/ttySC1 SCI serial port (SuperH) - port 1 10 = /dev/ttySC2 SCI serial port (SuperH) - port 2 11 = /dev/ttySC3 SCI serial port (SuperH) - port 3 12 = /dev/ttyFW0 Firmware console - port 0 13 = /dev/ttyFW1 Firmware console - port 1 14 = /dev/ttyFW2 Firmware console - port 2 15 = /dev/ttyFW3 Firmware console - port 3 16 = /dev/ttyAM0 ARM "AMBA" serial port 0 ... 31 = /dev/ttyAM15 ARM "AMBA" serial port 15 205 char Low-density serial ports (alternate device) 0 = /dev/culu0 Callout device for ttyLU0 1 = /dev/culu1 Callout device for ttyLU1 2 = /dev/culu2 Callout device for ttyLU2 3 = /dev/culu3 Callout device for ttyLU3 4 = /dev/cufb0 Callout device for ttyFB0 5 = /dev/cusa0 Callout device for ttySA0 6 = /dev/cusa1 Callout device for ttySA1 7 = /dev/cusa2 Callout device for ttySA2 8 = /dev/cusc0 Callout device for ttySC0 9 = /dev/cusc1 Callout device for ttySC1 10 = /dev/cusc2 Callout device for ttySC2 11 = /dev/cusc3 Callout device for ttySC3 12 = /dev/cufw0 Callout device for ttyFW0 13 = /dev/cufw1 Callout device for ttyFW1 14 = /dev/cufw2 Callout device for ttyFW2 15 = /dev/cufw3 Callout device for ttyFW3 16 = /dev/cuam0 Callout device for ttyAM0 ... 31 = /dev/cuam15 Callout device for ttyAM15 206 char OnStream SC-x0 tape devices 0 = /dev/osst0 First OnStream SCSI tape, mode 0 1 = /dev/osst1 Second OnStream SCSI tape, mode 0 ... 32 = /dev/osst0l First OnStream SCSI tape, mode 1 33 = /dev/osst1l Second OnStream SCSI tape, mode 1 ... 64 = /dev/osst0m First OnStream SCSI tape, mode 2 65 = /dev/osst1m Second OnStream SCSI tape, mode 2 ... 96 = /dev/osst0a First OnStream SCSI tape, mode 3 97 = /dev/osst1a Second OnStream SCSI tape, mode 3 ... 128 = /dev/nosst0 No rewind version of /dev/osst0 129 = /dev/nosst1 No rewind version of /dev/osst1 ... 160 = /dev/nosst0l No rewind version of /dev/osst0l 161 = /dev/nosst1l No rewind version of /dev/osst1l ... 192 = /dev/nosst0m No rewind version of /dev/osst0m 193 = /dev/nosst1m No rewind version of /dev/osst1m ... 224 = /dev/nosst0a No rewind version of /dev/osst0a 225 = /dev/nosst1a No rewind version of /dev/osst1a ... The OnStream SC-x0 SCSI tapes do not support the standard SCSI SASD command set and therefore need their own driver "osst". Note that the IDE, USB (and maybe ParPort) versions may be driven via ide-scsi or usb-storage SCSI emulation and this osst device and driver as well. The ADR-x0 drives are QIC-157 compliant and don't need osst. 207 char Compaq ProLiant health feature indicate 0 = /dev/cpqhealth/cpqw Redirector interface 1 = /dev/cpqhealth/crom EISA CROM 2 = /dev/cpqhealth/cdt Data Table 3 = /dev/cpqhealth/cevt Event Log 4 = /dev/cpqhealth/casr Automatic Server Recovery 5 = /dev/cpqhealth/cecc ECC Memory 6 = /dev/cpqhealth/cmca Machine Check Architecture 7 = /dev/cpqhealth/ccsm Deprecated CDT 8 = /dev/cpqhealth/cnmi NMI Handling 9 = /dev/cpqhealth/css Sideshow Management 10 = /dev/cpqhealth/cram CMOS interface 11 = /dev/cpqhealth/cpci PCI IRQ interface 208 char User space serial ports 0 = /dev/ttyU0 First user space serial port 1 = /dev/ttyU1 Second user space serial port ... 209 char User space serial ports (alternate devices) 0 = /dev/cuu0 Callout device for ttyU0 1 = /dev/cuu1 Callout device for ttyU1 ... 210 char SBE, Inc. sync/async serial card 0 = /dev/sbei/wxcfg0 Configuration device for board 0 1 = /dev/sbei/dld0 Download device for board 0 2 = /dev/sbei/wan00 WAN device, port 0, board 0 3 = /dev/sbei/wan01 WAN device, port 1, board 0 4 = /dev/sbei/wan02 WAN device, port 2, board 0 5 = /dev/sbei/wan03 WAN device, port 3, board 0 6 = /dev/sbei/wanc00 WAN clone device, port 0, board 0 7 = /dev/sbei/wanc01 WAN clone device, port 1, board 0 8 = /dev/sbei/wanc02 WAN clone device, port 2, board 0 9 = /dev/sbei/wanc03 WAN clone device, port 3, board 0 10 = /dev/sbei/wxcfg1 Configuration device for board 1 11 = /dev/sbei/dld1 Download device for board 1 12 = /dev/sbei/wan10 WAN device, port 0, board 1 13 = /dev/sbei/wan11 WAN device, port 1, board 1 14 = /dev/sbei/wan12 WAN device, port 2, board 1 15 = /dev/sbei/wan13 WAN device, port 3, board 1 16 = /dev/sbei/wanc10 WAN clone device, port 0, board 1 17 = /dev/sbei/wanc11 WAN clone device, port 1, board 1 18 = /dev/sbei/wanc12 WAN clone device, port 2, board 1 19 = /dev/sbei/wanc13 WAN clone device, port 3, board 1 ... Yes, each board is really spaced 10 (decimal) apart. 211 char Addinum CPCI1500 digital I/O card 0 = /dev/addinum/cpci1500/0 First CPCI1500 card 1 = /dev/addinum/cpci1500/1 Second CPCI1500 card ... 216 char USB BlueTooth devices 0 = /dev/ttyUB0 First USB BlueTooth device 1 = /dev/ttyUB1 Second USB BlueTooth device ... 217 char USB BlueTooth devices (alternate devices) 0 = /dev/cuub0 Callout device for ttyUB0 1 = /dev/cuub1 Callout device for ttyUB1 ... 218 char The Logical Company bus Unibus/Qbus adapters 0 = /dev/logicalco/bci/0 First bus adapter 1 = /dev/logicalco/bci/1 First bus adapter ... 219 char The Logical Company DCI-1300 digital I/O card 0 = /dev/logicalco/dci1300/0 First DCI-1300 card 1 = /dev/logicalco/dci1300/1 Second DCI-1300 card ... 220 char Myricom Myrinet "GM" board 0 = /dev/myricom/gm0 First Myrinet GM board 1 = /dev/myricom/gmp0 First board "root access" 2 = /dev/myricom/gm1 Second Myrinet GM board 3 = /dev/myricom/gmp1 Second board "root access" ... 221 char VME bus 0 = /dev/bus/vme/m0 First master image 1 = /dev/bus/vme/m1 Second master image 2 = /dev/bus/vme/m2 Third master image 3 = /dev/bus/vme/m3 Fourth master image 4 = /dev/bus/vme/s0 First slave image 5 = /dev/bus/vme/s1 Second slave image 6 = /dev/bus/vme/s2 Third slave image 7 = /dev/bus/vme/s3 Fourth slave image 8 = /dev/bus/vme/ctl Control It is expected that all VME bus drivers will use the same interface. For interface documentation see http://www.vmelinux.org/. 224 char A2232 serial card 0 = /dev/ttyY0 First A2232 port 1 = /dev/cuy0 Second A2232 port ... 225 char A2232 serial card (alternate devices) 0 = /dev/cuy0 Callout device for ttyY0 1 = /dev/cuy1 Callout device for ttyY1 ... 226-239 UNASSIGNED 240-254 LOCAL/EXPERIMENTAL USE 255 RESERVED This major is reserved to assist the expansion to a larger number space. No device nodes with this major should ever be created on the filesystem. **** ADDITIONAL /dev DIRECTORY ENTRIES This section details additional entries that should or may exist in the /dev directory. It is preferred that symbolic links use the same form (absolute or relative) as is indicated here. Links are classified as "hard" or "symbolic" depending on the preferred type of link; if possible, the indicated type of link should be used. Compulsory links These links should exist on all systems: /dev/fd /proc/self/fd symbolic File descriptors /dev/stdin fd/0 symbolic stdin file descriptor /dev/stdout fd/1 symbolic stdout file descriptor /dev/stderr fd/2 symbolic stderr file descriptor /dev/nfsd socksys symbolic Required by iBCS-2 /dev/X0R null symbolic Required by iBCS-2 Note: /dev/X0R is --. Recommended links It is recommended that these links exist on all systems: /dev/core /proc/kcore symbolic Backward compatibility /dev/ramdisk ram0 symbolic Backward compatibility /dev/ftape qft0 symbolic Backward compatibility /dev/bttv0 video0 symbolic Backward compatibility /dev/radio radio0 symbolic Backward compatibility /dev/i2o* /dev/i2o/* symbolic Backward compatibility /dev/scd? sr? hard Alternate SCSI CD-ROM name Locally defined links The following links may be established locally to conform to the configuration of the system. This is merely a tabulation of existing practice, and does not constitute a recommendation. However, if they exist, they should have the following uses. /dev/mouse mouse port symbolic Current mouse device /dev/tape tape device symbolic Current tape device /dev/cdrom CD-ROM device symbolic Current CD-ROM device /dev/cdwriter CD-writer symbolic Current CD-writer device /dev/scanner scanner symbolic Current scanner device /dev/modem modem port symbolic Current dialout device /dev/root root device symbolic Current root filesystem /dev/swap swap device symbolic Current swap device /dev/modem should not be used for a modem which supports dialin as well as dialout, as it tends to cause lock file problems. If it exists, /dev/modem should point to the appropriate primary TTY device (the use of the alternate callout devices is deprecated). For SCSI devices, /dev/tape and /dev/cdrom should point to the ``cooked'' devices (/dev/st* and /dev/sr*, respectively), whereas /dev/cdwriter and /dev/scanner should point to the appropriate generic SCSI devices (/dev/sg*). /dev/mouse may point to a primary serial TTY device, a hardware mouse device, or a socket for a mouse driver program (e.g. /dev/gpmdata). Sockets and pipes Non-transient sockets and named pipes may exist in /dev. Common entries are: /dev/printer socket lpd local socket /dev/log socket syslog local socket /dev/gpmdata socket gpm mouse multiplexer Mount points The following names are reserved for mounting special filesystems under /dev. These special filesystems provide kernel interfaces that cannot be provided with standard device nodes. /dev/pts devpts PTY slave filesystem /dev/shm shmfs POSIX shared memory maintenance access **** TERMINAL DEVICES Terminal, or TTY devices are a special class of character devices. A terminal device is any device that could act as a controlling terminal for a session; this includes virtual consoles, serial ports, and pseudoterminals (PTYs). All terminal devices share a common set of capabilities known as line diciplines; these include the common terminal line dicipline as well as SLIP and PPP modes. All terminal devices are named similarly; this section explains the naming and use of the various types of TTYs. Note that the naming conventions include several historical warts; some of these are Linux-specific, some were inherited from other systems, and some reflect Linux outgrowing a borrowed convention. A hash mark (#) in a device name is used here to indicate a decimal number without leading zeroes. Virtual consoles and the console device Virtual consoles are full-screen terminal displays on the system video monitor. Virtual consoles are named /dev/tty#, with numbering starting at /dev/tty1; /dev/tty0 is the current virtual console. /dev/tty0 is the device that should be used to access the system video card on those architectures for which the frame buffer devices (/dev/fb*) are not applicable. Do not use /dev/console for this purpose. The console device, /dev/console, is the device to which system messages should be sent, and on which logins should be permitted in single-user mode. Starting with Linux 2.1.71, /dev/console is managed by the kernel; for previous versions it should be a symbolic link to either /dev/tty0, a specific virtual console such as /dev/tty1, or to a serial port primary (tty*, not cu*) device, depending on the configuration of the system. Serial ports Serial ports are RS-232 serial ports and any device which simulates one, either in hardware (such as internal modems) or in software (such as the ISDN driver.) Under Linux, each serial ports has two device names, the primary or callin device and the alternate or callout one. Each kind of device is indicated by a different letter. For any letter X, the names of the devices are /dev/ttyX# and /dev/cux#, respectively; for historical reasons, /dev/ttyS# and /dev/ttyC# correspond to /dev/cua# and /dev/cub#. In the future, it should be expected that multiple letters will be used; all letters will be upper case for the "tty" device (e.g. /dev/ttyDP#) and lower case for the "cu" device (e.g. /dev/cudp#). The names /dev/ttyQ# and /dev/cuq# are reserved for local use. The alternate devices provide for kernel-based exclusion and somewhat different defaults than the primary devices. Their main purpose is to allow the use of serial ports with programs with no inherent or broken support for serial ports. Their use is deprecated, and they may be removed from a future version of Linux. Arbitration of serial ports is provided by the use of lock files with the names /var/lock/LCK..ttyX#. The contents of the lock file should be the PID of the locking process as an ASCII number. It is common practice to install links such as /dev/modem which point to serial ports. In order to ensure proper locking in the presence of these links, it is recommended that software chase symlinks and lock all possible names; additionally, it is recommended that a lock file be installed with the corresponding alternate device. In order to avoid deadlocks, it is recommended that the locks are acquired in the following order, and released in the reverse: 1. The symbolic link name, if any (/var/lock/LCK..modem) 2. The "tty" name (/var/lock/LCK..ttyS2) 3. The alternate device name (/var/lock/LCK..cua2) In the case of nested symbolic links, the lock files should be installed in the order the symlinks are resolved. Under no circumstances should an application hold a lock while waiting for another to be released. In addition, applications which attempt to create lock files for the corresponding alternate device names should take into account the possibility of being used on a non-serial port TTY, for which no alternate device would exist. Pseudoterminals (PTYs) Pseudoterminals, or PTYs, are used to create login sessions or provide other capabilities requiring a TTY line dicipline (including SLIP or PPP capability) to arbitrary data-generation processes. Each PTY has a master side, named /dev/pty[p-za-e][0-9a-f], and a slave side, named /dev/tty[p-za-e][0-9a-f]. The kernel arbitrates the use of PTYs by allowing each master side to be opened only once. Once the master side has been opened, the corresponding slave device can be used in the same manner as any TTY device. The master and slave devices are connected by the kernel, generating the equivalent of a bidirectional pipe with TTY capabilities. Recent versions of the Linux kernels and GNU libc contain support for the System V/Unix98 naming scheme for PTYs, which assigns a common device, /dev/ptmx, to all the masters (opening it will automatically give you a previously unassigned PTY) and a subdirectory, /dev/pts, for the slaves; the slaves are named with decimal integers (/dev/pts/# in our notation). This removes the problem of exhausting the namespace and enables the kernel to automatically create the device nodes for the slaves on demand using the "devpts" filesystem. The Linux Digiboard Driver -------------------------- The Digiboard Driver for Linux supports the following boards: DigiBoard PC/Xi, PC/Xe, PC/Xeve(which is the newer, smaller Xe with a 8K window which is also known as PC/Xe(8K) and has no memory/irq switches) You can use up to 4 cards with this driver and it should work on other architectures than intel also. In case you have problems with this version (1.6.1) of this driver, please email directly to me as I made the last update. It you have a report about running it on other architectures than intel, email me, so I can document it here. A version of this driver has been taken by Digiboard to make a driver software package which supports also PC/Xem cards and newer PCI cards but it doesn't support the old PC/Xi cards and it isn't yet ported to linux-2.1.x and may not be usable on other architectures than intel now. It is available from ftp.digi.com/ftp.digiboard.com. You can write me if you need an patch for this driver. Bernhard Kaindl (bkaindl@netway.at) 6. April 1997. Configuring the Driver ---------------------- The driver can be built direct into the kernel or as a module. The pcxx driver can be configured using the command line feature while loading the kernel with LILO or LOADLIN or, if built as a module, with arguments to insmod and modprobe or with parameters in /etc/conf.modules for modprobe and kerneld. After configuring the driver you need to create the device special files as described in "Device file creation:" below and set the appropriate permissions for your application. As Module --------- modprobe pcxx io= \ membase= \ memsize= \ numports= \ altpin= \ verbose= or, if several cards are installed modprobe pcxx io=,,... \ membase=,,... \ memsize=,,... \ numports=,,... \ altpin=,,... \ verbose= where is the io address of the Nth card and is the memory base address of the Nth card, etc. The parameters can be specified in any order. For example, the numports parameter can precede the membase parameter, or vice versa. If several cards are installed the ordering within the comma separated parameter lists must be consistent, of course. io - I/O port address of that card. membase - Memory start address of that card. memsize - Memory size of that card, in kilobytes. If given, this value is compared against the card to verify configuration and hinder the driver from using a misconfigured card. If the parameter does not match the board it is disabled with a memory size error. numports - Number of ports on this card. This is the number of devices to assign to this card or reserve if disabled. altpin - 1: swap DCD and DSR for 8-pin RJ-45 with modems. 0: don't swap DCD and DSR. other values count as 1. verbose - 1: give nice verbose output during initialisation of the driver, possibly helpful during board configuration. 0: normal terse output. Only the parameters which differ from the defaults need to be specified. If the io= parameter is not given, the default config is used. This is io=0x200 membase=0xD0000 numports=16 altpin=0 Only applicable parameters need be specified. For example to configure 2 boards, first one at 0x200 with 8 ports, rest defaults, second one at 0x120, memory at 0xD80000, altpin enabled, rest defaults, you can do this by using these parameters: modprobe pcxx io=0x200,0x120 numports=8,8 membase=,0xD80000 altpin=,1 To disable a temporary unusable board without changing the mapping of the devices following that board, you can empty the io-value for that board: modprobe pcxx io=,0x120 numports=8,8 membase=,0xD80000 altpin=,1 The remaining board still uses ttyD8-ttyD15 and cud8-cud15. Example line for /etc/conf.modules for use with kerneld and as default parameters for modprobe: options pcxx io=0x200 numports=8 For kerneld to work you will likely need to add these two lines to your /etc/conf.modules: alias char-major-22 pcxx alias char-major-23 pcxx Boot-time configuration when linked into the kernel --------------------------------------------------- Per board to be configured, pass a digi= command-line parameter to the kernel using lilo or loadlin. It consists of a string of comma separated identifiers or integers. The 6 values in order are: Card status: Enable - use that board Disable - don't actually use that board. Card type: PC/Xi - the old ones with 64/128/256/512K RAM. PC/Xe - PC/Xe(old ones with 64k mem range). PC/Xeve - PC/Xe(new ones with 8k mem range). Note: This is for documentation only, the type is detected from the board. Altpin setting: Enable - swap DCD and DSR for 8-pin RJ-45 with modems. Disable - don't swap DCD and DSR. Number of ports: 1 ... 16 - Number of ports on this card. This is the number of devices to assign to this card. I/O port address: eg. 200 - I/O Port address where the card is configured. Memory base addr: eg. 80000 - Memory address where the board's memory starts. This is an example for a line which you can insert into you lilo.conf: append="digi=Enable,PC/Xi,Disable,4,120,D0000" there is an alternate form, in which you must use decimal values only: append="digi=1,0,0,16,512,851968" If you don't give a digi= command line, the compiled-in defaults of board 1: io=0x200, membase=0xd0000, altpin=off and numports=16 are used. If you have the resources (io&mem) free for use, configure your board to these settings and you should be set up fine even if yours has not got 16 ports. Sources of Information ---------------------- Web page: http://private.fuller.edu/clameter/digi.html Mailing list: digiboard@list.fuller.edu (Write e-mail to that address to subscribe. Common ListServ commands work. Archive of messages available) Christoph Lameter (clameter@fuller.edu) 16. April 1996. Supporting Tools ---------------- Some tools and more detailed information can be found at ftp://ftp.fuller.edu/Linux/digi The "ditty" tool described in the Digiboard Manuals for other Unixes is also available. Device file creation -------------------- Currently the Linux MAKEDEV command does not support generating the Digiboard Devices. The /dev/cud devices behave like the /dev/cua devices and the ttyD devices are like the /dev/ttyS devices. Use the following script to generate the devices: ------------------ mkdigidev begin #!/bin/sh # # Script to create Digiboard Devices # Christoph Lameter, April 16, 1996 # # Usage: # mkdigidev [] # DIGI_MAJOR=23 DIGICU_MAJOR=22 BOARDS=$1 if [ "$BOARDS" = "" ]; then BOARDS=1 fi boardnum=0 while [ $boardnum -lt $BOARDS ]; do for c in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do name=`expr $boardnum \* 16 + $c` mknod /dev/cud$name c $DIGICU_MAJOR $name mknod /dev/ttyD$name c $DIGI_MAJOR $name done boardnum=`expr $boardnum + 1` done ------------------ mkdigidev end or apply the following patch to /dev/MAKEDEV and do a sh /dev/MAKEDEV digi ----- MAKEDEV Patch --- /dev/MAKEDEV Sun Aug 13 15:48:23 1995 +++ MAKEDEV Tue Apr 16 17:53:27 1996 @@ -120,7 +120,7 @@ while [ $# -ne 0 ] do case "$1" in - mem|tty|ttyp|cua|cub) ;; + mem|tty|ttyp|cua|cub|cud) ;; hd) echo hda hdb hdc hdd ;; xd) echo xda xdb ;; fd) echo fd0 fd1 ;; @@ -140,6 +140,7 @@ dcf) echo dcf ;; pcmcia) ;; # taken care of by its own driver ttyC) echo cyclades ;; + ttyD) echo digi ;; *) echo "$0: don't know what \"$1\" is" >&2 ;; esac shift @@ -208,6 +209,15 @@ do makedev ttyC$i c $major1 `expr 32 + $i` $tty makedev cub$i c $major2 `expr 32 + $i` $dialout + done + ;; + digi) + major1=`Major ttyD` || continue + major2=`Major cud` || continue + for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 + do + makedev ttyD$i c $major1 `expr 32 + $i` $tty + makedev cud$i c $major2 `expr 32 + $i` $dialout done ;; par[0-2]) ----- End Makedev patch ----------------------------------------------------------------------------- Changes v1.5.5: The ability to use the kernel's command line to pass in the configuration for boards. Using LILO's APPEND command, a string of comma separated identifiers or integers can be used. The 6 values in order are: Enable/Disable this card, Type of card: PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3) Enable/Disable alternate pin arrangement, Number of ports on this card, I/O Port where card is configured (in HEX if using string identifiers), Base of memory window (in HEX if using string identifiers), Samples: append="digi=E,PC/Xi,D,16,200,D0000" append="digi=1,0,0,16,512,(whatever D0000 is in base 10 :) Drivers' minor device numbers are conserved. This means that instead of each board getting a block of 16 minors pre-assigned, it gets however many it should, with the next card following directly behind it. A system with 4 2-port PC/Xi boards will use minor numbers 0-7. This conserves some memory, and removes a few hard coded constants. NOTE!! NOTE!! NOTE!! The definition of PC/Xem as a valid board type is the BEGINNING of support for this device. The driver does not currently recognise the board, nor does it want to initialize it. At least not the EISA version. Mike McLagan 5, April 1996. The Digi Intl. epca driver. ---------------------------- The Digi Intl. epca driver for Linux supports the following boards: Digi PC/Xem, PC/Xr, PC/Xe, PC/Xi, PC/Xeve Digi EISA/Xem, PCI/Xem, PCI/Xr Limitations: ------------ Currently the driver only autoprobes for supported PCI boards. The Linux MAKEDEV command does not support generating the Digiboard Devices. Users executing digiConfig to setup EISA and PC series cards will have their device nodes automatically constructed (cud?? for ~CLOCAL, and ttyD?? for CLOCAL). Users wishing to boot their board from the LILO prompt, or those users booting PCI cards may use buildDIGI to construct the necessary nodes. Notes: ------ This driver may be configured via LILO. For users who have already configured their driver using digiConfig, configuring from LILO will override previous settings. Multiple boards may be configured by issuing multiple LILO command lines. For examples see the bottom of this document. Device names start at 0 and continue up. Beware of this as previous Digi drivers started device names with 1. PCI boards are auto-detected and configured by the driver. PCI boards will be allocated device numbers (internally) beginning with the lowest PCI slot first. In other words a PCI card in slot 3 will always have higher device nodes than a PCI card in slot 1. LILO config examples: --------------------- Using LILO's APPEND command, a string of comma separated identifiers or integers can be used to configure supported boards. The six values in order are: Enable/Disable this card or Override, Type of card: PC/Xe (AccelePort) (0), PC/Xeve (1), PC/Xem or PC/Xr (2), EISA/Xem (3), PC/64Xe (4), PC/Xi (5), Enable/Disable alternate pin arrangement, Number of ports on this card, I/O Port where card is configured (in HEX if using string identifiers), Base of memory window (in HEX if using string identifiers), NOTE : PCI boards are auto-detected and configured. Do not attempt to configure PCI boards with the LILO append command. If you wish to override previous configuration data (As set by digiConfig), but you do not wish to configure any specific card (Example if there are PCI cards in the system) the following override command will accomplish this: -> append="digi=2" Samples: append="digiepca=E,PC/Xe,D,16,200,D0000" or append="digi=1,0,0,16,512,851968" Supporting Tools: ----------------- Supporting tools include digiDload, digiConfig, buildPCI, and ditty. See /usr/src/linux/Documentation/README.epca.dir/user.doc for more details. Note, this driver REQUIRES that digiDload be executed prior to it being used. Failure to do this will result in an ENODEV error. The latest version of the tool package is available at: ftp://ftp.dgii.com/drivers/linux/released/async/ Documentation: -------------- Complete documentation for this product may be found in the tool package. Sources of information and support: ----------------------------------- Digi Intl. support site for this product: -> digilnux@dgii.com Related information and information concerning other drivers supporting Digi Intl. products: -> FTP: ftp://dgii.com -> Webpage: http://www.dgii.com -> Webpage: http://private.fuller.edu/clameter/digi.html -> Mailing List: digiboard@list.fuller.edu Note write e-mail to subscribe common ListServ commands will not work. Acknowledgments: ---------------- Much of this work (And even text) was derived from a similar document supporting the original public domain DigiBoard driver Copyright (C) 1994,1995 Troy De Jongh. Many thanks to Christoph Lameter (clameter@fuller.edu) and Mike McLagan (mike.mclagan@linux.org) who authored and contributed to the original document. Kernel level exception handling in Linux 2.1.8 Commentary by Joerg Pommnitz When a process runs in kernel mode, it often has to access user mode memory whose address has been passed by an untrusted program. To protect itself the kernel has to verify this address. In older versions of Linux this was done with the int verify_area(int type, const void * addr, unsigned long size) function. This function verified that the memory area starting at address addr and of size size was accessible for the operation specified in type (read or write). To do this, verify_read had to look up the virtual memory area (vma) that contained the address addr. In the normal case (correctly working program), this test was successful. It only failed for a few buggy programs. In some kernel profiling tests, this normally unneeded verification used up a considerable amount of time. To overcome this situation, Linus decided to let the virtual memory hardware present in every Linux-capable CPU handle this test. How does this work? Whenever the kernel tries to access an address that is currently not accessible, the CPU generates a page fault exception and calls the page fault handler void do_page_fault(struct pt_regs *regs, unsigned long error_code) in arch/i386/mm/fault.c. The parameters on the stack are set up by the low level assembly glue in arch/i386/kernel/entry.S. The parameter regs is a pointer to the saved registers on the stack, error_code contains a reason code for the exception. do_page_fault first obtains the unaccessible address from the CPU control register CR2. If the address is within the virtual address space of the process, the fault probably occurred, because the page was not swapped in, write protected or something similar. However, we are interested in the other case: the address is not valid, there is no vma that contains this address. In this case, the kernel jumps to the bad_area label. There it uses the address of the instruction that caused the exception (i.e. regs->eip) to find an address where the execution can continue (fixup). If this search is successful, the fault handler modifies the return address (again regs->eip) and returns. The execution will continue at the address in fixup. Where does fixup point to? Since we jump to the contents of fixup, fixup obviously points to executable code. This code is hidden inside the user access macros. I have picked the get_user macro defined in include/asm/uaccess.h as an example. The definition is somewhat hard to follow, so let's peek at the code generated by the preprocessor and the compiler. I selected the get_user call in drivers/char/console.c for a detailed examination. The original code in console.c line 1405: get_user(c, buf); The preprocessor output (edited to become somewhat readable): ( { long __gu_err = - 14 , __gu_val = 0; const __typeof__(*( ( buf ) )) *__gu_addr = ((buf)); if (((((0 + current_set[0])->tss.segment) == 0x18 ) || (((sizeof(*(buf))) <= 0xC0000000UL) && ((unsigned long)(__gu_addr ) <= 0xC0000000UL - (sizeof(*(buf))))))) do { __gu_err = 0; switch ((sizeof(*(buf)))) { case 1: __asm__ __volatile__( "1: mov" "b" " %2,%" "b" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "b" " %" "b" "1,%" "b" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=q" (__gu_val): "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"( __gu_err )) ; break; case 2: __asm__ __volatile__( "1: mov" "w" " %2,%" "w" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "w" " %" "w" "1,%" "w" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=r" (__gu_val) : "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"( __gu_err )); break; case 4: __asm__ __volatile__( "1: mov" "l" " %2,%" "" "1\n" "2:\n" ".section .fixup,\"ax\"\n" "3: movl %3,%0\n" " xor" "l" " %" "" "1,%" "" "1\n" " jmp 2b\n" ".section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,3b\n" ".text" : "=r"(__gu_err), "=r" (__gu_val) : "m"((*(struct __large_struct *) ( __gu_addr )) ), "i"(- 14 ), "0"(__gu_err)); break; default: (__gu_val) = __get_user_bad(); } } while (0) ; ((c)) = (__typeof__(*((buf))))__gu_val; __gu_err; } ); WOW! Black GCC/assembly magic. This is impossible to follow, so let's see what code gcc generates: > xorl %edx,%edx > movl current_set,%eax > cmpl $24,788(%eax) > je .L1424 > cmpl $-1073741825,64(%esp) > ja .L1423 > .L1424: > movl %edx,%eax > movl 64(%esp),%ebx > #APP > 1: movb (%ebx),%dl /* this is the actual user access */ > 2: > .section .fixup,"ax" > 3: movl $-14,%eax > xorb %dl,%dl > jmp 2b > .section __ex_table,"a" > .align 4 > .long 1b,3b > .text > #NO_APP > .L1423: > movzbl %dl,%esi The optimizer does a good job and gives us something we can actually understand. Can we? The actual user access is quite obvious. Thanks to the unified address space we can just access the address in user memory. But what does the .section stuff do????? To understand this we have to look at the final kernel: > objdump --section-headers vmlinux > > vmlinux: file format elf32-i386 > > Sections: > Idx Name Size VMA LMA File off Algn > 0 .text 00098f40 c0100000 c0100000 00001000 2**4 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 1 .fixup 000016bc c0198f40 c0198f40 00099f40 2**0 > CONTENTS, ALLOC, LOAD, READONLY, CODE > 2 .rodata 0000f127 c019a5fc c019a5fc 0009b5fc 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 3 __ex_table 000015c0 c01a9724 c01a9724 000aa724 2**2 > CONTENTS, ALLOC, LOAD, READONLY, DATA > 4 .data 0000ea58 c01abcf0 c01abcf0 000abcf0 2**4 > CONTENTS, ALLOC, LOAD, DATA > 5 .bss 00018e21 c01ba748 c01ba748 000ba748 2**2 > ALLOC > 6 .comment 00000ec4 00000000 00000000 000ba748 2**0 > CONTENTS, READONLY > 7 .note 00001068 00000ec4 00000ec4 000bb60c 2**0 > CONTENTS, READONLY There are obviously 2 non standard ELF sections in the generated object file. But first we want to find out what happened to our code in the final kernel executable: > objdump --disassemble --section=.text vmlinux > > c017e785 xorl %edx,%edx > c017e787 movl 0xc01c7bec,%eax > c017e78c cmpl $0x18,0x314(%eax) > c017e793 je c017e79f > c017e795 cmpl $0xbfffffff,0x40(%esp,1) > c017e79d ja c017e7a7 > c017e79f movl %edx,%eax > c017e7a1 movl 0x40(%esp,1),%ebx > c017e7a5 movb (%ebx),%dl > c017e7a7 movzbl %dl,%esi The whole user memory access is reduced to 10 x86 machine instructions. The instructions bracketed in the .section directives are not longer in the normal execution path. They are located in a different section of the executable file: > objdump --disassemble --section=.fixup vmlinux > > c0199ff5 <.fixup+10b5> movl $0xfffffff2,%eax > c0199ffa <.fixup+10ba> xorb %dl,%dl > c0199ffc <.fixup+10bc> jmp c017e7a7 And finally: > objdump --full-contents --section=__ex_table vmlinux > > c01aa7c4 93c017c0 e09f19c0 97c017c0 99c017c0 ................ > c01aa7d4 f6c217c0 e99f19c0 a5e717c0 f59f19c0 ................ > c01aa7e4 080a18c0 01a019c0 0a0a18c0 04a019c0 ................ or in human readable byte order: > c01aa7c4 c017c093 c0199fe0 c017c097 c017c099 ................ > c01aa7d4 c017c2f6 c0199fe9 c017e7a5 c0199ff5 ................ ^^^^^^^^^^^^^^^^^ this is the interesting part! > c01aa7e4 c0180a08 c019a001 c0180a0a c019a004 ................ What happened? The assembly directives .section .fixup,"ax" .section __ex_table,"a" told the assembler to move the following code to the specified sections in the ELF object file. So the instructions 3: movl $-14,%eax xorb %dl,%dl jmp 2b ended up in the .fixup section of the object file and the addresses .long 1b,3b ended up in the __ex_table section of the object file. 1b and 3b are local labels. The local label 1b (1b stands for next label 1 backward) is the address of the instruction that might fault, i.e. in our case the address of the label 1 is c017e7a5: the original assembly code: > 1: movb (%ebx),%dl and linked in vmlinux : > c017e7a5 movb (%ebx),%dl The local label 3 (backwards again) is the address of the code to handle the fault, in our case the actual value is c0199ff5: the original assembly code: > 3: movl $-14,%eax and linked in vmlinux : > c0199ff5 <.fixup+10b5> movl $0xfffffff2,%eax The assembly code > .section __ex_table,"a" > .align 4 > .long 1b,3b becomes the value pair > c01aa7d4 c017c2f6 c0199fe9 c017e7a5 c0199ff5 ................ ^this is ^this is 1b 3b c017e7a5,c0199ff5 in the exception table of the kernel. So, what actually happens if a fault from kernel mode with no suitable vma occurs? 1.) access to invalid address: > c017e7a5 movb (%ebx),%dl 2.) MMU generates exception 3.) CPU calls do_page_fault 4.) do page fault calls search_exception_table (regs->eip == c017e7a5); 5.) search_exception_table looks up the address c017e7a5 in the exception table (i.e. the contents of the ELF section __ex_table) and returns the address of the associated fault handle code c0199ff5. 6.) do_page_fault modifies its own return address to point to the fault handle code and returns. 7.) execution continues in the fault handling code. 8.) 8a) EAX becomes -EFAULT (== -14) 8b) DL becomes zero (the value we "read" from user space) 8c) execution continues at local label 2 (address of the instruction immediately after the faulting user access). The steps 8a to 8c in a certain way emulate the faulting instruction. That's it, mostly. If you look at our example, you might ask why we set EAX to -EFAULT in the exception handler code. Well, the get_user macro actually returns a value: 0, if the user access was successful, -EFAULT on failure. Our original code did not test this return value, however the inline assembly code in get_user tries to return -EFAULT. GCC selected EAX to return this value. Intro ===== This file describes some issues involved when using the "ftape" floppy tape device driver that comes with the Linux kernel. This document deals with ftape-3.04 and later. Please read the section "Changes" for the most striking differences between version 3.04 and 2.08; the latter was the version of ftape delivered with the kernel until kernel version 2.0.30 and 2.1.57. ftape-3.x developed as the re-unification of ftape-2.x and zftape. zftape was developed in parallel with the stock ftape-2.x driver sharing the same hardware support but providing an enhanced file system interface. zftape also provided user transparent block-wise on-the-fly compression (regard it as a feature or bug of zftape). ftape has a home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape which contains further information about ftape. Please cross check this WWW address against the address given (if any) in the MAINTAINERS file located in the top level directory of the Linux kernel source tree. Contents ======== A minus 1: Ftape documentation A. Changes 1. Goal 2. I/O Block Size 3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape) 4. MTBSF - backspace over file mark and position at its EOT side 5. Formatting 6. Interchanging cartridges with other operating systems B. Debugging Output 1. Introduction 2. Tuning the debugging output C. Boot and load time configuration 1. Setting boot time parameters 2. Module load time parameters 3. Ftape boot- and load time options 4. Example kernel parameter setting 5. Example module parameter setting D. Support and contacts ******************************************************************************* A minus 1. Ftape documentation ============================== Unluckily, the ftape-HOWTO is out of date. This really needs to be changed. Up to date documentation as well as recent development versions of ftape and useful links to related topics can be found at the ftape home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape ******************************************************************************* A. Changes ========== 1. Goal ~~~~ The goal of all that incompatibilities was to give ftape an interface that resembles the interface provided by SCSI tape drives as close as possible. Thus any Unix backup program that is known to work with SCSI tape drives should also work with ftape-3.04 and above. The concept of a fixed block size for read/write transfers is rather unrelated to this SCSI tape compatibility at the file system interface level. It developed out of a feature of zftape, a block wise user transparent on-the-fly compression. That compression support will not be dropped in future releases for compatibility reasons with previous releases of zftape. 2. I/O Block Size ~~~~~~~~~~~~~~ The probably most striking difference between ftape-2.x and ftape-3.x with the zftape file system interface is the concept of a fixed block size: data must be written to or read from the tape in multiples of a fixed block size. The block size defaults to 10k which is the default block size of GNU tar. While this is quite usual for SCSI tapes (block size of 32k?) and the QIC-150 driver `./drivers/char/tpqic02.c' ftape-2.x allowed data to be written in arbitrary portions to the tape. The block size can be tuned either during kernel configuration or at runtime with the MTIOCTOP ioctl using the MTSETBLK operation (i.e. do "mt -f /dev/qft0" setblk #BLKSZ). A block size of 0 switches to variable block size mode i.e. "mt setblk 0" switches off the block size restriction. However, this disables zftape's built in on-the-fly compression which doesn't work with variable block size mode. The BLKSZ parameter must be given as a byte count and must be a multiple of 32k or 0, i.e. use "mt setblk 32768" to switch to a block size of 32k. The typical symptom of a block size mismatch is an "invalid argument" error message. 3. Write Access when not at EOD (End Of Data) or BOT (Begin Of Tape) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ zftape (the file system interface of ftape-3.x) denies write access to the tape cartridge when it isn't positioned either at BOT or EOD. This inconvenience has been introduced as it was reported that the former behavior of ftape-2.x which allowed write access at arbitrary locations already has caused data loss with some backup programs. 4. MTBSF - backspace over file mark and position at its EOT side ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ftape-2.x didn't handle the MTBSF tape operation correctly. A MTBSF call (i.e. "mt -f /dev/nqft0 bsf #COUNT") should space over #COUNT file marks and then position at the EOT tape side of the file mark. This has to be taken literally, i.e. "mt -f /dev/nqft0 bsf 1" should simply position at the start of the current volume. 5. Formatting ~~~~~~~~~~ ftape-3.x DOES support formatting of floppy tape cartridges. You need the `ftformat' program that is shipped with the modules version of ftape-3.x. Please get the latest version of ftape from ftp://sunsite.unc.edu/pub/Linux/kernel/tapes or from the ftape home page at http://www-math.math.rwth-aachen.de/~LBFM/claus/ftape `ftformat' is contained in the `./contrib/' subdirectory of that separate ftape package. 6. Interchanging cartridges with other operating systems ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The internal emulation of Unix tape device file marks has changed completely. ftape-3.x now uses the volume table segment as specified by the QIC-40/80/3010/3020/113 standards to emulate file marks. As a consequence there is limited support to interchange cartridges with other operating systems. To be more precise: ftape will detect volumes written by other OS's programs and other OS's programs will detect volumes written by ftape-3.x. However, it isn't possible to extract the data dumped to the tape by some MSDOG program with ftape-3.x. This exceeds the scope of a kernel device driver. If you need such functionality, then go ahead and write a user space utility that is able to do that. ftape-3.x/zftape already provides all kernel level support necessary to do that. ******************************************************************************* B. Debugging Output ================ 1. Introduction ~~~~~~~~~~~~ The ftape driver can be very noisy in that is can print lots of debugging messages to the kernel log files and the system console. While this is useful for debugging it might be annoying during normal use and enlarges the size of the driver by several kilobytes. To reduce the size of the driver you can trim the maximal amount of debugging information available during kernel configuration. Please refer to the kernel configuration script and its on-line help functionality. The amount of debugging output maps to the "tracing" boot time option and the "ft_tracing" modules option as follows: 0 bugs 1 + errors (with call-stack dump) 2 + warnings 3 + information 4 + more information 5 + program flow 6 + fdc/dma info 7 + data flow 8 + everything else 2. Tuning the debugging output ~~~~~~~~~~~~~~~~~~~~~~~~~~~ To reduce the amount of debugging output printed to the system console you can i) trim the debugging output at run-time with mt -f /dev/nqft0 setdensity #DBGLVL where "#DBGLVL" is a number between 0 and 9 ii) trim the debugging output at module load time with insmod ftape.o ft_tracing=#DBGLVL Of course, this applies only if you have configured ftape to be compiled as a module. iii) trim the debugging output during system boot time. Add the following to the kernel command line: ftape=#DBGLVL,tracing Please refer also to the next section if you don't know how to set boot time parameters. ******************************************************************************* C. Boot and load time configuration ================================ 1. Setting boot time parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Assuming that you use lilo, the LI)nux LO)ader, boot time kernel parameters can be set by adding a line append some_kernel_boot_time_parameter to `/etc/lilo.conf' or at real boot time by typing in the options at the prompt provided by LILO. I can't give you advice on how to specify those parameters with other loaders as I don't use them. For ftape, each "some_kernel_boot_time_parameter" looks like "ftape=value,option". As an example, the debugging output can be increased with ftape=4,tracing NOTE: the value precedes the option name. 2. Module load time parameters ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Module parameters can be specified either directly when invoking the program 'insmod' at the shell prompt: insmod ftape.o ft_tracing=4 or by editing the file `/etc/conf.modules' in which case they take effect each time when the module is loaded with `modprobe' (please refer to the modules documentation, i.e. `modules.txt' and the respective manual pages). Thus, you should add a line options ftape ft_tracing=4 to `/etc/conf.modules` if you intend to increase the debugging output of the driver. 3. Ftape boot- and load time options ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ i. Controlling the amount of debugging output DBGLVL has to be replaced by a number between 0 and 8. module | kernel command line -----------------------|---------------------- ft_tracing=DBGLVL | ftape=DBGLVL,tracing ii. Hardware setup BASE is the base address of your floppy disk controller, IRQ and DMA give its interrupt and DMA channel, respectively. BOOL is an integer, "0" means "no"; any other value means "yes". You don't need to specify anything if connecting your tape drive to the standard floppy disk controller. All of these values have reasonable defaults. The defaults can be modified during kernel configuration, i.e. while running "make config", "make menuconfig" or "make xconfig" in the top level directory of the Linux kernel source tree. Please refer also to the on line documentation provided during that kernel configuration process. module | kernel command line -----------------------|---------------------- ft_fdc_base=BASE | ftape=BASE,ioport ft_fdc_irq=IRQ | ftape=IRQ,irq ft_fdc_dma=DMA | ftape=DMA,dma ft_probe_fc10=BOOL | ftape=BOOL,fc10 ft_mach2=BOOL | ftape=BOOL,mach2 ft_fdc_threshold=THR | ftape=THR,threshold ft_fdc_rate_limit=RATE | ftape=RATE,datarate 4. Example kernel parameter setting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To configure ftape to probe for a Colorado FC-10/FC-20 controller and to increase the amount of debugging output a little bit, add the following line to `/etc/lilo.conf': append ftape=1,fc10 ftape=4,tracing 5. Example module parameter setting ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To do the same, but with ftape compiled as a loadable kernel module, add the following line to `/etc/conf.modules': options ftape ft_probe_fc10=1 ft_tracing=4 ******************************************************************************* D. Support and contacts ==================== Ftape is distributed under the GNU General Public License. There is absolutely no warranty for this software. However, you can reach the current maintainer of the ftape package under the email address given in the MAINTAINERS file which is located in the top level directory of the Linux kernel source tree. There you'll find also the relevant mailing list to use as a discussion forum and the web page to query for the most recent documentation, related work and development versions of ftape. LocalWords: ftape Linux zftape http www rwth aachen LBFM claus EOD config LocalWords: datarate LocalWords BOT MTBSF EOT HOWTO QIC tpqic menuconfig LocalWords: MTIOCTOP MTSETBLK mt dev qft setblk BLKSZ bsf zftape's xconfig LocalWords: nqft ftformat ftp sunsite unc edu contrib ft MSDOG fdc LocalWords: dma setdensity DBGLVL insmod lilo LI nux ader conf txt LocalWords: modprobe IRQ BOOL ioport irq fc mach THR HAYES ESP DRIVER VERSION 2.1 A big thanks to the people at Hayes, especially Alan Adamson. Their support has enabled me to provide enhancements to the driver. Please report your experiences with this driver to me (arobinso@nyx.net). I am looking for both positive and negative feedback. *** IMPORTANT CHANGES FOR 2.1 *** Support for PIO mode. Five situations will cause PIO mode to be used: 1) A multiport card is detected. PIO mode will always be used. (8 port cards do not support DMA). 2) The DMA channel is set to an invalid value (anything other than 1 or 3). 3) The DMA buffer/channel could not be allocated. The port will revert to PIO mode until it is reopened. 4) Less than a specified number of bytes need to be transferred to/from the FIFOs. PIO mode will be used for that transfer only. 5) A port needs to do a DMA transfer and another port is already using the DMA channel. PIO mode will be used for that transfer only. Since the Hayes ESP seems to conflict with other cards (notably sound cards) when using DMA, DMA is turned off by default. To use DMA, it must be turned on explicitly, either with the "dma=" option described below or with setserial. A multiport card can be forced into DMA mode by using setserial; however, most multiport cards don't support DMA. The latest version of setserial allows the enhanced configuration of the ESP card to be viewed and modified. *** This package contains the files needed to compile a module to support the Hayes ESP card. The drivers are basically a modified version of the serial drivers. Features: - Uses the enhanced mode of the ESP card, allowing a wider range of interrupts and features than compatibility mode - Uses DMA and 16 bit PIO mode to transfer data to and from the ESP's FIFOs, reducing CPU load - Supports primary and secondary ports If the driver is compiled as a module, the IRQs to use can be specified by using the irq= option. The format is: irq=[0x100],[0x140],[0x180],[0x200],[0x240],[0x280],[0x300],[0x380] The address in brackets is the base address of the card. The IRQ of nonexistent cards can be set to 0. If an IRQ of a card that does exist is set to 0, the driver will attempt to guess at the correct IRQ. For example, to set the IRQ of the card at address 0x300 to 12, the insmod command would be: insmod esp irq=0,0,0,0,0,0,12,0 The custom divisor can be set by using the divisor= option. The format is the same as for the irq= option. Each divisor value is a series of hex digits, with each digit representing the divisor to use for a corresponding port. The divisor value is constructed RIGHT TO LEFT. Specifying a nonzero divisor value will automatically set the spd_cust flag. To calculate the divisor to use for a certain baud rate, divide the port's base baud (generally 921600) by the desired rate. For example, to set the divisor of the primary port at 0x300 to 4 and the divisor of the secondary port at 0x308 to 8, the insmod command would be: insmod esp divisor=0,0,0,0,0,0,0x84,0 The dma= option can be used to set the DMA channel. The channel can be either 1 or 3. Specifying any other value will force the driver to use PIO mode. For example, to set the DMA channel to 3, the insmod command would be: insmod esp dma=3 The rx_trigger= and tx_trigger= options can be used to set the FIFO trigger levels. They specify when the ESP card should send an interrupt. Larger values will decrease the number of interrupts; however, a value too high may result in data loss. Valid values are 1 through 1023, with 768 being the default. For example, to set the receive trigger level to 512 bytes and the transmit trigger level to 700 bytes, the insmod command would be: insmod esp rx_trigger=512 tx_trigger=700 The flow_off= and flow_on= options can be used to set the hardware flow off/ flow on levels. The flow on level must be lower than the flow off level, and the flow off level should be higher than rx_trigger. Valid values are 1 through 1023, with 1016 being the default flow off level and 944 being the default flow on level. For example, to set the flow off level to 1000 bytes and the flow on level to 935 bytes, the insmod command would be: insmod esp flow_off=1000 flow_on=935 The rx_timeout= option can be used to set the receive timeout value. This value indicates how long after receiving the last character that the ESP card should wait before signalling an interrupt. Valid values are 0 though 255, with 128 being the default. A value too high will increase latency, and a value too low will cause unnecessary interrupts. For example, to set the receive timeout to 255, the insmod command would be: insmod esp rx_timeout=255 The pio_threshold= option sets the threshold (in number of characters) for using PIO mode instead of DMA mode. For example, if this value is 32, transfers of 32 bytes or less will always use PIO mode. insmod esp pio_threshold=32 Multiple options can be listed on the insmod command line by separating each option with a space. For example: insmod esp dma=3 trigger=512 The esp module can be automatically loaded when needed. To cause this to happen, add the following lines to /etc/conf.modules (replacing the last line with options for your configuration): alias char-major-57 esp alias char-major-58 esp options esp irq=0,0,0,0,0,0,3,0 divisor=0,0,0,0,0,0,0x4,0 You may also need to run 'depmod -a'. Devices must be created manually. To create the devices, note the output from the module after it is inserted. The output will appear in the location where kernel messages usually appear (usually /var/adm/messages). Create two devices for each 'tty' mentioned, one with major of 57 and the other with major of 58. The minor number should be the same as the tty number reported. The commands would be (replace ? with the tty number): mknod /dev/ttyP? c 57 ? mknod /dev/cup? c 58 ? For example, if the following line appears: Oct 24 18:17:23 techno kernel: ttyP8 at 0x0140 (irq = 3) is an ESP primary port ...two devices should be created: mknod /dev/ttyP8 c 57 8 mknod /dev/cup8 c 58 8 You may need to set the permissions on the devices: chmod 666 /dev/ttyP* chmod 666 /dev/cup* The ESP module and the serial module should not conflict (they can be used at the same time). After the ESP module has been loaded the ports on the ESP card will no longer be accessible by the serial driver. If I/O errors are experienced when accessing the port, check for IRQ and DMA conflicts ('cat /proc/interrupts' and 'cat /proc/dma' for a list of IRQs and DMAs currently in use). Enjoy! Andrew J. Robinson Hardware driver for Intel i810 Random Number Generator (RNG) Copyright 2000,2001 Jeff Garzik Copyright 2000,2001 Philipp Rumpf Introduction: The i810_rng device driver is software that makes use of a special hardware feature on the Intel i8xx-based chipsets, a Random Number Generator (RNG). In order to make effective use of this device driver, you should download the support software as well. Download the latest version of the "intel-rng-tools" package from the i810_rng driver's official Web site: http://sourceforge.net/projects/gkernel/ About the Intel RNG hardware, from the firmware hub datasheet: The Firmware Hub integrates a Random Number Generator (RNG) using thermal noise generated from inherently random quantum mechanical properties of silicon. When not generating new random bits the RNG circuitry will enter a low power state. Intel will provide a binary software driver to give third party software access to our RNG for use as a security feature. At this time, the RNG is only to be used with a system in an OS-present state. Theory of operation: Character driver. Using the standard open() and read() system calls, you can read random data from the i810 RNG device. This data is NOT CHECKED by any fitness tests, and could potentially be bogus (if the hardware is faulty or has been tampered with). Data is only output if the hardware "has-data" flag is set, but nevertheless a security-conscious person would run fitness tests on the data before assuming it is truly random. /dev/intel_rng is char device major 10, minor 183. Driver notes: * FIXME: support poll(2) NOTE: request_mem_region was removed, for two reasons: 1) Only one RNG is supported by this driver, 2) The location used by the RNG is a fixed location in MMIO-addressable memory, 3) users with properly working BIOS e820 handling will always have the region in which the RNG is located reserved, so request_mem_region calls always fail for proper setups. However, for people who use mem=XX, BIOS e820 information is -not- in /proc/iomem, and request_mem_region(RNG_ADDR) can succeed. Driver details: Based on: Intel 82802AB/82802AC Firmware Hub (FWH) Datasheet May 1999 Order Number: 290658-002 R Intel 82802 Firmware Hub: Random Number Generator Programmer's Reference Manual December 1999 Order Number: 298029-001 R Intel 82802 Firmware HUB Random Number Generator Driver Copyright (c) 2000 Matt Sottek Special thanks to Matt Sottek. I did the "guts", he did the "brains" and all the testing. Change history: Version 0.9.6: * Internal driver cleanups, prep for 1.0.0 release. Version 0.9.5: * Rip out entropy injection via timer. It never ever worked, and a better solution (rngd) is now available. Version 0.9.4: * Fix: Remove request_mem_region * Fix: Horrible bugs in FIPS calculation and test execution Version 0.9.3: * Clean up rng_read a bit. * Update i810_rng driver Web site URL. * Increase default timer interval to 4 samples per second. * Abort if mem region is not available. * BSS zero-initialization cleanup. * Call misc_register() from rng_init_one. * Fix O_NONBLOCK to occur before we schedule. Version 0.9.2: * Simplify open blocking logic Version 0.9.1: * Support i815 chipsets too (Matt Sottek) * Fix reference counting when statically compiled (prumpf) * Rewrite rng_dev_read (prumpf) * Make module races less likely (prumpf) * Small miscellaneous bug fixes (prumpf) * Use pci table for PCI id list Version 0.9.0: * Don't register a pci_driver, because we are really using PCI bridge vendor/device ids, and someone may want to register a driver for the bridge. (bug fix) * Don't let the usage count go negative (bug fix) * Clean up spinlocks (bug fix) * Enable PCI device, if necessary (bug fix) * iounmap on module unload (bug fix) * If RNG chrdev is already in use when open(2) is called, sleep until it is available. * Remove redundant globals rng_allocated, rng_use_count * Convert numeric globals to unsigned * Module unload cleanup Version 0.6.2: * Clean up spinlocks. Since we don't have any interrupts to worry about, but we do have a timer to worry about, we use spin_lock_bh everywhere except the timer function itself. * Fix module load/unload. * Fix timer function and h/w enable/disable logic * New timer interval sysctl * Clean up sysctl names ide.txt -- Information regarding the Enhanced IDE drive in Linux 2.1/2.2 =============================================================================== +-----------------------------------------------------------------+ | The hdparm utility for controlling various IDE features is | | packaged separately. Look for it on popular linux FTP sites. | +-----------------------------------------------------------------+ See description later on below for handling BIG IDE drives with >1024 cyls. Major features of the 2.1/2.2 IDE driver ("NEW!" marks changes since 2.0.xx): NEW! - support for IDE ATAPI *floppy* drives - support for IDE ATAPI *tape* drives, courtesy of Gadi Oxman (re-run MAKEDEV.ide to create the tape device entries in /dev/) - support for up to *four* IDE interfaces on one or more IRQs - support for any mix of up to *eight* IDE drives - support for reading IDE ATAPI cdrom drives (NEC,MITSUMI,VERTOS,SONY) - support for audio functions - auto-detection of interfaces, drives, IRQs, and disk geometries - "single" drives should be jumpered as "master", not "slave" (both are now probed for) - support for BIOSs which report "more than 16 heads" on disk drives - uses LBA (slightly faster) on disk drives which support it - support for lots of fancy (E)IDE drive functions with hdparm utility - optional (compile time) support for 32-bit VLB data transfers - support for IDE multiple (block) mode (same as hd.c) - support for interrupt unmasking during I/O (better than hd.c) - improved handshaking and error detection/recovery - can co-exist with hd.c controlling the first interface - run-time selectable 32bit interface support (using hdparm-2.3) - support for reliable operation of buggy RZ1000 interfaces - PCI support is automatic when rz1000 support is configured - support for reliable operation of buggy CMD-640 interfaces - PCI support is automatic when cmd640 support is configured - for VLB, use kernel command line option: ide0=cmd640_vlb - this support also enables the secondary i/f when needed - interface PIO timing & prefetch parameter support - experimental support for UMC 8672 interfaces - support for secondary interface on the FGI/Holtek HT-6560B VLB i/f - use kernel command line option: ide0=ht6560 - experimental support for various IDE chipsets - use appropriate kernel command line option from list below - support for drives with a stuck WRERR_STAT bit - support for removable devices, including door lock/unlock - transparent support for DiskManager 6.0x and "Dynamic Disk Overlay" - works with Linux fdisk, LILO, loadlin, bootln, etc.. - mostly transparent support for EZ-Drive disk translation software - to use LILO with EZ, install LILO on the linux partition rather than on the master boot record, and then mark the linux partition as "bootable" or "active" using fdisk. (courtesy of Juha Laiho ). - auto-detect of disk translations by examining partition table - ide-cd.c now compiles separate from ide.c - ide-cd.c now supports door locking and auto-loading. - Also preliminary support for multisession and direct reads of audio data. - experimental support for Promise DC4030VL caching interface card - email thanks/problems to: peterd@pnd-pc.demon.co.uk - the hdparm-3.1 package can be used to set PIO modes for some chipsets. NEW! - support for setting PIO modes with the OPTi 82C621, courtesy of Jaromir Koutek. NEW! - support for loadable modules NEW! - optional SCSI host adapter emulation for ATAPI devices NEW! - generic PCI Bus-Master DMA support NEW! - works with most Pentium PCI systems, chipsets, add-on cards NEW! - works with regular DMA as well as Ultra DMA NEW! - automatically probes for all PCI IDE interfaces NEW! - generic support for using BIOS-configured Ultra-DMA (UDMA) transfers *** IMPORTANT NOTICES: BUGGY IDE CHIPSETS CAN CORRUPT DATA!! *** ================= *** PCI versions of the CMD640 and RZ1000 interfaces are now detected *** automatically at startup when PCI BIOS support is configured. *** *** Linux disables the "prefetch" ("readahead") mode of the RZ1000 *** to prevent data corruption possible due to hardware design flaws. *** *** For the CMD640, linux disables "IRQ unmasking" (hdparm -u1) on any *** drive for which the "prefetch" mode of the CMD640 is turned on. *** If "prefetch" is disabled (hdparm -p8), then "IRQ unmasking" can be *** used again. *** *** For the CMD640, linux disables "32bit I/O" (hdparm -c1) on any drive *** for which the "prefetch" mode of the CMD640 is turned off. *** If "prefetch" is enabled (hdparm -p9), then "32bit I/O" can be *** used again. *** *** The CMD640 is also used on some Vesa Local Bus (VLB) cards, and is *NOT* *** automatically detected by Linux. For safe, reliable operation with such *** interfaces, one *MUST* use the "ide0=cmd640_vlb" kernel option. *** *** Use of the "serialize" option is no longer necessary. This is the multiple IDE interface driver, as evolved from hd.c. It supports up to six IDE interfaces, on one or more IRQs (usually 14 & 15). There can be up to two drives per interface, as per the ATA-2 spec. Primary: ide0, port 0x1f0; major=3; hda is minor=0; hdb is minor=64 Secondary: ide1, port 0x170; major=22; hdc is minor=0; hdd is minor=64 Tertiary: ide2, port 0x1e8; major=33; hde is minor=0; hdf is minor=64 Quaternary: ide3, port 0x168; major=34; hdg is minor=0; hdh is minor=64 fifth.. ide4, usually PCI, probed sixth.. ide5, usually PCI, probed To access devices on interfaces > ide0, device entries must first be created in /dev for them. To create such entries, simply run the included shell script: /usr/src/linux/scripts/MAKEDEV.ide Apparently many older releases of Slackware had incorrect entries in /dev for hdc* and hdd* -- this can also be corrected by running MAKEDEV.ide ide.c automatically probes for most IDE interfaces (including all PCI ones), for the drives/geometries attached to those interfaces, and for the IRQ numbers being used by the interfaces (normally 14, 15 for ide0/ide1). For special cases, interfaces may be specified using kernel "command line" options. For example, ide3=0x168,0x36e,10 /* ioports 0x168-0x16f,0x36e, irq 10 */ Normally the irq number need not be specified, as ide.c will probe for it: ide3=0x168,0x36e /* ioports 0x168-0x16f,0x36e */ The standard port, and irq values are these: ide0=0x1f0,0x3f6,14 ide1=0x170,0x376,15 ide2=0x1e8,0x3ee,11 ide3=0x168,0x36e,10 Note that the first parameter reserves 8 contiguous ioports, whereas the second value denotes a single ioport. If in doubt, do a 'cat /proc/ioports'. In all probability the device uses these ports and IRQs if it is attached to the appropriate ide channel. Pass the parameter for the correct ide channel to the kernel, as explained above. Any number of interfaces may share a single IRQ if necessary, at a slight performance penalty, whether on separate cards or a single VLB card. The IDE driver automatically detects and handles this. However, this may or may not be harmful to your hardware.. two or more cards driving the same IRQ can potentially burn each other's bus driver, though in practice this seldom occurs. Be careful, and if in doubt, don't do it! Drives are normally found by auto-probing and/or examining the CMOS/BIOS data. For really weird situations, the apparent (fdisk) geometry can also be specified on the kernel "command line" using LILO. The format of such lines is: hdx=cyls,heads,sects,wpcom,irq or hdx=cdrom where hdx can be any of hda through hdh, Three values are required (cyls,heads,sects). For example: hdc=1050,32,64 hdd=cdrom either {hda,hdb} or {hdc,hdd}. The results of successful auto-probing may override the physical geometry/irq specified, though the "original" geometry may be retained as the "logical" geometry for partitioning purposes (fdisk). If the auto-probing during boot time confuses a drive (ie. the drive works with hd.c but not with ide.c), then an command line option may be specified for each drive for which you'd like the drive to skip the hardware probe/identification sequence. For example: hdb=noprobe or hdc=768,16,32 hdc=noprobe Note that when only one IDE device is attached to an interface, it should be jumpered as "single" or "master", *not* "slave". Many folks have had "trouble" with cdroms because of this requirement, so ide.c now probes for both units, though success is more likely when the drive is jumpered correctly. Courtesy of Scott Snyder and others, the driver supports ATAPI cdrom drives such as the NEC-260 and the new MITSUMI triple/quad speed drives. Such drives will be identified at boot time, just like a hard disk. If for some reason your cdrom drive is *not* found at boot time, you can force the probe to look harder by supplying a kernel command line parameter via LILO, such as: hdc=cdrom /* hdc = "master" on second interface */ or hdd=cdrom /* hdd = "slave" on second interface */ For example, a GW2000 system might have a hard drive on the primary interface (/dev/hda) and an IDE cdrom drive on the secondary interface (/dev/hdc). To mount a CD in the cdrom drive, one would use something like: ln -sf /dev/hdc /dev/cdrom mkdir /cd mount /dev/cdrom /cd -t iso9660 -o ro If, after doing all of the above, mount doesn't work and you see errors from the driver (with dmesg) complaining about `status=0xff', this means that the hardware is not responding to the driver's attempts to read it. One of the following is probably the problem: - Your hardware is broken. - You are using the wrong address for the device, or you have the drive jumpered wrong. Review the configuration instructions above. - Your IDE controller requires some nonstandard initialization sequence before it will work properly. If this is the case, there will often be a separate MS-DOS driver just for the controller. IDE interfaces on sound cards usually fall into this category. Such configurations can often be made to work by first booting MS-DOS, loading the appropriate drivers, and then warm-booting linux (without powering off). This can be automated using loadlin in the MS-DOS autoexec. If you always get timeout errors, interrupts from the drive are probably not making it to the host. Check how you have the hardware jumpered and make sure it matches what the driver expects (see the configuration instructions above). If you have a PCI system, also check the BIOS setup; I've had one report of a system which was shipped with IRQ 15 disabled by the BIOS. The kernel is able to execute binaries directly off of the cdrom, provided it is mounted with the default block size of 1024 (as above). Please pass on any feedback on any of this stuff to the maintainer, whose address can be found in linux/MAINTAINERS. Note that if BOTH hd.c and ide.c are configured into the kernel, hd.c will normally be allowed to control the primary IDE interface. This is useful for older hardware that may be incompatible with ide.c, and still allows newer hardware to run on the 2nd/3rd/4th IDE ports under control of ide.c. To have ide.c also "take over" the primary IDE port in this situation, use the "command line" parameter: ide0=0x1f0 The IDE driver is partly modularized. The high level disk/cdrom/tape/floppy drivers can always be compiled as loadable modules, the chipset drivers can only be compiled into the kernel, and the core code (ide.c) can be compiled as a loadable module provided no chipset support and no special partition table translations are needed. When using ide.c/ide-tape.c as modules in combination with kerneld, add: alias block-major-3 ide-probe alias char-major-37 ide-tape respectively to /etc/conf.modules. When ide.c is used as a module, you can pass command line parameters to the driver using the "options=" keyword to insmod, while replacing any ',' with ';'. For example: insmod ide.o options="ide0=serialize ide2=0x1e8;0x3ee;11" ================================================================================ Summary of ide driver parameters for kernel "command line": ---------------------------------------------------------- "hdx=" is recognized for all "x" from "a" to "h", such as "hdc". "idex=" is recognized for all "x" from "0" to "3", such as "ide1". "hdx=noprobe" : drive may be present, but do not probe for it "hdx=none" : drive is NOT present, ignore cmos and do not probe "hdx=nowerr" : ignore the WRERR_STAT bit on this drive "hdx=cdrom" : drive is present, and is a cdrom drive "hdx=cyl,head,sect" : disk drive is present, with specified geometry "hdx=autotune" : driver will attempt to tune interface speed to the fastest PIO mode supported, if possible for this drive only. Not fully supported by all chipset types, and quite likely to cause trouble with older/odd IDE drives. "hdx=slow" : insert a huge pause after each access to the data port. Should be used only as a last resort. "hdx=swapdata" : when the drive is a disk, byte swap all data "idebus=xx" : inform IDE driver of VESA/PCI bus speed in MHz, where "xx" is between 20 and 66 inclusive, used when tuning chipset PIO modes. For PCI bus, 25 is correct for a P75 system, 30 is correct for P90,P120,P180 systems, and 33 is used for P100,P133,P166 systems. If in doubt, use idebus=33 for PCI. As for VLB, it is safest to not specify it. Bigger values are safer than smaller ones. "idex=noprobe" : do not attempt to access/use this interface "idex=base" : probe for an interface at the addr specified, where "base" is usually 0x1f0 or 0x170 and "ctl" is assumed to be "base"+0x206 "idex=base,ctl" : specify both base and ctl "idex=base,ctl,irq" : specify base, ctl, and irq number "idex=autotune" : driver will attempt to tune interface speed to the fastest PIO mode supported, for all drives on this interface. Not fully supported by all chipset types, and quite likely to cause trouble with older/odd IDE drives. "idex=noautotune" : driver will NOT attempt to tune interface speed This is the default for most chipsets, except the cmd640. "idex=serialize" : do not overlap operations on idex and ide(x^1) "idex=reset" : reset interface after probe "idex=dma" : automatically configure/use DMA if possible. The following are valid ONLY on ide0, and the defaults for the base,ctl ports must not be altered. "ide0=dtc2278" : probe/support DTC2278 interface "ide0=ht6560b" : probe/support HT6560B interface "ide0=cmd640_vlb" : *REQUIRED* for VLB cards with the CMD640 chip (not for PCI -- automatically detected) "ide0=qd6580" : probe/support qd6580 interface "ide0=ali14xx" : probe/support ali14xx chipsets (ALI M1439/M1445) "ide0=umc8672" : probe/support umc8672 chipsets There may be more options than shown -- use the source, Luke! Everything else is rejected with a "BAD OPTION" message. ================================================================================ Some Terminology ---------------- IDE = Integrated Drive Electronics, meaning that each drive has a built-in controller, which is why an "IDE interface card" is not a "controller card". IDE drives are designed to attach almost directly to the ISA bus of an AT-style computer. The typical IDE interface card merely provides I/O port address decoding and tri-state buffers, although several newer localbus cards go much beyond the basics. When purchasing a localbus IDE interface, avoid cards with an onboard BIOS and those which require special drivers. Instead, look for a card which uses hardware switches/jumpers to select the interface timing speed, to allow much faster data transfers than the original 8MHz ISA bus allows. ATA = AT (the old IBM 286 computer) Attachment Interface, a draft American National Standard for connecting hard drives to PCs. This is the official name for "IDE". The latest standards define some enhancements, known as the ATA-2 spec, which grew out of vendor-specific "Enhanced IDE" (EIDE) implementations. ATAPI = ATA Packet Interface, a new protocol for controlling the drives, similar to SCSI protocols, created at the same time as the ATA2 standard. ATAPI is currently used for controlling CDROM and TAPE devices, and will likely also soon be used for Floppy drives, removable R/W cartridges, and for high capacity hard disk drives. How To Use *Big* ATA/IDE drives with Linux ------------------------------------------ The ATA Interface spec for IDE disk drives allows a total of 28 bits (8 bits for sector, 16 bits for cylinder, and 4 bits for head) for addressing individual disk sectors of 512 bytes each (in "Linear Block Address" (LBA) mode, there is still only a total of 28 bits available in the hardware). This "limits" the capacity of an IDE drive to no more than 128GB (Giga-bytes). All current day IDE drives are somewhat smaller than this upper limit, and within a few years, ATAPI disk drives will raise the limit considerably. All IDE disk drives "suffer" from a "16-heads" limitation: the hardware has only a four bit field for head selection, restricting the number of "physical" heads to 16 or less. Since the BIOS usually has a 63 sectors/track limit, this means that all IDE drivers larger than 504MB (528Meg) must use a "physical" geometry with more than 1024 cylinders. (1024cyls * 16heads * 63sects * 512bytes/sector) / (1024 * 1024) == 504MB (Some BIOSs (and controllers with onboard BIOS) pretend to allow "32" or "64" heads per drive (discussed below), but can only do so by playing games with the real (hidden) geometry, which is always limited to 16 or fewer heads). This presents two problems to most systems: 1. The INT13 interface to the BIOS only allows 10-bits for cylinder addresses, giving a limit of 1024cyls for programs which use it. 2. The physical geometry fields of the disk partition table only allow 10-bits for cylinder addresses, giving a similar limit of 1024 cyls for operating systems that do not use the "sector count" fields instead of the physical Cyl/Head/Sect (CHS) geometry fields. Neither of these limitations affects Linux itself, as it (1) does not use the BIOS for disk access, and it (2) is clever enough to use the "sector count" fields of the partition table instead of the physical CHS geometry fields. a) Most folks use LILO to load linux. LILO uses the INT13 interface to the BIOS to load the kernel at boot time. Therefore, LILO can only load linux if the files it needs (usually just the kernel images) are located below the magic 1024 cylinder "boundary" (more on this later). b) Many folks also like to have bootable DOS partitions on their drive(s). DOS also uses the INT13 interface to the BIOS, not only for booting, but also for operation after booting. Therefore, DOS can normally only access partitions which are contained entirely below the magic 1024 cylinder "boundary". There are at least seven commonly used schemes for kludging DOS to work around this "limitation". In the long term, the problem is being solved by introduction of an alternative BIOS interface that does not have the same limitations as the INT13 interface. New versions of DOS are expected to detect and use this interface in systems whose BIOS provides it. But in the present day, alternative solutions are necessary. The most popular solution in newer systems is to have the BIOS shift bits between the cylinder and head number fields. This is activated by entering a translated logical geometry into the BIOS/CMOS setup for the drive. Thus, if the drive has a geometry of 2100/16/63 (CHS), then the BIOS could present a "logical" geometry of 525/64/63 by "shifting" two bits from the cylinder number into the head number field for purposes of the partition table, CMOS setup, and INT13 interfaces. Linux kernels 1.1.39 and higher detect and "handle" this translation automatically, making this a rather painless solution for the 1024 cyls problem. If for some reason Linux gets confused (unlikely), then use the kernel command line parameters to pass the *logical* geometry, as in: hda=525,64,63 If the BIOS does not support this form of drive translation, then several options remain, listed below in order of popularity: - use a partition below the 1024 cyl boundary to hold the linux boot files (kernel images and /boot directory), and place the rest of linux anywhere else on the drive. These files can reside in a DOS partition, or in a tailor-made linux boot partition. - use DiskManager software from OnTrack, supplied free with many new hard drive purchases. - use EZ-Drive software (similar to DiskManager). Note though, that LILO must *not* use the MBR when EZ-Drive is present. Instead, install LILO on the first sector of your linux partition, and mark it as "active" or "bootable" with fdisk. - boot from a floppy disk instead of the hard drive (takes 10 seconds). If you cannot use drive translation, *and* your BIOS also restricts you to entering no more than 1024 cylinders in the geometry field in the CMOS setup, then just set it to 1024. As of v3.5 of this driver, Linux automatically determines the *real* number of cylinders for fdisk to use, allowing easy access to the full disk capacity without having to fiddle around. Regardless of what you do, all DOS partitions *must* be contained entirely within the first 1024 logical cylinders. For a 1Gig WD disk drive, here's a good "half and half" partitioning scheme to start with: geometry = 2100/16/63 /dev/hda1 from cyl 1 to 992 dos /dev/hda2 from cyl 993 to 1023 swap /dev/hda3 from cyl 1024 to 2100 linux To ensure that LILO can boot linux, the boot files (kernel and /boot/*) must reside within the first 1024 cylinders of the drive. If your linux root partition is *not* completely within the first 1024 cyls (quite common), then you can use LILO to boot linux from files on your DOS partition by doing the following after installing Slackware (or whatever): 0. Boot from the "boot floppy" created during the installation 1. Mount your DOS partition as /dos (and stick it in /etc/fstab) 2. Move /boot to /dos/boot with: cp -a /boot /dos ; rm -r /boot 3. Create a symlink for LILO to use with: ln -s /dos/boot /boot 4. Move your kernel (/vmlinuz) to /boot/vmlinuz: mv /vmlinuz /boot 5. Edit /etc/lilo.conf to change /vmlinuz to /boot/vmlinuz 6. Re-run LILO with: lilo A danger with this approach is that whenever an MS-DOS "defragmentation" program is run (like Norton "speeddisk"), it may move the Linux boot files around, confusing LILO and making the (Linux) system unbootable. Be sure to keep a kernel "boot floppy" at hand for such circumstances. A possible workaround is to mark the Linux files as S+H+R (System, Hidden, Readonly), to prevent most defragmentation programs from moving the files around. If you "don't do DOS", then partition as you please, but remember to create a small partition to hold the /boot directory (and vmlinuz) as described above such that they stay within the first 1024 cylinders. Note that when creating partitions that span beyond cylinder 1024, Linux fdisk will complain about "Partition X has different physical/logical endings" and emit messages such as "This is larger than 1024, and may cause problems with some software". Ignore this for linux partitions. The "some software" refers to DOS, the BIOS, and LILO, as described previously. Western Digital ships a "DiskManager 6.03" diskette with all of their big hard drives. Use BIOS translation instead of this if possible, as it is a more generally compatible method of achieving the same results (DOS access to the entire disk). However, if you must use DiskManager, it now works with Linux 1.3.x in most cases. Let me know if you still have trouble. My recommendations to anyone who asks about NEW systems are: - buy a motherboard that uses the Intel Triton chipset -- very common. - use IDE for the first two drives, placing them on separate interfaces. - very fast 7200rpm drives are now available (though many problems have been reported with Seagate ones). - place the IDE cdrom drive as slave on either interface. - if additional disks are to be connected, consider your needs: - fileserver? Buy a SC200 SCSI adaptor for the next few drives. - personal system? Use IDE for the next two drives. - still not enough? Keep adding SC200 SCSI cards as needed. Most manufacturers make both IDE and SCSI versions of each of their drives. The IDE ones are usually as fast and cheaper, due to lower command overhead and the higher data transfer speed of UDMA2. But fast/ultrawide/superlative SCSI is still king of the heap, especially for servers, if you've got the bucks. mlord@pobox.com -- For current maintainers of this stuff, see the linux/MAINTAINERS file. Using the initial RAM disk (initrd) =================================== Written 1996 by Werner Almesberger and Hans Lermen initrd adds the capability to load a RAM disk by the boot loader. This RAM disk can then be mounted as the root file system and programs can be run from it. Afterwards, a new root file system can be mounted from a different device. The previous root (from initrd) is then either moved to the directory /initrd or it is unmounted. initrd is mainly designed to allow system startup to occur in two phases, where the kernel comes up with a minimum set of compiled-in drivers, and where additional modules are loaded from initrd. Operation --------- When using initrd, the system boots as follows: 1) the boot loader loads the kernel and the initial RAM disk 2) the kernel converts initrd into a "normal" RAM disk and frees the memory used by initrd 3) initrd is mounted read-write as root 4) /linuxrc is executed (this can be any valid executable, including shell scripts; it is run with uid 0 and can do basically everything init can do) 5) when linuxrc terminates, the "real" root file system is mounted 6) if a directory /initrd exists, the initrd is moved there otherwise, initrd is unmounted 7) the usual boot sequence (e.g. invocation of /sbin/init) is performed on the root file system Note that moving initrd from / to /initrd does not involve unmounting it. It is therefore possible to leave processes running on initrd (or leave file systems mounted, but see below) during that procedure. However, if /initrd doesn't exist, initrd can only be unmounted if it is not used by anything. If it can't be unmounted, it will stay in memory. Also note that file systems mounted under initrd continue to be accessible, but their /proc/mounts entries are not updated. Also, if /initrd doesn't exist, initrd can't be unmounted and will "disappear" and take those file systems with it, thereby preventing them from being re-mounted. It is therefore strongly suggested to generally unmount all file systems (except of course for the root file system, but including /proc) before switching from initrd to the "normal" root file system. In order to deallocate the memory used for the initial RAM disk, you have to execute freeramdisk (see 'Resources' below) after unmounting /initrd. Boot command-line options ------------------------- initrd adds the following new options: initrd= (LOADLIN only) Loads the specified file as the initial RAM disk. When using LILO, you have to specify the RAM disk image file in /etc/lilo.conf, using the INITRD configuration variable. noinitrd initrd data is preserved but it is not converted to a RAM disk and the "normal" root file system is mounted. initrd data can be read from /dev/initrd. Note that the data in initrd can have any structure in this case and doesn't necessarily have to be a file system image. This option is used mainly for debugging. Note that /dev/initrd is read-only and that it can only be used once. As soon as the last process has closed it, all data is freed and /dev/initrd can't be opened any longer. root=/dev/ram initrd is mounted as root, and /linuxrc is started. If no /linuxrc exists, the normal boot procedure is followed, with the RAM disk still mounted as root. This option is mainly useful when booting from a floppy disk. Compared to directly mounting an on-disk file system, the intermediate step of going via initrd adds a little speed advantage and it allows the use of a compressed file system. Also, together with LOADLIN you may load the RAM disk directly from CDROM or disk, hence having a floppyless boot from CD, e.g.: E:\loadlin E:\bzImage root=/dev/ram initrd=E:\rdimage Installation ------------ First, the "normal" root file system has to be prepared as follows: # mknod /dev/initrd b 1 250 # chmod 400 /dev/initrd # mkdir /initrd If the root file system is created during the boot procedure (i.e. if you're creating an install floppy), the root file system creation procedure should perform these operations. Note that neither /dev/initrd nor /initrd are strictly required for correct operation of initrd, but it is a lot easier to experiment with initrd if you have them, and you may also want to use /initrd to pass data to the "real" system. Second, the kernel has to be compiled with RAM disk support and with support for the initial RAM disk enabled. Also, at least all components needed to execute programs from initrd (e.g. executable format and file system) must be compiled into the kernel. Third, you have to create the RAM disk image. This is done by creating a file system on a block device and then by copying files to it as needed. With recent kernels, at least three types of devices are suitable for that: - a floppy disk (works everywhere but it's painfully slow) - a RAM disk (fast, but allocates physical memory) - a loopback device (the most elegant solution, but currently requires a modified mount) We'll describe the RAM disk method: 1) make sure you have a RAM disk device /dev/ram (block, major 1, minor 0) 2) create an empty file system of the appropriate size, e.g. # mke2fs -m0 /dev/ram 300 (if space is critical, you may want to use the Minix FS instead of Ext2) 3) mount the file system on an appropriate directory, e.g. # mount -t ext2 /dev/ram /mnt 4) create the console device: # mkdir /mnt/dev # mknod /mnt/dev/tty1 c 4 1 5) copy all the files that are needed to properly use the initrd environment. Don't forget the most important file, /linuxrc Note that /linuxrc's permissions must include "x" (execute). 6) unmount the RAM disk # umount /dev/ram 7) copy the image to a file # dd if=/dev/ram bs=1k count=300 of=/boot/initrd 8) deallocate the RAM disk # freeramdisk /dev/ram For experimenting with initrd, you may want to take a rescue floppy (e.g. rescue.gz from Slackware) and only add a symbolic link from /linuxrc to /bin/sh, e.g. # gunzip /dev/ram # mount -t minix /dev/ram /mnt # ln -s /bin/sh /mnt/linuxrc # umount /dev/ram # dd if=/dev/ram bs=1k count=1440 of=/boot/initrd # freeramdisk /dev/ram Finally, you have to boot the kernel and load initrd. Currently, preliminary versions of LOADLIN 1.6 and LILO 18 support initrd (see below for where to get them). With LOADLIN, you simply execute LOADLIN initrd= e.g. LOADLIN C:\LINUX\VMLINUZ initrd=C:\LINUX\INITRD With LILO, you add the option INITRD= to either the global section or to the section of the respective kernel in /etc/lilo.conf, e.g. image = /vmlinuz initrd = /boot/initrd and run /sbin/lilo Now you can boot and enjoy using initrd. Setting the root device ----------------------- By default, the standard settings in the kernel are used for the root device, i.e. the default compiled in or set with rdev, or what was passed with root=xxx on the command line, or, with LILO, what was specified in /etc/lilo.conf It is also possible to use initrd with an NFS-mounted root; you have to use the nfs_root_name and nfs_root_addrs boot options for this. It is also possible to change the root device from within the initrd environment. In order to do so, /proc has to be mounted. Then, the following files are available: /proc/sys/kernel/real-root-dev /proc/sys/kernel/nfs-root-name /proc/sys/kernel/nfs-root-addrs real-root-dev can be changed by writing the number of the new root FS device to it, e.g. # echo 0x301 >/proc/sys/kernel/real-root-dev for /dev/hda1. When using an NFS-mounted root, nfs-root-name and nfs-root-addrs have to be set accordingly and then real-root-dev has to be set to 0xff, e.g. # echo /var/nfsroot >/proc/sys/kernel/nfs-root-name # echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \ >/proc/sys/kernel/nfs-root-addrs # echo 255 >/proc/sys/kernel/real-root-dev If the root device is set to the RAM disk, the root file system is not moved to /initrd, but the boot procedure is simply continued by starting init on the initial RAM disk. Usage scenarios --------------- The main motivation for implementing initrd was to allow for modular kernel configuration at system installation. The procedure would work as follows: 1) systems boots from floppy or other media with a minimal kernel (e.g. support for RAM disks, initrd, a.out, and the ext2 FS) and loads initrd 2) /linuxrc determines what is needed to (1) mount the "real" root FS (i.e. device type, device drivers, file system) and (2) the distribution media (e.g. CD-ROM, network, tape, ...). This can be done by asking the user, by auto-probing, or by using a hybrid approach. 3) /linuxrc loads the necessary modules 4) /linuxrc creates and populates the root file system (this doesn't have to be a very usable system yet) 5) /linuxrc unmounts the root file system and possibly any other file systems it has mounted, sets /proc/sys/kernel/..., and terminates 6) the root file system is mounted 7) now that we're sure that the file system is accessible and intact, the boot loader can be installed 8) the boot loader is configured to load an initrd with the set of modules that was used to bring up the system (e.g. /initrd can be modified, then unmounted, and finally, the image is written from /dev/ram to a file) 9) now the system is bootable and additional installation tasks can be performed The key role of initrd here is to re-use the configuration data during normal system operation without requiring the use of a bloated "generic" kernel or re-compilation or re-linking of the kernel. A second scenario is for installations where Linux runs on systems with different hardware configurations in a single administrative domain. In such cases, it is desirable to generate only a small set of kernels (ideally only one) and to keep the system-specific part of configuration information as small as possible. In this case, a common initrd could be generated with all the necessary modules. Then, only /linuxrc or a file read by it would have to be different. A third scenario are more convenient recovery disks, because information like the location of the root FS partition doesn't have to be provided at boot time, but the system loaded from initrd can use a user-friendly dialog and it can also perform some sanity checks (or even some form of auto-detection). Last not least, CDROM distributors may use it for better installation from CD, either using a LILO boot floppy and bootstrapping a bigger RAM disk via initrd from CD, or using LOADLIN to directly load the RAM disk from CD without need of floppies. Since initrd is a fairly generic mechanism, it is likely that additional uses will be found. Resources --------- The bzImage+initrd patch (bzImage is an extension to load kernels directly above 1 MB, which allows kernels sizes of up to approximately 2 MB) can be found at ftp://lrcftp.epfl.ch/pub/people/almesber/lilo/bzImage+initrd-1.3.71.patch.gz and ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/bzImage+initrd-1.3.71.patch.gz A preliminary version of LOADLIN 1.6 is available on ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/loadlin-1.6-pre8-bin.tgz A preliminary version of LILO 18 is available on ftp://lrcftp.epfl.ch/pub/people/almesber/lilo/lilo.18dev3.tar.gz A very simple example for building an image for initrd, also including the program 'freeramdisk', can be found on ftp://elserv.ffm.fgan.de/pub/linux/loadlin-1.6/initrd-example.tgz Most (all) Intel SMP boards have the so-called 'IO-APIC', which is an enhanced interrupt controller, able to route hardware interrupts to multiple CPUs, or to CPU groups. Linux supports the IO-APIC, but unfortunately there are broken boards out there which make it unsafe to enable the IO-APIC unconditionally. The Linux policy thus is to enable the IO-APIC only if it's 100% safe, ie.: - the board is on the 'whitelist' or - the board does not have PCI pins connected to the IO-APIC or - the user has overridden blacklisted settings with the pirq= boot option line. Kernel messages tell you whether the board is 'safe'. If your box boots with enabled IO-APIC IRQs, then you have nothing else to do. Your /proc/interrupts will look like this one: ----------------------------> hell:~> cat /proc/interrupts CPU0 CPU1 0: 90782 0 XT PIC timer 1: 4135 2375 IO-APIC keyboard 2: 0 0 XT PIC cascade 3: 851 807 IO-APIC serial 9: 6 22 IO-APIC ncr53c8xx 11: 307 154 IO-APIC NE2000 13: 4 0 XT PIC fpu 14: 56000 30610 IO-APIC ide0 NMI: 0 IPI: 0 <---------------------------- some interrupts will still be 'XT PIC', but this is not a problem, none of those IRQ sources is 'heavy'. If one of your boot messages says 'unlisted/blacklisted board, DISABLING IO-APIC IRQs', then you should do this to get multi-CPU IO-APIC IRQs running: A) if your board is unlisted, then mail to linux-smp to get it into either the white or the blacklist B) if your board is blacklisted, then figure out the appropriate pirq= option to get your system to boot pirq= lines look like the following in /etc/lilo.conf: append="pirq=15,11,10" the actual numbers depend on your system, on your PCI cards and on their PCI slot position. Usually PCI slots are 'daisy chained' before they are connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4 lines): ,-. ,-. ,-. ,-. ,-. PIRQ4 ----| |-. ,-| |-. ,-| |-. ,-| |--------| | |S| \ / |S| \ / |S| \ / |S| |S| PIRQ3 ----|l|-. `/---|l|-. `/---|l|-. `/---|l|--------|l| |o| \/ |o| \/ |o| \/ |o| |o| PIRQ2 ----|t|-./`----|t|-./`----|t|-./`----|t|--------|t| |1| /\ |2| /\ |3| /\ |4| |5| PIRQ1 ----| |- `----| |- `----| |- `----| |--------| | `-' `-' `-' `-' `-' every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD: ,-. INTD--| | |S| INTC--|l| |o| INTB--|t| |x| INTA--| | `-' These INTA-D PCI IRQs are always 'local to the card', their real meaning depends on which slot they are in. If you look at the daisy chaining diagram, a card in slot4, issuing INTA IRQ, it will end up as a signal on PIRQ2 of the PCI chipset. Most cards issue INTA, this creates optimal distribution between the PIRQ lines. (distributing IRQ sources properly is not a necessity, PCI IRQs can be shared at will, but it's a good for performance to have non shared interrupts). Slot5 should be used for videocards, they do not use interrupts normally, thus they are not daisy chained either. so if you have your SCSI card (IRQ11) in Slot1, Tulip card (IRQ9) in Slot2, then you'll have to specify this pirq= line: append="pirq=11,9" the following script tries to figure out such a default pirq= line from your PCI configuration: echo -n pirq=; echo `scanpci | grep T_L | cut -c56-` | sed 's/ /,/g' note that this script wont work if you have skipped a few slots or if your board does not do default daisy-chaining. (or the IO-APIC has the PIRQ pins connected in some strange way). E.g. if in the above case you have your SCSI card (IRQ11) in Slot3, and have Slot1 empty: append="pirq=0,9,11" [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting) slots.] generally, it's always possible to find out the correct pirq= settings, just permute all IRQ numbers properly ... it will take some time though. An 'incorrect' pirq line will cause the booting process to hang, or a device won't function properly (if it's inserted as eg. a module). If you have 2 PCI buses, then you can use up to 8 pirq values. Although such boards tend to have a good configuration and will be included in the whitelist. Be prepared that it might happen that you need some strange pirq line: append="pirq=0,0,0,0,0,0,9,11" use smart try-and-err techniques to find out the correct pirq line ... the following pirq line can be used to force a board into the whitelist: append="pirq=0" [if your system works with no problems after this, then it should be added to the official whitelist, contact us] good luck and mail to linux-smp@vger.kernel.org or linux-kernel@vger.kernel.org if you have any problems that are not covered by this document. -- mingo [ This is a mail message in response to a query on IO mapping, thus the strange format for a "document" ] The AHA-1542 is a bus-master device, and your patch makes the driver give the controller the physical address of the buffers, which is correct on x86 (because all bus master devices see the physical memory mappings directly). However, on many setups, there are actually _three_ different ways of looking at memory addresses, and in this case we actually want the third, the so-called "bus address". Essentially, the three ways of addressing memory are (this is "real memory", that is, normal RAM--see later about other details): - CPU untranslated. This is the "physical" address. Physical address 0 is what the CPU sees when it drives zeroes on the memory bus. - CPU translated address. This is the "virtual" address, and is completely internal to the CPU itself with the CPU doing the appropriate translations into "CPU untranslated". - bus address. This is the address of memory as seen by OTHER devices, not the CPU. Now, in theory there could be many different bus addresses, with each device seeing memory in some device-specific way, but happily most hardware designers aren't actually actively trying to make things any more complex than necessary, so you can assume that all external hardware sees the memory the same way. Now, on normal PCs the bus address is exactly the same as the physical address, and things are very simple indeed. However, they are that simple because the memory and the devices share the same address space, and that is not generally necessarily true on other PCI/ISA setups. Now, just as an example, on the PReP (PowerPC Reference Platform), the CPU sees a memory map something like this (this is from memory): 0-2 GB "real memory" 2 GB-3 GB "system IO" (inb/out and similar accesses on x86) 3 GB-4 GB "IO memory" (shared memory over the IO bus) Now, that looks simple enough. However, when you look at the same thing from the viewpoint of the devices, you have the reverse, and the physical memory address 0 actually shows up as address 2 GB for any IO master. So when the CPU wants any bus master to write to physical memory 0, it has to give the master address 0x80000000 as the memory address. So, for example, depending on how the kernel is actually mapped on the PPC, you can end up with a setup like this: physical address: 0 virtual address: 0xC0000000 bus address: 0x80000000 where all the addresses actually point to the same thing. It's just seen through different translations.. Similarly, on the Alpha, the normal translation is physical address: 0 virtual address: 0xfffffc0000000000 bus address: 0x40000000 (but there are also Alphas where the physical address and the bus address are the same). Anyway, the way to look up all these translations, you do #include phys_addr = virt_to_phys(virt_addr); virt_addr = phys_to_virt(phys_addr); bus_addr = virt_to_bus(virt_addr); virt_addr = bus_to_virt(bus_addr); Now, when do you need these? You want the _virtual_ address when you are actually going to access that pointer from the kernel. So you can have something like this: /* * this is the hardware "mailbox" we use to communicate with * the controller. The controller sees this directly. */ struct mailbox { __u32 status; __u32 bufstart; __u32 buflen; .. } mbox; unsigned char * retbuffer; /* get the address from the controller */ retbuffer = bus_to_virt(mbox.bufstart); switch (retbuffer[0]) { case STATUS_OK: ... on the other hand, you want the bus address when you have a buffer that you want to give to the controller: /* ask the controller to read the sense status into "sense_buffer" */ mbox.bufstart = virt_to_bus(&sense_buffer); mbox.buflen = sizeof(sense_buffer); mbox.status = 0; notify_controller(&mbox); And you generally _never_ want to use the physical address, because you can't use that from the CPU (the CPU only uses translated virtual addresses), and you can't use it from the bus master. So why do we care about the physical address at all? We do need the physical address in some cases, it's just not very often in normal code. The physical address is needed if you use memory mappings, for example, because the "remap_page_range()" mm function wants the physical address of the memory to be remapped (the memory management layer doesn't know about devices outside the CPU, so it shouldn't need to know about "bus addresses" etc). NOTE NOTE NOTE! The above is only one part of the whole equation. The above only talks about "real memory", that is, CPU memory (RAM). There is a completely different type of memory too, and that's the "shared memory" on the PCI or ISA bus. That's generally not RAM (although in the case of a video graphics card it can be normal DRAM that is just used for a frame buffer), but can be things like a packet buffer in a network card etc. This memory is called "PCI memory" or "shared memory" or "IO memory" or whatever, and there is only one way to access it: the readb/writeb and related functions. You should never take the address of such memory, because there is really nothing you can do with such an address: it's not conceptually in the same memory space as "real memory" at all, so you cannot just dereference a pointer. (Sadly, on x86 it _is_ in the same memory space, so on x86 it actually works to just deference a pointer, but it's not portable). For such memory, you can do things like - reading: /* * read first 32 bits from ISA memory at 0xC0000, aka * C000:0000 in DOS terms */ unsigned int signature = readl(0xC0000); - remapping and writing: /* * remap framebuffer PCI memory area at 0xFC000000, * size 1MB, so that we can access it: We can directly * access only the 640k-1MB area, so anything else * has to be remapped. */ char * baseptr = ioremap(0xFC000000, 1024*1024); /* write a 'A' to the offset 10 of the area */ writeb('A',baseptr+10); /* unmap when we unload the driver */ iounmap(baseptr); - copying and clearing: /* get the 6-byte Ethernet address at ISA address E000:0040 */ memcpy_fromio(kernel_buffer, 0xE0040, 6); /* write a packet to the driver */ memcpy_toio(0xE1000, skb->data, skb->len); /* clear the frame buffer */ memset_io(0xA0000, 0, 0x10000); OK, that just about covers the basics of accessing IO portably. Questions? Comments? You may think that all the above is overly complex, but one day you might find yourself with a 500 MHz Alpha in front of you, and then you'll be happy that your driver works ;) Note that kernel versions 2.0.x (and earlier) mistakenly called the ioremap() function "vremap()". ioremap() is the proper name, but I didn't think straight when I wrote it originally. People who have to support both can do something like: /* support old naming silliness */ #if LINUX_VERSION_CODE < 0x020100 #define ioremap vremap #define iounmap vfree #endif at the top of their source files, and then they can use the right names even on 2.0.x systems. And the above sounds worse than it really is. Most real drivers really don't do all that complex things (or rather: the complexity is not so much in the actual IO accesses as in error handling and timeouts etc). It's generally not hard to fix drivers, and in many cases the code actually looks better afterwards: unsigned long signature = *(unsigned int *) 0xC0000; vs unsigned long signature = readl(0xC0000); I think the second version actually is more readable, no? Linus Ioctl Numbers 18 Feb 1998 Michael Chastain If you are adding new ioctl's to the kernel, you should use the _IO macros defined in : _IO an ioctl with no parameters _IOW an ioctl with write parameters (from user's point of view) _IOR an ioctl with read parameters (from user's point of view) _IOWR an ioctl with both write and read parameters. 'Write' and 'read' are from the user's point of view. This is like the system calls 'write' and 'read'. For example, a SET_FOO ioctl would be _IOW, although the kernel would actually read data from user space; a GET_FOO ioctl would be _IOR, although the kernel would actually write data to user space. The first argument to _IO, _IOW, _IOR, or _IOWR is an identifying letter or number from the table below. If you are writing a driver for a new device and need a letter, pick an unused letter. You can register the letter by patching this file and submitting the patch to Linus Torvalds. Or you can e-mail me at and I'll register one for you. The second argument to _IO, _IOW, _IOR, or _IOWR is a sequence number to distinguish ioctls from each other. The third argument is the size of the structure going into the kernel or coming out of the kernel. Some devices use their major number as the identifier; this is not recommended. Some devices are even more irregular and don't follow the convention at all. Following the convention is good because: (1) Keeping the ioctl's globally unique helps error checking: if a program calls an ioctl on the wrong device, it will get an error rather than some unexpected behaviour. (2) The 'strace' build procedure automatically finds ioctl numbers defined with _IO, _IOW, _IOR, or _IOWR. (3) 'strace' can decode numbers back into useful names when the numbers are unique. (4) People looking for ioctls can grep for them more easily when the convention is used to define the ioctl numbers. (5) When following the convention, the driver code can use generic code to call verify_area to validate parameters. This table lists ioctls visible from user land for Linux/i386. It is current to Linux 2.1.15. Code Seq# Include File Comments ======================================================== 0x00 01-02 linux/fs.h conflict! 0x00 01-04 scsi/scsi_ioctl.h conflict! 0x02 all linux/fd.h 0x03 all linux/hdreg.h 0x04 all linux/umsdos_fs.h 0x06 all linux/lp.h 0x09 all linux/md.h 0x12 all linux/fs.h 0x20 all linux/cm206.h 0x22 all scsi/sg.h 'A' all linux/apm_bios.h 'C' all linux/soundcard.h 'D' all asm-s390/dasd.h 'F' all linux/fb.h 'I' all linux/isdn.h 'K' all linux/kd.h 'L' all linux/loop.h 'M' all linux/soundcard.h 'P' all linux/soundcard.h 'Q' all linux/soundcard.h 'R' all linux/random.h 'S' 00-7F linux/cdrom.h 'S' 80-81 scsi/scsi_ioctl.h 'S' 82-FF scsi/scsi.h 'T' all linux/soundcard.h conflict! 'T' all asm-i386/ioctls.h conflict! 'V' all linux/vt.h 'W' 00-1F linux/router.h conflict [Please reallocate] 'W' 00-1F linux/watchdog.h 'W' 20-27 linux/octal-relay.h in development 'W' 28-2F linux/iso16-relay.h in development 'Y' all linux/cyclades.h 'Z' all linux/drivers/scsi/cpqfcTSioctl.h 'a' all various, see http://lrcwww.epfl.ch/linux-atm/magic.html 'b' 00-FF bit3 vme host bridge in development: 'c' all linux/comstats.h 'f' all linux/ext2_fs.h 'j' 00-3F linux/joystick.h 'k' all asm-sparc/kbio.h, asm-sparc64/kbio.h 'l' 00-3F linux/tcfs_fs.h in development: 'm' all linux/mtio.h conflict! 'm' all linux/soundcard.h conflict! 'n' all linux/ncp_fs.h 'p' 00-3F linux/mc146818rtc.h 'p' 40-7F linux/nvram.h 'p' 80-9F user-space parport in development: 'r' all linux/msdos_fs.h 's' all linux/cdk.h 't' 00-7F linux/if_ppp.h 't' 80-8F linux/isdn_ppp.h 'u' all linux/smb_fs.h 'v' all linux/ext2_fs.h 'w' all CERN SCI driver in development 'z' 00-3F CAN bus card in development: 'z' 40-7F CAN bas card in development: '6' 00-10 Intel IA32 microcode update driver 0x89 00-0F asm-i386/sockios.h 0x89 10-DF linux/sockios.h 0x89 E0-EF linux/sockios.h SIOCPROTOPRIVATE range 0x89 F0-FF linux/sockios.h SIOCDEVPRIVATE range 0x8B all linux/wireless.h 0x8C 00-3F WiNRADiO driver in development: 0x90 00 linux/sbpcd.h 0x93 60-7F linux/auto_fs.h 0x99 00-0F 537-Addinboard driver in development: 0xA0 all Small Device Project in development: 0xA3 80-8F Port ACL in development: 0xA3 90-9F DoubleTalk driver in development: 0xAB 00-06 Network block device Java(tm) Binary Kernel Support for Linux v1.02 ---------------------------------------------- Linux beats them ALL! While all other OS's are TALKING about direct support of Java Binaries in the OS, Linux is doing it! You can execute Java applications and Java Applets just like any other program after you have done the following: 1) You MUST FIRST install the Java Developers Kit for Linux. The Java on Linux HOWTO gives the details on getting and installing this. This HOWTO can be found at: ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO/Java-HOWTO You should also set up a reasonable CLASSPATH environment variable to use Java applications that make use of any nonstandard classes (not included in the same directory as the application itself). 2) You have to compile BINFMT_MISC either as a module or into the kernel (CONFIG_BINFMT_MISC) and set it up properly. If you choose to compile it as a module, you will have to insert it manually with modprobe/insmod, as kerneld can not easy be supported with binfmt_misc. Read the file 'binfmt_misc.txt' in this directory to know more about the configuration process. 3) Add the following configuration items to binfmt_misc (you should really have read binfmt_misc.txt now): support for Java applications: ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' support for Java Applets: ':Applet:E::html::/usr/local/java/bin/appletviewer:' or the following, if you want to be more selective: ':Applet:M:: in the first line ('<' has to be the first character!) to let this work! For the compiled Java programs you need a wrapper script like the following (this is because Java is broken in case of the filename handling), again fix the path names, both in the script and in the above given configuration string: ====================== Cut here =================== #!/bin/bash # /usr/local/java/bin/javawrapper - the wrapper for binfmt_misc/java CLASS=$1 # if classname is a link, we follow it (this could be done easier - how?) if [ -L "$1" ] ; then CLASS=`ls --color=no -l $1 | tr -s '\t ' ' ' | cut -d ' ' -f 11` fi CLASSN=`basename $CLASS .class` CLASSP=`dirname $CLASS` FOO=$PATH PATH=$CLASSPATH if [ -z "`type -p -a $CLASSN.class`" ] ; then # class is not in CLASSPATH if [ -e "$CLASSP/$CLASSN.class" ] ; then # append dir of class to CLASSPATH if [ -z "${CLASSPATH}" ] ; then export CLASSPATH=$CLASSP else export CLASSPATH=$CLASSP:$CLASSPATH fi else # uh! now we would have to create a symbolic link - really # ugly, i.e. print a message that one has to change the setup echo "Hey! This is not a good setup to run $1 !" exit 1 fi fi PATH=$FOO shift /usr/local/java/bin/java $CLASSN "$@" ====================== Cut here =================== Now simply chmod +x the .class and/or .html files you want to execute. To add a Java program to your path best put a symbolic link to the main .class file into /usr/bin (or another place you like) omitting the .class extension. The directory containing the original .class file will be added to your CLASSPATH during execution. To test your new setup, enter in the following simple Java app, and name it "HelloWorld.java": class HelloWorld { public static void main(String args[]) { System.out.println("Hello World!"); } } Now compile the application with: javac HelloWorld.java Set the executable permissions of the binary file, with: chmod 755 HelloWorld.class And then execute it: ./HelloWorld.class To execute Java Applets, simple chmod the *.html files to include the execution bit, then just do ./Applet.html originally by Brian A. Lantz, brian@lantz.com heavily edited for binfmt_misc by Richard Gnther. Linux Joystick driver v1.2.15 (c) 1996-1999 Vojtech Pavlik Sponsored by SuSE ---------------------------------------------------------------------------- 0. Disclaimer ~~~~~~~~~~~~~ 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 Should you need to contact me, the author, you can do so either by e-mail - mail your message to , or by paper mail: Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic For your convenience, the GNU General Public License version 2 is included in the package: See the file COPYING. 1. Intro ~~~~~~~~ The joystick driver for Linux provides support for a variety of joysticks and similar devices. These currently include various analog joysticks and gamepads (both variable resistor based and microswitch+resistor based), following IBM PC joystick standard, with extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. In addition to these it also supports some of the new PC joysticks that use proprietary digital protocols to communicate over the gameport, currently by FPGaming, Gravis, Logitech, MadCatz, Microsoft, Creative and ThrustMaster. Saitek protocol support is still to be done. The driver also includes support for many gamepads and joysticks that were used by various non-PC computers and game consoles. These include Multi system joysticks (Atari, Amiga, Commodore, Amstrad), Sega gamepads (Master System, Genesis, Saturn), Nintendo gamepads (NES, SNES, N64), Sony gamepads (PSX). Support for Atari Jaguar, Atari 2600, NES FourScore, SNES MultiTap and others might be added later. Last, but not least there is also native Amiga joystick support for the Amiga Linux port. Should you encounter any problems while using the driver, or joysticks this driver can't make complete use of, I'm very interested in hearing about them. Bug reports and success stories are also welcome. The joystick package is available at the following FTP sites: ftp://ftp.suse.cz/pub/development/joystick/ ftp://atrey.karlin.mff.cuni.cz/pub/linux/joystick/ ftp://ftp.gts.cz/pub/linux/joystick/ And a homepage of the driver is at: http://www.suse.cz/development/joystick/ http://atrey.karlin.mff.cuni.cz/~vojtech/joystick/ http://www.trylinux.com/projects/joystick/ http://www.linuxgames.com/joystick/ There is also a mailing list for the driver at: listproc@atrey.karlin.mff.cuni.cz send "subscribe linux-joystick Your Name" to subscribe to it. 2. Usage ~~~~~~~~ You could have obtained this driver in two different ways - either in the joystick package or in the kernel. Because, for successful usage of the joysticks, the utilities in the package are useful, maybe necessary, and definitely recommended, I suggest you getting the package at some of the above mentioned locations. The rest of this file assumes you have it. 2.1 Compiling the driver package ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To compile the utilities in the joystick package, and the driver itself, as a standalone module, you first unpack the package, and then edit the Makefile to meet your needs (namely whether are you using versioned modules). You will also need an unpacked and configured make config kernel in /usr/src/linux Furthermore, if you're using versioned modules, you'll also need make dep done on the kernel, to create some needed files. After that, you compile the joystick driver make And after that you install it make install In case you have not used the driver before, you'll need to create the joystick device files in /dev so that applications can use them: make devs For manual creation of the joystick devices, check the Documentation/devices.txt file in the Linux source tree. Should you not want to mess with the kernel, and just use the driver standalone, as modules, skip the next two sections, proceeding right to 2.4, because all you need is already done. 2.2 Patching the kernel ~~~~~~~~~~~~~~~~~~~~~~~ If you already have the most recent joystick driver in your kernel, skip this section. If not, you need to patch the kernel, so that it contains the current driver version. You do that with a command: patch -Esp1 < /usr/src/joystick-1.2.x/kernel-2.x.y.diff in /usr/src/linux 2.3 Compiling the kernel ~~~~~~~~~~~~~~~~~~~~~~~~ To compile joystick support into the kernel, use the kernel configuration scripts, and answer 'Y' to Joystick support and also to at least one of the hardware specific options. After doing something like make bzlilo you are done with the driver installation. Just reboot and the driver should find all the connected joysticks. Read the notes about the hardware specific drivers later in this file, though. You can also compile the driver as modules, answering 'M' to all joystick support you want to have modules for. It is possible to have the main joystick driver compiled into the kernel and the hardware dependent drivers as modules. After you compile the modules make modules And install them make modules_install you're set, and can proceed to the next step. 2.4 Inserting the modules into the kernel ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ After installing the modules you'll first need to insert the generic joystick driver module into the kernel insmod joystick and then one or more of the hardware specific modules insmod joy-something where 'something' is the type of your joystick. See below for more precise explanation. Alternately you can add the lines alias char-major-15 joy-something options joy-something js_xx=x,x,x,x,... to the /etc/conf.modules file, so that the joystick module will be loaded automatically when the /dev/js devices are accessed. 2.5 Verifying that it works ~~~~~~~~~~~~~~~~~~~~~~~~~~~ For testing the joystick driver functionality, there is the jstest program. You run it by typing: jstest /dev/js0 And it should show a line with the joystick values, which update as you move the stick, and press its buttons. The axes should all be zero when the joystick is in the center position. They should not jitter by themselves to other close values, and they also should be steady in any other position of the stick. They should have the full range from -32767 to 32767. If all this is met, then it's all fine, and you can play the games. :) If it's not, then there might be a problem. Try to calibrate the joystick, and if it still doesn't work, read the drivers section of this file, the troubleshooting section, and the FAQ. 2.6. Calibration ~~~~~~~~~~~~~~~~ For most joysticks you won't need any manual calibration, since the joystick should be autocalibrated by the driver automagically. However, with some analog joysticks, that either do not use linear resistors, or if you want better precision, you can use the jscal program jscal -c /dev/js0 included in the joystick package to set better correction coefficients than what the driver would choose itself. After calibrating the joystick you can verify if you like the new calibration using the jstest command, and if you do, you then can save the correction coefficients into a file jscal -p /dev/js0 > /etc/joystick.cal And add a line to your rc script executing that file source /etc/joystick.cal This way, after the next reboot your joystick will remain calibrated. You can also add the jscal -p line to your shutdown script. 3. HW specific driver information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ In this section each of the separate hardware specific drivers is described. 3.1 Analog joysticks ~~~~~~~~~~~~~~~~~~~~ The joy-analog.c uses the standard analog inputs of the gameport, and thus supports all standard joysticks and gamepads. It also supports extensions like additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS or 6 and 8 button gamepads. However the only types that can be autodetected are: * 2-axis, 4-button joystick * 3-axis, 4-button joystick * 4-axis, 4-button joystick For other joystick types (more/less axes, hats, and buttons) support you'll need to specify the types either on the kernel command line or on the module command line, when inserting joy-analog.o into the kernel. The parameters are: js_an=p0,m0,n0,p1,m1,n1 ... Where 'p' is the port number, eg. 0x201, which is the standard address. 'm' and 'n' are joystick 0 and joystick 1 bitmasks for the specified joystick port. The bits in the bitmasks mean: Bit | 2^n | Meaning ---------------------------------- 0 | 1 | Axis X1 1 | 2 | Axis Y1 2 | 4 | Axis X2 3 | 8 | Axis Y2 4 | 16 | Button A 5 | 32 | Button B 6 | 64 | Button C 7 | 128 | Button D 8 | 256 | CHF Buttons X and Y 9 | 512 | CHF Hat 1 10 | 1024 | CHF Hat 2 11 | 2048 | FCS Hat 12 | 4096 | Pad Button X 13 | 8192 | Pad Button Y 14 | 16384 | Pad Button U 15 | 32768 | Pad Button V (CHF = CH Flightstick Pro, FCS = ThrustMaster FCS) Following is a table of joysticks for which the 'm' values are known. If you have any additions/corrections to it, e-mail me. Joystick | 'm' value ---------------------------------------------------- Simple 2-button 2-axis joystick | 0x0033 Second simple joystick on Y-cable | 0x00cc Genius Flight2000 F-12 | 0x00f3 Genius Flight2000 F-21 | 0x08f7 Genius Flight2000 F-22 | 0x02ff Genius GameHunter G-06 | 0xf0f3 Genius MaxFire G-07 | 0xf0f3 Genius PowerStation | 0xf0f3 Laing #1 PC SuperPad | 0xf0f3 Logitech Wingman | 0x003b Microsoft SideWinder Standard | 0x003b QuickShot QS-201 SuperWarrior | 0x00fb Saitek Megapad XII | 0x30f3 PC Powerpad Pro | 0x30f3 In case you have one of the joystick in the table below, and it doesn't work with a specific driver in digital mode for some reason, you can use them in analog mode with the joy-analog driver as well. However, digital operation is always better. Joystick | 'm' value ---------------------------------------------------- Gravis GamePad Pro - analog mode | 0x00f3 Genius Flight2000 F-23 | 0x02ff Microsoft SideWinder 3D Pro - CHF mode | 0x02ff Microsoft SideWinder 3D Pro - FCS mode | 0x08f7 An example that would configure the driver to use two two axis, two button joysticks connected to port 0x201, a single four button four axis joystick connected to port 0x202, a four axis, six button and two hat CHF compatible joystick on 0x203, and a two axis four button FCS compatible joystick with a single hat on 0x207: js_an=0x201,0x33,0xcc,0x202,0xff,0,0x203,0x7ff,0,0x207,0x8f3,0 If you can't sum bits into hex numbers in your head easily, you can simply sum the values in the 2^n column decimally and use that number instead. Using this method you'd get a command line: js_an=0x201,51,204,0x202,255,0,0x203,2047,0,0x207,2291,0 And it would do the same as the above explained command line. Use whichever way you like best. 3.2 Microsoft SideWinder joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Microsoft 'Digital Overdrive' protocol is supported by the joy-sidewinder.c module. All currently supported joysticks: * SideWinder 3D Pro * SideWinder Force Feedback Pro * SideWinder Force Feedback Wheel * SideWinder FreeStyle Pro * SideWinder GamePad (up to four, chained together) * SideWinder Precision Pro are autodetected, and thus no module parameters are needed. There is one caveat with the 3D Pro. There are 9 buttons reported, although the joystick has only 8. The 9th button is the mode switch on the rear side of the joystick. However, moving it, you'll reset the joystick, and make it unresponsive for about a one third of a second. Furthermore, the joystick will also re-center itself, taking the position it was in during this time as a new center position. Use it if you want, but think first. The SideWinder Standard is not a digital joystick, and thus is supported by the analog driver described above. 3.3 Logitech ADI devices ~~~~~~~~~~~~~~~~~~~~~~~~ Logitech ADI protocol is supported by the joy-logitech.c module. It should support any Logitech device using this protocol. This includes, but is not limited to: * Logitech CyberMan 2 * Logitech ThunderPad Digital * Logitech WingMan Extreme Digital * Logitech WingMan Formula * Logitech WingMan Interceptor * Logitech WingMan GamePad * Logitech WingMan GamePad USB * Logitech WingMan GamePad Extreme * Logitech WingMan Extreme Digital 3D ADI devices are autodetected, and the driver supports up to two (any combination of) devices on a single gameport, using an Y-cable or chained together. Logitech WingMan Joystick, Logitech WingMan Attack, Logitech WingMan Extreme and Logitech WingMan ThunderPad are not digital joysticks and are handled by the analog driver described above. Logitech WingMan Warrior and Logitech Magellan are supported by serial drivers described below. Logitech CyberMan, Logitech WingMan Force and Logitech WingMan Formula Force are not supported yet. 3.4 Gravis GrIP ~~~~~~~~~~~~~~~ Gravis GrIP protocol is supported by the joy-gravis.c module. It currently supports: * Gravis GamePad Pro * Gravis Xterminator * Gravis BlackHawk Digital All these devices are autodetected, and you can even use any combination of up to two of these pads either chained together or using an Y-cable on a single gameport. GrIP MultiPort and Gravis Xterminator DualControl aren't supported yet. Gravis Stinger is a serial device and hopefully will be supported in the future. Other Gravis joysticks are supported by the joy-analog driver. 3.5 FPGaming A3D and MadCatz A3D ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Assassin 3D protocol created by FPGaming, is used both by FPGaming themselves and is licensed to MadCatz. A3D devices are supported by the joy-assassin.c module. It currently supports: * FPGaming Assassin 3D * MadCatz Panther * MadCatz Panther XL All these devices are autodetected. Because the Assassin 3D and the Panther allow connecting analog joysticks to them, these are supported in this driver, too. The driver uses the js_as parameter for the analog joysticks, which has the same syntax as js_an for the analog driver. The trackball support is far from perfect at this stage of development, but should be well usable. 3.6 ThrustMaster DirectConnect (BSP) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The TM DirectConnect (BSP) protocol is supported by the joy-thrustmaster.c module. This includes, but is not limited to: * ThrustMaster Millenium 3D Inceptor * ThrustMaster 3D Rage Pad * ThrustMaster Fusion Digital Game Pad Devices not directly supported, but hopefully working are: * ThrustMaster FragMaster * ThrustMaster Attack Throttle If you have one of these, contact me. BSP devices are autodetected, and thus no parameters to the module are needed. 3.7 Creative Labs Blaster ~~~~~~~~~~~~~~~~~~~~~~~~~ The Blaster protocol is supported by the joy-creative.c module. It currently supports only the: * Creative Blaster GamePad Cobra Up to two of these can be used on a single gameport, using an Y-cable. 3.8 PDPI Lightning 4 gamecards ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PDPI Lightning 4 gamecards are supported by the joy-lightning.c module. This driver is only for analog joysticks connected to the card - if you want to use some of the digital devices, you need to use its specific driver. The card will work in legacy mode with them, though. Since all features of analog joysticks can't be detected, this driver needs a command line: js_l4=p0,m0,n0,p1,m1,n1,.... As you can see, it's very similar to the analog drivers command line. Actually it is the same except for the meaning of p0. p0 in this case is the port the joystick is attached to: p | Port ---------------------------- 0 | Primary card, port 1 1 | Primary card, port 2 2 | Primary card, port 3 3 | Primary card, port 4 4 | Secondary card, port 1 5 | Secondary card, port 2 6 | Secondary card, port 3 7 | Secondary card, port 4 Two cards maximum are allowed in one system, because of the card's design. See the description of analog joystick driver for explanations of m0 and n0 values. 3.9 Trident 4DWave / Aureal Vortex ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Soundcards with a Trident 4DWave DX/NX or Aureal Vortex chipset provide an "Enhanced Game Port" mode where the soundcard handles polling the joystick. This mode is supported by the joy-pci module. If no module parameters are given, the joy-pci module will set all the soundcards it finds to "enhanced" mode, and will try to autodetect the type of attached joystick. It can only detect the same types of joysticks that the joy-analog module can. This module accepts parameters in the form: js_pci=t0,i0,m0,n0,t1,i1,m1,n1,.... The "t" value specifies the type of card, as follows: t | Card Type ---------------------------- 0 | Trident 4DWave DX 1 | Trident 4DWave NX 2 | Aureal Vortex1 (Au8820 chipset) 3 | Aureal Vortex2 (Au8830 chipset) If you have more than one card of the same type, the "i" parameter lets you choose which card to apply the "m" and "n" values to. It counts from "0". (The driver detects cards in the order listed in the above table.) The "m" and "n" values have the same meaning as for the analog module, with the exception that the value m=0, n=0 indicates that joy-pci should completely ignore that port. This can be useful to reserve a certain port for purely MIDI operation. For example, let's say you have 3 sound cards - a 4Dwave DX, a 4DWave NX, and a Vortex 2. You have a three-axis, four-button, one-hat CHF- compatible joystick on the DX. You use the NX to interface to an external MIDI device. Finally, you have two two-axis, two-button joysticks on the Vortex. Your command line might look like: js_pci=0,0,0x207,0,1,1,0,0,3,0,0x33,0xcc 3.10 Amiga ~~~~~~~~~~ Amiga joysticks, connected to an Amiga, are supported by the joy-amiga.c driver. Since they can't be autodetected, the driver has a command line. js_am=a,b a and b define the joysticks connected to the JOY0DAT and JOY1DAT ports of the Amiga. Value | Joystick type --------------------- 0 | None 1 | 1-button digital joystick No more joystick types are supported now, but that should change in the future if I get an Amiga in the reach of my fingers. 3.11 Game console and 8-bit pads and joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ See joystick-parport.txt for more info. 3.12 SpaceTec/LabTec devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SpaceTec serial devices communicate using the SpaceWare protocol. It is supported by the joy-spaceorb and joy-spaceball drivers. The devices currently supported by joy-spaceorb are: * SpaceTec SpaceBall Avenger * SpaceTec SpaceOrb 360 Devices currently supported by joy-spaceball are: * SpaceTec SpaceBall 4000 FLX In addition to having the joy-spaceorb/spaceball module in the kernel, you also need to attach a serial port to it. to do that, run the jsattach program: jsattach --spaceorb /dev/ttySx & or jsattach --sball4 /dev/ttySx & where /dev/ttySx is the serial port which the device is connected to. After doing this, the device will be reported and will start working. There is one caveat with the SpaceOrb. The button #6, the on the bottom side of the orb, although reported as an ordinary button, causes internal recentering of the spaceorb, moving the zero point to the position in which the ball is at the moment of pressing the button. So, think first before you bind it to some other function. SpaceTec SpaceBall 2003 FLX and 3003 FLX are not supported yet. 3.13 Logitech SWIFT devices ~~~~~~~~~~~~~~~~~~~~~~~~~~~ The SWIFT serial protocol is supported by the joy-warrior module. It currently supports only the: * Logitech WingMan Warrior but in the future, Logitech CyberMan (the original one, not CM2) could be supported as well. To use the module, you need to run jsattach after you insert/compile the module into your kernel: jsattach --warrior /dev/ttySx & ttySx is the serial port your Warrior is attached to. 3.14 Magellan / Space Mouse ~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Magellan (or Space Mouse), manufactured by LogiCad3d (formerly Space Systems), for many other companies (Logitech, HP, ...) is supported by the joy-magellan module. It currently supports only the: * Magellan 3D * Space Mouse models, the additional buttons on the 'Plus' versions are not supported yet. To use it, you need to attach the serial port to the driver using the jsattach --magellan /dev/ttySx & command. After that the Magellan will be detected, initialized, will beep, and the /dev/jsX device should become useable. 4. Troubleshooting ~~~~~~~~~~~~~~~~~~ There is quite a high probability that you run into some problems. For testing whether the driver works, if in doubt, use the jstest utility in some of its modes. The most useful modes are "normal" - for the 1.x interface, and "old" for the "0.x" interface. You run it by typing: jstest --normal /dev/js0 jstest --old /dev/js0 If your trouble stems from the fact the drivers can't detect the joystick attached to your gameport, and you decide you need my help (which I will gladly provide), please use the joydump utility first. It's created just by typing make joydump.o in the directory where you unpacked the joystick package. It is run then by typing insmod joydump.o in the same directory. It will return a 'device busy' or 'initialization failed' error. This is perfectly okay. It has already done it's job. The results can be found in the system log or in the output of the dmesg command. Please send me the results along with your problem report. Oh, and read the FAQ! :) 5. FAQ ~~~~~~ Q: The driver doesn't find any joysticks connected to my soundcard with the message "joy-something: no joysticks found" and "joy-something.o: init_module: Device or resource busy." or "Initialization of joy-something failed" What could be the cause? A: The most common cause is that the joystick port on your soundcard is not enabled. If it is an ISA PnP card, you'll need isapnptools to configure the gameport. Non-PnP cards usually use some option to the sound driver - see the sound driver docs and source and enable the port. Note that in case of a PnP card you have to load the joystick driver as a module after running the isapnp command, it will not work in the opposite order. Q: Any access to the joystick devices gives me "Operation not supported by device". What am I doing wrong? A: You're running a 2.0 kernel and you forgot to insmod the hardware specific module. You not only need the joystick.o, but also one of the other joy-*.o files (most usually joy-analog.o), as described in this document, section 2. If you are not using modules, then you didn't say 'Y' to any of the hardware-specific questions. Again, see section 2. If you did select the specific support, and you still get this message, check that you selected the right one, and if it still doesn't work, go to the previous FAQ. Q: Everything is fine, except I get "No such device" error when I try to do anything with /dev/js0. What's the cause? A: You're running a 2.1 or 2.2. kernel and you want to read the previous FAQ. Q: Upon 'insmod joystick.o' I get a LOT of unresolved symbols, including 'printk' and others. Why? A: You either don't have your kernel compiled with module support. If that's the cause, re-compile your kernel with module support switched on. Or, you use versioned symbols, and don't have -DMODVERSIONS in the joystick driver Makefile, or vice versa. Correct the situation by either removing or adding -DMODVERSIONS to the Makefile. Q: Upon 'insmod joy-something' I get a bunch of unresolved symbols, like 'js_register_port, js_unregister device' and others. What's wrong? A: You need to 'insmod joystick.o' first. Q: Running 'jstest 1' or 'jscal 1' doesn't work, and returns with "File not found" error. What is the problem? A: The command line interface for these tools is different from what version 0.8.0 used. You have to specify the whole device name, eg. 'jstest /dev/js0'. Q: Running 'jstest /dev/js0' results in "File not found" error. What's the cause? A: The device files don't exist. Run 'make devs'. Q: Is it possible to connect my old Atari/Commodore/Amiga/console joystick or pad that uses a 9-pin D-type cannon connector to the serial port of my PC? A: Yes, it is possible, but it'll burn your serial port or the pad. It won't work, of course. Q: My joystick doesn't work with Quake / Quake 2. What's the cause? A: Quake / Quake 2 don't support joystick. Use joy2key to simulate keypresses for them. 6. Programming Interface ~~~~~~~~~~~~~~~~~~~~~~~~ The 1.0 driver uses a new, event based approach to the joystick driver. Instead of the user program polling for the joystick values, the joystick driver now reports only any changes of its state. See joystick-api.txt, joystick.h and jstest.c included in the joystick package for more information. The joystick device can be used in either blocking or nonblocking mode and supports select() calls. For backward compatibility the old (v0.x) interface is still included. Any call to the joystick driver using the old interface will return values that are compatible to the old interface. This interface is still limited to 2 axes, and applications using it usually decode only 2 buttons, although the driver provides up to 32. 7. Credits ~~~~~~~~~~ Thanks to the following people who contributed code, ideas or specifications to the joystick driver development: Arthur C. Smith Eyal Lebedinsky Jeff Tranter Carlos Puchol Matt Rhoten Dan Fandrich Sverker Wilberg Hal Maney Bernd Schmidt Alan Cox John Markus Bjorndalen Boris Muehmer Robert W. Grubbs Pete Chown Benji York Leslie F. Donaldson Eng-Jon Ong Ragnar Hojland Espinosa Brian Gerst Andree Borrmann Martin Giguere David Thompson Justin Wake Benoit Triquet John Dahlstrom Dan Gohman Joe Krahn David Kuder Raymond Ingles If you think you should be in this list and are not, it's possible that I forgot to include you - contact me and I'll correct the error. :) Thanks to KYE Systems Europe, who provided me with driver sources for the Genius Flight2000 Digital F-23, which happens to be identical (in software) to Microsoft SideWinder 3D Pro. Thanks to ThrustMaster Inc. who provided me with docs for their digital protocol specifications, and to Trystan A Larey-Williams , who wrote an attempt of a driver for them. Thanks to Creative Labs Europe, and Ifor Powell , who provided me with docs for their first generation Blaster GamePad. Special thanks go to FP-Gaming, Inc. and James C Barnes , who provided me with help and detailed information about the Assassin 3D protocol and devices, and even sent me a Panther and Panther XL for testing, along with cool T-shirts. Special thanks to PDPI, Mike Pelkey and Brand Kvavle , for providing me with documentation and example code for their L4 gamecard, and sending me the card to test my driver with it. Thanks to LogiCad3D for their support, for having the specifications online and for the nice music on their telephone. Special thanks to Logitech, Jerry de Raad , Thomas Burgel , Avinash Shinde for providing me with a lot of documentation for their devices, and also for a big box, containing a CyberMan2, Wingman Extreme, Magellan, Wingman Warrior, two MouseMan mice, and a NewTouch keyboard. Thanks to everyone else who helped me develop this package of drivers! No thanks to Microsoft and Gravis, who don't release a word about their hardware .... :( 8. ChangeLog ~~~~~~~~~~~~ See the ChangeLog file for the log of changes. 9. To do ~~~~~~~~ See the TODO file for the list of things planned. Joystick API Documentation -*-Text-*- Ragnar Hojland Espinosa 7 Aug 1998 1. Initialization ~~~~~~~~~~~~~~~~~ Open the joystick device following the usual semantics (that is, with open). Since the driver now reports events instead of polling for changes, immediately after the open it will issue a series of synthetic events (JS_EVENT_INIT) that you can read to check the initial state of the joystick. By default, the device is opened in blocking mode. int fd = open ("/dev/js0", O_RDONLY); 2. Event Reading ~~~~~~~~~~~~~~~~ struct js_event e; read (fd, &e, sizeof(struct js_event)); where js_event is defined as struct js_event { __u32 time; /* event timestamp in milliseconds */ __s16 value; /* value */ __u8 type; /* event type */ __u8 number; /* axis/button number */ }; If the read is successful, it will return sizeof(struct js_event), unless you wanted to read more than one event per read as described in section 3.1. 2.1 js_event.type ~~~~~~~~~~~~~~~~~ The possible values of ``type'' are #define JS_EVENT_BUTTON 0x01 /* button pressed/released */ #define JS_EVENT_AXIS 0x02 /* joystick moved */ #define JS_EVENT_INIT 0x80 /* initial state of device */ As mentioned above, the driver will issue synthetic JS_EVENT_INIT ORed events on open. That is, if it's issuing a INIT BUTTON event, the current type value will be int type = JS_EVENT_BUTTON | JS_EVENT_INIT; /* 0x81 */ If you choose not to differentiate between synthetic or real events you can turn off the JS_EVENT_INIT bits type &= ~JS_EVENT_INIT; /* 0x01 */ 2.2 js_event.number ~~~~~~~~~~~~~~~~~~~ The values of ``number'' correspond to the axis or button that generated the event. Note that they carry separate numeration (that is, you have both an axis 0 and a button 0). Generally, number 1st Axis X 0 1st Axis Y 1 2nd Axis X 2 2nd Axis Y 3 ...and so on Hats vary from one joystick type to another. Some can be moved in 8 directions, some only in 4, The driver, however, always reports a hat as two independent axis, even if the hardware doesn't allow independent movement. 2.3 js_event.value ~~~~~~~~~~~~~~~~~~ For an axis, ``value'' is a signed integer between -32767 and +32767 representing the position of the joystick along that axis. If you don't read a 0 when the joystick is `dead', or if it doesn't span the full range, you should recalibrate it (with, for example, jscal). For a button, ``value'' for a press button event is 1 and for a release button event is 0. Though this if (js_event.type == JS_EVENT_BUTTON) { buttons_state ^= (1 << js_event.number); } may work well if you handle JS_EVENT_INIT events separately, if ((js_event.type & ~JS_EVENT_INIT) == JS_EVENT_BUTTON) { if (js_event.value) buttons_state |= (1 << js_event.number); else buttons_state &= ~(1 << js_event.number); } is much safer since it can't lose sync with the driver. As you would have to write a separate handler for JS_EVENT_INIT events in the first snippet, this ends up being shorter. 2.4 js_event.time ~~~~~~~~~~~~~~~~~ The time an event was generated is stored in ``js_event.time''. It's a time in miliseconds since ... well, since sometime in the past. This eases the task of detecting double clicks, figuring out if movement of axis and button presses happened at the same time, and similar. 3. Reading ~~~~~~~~~~ If you open the device in blocking mode, a read will block (that is, wait) forever until an event is generated and effectively read. There are two alternatives if you can't afford to wait forever (which is, admittedly, a long time;) a) use select to wait until there's data to be read on fd, or until it timeouts. There's a good example on the select(2) man page. b) open the device in non-blocking mode (O_NONBLOCK) 3.1 O_NONBLOCK ~~~~~~~~~~~~~~ If read returns -1 when reading in O_NONBLOCK mode, this isn't necessarily a "real" error (check errno(3)); it can just mean there are no events pending to be read on the driver queue. You should read all events on the queue (that is, until you get a -1). For example, while (1) { while (read (fd, &e, sizeof(struct js_event)) > 0) { process_event (e); } /* EAGAIN is returned when the queue is empty */ if (errno != EAGAIN) { /* error */ } /* do something interesting with processed events */ } One reason for emptying the queue is that if it gets full you'll start missing events since the queue is finite, and older events will get overwritten. The other reason is that you want to know all what happened, and not delay the processing till later. Why can get the queue full? Because you don't empty the queue as mentioned, or because too much time elapses from one read to another and too many events to store in the queue get generated. Note that high system load may contribute to space those reads even more. If time between reads is enough to fill the queue and loose an event, the driver will switch to startup mode and next time you read it, synthetic events (JS_EVENT_INIT) will be generated to inform you of the actual state of the joystick. [As for version 1.2.8, the queue is circular and able to hold 64 events. You can increment this size bumping up JS_BUFF_SIZE in joystick.h and recompiling the driver.] In the above code, you might as well want to read more than one event at a time using the typical read(2) functionality. For that, you would replace the read above with something like struct js_event mybuffer[0xff]; int i = read (fd, mybuffer, sizeof(struct mybuffer)); In this case, read would return -1 if the queue was empty, or some other value in which the number of events read would be i / sizeof(js_event) Again, if the buffer was full, it's a good idea to process the events and keep reading it until you empty the driver queue. 4. IOCTLs ~~~~~~~~~ The joystick driver defines the following ioctl(2) operations. /* function 3rd arg */ #define JSIOCGAXES /* get number of axes char */ #define JSIOCGBUTTONS /* get number of buttons char */ #define JSIOCGVERSION /* get driver version int */ #define JSIOCGNAME(len) /* get identifier string char */ #define JSIOCSCORR /* set correction values &js_corr */ #define JSIOCGCORR /* get correction values &js_corr */ For example, to read the number of axes char number_of_axes; ioctl (fd, JSIOCGAXES, &number_of_axes); 4.1 JSIOGCVERSION ~~~~~~~~~~~~~~~~~ JSIOGCVERSION is a good way to check in run-time whether the running driver is 1.0+ and supports the event interface. If it is not, the IOCTL will fail. For a compile-time decision, you can test the JS_VERSION symbol #ifdef JS_VERSION #if JS_VERSION > 0xsomething 4.2 JSIOCGNAME ~~~~~~~~~~~~~~ JSIOCGNAME(len) allows you to get the name string of the joystick - the same as is being printed at boot time. The 'len' argument is the length of the buffer provided by the application asking for the name. It is used to avoid possible overrun should the name be too long. char name[128]; if (ioctl(fd, JSIOCGNAME(sizeof(name)), name) < 0) strncpy(name, "Unknown", sizeof(name)); printf("Name: %s\n", name); 4.3 JSIOC[SG]CORR ~~~~~~~~~~~~~~~~~ For usage on JSIOC[SG]CORR I suggest you to look into jscal.c They are not needed in a normal program, only in joystick calibration software such as jscal or kcmjoy. These IOCTLs and data types aren't considered to be in the stable part of the API, and therefore may change without warning in following releases of the driver. Both JSIOCSCORR and JSIOCGCORR expect &js_corr to be able to hold information for all axis. That is, struct js_corr corr[MAX_AXIS]; struct js_corr is defined as struct js_corr { __s32 coef[8]; __u16 prec; __u16 type; }; and ``type'' #define JS_CORR_NONE 0x00 /* returns raw values */ #define JS_CORR_BROKEN 0x01 /* broken line */ 5. Backward compatibility ~~~~~~~~~~~~~~~~~~~~~~~~~ The 0.x joystick driver API is quite limited and its usage is deprecated. The driver offers backward compatibility, though. Here's a quick summary: struct JS_DATA_TYPE js; while (1) { if (read (fd, &js, JS_RETURN) != JS_RETURN) { /* error */ } usleep (1000); } As you can figure out from the example, the read returns immediately, with the actual state of the joystick. struct JS_DATA_TYPE { int buttons; /* immediate button state */ int x; /* immediate x axis value */ int y; /* immediate y axis value */ }; and JS_RETURN is defined as #define JS_RETURN sizeof(struct JS_DATA_TYPE) To test the state of the buttons, first_button_state = js.buttons & 1; second_button_state = js.buttons & 2; The axis values do not have a defined range in the original 0.x driver, except for that the values are non-negative. The 1.2.8+ drivers use a fixed range for reporting the values, 1 being the minimum, 128 the center, and 255 maximum value. The v0.8.0.2 driver also had an interface for 'digital joysticks', (now called Multisystem joysticks in this driver), under /dev/djsX. This driver doesn't try to be compatible with that interface. 6. Final Notes ~~~~~~~~~~~~~~ ____/| Comments, additions, and specially corrections are welcome. \ o.O| Documentation valid for at least version 1.2.8 of the joystick =(_)= driver and as usual, the ultimate source for documentation is U to "Use The Source Luke" or, at your convenience, Vojtech ;) - Ragnar EOF Linux Joystick parport drivers v1.2 BETA (c) 1998-1999 Vojtech Pavlik (c) 1998 Andree Borrmann Sponsored by SuSE ---------------------------------------------------------------------------- 0. Disclaimer ~~~~~~~~~~~~~ Any information in this file is provided as-is, without any guarantee that it will be true. So, use it at your own risk. The possible damages that can happen include burning your parallel port, and/or the sticks and joystick and maybe even more. Like when a lightning kills you it is not our problem. 1. Intro ~~~~~~~~ The joystick parport drivers are used for joysticks and gamepads not originally designed for PCs and other computers Linux runs on. Because of that, PCs usually lack the right ports to connect these devices to. Parallel port, because of its ability to change single bits at will, and providing both output and input bits is the most suitable port on the PC for connecting such devices. 2. Devices supported ~~~~~~~~~~~~~~~~~~~~ Many console and 8-bit computer gamepads and joysticks are supported. The following subsections discuss usage of each. 2.1 NES and SNES ~~~~~~~~~~~~~~~~ The Nintendo Entertainment System and Super Nintendo Entertainment System gamepads are widely available, and easy to get. Also, they are quite easy to connect to a PC, and don't need much processing speed (108 us for NES and 165 us for SNES, compared to about 1000 us for PC gamepads) to communicate with them. All NES and SNES use the same synchronous serial protocol, clocked from the computer's side (and thus timing insensitive). To allow up to 5 NES and/or SNES gamepads connected to the parallel port at once, the output lines of the parallel port are shared, while one of 5 available input lines is assigned to each gamepad. This protocol is handled by the joy-console.c driver, so that's the one you'll use for NES and SNES gamepads. The main problem with PC parallel ports is that they don't have +5V power source on any of their pins. So, if you want a reliable source of power for your pads, use either keyboard or joystick port, and make a pass-through cable. You can also pull the power directly from the power supply (the red wire is +5V). If you want to use the parallel port only, you can take the power is from some data pin. For most gamepad and parport implementations only one pin is needed, and I'd recommend pin 9 for that, the highest data bit. On the other hand, if you are not planning to use anything else than NES / SNES on the port, anything between and including pin 4 and pin 9 will work. (pin 9) -----> Power Unfortunately, there are pads that need a lot more of power, and parallel ports that can't give much current through the data pins. If this is your case, you'll need to use diodes (as a prevention of destroying your parallel port), and combine the currents of two or more data bits together. Diodes (pin 9) ----|>|-------+------> Power | (pin 8) ----|>|-------+ | (pin 7) ----|>|-------+ | : | (pin 4) ----|>|-------+ Ground is quite easy. On PC's parallel port the ground is on any of the pins from pin 18 to pin 25. So use any pin of these you like for the ground. (pin 18) -----> Ground NES and SNES pads have two input bits, Clock and Latch, which drive the serial transfer. These are connected to pins 2 and 3 of the parallel port, respectively. (pin 2) -----> Clock (pin 3) -----> Latch And the last thing is the NES / SNES data wire. Only that isn't shared and each pad needs its own data pin. The parallel port pins are: (pin 10) -----> Pad 1 data (pin 11) -----> Pad 2 data (pin 12) -----> Pad 3 data (pin 13) -----> Pad 4 data (pin 15) -----> Pad 5 data Note that pin 14 is not used, since it is not an input pin on the parallel port. This is everything you need on the PC's side of the connection, now on to the gamepads side. The NES and SNES have different connectors. Also, there are quite a lot of NES clones, and because Nintendo used proprietary connectors for their machines, the cloners couldn't and used standard D-Cannon connectors. Anyway, if you've got a gamepad, and it has buttons A, B, Turbo A, Turbo B, Select and Start, and is connected through 5 wires, then it is either a NES or NES clone and will work with this connection. SNES gamepads also use 5 wires, but have more buttons. They will work as well, of course. Pinout for NES gamepads Pinout for SNES gamepads +----> Power +-----------------------\ | 7 | o o o o | x x o | 1 5 +---------+ 7 +-----------------------/ | x x o \ | | | | | | o o o o | | | | | +-> Ground 4 +------------+ 1 | | | +------------> Data | | | | | | +---------------> Latch | | | +-> Ground | +------------------> Clock | | +----> Clock +---------------------> Power | +-------> Latch +----------> Data Pinout for NES clone (db9) gamepads Pinout for NES clone (db15) gamepads +---------> Clock +-----------------> Data | +-------> Latch | +---> Ground | | +-----> Data | | | | | ___________________ _____________ 8 \ o x x x x x x o / 1 5 \ x o o o x / 1 \ o x x o x x o / \ x o x o / 15 `~~~~~~~~~~~~~' 9 9 `~~~~~~~' 6 | | | | | | | +----> Clock | +----> Power | +----------> Latch +--------> Ground +----------------> Power 2.2 Multisystem joysticks ~~~~~~~~~~~~~~~~~~~~~~~~~ In the era of 8-bit machines, there was something like de-facto standard for joystick ports. They were all digital, and all used D-Cannon 9 pin connectors (db9). Because of that, a single joystick could be used without hassle on Atari (130, 800XE, 800XL, 2600, 7200), Amiga, Commodore C64, Amstrad CPC, Sinclair ZX Spectrum and many other machines. That's why these joysticks are called "Multisystem". Now their pinout: +---------> Right | +-------> Left | | +-----> Down | | | +---> Up | | | | _____________ 5 \ x o o o o / 1 \ x o x o / 9 `~~~~~~~' 6 | | | +----> Button +--------> Ground However, as time passed, extension to this standard developed, and these were not compatible with each other: Atari 130, 800(XL/XE) MSX +-----------> Power +---------> Right | +---------> Right | +-------> Left | | +-------> Left | | +-----> Down | | | +-----> Down | | | +---> Up | | | | +---> Up | | | | | | | | | _____________ _____________ 5 \ x o o o o / 1 5 \ o o o o o / 1 \ x o o o / \ o o o o / 9 `~~~~~~~' 6 9 `~~~~~~~' 6 | | | | | | | | | +----> Button | | | +----> Button 1 | +------> Power | | +------> Button 2 +--------> Ground | +--------> Output 3 +----------> Ground Amstrad CPC Commodore C64 +-----------> Analog Y +---------> Right | +---------> Right | +-------> Left | | +-------> Left | | +-----> Down | | | +-----> Down | | | +---> Up | | | | +---> Up | | | | | | | | | _____________ _____________ 5 \ x o o o o / 1 5 \ o o o o o / 1 \ x o o o / \ o o o o / 9 `~~~~~~~' 6 9 `~~~~~~~' 6 | | | | | | | | | +----> Button 1 | | | +----> Button | +------> Button 2 | | +------> Power +--------> Ground | +--------> Ground +----------> Analog X And there were many others. 2.2.1 Multisystem joysticks using joy-db9.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For the Multisystem joysticks, and their derivatives, the joy-db9.c driver was written. It allows only one joystick / gamepad per parallel port, but the interface is easy to build and works with almost anything. For the basic 1-button Multisystem joystick you connect its wires to the parallel port like this: (pin 1) -----> Power (pin 18) -----> Ground (pin 2) -----> Up (pin 3) -----> Down (pin 4) -----> Left (pin 5) -----> Right (pin 6) -----> Button 1 However, if the joystick is switch based (eg. clicks when you move it), you might or might not, depending on your parallel port, need 10 kOhm pullup resistors on each of the direction and button signals, like this: (pin 2) ------------+------> Up Resistor | (pin 1) --[10kOhm]--+ Try without, and if it doesn't work, add them. For TTL based joysticks / gamepads the pullups are not needed. For joysticks with two buttons you connect the second button to pin 7 on the parallel port. (pin 7) -----> Button 2 And that's it. On a side note, if you have already built a different adapter for use with the digital joystick driver 0.8.0.2, this is also supported by the joy-db9.c driver, as device type 8. (See section 3.2) 2.2.2 Multisystem joysticks using joy-console.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For some people just one joystick per parallel port is not enough, and/or want to use them on one parallel port together with NES/SNES/PSX pads. This is possible using the joy-console.c. It supports up to 5 devices of the above types, including 1 and 2 buttons Multisystem joysticks. However, there is nothing for free. To allow more sticks to be used at once, you need the sticks to be purely switch based (that is non-TTL), and not to need power. Just a plain simple six switches inside. If your joystick can do more (eg. turbofire) you'll need to disable it totally first if you want to use joy-console.c. Also, the connection is a bit more complex. You'll need a bunch of diodes, and one pullup resistor. First, you connect the Directions and the button the same as for joy-db9, however with the diodes inbetween. Diodes (pin 2) -----|<|----> Up (pin 3) -----|<|----> Down (pin 4) -----|<|----> Left (pin 5) -----|<|----> Right (pin 6) -----|<|----> Button 1 For two button sticks you also connect the other button. (pin 7) -----|<|----> Button 2 And finally, you connect the Ground wire of the joystick, like done in this little schematic to Power and Data on the parallel port, as described for the NES / SNES pads in section 2.1 of this file - that is, one data pin for each joystick. The power source is shared. Data ------------+-----> Ground Resistor | Power --[10kOhm]--+ And that's all, here we go! 2.2.3 Multisystem joysticks using joy-turbografx.c ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The TurboGraFX interface, designed by Steffen Schwenke allows up to 7 Multisystem joysticks connected to the parallel port. In Steffen's version, there is support for up to 5 buttons per joystick. However, since this doesn't work reliably on all parallel ports, the joy-turbografx.c driver supports only one button per joystick. For more information on how to build the interface, see http://www2.burg-halle.de/~schwenke/parport.html 2.3 Sony Playstation ~~~~~~~~~~~~~~~~~~~~ WARNING: PSX support is experimental, and at the moment doesn't seem to work for most people. If you like adventure, you can try yourself. The PSX controller is supported by the joy-console.c. Pinout of the PSX controller (compatible with DirectPadPro): +---------+---------+---------+ 9 | o o o | o o o | o o o | 1 parallel \________|_________|________/ port pins | | | | | | | | | | | +--------> Clock --- (4) | | | | +------------> Select --- (3) | | | +---------------> Power --- (5-9) | | +------------------> Ground --- (18-25) | +-------------------------> Command --- (2) +----------------------------> Data --- (10,11,12,13,15) one only... You may have to add pull up/down resistors. Maybe your pad also won't like the 5V (PSX uses 3.7V). Currently the driver supports only one psx pad per parallel port, and these controllers: * Standard PSX Pad * NegCon PSX Pad * Analog PSX Pad (red mode) * Analog PSX Pad (green mode) 2.4 Sega ~~~~~~~~ All the Sega controllers are more or less based on the standard 2-button Multisystem joystick. However, since they don't use switches and use TTL logic, the only driver useable with them is the joy-db9.c driver. 2.4.1 Sega Master System ~~~~~~~~~~~~~~~~~~~~~~~~ The SMS gamepads are almost exactly the same as normal 2-button Multisystem joysticks. Set the driver to Multi2 mode, use the corresponding parallel port pins, and the following schematic: +-----------> Power | +---------> Right | | +-------> Left | | | +-----> Down | | | | +---> Up | | | | | _____________ 5 \ o o o o o / 1 \ o o x o / 9 `~~~~~~~' 6 | | | | | +----> Button 1 | +--------> Ground +----------> Button 2 2.4.2 Sega Genesis aka MegaDrive ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The Sega Genesis (in Europe sold as Sega MegaDrive) pads are an extension to the Sega Master System pads. They use more buttons (3+1, 5+1, 6+1). Use the following schematic: +-----------> Power | +---------> Right | | +-------> Left | | | +-----> Down | | | | +---> Up | | | | | _____________ 5 \ o o o o o / 1 \ o o o o / 9 `~~~~~~~' 6 | | | | | | | +----> Button 1 | | +------> Select | +--------> Ground +----------> Button 2 The Select pin goes to pin 14 on the parallel port. (pin 14) -----> Select The rest is the same as for Multi2 joysticks using joy-db9.c 2.4.3 Sega Saturn ~~~~~~~~~~~~~~~~~ Sega Saturn has eight buttons, and to transfer that, without hacks like Genesis 6 pads use, it needs one more select pin. Anyway, it is still handled by the joy-db9.c driver. Its pinout is very different from anything else. Use this schematic: +-----------> Select 1 | +---------> Power | | +-------> Up | | | +-----> Down | | | | +---> Ground | | | | | _____________ 5 \ o o o o o / 1 \ o o o o / 9 `~~~~~~~' 6 | | | | | | | +----> Select 2 | | +------> Right | +--------> Left +----------> Power Select 1 is pin 14 on the parallel port, Select 2 is pin 16 on the parallel port. (pin 14) -----> Select 1 (pin 16) -----> Select 2 The other pins (Up, Down, Right, Left, Power, Ground) are the same as for Multi joysticks using joy-db9.c 3. The drivers ~~~~~~~~~~~~~~ There are three drivers for the parallel port interfaces. Each, as described above, allows to connect a different group of joysticks and pads. Here are described their command lines: 3.1 joy-console.c ~~~~~~~~~~~~~~~~~ Using joy-console.c you can connect up to five devices to one parallel port. It uses the following kernel/module command line: js_console=port,pad1,pad2,pad3,pad4,pad5 Where 'port' is either the address of the parallel port the joystick/pad is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). And 'pad1' to 'pad5' are pad types connected to different data input pins (10,11,12,13,15), as described in section 2.1 of this file. The types are: Type | Joystick/Pad -------------------- 0 | None 1 | SNES pad 2 | NES pad 4 | Multisystem 1-button joystick 5 | Multisystem 2-button joystick 6 | Sony PSX controller 7 | N64 pad 8 | N64 pad with direction pad as buttons (DirectPadPro style) The exact type of the PSX controller type is autoprobed, so you must have your controller plugged in before initializing. Should you want to use more than one of parallel ports at once, you can use js_console_2 and js_console_3 as additional command line parameters for two more parallel ports. Changes: v0.1 : First version (SNES only) v0.2 : X/Y directions were exchanged... v0.3 : Adaptation for kernel 2.1 v0.4 : Adaptation for joystick-1.2.6 - added open/close callbacks v0.5 : Renamed to "joy-console" because I have added PSX controller support. v0.6 : NES support v0.7V : Added "multi system" support v0.8 : Bugfixed PSX driver... v0.9V : Changed multi system support Added Multi2 support Fixed parport handling Cleaned up v0.10 : Fixed PSX buttons 8 and 9 v0.11V: Switched to EXCL mode Removed wakeup v0.12V: Added N64 support v0.13V: Updated N64 support v0.14V: Fixed N64 axis/button counts 3.2 joy-db9.c ~~~~~~~~~~~~~ Apart from making an interface, there is nothing difficult on using the joy-db9.c driver. It uses the following kernel/module command line: js_db9=port,type Where 'port' is either the address of the parallel port the joystick/pad is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). Caveat here: This driver only works on bidirectional parallel ports. If your parallel port is recent enough, you should have no trouble with this. Old parallel ports may not have this feature. 'Type' is the type of joystick or pad attached: Type | Joystick/Pad -------------------- 0 | None 1 | Multisystem 1-button joystick 2 | Multisystem 2-button joystick 3 | Genesis pad (3+1 buttons) 5 | Genesis pad (5+1 buttons) 6 | Genesis pad (6+2 buttons) 7 | Saturn pad (8 buttons) 8 | Multisystem 1-button joystick (v0.8.0.2 pin-out) 9 | Two Multiststem 1-button joysticks (v0.8.0.2 pin-out) Should you want to use more than one of these joysticks/pads at once, you can use js_db9_2 and js_db9_3 as additional command line parameters for two more joysticks/pads. Changes: v0.1 : First version v0.2 : Changed kernel parameter format v0.3V: Added Sega Saturn support Fixed parport and PS/2 mode handling Cleaned up v0.4V: Switched to EXCL mode Removed wakeup v0.5V: Added 0.8.0.2 HW compatibility for Multi sticks v0.6V: Better timing for Genesis 6 v0.7V: Added 0.8.0.2 second joystick support 3.3 joy-turbografx.c ~~~~~~~~~~~~~~~~~~~~ The joy-turbografx.c driver uses a very simple kernel/module command line: js_tg=port,js1,js2,js3,js4,js5,js6,js7 Where 'port' is either the address of the parallel port the interface is connected to (eg. 0x378), or, if you are using the parport driver of 2.1+ Linux kernels, the number of the parport interface (eg. 0 for parport0). 'jsX' is the number of buttons the Multisystem joysticks connected to the interface ports 1-7 have. For a standard multisystem joystick, this is 1. Should you want to use more than one of these interfaces at once, you can use js_tg_2 and js_tg_3 as additional command line parameters for two more interfaces. 3.4 PC parallel port pinout ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .----------------------------------------. At the PC: \ 13 12 11 10 9 8 7 6 5 4 3 2 1 / \ 25 24 23 22 21 20 19 18 17 16 15 14 / ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pin | Name | Description ~~~~~~|~~~~~~~~~|~~~~~~~~~~ 1 | /STROBE | Strobe 2-9 | D0-D7 | Data Bit 0-7 10 | /ACK | Acknowledge 11 | BUSY | Busy 12 | PE | Paper End 13 | SELIN | Select In 14 | /AUTOFD | Autofeed 15 | /ERROR | Error 16 | /INIT | Initialize 17 | /SEL | Select 18-25 | GND | Signal Ground 3.5 End ~~~~~~~ That's all, folks! Have fun! Index of Documentation for People Interested in Writing and/or Understanding the Linux Kernel. Juan-Mariano de Goyeneche < jmseyas@dit.upm.es> /* * The latest version of this document may be found at: * http://www.dit.upm.es/~jmseyas/linux/kernel/hackers-docs.html */ The need for a document like this one became apparent in the linux-kernel mailing list as the same questions, asking for pointers to information, appeared again and again. Fortunately, as more and more people get to GNU/Linux, more and more get interested in the Kernel. But reading the sources is not always enough. It is easy to understand the code, but miss the concepts, the philosophy and design decisions behind this code. Unfortunately, not many documents are available for beginners to start. And, even if they exist, there was no "well-known" place which kept track of them. These lines try to cover this lack. All documents available on line known by the author are listed, while some reference books are also mentioned. PLEASE, if you know any paper not listed here or write a new document, send me an e-mail, and I'll include a reference to it here. Any corrections, ideas or comments are also welcomed. The papers that follow are listed in no particular order. All are cataloged with the following fields: the document's "Title", the "Author"/s, the "URL" where they can be found, some "Keywords" helpful when searching for specific topics, and a brief "Description" of the Document. Enjoy! ON-LINE DOCS: * Title: "The Linux Kernel" Author: David A. Rusling. URL: http://sunsite.unc.edu/linux/LDP/tlk/tlk.html Keywords: everything!, book. Description: On line, 200 pages book describing most aspects of the Linux Kernel. Probably, the first reference for beginners. Lots of illustrations explaining data structures use and relationships in the purest Richard W. Stevens' style. Contents: "1.-Hardware Basics, 2.-Software Basics, 3.-Memory Management, 4.-Processes, 5.-Interprocess Communication Mechanisms, 6.-PCI, 7.-Interrupts and Interrupt Handling, 8.-Device Drivers, 9.-The File system, 10.-Networks, 11.-Kernel Mechanisms, 12.-Modules, 13.-The Linux Kernel Sources, A.-Linux Data Structures, B.-The Alpha AXP Processor, C.-Useful Web and FTP Sites, D.-The GNU General Public License, Glossary". In short: a must have. * Title: "The Linux Kernel Hackers' Guide" Author: Michael K.Johnson and others. URL: http://khg.redhat.com/HyperNews/get/khg.html Keywords: everything! Description: No more Postscript book-like version. Only HTML now. Many people have contributed. The interface is similar to web available mailing lists archives. You can find some articles and then some mails asking questions about them and/or complementing previous contributions. A little bit anarchic in this aspect, but with some valuable information in some cases. * Title: "Conceptual Architecture of the Linux Kernel" Author: Ivan T. Bowman. URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a1.html Keywords: conceptual software arquitecture, extracted design, reverse engineering, system structure. Description: Conceptual software arquitecture of the Linux kernel, automatically extracted from the source code. Very detailed. Good figures. Gives good overall kernel understanding. * Title: "Concrete Architecture of the Linux Kernel" Author: Ivan T. Bowman, Saheem Siddiqi, and Meyer C. Tanuan. URL: http://plg.uwaterloo.ca/~itbowman/papers/CS746G-a2.html Keywords: concrete arquitecture, extracted design, reverse engineering, system structure, dependencies. Description: Concrete arquitecture of the Linux kernel, automatically extracted from the source code. Very detailed. Good figures. Gives good overall kernel understanding. This papers focus on lower details than its predecessor (files, variables...). * Title: "Linux as a Case Study: Its Extracted Software Architecture" Author: Ivan T. Bowman, Richard C. Holt and Neil V. Brewster. URL: http://plg.uwaterloo.ca/~itbowman/papers/linuxcase.html Keywords: software architecture, architecture recovery, redocumentation. Description: Paper appeared at ICSE'99, Los Angeles, May 16-22, 1999. A mixture of the previous two documents from the same author. * Title: "Overview of the Virtual File System" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/vfs.txt Keywords: VFS, File System, mounting filesystems, opening files, dentries, dcache. Description: Brief introduction to the Linux Virtual File System. What is it, how it works, operations taken when opening a file or mounting a file system and description of important data structures explaining the purpose of each of their entries. * Title: "The Linux RAID-1, 4, 5 Code" Author: Ingo Molnar, Gadi Oxman and Miguel de Icaza. URL: http://www.ssc.com/lj/issue44/2391.html Keywords: RAID, MD driver. Description: Linux Journal Kernel Korner article. Here is it's abstract: "A description of the implementation of the RAID-1, RAID-4 and RAID-5 personalities of the MD device driver in the Linux kernel, providing users with high performance and reliable, secondary-storage capability using software". * Title: "Dynamic Kernels: Modularized Device Drivers" Author: Alessandro Rubini. URL: http://www.ssc.com/lj/issue23/1219.html Keywords: device driver, module, loading/unloading modules, allocating resources. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This is the first of a series of four articles co-authored by Alessandro Rubini and Georg Zezchwitz which present a practical approach to writing Linux device drivers as kernel loadable modules. This installment presents an introduction to the topic, preparing the reader to understand next month's installment". * Title: "Dynamic Kernels: Discovery" Author: Alessandro Rubini. URL: http://www.ssc.com/lj/issue24/kk24.html Keywords: character driver, init_module, clean_up module, autodetection, mayor number, minor number, file operations, open(), close(). Description: Linux Journal Kernel Korner article. Here is it's abstract: "This article, the second of four, introduces part of the actual code to create custom module implementing a character device driver. It describes the code for module initialization and cleanup, as well as the open() and close() system calls". * Title: "The Devil's in the Details" Author: Georg v. Zezschwitz and Alessandro Rubini. URL: http://www.ssc.com/lj/issue25/kk25.html Keywords: read(), write(), select(), ioctl(), blocking/non blocking mode, interrupt handler. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This article, the third of four on writing character device drivers, introduces concepts of reading, writing, and using ioctl-calls". * Title: "Dissecting Interrupts and Browsing DMA" Author: Alessandro Rubini and Georg v. Zezschwitz. URL: http://www.ssc.com/lj/issue26/interrupt.html Keywords: interrupts, irqs, DMA, bottom halves, task queues. Description: Linux Journal Kernel Korner article. Here is it's abstract: "This is the fourth in a series of articles about writing character device drivers as loadable kernel modules. This month, we further investigate the field of interrupt handling. Though it is conceptually simple, practical limitations and constraints make this an ``interesting'' part of device driver writing, and several different facilities have been provided for different situations. We also investigate the complex topic of DMA". * Title: "Device Drivers Concluded" Author: Georg v. Zezschwitz. URL: http://www2.linuxjournal.com/lj-issues/issue28/1287.html Keywords: address spaces, pages, pagination, page management, demand loading, swapping, memory protection, memory mapping, mmap, virtual memory areas (VMAs), vremap, PCI. Description: Finally, the above turned out into a five articles series. This latest one's introduction reads: "This is the last of five articles about character device drivers. In this final section, Georg deals with memory mapping devices, beginning with an overall description of the Linux memory management concepts". * Title: "Network Buffers And Memory Management" Author: Alan Cox. URL: http://www.ssc.com/lj/issue30/kk30.html Keywords: sk_buffs, network devices, protocol/link layer variables, network devices flags, transmit, receive, configuration, multicast. Description: Linux Journal Kernel Korner. Here is the abstract: "Writing a network device driver for Linux is fundamentally simple---most of the complexity (other than talking to the hardware) involves managing network packets in memory". * Title: "An Introduction to the Linux 1.3.x Networking Code" Author: Vipul Gupta. URL: http://anchor.cs.binghamton.edu/courses/cs628/linux-net.html Keywords: files, sk_buffs. Description: A short description of files under the net/ directory. Each file has a one or two lines paragraph description. sk_buffs explained, too, with some beautiful pictures. A little bit outdated. * Title: "Linux ioctl() Primer" Author: Vipul Gupta. URL: http://anchor.cs.binghamton.edu/courses/cs628/ioctl.html Keywords: ioctl, socket. Description: Little description and examples on the use and implementation of the ioctl() system call. A little bit biased towards sockets. * Title: "Writing Linux Device Drivers" Author: Michael K. Johnson. URL: http://www.redhat.com/~johnsonm/devices.html Keywords: files, VFS, file operations, kernel interface, character vs block devices, I/O access, hardware interrupts, DMA, access to user memory, memory allocation, timers. Description: Introductory 50-minutes (sic) tutorial on writing device drivers. 12 pages written by the same author of the "Kernel Hackers' Guide" which give a very good overview of the topic. * Title: "The Venus kernel interface" Author: Peter J. Braam. URL: http://www.coda.cs.cmu.edu/doc/html/kernel-venus-protocol.html Keywords: coda, filesystem, venus, cache manager. Description: "This document describes the communication between Venus and kernel level file system code needed for the operation of the Coda filesystem. This version document is meant to describe the current interface (version 1.0) as well as improvements we envisage". * Title: "Programming PCI-Devices under Linux" Author: Claus Schroeter. URL: ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/pcip.ps .gz Keywords: PCI, device, busmastering. Description: 6 pages tutorial on PCI programming under Linux. Gives the basic concepts on the architecture of the PCI subsystem, as long as basic functions and macros to read/write the devices and perform busmastering. * Title: "Writing Character Device Driver for Linux" Author: R. Baruch and C. Schroeter. URL: ftp://ftp.llp.fu-berlin.de/pub/linux/LINUX-LAB/whitepapers/drivers .ps.gz Keywords: character device drivers, I/O, signals, DMA, accesing ports in user space, kernel environment. Description: 68 pages paper on writing character drivers. A little bit old (1.993, 1.994) although still useful. * Title: "Design and Implementation of the Second Extended Filesystem" Author: Rmy Card, Theodore Ts'o, Stephen Tweedie. URL: http://web.mit.edu/tytso/www/linux/ext2intro.html Keywords: ext2, linux fs history, inode, directory, link, devices, VFS, physical structure, performance, benchmarks, ext2fs library, ext2fs tools, e2fsck. Description: Paper written by three of the top ext2 hackers. Covers Linux filesystems history, ext2 motivation, ext2 features, design, physical structure on disk, performance, benchmarks, e2fsck's passes description... A must read! Notes: This paper was first published in the Proceedings of the First Dutch International Symposium on Linux, ISBN 90-367-0385-9. * Title: "The Second Extended Filesystem" Author: Matthew Wilcox. URL: http://pocket.fluff.org/~mrw/linux/ext2.txt Keywords: ext2, filesystem. Description: Description of ext2's blocks, directories, inodes... Notes: Seems to be DOWN. Anyone knows another link for it? * Title: "Analysis of the Ext2fs structure" Author: Louis-Dominique Dubeau. URL: http://step.polymtl.ca/~ldd/ext2fs/ext2fs_toc.html Keywords: ext2, filesystem, ext2fs. Description: Description of ext2's blocks, directories, inodes, bitmaps, invariants ... * Title: "Journaling the Linux ext2fs Filesystem" Author: Stephen C. Tweedie. URL: ftp://ftp.uk.linux.org:/pub/linux/sct/fs/jfs/journal-design.ps.gz Keywords: ext3, journalist. Description: Excellent 8-pages paper explaining the journaling capabilities added to ext2 by the author, showing different problems faced and the alternatives chosen. * Title: "Kernel API changes from 2.0 to 2.2" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.2.html Keywords: 2.2, changes. Description: Kernel functions/structures/variables which changed from 2.0.x to 2.2.x. * Title: "Kernel API changes from 2.2 to 2.3" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/porting-to-2.3.html Keywords: 2.3, changes. Description: Kernel functions/structures/variables which changed from 2.2.x to 2.3.x. * Title: "Linux Kernel Module Programming Guide" Author: Ori Pomerantz. URL: http://www.linuxdoc.org/LDP/lkmpg/mpg.html Keywords: modules, GPL book, /proc, ioctls, system calls, interrupt handlers . Description: Very nice 92 pages GPL book on the topic of modules programming. Lots of examples. * Title: "Device File System (devfs) Overview" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.txt Keywords: filesystem, /dev, devfs, dynamic devices, major/minor allocation, device management. Description: Document describing Richard Gooch's controversial devfs, which allows for dynamic devices, only shows present devices in /dev, gets rid of major/minor numbers allocation problems, and allows for hundreds of identical devices (which some USB systems might demand soon). * Title: "I/O Event Handling Under Linux" Author: Richard Gooch. URL: http://www.atnf.csiro.au/~rgooch/linux/docs/io-events.html Keywords: IO, I/O, select(2), poll(2), FDs, aio_read(2), readiness event queues. Description: From the Introduction: "I/O Event handling is about how your Operating System allows you to manage a large number of open files (file descriptors in UNIX/POSIX, or FDs) in your application. You want the OS to notify you when FDs become active (have data ready to be read or are ready for writing). Ideally you want a mechanism that is scalable. This means a large number of inactive FDs cost very little in memory and CPU time to manage". * Title: "The Kernel Hacking HOWTO" Author: Various Talented People, and Rusty. URL: http://www.samba.org/~netfilter/kernel-hacking-HOWTO.html Keywords: HOWTO, kernel contexts, deadlock, locking, modules, symbols, return conventions. Description: From the Introduction: "Please understand that I never wanted to write this document, being grossly underqualified, but I always wanted to read it, and this was the only way. I simply explain some best practices, and give reading entry-points into the kernel sources. I avoid implementation details: that's what the code is for, and I ignore whole tracts of useful routines. This document assumes familiarity with C, and an understanding of what the kernel is, and how it is used. It was originally written for the 2.3 kernels, but nearly all of it applies to 2.2 too; 2.0 is slightly different. ". * Title: "ALSA 0.5.0 Developer documentation" Author: Stephan 'Jumpy' Bartels . URL: http://www.math.TU-Berlin.de/~sbartels/alsa/ Keywords: ALSA, sound, soundcard, driver, lowlevel, hardware. Description: Advanced Linux Sound Architecture for developers, both at kernel and user-level sides. Work in progress. ALSA is supposed to be Linux's next generation sound architecture. * Title: "Programming Guide for Linux USB Device Drivers" Author: Detlef Fliegl. URL: http://usb.in.tum.de/usbdoc/ Keywords: USB, universal serial bus. Description: A must-read. From the Preface: "This document should give detailed information about the current state of the USB subsystem and its API for USB device drivers. The first section will deal with the basics of USB devices. You will learn about different types of devices and their properties. Going into detail you will see how USB devices communicate on the bus. The second section gives an overview of the Linux USB subsystem [2] and the device driver framework. Then the API and its data structures will be explained step by step. The last section of this document contains a reference of all API calls and their return codes". Notes: Beware: the main page states: "This document may not be published, printed or used in excerpts without explicit permission of the author". Fortunately, it may still be read... * Title: "Tour Of the Linux Kernel Source" Author: Vijo Cherian. URL: http://www.geocities.com/vijoc/tolks/tolks.html Keywords: . Description: A classic of this page! Was lost for a while and is back again. Thanks Vijo! TOLKS: the name says it all. A tour of the sources, describing directories, files, variables, data structures... It covers general stuff, device drivers, filesystems, IPC and Networking Code. * Title: "Linux Kernel Mailing List Glossary" Author: John Levon. URL: http://www.movement.uklinux.net/glossary.html Keywords: glossary, terms, linux-kernel. Description: From the introduction: "This glossary is intended as a brief description of some of the acronyms and terms you may hear during discussion of the Linux kernel". * Title: "Linux Kernel Locking HOWTO" Author: Various Talented People, and Rusty. URL: http://netfilter.kernelnotes.org/unreliable-guides/kernel-locking- HOWTO.html Keywords: locks, locking, spinlock, semaphore, atomic, race condition, bottom halves, tasklets, softirqs. Description: The title says it all: document describing the locking system in the Linux Kernel either in uniprocessor or SMP systems. Notes: "It was originally written for the later (>2.3.47) 2.3 kernels, but most of it applies to 2.2 too; 2.0 is slightly different". Freely redistributable under the conditions of the GNU General Public License. BOOKS: (Not on-line) * Title: "Linux Device Drivers" Author: Alessandro Rubini. Publisher: O'Reilly &Associates. Date: 1998. ISBN: 1-56592-292-1 * Title: "Linux Kernel Internals" Author: Michael Beck. Publisher: Addison-Wesley. Date: 1997. ISBN: 0-201-33143-8 (second edition) * Title: "The Design of the UNIX Operating System" Author: Maurice J. Bach. Publisher: Prentice Hall. Date: 1986. Pages: 471. ISBN: 0-13-201757-1 * Title: "The Design and Implementation of the 4.3 BSD UNIX Operating System" Author: Samuel J. Leffler, Marshall Kirk McKusick, Michael J. Karels, John S. Quarterman. Publisher: Addison-Wesley. Date: 1989 (reprinted with corrections on October, 1990). ISBN: 0-201-06196-1 * Title: "The Design and Implementation of the 4.4 BSD UNIX Operating System" Author: Marshall Kirk McKusick, Keith Bostic, Michael J. Karels, John S. Quarterman. Publisher: Addison-Wesley. Date: 1996. ISBN: 0-201-54979-4 * Title: "Programmation Linux 2.0 API systeme et fonctionnement du noyau" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: Eyrolles. Date: 1997. Pages: 520. ISBN: 2-212-08932-5 Notes: French. * Title: "The Linux Kernel Book" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: John Wiley & Sons. Date: 1998. ISBN: 0-471-98141-9 Notes: English translation. * Title: "Linux 2.0" Author: Remy Card, Eric Dumas, Franck Mevel. Publisher: Gestin 2000. Date: 1997. Pages: 501. ISBN: 8-480-88208-5 Notes: Spanish translation. * Title: "Unix internals -- the new frontiers" Author: Uresh Vahalia. Publisher: Prentice Hall. Date: 1996. Pages: 600. ISBN: 0-13-101908-2 * Title: "Linux Core Kernel Commentary. Guide to Insider's Knowledge on the Core Kernel od the Linux Code" Author: Scott Maxwell. Publisher: Coriolis. Date: 1999. Pages: 592. ISBN: 1-57610-469-9 Notes: CD-ROM included. Line by line commentary of the kernel code. * Title: "Linux IP Stacks Commentary" Author: Stephen Satchell and HBJ Clifford. Publisher: Coriolis. Date: 2000. Pages: ???. ISBN: 1-57610-470-2 Notes: Line by line source code commentary book. * Title: "Programming for the real world - POSIX.4" Author: Bill O. Gallmeister. Publisher: O'Reilly & Associates, Inc.. Date: 1995. Pages: ???. ISBN: I-56592-074-0 Notes: Though not being directly about Linux, Linux aims to be POSIX. Good reference. MISCELLANEOUS: * Name: "Linux Source Driver" URL: http://lsd.linux.cz Keywords: Browsing source code. Description: "Linux Source Driver (LSD) is an application, which can make browsing source codes of Linux kernel easier than you can imagine. You can select between multiple versions of kernel (e.g. 0.01, 1.0.0, 2.0.33, 2.0.34pre13, 2.0.0, 2.1.101 etc.). With LSD you can search Linux kernel (fulltext, macros, types, functions and variables) and LSD can generate patches for you on the fly (files, directories or kernel)". * Name: "Cross-Referencing Linux" URL: http://lxr.linux.no/source/ Keywords: Browsing source code. Description: Another web-based Linux kernel source code browser. Lots of cross references to variables and functions. You can see where they are defined and where they are used. * Name: "Linux Weekly News" URL: http://lwn.net Keywords: latest kernel news. Description: The title says it all. There's a fixed kernel section summarizing developers' work, bug fixes, new features and versions produced during the week. Published every Thursday. * Name: "Kernel Traffic" URL: http://kt.zork.net Keywords: linux-kernel mailing list, weekly kernel news. Description: Weekly newsletter covering the most relevant discussions of the linux-kernel mailing list. * Name: "CuTTiNG.eDGe.LiNuX" URL: http://edge.kernelnotes.org Keywords: changelist. Description: Site which provides the changelist for every kernel release. What's new, what's better, what's changed. Myrdraal reads the patches and describes them. Pointers to the patches are there, too. * Name: "New linux-kernel Mailing List FAQ" URL: Original site: http://www.altern.org/andrebalsa/doc/lkml-faq.html URL: U.S. mirror site: http://www.ececs.uc.edu/~rreilova/linux/lkml-faq.html Keywords: linux-kernel mailing list FAQ. Description: linux-kernel is a mailing list for developers to communicate. This FAQ builds on the previous linux-kernel mailing list FAQ maintained by Frohwalt Egerer, who no longer maintains it. Read it to see how to join the mailing list. Dozens of interesting questions regarding the list, Linux, developers (who is ...?), terms (what is...?) are answered here too. Just read it. * Name: "Linux Virtual File System" Author: Peter J. Braam. URL: http://www.coda.cs.cmu.edu/doc/talks/linuxvfs Keywords: slides, VFS, inode, superblock, dentry, dcache. Description: Set of slides, presumably from a presentation on the Linux VFS layer. Covers version 2.1.x, with dentries and the dcache. * Name: "Gary's Enciclopedia - The Linux Kernel" Author: Gary (I suppose...). URL: http://members.aa.net/~swear/pedia/kernel.html Keywords: links, not found here?. Description: Gary's Enciclopedia exists to allow the rapid finding of documentation and other information of interest to GNU/Linux users. It has about 4000 links to external pages in 150 major categories. This link is for kernel-specific links, documents, sites... Look there if you could not find here whar you were looking for. * Name: "The home page of Linux-MM" Author: The Linux-MM team. URL: http://www.linux.eu.org/Linux-MM/ Keywords: memory management, Linux-MM, mm patches, TODO, docs, mailing list. Description: Site devoted to Linux Memory Mangement development. Memory related patches, HOWTOs, links, mm developers... Don't miss it if you are interested in memory management development! * Name: "Kernel Newbies IRC Channel" URL: http://www.surriel.com/kernelnewbies.shtml Keywords: IRC, newbies, channel, asking doubts. Description: #kernelnewbies on irc.openprojects.net. From the web page: "#kernelnewbies is an IRC network dedicated to the 'newbie' kernel hacker. The audience mostly consists of people who are learning about the kernel, working on kernel projects or professional kernel hackers that want to help less seasoned kernel people. [...] #kernelnewbies is on the Open Projects IRC Network, try irc.openprojects.net or irc..openprojects.net as your server and then /join #kernelnewbies". * Name: "linux-kernel mailing list archives and search engines" URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html URL: http://www.kernelnotes.org/lnxlists/linux-kernel/ Keywords: linux-kernel, archives, search. Description: Some of the linux-kernel mailing list archivers. If you have a better/another one, please let me know. _________________________________________________________________ Document last updated on Mon Apr 17 18:07:07 CEST 2000 June 1999 Kernel Parameters v2.2.9 ~~~~~~~~~~~~~~~~~ The following is a consolidated list of the kernel parameters as defined in the file init/main.c and sorted into English Dictionary order (defined as ignoring all punctuation and sorting digits before letters in a case insensitive manner), and with descriptions where known. The text in square brackets at the beginning of the description state the restrictions on the kernel for the said kernel parameter to be valid. The restrictions referred to are that the relevant option is valid if: APIC APIC support is enabled. APM Advanced Power Management support is enabled. AX25 Appropriate AX.25 support is enabled. CD Appropriate CD support is enabled. EIDE EIDE/ATAPI support is enabled. FB The frame buffer device is enabled. HW Appropriate hardware is enabled. ISDN Appropriate ISDN support is enabled. JOY Appropriate joystick support is enabled. LPT Printer support is enabled. MCA MCA bus support is enabled. MDA The MDA console is enabled. MOUSE Appropriate mouse support is enabled. NET Appropriate network support is enabled. NFS Appropriate NFS support is enabled. PARIDE The ParIDE subsystem is enabled. PCI PCI bus support is enabled. PCMCIA The PCMCIA subsystem is enabled. PNP Plug & Play support is enabled. PS2 Appropriate PS/2 support is enabled. RAM RAMdisc support is enabled. SCSI Appropriate SCSI support is enabled. SERIAL Serial support is enabled. SMP The kernel is an SMP kernel. SOUND Appropriate sound system support is enabled. VGA The VGA console has been enabled. VT Virtual terminal support is enabled. XT IBM PC/XT MFM hard disk support is enabled. In addition, the following text indicates that the option: BUGS= Relates to possible processor bugs on the said processor. KNL Is a kernel start-up parameter. Note that ALL kernel parameters listed below are CASE SENSITIVE, and that a trailing = on the name of any parameter states that that parameter will be entered as an environment variable, whereas its absence indicates that it will appear as a kernel argument readable via /proc/cmdline by programs running once the system is up. 53c7xx= [HW,SCSI] Amiga SCSI controllers adb_buttons= [HW,MOUSE] advansys= [HW,SCSI] aha152x= [HW,SCSI] aha1542= [HW,SCSI] aic7xxx= [HW,SCSI] AM53C974= [HW,SCSI] apm= [APM] Advanced Power Management. arcrimi= [HW,NET] ataflop= [HW, M68k] atamouse= [HW,MOUSE] Atari Mouse. atascsi= [HW,SCSI] Atari SCSI. aztcd= [HW,CD] Aztec CD driver. baycom_par= [HW,AX25] BayCom Parallel Port AX.25 Modem. baycom_ser_fdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Full Duplex Mode. baycom_ser_hdx= [HW,AX25] BayCom Serial Port AX.25 Modem in Half Duplex Mode. bmouse= [HW,MOUSE,PS2] Bus mouse. BusLogic= [HW,SCSI] cdu31a= [HW,CD] cm206= [HW,CD] com20020= [HW,NET] com90io= [HW,NET] com90xx= [HW,NET] console= [KNL] output console + comm spec (speed, control, parity) cyclades= [HW,SERIAL] Cyclades multi-serial port adapter. debug [KNL] Enable kernel debugging (events log level). decnet= [HW,NET] digi= [HW,SERIAL] io parameters + enable/disable command digiepca= [HW,SERIAL] dmascc= [HW,AX25,SERIAL] AX.25 Z80SCC driver with DMA support available. dmasound= [HW,SOUND] (sound subsystem buffers) dtc3181e= [HW,SCSI] eata= [HW,SCSI] eda= [HW,PS2] edb= [HW,PS2] ether= [HW,NET] Ethernet cards parameters (iomem,irq,dev_name). fd_mcs= [HW,SCSI] fdomain= [HW,SCSI] floppy= [HW] ftape= [HW] Floppy Tape subsystem debugging options. gdth= [HW,SCSI] gscd= [HW,CD] gvp11= [HW,SCSI] hd= [EIDE] (E)IDE hard drive subsystem geometry (Cyl/heads/sectors) or tune parameters. hfmodem= [HW,AX25] HiSax= [HW,ISDN] hisax= [HW,ISDN] ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter. icn= [HW,ISDN] ide?= [HW] (E)IDE subsystem : config (iomem/irq), tuning or debugging (serialize,reset,no{dma,tune,probe}) or chipset specific parameters idebus= [HW] (E)IDE subsystem : VLB/PCI bus speed in2000= [HW,SCSI] init= [KNL] initrd= [KNL] initial ramdisk path ip= [PNP] isp16= [HW,CD] js_14= [HW,JOY] js_am= [HW,JOY] js_an= [HW,JOY] js_as= [HW.JOY] js_console= [HW,JOY] js_console2= [HW,JOY] js_console3= [HW,JOY] js_db9= [HW,JOY] js_db9_2= [HW,JOY] js_db9_3= [HW,JOY] js_tg= [HW,JOY] js_tg_2= [HW,JOY] js_tg_3= [HW,JOY] kbd-reset [VT] load_ramdisk= [RAM] initrd loading boolean lp= [LPT] Parallel Printer. ltpc= [HW] mac5380= [HW,SCSI] maxcpus= [SMP] States the maximum number of processors that an SMP kernel should make use of. max_scsi_luns= [SCSI] mca-pentium [BUGS=ix86] mcd= [HW,CD] mcdx= [HW,CD] md= [HW] RAID subsystems devices and level mdacon= [MDA] msmouse= [HW,MOUSE] Microsoft Mouse. ncr5380= [HW,SCSI] ncr53c400= [HW,SCSI] ncr53c400a= [HW,SCSI] ncr53c406a= [HW,SCSI] ncr53c8xx= [HW,SCSI] nfsaddrs= [NFS] nfsroot= [NFS] nmi_watchdog= [KNL, BUGS=ix86] debugging features for SMP kernels no387 [BUGS=ix86] Tells the kernel to use the 387 maths emulation library even if a 387 maths coprocessor is present. noapic [SMP,APIC] Tells the kernel not to make use of any APIC that may be present on the system. noasync [HW, M68K] Disables async and sync negotiation for all devices. nodisconnect [HW,SCSI, M68K] Disables SCSI disconnects. no-halt [BUGS=ix86] noinitrd [RAM] Tells the kernel not to load any configured initial ramdisc. no-scroll [VGA] nosmp [SMP] Tells an SMP kernel to act as a UP kernel. nosync [HW, M68K] Disables sync negotiation for all devices. optcd= [HW,CD] panic= parport= [HW,LP] pas16= [HW,SCSI] pcbit= [HW,ISDN] pcd. [PARIDE] pci= [PCI] pd. [PARIDE] pf. [PARIDE] pg. [PARIDE] pirq= [SMP,APIC] mp-table plip= [LP,NET] Parallel port network link. profile= prompt_ramdisk= [RAM] Whether to prompt for ramdisk before loading its contents into memory. pt. [PARIDE] ramdisk= [RAM] ramdisk_size= [RAM] ramdisk_start= [RAM] offset of the initrd image when cohabiting with a kernel image on a floppy reboot= [BUGS=ix86] reserve= riscom8= [HW,SERIAL] multi-port serial driver (io parameters) ro [KNL] Mount root device read-only on boot. root= rw [KNL] Mount root device read-write on boot. sbpcd= [HW,CD] Soundblaster CD adapter. scsi_logging= [SCSI] sjcd= [HW,CD] sonycd535= [HW,CD] sound= [SOUND] soundmodem= [HW,AX25,SOUND] Sound cards used as AX.25 modems. specialix= [HW,SERIAL] Specialix multi-serial port adapter. st= [HW] SCSI tape parameters (buffers, ..) st0x= [HW,SCSI] stram_swap= [HW] switches= [HW, M68K] sym53c416= [HW,SCSI] sym53c8xx= [HW,SCSI] t128= [HW,SCSI] tmc8xx= [HW,SCSI] tmscsim= [HW,SCSI] tp720= [HW,PS2] u14-34f= [HW,SCSI] video= [FB] wd33c93= [HW,SCSI] wd7000= [HW,SCSI] wdt= [HW] xd= [HW,XT] Original XT 8bit disk controllers xd_geo= [HW,XT] Kmod: The Kernel Module Loader Kirk Petersen Kmod is a simple replacement for kerneld. It consists of a request_module() replacement and a kernel thread called kmod. When the kernel requests a module, the kmod wakes up and execve()s modprobe, passing it the name that was requested. If you have the /proc filesystem mounted, you can set the path of modprobe (where the kernel looks for it) by doing: echo "/sbin/modprobe" > /proc/sys/kernel/modprobe To periodically unload unused modules, put something like the following in root's crontab entry: 0-59/5 * * * * /sbin/rmmod -a Kmod only loads modules. Kerneld could do more (although nothing in the standard kernel used its other features). If you require features such as request_route, we suggest that you take a similar approach. A simple request_route function could be called, and a kroute kernel thread could be sent off to do the work. But we should probably keep this to a minimum. Kerneld also had a mechanism for storing device driver settings. This can easily be done with modprobe. When a module is unloaded, modprobe could look at a per-driver-configurable location (/proc/sys/drivers/blah) for device driver settings and save them to a file. When a module is loaded, simply cat that file back to that location in the proc filesystem. Or perhaps a script could be a setting in /etc/modules.conf. There are many user-land methods that will work (I prefer using /proc, myself). If kerneld worked, why replace it? - kerneld used SysV IPC, which can now be made into a module. Besides, SysV IPC is ugly and should therefore be avoided (well, certainly for kernel level stuff) - both kmod and kerneld end up doing the same thing (calling modprobe), so why not skip the middle man? - removing kerneld related stuff from ipc/msg.c made it 40% smaller - kmod reports errors through the normal kernel mechanisms, which avoids the chicken and egg problem of kerneld and modular Unix domain sockets This is the Linux NFS utility package version 0.1.5. It is based on knfsd 1.4.7. WARNING: The NFS servers in Linux 2.2 to 2.2.13 are not compatible with other NFS client implemenations. If you plan to use Linux 2.2.x as an NFS server for non-Linux NFS clients, you should get the Linux NFS kernel from the Linux NFS CVS server: 1. Set the environment variable, CVS_RSH, to ssh. 2. Login to the Linux NFS CVS server: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs login without password if it is your first time. 3. Check out the current Linux 2.2 NFS kernel: a. From the NFS V2 branch: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co -r linux-2-2-nfsv2 linux-2.2 b. From the main trunk: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co linux-2.2 4. If you don't want to use the current NFS kernel, you can find out for which kernels the NFS patch is available: # cd linux-2.2 # cvs -z 9 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs status -v Makefile Then generate the kernel patch: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs rdiff -ko -u -r linux-2-2-xx -r linux-2-2-xx-nfsv2-xxxxx linux-2.2 If there is no NFS patch for the kernel you are interested in, you have to make a patch closest to your kernel version and apply it by hand. There is a Linux NFS kernel source tree for Linux 2.3, linux-2.3, on the Linux NFS CVS server. We will need all the help we can get. To contribute to the Linux NFS project, please go to http://www.linuxnfs.sourceforge.org You register yourself. Please send an email to nfs-admin@linuxnfs.sourceforge.org with 1. Your user id on www.linuxnfs.sourceforge.org. 2. The area in NFS you'd like to work on. You will be notified when it is done. There is a Linux NFS mailing list at http://lists.sourceforge.net/mailman/listinfo/nfs/ You can subscribe it and search the mailing list archive via a web browser. The nfs-utils package is available from the CVS server: # cvs -z 3 -d:pserver:anonymous@cvs.linuxnfs.sourceforge.org:/cvsroot/nfs co nfs-utils will get the latest version. The files are ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.5.tar.gz ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/nfs-utils-0.1.4-0.1.5.diff.gz To compile, just do # ./configure # make # make install will install the nfs-utils binaries. You have to install the NFS service scripts. There are 2 in etc/redhat provided for RedHat 6.x. They are tested on RedHat 6.1. On RedHat 6.1, you can use # rpm -ta nfs-utils-0.1.5.tar.gz to build the source and binary RPMs. If your mount from util-linux is too old, you will need 2 patches: ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/util-linux-2.9o-mount-nfsv3.patch ftp://ftp.linuxnfs.sourceforge.org/pub/nfs/util-linux-2.9w-mount-nfsv3try.patch Thanks. H.J. hjl@lucon.org 12/19/99 File Locking Release Notes Andy Walker 12 May 1997 1. What's New? -------------- 1.1 Broken Flock Emulation -------------------------- The old flock(2) emulation in the kernel was swapped for proper BSD compatible flock(2) support in the 1.3.x series of kernels. With the release of the 2.1.x kernel series, support for the old emulation was totally removed, so that we don't need to carry this baggage forever. This should not cause problems for anybody, since everybody using a 2.1.x or 2.2.x kernel should have updated their C library to a suitable version anyway (see the file "linux/Documentation/Changes".) 1.2 Allow Mixed Locks Again --------------------------- 1.2.1 Typical Problems - Sendmail --------------------------------- Because sendmail was unable to use the old flock() emulation, many sendmail installations use fcntl() instead of flock(). This is true of Slackware 3.0 for example. This gave rise to some other subtle problems if sendmail was configured to rebuild the alias file. Sendmail tried to lock the aliases.dir file with fcntl() at the same time as the GDBM routines tried to lock this file with flock(). With kernels before 1.3.96 this could result in deadlocks that, over time or under a very heavy mail load, would eventually cause the kernel to lock solid with deadlocked processes. 1.2.2 The Solution ------------------ The solution I have chosen, after much experimentation and discussion, is to make flock() and fcntl() locks oblivious to each other. Both can exists, and neither will have any effect on the other. I wanted the two lock styles to be cooperative, but there were so many race and deadlock conditions that the current solution was the only practical one. It puts us in the same position as, for example, SunOS 4.1.x and several other commercial Unices. The only OS's that support cooperative flock()/fcntl() are those that emulate flock() using fcntl(), with all the problems that implies. 1.3 Mandatory Locking As A Mount Option --------------------------------------- Mandatory locking, as described in 'Documentation/mandatory.txt' was prior to this release a general configuration option that was valid for all mounted filesystems. This had a number of inherent dangers, not the least of which was the ability to freeze an NFS server by asking it to read a file for which a mandatory lock existed. From this release of the kernel, mandatory locking can be turned on and off on a per-file-system basis, using the mount options 'mand' and 'nomand'. The default is to disallow mandatory locking. The intention is that mandatory locking only be enabled on a local filesystem as the specific need arises. Until an updated version of mount(8) becomes available you may have to apply this patch to the mount sources (based on the version distributed with Rick Faith's util-linux-2.5 package): *** mount.c.orig Sat Jun 8 09:14:31 1996 --- mount.c Sat Jun 8 09:13:02 1996 *************** *** 100,105 **** --- 100,107 ---- { "noauto", 0, MS_NOAUTO }, /* Can only be mounted explicitly */ { "user", 0, MS_USER }, /* Allow ordinary user to mount */ { "nouser", 1, MS_USER }, /* Forbid ordinary user to mount */ + { "mand", 0, MS_MANDLOCK }, /* Allow mandatory locks on this FS */ + { "nomand", 1, MS_MANDLOCK }, /* Forbid mandatory locks on this FS */ /* add new options here */ #ifdef MS_NOSUB { "sub", 1, MS_NOSUB }, /* allow submounts */ GIF89a/pP88hH (P0xhHАP0X08д(ؤ بhhh|tXH0 rv#HߑM۰'>8( Ϳ+ >ц8I,_{1pQZ.YrxrNJ.xyw9erzZ!?IƴQ!)f[2إ 9NLI^bԹי kT{TfFb}}؞YvF'0`*^uəDQZz^:ӁJj䗡xjpyklv+lkc{l>l`2=ka6{hw&d #Iiq#rKWLv{n+mLR)W^|d䬓ٿ%:o) pm]DƆ]׬Q 0ᄶ1Q\1Ic >ѱ$v8aң j\֪Yّ:ibh!u`: gX Mdwdq>@oF!X08]0p7^yLQG8`uD1X܇Àw E2lQtׂk,zX唃CMd5uTL<$KT馗 d^N DI1 p[0F]``P#b'$0pCЅ' zY53F@#; 'ˇ$xˉ]'Yxh2E4@` wu8yDt8;2p2q'"f"X9@f9!ẇ8 7I$:yBd'P* ."3=b2nӚ1|h'6e&F3n 9@wLirUaC*ƩZ6,Պ w+ܧIc+80;5[IWRd+EU#@Cht``Q%JJƲ"@!0w5}<1d-i2Ⱥ̊C@GI2'/϶:m{҄x$GLF$ \` D@1k (%EEZ$$?"& &0@*( cptA]w%dC FG,!CL̃$BxN I`0DgBQz`XxA8pz/0:9/IN$( #"耇 ̣ O(g%TC/rI[0$%c  *#:*h "tP% ge`:HjX#%tak_((r=K (v :WaVB P$/0,v]%+VTzր=mg[A QYL$$mW AC1pA?/@<%G8<;rڼ*Z H5mnKи$]E @0dV =r;ao.t?H{>vM(P(*`))x _`riDa`,qQ/Ѯ]+b}G"4Z5~G !p Z;YT S و: P*g N*:ѣC ; @ B`J @lŦϠ*0@< ]q x 0- SpIjz*\\2̐ 3m` Z0 b%`  ѐ `v Г]9aЫ_Z#I;} lx O`  ] Xz 0GpkP@9%a#zQ\ƊSOy B kkбmO ;%$>j/? =S9 l  B kp ʍK0y  >3>,3!+P`+&_S  gm)[eyL Ѡ:$0&k#G/+ Na 'd `Pv -p0ЀC@ ;[%1 ʵ&XsGZ kz@ @ L+;$ SXsfV߫[%Cɀ plø cÑPI:uŐ$ 4FU -{Q#;>d8d lj̬$!#PlDU;kQ'P%qt%D?CPU `L$PCť;P\% 0Z: Ȱ "z, 0/1ZD|B'@#!4|mD-ڵBӺ[C[ 0]F[W DӠߏϬS1A{=PO1~ jP(㨭 +-w.<~D@hh7x0 ;H1H; PC:cp|Q~0 kU v Yf>F`S`>:FdZ~q#l0Gq.e-> _B38P̐H{ M"^Cp8cnr^Fە$*Cݣ{ ==D<,Lעpn-M!T59 ꑝ좠>ٯʾ~$$νN8xB~̷.~-M@`D!q8Kc4n;nߣL?nŕ|D nvA}mN@z>kn50AѸnrDTηǃ['‹ɫB*+AH%D@ס.^A ?%ArwT݌>dv-DFn:;8h[ƍ d(Hz-_λ˿> ,qaAN/vZB Y|9ӽ)T4)se4ō Mi?wx@#xpbQw<4 ݿy+G#j>kOޤֹ#-*:]@$;RHq"8,0D% rr0E4sid@ XÀ2q<Gt PHA2;Aht‰f;fp8D((F8pC($Srvi;A։8\pDlGH #sLAic|f Él,4u ( Ǧd:nV byw΢*QOdJԠC@8jt'iqs%lbnRCi2P+D.ZrdnB!F8aYiP 40rsL>\6Ӛ,`b>.9#J["na'Nm;7U;r1[^/F\릨 ,\J89& Q,t/Ko[ݝab7\O!kCfzkY}Diü0\aF6\0mkK∸"{Lmxg ڤV^)'0bb!,: nA)Ϋ%І@YPCKC\ ]"(Q9¼"YP@mhBZH2\̨e!e#gKgǶӍTJ W]Vs!-.״FztD)iXuև/g#֋ò4CSTjjONYXN=ܕ-7n`SY^/ !/'[6̣} ᘶI=?pFpi: r]bsyV\`n$3zkȵ>oj@`#v߭n|"- \g:wxP/:"i!:A:@"RE8WWló! *U1tw`!yN~jEgzMF|n/QJT87,[*cQX5$g 93{W4x.t{CQD>A Hb.+Əgco91 P4t^fX1E 疧TNCFheP:(Hv_;kp? ;[0,xB 9-ANxJxS€yx80tЇz-}PzЖ)?#B4DY&3S/{: Bu/-zlXhؾH m`@8<h{8i $sFlD,t0*$ F(򋘨>˲zknąv X 0BcP'Wk0x@$ȵ$xGyzzEG[˼S+p`3D˗ꐉ(;088cUDx'ȃM0ᐂ`2`UXc0vs$HC_#Uh?G@J 4D/˵`ìS/X
 Ptk@n0۱b? 6ɼ4OjK|.0%6xܤOX\XN/04XQR 6kSBkx35`X:GȤ1dDЄfpCjL]r3άHXxE\UPSJMdKPx}Ѹ\'ܵx9MQ;n8Q`,@ ; Ft9Fʵ\cƢˀ"I-J=x`9i`nPj MiWP(40UhOyy2WxiTHJc\\QNhj0VF%N6GkD[T;X]uӘDhJuO\A4/0kcȆlXG\pWw%O UH}WuӉXxD9j 6Ȁ)X B\OCLV6eZ,\EQQtSD,5tpTxPxFy "VΔ`NyhYeR8b@W\IxN>QH}e U\sD 1C0@eX NO΋tӊ5<6͝?lۏ 5PcP ԼepKscH\}hO荆ecUnUXdL*[#ؤ?7BWCOE݋VՕ[)UX؈_-HNF\}]ؠ+< H>*Tj\AcxbH?SaٚEZm b\ZAU梸3 ='7\nN5شt<t* ba"t h\PWugd8b Yb ͆TDL\6a3FPa~N-N˴,6L[7O032-t8kb˚[EI ^SiHޭnb% O;GCmIQ};Z60.as/ 1|;յGM 8E ;Fn%V8F^Uj~b7=G .=N -]5>aL[L:)8_y>c`$ϑ&Ed.b&Tԋ;;e;J&搽cVHhxPP} \smbuFȦZWm_b창X.`e@|鷳_kYkLVYƸ(_|0IKMXIUI6^N;5jgX/[\1F\j^<tm4[i36ͻow Ger0BߙFL._L ^.su5pфrMp[d.if8 ,6EPMl }ٰjhԈ׹ Z7=U.{da~ 7aW<tqMQY>aYKJ 6r|]w$鈥t3gZe_Nh=+ 6KK{ά FiGMZ&0Ve[vwɤTo [@vP\XfR6EYKJha4H}^ZUV$i[t>ab?DXlwS@N_H\UbH=/ϱe7M+KY<g;)72y9(P1}RVGi3t+H[o3P L߹OUklsc73Xvw3};[IJ/P;Ѹne'Dok80CqIa(o`})0/VI{ck2@F۶1_XvgzJe:|oμds4pEKЄ 0OT)Ax4@gOH}adWVD7iO_! @4(0pP A"'!AFNyTPԫ@Jrp&ā s2HSC{ Ž1 c8g*֬Zr|b*.D$_Ru옳jѵg'Qf,"%Ԡ_1Y3(ώ$e==:hoB=?>LXNiNjRt,0(N`w;RL(.P+vs 01];㌉AVYxreNP(G~|Hp"d͊?ڦEudRKaI :Bx+#sxђ>P^UbNWG }F_HFQN/7U*b]IbT"B1>5٢jISKLTkD%D%[3p" p5+lp՘1{cI=d@Yڞ!"PF'7$ dO|'CWDrZb=,e:W&xLҤ&`97 hA58L ]=IsרQOeڊ6XXw6IL7؉4jk?]L,2S[LdIۘe cB",45-9Xg4ƐR6Tڑ6mTtOhAZ5R;]Gn/ J_^K6N3*JxG9$f]^ # h׋UX(@c\9ѡbdi#,ӛbG'q;n$1S"H() P!ٴ8%HG:f\Pme%B2ł{=`/Ѐe#\5U&y0V-Z62O#<* R1^' 3eoAK `C-8'N#*h&MXH&lldVFfm-)I>wx;m/蘎䲆 cĠcq,/ RY+z9! D$hDU< x(3Md;=gDCQ$foOiD@Lp xzpS?J9 ȹ&V9e\ O?ZRVn, kX 怈 y9+bJ&Hqũ-K5PP ِ$%>  Ŋ @+Xt(IY2N;-jϦFw^0Ct0) #_جҍb<&d~-P*-$Ib n>P+aeSevЊYD [@$\ȅ.-z7A`%e{ce:mp=V/Y CЇVm6cnn xl47 (DɏR3_l5\RcX&p J.pSM C"P&:/(̖+h;ۙE IIMkO=1 2=p#)t*S3$`'50IiXE$0XXFaL玌`U>}2CzS=-y?eøI;D>ќ:͍q#RvӓwRBdID*70))CP8<ѐngK:vxٗa\@%`!־pn:l DQcf;b$@80ҦBAA$$ndxHpvU>*Z]6_'*$uH!bA$) AB" "#$wyׅb(>WQv".XC.RC(i5Cu(d/"V Rd# vfɭՏj/DB$,'@=}2h8Jf;d`F(sŗf:M4J8)Q!:.RB"+B"'=VR"e!֬<H,Ŷk+%Pòdd qHm4`8Vdf+,, l9\-m h!%$»"dоF*P.B ;b$BRNm.ȁB~m$ÊFN㐾.|xƭ.fJ @+X|*HϺn"Bƙ%ǰE嚚#",k"<L"A!xR*jBj#rkko+W@hD)2 FB&+Rd*.8;r*|/$~B@6  oȁ B.2df.H.fpoS L ,.N/>-BR !H,ώ0RMf,drRjh h#0󪁚 ,&1/k-h"cNrbln B \ ,rίb& 22 Sep 1997 Now it should be up to date with Linux 2.1.112. Because we are in feature freeze time it is very unlikely that something will change before 2.2.x. The entries are sorted by number field. Krzysztof G. Baranowski 29 Jul 1998 Magic Name Number Structure File =========================================================================== PG_MAGIC 'P' pg_{read,write}_hdr include/linux/pg.h MKISS_DRIVER_MAGIC 0x04bf mkiss_channel drivers/net/mkiss.h RISCOM8_MAGIC 0x0907 riscom_port drivers/char/riscom8.h APM_BIOS_MAGIC 0x4101 apm_user arch/i386/kernel/apm.c CYCLADES_MAGIC 0x4359 cyclades_port include/linux/cyclades.h FASYNC_MAGIC 0x4601 fasync_struct include/linux/fs.h PTY_MAGIC 0x5001 (none at the moment) drivers/char/pty.c PPP_MAGIC 0x5002 ppp include/linux/if_ppp.h SERIAL_MAGIC 0x5301 async_struct include/linux/serial.h SSTATE_MAGIC 0x5302 serial_state include/linux/serial.h SLIP_MAGIC 0x5302 slip drivers/net/slip.h STRIP_MAGIC 0x5303 strip drivers/net/strip.c X25_ASY_MAGIC 0x5303 x25_asy drivers/net/x25_asy.h SIXPACK_MAGIC 0x5304 sixpack drivers/net/hamradio/6pack.h AX25_MAGIC 0x5316 ax_disp drivers/net/mkiss.h ESP_MAGIC 0x53ee esp_struct drivers/char/esp.h TTY_MAGIC 0x5401 tty_struct include/linux/tty.h TTY_DRIVER_MAGIC 0x5402 tty_driver include/linux/tty_driver.h TTY_LDISC_MAGIC 0x5403 tty_ldisc include/linux/tty_ldisc.h SCC_MAGIC 0x8530 scc_channel include/linux/scc.h SPECIALIX_MAGIC 0x0907 specialix_port drivers/char/specialix_io8.h CG_MAGIC 0x090255 ufs_cylinder_group include/linux/ufs_fs.h RPORT_MAGIC 0x525001 r_port drivers/char/rocket_int.h GDTIOCTL_MAGIC 0x06030f07 gdth_iowr_str drivers/scsi/gdth_ioctl.h NBD_REQUEST_MAGIC 0x12560953 nbd_request include/linux/nbd.h SLAB_RED_MAGIC2 0x170fc2a5 (any) mm/slab.c BAYCOM_MAGIC 0x19730510 baycom_state drivers/net/baycom_epp.c ISDN_X25IFACE_MAGIC 0x1e75a2b9 isdn_x25iface_proto_data drivers/isdn/isdn_x25iface.h ECP_MAGIC 0x21504345 cdkecpsig include/linux/cdk.h LSMAGIC 0x2a3b4d2a ls drivers/fc4/fc.c LSOMAGIC 0x2a3c4e3c lso drivers/fc4/fc.c WANPIPE_MAGIC 0x414C4453 sdla_{dump,exec} include/linux/wanpipe.h CODA_CNODE_MAGIC 0x47114711 coda_inode_info include/linux/coda_fs_i.h ISDN_ASYNC_MAGIC 0x49344C01 modem_info include/linux/isdn.h ISDN_NET_MAGIC 0x49344C02 isdn_net_local_s include/linux/isdn.h STLI_BOARDMAGIC 0x4bc6c825 stlibrd include/linux/istallion.h SLAB_C_MAGIC 0x4f17a36d kmem_cache_s mm/slab.c ROUTER_MAGIC 0x524d4157 wan_device include/linux/wanrouter.h SLAB_RED_MAGIC1 0x5a2cf071 (any) mm/slab.c STL_PORTMAGIC 0x5a7182c9 stlport include/linux/stallion.h HDLCDRV_MAGIC 0x5ac6e778 hdlcdrv_state include/linux/hdlcdrv.h EPCA_MAGIC 0x5c6df104 channel include/linux/epca.h PCXX_MAGIC 0x5c6df104 channel drivers/char/pcxx.h LO_MAGIC 0x68797548 nbd_device include/linux/nbd.h STL_PANELMAGIC 0x7ef621a1 stlpanel include/linux/stallion.h NBD_REPLY_MAGIC 0x96744668 nbd_reply include/linux/nbd.h STL_BOARDMAGIC 0xa2267f52 stlbrd include/linux/stallion.h SLAB_MAGIC_ALLOC 0xa5c32f2b kmem_slab_s mm/slab.c SLAB_MAGIC_DESTROYED 0xb2f23c5a kmem_slab_s mm/slab.c STLI_PORTMAGIC 0xe671c7a1 stliport include/linux/istallion.h CCB_MAGIC 0xf2691ad2 ccb drivers/scsi/ncr53c8xx.c Mandatory File Locking For The Linux Operating System Andy Walker 15 April 1996 1. What is mandatory locking? ------------------------------ Mandatory locking is kernel enforced file locking, as opposed to the more usual cooperative file locking used to guarantee sequential access to files among processes. File locks are applied using the flock() and fcntl() system calls (and the lockf() library routine which is a wrapper around fcntl().) It is normally a process' responsibility to check for locks on a file it wishes to update, before applying its own lock, updating the file and unlocking it again. The most commonly used example of this (and in the case of sendmail, the most troublesome) is access to a user's mailbox. The mail user agent and the mail transfer agent must guard against updating the mailbox at the same time, and prevent reading the mailbox while it is being updated. In a perfect world all processes would use and honour a cooperative, or "advisory" locking scheme. However, the world isn't perfect, and there's a lot of poorly written code out there. In trying to address this problem, the designers of System V UNIX came up with a "mandatory" locking scheme, whereby the operating system kernel would block attempts by a process to write to a file that another process holds a "read" -or- "shared" lock on, and block attempts to both read and write to a file that a process holds a "write " -or- "exclusive" lock on. The System V mandatory locking scheme was intended to have as little impact as possible on existing user code. The scheme is based on marking individual files as candidates for mandatory locking, and using the existing fcntl()/lockf() interface for applying locks just as if they were normal, advisory locks. Note 1: In saying "file" in the paragraphs above I am actually not telling the whole truth. System V locking is based on fcntl(). The granularity of fcntl() is such that it allows the locking of byte ranges in files, in addition to entire files, so the mandatory locking rules also have byte level granularity. Note 2: POSIX.1 does not specify any scheme for mandatory locking, despite borrowing the fcntl() locking scheme from System V. The mandatory locking scheme is defined by the System V Interface Definition (SVID) Version 3. 2. Marking a file for mandatory locking --------------------------------------- A file is marked as a candidate for mandatory locking by setting the group-id bit in its file mode but removing the group-execute bit. This is an otherwise meaningless combination, and was chosen by the System V implementors so as not to break existing user programs. Note that the group-id bit is usually automatically cleared by the kernel when a setgid file is written to. This is a security measure. The kernel has been modified to recognize the special case of a mandatory lock candidate and to refrain from clearing this bit. Similarly the kernel has been modified not to run mandatory lock candidates with setgid privileges. 3. Available implementations ---------------------------- I have considered the implementations of mandatory locking available with SunOS 4.1.x, Solaris 2.x and HP-UX 9.x. Generally I have tried to make the most sense out of the behaviour exhibited by these three reference systems. There are many anomalies. All the reference systems reject all calls to open() for a file on which another process has outstanding mandatory locks. This is in direct contravention of SVID 3, which states that only calls to open() with the O_TRUNC flag set should be rejected. The Linux implementation follows the SVID definition, which is the "Right Thing", since only calls with O_TRUNC can modify the contents of the file. HP-UX even disallows open() with O_TRUNC for a file with advisory locks, not just mandatory locks. That would appear to contravene POSIX.1. mmap() is another interesting case. All the operating systems mentioned prevent mandatory locks from being applied to an mmap()'ed file, but HP-UX also disallows advisory locks for such a file. SVID actually specifies the paranoid HP-UX behaviour. In my opinion only MAP_SHARED mappings should be immune from locking, and then only from mandatory locks - that is what is currently implemented. SunOS is so hopeless that it doesn't even honour the O_NONBLOCK flag for mandatory locks, so reads and writes to locked files always block when they should return EAGAIN. I'm afraid that this is such an esoteric area that the semantics described below are just as valid as any others, so long as the main points seem to agree. 4. Semantics ------------ 1. Mandatory locks can only be applied via the fcntl()/lockf() locking interface - in other words the System V/POSIX interface. BSD style locks using flock() never result in a mandatory lock. 2. If a process has locked a region of a file with a mandatory read lock, then other processes are permitted to read from that region. If any of these processes attempts to write to the region it will block until the lock is released, unless the process has opened the file with the O_NONBLOCK flag in which case the system call will return immediately with the error status EAGAIN. 3. If a process has locked a region of a file with a mandatory write lock, all attempts to read or write to that region block until the lock is released, unless a process has opened the file with the O_NONBLOCK flag in which case the system call will return immediately with the error status EAGAIN. 4. Calls to open() with O_TRUNC, or to creat(), on a existing file that has any mandatory locks owned by other processes will be rejected with the error status EAGAIN. 5. Attempts to apply a mandatory lock to a file that is memory mapped and shared (via mmap() with MAP_SHARED) will be rejected with the error status EAGAIN. 6. Attempts to create a shared memory map of a file (via mmap() with MAP_SHARED) that has any mandatory locks in effect will be rejected with the error status EAGAIN. 5. Which system calls are affected? ----------------------------------- Those which modify a file's contents, not just the inode. That gives read(), write(), readv(), writev(), open(), creat(), mmap(), truncate() and ftruncate(). truncate() and ftruncate() are considered to be "write" actions for the purposes of mandatory locking. The affected region is usually defined as stretching from the current position for the total number of bytes read or written. For the truncate calls it is defined as the bytes of a file removed or added (we must also consider bytes added, as a lock can specify just "the whole file", rather than a specific range of bytes.) Note 3: I may have overlooked some system calls that need mandatory lock checking in my eagerness to get this code out the door. Please let me know, or better still fix the system calls yourself and submit a patch to me or Linus. 6. Warning! ----------- Not even root can override a mandatory lock, so runaway processes can wreak havoc if they lock crucial files. The way around it is to change the file permissions (remove the setgid bit) before trying to read or write to it. Of course, that might be a bit tricky if the system is hung :-( i386 Micro Channel Architecture Support ======================================= MCA support is enabled using the CONFIG_MCA define. A machine with a MCA bus will have the kernel variable MCA_bus set, assuming the BIOS feature bits are set properly (see arch/i386/boot/setup.S for information on how this detection is done). Adapter Detection ================= The ideal MCA adapter detection is done through the use of the Programmable Option Select registers. Generic functions for doing this have been added in include/linux/mca.h and arch/i386/kernel/mca.c. Everything needed to detect adapters and read (and write) configuration information is there. A number of MCA-specific drivers already use this. The typical probe code looks like the following: #include unsigned char pos2, pos3, pos4, pos5; struct device* dev; int slot; if( MCA_bus ) { slot = mca_find_adapter( ADAPTER_ID, 0 ); if( slot == MCA_NOTFOUND ) { return ENODEV; } /* optional - see below */ mca_set_adapter_name( slot, "adapter name & description" ); mca_set_adapter_procfn( slot, dev_getinfo, dev ); /* read the POS registers. Most devices only use 2 and 3 */ pos2 = mca_read_stored_pos( slot, 2 ); pos3 = mca_read_stored_pos( slot, 3 ); pos4 = mca_read_stored_pos( slot, 4 ); pos5 = mca_read_stored_pos( slot, 5 ); } else { return ENODEV; } /* extract configuration from pos[2345] and set everything up */ Loadable modules should modify this to test that the specified IRQ and IO ports (plus whatever other stuff) match. See 3c523.c for example code (actually, smc-mca.c has a slightly more complex example that can handle a list of adapter ids). Keep in mind that devices should never directly access the POS registers (via inb(), outb(), etc). While it's generally safe, there is a small potential for blowing up hardware when it's done at the wrong time. Furthermore, accessing a POS register disables a device temporarily. This is usually okay during startup, but do _you_ want to rely on it? During initial configuration, mca_init() reads all the POS registers into memory. mca_read_stored_pos() accesses that data. mca_read_pos() and mca_write_pos() are also available for (safer) direct POS access, but their use is _highly_ discouraged. mca_write_pos() is particularly dangerous, as it is possible for adapters to be put in inconsistent states (i.e. sharing IO address, etc) and may result in crashes, toasted hardware, and blindness. User level drivers (such as the AGX X server) can use /proc/mca/pos to find adapters (see below). Some MCA adapters can also be detected via the usual ISA-style device probing (many SCSI adapters, for example). This sort of thing is highly discouraged. Perfectly good information is available telling you what's there, so there's no excuse for messing with random IO ports. However, we MCA people still appreciate any ISA-style driver that will work with our hardware. You take what you can get... Level-Triggered Interrupts ========================== Because MCA uses level-triggered interrupts, a few problems arise with what might best be described as the ISA mindset and its effects on drivers. These sorts of problems are expected to become less common as more people use shared IRQs on PCI machines. In general, an interrupt must be acknowledged not only at the ICU (which is done automagically by the kernel), but at the device level. In particular, IRQ 0 must be reset after a timer interrupt (now done in arch/i386/kernel/time.c) or the first timer interrupt hangs the system. There were also problems with the 1.3.x floppy drivers, but that seems to have been fixed. IRQs are also shareable, and most MCA-specific devices should be coded with shared IRQs in mind. /proc/mca ========= /proc/mca is a directory containing various files for adapters and other stuff. /proc/mca/pos Straight listing of POS registers /proc/mca/slot[1-8] Information on adapter in specific slot /proc/mca/video Same for integrated video /proc/mca/scsi Same for integrated SCSI /proc/mca/machine Machine information See Appendix A for a sample. Device drivers can easily add their own information function for specific slots (including integrated ones) via the mca_set_adapter_procfn() call. Drivers that support this are ESDI, IBM SCSI, and 3c523. If a device is also a module, make sure that the proc function is removed in the module cleanup. This will require storing the slot information in a private structure somewhere. See the 3c523 driver for details. Your typical proc function will look something like this: static int dev_getinfo( char* buf, int slot, void* d ) { struct device* dev = (struct device*) d; int len = 0; len += sprintf( buf+len, "Device: %s\n", dev->name ); len += sprintf( buf+len, "IRQ: %d\n", dev->irq ); len += sprintf( buf+len, "IO Port: %#lx-%#lx\n", ... ); ... return len; } Some of the standard MCA information will already be printed, so don't bother repeating it. Don't try putting in more than 3K of information. Enable this function with: mca_set_adapter_procfn( slot, dev_getinfo, dev ); Disable it with: mca_set_adapter_procfn( slot, NULL, NULL ); It is also recommended that, even if you don't write a proc function, to set the name of the adapter (i.e. "PS/2 ESDI Controller") via mca_set_adapter_name( int slot, char* name ). MCA Device Drivers ================== Currently, there are a number of MCA-specific device drivers. 1) PS/2 ESDI drivers/block/ps2esdi.c include/linux/ps2esdi.h Uses major number 36, and should use /dev files /dev/eda, /dev/edb. Supports two drives, but only one controller. May use the command-line args "ed=cyl,head,sec" and "tp720". 2) PS/2 SCSI drivers/scsi/ibmmca.c drivers/scsi/ibmmca.h The driver for the IBM SCSI subsystem. Includes both integrated controllers and adapter cards. May require command-line arg "ibmmcascsi=io_port" to force detection of an adapter. If you have a machine with a front-panel display (i.e. model 95), you can use "ibmmcascsi=display" to enable a drive activity indicator. 3) 3c523 drivers/net/3c523.c drivers/net/3c523.h 3Com 3c523 Etherlink/MC ethernet driver. 4) SMC Ultra/MCA and IBM Adapter/A drivers/net/smc-mca.c drivers/net/smc-mca.h Driver for the MCA version of the SMC Ultra and various other OEM'ed and work-alike cards (Elite, Adapter/A, etc). 5) NE/2 driver/net/ne2.c driver/net/ne2.h The NE/2 is the MCA version of the NE2000. This may not work with clones that have a different adapter id than the original NE/2. 6) Future Domain MCS-600/700, OEM'd IBM Fast SCSI Aapter/A and Reply Sound Blaster/SCSI (SCSI part) Better support for these cards than the driver for ISA. Supports multiple cards with IRQ sharing. Also added boot time option of scsi-probe, which can do reordering of SCSI host adapters. This will direct the kernel on the order which SCSI adapter should be detected. Example: scsi-probe=ibmmca,fd_mcs,adaptec1542,buslogic The serial drivers were modified to support the extended IO port range of the typical MCA system (also #ifdef CONFIG_MCA). The following devices work with existing drivers: 1) Token-ring 2) Future Domain SCSI (MCS-600, MCS-700, not MCS-350, OEM'ed IBM SCSI) 3) Adaptec 1640 SCSI (using the aha1542 driver) 4) Bustek/Buslogic SCSI (various) 5) Probably all Arcnet cards. 6) Some, possibly all, MCA IDE controllers. 7) 3Com 3c529 (MCA version of 3c509) (patched) 8) Intel EtherExpressMC (patched version) You need to have CONFIG_MCA defined to have EtherExpressMC support. 9) Reply Sound Blaster/SCSI (SB part) (patched version) Bugs & Other Weirdness ====================== NMIs tend to occur with MCA machines because of various hardware weirdness, bus timeouts, and many other non-critical things. Some basic code to handle them (inspired by the NetBSD MCA code) has been added to detect the guilty device, but it's pretty incomplete. If NMIs are a persistent problem (on some model 70 or 80s, they occur every couple shell commands), the CONFIG_IGNORE_NMI flag will take care of that. Various Pentium machines have had serious problems with the FPU test in bugs.h. Basically, the machine hangs after the HLT test. This occurs, as far as we know, on the Pentium-equipped 85s, 95s, and some PC Servers. The PCI/MCA PC 750s are fine as far as I can tell. The ``mca-pentium'' boot-prompt flag will disable the FPU bug check if this is a problem with your machine. The model 80 has a raft of problems that are just too weird and unique to get into here. Some people have no trouble while others have nothing but problems. I'd suspect some problems are related to the age of the average 80 and accompanying hardware deterioration, although others are definitely design problems with the hardware. Among the problems include SCSI controller problems, ESDI controller problems, and serious screw-ups in the floppy controller. Oh, and the parallel port is also pretty flaky. There were about 5 or 6 different model 80 motherboards produced to fix various obscure problems. As far as I know, it's pretty much impossible to tell which bugs a particular model 80 has (other than triggering them, that is). Drivers are required for some MCA memory adapters. If you're suddenly short a few megs of RAM, this might be the reason. The (I think) Enhanced Memory Adapter commonly found on the model 70 is one. There's a very alpha driver floating around, but it's pretty ugly (disassembled from the DOS driver, actually). See the MCA Linux web page (URL below) for more current memory info. The Thinkpad 700 and 720 will work, but various components are either non-functional, flaky, or we don't know anything about them. The graphics controller is supposed to be some WD, but we can't get things working properly. The PCMCIA slots don't seem to work. Ditto for APM. The serial ports work, but detection seems to be flaky. Credits ======= A whole pile of people have contributed to the MCA code. I'd include their names here, but I don't have a list handy. Check the MCA Linux home page (URL below) for a perpetually out-of-date list. ===================================================================== MCA Linux Home Page: http://glycerine.itsmm.uni.edu/mca/ Christophe Beauregard chrisb@truespectra.com cpbeaure@calum.csclub.uwaterloo.ca ===================================================================== Appendix A: Sample /proc/mca This is from my model 8595. Slot 1 contains the standard IBM SCSI adapter, slot 3 is an Adaptec AHA-1640, slot 5 is a XGA-1 video adapter, and slot 7 is the 3c523 Etherlink/MC. /proc/mca/machine: Model Id: 0xf8 Submodel Id: 0x14 BIOS Revision: 0x5 /proc/mca/pos: Slot 1: ff 8e f1 fc a0 ff ff ff IBM SCSI Adapter w/Cache Slot 2: ff ff ff ff ff ff ff ff Slot 3: 1f 0f 81 3b bf b6 ff ff Slot 4: ff ff ff ff ff ff ff ff Slot 5: db 8f 1d 5e fd c0 00 00 Slot 6: ff ff ff ff ff ff ff ff Slot 7: 42 60 ff 08 ff ff ff ff 3Com 3c523 Etherlink/MC Slot 8: ff ff ff ff ff ff ff ff Video : ff ff ff ff ff ff ff ff SCSI : ff ff ff ff ff ff ff ff /proc/mca/slot1: Slot: 1 Adapter Name: IBM SCSI Adapter w/Cache Id: 8eff Enabled: Yes POS: ff 8e f1 fc a0 ff ff ff Subsystem PUN: 7 Detected at boot: Yes /proc/mca/slot3: Slot: 3 Adapter Name: Unknown Id: 0f1f Enabled: Yes POS: 1f 0f 81 3b bf b6 ff ff /proc/mca/slot5: Slot: 5 Adapter Name: Unknown Id: 8fdb Enabled: Yes POS: db 8f 1d 5e fd c0 00 00 /proc/mca/slot7: Slot: 7 Adapter Name: 3Com 3c523 Etherlink/MC Id: 6042 Enabled: Yes POS: 42 60 ff 08 ff ff ff ff Revision: 0xe IRQ: 9 IO Address: 0x3300-0x3308 Memory: 0xd8000-0xdbfff Transceiver: External Device: eth0 Hardware Address: 02 60 8c 45 c4 2a Tools that manage md devices can be found at sweet-smoke.ufr-info-p7.ibp.fr in public/Linux/md035.tar.gz. Marc ZYNGIER -- You can boot (if you selected boot support in the configuration) with your md device with the following kernel command line: md=,,,,dev0,dev1,...,devn md device no. = the number of the md device ... 0 means md0, 1 md1, 2 md2, 3 md3, 4 md4 raid level = -1 linear mode 0 striped mode other modes are currently unsupported. chunk size factor = (raid-0 and raid-1 only) Set the chunk size as PAGE_SIZE << n. fault level = (raid-1 only) Set the maximum fault number as n. Currently unsupported due to lack of boot support for raid1. dev0-devn: e.g. /dev/hda1,/dev/hdc1,/dev/sda1,/dev/sdb1 my loadlin line looks like this: e:\loadlin\loadlin e:\zimage root=/dev/md0 md=0,0,4,0,/dev/hdb2,/dev/hdc3 ro Harald Hoyer There are several classic problems related to memory on Linux systems. 1) There are some buggy motherboards which cannot properly deal with the memory above 16MB. Consider exchanging your motherboard. 2) You cannot do DMA on the ISA bus to addresses above 16M. Most device drivers under Linux allow the use of bounce buffers which work around this problem. Drivers that don't use bounce buffers will be unstable with more than 16M installed. Drivers that use bounce buffers will be OK, but may have slightly higher overhead. 3) There are some motherboards that will not cache above a certain quantity of memory. If you have one of these motherboards, your system will be SLOWER, not faster as you add more memory. Consider exchanging your motherboard. All of these problems can be addressed with the "mem=XXXM" boot option (where XXX is the size of RAM to use in megabytes). It can also tell Linux to use less memory than is actually installed. See the documentation of your boot loader (LILO, loadlin, etc.) about how to pass options to the kernel. There are other memory problems which Linux cannot deal with. Random corruption of memory is usually a sign of serious hardware trouble. Try: * Reducing memory settings in the BIOS to the most conservative timings. * Adding a cooling fan. * Not overclocking your CPU. * Having the memory tested in a memory tester or exchanged with the vendor. * Exchanging your CPU, cache, or motherboard for one that works. * Disabling the cache from the BIOS. * Try passing the "mem=4M" option to the kernel to limit Linux to using a very small amount of memory. Other tricks: * Try passing the "no-387" option to the kernel to ignore a buggy FPU. * Try passing the "no-hlt" option to disable the potentially buggy HLT instruction in your CPU. * Passing for example the "endbase=0x9F000" option to the kernel, you'll _force_ the kernel to not touch the memory between 0x9F000 and 1Mbyte. As default the kernel reads the endbase limit from the BIOS. So you need to specify this option only if the BIOS does not provide the right information to the kernel (or if you don't have a BIOS at all :). You can discover the endbase value of your running kernel with this command `dmesg | grep endbase`. #!/bin/sh # Script to create device nodes for SMART array controllers # Usage: # mkdev.cciss [num controllers] [num log volumes] [num partitions] # # With no arguments, the script assumes 1 controller, 16 logical volumes, # and 16 partitions/volume, which is adequate for most configurations. # # If you had 5 controllers and were planning on no more than 4 logical volumes # each, using a maximum of 8 partitions per volume, you could say: # # mkdev.cciss 5 4 8 # # Of course, this has no real benefit over "mkdev.cciss 5" except that it # doesn't create so many device nodes in /dev/cciss. NR_CTLR=${1-1} NR_VOL=${2-16} NR_PART=${3-16} if [ ! -d /dev/cciss ]; then mkdir -p /dev/cciss fi C=0; while [ $C -lt $NR_CTLR ]; do MAJ=`expr $C + 104` D=0; while [ $D -lt $NR_VOL ]; do P=0; while [ $P -lt $NR_PART ]; do MIN=`expr $D \* 16 + $P` if [ $P -eq 0 ]; then mknod /dev/cciss/c${C}d${D} b $MAJ $MIN else mknod /dev/cciss/c${C}d${D}p${P} b $MAJ $MIN fi P=`expr $P + 1` done D=`expr $D + 1` done C=`expr $C + 1` done #!/bin/sh # Script to create device nodes for SMART array controllers # Usage: # mkdev.ida [num controllers] [num log volumes] [num partitions] # # With no arguments, the script assumes 1 controller, 16 logical volumes, # and 16 partitions/volume, which is adequate for most configurations. # # If you had 5 controllers and were planning on no more than 4 logical volumes # each, using a maximum of 8 partitions per volume, you could say: # # mkdev.ida 5 4 8 # # Of course, this has no real benefit over "mkdev.ida 5" except that it # doesn't create so many device nodes in /dev/ida. NR_CTLR=${1-1} NR_VOL=${2-16} NR_PART=${3-16} if [ ! -d /dev/ida ]; then mkdir -p /dev/ida fi C=0; while [ $C -lt $NR_CTLR ]; do MAJ=`expr $C + 72` D=0; while [ $D -lt $NR_VOL ]; do P=0; while [ $P -lt $NR_PART ]; do MIN=`expr $D \* 16 + $P` if [ $P -eq 0 ]; then mknod /dev/ida/c${C}d${D} b $MAJ $MIN else mknod /dev/ida/c${C}d${D}p${P} b $MAJ $MIN fi P=`expr $P + 1` done D=`expr $D + 1` done C=`expr $C + 1` done This file describes the strategy for dynamically loadable modules in the Linux kernel. This is not a technical description on the internals of module, but mostly a sample of how to compile and use modules. Note: You should ensure that the modutils-X.Y.Z.tar.gz you are using is the most up to date one for this kernel. The "X.Y.Z" will reflect the kernel version at the time of the release of the modules package. Some older modules packages aren't aware of some of the newer modular features that the kernel now supports. The current required version is listed in the file linux/Documentation/Changes. * * * NOTE * * * The kernel has been changed to remove kerneld support and use the new kmod support. Keep this in mind when reading this file. Kmod does the exact same thing as kerneld, but doesn't require an external program (see Documentation/kmod.txt) In the beginning... ------------------- Anyway, your first step is to compile the kernel, as explained in the file linux/README. It generally goes like: make config make dep make clean make zImage or make zlilo In "make config", you select what you want to include in the "resident" kernel and what features you want to have available as loadable modules. You will generally select the minimal resident set that is needed to boot: The filesystem of your root partition A scsi driver, but see below for a list of SCSI modules! Normal hard drive support Net support (CONFIG_NET) TCP/IP support (CONFIG_INET), but no drivers! plus those things that you just can't live without... The set of modules is constantly increasing, and you will be able to select the option "m" in "make config" for those features that the current kernel can offer as loadable modules. You also have a possibility to create modules that are less dependent on the kernel version. This option can be selected during "make config", by enabling CONFIG_MODVERSIONS, and is most useful on "stable" kernel versions, such as the kernels from the 1.2 and 2.0 series. If you have modules that are based on sources that are not included in the official kernel sources, you will certainly like this option... Here is a sample of the available modules included in the kernel sources: Most filesystems: minix, msdos, umsdos, sysv, isofs, hpfs, smbfs, nfs Mid-level SCSI support (required by top and low level scsi drivers). Most low-level SCSI drivers: (i.e. aha1542, in2000) All SCSI high-level drivers: disk, tape, cdrom, generic. Most Ethernet drivers: (too many to list, please see the file ./Documentation/networking/net-modules.txt) Most CDROM drivers: aztcd: Aztech,Orchid,Okano,Wearnes cm206: Philips/LMS CM206 gscd: Goldstar GCDR-420 mcd, mcdx: Mitsumi LU005, FX001 optcd: Optics Storage Dolphin 8000AT sjcd: Sanyo CDR-H94A sbpcd: Matsushita/Panasonic CR52x, CR56x, CD200, Longshine LCS-7260, TEAC CD-55A sonycd535: Sony CDU-531/535, CDU-510/515 And a lot of misc modules, such as: lp: line printer binfmt_elf: elf loader binfmt_java: java loader isp16: cdrom interface serial: the serial (tty) interface When you have made the kernel, you create the modules by doing: make modules This will compile all modules and update the linux/modules directory. In this directory you will then find a bunch of symbolic links, pointing to the various object files in the kernel tree. Now, after you have created all your modules, you should also do: make modules_install This will copy all newly made modules into subdirectories under "/lib/modules/kernel_release/", where "kernel_release" is something like 2.0.1, or whatever the current kernel version is... As soon as you have rebooted the newly made kernel, you can install and remove modules at will with the utilities: "insmod" and "rmmod". After reading the man-page for insmod, you will also know how easy it is to configure a module when you do "insmod" (hint: symbol=value). Nifty features: --------------- You also have access to two utilities: "modprobe" and "depmod", where modprobe is a "wrapper" for (or extension to) "insmod". These utilities use (and maintain) a set of files that describe all the modules that are available for the current kernel in the /lib/modules hierarchy as well as their interdependencies. Using the modprobe utility, you can load any module like this: /sbin/modprobe module without paying much attention to which kernel you are running, or what other modules this module depends on. With the help of the modprobe configuration file: "/etc/conf.modules" you can tune the behaviour of modprobe in many ways, including an automatic setting of insmod options for each module. And, yes, there _are_ man-pages for all this... To use modprobe successfully, you generally place the following command in your /etc/rc.d/rc.S script. (Read more about this in the "rc.hints" file in the module utilities package, "modutils-x.y.z.tar.gz".) /sbin/depmod -a This computes the dependencies between the different modules. Then if you do, for example /sbin/modprobe umsdos you will automatically load _both_ the msdos and umsdos modules, since umsdos runs piggyback on msdos. The "ultimate" utility: ----------------------- OK, you have read all of the above, and feel amply impressed... Now, we tell you to forget all about how to install and remove loadable modules... With the kerneld daemon, all of these chores will be taken care of automatically. Just answer "Y" to CONFIG_KERNELD in "make config", and make sure that /sbin/kerneld is started as soon as possible after boot and that "/sbin/depmod -a" has been executed for the current kernel. (Read more about this in the module utilities package.) Whenever a program wants the kernel to use a feature that is only available as a loadable module, and if the kernel hasn't got the module installed yet, the kernel will ask the kerneld daemon to take care of the situation and make the best of it. This is what happens: - The kernel notices that a feature is requested that is not resident in the kernel. - The kernel sends a message to kerneld, with a symbolic description of the requested feature. - The kerneld daemon asks e.g. modprobe to load a module that fits this symbolic description. - modprobe looks into its internal "alias" translation table to see if there is a match. This table can be reconfigured and expanded by having "alias" lines in "/etc/conf.modules". - insmod is then asked to insert the module(s) that modprobe has decided that the kernel needs. Every module will be configured according to the "options" lines in "/etc/conf.modules". - modprobe exits and kerneld tells the kernel that the request succeeded (or failed...) - The kernel uses the freshly installed feature just as if it had been configured into the kernel as a "resident" part. The icing of the cake is that when an automatically installed module has been unused for a period of time (usually 1 minute), the module will be automatically removed from the kernel as well. This makes the kernel use the minimal amount of memory at any given time, making it available for more productive use than as just a placeholder for unused code. Actually, this is only a side-effect from the _real_ benefit of kerneld: You only have to create a minimal kernel, that is more or less independent of the actual hardware setup. The setup of the "virtual" kernel is instead controlled by a configuration file as well as the actual usage pattern of the current machine and its kernel. This should be good news for maintainers of multiple machines as well as for maintainers of distributions. To use kerneld with the least amount of "hassle", you need modprobe from a release that can be considered "recent" w.r.t. your kernel, and also a configuration file for modprobe ("/etc/conf.modules"). Since modprobe already knows about most modules, the minimal configuration file could look something like this: alias scsi_hostadapter aha1542 # or whatever SCSI adapter you have alias eth0 3c509 # or whatever net adapter you have # you might need an "options" line for some net adapters: options 3c509 io=0x300 irq=10 # you might also need an "options" line for some other module: options cdu31a cdu31a_port=0x1f88 sony_pas_init=1 You could add these lines as well, but they are only "cosmetic": alias net-pf-3 off # no ax25 module available (yet) alias net-pf-4 off # if you don't use the ipx module alias net-pf-5 off # if you don't use the appletalk module Finally, for the "purists": You can name the modprobe configuration either "/etc/conf.modules" or "/etc/modules.conf", since modprobe knows what to do in each case... Written by: Jacques Gelinas Bjorn Ekwall ============================================================================= MOXA Smartio Family Device Driver Ver 1.1 Installation Guide for Linux Kernel 2.2.x and 2.0.3x Copyright (C) 1999, Moxa Technologies Co, Ltd. ============================================================================= Content 1. Introduction 2. System Requirement 3. Installation 4. Utilities 5. Setserial 6. Troubleshooting ----------------------------------------------------------------------------- 1. Introduction The Smartio family Linux driver, Ver. 1.1, supports following multiport boards. -C104P/H/HS, C104H/PCI, C104HS/PCI, CI-104J 4 port multiport board. -C168P/H/HS, C168H/PCI 8 port multiport board. This driver has been modified a little and cleaned up from the Moxa contributed driver code and merged into Linux 2.2.14pre. In particular official major/minor numbers have been assigned which are different to those the original Moxa supplied driver used. This driver and installation procedure have been developed upon Linux Kernel 2.2.5 and backward compatible to 2.0.3x. This driver supports Intel x86 and Alpha hardware platform. In order to maintain compatibility, this version has also been properly tested with RedHat, OpenLinux, TurboLinux and S.u.S.E Linux. However, if compatibility problem occurs, please contact Moxa at support@moxa.com.tw. In addition to device driver, useful utilities are also provided in this version. They are - msdiag Diagnostic program for detecting installed Moxa Smartio boards. - msmon Monitor program to observe data count and line status signals. - msterm A simple terminal program which is useful in testing serial ports. - io-irq.exe Configuration program to setup ISA boards. Please note that this program can only be executed under DOS. All the drivers and utilities are published in form of source code under GNU General Public License in this version. Please refer to GNU General Public License announcement in each source code file for more detail. In Moxa's ftp sites, you may always find latest driver at ftp://ftp.moxa.com or ftp://ftp.moxa.com.tw. This version of driver can be installed as Loadable Module (Module driver) or built-in into kernel (Static driver). You may refer to following installation procedure for suitable one. Before you install the driver, please refer to hardware installation procedure in the User's Manual. We assume the user should be familiar with following documents. - Serial-HOWTO - Kernel-HOWTO ----------------------------------------------------------------------------- 2. System Requirement - Hardware platform: Intel x86 or Alpha machine - Kernel version: 2.0.3x or 2.2.x - gcc version 2.72 or later - Maximum 4 boards can be installed in combination ----------------------------------------------------------------------------- 3. Installation 3.1 Hardware installation There are two types of buses, ISA and PCI, for Smartio family multiport board. ISA board --------- You'll have to configure CAP address, I/O address, Interrupt Vector as well as IRQ before installing this driver. Please refer to hardware installation procedure in User's Manual before proceed any further. Please make sure the JP1 is open after the ISA board is set properly. PCI board --------- You may need to adjust IRQ usage in BIOS to avoid from IRQ conflict with other ISA devices. Please refer to hardware installation procedure in User's Manual in advance. IRQ Sharing ----------- Each port within the same multiport board shares the same IRQ. Up to 4 Moxa Smartio Family multiport boards can be installed together on one system and they can share the same IRQ. 3.2 Driver files and device naming convention The driver file may be obtained from ftp, CD-ROM or floppy disk. The first step, anyway, is to copy driver file "mxser.tgz" into specified directory. e.g. /moxa. The execute commands as below. # cd /moxa # tar xvf /dev/fd0 or # cd /moxa # cp /mnt/cdrom//mxser.tgz . # tar xvfz mxser.tgz You may find all the driver and utilities files in /moxa/mxser. Following installation procedure depends on the model you'd like to run the driver. If you prefer module driver, please refer to 3.3. If static driver is required, please refer to 3.4. Dialin and callout port ----------------------- This driver remains traditional serial device properties. There're two special file name for each serial port. One is dial-in port which is named "ttyMxx". For callout port, the naming convention is "cumxx". Device naming when more than 2 boards installed ----------------------------------------------- Naming convention for each Smartio multiport board is pre-defined as below. Board Num. Dial-in Port Callout port 1st board ttyM0 - ttyM7 cum0 - cum7 2nd board ttyM8 - ttyM15 cum8 - cum15 3rd board ttyM16 - ttyM23 cum16 - cum23 4th board ttyM24 - ttym31 cum24 - cum31 Board sequence -------------- This driver will activate ISA boards according to the parameter set in the driver. After all specified ISA board activated, PCI board will be installed in the system automatically driven. Therefore the board number is sorted by the CAP address of ISA boards. For PCI boards, their sequence will be after ISA boards and C168H/PCI has higher priority than C104H/PCI boards. 3.3 Module driver configuration Module driver is easiest way to install. If you prefer static driver installation, please skip this paragraph. 1. Find "Makefile" in /moxa/mxser, then run # make install The driver files "mxser.o" and utilities will be properly compiled and copied to system directories respectively.Then run # insmod mxser to activate the modular driver. You may run "lsmod" to check if "mxser.o" is activated. 2. Create special files by executing "msmknod". # cd /moxa/mxser/driver # ./msmknod Default major numbers for dial-in device and callout device are 174, 175. Msmknod will delete any special files occupying the same device naming. 3. Up to now, you may manually execute "insmod mxser" to activate this driver and run "rmmod mxser" to remove it. However, it's better to have a boot time configuration to eliminate manual operation. Boot time configuration can be achieved by rc file. Run following command for setting rc files. # cd /moxa/mxser/driver # cp ./rc.mxser /etc/rc.d # cd /etc/rc.d You may have to modify part of the content in rc.mxser to specify parameters for ISA board. Please refer to rc.mxser for more detail. Find "rc.serial". If "rc.serial" doesn't exist, create it by vi. Add "rc.mxser" in last line. Next, open rc.local by vi and append following content. if [ -f /etc/rc.d/rc.serial ]; then sh /etc/rc.d/rc.serial fi 4. Reboot and check if mxser.o activated by "lsmod" command. 5. If you'd like to drive Smartio ISA boards in the system, you'll have to add parameter to specify CAP address of given board while activating "mxser.o". The format for parameters are as follows. insmod mxser ioaddr=0x???,0x???,0x???,0x??? | | | | | | | +- 4th ISA board | | +------ 3rd ISA board | +------------ 2nd ISA board +------------------- 1st ISA board 3.4 Static driver configuration 1. Create link # cd /usr/src/linux/drivers/char # ln -s /moxa/mxser/driver/mxser.c mxser.c 2. Add CAP address list for ISA boards In module mode, the CAP address for ISA board is given by parameter. In static driver configuration, you'll have to assign it within driver's source code. If you will not install any ISA boards, you may skip to next portion. The instructions to modify driver source code are as below. a. # cd /moxa/mxser/driver # vi mxser.c b. Find the array mxserBoardCAP[] as below. static int mxserBoardCAP[] = {0x00, 0x00, 0x00, 0x00}; c. Change the address within this array using vi. For example, to driver 2 ISA boards with CAP address 0x280 and 0x180 as 1st and 2nd board. Just to change the source code as follows. static int mxserBoardCAP[] = {0x280, 0x180, 0x00, 0x00}; 3. Modify tty_io.c # cd /usr/src/linux/drivers/char/ # vi tty_io.c Find pty_init(), insert "mxser_init()" as pty_init(); mxser_init(); 4. Modify tty.h # cd /usr/src/linux/include/linux # vi tty.h Find extern int tty_init(void), insert "mxser_init()" as extern int tty_init(void); extern int mxser_init(void); 5. Modify Makefile # cd /usr/src/linux/drivers/char # vi Makefile Find L_OBJS := tty_io.o ...... random.o, add "mxser.o" at last of this line as L_OBJS := tty_io.o ....... mxser.o 6. Rebuild kernel The following are for Linux kernel rebuilding,for your reference only. For appropriate details, please refer to the Linux document. If 'lilo' utility is installed, please use 'make zlilo' to rebuild kernel. If 'lilo' is not installed, please follow the following steps. a. cd /usr/src/linux b. make clean /* take a few minutes */ c. make dep /* take a few minutes */ d. make bzImage /* take probably 10-20 minutes */ e. Backup original boot kernel. /* optional step */ f. cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz g. Please make sure the boot kernel (vmlinuz) is in the correct position. If you use 'lilo' utility, you should check /etc/lilo.conf 'image' item specified the path which is the 'vmlinuz' path, or you will load wrong (or old) boot kernel image (vmlinuz). h. chmod 400 /vmlinuz i. lilo j. rdev -R /vmlinuz 1 k. sync Note that if the result of "make zImage" is ERROR, then you have to go back to Linux configuration Setup. Type "make config" in directory /usr/src/linux or "setup". Since system include file, /usr/src/linux/include/linux/interrupt.h, is modified each time the MOXA driver is installed, kernel rebuilding is inevitable. And it takes about 10 to 20 minutes depends on the machine. 7. Make utility # cd /moxa/mxser/utility # make install 8. Make special file # cd /moxa/mxser/driver # ./msmknod 9. Reboot 3.5 Custom configuration Although this driver already provides you default configuration, you still can change the device name and major number.The instruction to change these parameters are shown as below. Change Device name ------------------ If you'd like to use other device names instead of default naming convention, all you have to do is to modify the internal code within the shell script "msmknod". First, you have to open "msmknod" by vi. Locate each line contains "ttyM" and "cum" and change them to the device name you desired. "msmknod" creates the device names you need next time executed. Change Major number ------------------- If major number 30 and 35 had been occupied, you may have to select 2 free major numbers for this driver. There are 3 steps to change major numbers. 1. Find free major numbers In /proc/devices, you may find all the major numbers occupied in the system. Please select 2 major numbers that are available. e.g. 40, 45. 2. Create special files Run /moxa/mxser/driver/msmknod to create special files with specified major numbers. 3. Modify driver with new major number Run vi to open /moxa/mxser/driver/mxser.c. Locate the line contains "MXSERMAJOR". Change the content as below. #define MXSERMAJOR 40 #define MXSERCUMAJOR 45 4. Run # make install in /moxa/mxser/driver. 3.6 Verify driver installation You may refer to /var/log/messages to check the latest status log reported by this driver whenever it's activated. ----------------------------------------------------------------------------- 4. Utilities There are 3 utilities contained in this driver. They are msdiag, msmon and msterm. These 3 utilities are released in form of source code. They should be compiled into executable file and copied into /usr/bin. msdiag - Diagnostic -------------------- This utility provides the function to detect what Moxa Smartio multiport board exists in the system. msmon - Port Monitoring ----------------------- This utility gives the user a quick view about all the MOXA ports' activities. One can easily learn each port's total received/transmitted (Rx/Tx) character count since the time when the monitoring is started. Rx/Tx throughputs per second are also reported in interval basis (e.g. the last 5 seconds) and in average basis (since the time the monitoring is started). You can reset all ports' count by key. <+> <-> (plus/minus) keys to change the displaying time interval. Press on the port, that cursor stay, to view the port's communication parameters, signal status, and input/output queue. msterm - Terminal Emulation --------------------------- This utility provides data sending and receiving ability of all tty ports, especially for MOXA ports. It is quite useful for testing simple application, for example, sending AT command to a modem connected to the port or used as a terminal for login purpose. Note that this is only a dumb terminal emulation without handling full screen operation. ----------------------------------------------------------------------------- 5. Setserial Supported Setserial parameters are listed as below. uart set UART type(16450-->disable FIFO, 16550A-->enable FIFO) close_delay set the amount of time(in 1/100 of a second) that DTR should be kept low while being closed. closing_wait set the amount of time(in 1/100 of a second) that the serial port should wait for data to be drained while being closed, before the receiver is disable. spd_hi Use 57.6kb when the application requests 38.4kb. spd_vhi Use 115.2kb when the application requests 38.4kb. spd_normal Use 38.4kb when the application requests 38.4kb. ----------------------------------------------------------------------------- 6. Troubleshooting The boot time error messages and solutions are stated as clearly as possible. If all the possible solutions fail, please contact our technical support team to get more help. Error msg: More than 4 Moxa Smartio family boards found. Fifth board and after are ignored. Solution: To avoid this problem, please unplug fifth and after board, because Moxa driver supports up to 4 boards. Error msg: Request_irq fail, IRQ(?) may be conflict with another device. Solution: Other PCI or ISA devices occupy the assigned IRQ. If you are not sure which device causes the situation,please check /proc/interrupts to find free IRQ and simply change another free IRQ for Moxa board. Error msg: Board #: C1xx Series(CAP=xxx) interrupt number invalid. Solution: Each port within the same multiport board shares the same IRQ. Please set one IRQ (IRQ doesn't equal to zero) for one Moxa board. Error msg: No interrupt vector be set for Moxa ISA board(CAP=xxx). Solution: Moxa ISA board needs an interrupt vector.Please refer to user's manual "Hardware Installation" chapter to set interrupt vector. Error msg: Couldn't install MOXA Smartio family driver! Solution: Load Moxa driver fail, the major number may conflict with other devices. Please refer to previous section 3.5 to change a free major number for Moxa driver. Error msg: Couldn't install MOXA Smartio family callout driver! Solution: Load Moxa callout driver fail, the callout device major number may conflict with other devices. Please refer to previous section 3.5 to change a free callout device major number for Moxa driver. ----------------------------------------------------------------------------- MTRR (Memory Type Range Register) control 2 May 1998 Richard Gooch On Intel Pentium Pro/Pentium II systems the Memory Type Range Registers (MTRRs) may be used to control processor access to memory ranges. This is most useful when you have a video (VGA) card on a PCI or AGP bus. Enabling write-combining allows bus write transfers to be combined into a larger transfer before bursting over the PCI/AGP bus. This can increase performance of image write operations 2.5 times or more. The CONFIG_MTRR option creates a /proc/mtrr file which may be used to manipulate your MTRRs. Typically the X server should use this. This should have a reasonably generic interface so that similar control registers on other processors can be easily supported. There are two interfaces to /proc/mtrr: one is an ASCII interface which allows you to read and write. The other is an ioctl() interface. The ASCII interface is meant for administration. The ioctl() interface is meant for C programmes (i.e. the X server). The interfaces are described below, with sample commands and C code. =============================================================================== Reading MTRRs from the shell: % cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1 reg01: base=0x08000000 ( 128MB), size= 64MB: write-back, count=1 =============================================================================== Creating MTRRs from the shell: # echo "base=0xf8000000 size=0x400000 type=write-combining" >! /proc/mtrr And the result thereof: % cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 128MB: write-back, count=1 reg01: base=0x08000000 ( 128MB), size= 64MB: write-back, count=1 reg02: base=0xf8000000 (3968MB), size= 4MB: write-combining, count=1 This is for video RAM at base address 0xf8000000 and size 4 megabytes. To find out your base address, you need to look at the output of your X server, which tells you where the linear framebuffer address is. A typical line that you may get is: (--) S3: PCI: 968 rev 0, Linear FB @ 0xf8000000 Note that you should only use the value from the X server, as it may move the framebuffer base address, so the only value you can trust is that reported by the X server. To find out the size of your framebuffer (what, you don't actually know?), the following line will tell you: (--) S3: videoram: 4096k That's 4 megabytes, which is 0x400000 bytes (in hexadecimal). A patch is being written for XFree86 which will make this automatic: in other words the X server will manipulate /proc/mtrr using the ioctl() interface, so users won't have to do anything. If you use a commercial X server, lobby your vendor to add support for MTRRs. =============================================================================== Creating overlapping MTRRs: %echo "base=0xfb000000 size=0x1000000 type=write-combining" >/proc/mtrr %echo "base=0xfb000000 size=0x1000 type=uncachable" >/proc/mtrr And the results: cat /proc/mtrr reg00: base=0x00000000 ( 0MB), size= 64MB: write-back, count=1 reg01: base=0xfb000000 (4016MB), size= 16MB: write-combining, count=1 reg02: base=0xfb000000 (4016MB), size= 4kB: uncachable, count=1 Some cards (especially Voodoo Graphics boards) need this 4 kB area excluded from the beginning of the region because it is used for registers. NOTE: You can only create type=uncachable region, if the first region that you created is type=write-combining. =============================================================================== Removing MTRRs from the shell: % echo "disable=2" >! /proc/mtrr =============================================================================== Reading MTRRs from a C programme using ioctl()'s: /* mtrr-show.c Source file for mtrr-show (example programme to show MTRRs using ioctl()'s) Copyright (C) 1997-1998 Richard Gooch 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., 675 Mass Ave, Cambridge, MA 02139, USA. Richard Gooch may be reached by email at rgooch@atnf.csiro.au The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. */ /* This programme will use an ioctl() on /proc/mtrr to show the current MTRR settings. This is an alternative to reading /proc/mtrr. Written by Richard Gooch 17-DEC-1997 Last updated by Richard Gooch 2-MAY-1998 */ #include #include #include #include #include #include #include #define MTRR_NEED_STRINGS #include #define TRUE 1 #define FALSE 0 #define ERRSTRING strerror (errno) int main () { int fd; struct mtrr_gentry gentry; if ( ( fd = open ("/proc/mtrr", O_RDONLY, 0) ) == -1 ) { if (errno == ENOENT) { fputs ("/proc/mtrr not found: not supported or you don't have a PPro?\n", stderr); exit (1); } fprintf (stderr, "Error opening /proc/mtrr\t%s\n", ERRSTRING); exit (2); } for (gentry.regnum = 0; ioctl (fd, MTRRIOC_GET_ENTRY, &gentry) == 0; ++gentry.regnum) { if (gentry.size < 1) { fprintf (stderr, "Register: %u disabled\n", gentry.regnum); continue; } fprintf (stderr, "Register: %u base: 0x%lx size: 0x%lx type: %s\n", gentry.regnum, gentry.base, gentry.size, mtrr_strings[gentry.type]); } if (errno == EINVAL) exit (0); fprintf (stderr, "Error doing ioctl(2) on /dev/mtrr\t%s\n", ERRSTRING); exit (3); } /* End Function main */ =============================================================================== Creating MTRRs from a C programme using ioctl()'s: /* mtrr-add.c Source file for mtrr-add (example programme to add an MTRRs using ioctl()) Copyright (C) 1997-1998 Richard Gooch 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., 675 Mass Ave, Cambridge, MA 02139, USA. Richard Gooch may be reached by email at rgooch@atnf.csiro.au The postal address is: Richard Gooch, c/o ATNF, P. O. Box 76, Epping, N.S.W., 2121, Australia. */ /* This programme will use an ioctl() on /proc/mtrr to add an entry. The first available mtrr is used. This is an alternative to writing /proc/mtrr. Written by Richard Gooch 17-DEC-1997 Last updated by Richard Gooch 2-MAY-1998 */ #include #include #include #include #include #include #include #include #include #define MTRR_NEED_STRINGS #include #define TRUE 1 #define FALSE 0 #define ERRSTRING strerror (errno) int main (int argc, char **argv) { int fd; struct mtrr_sentry sentry; if (argc != 4) { fprintf (stderr, "Usage:\tmtrr-add base size type\n"); exit (1); } sentry.base = strtoul (argv[1], NULL, 0); sentry.size = strtoul (argv[2], NULL, 0); for (sentry.type = 0; sentry.type < MTRR_NUM_TYPES; ++sentry.type) { if (strcmp (argv[3], mtrr_strings[sentry.type]) == 0) break; } if (sentry.type >= MTRR_NUM_TYPES) { fprintf (stderr, "Illegal type: \"%s\"\n", argv[3]); exit (2); } if ( ( fd = open ("/proc/mtrr", O_WRONLY, 0) ) == -1 ) { if (errno == ENOENT) { fputs ("/proc/mtrr not found: not supported or you don't have a PPro?\n", stderr); exit (3); } fprintf (stderr, "Error opening /proc/mtrr\t%s\n", ERRSTRING); exit (4); } if (ioctl (fd, MTRRIOC_ADD_ENTRY, &sentry) == -1) { fprintf (stderr, "Error doing ioctl(2) on /dev/mtrr\t%s\n", ERRSTRING); exit (5); } fprintf (stderr, "Sleeping for 5 seconds so you can see the new entry\n"); sleep (5); close (fd); fputs ("I've just closed /proc/mtrr so now the new entry should be gone\n", stderr); } /* End Function main */ =============================================================================== Network Block Device (TCP version) Note: Network Block Device is now experimental, which approximately means, that it works on my computer, and it worked on one of school computers. What is it: With this compiled in the kernel, Linux can use a remote server as one of its block devices. So every time the client computer wants to read /dev/nd0, it sends a request over TCP to the server, which will reply with the data read. This can be used for stations with low disk space (or even diskless - if you boot from floppy) to borrow disk space from another computer. Unlike NFS, it is possible to put any filesystem on it etc. It is impossible to use NBD as a root filesystem, since it requires a user-level program to start. It also allows you to run block-device in user land (making server and client physically the same computer, communicating using loopback). Current state: It currently works. Network block device looks like being pretty stable. I originally thought that it is impossible to swap over TCP. It turned out not to be true - swapping over TCP now works and seems to be deadlock-free, but it requires heavy patches into Linux's network layer. Devices: Network block device uses major 43, minors 0..n (where n is configurable in nbd.h). Create these files by mknod when needed. After that, your ls -l /dev/ should look like: brw-rw-rw- 1 root root 43, 0 Apr 11 00:28 nd0 brw-rw-rw- 1 root root 43, 1 Apr 11 00:28 nd1 ... Protocol: Userland program passes file handle with connected TCP socket to actual kernel driver. This way, the kernel does not have to care about connecting etc. Protocol is rather simple: If the driver is asked to read from block device, it sends packet of following form "request" (all data are in network byte order): __u32 magic; must be equal to 0x12560953 __u32 from; position in bytes to read from / write at __u32 len; number of bytes to be read / written __u64 handle; handle of operation __u32 type; 0 = read 1 = write ... in case of write operation, this is immediately followed len bytes of data When operation is completed, server responds with packet of following structure "reply": __u32 magic; must be equal to __u64 handle; handle copied from request __u32 error; 0 = operation completed successfully, else error code ... in case of read operation with no error, this is immediately followed len bytes of data For more information, look at http://atrey.karlin.mff.cuni.cz/~pavel. Mounting the root filesystem via NFS (nfsroot) =============================================== Written 1996 by Gero Kuhlmann Updated 1997 by Martin Mares If you want to use a diskless system, as an X-terminal or printer server for example, you have to put your root filesystem onto a non-disk device. This can either be a ramdisk (see initrd.txt in this directory for further information) or a filesystem mounted via NFS. The following text describes on how to use NFS for the root filesystem. For the rest of this text 'client' means the diskless system, and 'server' means the NFS server. 1.) Enabling nfsroot capabilities ----------------------------- In order to use nfsroot you have to select support for NFS during kernel configuration. Note that NFS cannot be loaded as a module in this case. The configuration script will then ask you whether you want to use nfsroot, and if yes what kind of auto configuration system you want to use. Selecting both DHCP/BOOTP and RARP is safe. 2.) Kernel command line ------------------- When the kernel has been loaded by a boot loader (either by loadlin, LILO or a network boot program) it has to be told what root fs device to use, and where to find the server and the name of the directory on the server to mount as root. This can be established by a couple of kernel command line parameters: root=/dev/nfs This is necessary to enable the pseudo-NFS-device. Note that it's not a real device but just a synonym to tell the kernel to use NFS instead of a real device. nfsroot=[:][,] If the `nfsroot' parameter is NOT given on the command line, the default "/tftpboot/%s" will be used. Specifies the IP address of the NFS server. If this field is not given, the default address as determined by the `ip' variable (see below) is used. One use of this parameter is for example to allow using different servers for RARP and NFS. Usually you can leave this blank. Name of the directory on the server to mount as root. If there is a "%s" token in the string, the token will be replaced by the ASCII-representation of the client's IP address. Standard NFS options. All options are separated by commas. If the options field is not given, the following defaults will be used: port = as given by server portmap daemon rsize = 1024 wsize = 1024 timeo = 7 retrans = 3 acregmin = 3 acregmax = 60 acdirmin = 30 acdirmax = 60 flags = hard, nointr, noposix, cto, ac ip=:::::: This parameter tells the kernel how to configure IP addresses of devices and also how to set up the IP routing table. It was originally called `nfsaddrs', but now the boot-time IP configuration works independently of NFS, so it was renamed to `ip' and the old name remained as an alias for compatibility reasons. If this parameter is missing from the kernel command line, all fields are assumed to be empty, and the defaults mentioned below apply. In general this means that the kernel tries to configure everything using both RARP and DHCP/BOOTP (depending on what has been enabled during kernel configuration, and if both what protocol answer got in first). IP address of the client. If empty, the address will either be determined by RARP or DHCP/BOOTP. What protocol is used depends on what has been enabled during kernel configuration and on the parameter. If this parameter is not empty, neither RARP nor DHCP/BOOTP will be used. IP address of the NFS server. If RARP is used to determine the client address and this parameter is NOT empty only replies from the specified server are accepted. To use different RARP and NFS server, specify your RARP server here (or leave it blank), and specify your NFS server in the `nfsroot' parameter (see above). If this entry is blank the address of the server is used which answered the RARP, or the server address in the DHCP/BOOTP reply. (Note that this may *not* be the DHCP/BOOTP server itself.) IP address of a gateway if the server is on a different subnet. If this entry is empty no gateway is used and the server is assumed to be on the local network, unless overridden by DHCP/BOOTP reply. Netmask for local network interface. If this is empty, the netmask is derived from the client IP address assuming classful addressing, unless overridden by DHCP/BOOTP reply. Name of the client. If empty, the client IP address is used in ASCII notation, unless overridden by DHCP/BOOTP reply. Name of network device to use. If this is empty, all devices are used for RARP and BOOTP requests, and the first one we receive a reply on is configured. If you have only one device, you can safely leave this blank. Method to use for autoconfiguration. If this is 'dhcp', 'bootp', or 'rarp', the specified protocol is used. If the value is 'both' or empty, then both BOOTP and RARP are used so far as they are configured into the kernel. (For backward compatibility, DHCP will not be used in this case, unless BOOTP is not configured.) If the value is 'off', no autoconfiguration of any kind occurs. The parameter can appear alone as the value to the `ip' parameter (without all the ':' characters before) in which case auto- configuration is used. 3.) Kernel loader ------------- To get the kernel into memory different approaches can be used. They depend on what facilities are available: 3.1) Writing the kernel onto a floppy using dd: As always you can just write the kernel onto a floppy using dd, but then it's not possible to use kernel command lines at all. To substitute the 'root=' parameter, create a dummy device on any linux system with major number 0 and minor number 255 using mknod: mknod /dev/boot255 c 0 255 Then copy the kernel zImage file onto a floppy using dd: dd if=/usr/src/linux/arch/i386/boot/zImage of=/dev/fd0 And finally use rdev to set the root device: rdev /dev/fd0 /dev/boot255 You can then remove the dummy device /dev/boot255 again. There is no real device available for it. The other two kernel command line parameters cannot be substi- tuted with rdev. Therefore, using this method the kernel will by default use DHCP/BOOTP and/or RARP, and if it gets an answer via RARP will mount the directory /tftpboot// as its root. If it gets a DHCP/BOOTP answer the directory name in that answer is used. 3.2) Using LILO When using LILO you can specify all necessary command line parameters with the 'append=' command in the LILO configuration file. However, to use the 'root=' command you also need to set up a dummy device as described in 3.1 above. For how to use LILO and its 'append=' command please refer to the LILO documentation. 3.3) Using loadlin When you want to boot Linux from a DOS command prompt without having a local hard disk to mount as root, you can use loadlin. I was told that it works, but haven't used it myself yet. In general you should be able to create a kernel command line simi- lar to how LILO is doing it. Please refer to the loadlin docu- mentation for further information. 3.4) Using a boot ROM This is probably the most elegant way of booting a diskless client. With a boot ROM the kernel gets loaded using the TFTP protocol. As far as I know, no commercial boot ROMs yet support booting Linux over the network, but there are two free implementations of a boot ROM available on sunsite.unc.edu and its mirrors. They are called 'netboot-nfs' and 'etherboot'. Both contain everything you need to boot a diskless Linux client. 4.) Credits ------- The nfsroot code in the kernel and the RARP support have been written by Gero Kuhlmann . The rest of the IP layer autoconfiguration code has been written by Martin Mares . In order to write the initial version of nfsroot I would like to thank Jens-Uwe Mager for his help. Is your SMP system locking up unpredictably? No keyboard activity, just a frustrating complete hard lockup? Do you want to help us debugging such lockups? If all yes then this document is definitely for you. on Intel SMP hardware there is a feature that enables us to generate 'watchdog NMI interrupts'. (NMI: Non Maskable Interrupt - these get executed even if the system is otherwise locked up hard) This can be used to debug hard kernel lockups. By executing periodic NMI interrupts, the kernel can monitor wether any CPU has locked up, and print out debugging messages if so. You can enable/disable the NMI watchdog at boot time with the 'nmi_watchdog=1' boot parameter. Eg. the relevant lilo.conf entry: append="nmi_watchdog=1" A 'lockup' is the following scenario: if any CPU in the system does not execute the period local timer interrupt for more than 5 seconds, then the NMI handler generates an oops and kills the process. This 'controlled crash' (and the resulting kernel messages) can be used to debug the lockup. Thus whenever the lockup happens, wait 5 seconds and the oops will show up automatically. If the kernel produces no messages then the system has crashed so hard (eg. hardware-wise) that either it cannot even accept NMI interrupts, or the crash has made the kernel unable to print messages. You can find NMI watchdog patch against Linux 2.2.x at http://people.redhat.com/mingo/NMI-watchdog-patches/ [ feel free to send bug reports, suggestions and patches to Ingo Molnar or the Linux SMP mailing list at ] Quick Summary ------------- cd /usr/src/linux/scripts/ksymoops make ksymoops ./ksymoops < the_oops.txt and send the output the maintainer of the kernel area that seems to be involved with the problem. Don't worry too much about getting the wrong person. If you are unsure send it to the person responsible for the code relevant to what you were doing. If it occurs repeatably try and describe how to recreate it. Thats worth even more than the oops If you are totally stumped as to whom to send the report, send it to linux-kernel@vger.kernel.org. Thanks for your help in making Linux as stable as humanly possible. Where is the_oops.txt? ---------------------- Normally the Oops text is read from the kernel buffers by klogd and handed to syslogd which writes it to a syslog file, typically /var/log/messages (depends on /etc/syslog.conf). Sometimes klogd dies, in which case you can run dmesg > file to read the data from the kernel buffers and save it. Or you can cat /proc/kmsg > file, however you have to break in to stop the transfer, kmsg is a "never ending file". If the machine has crashed so badly that you cannot enter commands or the disk is not available then you have three options :- (1) Hand copy the text from the screen and type it in after the machine has restarted. Messy but it is the only option if you have not planned for a crash. (2) Boot with a serial console (see Documentation/serial-console.txt), run a null modem to a second machine and capture the output there using your favourite communication program. Minicom works well. (3) Patch the kernel with one of the crash dump patches. These save data to a floppy disk or video rom or a swap partition. None of these are standard kernel patches so you have to find and apply them yourself. Search kernel archives for kmsgdump, lkcd and oops+smram. No matter how you capture the log output, feed the resulting file to ksymoops along with /proc/ksyms and /proc/modules that applied at the time of the crash. /var/log/ksymoops can be useful to capture the latter, man ksymoops for details. Full Information ---------------- From: Linus Torvalds How to track down an Oops.. [originally a mail to linux-kernel] The main trick is having 5 years of experience with those pesky oops messages ;-) Actually, there are things you can do that make this easier. I have two separate approaches: gdb /usr/src/linux/vmlinux gdb> disassemble That's the easy way to find the problem, at least if the bug-report is well made (like this one was - run through ksymoops to get the information of which function and the offset in the function that it happened in). Oh, it helps if the report happens on a kernel that is compiled with the same compiler and similar setups. The other thing to do is disassemble the "Code:" part of the bug report: ksymoops will do this too with the correct tools (and new version of ksymoops), but if you don't have the tools you can just do a silly program: char str[] = "\xXX\xXX\xXX..."; main(){} and compile it with gcc -g and then do "disassemble str" (where the "XX" stuff are the values reported by the Oops - you can just cut-and-paste and do a replace of spaces to "\x" - that's what I do, as I'm too lazy to write a program to automate this all). Finally, if you want to see where the code comes from, you can do cd /usr/src/linux make fs/buffer.s # or whatever file the bug happened in and then you get a better idea of what happens than with the gdb disassembly. Now, the trick is just then to combine all the data you have: the C sources (and general knowledge of what it _should_ do), the assembly listing and the code disassembly (and additionally the register dump you also get from the "oops" message - that can be useful to see _what_ the corrupted pointers were, and when you have the assembler listing you can also match the other registers to whatever C expressions they were used for). Essentially, you just look at what doesn't match (in this case it was the "Code" disassembly that didn't match with what the compiler generated). Then you need to find out _why_ they don't match. Often it's simple - you see that the code uses a NULL pointer and then you look at the code and wonder how the NULL pointer got there, and if it's a valid thing to do you just check against it.. Now, if somebody gets the idea that this is time-consuming and requires some small amount of concentration, you're right. Which is why I will mostly just ignore any panic reports that don't have the symbol table info etc looked up: it simply gets too hard to look it up (I have some programs to search for specific patterns in the kernel code segment, and sometimes I have been able to look up those kinds of panics too, but that really requires pretty good knowledge of the kernel just to be able to pick out the right sequences etc..) _Sometimes_ it happens that I just see the disassembled code sequence from the panic, and I know immediately where it's coming from. That's when I get worried that I've been doing this for too long ;-) Linus --------------------------------------------------------------------------- Notes on Oops tracing with klogd: In order to help Linus and the other kernel developers there has been substantial support incorporated into klogd for processing protection faults. In order to have full support for address resolution at least version 1.3-pl3 of the sysklogd package should be used. When a protection fault occurs the klogd daemon automatically translates important addresses in the kernel log messages to their symbolic equivalents. This translated kernel message is then forwarded through whatever reporting mechanism klogd is using. The protection fault message can be simply cut out of the message files and forwarded to the kernel developers. Two types of address resolution are performed by klogd. The first is static translation and the second is dynamic translation. Static translation uses the System.map file in much the same manner that ksymoops does. In order to do static translation the klogd daemon must be able to find a system map file at daemon initialization time. See the klogd man page for information on how klogd searches for map files. Dynamic address translation is important when kernel loadable modules are being used. Since memory for kernel modules is allocated from the kernel's dynamic memory pools there are no fixed locations for either the start of the module or for functions and symbols in the module. The kernel supports system calls which allow a program to determine which modules are loaded and their location in memory. Using these system calls the klogd daemon builds a symbol table which can be used to debug a protection fault which occurs in a loadable kernel module. At the very minimum klogd will provide the name of the module which generated the protection fault. There may be additional symbolic information available if the developer of the loadable module chose to export symbol information from the module. Since the kernel module environment can be dynamic there must be a mechanism for notifying the klogd daemon when a change in module environment occurs. There are command line options available which allow klogd to signal the currently executing daemon that symbol information should be refreshed. See the klogd manual page for more information. A patch is included with the sysklogd distribution which modifies the modules-2.0.0 package to automatically signal klogd whenever a module is loaded or unloaded. Applying this patch provides essentially seamless support for debugging protection faults which occur with kernel loadable modules. The following is an example of a protection fault in a loadable module processed by klogd: --------------------------------------------------------------------------- Aug 29 09:51:01 blizard kernel: Unable to handle kernel paging request at virtual address f15e97cc Aug 29 09:51:01 blizard kernel: current->tss.cr3 = 0062d000, %cr3 = 0062d000 Aug 29 09:51:01 blizard kernel: *pde = 00000000 Aug 29 09:51:01 blizard kernel: Oops: 0002 Aug 29 09:51:01 blizard kernel: CPU: 0 Aug 29 09:51:01 blizard kernel: EIP: 0010:[oops:_oops+16/3868] Aug 29 09:51:01 blizard kernel: EFLAGS: 00010212 Aug 29 09:51:01 blizard kernel: eax: 315e97cc ebx: 003a6f80 ecx: 001be77b edx: 00237c0c Aug 29 09:51:01 blizard kernel: esi: 00000000 edi: bffffdb3 ebp: 00589f90 esp: 00589f8c Aug 29 09:51:01 blizard kernel: ds: 0018 es: 0018 fs: 002b gs: 002b ss: 0018 Aug 29 09:51:01 blizard kernel: Process oops_test (pid: 3374, process nr: 21, stackpage=00589000) Aug 29 09:51:01 blizard kernel: Stack: 315e97cc 00589f98 0100b0b4 bffffed4 0012e38e 00240c64 003a6f80 00000001 Aug 29 09:51:01 blizard kernel: 00000000 00237810 bfffff00 0010a7fa 00000003 00000001 00000000 bfffff00 Aug 29 09:51:01 blizard kernel: bffffdb3 bffffed4 ffffffda 0000002b 0007002b 0000002b 0000002b 00000036 Aug 29 09:51:01 blizard kernel: Call Trace: [oops:_oops_ioctl+48/80] [_sys_ioctl+254/272] [_system_call+82/128] Aug 29 09:51:01 blizard kernel: Code: c7 00 05 00 00 00 eb 08 90 90 90 90 90 90 90 90 89 ec 5d c3 --------------------------------------------------------------------------- Dr. G.W. Wettstein Oncology Research Div. Computing Facility Roger Maris Cancer Center INTERNET: greg@wind.rmcc.com 820 4th St. N. Fargo, ND 58122 Phone: 701-234-7556 Linux and parallel port IDE devices PARIDE v1.03 (c) 1997-8 Grant Guenther 1. Introduction Owing to the simplicity and near universality of the parallel port interface to personal computers, many external devices such as portable hard-disk, CD-ROM, LS-120 and tape drives use the parallel port to connect to their host computer. While some devices (notably scanners) use ad-hoc methods to pass commands and data through the parallel port interface, most external devices are actually identical to an internal model, but with a parallel-port adapter chip added in. Some of the original parallel port adapters were little more than mechanisms for multiplexing a SCSI bus. (The Iomega PPA-3 adapter used in the ZIP drives is an example of this approach). Most current designs, however, take a different approach. The adapter chip reproduces a small ISA or IDE bus in the external device and the communication protocol provides operations for reading and writing device registers, as well as data block transfer functions. Sometimes, the device being addressed via the parallel cable is a standard SCSI controller like an NCR 5380. The "ditto" family of external tape drives use the ISA replicator to interface a floppy disk controller, which is then connected to a floppy-tape mechanism. The vast majority of external parallel port devices, however, are now based on standard IDE type devices, which require no intermediate controller. If one were to open up a parallel port CD-ROM drive, for instance, one would find a standard ATAPI CD-ROM drive, a power supply, and a single adapter that interconnected a standard PC parallel port cable and a standard IDE cable. It is usually possible to exchange the CD-ROM device with any other device using the IDE interface. The document describes the support in Linux for parallel port IDE devices. It does not cover parallel port SCSI devices, "ditto" tape drives or scanners. Many different devices are supported by the parallel port IDE subsystem, including: MicroSolutions backpack CD-ROM MicroSolutions backpack PD/CD MicroSolutions backpack hard-drives MicroSolutions backpack 8000t tape drive SyQuest EZ-135, EZ-230 & SparQ drives Avatar Shark Imation Superdisk LS-120 Maxell Superdisk LS-120 FreeCom Power CD Hewlett-Packard 5GB and 8GB tape drives Hewlett-Packard 7100 and 7200 CD-RW drives as well as most of the clone and no-name products on the market. To support such a wide range of devices, PARIDE, the parallel port IDE subsystem, is actually structured in three parts. There is a base paride module which provides a registry and some common methods for accessing the parallel ports. The second component is a set of high-level drivers for each of the different types of supported devices: pd IDE disk pcd ATAPI CD-ROM pf ATAPI disk pt ATAPI tape pg ATAPI generic (Currently, the pg driver is only used with CD-R drives). The high-level drivers function according to the relevant standards. The third component of PARIDE is a set of low-level protocol drivers for each of the parallel port IDE adapter chips. Thanks to the interest and encouragement of Linux users from many parts of the world, support is available for almost all known adapter protocols: aten ATEN EH-100 (HK) bpck Microsolutions backpack (US) comm DataStor (old-type) "commuter" adapter (TW) dstr DataStor EP-2000 (TW) epat Shuttle EPAT (UK) epia Shuttle EPIA (UK) fit2 FIT TD-2000 (US) fit3 FIT TD-3000 (US) friq Freecom IQ cable (DE) frpw Freecom Power (DE) kbic KingByte KBIC-951A and KBIC-971A (TW) ktti KT Technology PHd adapter (SG) on20 OnSpec 90c20 (US) on26 OnSpec 90c26 (US) 2. Using the PARIDE subsystem While configuring the Linux kernel, you may choose either to build the PARIDE drivers into your kernel, or to build them as modules. In either case, you will need to select "Parallel port IDE device support" as well as at least one of the high-level drivers and at least one of the parallel port communication protocols. If you do not know what kind of parallel port adapter is used in your drive, you could begin by checking the file names and any text files on your DOS installation floppy. Alternatively, you can look at the markings on the adapter chip itself. That's usually sufficient to identify the correct device. You can actually select all the protocol modules, and allow the PARIDE subsystem to try them all for you. For the "brand-name" products listed above, here are the protocol and high-level drivers that you would use: Manufacturer Model Driver Protocol MicroSolutions CD-ROM pcd bpck MicroSolutions PD drive pf bpck MicroSolutions hard-drive pd bpck MicroSolutions 8000t tape pt bpck SyQuest EZ, SparQ pd epat Imation Superdisk pf epat Maxell Superdisk pf friq Avatar Shark pd epat FreeCom CD-ROM pcd frpw Hewlett-Packard 5GB Tape pt epat Hewlett-Packard 7200e (CD) pcd epat Hewlett-Packard 7200e (CD-R) pg epat 2.1 Configuring built-in drivers We recommend that you get to know how the drivers work and how to configure them as loadable modules, before attempting to compile a kernel with the drivers built-in. If you built all of your PARIDE support directly into your kernel, and you have just a single parallel port IDE device, your kernel should locate it automatically for you. If you have more than one device, you may need to give some command line options to your bootloader (eg: LILO), how to do that is beyond the scope of this document. The high-level drivers accept a number of command line parameters, all of which are documented in the source files in linux/drivers/block/paride. By default, each driver will automatically try all parallel ports it can find, and all protocol types that have been installed, until it finds a parallel port IDE adapter. Once it finds one, the probe stops. So, if you have more than one device, you will need to tell the drivers how to identify them. This requires specifying the port address, the protocol identification number and, for some devices, the drive's chain ID. While your system is booting, a number of messages are displayed on the console. Like all such messages, they can be reviewed with the 'dmesg' command. Among those messages will be some lines like: paride: bpck registered as protocol 0 paride: epat registered as protocol 1 The numbers will always be the same until you build a new kernel with different protocol selections. You should note these numbers as you will need them to identify the devices. If you happen to be using a MicroSolutions backpack device, you will also need to know the unit ID number for each drive. This is usually the last two digits of the drive's serial number (but read MicroSolutions' documentation about this). As an example, let's assume that you have a MicroSolutions PD/CD drive with unit ID number 36 connected to the parallel port at 0x378, a SyQuest EZ-135 connected to the chained port on the PD/CD drive and also an Imation Superdisk connected to port 0x278. You could give the following options on your boot command: pd.drive0=0x378,1 pf.drive0=0x278,1 pf.drive1=0x378,0,36 In the last option, pf.drive1 configures device /dev/pf1, the 0x378 is the parallel port base address, the 0 is the protocol registration number and 36 is the chain ID. Please note: while PARIDE will work both with and without the PARPORT parallel port sharing system that is included by the "Parallel port support" option, PARPORT must be included and enabled if you want to use chains of devices on the same parallel port. 2.2 Loading and configuring PARIDE as modules It is much faster and simpler to get to understand the PARIDE drivers if you use them as loadable kernel modules. Note 1: using these drivers with the "kerneld" automatic module loading system is not recommended for beginners, and is not documented here. Note 2: if you build PARPORT support as a loadable module, PARIDE must also be built as loadable modules, and PARPORT must be loaded before the PARIDE modules. To use PARIDE, you must begin by insmod paride this loads a base module which provides a registry for the protocols, among other tasks. Then, load as many of the protocol modules as you think you might need. As you load each module, it will register the protocols that it supports, and print a log message to your kernel log file and your console. For example: # insmod epat paride: epat registered as protocol 0 # insmod kbic paride: k951 registered as protocol 1 paride: k971 registered as protocol 2 Finally, you can load high-level drivers for each kind of device that you have connected. By default, each driver will autoprobe for a single device, but you can support up to four similar devices by giving their individual co-ordinates when you load the driver. For example, if you had two no-name CD-ROM drives both using the KingByte KBIC-951A adapter, one on port 0x378 and the other on 0x3bc you could give the following command: # insmod pcd drive0=0x378,1 drive1=0x3bc,1 For most adapters, giving a port address and protocol number is sufficient, but check the source files in linux/drivers/block/paride for more information. (Hopefully someone will write some man pages one day !). As another example, here's what happens when PARPORT is installed, and a SyQuest EZ-135 is attached to port 0x378: # insmod paride paride: version 1.0 installed # insmod epat paride: epat registered as protocol 0 # insmod pd pd: pd version 1.0, major 45, cluster 64, nice 0 pda: Sharing parport1 at 0x378 pda: epat 1.0, Shuttle EPAT chip c3 at 0x378, mode 5 (EPP-32), delay 1 pda: SyQuest EZ135A, 262144 blocks [128M], (512/16/32), removable media pda: pda1 Note that the last line is the output from the generic partition table scanner - in this case it reports that it has found a disk with one partition. 2.3 Using a PARIDE device Once the drivers have been loaded, you can access PARIDE devices in the same way as their traditional counterparts. You will probably need to create the device "special files". Here is a simple script that you can cut to a file and execute: #!/bin/bash # # mkd -- a script to create the device special files for the PARIDE subsystem # function mkdev { mknod $1 $2 $3 $4 ; chmod 0660 $1 ; chown root:disk $1 } # function pd { D=$( printf \\$( printf "x%03x" $[ $1 + 97 ] ) ) mkdev pd$D b 45 $[ $1 * 16 ] for P in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 do mkdev pd$D$P b 45 $[ $1 * 16 + $P ] done } # cd /dev # for u in 0 1 2 3 ; do pd $u ; done for u in 0 1 2 3 ; do mkdev pcd$u b 46 $u ; done for u in 0 1 2 3 ; do mkdev pf$u b 47 $u ; done for u in 0 1 2 3 ; do mkdev pt$u c 96 $u ; done for u in 0 1 2 3 ; do mkdev npt$u c 96 $[ $u + 128 ] ; done for u in 0 1 2 3 ; do mkdev pg$u c 97 $u ; done # # end of mkd With the device files and drivers in place, you can access PARIDE devices like any other Linux device. For example, to mount a CD-ROM in pcd0, use: mount /dev/pcd0 /cdrom If you have a fresh Avatar Shark cartridge, and the drive is pda, you might do something like: fdisk /dev/pda -- make a new partition table with partition 1 of type 83 mke2fs /dev/pda1 -- to build the file system mkdir /shark -- make a place to mount the disk mount /dev/pda1 /shark Devices like the Imation superdisk work in the same way, except that they do not have a partition table. For example to make a 120MB floppy that you could share with a DOS system: mkdosfs /dev/pf0 mount /dev/pf0 /mnt 2.4 The pf driver The pf driver is intended for use with parallel port ATAPI disk devices. The most common devices in this category are PD drives and LS-120 drives. Traditionally, media for these devices are not partitioned. Consequently, the pf driver does not support partitioned media. This may be changed in a future version of the driver. 2.5 Using the pt driver The pt driver for parallel port ATAPI tape drives is a minimal driver. It does not yet support many of the standard tape ioctl operations. For best performance, a block size of 32KB should be used. You will probably want to set the parallel port delay to 0, if you can. 2.6 Using the pg driver The pg driver can be used in conjunction with the cdrecord program to create CD-ROMs. Please get cdrecord version 1.6.1 or later from ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/ . To record CD-R media your parallel port should ideally be set to EPP mode, and the "port delay" should be set to 0. With those settings it is possible to record at 2x speed without any buffer underruns. If you cannot get the driver to work in EPP mode, try to use "bidirectional" or "PS/2" mode and 1x speeds only. 3. Troubleshooting 3.1 Use EPP mode if you can The most common problems that people report with the PARIDE drivers concern the parallel port CMOS settings. At this time, none of the PARIDE protocol modules support ECP mode, or any ECP combination modes. If you are able to do so, please set your parallel port into EPP mode using your CMOS setup procedure. 3.2 Check the port delay Some parallel ports cannot reliably transfer data at full speed. To offset the errors, the PARIDE protocol modules introduce a "port delay" between each access to the i/o ports. Each protocol sets a default value for this delay. In most cases, the user can override the default and set it to 0 - resulting in somewhat higher transfer rates. In some rare cases (especially with older 486 systems) the default delays are not long enough. if you experience corrupt data transfers, or unexpected failures, you may wish to increase the port delay. The delay can be programmed using the "driveN" parameters to each of the high-level drivers. Please see the notes above, or read the comments at the beginning of the driver source files in linux/drivers/block/paride. 3.3 Some drives need a printer reset There appear to be a number of "noname" external drives on the market that do not always power up correctly. We have noticed this with some drives based on OnSpec and older Freecom adapters. In these rare cases, the adapter can often be reinitialised by issuing a "printer reset" on the parallel port. As the reset operation is potentially disruptive in multiple device environments, the PARIDE drivers will not do it automatically. You can however, force a printer reset by doing: insmod lp rmmod lp If you have one of these marginal cases, you should probably build your paride drivers as modules, and arrange to do the printer reset before loading the PARIDE drivers. 3.4 Use the verbose option and dmesg if you need help While a lot of testing has gone into these drivers to make them work as smoothly as possible, problems will arise. If you do have problems, please check all the obvious things first: does the drive work in DOS with the manufacturer's drivers ? If that doesn't yield any useful clues, then please make sure that only one drive is hooked to your system, and that either (a) PARPORT is enabled or (b) no other device driver is using your parallel port (check in /proc/ioports). Then, load the appropriate drivers (you can load several protocol modules if you want) as in: # insmod paride # insmod epat # insmod bpck # insmod kbic ... # insmod pd verbose=1 (using the correct driver for the type of device you have, of course). The verbose=1 parameter will cause the drivers to log a trace of their activity as they attempt to locate your drive. Use 'dmesg' to capture a log of all the PARIDE messages (any messages beginning with paride:, a protocol module's name or a driver's name) and include that with your bug report. You can submit a bug report in one of two ways. Either send it directly to the author of the PARIDE suite, by e-mail to grant@torque.net, or join the linux-parport mailing list and post your report there. 3.5 For more information or help You can join the linux-parport mailing list by sending a mail message to linux-parport-request@torque.net with the single word subscribe in the body of the mail message (not in the subject line). Please be sure that your mail program is correctly set up when you do this, as the list manager is a robot that will subscribe you using the reply address in your mail headers. REMOVE any anti-spam gimmicks you may have in your mail headers, when sending mail to the list server. You might also find some useful information on the linux-parport web pages (although they are not always up to date) at http://www.torque.net/parport/ The `parport' code provides parallel-port support under Linux. This includes the ability to share one port between multiple device drivers. You can pass parameters to the parport code to override its automatic detection of your hardware. This is particularly useful if you want to use IRQs, since in general these can't be autoprobed successfully. By default IRQs are not used even if they _can_ be probed. This is because there are a lot of people using the same IRQ for their parallel port and a sound card or network card. The parport code is split into two parts: generic (which deals with port-sharing) and architecture-dependent (which deals with actually using the port). Parport as modules ================== If you load the parport code as a module, say # insmod parport.o to load the generic parport code. You then must load the architecture-dependent code with (for example): # insmod parport_pc.o io=0x3bc,0x378,0x278 irq=none,7,auto to tell the parport code that you want three PC-style ports, one at 0x3bc with no IRQ, one at 0x378 using IRQ 7, and one at 0x278 with an auto-detected IRQ. Currently, PC-style (parport_pc) and Sun Ultra/AX (parport_ax) hardware is supported; more is in the works. KMod ---- If you use kmod, you will find it useful to edit /etc/conf.modules. Here is an example of the lines that need to be added: alias parport_lowlevel parport_pc options parport_pc io=0x378,0x278 irq=7,auto KMod will then automatically load parport_pc (with the options "io=0x378,0x278 irq=7,auto") whenever a parallel port device driver (such as lp) is loaded. Parport probe [optional] ------------- Once the architecture-dependent part of the parport code is loaded into the kernel, you can insert the parport_probe module with: # insmod parport_probe.o This will perform an IEEE1284 probe of any attached devices and log a message similar to: parport0: Printer, BJC-210 (Canon) (If you are using kmod and have configured parport_probe as a module, this will just happen.) The probe information is available in /proc/parport/?/autoprobe. Parport linked into the kernel statically ========================================= If you compile the parport code into the kernel, then you can use kernel boot parameters to get the same effect. Add something like the following to your LILO command line: parport=0x3bc parport=0x378,7 parport=0x278,auto You can have many `parport=...' statements, one for each port you want to add. Adding `parport=0' to the kernel command-line will disable parport support entirely. Adding `parport=auto' to the kernel command-line will make parport use any IRQ lines or DMA channels that it auto-detects. Files in /proc ============== If you have configured the /proc filesystem into your kernel, you will see a new directory entry: /proc/parport. In there will be a directory entry for each parallel port for which parport is configured. In each of those directories are four files describing that parallel port. For example: File: Contents: /proc/parport/0/devices A list of the device drivers using that port. A "+" will appear by the name of the device currently using the port (it might not appear against any). /proc/parport/0/hardware Parallel port's base address, IRQ line and DMA channel. /proc/parport/0/irq The IRQ that parport is using for that port. This is in a separate file to allow you to alter it by writing a new value in (IRQ number or "none"). /proc/parport/0/autoprobe Any IEEE-1284 device ID information that has been acquired. Device drivers ============== Once the parport code is initialised, you can attach device drivers to specific ports. Normally this happens automatically; if the lp driver is loaded it will create one lp device for each port found. You can override this, though, by using parameters either when you load the lp driver: # insmod lp.o parport=0,2 or on the LILO command line: lp=parport0 lp=parport2 Both the above examples would inform lp that you want /dev/lp0 to be the first parallel port, and /dev/lp1 to be the _third_ parallel port, with no lp device associated with the second port (parport1). Note that this is different to the way older kernels worked; there used to be a static association between the I/O port address and the device name, so /dev/lp0 was always the port at 0x3bc. This is no longer the case - if you only have one port, it will default to being /dev/lp0, regardless of base address. Also: * If you selected the IEEE-1284 autoprobe at compile time, you can say `lp=auto' on the kernel command line, and lp will create devices only for those ports that seem to have printers attached. * If you give PLIP the `timid' parameter, either with `plip=timid' on the command line, or with `insmod plip timid=1' when using modules, it will avoid any ports that seem to be in use by other devices. * IRQ autoprobing works only for a few port types at the moment. -- Philip.Blundell@pobox.com tim@cyberelk.net Few Notes About The PCI Subsystem or "What should you avoid when writing PCI drivers" by Martin Mares on 13-Feb-1998 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. How to find PCI devices ~~~~~~~~~~~~~~~~~~~~~~~~~~ In case your driver wants to search for all devices with given vendor/device ID, it should use: struct pci_dev *dev = NULL; while (dev = pci_find_device(VENDOR_ID, DEVICE_ID, dev)) configure_device(dev); For class-based search, use pci_find_class(CLASS_ID, dev). In case you want to do some complex matching, look at pci_devices -- it's a linked list of pci_dev structures for all PCI devices in the system. All these methods return a pointer to a pci_dev structure which is used as a parameter for many other PCI functions. The rest of them accept bus and device/function numbers which can be found in pci_dev->bus->number and pci_dev->devfn. Feel free to use all other fields of the pci_dev structure, but don't modify them. The pci_present() function can be used to test presence of PCI in the machine. 2. How to access PCI config space ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You can use pci_(read|write)_config_(byte|word|dword) to access the config space of a device represented by pci_dev. All these functions return 0 when successful or an error code (PCIBIOS_...) which can be translated to a text string by pcibios_strerror. Most drivers expect that accesses to valid PCI devices don't fail. In case you want to address the devices by bus/device/function numbers, use pcibios_(read_write)_config_(byte|word|dword). If you access fields in the standard portion of the config header, please use symbolic names of locations and bits declared in . 3. Addresses and interrupts ~~~~~~~~~~~~~~~~~~~~~~~~~~~ Memory and port addresses and interrupt numbers should NOT be read from the config space. You should use the values in the pci_dev structure as they might have been remapped by the kernel. If your PCI device uses PCI I/O space, you need to use the check_region(), request_region() and release_region() routines. These prevent devices from having conflicting I/O regions. You access your registers using the inb(), inw(), inl(), outb(), outw(), or outl() routines passing the value of (struct pci_dev *) dev->base_address[] masked by PCI_BASE_ADDRESS_IO_MASK as the base address of your registers. If your PCI device uses PCI memory space, use ioremap() to create a cookie mapping to your PCI device. The mask (struct pci_dev *) dev->base_address[] with PCI_BASE_ADDRESS_MEM_MASK before passing it into ioremap(). This cookie is passed to the readb(), readw(), readl(), writeb(), writew(), and writel() routines when accessing PCI space. You must always use these routines when accessing PCI space from the kernel. Not all architectures allow direct access to PCI memory space from the kernel. The IO-mapping.txt file has information about converting between the various address spaces. People writing DMA device drivers should pay special attention to this information. PCI interrupt routines are always SA_SHIRQ and should use the value from (struct pci_dev *) dev->irq field for the interrupt number passed into request_irq(). Since it is a shared interrupt, you must also always pass a unique dev_id to request_irq(). 4. Obsolete functions ~~~~~~~~~~~~~~~~~~~~~ is obsolete and should not be included in new code. pcibios_find_(device|class) are also obsolete and should be replaced by pci_find_(device|class). 5. Bus mastering ~~~~~~~~~~~~~~~~ If you need to setup a bus-mastering card, just call pci_set_master(). It should set PCI_COMMAND_MASTER in the command register and adjust the latency timer if needed. Berkshire Products PC Watchdog Card Support for ISA Cards Revision A and C Documentation and Driver by Ken Hollis The PC Watchdog is a card that offers the same type of functionality that the WDT card does, only it doesn't require an IRQ to run. Furthermore, the Revision C card allows you to monitor any IO Port to automatically trigger the card into being reset. This way you can make the card monitor hard drive status, or anything else you need. The Watchdog Driver has one basic role: to talk to the card and send signals to it so it doesn't reset your computer ... at least during normal operation. The Watchdog Driver will automatically find your watchdog card, and will attach a running driver for use with that card. After the watchdog drivers have initialized, you can then talk to the card using the PC Watchdog program, available from ftp.bitgate.com:/pub/bitgate/pcwd. I suggest putting a "watchdog -d" before the beginning of an fsck, and a "watchdog -e -t 1" immediately after the end of an fsck. (Remember to run the program with an "&" to run it in the background!) If you want to write a program to be compatible with the PC Watchdog driver, simply do the following: -- Snippet of code -- /* * Watchdog Driver Test Program */ #include #include #include #include #include #include #include int fd; /* * This function simply sends an IOCTL to the driver, which in turn ticks * the PC Watchdog card to reset its internal timer so it doesn't trigger * a computer reset. */ void keep_alive(void) { int dummy; ioctl(fd, WDIOC_KEEPALIVE, &dummy); } /* * The main program. Run the program with "-d" to disable the card, * or "-e" to enable the card. */ int main(int argc, char *argv[]) { fd = open("/dev/watchdog", O_WRONLY); if (fd == -1) { fprintf(stderr, "Watchdog device not enabled.\n"); fflush(stderr); exit(-1); } if (argc > 1) { if (!strncasecmp(argv[1], "-d", 2)) { ioctl(fd, WDIOC_SETOPTIONS, WDIOS_DISABLECARD); fprintf(stderr, "Watchdog card disabled.\n"); fflush(stderr); exit(0); } else if (!strncasecmp(argv[1], "-e", 2)) { ioctl(fd, WDIOC_SETOPTIONS, WDIOS_ENABLECARD); fprintf(stderr, "Watchdog card enabled.\n"); fflush(stderr); exit(0); } else { fprintf(stderr, "-d to disable, -e to enable.\n"); fprintf(stderr, "run by itself to tick the card.\n"); fflush(stderr); exit(0); } } else { fprintf(stderr, "Watchdog Ticking Away!\n"); fflush(stderr); } while(1) { keep_alive(); sleep(1); } } -- End snippet -- Other IOCTL functions include: WDIOC_GETSUPPORT This returns the support of the card itself. This returns in structure "PCWDS" which returns: options = WDIOS_TEMPPANIC (This card supports temperature) firmware_version = xxxx (Firmware version of the card) WDIOC_GETSTATUS This returns the status of the card, with the bits of WDIOF_* bitwise-anded into the value. (The comments are in linux/pcwd.h) WDIOC_GETBOOTSTATUS This returns the status of the card that was reported at bootup. WDIOC_GETTEMP This returns the temperature of the card. (You can also read /dev/watchdog, which gives a temperature update every second.) WDIOC_SETOPTIONS This lets you set the options of the card. You can either enable or disable the card this way. WDIOC_KEEPALIVE This pings the card to tell it not to reset your computer. And that's all she wrote! -- Ken Hollis (khollis@nurk.org) ----------------------------------------------------------------------- T H E /proc F I L E S Y S T E M ----------------------------------------------------------------------- /proc/sys Terrehon Bowden January 27 1999 Bodo Bauer ----------------------------------------------------------------------- Version 1.1 Kernel version 2.2 ----------------------------------------------------------------------- Contents 1 Introduction/Credits 1.1 Legal Issues 2 The /proc file system 2.1 Process specific subdirectories 2.2 Kernel data 2.3 IDE devices in /proc/ide 2.4 Networking info in /proc/net 2.5 SCSI info 2.6 Parallel port info in /proc/parport 2.7 TTY info in /proc/tty 3 Reading and modifying kernel parameters 3.1 /proc/sys/debug and /proc/sys/proc 3.2 /proc/fs - File system data 3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats 3.4 /proc/sys/kernel - General kernel parameters 3.5 /proc/sys/vm - The virtual memory subsystem 3.6 /proc/sys/dev - Device specific parameters 3.7 /proc/sys/sunrpc - Remote procedure calls 3.8 /proc/sys/net - Networking stuff 3.9 /proc/sys/net/ipv4 - IPV4 settings 3.10 Appletalk 3.11 IPX ----------------------------------------------------------------------- 1 Introduction/Credits This documentation is part of a soon to be released book published by IDG Books on the SuSE Linux distribution. As there is no complete documentation for the /proc file system and we've used many freely available sources to write this chapter, it seems only fair to give the work back to the Linux community. This work is based on the 2.1.132 and 2.2.0-pre-kernel versions. I'm afraid it's still far from complete, but we hope it will be useful. As far as we know, it is the first 'all-in-one' document about the /proc file system. It is focused on the Intel x86 hardware, so if you are looking for PPC, ARM, SPARC, APX, etc., features, you probably won't find what you are looking for. It also only covers IPv4 networking, not IPv6 nor other protocols - sorry. We'd like to thank Alan Cox, Rik van Riel, and Alexey Kuznetsov. We'd also like to extend a special thank you to Andi Kleen for documentation, which we relied on heavily to create this document, as well as the additional information he provided. Thanks to everybody else who contributed source or docs to the Linux kernel and helped create a great piece of software... :) If you have any comments, corrections or additions, please don't hesitate to contact Bodo Bauer at bb@ricochet.net. We'll be happy to add them to this document. The latest version of this document is available online at http://www.suse.com/~bb/Docs/proc.html in HTML, ASCII, and as Postscript file. 1.1 Legal Stuff We don't guarantee the correctness of this document, and if you come to us complaining about how you screwed up your system because of incorrect documentation, we won't feel responsible... ----------------------------------------------------------------------- 2 The /proc file system The proc file system acts as an interface to internal data structures in the kernel. It can be used to obtain information about the system and to change certain kernel parameters at runtime. It contains (among other things) one subdirectory for each process running on the system which is named after the process id (PID) of the process. The link self points to the process reading the file system. 2.1 Process specific subdirectories Each process subdirectory has the in table 1.1 listed entries. _________________________________________________ cmdline Command line arguments environ Values of environment variables fd Directory, which contains all file descriptors mem Memory held by this process stat Process status status Process status in human readable form cwd Link to the current working directory exe Link to the executable of this process maps Memory maps root Link to the root directory of this process statm Process memory status information _________________________________________________ Table 1.1: Process specific entries in /proc For example, to get the status information of a process, all you have to do is read the file /proc/PID/status: > cat /proc/self/status Name: cat State: R (running) Pid: 5633 PPid: 5609 Uid: 501 501 501 501 Gid: 100 100 100 100 Groups: 100 16 VmSize: 804 kB VmLck: 0 kB VmRSS: 344 kB VmData: 68 kB VmStk: 20 kB VmExe: 12 kB VmLib: 660 kB SigPnd: 0000000000000000 SigBlk: 0000000000000000 SigIgn: 0000000000000000 SigCgt: 0000000000000000 CapInh: 00000000fffffeff CapPrm: 0000000000000000 CapEff: 0000000000000000 This shows you almost the same information as you would get if you viewed it with the ps command. In fact, ps uses the proc file system to obtain its information. The statm file contains more detailed information about the process memory usage. It contains seven values with the following meanings: size total program size resident size of in memory portions shared number of the pages that are shared trs number of pages that are 'code' drs number of pages of data/stack lrs number of pages of library dt number of dirty pages The ratio text/data/library is approximate only by heuristics. 2.2 Kernel data Similar to the process entries, these are files which give information about the running kernel. The files used to obtain this information are contained in /proc and are listed in table 1.2. Not all of these will be present in your system. It depends on the kernel configuration and the loaded modules, which files are there, and which are missing. ________________________________________________ apm Advanced power management info cmdline Kernel command line cpuinfo Info about the CPU devices Available devices (block and character) dma Used DMS channels filesystems Supported filesystems interrupts Interrupt usage ioports I/O port usage kcore Kernel core image kmsg Kernel messages ksyms Kernel symbol table loadavg Load average locks Kernel locks meminfo Memory info misc Miscellaneous modules List of loaded modules mounts Mounted filesystems partitions Table of partitions known to the system rtc Real time clock slabinfo Slab pool info stat Overall statistics swaps Swap space utilization uptime System uptime version Kernel version ________________________________________________ Table 1.2: Kernel info in /proc You can, for example, check which interrupts are currently in use and what they are used for by looking in the file /proc/interrupts: > cat /proc/interrupts CPU0 0: 8728810 XT-PIC timer 1: 895 XT-PIC keyboard 2: 0 XT-PIC cascade 3: 531695 XT-PIC aha152x 4: 2014133 XT-PIC serial 5: 44401 XT-PIC pcnet_cs 8: 2 XT-PIC rtc 11: 8 XT-PIC i82365 12: 182918 XT-PIC PS/2 Mouse 13: 1 XT-PIC fpu 14: 1232265 XT-PIC ide0 15: 7 XT-PIC ide1 NMI: 0 There three more important subdirectories in /proc: net, scsi and sys. The general rule is that the contents, or even the existence of these directories, depends on your kernel configuration. If SCSI is not enabled, the directory scsi may not exist. The same is true with the net, which is only there when networking support is present in the running kernel. The slabinfo file gives information about memory usage on the slab level. Linux uses slab pools for memory management above page level in version 2.2. Commonly used objects have their own slab pool (like network buffers, directory cache, etc.). 2.3 IDE devices in /proc/ide This subdirectory contains information about all IDE devices that the kernel is aware of. There is one subdirectory for each device (i.e. hard disk) containing the following files: cache The cache capacity Capacity of the medium driver Driver and version geometry Physical and logical geometry identify Device identify block media Media type model Device identifier settings Device setup smart_thresholds IDE disk management thresholds smart_values IDE disk management values 2.4 Networking info in /proc/net This directory follows the usual pattern. Table 1.3 lists the files and their meaning. ____________________________________________________ arp Kernel ARP table dev network devices with statistics dev_mcast Lists the Layer2 multicast groups a device is listening to (interface index, label, number of references, number of bound addresses). dev_stat network device status ip_fwchains Firewall chain linkage ip_fwnames Firewall chains ip_masq Directory containing the masquerading tables. ip_masquerade Major masquerading table netstat Network statistics raw Raw device statistics route Kernel routing table rpc Directory containing rpc info rt_cache Routing cache snmp SNMP data sockstat Socket statistics tcp TCP sockets tr_rif Token ring RIF routing table udp UDP sockets unix UNIX domain sockets wireless Wireless interface data (Wavelan etc) igmp IP multicast addresses, which this host joined psched Global packet scheduler parameters. netlink List of PF_NETLINK sockets. ip_mr_vifs List of multicast virtual interfaces. ip_mr_cache List of multicast routing cache. udp6 UDP sockets (IPv6) tcp6 TCP sockets (IPv6) raw6 Raw device statistics (IPv6) igmp6 IP multicast addresses, which this host joineed (IPv6) if_inet6 List of IPv6 interface addresses. ipv6_route Kernel routing table for IPv6 rt6_stats global IPv6 routing tables statistics. sockstat6 Socket statistics (IPv6) snmp6 Snmp data (IPv6) ____________________________________________________ Table 1.3: Network info in /proc/net You can use this information to see which network devices are available in your system and how much traffic was routed over those devices: > cat /proc/net/dev Inter-|Receive |[... face |bytes packets errs drop fifo frame compressed multicast|[... lo: 908188 5596 0 0 0 0 0 0 [... ppp0:15475140 20721 410 0 0 410 0 0 [... eth0: 614530 7085 0 0 0 0 0 1 [... ...] Transmit ...] bytes packets errs drop fifo colls carrier compressed ...] 908188 5596 0 0 0 0 0 0 ...] 1375103 17405 0 0 0 0 0 0 ...] 1703981 5535 0 0 0 3 0 0 2.5 SCSI info If you have a SCSI host adapter in your system, you'll find a subdirectory named after the driver for this adapter in /proc/scsi. You'll also see a list of all recognized SCSI devices in /proc/scsi: >cat /proc/scsi/scsi Attached devices: Host: scsi0 Channel: 00 Id: 00 Lun: 00 Vendor: QUANTUM Model: XP34550W Rev: LXY4 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 01 Lun: 00 Vendor: SEAGATE Model: ST34501W Rev: 0018 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 02 Lun: 00 Vendor: SEAGATE Model: ST34501W Rev: 0017 Type: Direct-Access ANSI SCSI revision: 02 Host: scsi0 Channel: 00 Id: 04 Lun: 00 Vendor: ARCHIVE Model: Python 04106-XXX Rev: 703b Type: Sequential-Access ANSI SCSI revision: 02 The directory named after the driver has one file for each adapter found in the system. These files contain information about the controller, including the used IRQ and the IO address range: >cat /proc/scsi/ncr53c8xx/0 General information: Chip NCR53C875, device id 0xf, revision id 0x4 IO port address 0xec00, IRQ number 11 Synchronous period factor 12, max commands per lun 4 2.6 Parallel port info in /proc/parport The directory /proc/parport contains information about the parallel ports of your system. It has one subdirectory for each port, named after the port number (0,1,2,...). This directory contains four files: autoprobe Autoprobe results of this port devices Connected device modules hardware Hardware info (port type, io-port, DMA, IRQ, etc.) irq Used interrupt, if any 2.7 TTY info in /proc/tty Information about the available and the actually used tty's can be found in /proc/tty. You'll find entries for drivers and line disciplines in this directory, as shown in the table below: drivers List of drivers and their usage ldiscs Registered line disciplines driver/serial Usage statistic and status of single tty lines To see which tty's are currently in use, you can simply look into the file /proc/tty/drivers: >cat /proc/tty/drivers pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master serial /dev/cua 5 64-67 serial:callout serial /dev/ttyS 4 64-67 serial /dev/tty0 /dev/tty0 4 0 system:vtmaster /dev/ptmx /dev/ptmx 5 2 system /dev/console /dev/console 5 1 system:console /dev/tty /dev/tty 5 0 system:/dev/tty unknown /dev/tty 4 1-63 console ----------------------------------------------------------------------- 3 Reading and modifying kernel parameters A very interesting part of /proc is the directory /proc/sys. This not only provides information, it also allows you to change parameters within the kernel. Be very careful when trying this. You can optimize your system, but you also can crash it. Never play around with kernel parameters on a production system. Set up a development machine and test to make sure that everything works the way you want it to. You may have no alternative but to reboot the machine once an error has been made. To change a value, simply echo the new value into the file. An example is given below in the section on the file system data. You need to be root to do this. You can create your own boot script to get this done every time your system boots. The files in /proc/sys can be used to tune and monitor miscellaneous and general things in the operation of the Linux kernel. Since some of the files can inadvertently disrupt your system, it is advisable to read both documentation and source before actually making adjustments. In any case, be very careful when writing to any of these files. The entries in /proc may change slightly between the 2.1.* and the 2.2 kernel, so review the kernel documentation if there is any doubt. You'll find the documentation in the directory /usr/src/linux/Documentation/sys. This chapter is heavily based on the documentation included in the pre 2.2 kernels. Thanks to Rick van Riel for providing this information. 3.1 /proc/sys/debug and /proc/sys/proc These two subdirectories are empty. 3.2 /proc/fs - File system data This subdirectory contains specific file system, file handle, inode, dentry and quota information. Currently, these files are in /proc/sys/fs: dentry-state Status of the directory cache. Since directory entries are dynamically allocated and deallocated, this file gives information about the current status. It holds six values, in which the last two are not used and are always zero. The other four mean: nr_dentry Seems to be zero all the time nr_unused Number of unused cache entries age_limit Age in seconds after the entry may be reclaimed, when memory is short want_pages internal dquot-nr and dquot-max The file dquot-max shows the maximum number of cached disk quota entries. The file dquot-nr shows the number of allocated disk quota entries and the number of free disk quota entries. If the number of free cached disk quotas is very low and you have a large number of simultaneous system users, you might want to raise the limit. file-nr and file-max The kernel allocates file handles dynamically, but as yet doesn't free them again. The value in file-max denotes the maximum number of file handles that the Linux kernel will allocate. When you get a lot of error messages about running out of file handles, you might want to raise this limit. The default value is 4096. To change it, just write the new number into the file: # cat /proc/sys/fs/file-max 4096 # echo 8192 > /proc/sys/fs/file-max # cat /proc/sys/fs/file-max 8192 This method of revision is useful for all customizable parameters of the kernel - simply echo the new value to the corresponding file. The three values in file-nr denote the number of allocated file handles, the number of used file handles, and the maximum number of file handles. When the allocated file handles come close to the maximum, but the number of actually used ones is far behind, you've encountered a peak in your usage of file handles and you don't need to increase the maximum. inode-state, inode-nr and inode-max As with file handles, the kernel allocates the inode structures dynamically, but can't free them yet. The value in inode-max denotes the maximum number of inode handlers. This value should be 3 to 4 times larger than the value in file-max, since stdin, stdout, and network sockets also need an inode struct to handle them. If you regularly run out of inodes, you should increase this value. The file inode-nr contains the first two items from inode-state, so we'll skip to that file... inode-state contains three actual numbers and four dummy values. The actual numbers are (in order of appearance) nr_inodes, nr_free_inodes, and preshrink. nr_inodes Denotes the number of inodes the system has allocated. This can be slightly more than inode-max because Linux allocates them one pageful at a time. nr_free_inodes Represents the number of free inodes and pre shrink is nonzero when the nr_inodes > inode-max and the system needs to prune the inode list instead of allocating more. super-nr and super-max Again, super block structures are allocated by the kernel, but not freed. The file super-max contains the maximum number of super block handlers, where super-nr shows the number of currently allocated ones. Every mounted file system needs a super block, so if you plan to mount lots of file systems, you may want to increase these numbers. 3.3 /proc/fs/binfmt_misc - Miscellaneous binary formats Besides these files, there is the subdirectory /proc/sys/fs/binfmt_misc. This handles the kernel support for miscellaneous binary formats. Binfmt_misc provides the ability to register additional binary formats to the Kernel without compiling an additional module/kernel. Therefore binfmt_misc needs to know magic numbers at the beginning or the filename extension of the binary. It works by maintaining a linked list of structs, that contain a description of a binary format, including a magic with size (or the filename extension), offset and mask, and the interpreter name. On request it invokes the given interpreter with the original program as argument, as binfmt_java and binfmt_em86 and binfmt_mz do. Since binfmt_misc does not define any default binary-formats, you have to register an additional binary-format. There are two general files in binfmt_misc and one file per registered format. The two general files are register and status. Registering a new binary format echo :name:type:offset:magic:mask:interpreter: > /proc/sys/fs/binfmt_misc/register with appropriate name (the name for the /proc-dir entry), offset (defaults to 0, if omitted), magic and mask (which can be omitted, defaults to all 0xff) and last but not least, the interpreter that is to be invoked (for example and testing '/bin/echo'). Type can be M for usual magic matching or E for filename extension matching (give extension in place of magic). To check or reset the status of the binary format handler: If you do a cat on the file /proc/sys/fs/binfmt_misc/status, you will get the current status (enabled/disabled) of binfmt_misc. Change the status by echoing 0 (disables) or 1 (enables) or -1 (caution: this clears all previously registered binary formats) to status. For example echo 0 > status to disable binfmt_misc (temporarily). Status of a single handler Each registered handler has an entry in /proc/sys/fs/binfmt_misc. These files perform the same function as status, but their scope is limited to the actual binary format. By cating this file, you also receive all related information about the interpreter/magic of the binfmt. Example usage of binfmt_misc (emulate binfmt_java) cd /proc/sys/fs/binfmt_misc echo ':Java:M::\xca\xfe\xba\xbe::/usr/local/java/bin/javawrapper:' > register echo ':HTML:E::html::/usr/local/java/bin/appletviewer:' > register echo ':Applet:M:: | | | edge connector | | | V V V Base address 0x100 caused a conflict in one of my computers once. I haven't the foggiest why. My Specialix card is now at 0x180. My other computer runs just fine with the Specialix card at 0x100.... The card occupies 4 addresses, but actually only two are really used. The PCI version doesn't have any dip switches. The BIOS assigns an IO address. The driver now still autoprobes at 0x100, 0x180, 0x250 and 0x260. If that causes trouble for you, please report that. I'll remove autoprobing then. The driver will tell the card what IRQ to use, so you don't have to change any jumpers to change the IRQ. Just use a command line argument (irq=xx) to the insmod program to set the interrupt. The BIOS assigns the IRQ on the PCI version. You have no say in what IRQ to use in that case. If your specialix cards are not at the default locations, you can use the kernel command line argument "specialix=io0,irq0,io1,irq1...". Here "io0" is the io address for the first card, and "irq0" is the irq line that the first card should use. And so on. Examples. You use the driver as a module and have three cards at 0x100, 0x250 and 0x180. And some way or another you want them detected in that order. Moreover irq 12 is taken (e.g. by your PS/2 mouse). insmod specialix.o iobase=0x100,0x250,0x180 irq=9,11,15 The same three cards, but now in the kernel would require you to add specialix=0x100,9,0x250,11,0x180,15 to the command line. This would become append="specialix=0x100,9,0x250,11,0x180,15" in your /etc/lilo.conf file if you use lilo. The Specialix driver is slightly odd: It allows you to have the second or third card detected without having a first card. This has advantages and disadvantages. A slot that isn't filled by an ISA card, might be filled if a PCI card is detected. Thus if you have an ISA card at 0x250 and a PCI card, you would get: sx0: specialix IO8+ Board at 0x100 not found. sx1: specialix IO8+ Board at 0x180 not found. sx2: specialix IO8+ board detected at 0x250, IRQ 12, CD1865 Rev. B. sx3: specialix IO8+ Board at 0x260 not found. sx0: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. This would happen if you don't give any probe hints to the driver. If you would specify: specialix=0x250,11 you'd get the following messages: sx0: specialix IO8+ board detected at 0x250, IRQ 11, CD1865 Rev. B. sx1: specialix IO8+ board detected at 0xd800, IRQ 9, CD1865 Rev. B. ISA probing is aborted after the IO address you gave is exhausted, and the PCI card is now detected as the second card. The ISA card is now also forced to IRQ11.... Baud rates ========== The rev 1.2 and below boards use a CL-CD1864. These chips can only do 64kbit. The rev 1.3 and newer boards use a CL-CD1865. These chips are officially capable of 115k2. The Specialix card uses a 25MHz crystal (in times two mode, which in fact is a divided by two mode). This is not enough to reach the rated 115k2 on all ports at the same time. With this clock rate you can only do 37% of this rate. This means that at 115k2 on all ports you are going to lose characters (The chip cannot handle that many incoming bits at this clock rate.) (Yes, you read that correctly: there is a limit to the number of -=bits=- per second that the chip can handle.) If you near the "limit" you will first start to see a graceful degradation in that the chip cannot keep the transmitter busy at all times. However with a central clock this slow, you can also get it to miss incoming characters. The driver will print a warning message when you are outside the official specs. The messages usually show up in the file /var/log/messages . The specialix card cannot reliably do 115k2. If you use it, you have to do "extensive testing" (*) to verify if it actually works. When "mgetty" communicates with my modem at 115k2 it reports: got: +++[0d]ATQ0V1H0[0d][0d][8a]O[cb][0d][8a] ^^^^ ^^^^ ^^^^ The three characters that have the "^^^" under them have suffered a bit error in the highest bit. In conclusion: I've tested it, and found that it simply DOESN'T work for me. I also suspect that this is also caused by the baud rate being just a little bit out of tune. I upgraded the crystal to 66Mhz on one of my Specialix cards. Works great! Contact me for details. (Voids warranty, requires a steady hand and more such restrictions....) (*) Cirrus logic CD1864 databook, page 40. Cables for the Specialix IO8+ ============================= The pinout of the connectors on the IO8+ is: pin short direction long name name Pin 1 DCD input Data Carrier Detect Pin 2 RXD input Receive Pin 3 DTR/RTS output Data Terminal Ready/Ready To Send Pin 4 GND - Ground Pin 5 TXD output Transmit Pin 6 CTS input Clear To Send -- 6 5 4 3 2 1 -- | | | | | | | | +----- -----+ |__________| clip Front view of an RJ12 connector. Cable moves "into" the paper. (the plug is ready to plug into your mouth this way...) NULL cable. I don't know who is going to use these except for testing purposes, but I tested the cards with this cable. (It took quite a while to figure out, so I'm not going to delete it. So there! :-) This end goes This end needs straight into the some twists in RJ12 plug. the wiring. IO8+ RJ12 IO8+ RJ12 1 DCD white - - - 1 DCD 2 RXD black 5 TXD 3 DTR/RTS red 6 CTS 4 GND green 4 GND 5 TXD yellow 2 RXD 6 CTS blue 3 DTR/RTS Same NULL cable, but now sorted on the second column. 1 DCD white - - - 1 DCD 5 TXD yellow 2 RXD 6 CTS blue 3 DTR/RTS 4 GND green 4 GND 2 RXD black 5 TXD 3 DTR/RTS red 6 CTS This is a modem cable usable for hardware handshaking: RJ12 DB25 DB9 1 DCD white 8 DCD 1 DCD 2 RXD black 3 RXD 2 RXD 3 DTR/RTS red 4 RTS 7 RTS 4 GND green 7 GND 5 GND 5 TXD yellow 2 TXD 3 TXD 6 CTS blue 5 CTS 8 CTS +---- 6 DSR 6 DSR +---- 20 DTR 4 DTR This is a modem cable usable for software handshaking: It allows you to reset the modem using the DTR ioctls. I (REW) have never tested this, "but xxxxxxxxxxxxx says that it works." If you test this, please tell me and I'll fill in your name on the xxx's. RJ12 DB25 DB9 1 DCD white 8 DCD 1 DCD 2 RXD black 3 RXD 2 RXD 3 DTR/RTS red 20 DTR 4 DTR 4 GND green 7 GND 5 GND 5 TXD yellow 2 TXD 3 TXD 6 CTS blue 5 CTS 8 CTS +---- 6 DSR 6 DSR +---- 4 RTS 7 RTS I bought a 6 wire flat cable. It was colored as indicated. Check that yours is the same before you trust me on this. Hardware handshaking issues. ============================ The driver can be compiled in two different ways. The default ("Specialix DTR/RTS pin is RTS" is off) the pin behaves as DTR when hardware handshaking is off. It behaves as the RTS hardware handshaking signal when hardware handshaking is selected. When you use this, you have to use the appropriate cable. The cable will either be compatible with hardware handshaking or with software handshaking. So switching on the fly is not really an option. I actually prefer to use the "Specialix DTR/RTS pin is RTS" option. This makes the DTR/RTS pin always an RTS pin, and ioctls to change DTR are always ignored. I have a cable that is configured for this. Ports and devices ================= Port 0 is the one furthest from the card-edge connector. Devices: You should make the devices as follows: bash cd /dev for i in 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \ 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 do echo -n "$i " mknod /dev/ttyW$i c 75 $i mknod /dev/cuw$i c 76 $i done echo "" If your system doesn't come with these devices preinstalled, bug your linux-vendor about this. They have had ample time to get this implemented by now. You cannot have more than 4 boards in one computer. The card only supports 4 different interrupts. If you really want this, contact me about this and I'll give you a few tips (requires soldering iron).... If you have enough PCI slots, you can probably use more than 4 PCI versions of the card though.... The PCI version of the card cannot adhere to the mechanical part of the PCI spec because the 8 serial connectors are simply too large. If it doesn't fit in your computer, bring back the card. ------------------------------------------------------------------------ Fixed bugs and restrictions: - During intialization, interrupts are blindly turned on. Having a shadow variable would cause an extra memory access on every IO instruction. - The interrupt (on the card) should be disabled when we don't allocate the Linux end of the interrupt. This allows a different driver/card to use it while all ports are not in use..... (a la standard serial port) == An extra _off variant of the sx_in and sx_out macros are now available. They don't set the interrupt enable bit. These are used during initialization. Normal operation uses the old variant which enables the interrupt line. - RTS/DTR issue needs to be implemented according to specialix' spec. I kind of like the "determinism" of the current implementation. Compile time flag? == Ok. Compile time flag! Default is how Specialix likes it. == Now a config time flag! Gets saved in your config file. Neat! - Can you set the IO address from the lilo command line? If you need this, bug me about it, I'll make it. == Hah! No bugging needed. Fixed! :-) - Cirrus logic hasn't gotten back to me yet why the CD1865 can and the CD1864 can't do 115k2. I suspect that this is because the CD1864 is not rated for 33MHz operation. Therefore the CD1864 versions of the card can't do 115k2 on all ports just like the CD1865 versions. The driver does not block 115k2 on CD1864 cards. == I called the Cirrus Logic representative here in Holland. The CD1864 databook is identical to the CD1865 databook, except for an extra warning at the end. Similar Bit errors have been observed in testing at 115k2 on both an 1865 and a 1864 chip. I see no reason why I would prohibit 115k2 on 1864 chips and not do it on 1865 chips. Actually there is reason to prohibit it on BOTH chips. I print a warning. If you use 115k2, you're on your own. - A spiky CD may send spurious HUPs. Also in CLOCAL??? -- A fix for this turned out to be counter productive. Different fix? Current behaviour is acceptable? -- Maybe the current implementation is correct. If anybody gets bitten by this, please report, and it will get fixed. -- Testing revealed that when in CLOCAL, the problem doesn't occur. As warned for in the CD1865 manual, the chip may send modem intr's on a spike. We could filter those out, but that would be a cludge anyway (You'd still risk getting a spurious HUP when two spikes occur.)..... Bugs & restrictions: - This is a difficult card to autoprobe. You have to WRITE to the address register to even read-probe a CD186x register. Disable autodetection? -- Specialix: any suggestions? - Arbitrary baud rates are not implemented yet. If you need this, bug me about it. On Fri, 2 Jan 1998, Doug Ledford wrote: > > I'm working on making the aic7xxx driver more SMP friendly (as well as > importing the latest FreeBSD sequencer code to have 7895 support) and wanted > to get some info from you. The goal here is to make the various routines > SMP safe as well as UP safe during interrupts and other manipulating > routines. So far, I've added a spin_lock variable to things like my queue > structs. Now, from what I recall, there are some spin lock functions I can > use to lock these spin locks from other use as opposed to a (nasty) > save_flags(); cli(); stuff; restore_flags(); construct. Where do I find > these routines and go about making use of them? Do they only lock on a > per-processor basis or can they also lock say an interrupt routine from > mucking with a queue if the queue routine was manipulating it when the > interrupt occurred, or should I still use a cli(); based construct on that > one? See . The basic version is: spinlock_t xxx_lock = SPIN_LOCK_UNLOCKED; unsigned long flags; spin_lock_irqsave(&xxx_lock, flags); ... critical section here .. spin_unlock_irqrestore(&xxx_lock, flags); and the above is always safe. It will disable interrupts _locally_, but the spinlock itself will guarantee the global lock, so it will guarantee that there is only one thread-of-control within the region(s) protected by that lock. Note that it works well even under UP - the above sequence under UP essentially is just the same as doing a unsigned long flags; save_flags(flags); cli(); ... critical section ... restore_flags(flags); so the code does _not_ need to worry about UP vs SMP issues: the spinlocks work correctly under both (and spinlocks are actually more efficient on architectures that allow doing the "save_flags + cli" in one go because I don't export that interface normally). NOTE NOTE NOTE! The reason the spinlock is so much faster than a global interrupt lock under SMP is exactly because it disables interrupts only on the local CPU. The spin-lock is safe only when you _also_ use the lock itself to do locking across CPU's, which implies that EVERYTHING that touches a shared variable has to agree about the spinlock they want to use. The above is usually pretty simple (you usually need and want only one spinlock for most things - using more than one spinlock can make things a lot more complex and even slower and is usually worth it only for sequences that you _know_ need to be split up: avoid it at all cost if you aren't sure). HOWEVER, it _does_ mean that if you have some code that does cli(); .. critical section .. sti(); and another sequence that does spin_lock_irqsave(flags); .. critical section .. spin_unlock_irqrestore(flags); then they are NOT mutually exclusive, and the critical regions can happen at the same time on two different CPU's. That's fine per se, but the critical regions had better be critical for different things (ie they can't stomp on each other). The above is a problem mainly if you end up mixing code - for example the routines in ll_rw_block() tend to use cli/sti to protect the atomicity of their actions, and if a driver uses spinlocks instead then you should think about issues like the above.. This is really the only really hard part about spinlocks: once you start using spinlocks they tend to expand to areas you might not have noticed before, because you have to make sure the spinlocks correctly protect the shared data structures _everywhere_ they are used. The spinlocks are most easily added to places that are completely independent of other code (ie internal driver data structures that nobody else ever touches, for example). ---- Lesson 2: reader-writer spinlocks. If your data accesses have a very natural pattern where you usually tend to mostly read from the shared variables, the reader-writer locks (rw_lock) versions of the spinlocks are often nicer. They allow multiple readers to be in the same critical region at once, but if somebody wants to change the variables it has to get an exclusive write lock. The routines look the same as above: rwlock_t xxx_lock = RW_LOCK_UNLOCKED; unsigned long flags; read_lock_irqsave(&xxx_lock, flags); .. critical section that only reads the info ... read_unlock_irqrestore(&xxx_lock, flags); write_lock_irqsave(&xxx_lock, flags); .. read and write exclusive access to the info ... write_unlock_irqrestore(&xxx_lock, flags); The above kind of lock is useful for complex data structures like linked lists etc, especially when you know that most of the work is to just traverse the list searching for entries without changing the list itself, for example. Then you can use the read lock for that kind of list traversal, which allows many concurrent readers. Anything that _changes_ the list will have to get the write lock. Note: you cannot "upgrade" a read-lock to a write-lock, so if you at _any_ time need to do any changes (even if you don't do it every time), you have to get the write-lock at the very beginning. I could fairly easily add a primitive to create a "upgradeable" read-lock, but it hasn't been an issue yet. Tell me if you'd want one. ---- Lesson 3: spinlocks revisited. The single spin-lock primitives above are by no means the only ones. They are the most safe ones, and the ones that work under all circumstances, but partly _because_ they are safe they are also fairly slow. They are much faster than a generic global cli/sti pair, but slower than they'd need to be, because they do have to disable interrupts (which is just a single instruction on a x86, but it's an expensive one - and on other architectures it can be worse). If you have a case where you have to protect a data structure across several CPU's and you want to use spinlocks you can potentially use cheaper versions of the spinlocks. IFF you know that the spinlocks are never used in interrupt handlers, you can use the non-irq versions: spin_lock(&lock); ... spin_unlock(&lock); (and the equivalent read-write versions too, of course). The spinlock will guarantee the same kind of exclusive access, and it will be much faster. This is useful if you know that the data in question is only ever manipulated from a "process context", ie no interrupts involved. The reasons you mustn't use these versions if you have interrupts that play with the spinlock is that you can get deadlocks: spin_lock(&lock); ... <- interrupt comes in: spin_lock(&lock); where an interrupt tries to lock an already locked variable. This is ok if the other interrupt happens on another CPU, but it is _not_ ok if the interrupt happens on the same CPU that already holds the lock, because the lock will obviously never be released (because the interrupt is waiting for the lock, and the lock-holder is interrupted by the interrupt and will not continue until the interrupt has been processed). (This is also the reason why the irq-versions of the spinlocks only need to disable the _local_ interrupts - it's ok to use spinlocks in interrupts on other CPU's, because an interrupt on another CPU doesn't interrupt the CPU that holds the lock, so the lock-holder can continue and eventually releases the lock). Note that you can be clever with read-write locks and interrupts. For example, if you know that the interrupt only ever gets a read-lock, then you can use a non-irq version of read locks everywhere - because they don't block on each other (and thus there is no dead-lock wrt interrupts. But when you do the write-lock, you have to use the irq-safe version. For an example of being clever with rw-locks, see the "waitqueue_lock" handling in kernel/sched.c - nothing ever _changes_ a wait-queue from within an interrupt, they only read the queue in order to know whom to wake up. So read-locks are safe (which is good: they are very common indeed), while write-locks need to protect themselves against interrupts. Linus Stallion Multiport Serial Driver Readme --------------------------------------- Copyright (C) 1994-1999, Stallion Technologies (support@stallion.com). Version: 5.5.1 Date: 28MAR99 1. INTRODUCTION There are two drivers that work with the different families of Stallion multiport serial boards. One is for the Stallion smart boards - that is EasyIO, EasyConnection 8/32 and EasyConnection 8/64-PCI, the other for the true Stallion intelligent multiport boards - EasyConnection 8/64 (ISA, EISA, MCA), EasyConnection/RA-PCI, ONboard and Brumby. If you are using any of the Stallion intelligent multiport boards (Brumby, ONboard, EasyConnection 8/64 (ISA, EISA, MCA), EasyConnection/RA-PCI) with Linux you will need to get the driver utility package. This package is available at most of the Linux archive sites (and on CD-ROMs that contain these archives). The file will be called stallion-X.X.X.tar.gz where X.X.X will be the version number. In particular this package contains the board embedded executable images that are required for these boards. It also contains the downloader program. These boards cannot be used without this. The Stallion Technologies ftp site, ftp.stallion.com, will always have the latest version of the driver utility package. Other sites that usually have the latest version are tsx-11.mit.edu, sunsite.unc.edu and their mirrors. ftp.stallion.com:/drivers/ata5/Linux/v550.tar.gz tsx-11.mit.edu:/pub/linux/packages/stallion/stallion-5.5.0.tar.gz sunsite.unc.edu:/pub/Linux/kernel/patches/serial/stallion-5.5.0.tar.gz As of the printing of this document the latest version of the driver utility package is 5.5.0. If a later version is now available then you should use the latest version. If you are using the EasyIO, EasyConnection 8/32 or EasyConnection 8/64-PCI boards then you don't need this package. Although it does have a handy script to create the /dev device nodes for these boards, and a serial stats display program. If you require DIP switch settings, EISA or MCA configuration files, or any other information related to Stallion boards then have a look at Stallion's web pages at http://www.stallion.com. 2. INSTALLATION The drivers can be used as loadable modules or compiled into the kernel. You can choose which when doing a "config" on the kernel. All ISA, EISA and MCA boards that you want to use need to be configured into the driver(s). All PCI boards will be automatically detected when you load the driver - so they do not need to be entered into the driver(s) configuration structure. Note that kernel PCI support is required to use PCI boards. There are two methods of configuring ISA, EISA and MCA boards into the drivers. If using the driver as a loadable module then the simplest method is to pass the driver configuration as module arguments. The other method is to modify the driver source to add configuration lines for each board in use. If you have pre-built Stallion driver modules then the module argument configuration method should be used. A lot of Linux distributions come with pre-built driver modules in /lib/modules/X.Y.Z/misc for the kernel in use. That makes things pretty simple to get going. 2.1 MODULE DRIVER CONFIGURATION: The simplest configuration for modules is to use the module load arguments to configure any ISA, EISA or MCA boards. PCI boards are automatically detected, so do not need any additional configuration at all. If using EasyIO, EasyConnection 8/32 ISA or MCA, or EasyConnection 8/63-PCI boards then use the "stallion" driver module, Otherwise if you are using an EasyConnection 8/64 ISA, EISA or MCA, EasyConnection/RA-PCI, ONboard, Brumby or original Stallion board then use the "istallion" driver module. Typically to load up the smart board driver use: insmod stallion.o This will load the EasyIO and EasyConnection 8/32 driver. It will output a message to say that it loaded and print the driver version number. It will also print out whether it found the configured boards or not. These messages may not appear on the console, but typically are always logged to /var/adm/messages or /var/log/syslog files - depending on how the klogd and syslogd daemons are setup on your system. To load the intelligent board driver use: insmod istallion.o It will output similar messages to the smart board driver. If not using an auto-detectable board type (that is a PCI board) then you will also need to supply command line arguments to the "insmod" command when loading the driver. The general form of the configuration argument is board?=[,[,][,]] where: board? -- specifies the arbitrary board number of this board, can be in the range 0 to 3. name -- textual name of this board. The board name is the comman board name, or any "shortened" version of that. The board type number may also be used here. ioaddr -- specifies the I/O address of this board. This argument is optional, but should generally be specified. addr -- optional second address argument. Some board types require a second I/O address, some require a memory address. The exact meaning of this argument depends on the board type. irq -- optional IRQ line used by this board. Up to 4 board configuration arguments can be specified on the load line. Here is some examples: insmod stallion.o board0=easyio,0x2a0,5 This configures an EasyIO board as board 0 at I/O address 0x2a0 and IRQ 5. insmod istallion.o board3=ec8/64,0x2c0,0xcc000 This configures an EasyConnection 8/64 ISA as board 3 at I/O address 0x2c0 at memory address 0xcc000. insmod stallion.o board1=ec8/32-at,0x2a0,0x280,10 This configures an EasyConnection 8/32 ISA board at primary I/O address 0x2a0, secondary address 0x280 and IRQ 10. You will probably want to enter this module load and configuration information into your system startup scripts so that the drivers are loaded and configured on each system boot. Typically the start up script would be something line /etc/rc.d/rc.modules. 2.2 STATIC DRIVER CONFIGURATION: For static driver configuration you need to modify the driver source code. Entering ISA, EISA and MCA boards into the driver(s) configuration structure involves editing the driver(s) source file. It's pretty easy if you follow the instructions below. Both drivers can support up to 4 boards. The smart card driver (the stallion.c driver) supports any combination of EasyIO and EasyConnection 8/32 boards (up to a total of 4). The intelligent driver supports any combination of ONboards, Brumbys, Stallions and EasyConnection 8/64 (ISA and EISA) boards (up to a total of 4). To set up the driver(s) for the boards that you want to use you need to edit the appropriate driver file and add configuration entries. If using EasyIO or EasyConnection 8/32 ISA or MCA boards, do: vi /usr/src/linux/drivers/char/stallion.c - find the definition of the stl_brdconf array (of structures) near the top of the file - modify this to match the boards you are going to install (the comments before this structure should help) - save and exit If using ONboard, Brumby, Stallion or EasyConnection 8/64 (ISA or EISA) boards then do: vi /usr/src/linux/drivers/char/istallion.c - find the definition of the stli_brdconf array (of structures) near the top of the file - modify this to match the boards you are going to install (the comments before this structure should help) - save and exit Once you have set up the board configurations then you are ready to build the kernel or modules. When the new kernel is booted, or the loadable module loaded then the driver will emit some kernel trace messages about whether the configured boards were detected or not. Depending on how your system logger is set up these may come out on the console, or just be logged to /var/adm/messages or /var/log/syslog. You should check the messages to confirm that all is well. 2.3 SHARING INTERRUPTS It is possible to share interrupts between multiple EasyIO and EasyConnection 8/32 boards in an EISA system. To do this you must be using static driver configuration, modifying the driver source code to add driver configuration. Then a couple of extra things are required: 1. When entering the board resources into the stallion.c file you need to mark the boards as using level triggered interrupts. Do this by replacing the "0" entry at field position 6 (the last field) in the board configuration structure with a "1". (This is the structure that defines the board type, I/O locations, etc. for each board). All boards that are sharing an interrupt must be set this way, and each board should have the same interrupt number specified here as well. Now build the module or kernel as you would normally. 2. When physically installing the boards into the system you must enter the system EISA configuration utility. You will need to install the EISA configuration files for *all* the EasyIO and EasyConnection 8/32 boards that are sharing interrupts. The Stallion EasyIO and EasyConnection 8/32 EISA configuration files required are supplied by Stallion Technologies on the EASY Utilities floppy diskette (usually supplied in the box with the board when purchased. If not, you can pick it up from Stallion's FTP site, ftp.stallion.com). You will need to edit the board resources to choose level triggered interrupts, and make sure to set each board's interrupt to the same IRQ number. You must complete both the above steps for this to work. When you reboot or load the driver your EasyIO and EasyConnection 8/32 boards will be sharing interrupts. 2.4 USING HIGH SHARED MEMORY The EasyConnection 8/64-EI, ONboard and Stallion boards are capable of using shared memory addresses above the usual 640K - 1Mb range. The ONboard ISA and the Stallion boards can be programmed to use memory addresses up to 16Mb (the ISA bus addressing limit), and the EasyConnection 8/64-EI and ONboard/E can be programmed for memory addresses up to 4Gb (the EISA bus addressing limit). The higher than 1Mb memory addresses are fully supported by this driver. Just enter the address as you normally would for a lower than 1Mb address (in the driver's board configuration structure). 2.5 TROUBLE SHOOTING If a board is not found by the driver but is actually in the system then the most likely problem is that the I/O address is wrong. Change the module load argument for the loadable module form. Or change it in the driver stallion.c or istallion.c configuration structure and rebuild the kernel or modules, or change it on the board. On EasyIO and EasyConnection 8/32 boards the IRQ is software programmable, so if there is a conflict you may need to change the IRQ used for a board. There are no interrupts to worry about for ONboard, Brumby or EasyConnection 8/64 (ISA, EISA and MCA) boards. The memory region on EasyConnection 8/64 and ONboard boards is software programmable, but not on the Brumby boards. 3. USING THE DRIVERS 3.1 INTELLIGENT DRIVER OPERATION The intelligent boards also need to have their "firmware" code downloaded to them. This is done via a user level application supplied in the driver utility package called "stlload". Compile this program wherever you dropped the package files, by typing "make". In its simplest form you can then type ./stlload -i cdk.sys in this directory and that will download board 0 (assuming board 0 is an EasyConnection 8/64 or EasyConnection/RA board). To download to an ONboard, Brumby or Stallion do: ./stlload -i 2681.sys Normally you would want all boards to be downloaded as part of the standard system startup. To achieve this, add one of the lines above into the /etc/rc.d/rc.S or /etc/rc.d/rc.serial file. To download each board just add the "-b " option to the line. You will need to download code for every board. You should probably move the stlload program into a system directory, such as /usr/sbin. Also, the default location of the cdk.sys image file in the stlload down-loader is /usr/lib/stallion. Create that directory and put the cdk.sys and 2681.sys files in it. (It's a convenient place to put them anyway). As an example your /etc/rc.d/rc.S file might have the following lines added to it (if you had 3 boards): /usr/sbin/stlload -b 0 -i /usr/lib/stallion/cdk.sys /usr/sbin/stlload -b 1 -i /usr/lib/stallion/2681.sys /usr/sbin/stlload -b 2 -i /usr/lib/stallion/2681.sys The image files cdk.sys and 2681.sys are specific to the board types. The cdk.sys will only function correctly on an EasyConnection 8/64 board. Similarly the 2681.sys image fill only operate on ONboard, Brumby and Stallion boards. If you load the wrong image file into a board it will fail to start up, and of course the ports will not be operational! If you are using the modularized version of the driver you might want to put the insmod calls in the startup script as well (before the download lines obviously). 3.2 USING THE SERIAL PORTS Once the driver is installed you will need to setup some device nodes to access the serial ports. The simplest method is to use the stallion utility "mkdevnods" script. It will automatically create device entries for Stallion boards. This will create the normal serial port devices as /dev/ttyE# where # is the port number starting from 0. A bank of 64 minor device numbers is allocated to each board, so the first port on the second board is port 64, etc. A set of callout type devices is also created. They are created as the devices /dev/cue# where # is the same as for the ttyE devices. For the most part the Stallion driver tries to emulate the standard PC system COM ports and the standard Linux serial driver. The idea is that you should be able to use Stallion board ports and COM ports interchangeably without modifying anything but the device name. Anything that doesn't work like that should be considered a bug in this driver! If you look at the driver code you will notice that it is fairly closely based on the Linux serial driver (linux/drivers/char/serial.c). This is intentional, obviously this is the easiest way to emulate its behavior! Since this driver tries to emulate the standard serial ports as much as possible, most system utilities should work as they do for the standard COM ports. Most importantly "stty" works as expected and "setserial" can also be used (excepting the ability to auto-configure the I/O and IRQ addresses of boards). Higher baud rates are supported in the usual fashion through setserial or using the CBAUDEX extensions. Note that the EasyIO and EasyConnection (all types) support at least 57600 and 115200 baud. The newer EasyConnection XP modules and new EasyIO boards support 230400 and 460800 baud as well. The older boards including ONboard and Brumby support a maximum baud rate of 38400. If you are unfamiliar with how to use serial ports, then get the Serial-HOWTO by Greg Hankins. It will explain everything you need to know! 4. NOTES You can use both drivers at once if you have a mix of board types installed in a system. However to do this you will need to change the major numbers used by one of the drivers. Currently both drivers use major numbers 24, 25 and 28 for their devices. Change one driver to use some other major numbers, and then modify the mkdevnods script to make device nodes based on those new major numbers. For example, you could change the istallion.c driver to use major numbers 60, 61 and 62. You will also need to create device nodes with different names for the ports, for example ttyF# and cuf#. The original Stallion board is no longer supported by Stallion Technologies. Although it is known to work with the istallion driver. Finding a free physical memory address range can be a problem. The older boards like the Stallion and ONboard need large areas (64K or even 128K), so they can be very difficult to get into a system. If you have 16 Mb of RAM then you have no choice but to put them somewhere in the 640K -> 1Mb range. ONboards require 64K, so typically 0xd0000 is good, or 0xe0000 on some systems. If you have an original Stallion board, "V4.0" or Rev.O, then you need a 64K memory address space, so again 0xd0000 and 0xe0000 are good. Older Stallion boards are a much bigger problem. They need 128K of address space and must be on a 128K boundary. If you don't have a VGA card then 0xc0000 might be usable - there is really no other place you can put them below 1Mb. Both the ONboard and old Stallion boards can use higher memory addresses as well, but you must have less than 16Mb of RAM to be able to use them. Usual high memory addresses used include 0xec0000 and 0xf00000. The Brumby boards only require 16Kb of address space, so you can usually squeeze them in somewhere. Common addresses are 0xc8000, 0xcc000, or in the 0xd0000 range. EasyConnection 8/64 boards are even better, they only require 4Kb of address space, again usually 0xc8000, 0xcc000 or 0xd0000 are good. If you are using an EasyConnection 8/64-EI or ONboard/E then usually the 0xd0000 or 0xe0000 ranges are the best options below 1Mb. If neither of them can be used then the high memory support to use the really high address ranges is the best option. Typically the 2Gb range is convenient for them, and gets them well out of the way. The ports of the EasyIO-8M board do not have DCD or DTR signals. So these ports cannot be used as real modem devices. Generally, when using these ports you should only use the cueX devices. The driver utility package contains a couple of very useful programs. One is a serial port statistics collection and display program - very handy for solving serial port problems. The other is an extended option setting program that works with the intelligent boards. 5. DISCLAIMER The information contained in this document is believed to be accurate and reliable. However, no responsibility is assumed by Stallion Technologies Pty. Ltd. for its use, nor any infringements of patents or other rights of third parties resulting from its use. Stallion Technologies reserves the right to modify the design of its products and will endeavour to change the information in manuals and accompanying documentation accordingly. Submitting Drivers For The Linux Kernel --------------------------------------- This document is intended to explain how to submit device drivers to the Linux 2.2, 2.4 and 2.5 kernel trees. Note that if you are interested in video card drivers you should probably talk to XFree86 (http://wwww.xfree86.org) instead. Allocating Device Numbers ------------------------- Major and minor numbers for devices are allocated by the Linux assigned name and number authority (currently better known as H Peter Anvin). The site is http://www.lanana.org/. This also deals with allocating numbers for devices that are not going to be submitted to the mainstream kernel. If you don't use assigned numbers then when you device is submitted it will get given an assigned number even if that is different from values you may have shipped to customers before. Who To Submit Drivers To ------------------------ Linux 2.0: No new drivers are accepted for this kernel tree. If you have any security or other fixes then please contact David Weinehall Linux 2.2: If the code area has a general maintainer then please submit it to the maintainer listed in MAINTAINERS in the kernel file. If the maintainer does not respond or you cannot find the appropriate maintainer then please contact Alan Cox . Linux 2.4: If the code area has a general maintainer then please submit it to the maintainer listed in MAINTAINERS in the kernel file. If the maintainer does not respond or you cannot find the appropriate maintainer then please contact Marcelo Tosatti . Linux 2.5: This kernel tree is under active development. The same rules apply as 2.4 but you may wish to submit your driver via linux-kernel (see resources) and follow that list to track changes in API's. The final contact point for Linux 2.5 submissions is . What Criteria Determine Acceptance ---------------------------------- Licensing: The code must be released to us under the GNU General Public License. We don't insist on any kind of exclusively GPL licensing, and if you wish the driver to be useful to other communities such as BSD you may well wish to release under multiple licenses. Interfaces: If your driver uses existing interfaces and behaves like other drivers in the same class it will be much more likely to be accepted than if it invents gratuitous new ones. If you need to implement a common API over Linux and NT drivers do it in userspace. Code: Please use the Linux style of code formatting as documented in Documentation/CodingStyle. If you have sections of code that need to be in other formats, for example because they are shared with a windows driver kit and you want to maintain them just once seperate them out nicely and note this fact. Portability: Pointers are not always 32bits, people do not all have floating point and you shouldn't use inline x86 assembler in your driver without careful thought. Pure x86 drivers generally are not popular. If you only have x86 hardware it is hard to test portability but it is easy to make sure the code can easily be made portable. Clarity: It helps if anyone can see how to fix the driver. It helps you because you get patches not bug reports. If you submit a driver that intentionally obfuscates how the hardware works it will go in the bitbucket. Control: In general if there is active maintainance of a driver by the author then patches will be redirected to them unless they are totally obvious and without need of checking. If you want to be the contact and update point for the driver it is a good idea to state this in the comments. What Criteria Do Not Determine Acceptance ----------------------------------------- Vendor: Being the hardware vendor and maintaining the driver is often a good thing. If there is a stable working driver from other people already in the tree don't expect 'we are the vendor' to get your driver chosen. Ideally work with the existing driver author to build a single perfect driver. Author: It doesn't matter if a large Linux company wrote the driver, or you did. Nobody has any special access to the kernel tree. Anyone who tells you otherwise isn't telling the whole story. Resources --------- Linux kernel master tree: ftp.kernel.org:/pub/linux/kernel/... Linux kernel mailing list: linux-kernel@vger.kernel.org [mail majordomo@vger.kernel.org to subscribe] Kernel traffic: Weekly summary of kernel list activity (much easier to read) [http://kt.zork.net/kernel-traffic] Linux USB project: http://sourceforge.net/projects/linux-usb/ Video Mode Selection Support 2.13 (c) 1995--1999 Martin Mares, -------------------------------------------------------------------------------- 1. Intro ~~~~~~~~ This small document describes the "Video Mode Selection" feature which allows the use of various special video modes supported by the video BIOS. Due to usage of the BIOS, the selection is limited to boot time (before the kernel decompression starts) and works only on 80X86 machines. ** Short intro for the impatient: Just use vga=ask for the first time, ** enter `scan' on the video mode prompt, pick the mode you want to use, ** remember its mode ID (the four-digit hexadecimal number) and then ** set the vga parameter to this number (converted to decimal first). The video mode to be used is selected by a kernel parameter which can be specified in the kernel Makefile (the SVGA_MODE=... line) or by the "vga=..." option of LILO (or some other boot loader you use) or by the "vidmode" utility (present in standard Linux utility packages). You can use the following values of this parameter: NORMAL_VGA - Standard 80x25 mode available on all display adapters. EXTENDED_VGA - Standard 8-pixel font mode: 80x43 on EGA, 80x50 on VGA. ASK_VGA - Display a video mode menu upon startup (see below). 0..35 - Menu item number (when you have used the menu to view the list of modes available on your adapter, you can specify the menu item you want to use). 0..9 correspond to "0".."9", 10..35 to "a".."z". Warning: the mode list displayed may vary as the kernel version changes, because the modes are listed in a "first detected -- first displayed" manner. It's better to use absolute mode numbers instead. 0x.... - Hexadecimal video mode ID (also displayed on the menu, see below for exact meaning of the ID). Warning: rdev and LILO don't support hexadecimal numbers -- you have to convert it to decimal manually. 2. Menu ~~~~~~~ The ASK_VGA mode causes the kernel to offer a video mode menu upon bootup. It displays a "Press to see video modes available, to continue or wait 30 secs" message. If you press , you enter the menu, if you press or wait 30 seconds, the kernel will boot up in the standard 80x25 mode. The menu looks like: Video adapter: Mode: COLSxROWS: 0 0F00 80x25 1 0F01 80x50 2 0F02 80x43 3 0F03 80x26 .... Enter mode number or `scan': tells what video adapter did Linux detect -- it's either a generic adapter name (MDA, CGA, HGC, EGA, VGA, VESA VGA [a VGA with VESA-compliant BIOS]) or a chipset name (e.g., Trident). Direct detection of chipsets is turned off by default (see CONFIG_VIDEO_SVGA in chapter 4 to see how to enable it if you really want) as it's inherently unreliable due to absolutely insane PC design. "0 0F00 80x25" means that the first menu item (the menu items are numbered from "0" to "9" and from "a" to "z") is a 80x25 mode with ID=0x0f00 (see the next section for a description of mode IDs). encourages you to enter the item number or mode ID you wish to set and press . If the computer complains something about "Unknown mode ID", it is trying to tell you that it isn't possible to set such a mode. It's also possible to press only which leaves the current mode. The mode list usually contains a few basic modes and some VESA modes. In case your chipset has been detected, some chipset-specific modes are shown as well (some of these might be missing or unusable on your machine as different BIOSes are often shipped with the same card and the mode numbers depend purely on the VGA BIOS). The modes displayed on the menu are partially sorted: The list starts with the standard modes (80x25 and 80x50) followed by "special" modes (80x28 and 80x43), local modes (if the local modes feature is enabled), VESA modes and finally SVGA modes for the auto-detected adapter. If you are not happy with the mode list offered (e.g., if you think your card is able to do more), you can enter "scan" instead of item number / mode ID. The program will try to ask the BIOS for all possible video mode numbers and test what happens then. The screen will be probably flashing wildly for some time and strange noises will be heard from inside the monitor and so on and then, really all consistent video modes supported by your BIOS will appear (plus maybe some `ghost modes'). If you are afraid this could damage your monitor, don't use this function. After scanning, the mode ordering is a bit different: the auto-detected SVGA modes are not listed at all and the modes revealed by `scan' are shown before all VESA modes. 3. Mode IDs ~~~~~~~~~~~ Because of the complexity of all the video stuff, the video mode IDs used here are also a bit complex. A video mode ID is a 16-bit number usually expressed in a hexadecimal notation (starting with "0x"). You can set a mode by entering its mode directly if you know it even if it isn't shown on the menu. The ID numbers can be divided to three regions: 0x0000 to 0x00ff - menu item references. 0x0000 is the first item. Don't use outside the menu as this can change from boot to boot (especially if you have used the `scan' feature). 0x0100 to 0x017f - standard BIOS modes. The ID is a BIOS video mode number (as presented to INT 10, function 00) increased by 0x0100. 0x0200 to 0x08ff - VESA BIOS modes. The ID is a VESA mode ID increased by 0x0100. All VESA modes should be autodetected and shown on the menu. 0x0900 to 0x09ff - Video7 special modes. Set by calling INT 0x10, AX=0x6f05. (Usually 940=80x43, 941=132x25, 942=132x44, 943=80x60, 944=100x60, 945=132x28 for the standard Video7 BIOS) 0x0f00 to 0x0fff - special modes (they are set by various tricks -- usually by modifying one of the standard modes). Currently available: 0x0f00 standard 80x25, don't reset mode if already set (=FFFF) 0x0f01 standard with 8-point font: 80x43 on EGA, 80x50 on VGA 0x0f02 VGA 80x43 (VGA switched to 350 scanlines with a 8-point font) 0x0f03 VGA 80x28 (standard VGA scans, but 14-point font) 0x0f04 leave current video mode 0x0f05 VGA 80x30 (480 scans, 16-point font) 0x0f06 VGA 80x34 (480 scans, 14-point font) 0x0f07 VGA 80x60 (480 scans, 8-point font) 0x0f08 Graphics hack (see the CONFIG_VIDEO_HACK paragraph below) 0x1000 to 0x7fff - modes specified by resolution. The code has a "0xRRCC" form where RR is a number of rows and CC is a number of columns. E.g., 0x1950 corresponds to a 80x25 mode, 0x2b84 to 132x43 etc. This is the only fully portable way to refer to a non-standard mode, but it relies on the mode being found and displayed on the menu (remember that mode scanning is not done automatically). 0xff00 to 0xffff - aliases for backward compatibility: 0xffff equivalent to 0x0f00 (standard 80x25) 0xfffe equivalent to 0x0f01 (EGA 80x43 or VGA 80x50) If you add 0x8000 to the mode ID, the program will try to recalculate vertical display timing according to mode parameters, which can be used to eliminate some annoying bugs of certain VGA BIOSes (usually those used for cards with S3 chipsets and old Cirrus Logic BIOSes) -- mainly extra lines at the end of the display. 4. Options ~~~~~~~~~~ Some options can be set in the source text (in arch/i386/boot/video.S). All of them are simple #define's -- change them to #undef's when you want to switch them off. Currently supported: CONFIG_VIDEO_SVGA - enables autodetection of SVGA cards. This is switched off by default as it's a bit unreliable due to terribly bad PC design. If you really want to have the adapter autodetected (maybe in case the `scan' feature doesn't work on your machine), switch this on and don't cry if the results are not completely sane. In case you really need this feature, please drop me a mail as I think of removing it some day. CONFIG_VIDEO_VESA - enables autodetection of VESA modes. If it doesn't work on your machine (or displays a "Error: Scanning of VESA modes failed" message), you can switch it off and report as a bug. CONFIG_VIDEO_COMPACT - enables compacting of the video mode list. If there are more modes with the same screen size, only the first one is kept (see above for more info on mode ordering). However, in very strange cases it's possible that the first "version" of the mode doesn't work although some of the others do -- in this case turn this switch off to see the rest. CONFIG_VIDEO_RETAIN - enables retaining of screen contents when switching video modes. Works only with some boot loaders which leave enough room for the buffer. (If you have old LILO, you can adjust heap_end_ptr and loadflags in setup.S, but it's better to upgrade the boot loader...) CONFIG_VIDEO_LOCAL - enables inclusion of "local modes" in the list. The local modes are added automatically to the beginning of the list not depending on hardware configuration. The local modes are listed in the source text after the "local_mode_table:" line. The comment before this line describes the format of the table (which also includes a video card name to be displayed on the top of the menu). CONFIG_VIDEO_400_HACK - force setting of 400 scan lines for standard VGA modes. This option is intended to be used on certain buggy BIOSes which draw some useless logo using font download and then fail to reset the correct mode. Don't use unless needed as it forces resetting the video card. CONFIG_VIDEO_GFX_HACK - includes special hack for setting of graphics modes to be used later by special drivers (e.g., 800x600 on IBM ThinkPad -- see ftp://ftp.phys.keio.ac.jp/pub/XFree86/800x600/XF86Configs/XF86Config.IBM_TP560). Allows to set _any_ BIOS mode including graphic ones and forcing specific text screen resolution instead of peeking it from BIOS variables. Don't use unless you think you know what you're doing. To activate this setup, use mode number 0x0f08 (see section 3). 5. Still doesn't work? ~~~~~~~~~~~~~~~~~~~~~~ When the mode detection doesn't work (e.g., the mode list is incorrect or the machine hangs instead of displaying the menu), try to switch off some of the configuration options listed in section 4. If it fails, you can still use your kernel with the video mode set directly via the kernel parameter. In either case, please send me a bug report containing what _exactly_ happens and how do the configuration switches affect the behaviour of the bug. If you start Linux from M$-DOS, you might also use some DOS tools for video mode setting. In this case, you must specify the 0x0f04 mode ("leave current settings") to Linux, because if you don't and you use any non-standard mode, Linux will switch to 80x25 automatically. If you set some extended mode and there's one or more extra lines on the bottom of the display containing already scrolled-out text, your VGA BIOS contains the most common video BIOS bug called "incorrect vertical display end setting". Adding 0x8000 to the mode ID might fix the problem. Unfortunately, this must be done manually -- no autodetection mechanisms are available. If you have a VGA card and your display still looks as on EGA, your BIOS is probably broken and you need to set the CONFIG_VIDEO_400_HACK switch to force setting of the correct mode. 6. History ~~~~~~~~~~ 1.0 (??-Nov-95) First version supporting all adapters supported by the old setup.S + Cirrus Logic 54XX. Present in some 1.3.4? kernels and then removed due to instability on some machines. 2.0 (28-Jan-96) Rewritten from scratch. Cirrus Logic 64XX support added, almost everything is configurable, the VESA support should be much more stable, explicit mode numbering allowed, "scan" implemented etc. 2.1 (30-Jan-96) VESA modes moved to 0x200-0x3ff. Mode selection by resolution supported. Few bugs fixed. VESA modes are listed prior to modes supplied by SVGA autodetection as they are more reliable. CLGD autodetect works better. Doesn't depend on 80x25 being active when started. Scanning fixed. 80x43 (any VGA) added. Code cleaned up. 2.2 (01-Feb-96) EGA 80x43 fixed. VESA extended to 0x200-0x4ff (non-standard 02XX VESA modes work now). Display end bug workaround supported. Special modes renumbered to allow adding of the "recalculate" flag, 0xffff and 0xfffe became aliases instead of real IDs. Screen contents retained during mode changes. 2.3 (15-Mar-96) Changed to work with 1.3.74 kernel. 2.4 (18-Mar-96) Added patches by Hans Lermen fixing a memory overwrite problem with some boot loaders. Memory management rewritten to reflect these changes. Unfortunately, screen contents retaining works only with some loaders now. Added a Tseng 132x60 mode. 2.5 (19-Mar-96) Fixed a VESA mode scanning bug introduced in 2.4. 2.6 (25-Mar-96) Some VESA BIOS errors not reported -- it fixes error reports on several cards with broken VESA code (e.g., ATI VGA). 2.7 (09-Apr-96) - Accepted all VESA modes in range 0x100 to 0x7ff, because some cards use very strange mode numbers. - Added Realtek VGA modes (thanks to Gonzalo Tornaria). - Hardware testing order slightly changed, tests based on ROM contents done as first. - Added support for special Video7 mode switching functions (thanks to Tom Vander Aa). - Added 480-scanline modes (especially useful for notebooks, original version written by hhanemaa@cs.ruu.nl, patched by Jeff Chua, rewritten by me). - Screen store/restore fixed. 2.8 (14-Apr-96) - Previous release was not compilable without CONFIG_VIDEO_SVGA. - Better recognition of text modes during mode scan. 2.9 (12-May-96) - Ignored VESA modes 0x80 - 0xff (more VESA BIOS bugs!) 2.10 (11-Nov-96)- The whole thing made optional. - Added the CONFIG_VIDEO_400_HACK switch. - Added the CONFIG_VIDEO_GFX_HACK switch. - Code cleanup. 2.11 (03-May-97)- Yet another cleanup, now including also the documentation. - Direct testing of SVGA adapters turned off by default, `scan' offered explicitly on the prompt line. - Removed the doc section describing adding of new probing functions as I try to get rid of _all_ hardware probing here. 2.12 (25-May-98)- Added support for VESA frame buffer graphics. 2.13 (14-May-99)- Minor documentation fixes. sx.txt -- specialix SX/SI multiport serial driver readme. Copyright (C) 1997 Roger Wolff (R.E.Wolff@BitWizard.nl) Specialix pays for the development and support of this driver. Please DO contact support@specialix.co.uk if you require support. This driver was developed in the BitWizard linux device driver service. If you require a linux device driver for your product, please contact devices@BitWizard.nl for a quote. (History) There used to be an SI driver by Simon Allan. This is a complete rewrite from scratch. Just a few lines-of-code have been snatched. (Sources) Specialix document number 6210028: SX Host Card and Download Code Software Functional Specification. (Copying) 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., 675 Mass Ave, Cambridge, MA 02139, USA. (Addendum) I'd appreciate it that if you have fixes, that you send them to me first. Introduction ============ This file contains some random information, that I like to have online instead of in a manual that can get lost. Ever misplace your Linux kernel sources? And the manual of one of the boards in your computer? Theory of operation =================== An important thing to know is that the driver itself doesn't have the firmware for the card. This means that you need the separate package "sx_firmware". For now you can get the source at ftp://ftp.bitwizard.nl/specialix/sx_firmware_.tgz The firmware load needs a "misc" device, so you'll need to enable the "Support for user misc device modules" in your kernel configuration. The misc device needs to be called "/dev/specialix_sxctl". It needs misc major 10, and minor number 167 (assigned by HPA). The section on creating device files below also creates this device. After loading the sx.o module into your kernel, the driver will report the number of cards detected, but because it doesn't have any firmware, it will not be able to determine the number of ports. Only when you then run "sx_firmware" will the firmware be downloaded and the rest of the driver initialized. At that time the sx_firmware program will report the number of ports installed. In contrast with many other multi port serial cards, some of the data structures are only allocated when the card knows the number of ports that are connected. This means we won't waste memory for 120 port descriptor structures when you only have 8 ports. If you experience problems due to this, please report them: I haven't seen any. Interrupts ========== A multi port serial card, would generate a horrendous amount of interrupts if it would interrupt the CPU for every received character. Even more than 10 years ago, the trick not to use interrupts but to poll the serial cards was invented. The SX card allow us to do this two ways. First the card limits its own interrupt rate to a rate that won't overwhelm the CPU. Secondly, we could forget about the cards interrupt completely and use the internal timer for this purpose. Polling the card can take up to a few percent of your CPU. Using the interrupts would be better if you have most of the ports idle. Using timer-based polling is better if your card almost always has work to do. You save the separate interrupt in that case. In any case, it doesn't really matter all that much. The most common problem with interrupts is that for ISA cards in a PCI system the BIOS has to be told to configure that interrupt as "legacy ISA". Otherwise the card can pull on the interrupt line all it wants but the CPU won't see this. If you can't get the interrupt to work, remember that polling mode is more efficient (provided you actually use the card intensively). Allowed Configurations ====================== Some configurations are disallowed. Even though at a glance they might seem to work, they are known to lockup the bus between the host card and the device concentrators. You should respect the drivers decision not to support certain configurations. It's there for a reason. Warning: Seriously technical stuff ahead. Executive summary: Don't use SX cards except configured at a 64k boundary. Skip the next paragraph. The SX cards can theoretically be placed at a 32k boundary. So for instance you can put an SX card at 0xc8000-0xd7fff. This is not a "recommended configuration". ISA cards have to tell the bus controller how they like their timing. Due to timing issues they have to do this based on which 64k window the address falls into. This means that the 32k window below and above the SX card have to use exactly the same timing as the SX card. That reportedly works for other SX cards. But you're still left with two useless 32k windows that should not be used by anybody else. Configuring the driver ====================== PCI cards are always detected. The driver auto-probes for ISA cards at some sensible addresses. Please report if the auto-probe causes trouble in your system, or when a card isn't detected. I'm afraid I haven't implemented "kernel command line parameters" yet. This means that if the default doesn't work for you, you shouldn't use the compiled-into-the-kernel version of the driver. Use a module instead. If you convince me that you need this, I'll make it for you. Deal? I'm afraid that the module parameters are a bit clumsy. If you have a better idea, please tell me. You can specify several parameters: sx_poll: number of jiffies between timer-based polls. Set this to "0" to disable timer based polls. Initialization of cards without a working interrupt will fail. Set this to "1" if you want a polling driver. (on Intel: 100 polls per second). If you don't use fast baud rates, you might consider a value like "5". (If you don't know how to do the math, use 1). sx_slowpoll: Number of jiffies between timer-based polls. Set this to "100" to poll once a second. This should get the card out of a stall if the driver ever misses an interrupt. I've never seen this happen, and if it does, that's a bug. Tell me. sx_maxints: Number of interrupts to request from the card. The card normally limits interrupts to about 100 per second to offload the host CPU. You can increase this number to reduce latency on the card a little. Note that if you give a very high number you can overload your CPU as well as the CPU on the host card. This setting is inaccurate and not recommended for SI cards (But it works). sx_irqmask: The mask of allowable IRQs to use. I suggest you set this to 0 (disable IRQs all together) and use polling if the assignment of IRQs becomes problematic. sx_debug: You can enable different sorts of debug traces with this. At "-1" all debugging traces are active. You'll get several times more debugging output than you'll get characters transmitted. Baud rates ========== Theoretically new SXDCs should be capable of more than 460k baud. However the line drivers usually give up before that. Also the CPU on the card may not be able to handle 8 channels going at full blast at that speed. Moreover, the buffers are not large enough to allow operation with 100 interrupts per second. You'll have to realize that the card has a 256 byte buffer, so you'll have to increase the number of interrupts per second if you have more than 256*100 bytes per second to transmit. If you do any performance testing in this area, I'd be glad to hear from you... (Psst Linux users..... I think the Linux driver is more efficient than the driver for other OSes. If you can and want to benchmark them against each other, be my guest, and report your findings...... :-) Ports and devices ================= Port 0 is the top connector on the module closest to the host card. Oh, the ports on the SXDCs and TAs are labelled from 1 to 8 instead of from 0 to 7, as they are numbered by linux. I'm stubborn in this: I know for sure that I wouldn't be able to calculate which port is which anymore if I would change that.... Devices: You should make the device files as follows: #!/bin/sh # (I recommend that you cut-and-paste this into a file and run that) cd /dev t=0 mknod specialix_sxctl c 10 167 while [ $t -lt 64 ] do echo -n "$t " mknod ttyX$t c 32 $t mknod cux$t c 33 $t t=`expr $t + 1` done echo "" rm /etc/psdevtab ps > /dev/null This creates 64 devices. If you have more, increase the constant on the line with "while". The devices start at 0, as is customary on Linux. Specialix seems to like starting the numbering at 1. If your system doesn't come with these devices pre-installed, bug your linux-vendor about this. They should have these devices "pre-installed" before the new millennium. The "ps" stuff at the end is to "tell" ps that the new devices exist. Officially the maximum number of cards per computer is 4. This driver however supports as many cards in one machine as you want. You'll run out of interrupts after a few, but you can switch to polled operation then. At about 256 ports (More than 8 cards), we run out of minor device numbers. Sorry. I suggest you buy a second computer.... (Or switch to RIO). ------------------------------------------------------------------------ Fixed bugs and restrictions: - Hangup processing. -- Done. - the write path in generic_serial (lockup / oops). -- Done (Ugly: not the way I want it. Copied from serial.c). - write buffer isn't flushed at close. -- Done. I still seem to loose a few chars at close. Sorry. I think that this is a firmware issue. (-> Specialix) - drain hardware before changing termios - Change debug on the fly. - ISA free irq -1. (no firmware loaded). - adding c8000 as a probe address. Added warning. - Add a RAMtest for the RAM on the card.c - Crash when opening a port "way" of the number of allowed ports. (for example opening port 60 when there are only 24 ports attached) - Sometimes the use-count strays a bit. After a few hours of testing the use count is sometimes "3". If you are not like me and can remember what you did to get it that way, I'd appreciate an Email. Possibly fixed. Tell me if anyone still sees this. - TAs don't work right if you don't connect all the modem control signals. SXDCs do. T225 firmware problem -> Specialix. (Mostly fixed now, I think. Tell me if you encounter this!) Bugs & restrictions: - Arbitrary baud rates. Requires firmware update. (-> Specialix) - Low latency (mostly firmware, -> Specialix) MAGIC SYSRQ KEY DOCUMENTATION v1.2 ------------------------------------ [Sat May 16 01:09:21 EDT 1998] * What is the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ It is a 'magical' key combo you can hit which kernel will respond to regardless of whatever else it is doing, unless it is completely locked up. * How do I enable the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You need to say "yes" to 'Magic SysRq key (CONFIG_MAGIC_SYSRQ)' when configuring the kernel. This option is only available in 2.1.x or later kernels. * How do I use the magic SysRQ key? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ On x86 - You press the key combo 'ALT-SysRQ-'. Note - Some (older?) may not have a key labeled 'SysRQ'. The 'SysRQ' key is also known as the 'Print Screen' key. On SPARC - You press 'ALT-STOP-', I believe. On PowerPC - You press 'ALT-Print Screen-'. On other - If you know of the key combos for other architectures, please let me know so I can add them to this section. * What are the 'command' keys? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 'r' - Turns off keyboard raw mode and sets it to XLATE. 'k' - Kills all programs on the current virtual console. 'b' - Will immediately reboot the system without syncing or unmounting your disks. 'o' - Will shut your system off (if configured and supported). 's' - Will attempt to sync all mounted filesystems. 'u' - Will attempt to remount all mounted filesystems read-only. 'p' - Will dump the current registers and flags to your console. 't' - Will dump a list of current tasks and their information to your console. 'm' - Will dump current memory info to your console. '0'-'9' - Sets the console log level, controlling which kernel messages will be printed to your console. ('0', for example would make it so that only emergency messages like PANICs or OOPSes would make it to your console.) 'e' - Send a SIGTERM to all processes, except for init. 'i' - Send a SIGKILL to all processes, except for init. 'l' - Send a SIGKILL to all processes, INCLUDING init. (Your system will be non-functional after this.) * Okay, so what can I use them for? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Well, un'R'aw is very handy when your X server or a svgalib program crashes. sa'K' (system attention key) is useful when you want to exit a program that will not let you switch consoles. (For example, X or a svgalib program.) re'B'oot is good when you're unable to shut down. But you should also 'S'ync and 'U'mount first. 'S'ync is great when your system is locked up, it allows you to sync your disks and will certainly lessen the chance of data loss and fscking. Note that the sync hasn't taken place until you see the "OK" and "Done" appear on the screen. (If the kernel is really in strife, you may not ever get the OK or Done message...) 'U'mount is basically useful in the same ways as 'S'ync. I generally 'S'ync, 'U'mount, then re'B'oot when my system locks. It's saved me many a fsck. Again, the unmount (remount read-only) hasn't taken place until you see the "OK" and "Done" message appear on the screen. The loglevel'0'-'9' is useful when your console is being flooded with kernel messages you do not want to see. Setting '0' will prevent all but the most urgent kernel messages from reaching your console. (They will still be logged if syslogd/klogd are alive, though.) t'E'rm and k'I'll are useful if you have some sort of runaway process you are unable to kill any other way, especially if it's spawning other processes. * Sometimes SysRQ seems to get 'stuck' after using it, what can I do? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ That happens to me, also. I've found that tapping shift, alt, and control on both sides of the keyboard, and hitting an invalid sysrq sequence again will fix the problem. (ie, something like alt-sysrq-z). Switching to another virtual console (ALT+Fn) and then back again should also help. * I hit SysRQ, but nothing seems to happen, what's wrong? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ There are some keyboards which do not support 'SysRQ', you can try running 'showkey -s' and pressing SysRQ or alt-SysRQ to see if it generates any 0x54 codes. If it doesn't, you may define the magic sysrq sequence to a different key. Find the keycode with showkey, and change the define of '#define SYSRQ_KEY 0x54' in [/usr/src/linux/]include/asm/keyboard.h to the keycode of the key you wish to use, then recompile. Oh, and by the way, you exit 'showkey' by not typing anything for ten seconds. * I have more questions, who can I ask? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ You may feel free to send email to myrdraal@deathsdoor.com, and I will respond as soon as possible. If that email address does not work, use myrdraal@jackalz.dyn.ml.org. -Myrdraal The Linux kernel code has been rewritten to use Unicode to map characters to fonts. By downloading a single Unicode-to-font table, both the eight-bit character sets and UTF-8 mode are changed to use the font as indicated. This changes the semantics of the eight-bit character tables subtly. The four character tables are now: Map symbol Map name Escape code (G0) LAT1_MAP Latin-1 (ISO 8859-1) ESC ( B GRAF_MAP DEC VT100 pseudographics ESC ( 0 IBMPC_MAP IBM code page 437 ESC ( U USER_MAP User defined ESC ( K In particular, ESC ( U is no longer "straight to font", since the font might be completely different than the IBM character set. This permits for example the use of block graphics even with a Latin-1 font loaded. In accordance with the Unicode standard/ISO 10646 the range U+F000 to U+F8FF has been reserved for OS-wide allocation (the Unicode Standard refers to this as a "Corporate Zone", since this is inaccurate for Linux we call it the "Linux Zone"). U+F000 was picked as the starting point since it lets the direct-mapping area start on a large power of two (in case 1024- or 2048-character fonts ever become necessary). This leaves U+E000 to U+EFFF as End User Zone. The Unicodes in the range U+F000 to U+F1FF have been hard-coded to map directly to the loaded font, bypassing the translation table. The user-defined map now defaults to U+F000 to U+F1FF, emulating the previous behaviour. This range may expand in the future should it be warranted. Actual characters assigned in the Linux Zone -------------------------------------------- In addition, the following characters not present in Unicode 1.1.4 (at least, I have not found them!) have been defined; these are used by the DEC VT graphics map: U+F800 DEC VT GRAPHICS HORIZONTAL LINE SCAN 1 U+F801 DEC VT GRAPHICS HORIZONTAL LINE SCAN 3 U+F803 DEC VT GRAPHICS HORIZONTAL LINE SCAN 7 U+F804 DEC VT GRAPHICS HORIZONTAL LINE SCAN 9 The DEC VT220 uses a 6x10 character matrix, and these characters form a smooth progression in the DEC VT graphics character set. I have omitted the scan 5 line, since it is also used as a block-graphics character, and hence has been coded as U+2500 FORMS LIGHT HORIZONTAL. However, I left U+F802 blank should the need arise. Klingon language support ------------------------ Unfortunately, Unicode/ISO 10646 does not allocate code points for the language Klingon, probably fearing the potential code point explosion if many fictional languages were submitted for inclusion. There are also political reasons (the Japanese, for example, are not too happy about the whole 16-bit concept to begin with.) However, with Linux being a hacker-driven OS it seems this is a brilliant linguistic hack worth supporting. Hence I have chosen to add it to the list in the Linux Zone. Several glyph forms for the Klingon alphabet have been proposed. However, since the set of symbols appear to be consistent throughout, with only the actual shapes being different, in keeping with standard Unicode practice these differences are considered font variants. Klingon has an alphabet of 26 characters, a positional numeric writing system with 10 digits, and is written left-to-right, top-to-bottom. Punctuation appears to be only used in Latin transliteration; it appears customary to write each sentence on its own line, and centered. Space has been reserved for punctuation should it prove necessary. This encoding has been endorsed by the Klingon Language Institute. For more information, contact them at: http://www.kli.org/ Since the characters in the beginning of the Linux CZ have been more of the dingbats/symbols/forms type and this is a language, I have located it at the end, on a 16-cell boundary in keeping with standard Unicode practice. U+F8D0 KLINGON LETTER A U+F8D1 KLINGON LETTER B U+F8D2 KLINGON LETTER CH U+F8D3 KLINGON LETTER D U+F8D4 KLINGON LETTER E U+F8D5 KLINGON LETTER GH U+F8D6 KLINGON LETTER H U+F8D7 KLINGON LETTER I U+F8D8 KLINGON LETTER J U+F8D9 KLINGON LETTER L U+F8DA KLINGON LETTER M U+F8DB KLINGON LETTER N U+F8DC KLINGON LETTER NG U+F8DD KLINGON LETTER O U+F8DE KLINGON LETTER P U+F8DF KLINGON LETTER Q - Written in standard Okrand Latin transliteration U+F8E0 KLINGON LETTER QH - Written in standard Okrand Latin transliteration U+F8E1 KLINGON LETTER R U+F8E2 KLINGON LETTER S U+F8E3 KLINGON LETTER T U+F8E4 KLINGON LETTER TLH U+F8E5 KLINGON LETTER U U+F8E6 KLINGON LETTER V U+F8E7 KLINGON LETTER W U+F8E8 KLINGON LETTER Y U+F8E9 KLINGON LETTER GLOTTAL STOP U+F8F0 KLINGON DIGIT ZERO U+F8F1 KLINGON DIGIT ONE U+F8F2 KLINGON DIGIT TWO U+F8F3 KLINGON DIGIT THREE U+F8F4 KLINGON DIGIT FOUR U+F8F5 KLINGON DIGIT FIVE U+F8F6 KLINGON DIGIT SIX U+F8F7 KLINGON DIGIT SEVEN U+F8F8 KLINGON DIGIT EIGHT U+F8F9 KLINGON DIGIT NINE Other Fictional and Artificial Scripts -------------------------------------- Since the assignment of the Klingon Linux Unicode block, a registry of fictional and artificial scripts has been established by John Cowan, . The ConScript Unicode Registry is accessible at http://locke.ccil.org/~cowan/csur/; the ranges used fall at the bottom of the End User Zone and can hence not be normatively assigned, but it is recommended that people who wish to encode fictional scripts use these codes, in the interest of interoperability. For Klingon, CSUR has adopted the Linux encoding. H. Peter Anvin Software cursor for VGA by Pavel Machek ======================= and Martin Mares Linux now has some ability to manipulate cursor appearance. Normally, you can set the size of hardware cursor (and also work around some ugly bugs in those miserable Trident cards--see #define TRIDENT_GLITCH in drivers/video/ vgacon.c). You can now play a few new tricks: you can make your cursor look like a non-blinking red block, make it inverse background of the character it's over or to highlight that character and still choose whether the original hardware cursor should remain visible or not. There may be other things I have never thought of. The cursor appearance is controlled by a "[?1;2;3c" escape sequence where 1, 2 and 3 are parameters described below. If you omit any of them, they will default to zeroes. Parameter 1 specifies cursor size (0=default, 1=invisible, 2=underline, ..., 8=full block) + 16 if you want the software cursor to be applied + 32 if you want to always change the background color + 64 if you dislike having the background the same as the foreground. Highlights are ignored for the last two flags. The second parameter selects character attribute bits you want to change (by simply XORing them with the value of this parameter). On standard VGA, the high four bits specify background and the low four the foreground. In both groups, low three bits set color (as in normal color codes used by the console) and the most significant one turns on highlight (or sometimes blinking--it depends on the configuration of your VGA). The third parameter consists of character attribute bits you want to set. Bit setting takes place before bit toggling, so you can simply clear a bit by including it in both the set mask and the toggle mask. Examples: ========= To get normal blinking underline, use: echo -e '\033[?2c' To get blinking block, use: echo -e '\033[?6c' To get red non-blinking block, use: echo -e '\033[?17;0;64c' Watchdog Timer Interfaces For The Linux Operating System Alan Cox Custom Linux Driver And Program Development The following watchdog drivers are currently implemented: ICS WDT501-P ICS WDT501-P (no fan tachometer) ICS WDT500-P Software Only Berkshire Products PC Watchdog Revision A & C (by Ken Hollis) All five interfaces provide /dev/watchdog, which when open must be written to within a timeout or the machine will reboot. Each write delays the reboot time another timeout. In the case of the software watchdog the ability to reboot will depend on the state of the machines and interrupts. The hardware boards physically pull the machine down off their own onboard timers and will reboot from almost anything. A second temperature monitoring interface is available on the WDT501P cards and some Berkshire cards. This provides /dev/temperature. This is the machine internal temperature in degrees Fahrenheit. Each read returns a single byte giving the temperature. The third interface logs kernel messages on additional alert events. Both software and hardware watchdog drivers are available in the standard kernel. If you are using the software watchdog, you probably also want to use "panic=60" as a boot argument as well. The wdt card cannot be safely probed for. Instead you need to pass wdt=ioaddr,irq as a boot parameter - eg "wdt=0x240,11". Features -------- WDT501P WDT500P Software Berkshire Reboot Timer X X X X External Reboot X X o o I/O Port Monitor o o o X Temperature X o o X Fan Speed X o o o Power Under X o o o Power Over X o o o Overheat X o o o The external event interfaces on the WDT boards are not currently supported. Minor numbers are however allocated for it. Example Watchdog Driver ----------------------- #include #include #include int main(int argc, const char *argv[]) { int fd=open("/dev/watchdog",O_WRONLY); if(fd==-1) { perror("watchdog"); exit(1); } while(1) { write(fd,"\0",1); sleep(10); } } Contact Information People keep asking about the WDT watchdog timer hardware: The phone contacts for Industrial Computer Source are: Industrial Computer Source http://www.indcompsrc.com ICS Advent, San Diego 6260 Sequence Dr. San Diego, CA 92121-4371 Phone (858) 677-0877 FAX: (858) 677-0895 > ICS Advent Europe, UK Oving Road Chichester, West Sussex, PO19 4ET, UK Phone: 00.44.1243.533900 and please mention Linux when enquiring. For full information about the PCWD cards see the pcwd-watchdog.txt document. /* XPM */ /*****************************************************************************/ /** This pixmap was made by Torsten Poulin - 1996 - torsten@diku.dk **/ /** It was made by combining xterm-blank.xpm with **/ /** the wonderfully cute Linux penguin mascot by Larry Ewing. **/ /** I had to change Larry's penguin a little to make it fit. **/ /** xterm-blank.xpm contained the following comment: **/ /** This pixmap is kindly offered by Ion Cionca - 1992 - **/ /** Swiss Federal Institute of Technology **/ /** Central Computing Service **/ /*****************************************************************************/ static char * image_name [] = { /**/ "64 38 8 1", /**/ " s mask c none", ". c gray70", "X c gray85", "o c gray50", "O c yellow", "+ c darkolivegreen", "@ c white", "# c black", " ###### ", " ######## ", " ########## ........................... ", " ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXX. ", " ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo ", " #@@@#@@@### .XX+++++++++++++++++++++++XXXXoo ", " #@#@#@#@### .XX++++++++++++++++++++++++XXXooo ", " #@#####@### .XX++@@+@++@+@@@@++@+++++++XXXooo ", " ###OOO######.XX++++++++++++++++++++++++XXXoooo ", " ##OOOOOO####.XX++@@@@+@@+@@@+++++++++++XXXoooo ", " #O#OOO#O####.XX++++++++++++++++++++++++XXXooooo ", " ##O###OO####.XX++@@@@@@@@@@+@@@@@++++++XXXooooo ", " ###OOOO@#####XX++++++++++++++++++++++++XXXooooo ", " ##@###@@@@####XX++@@@+@@@@+@@++@@@++++++XXXooooo ", " #@@@@@@@@@@####X++++++++++++++++++++++++XXXooooo ", " ##@@@@@@@@@@#####++@+++++++++++++++++++++XXXooooo ", " ###@@@@@@@@@@######+++++++++++++++++++++++XXXooooo ", " ####@@@@@@@@@@@#####+@@@@+@+@@@+@++++++++++XXXooooo ", " ###@@@@@@@@@@@@######++++++++++++++++++++++XXXooooo ", " ##@@@@@@@@@@@@@@#####@+@@@@++++++++++++++++XXXooooo ", " ###@@@@@@@@@@@@@@######++++++++++++++++++++XXXXoooo ", " ###@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXXooo ", " ###@@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXooo ", " ###@@@@@@@@@@@@@@@@#####ooooooooooooooooooooooo...oo ", " ###@@@@@@@@@@@@@@@######.........................ooo ", " #OO##@@@@@@@@@@@@@#######oooooooooooooooooooooooooooo ", " #OOO##@@@@@@@@@@@#OO####O#XXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ", " ###OOOOO##@@@@@@@@@@#OOO#OOO#XXXXXXXXXXXXXX#######XXoooo . .", " #OOOOOOOO###@@@@@@@@@#OOOOOOO#ooooooooooooooooooooXXXooo . ", " #OOOOOOOOO###@@@@@@@@@#OOOOOOO##XXXXXXXXXXXXXXXXXooooo . ", " #OOOOOOOOO#@@@@@@@@###OOOOOOOOO#XXXXXXXXXXXXXXXoo oooooo ", " #OOOOOOOOO#@@@@@@@####OOOOOOOO#@@@@@@@@@@@XXXXXoo ooooo...o ", " #OOOOOOOOOOO###########OOOOOO##XXXXXXXXXXXXXXXXoo ooXXXoo..o ", " ##OOOOOOOOO###########OOOO##@@@@@@@@@@@@@XXXXoo oXXXXX..o ", " ###OOOO### oXX##OOO#XXXXXXXXXXXXXXXXXXoo o.....oo ", " #### oooo####oooooooooooooooooooo ooooooo ", " ", " "}; 00-INDEX - this file (info on some of the filesystems supported by linux). adfs.txt - info and mount options for the Acorn Advanced Disc Filing System. affs.txt - info and mount options for the Amiga Fast File System. coda.txt - description of the CODA filesystem. fat_cvf.txt - info on the Compressed Volume Files extension to the FAT filesystem hpfs.txt - info and mount options for the OS/2 HPFS. isofs.txt - info and mount options for the ISO 9660 (CDROM) filesystem. ncpfs.txt - info on Novell Netware(tm) filesystem using NCP protocol. ntfs.txt - info and mount options for the NTFS filesystem (Windows NT). romfs.txt - Description of the ROMFS filesystem. smbfs.txt - info on using filesystems with the SMB protocol (Windows 3.11 and NT) sysv-fs.txt - info on the SystemV/Coherent filesystem. ufs.txt - info on the ufs filesystem. umsdos.txt - info on the umsdos extensions to the msdos filesystem. vfat.txt - info on using the VFAT filesystem used in Windows NT and Windows 95 vfs.txt - Overview of the Virtual File System Mount options for ADFS ---------------------- uid=nnn All files in the partition will be owned by user id nnn. Default 0 (root). gid=nnn All files in the partition willbe in group nnn. Default 0 (root). ownmask=nnn The permission mask for ADFS 'owner' permissions will be nnn. Default 0700. othmask=nnn The permission mask for ADFS 'other' permissions will be nnn. Default 0077. Mapping of ADFS permissions to Linux permissions ------------------------------------------------ ADFS permissions consist of the following: Owner read Owner write Other read Other write (In older versions, an 'execute' permission did exist, but this does not hold the same meaning as the Linux 'execute' permission and is now obsolete). The mapping is performed as follows: Owner read -> -r--r--r-- Owner write -> --w--w---w Owner read and filetype UnixExec -> ---x--x--x These are then masked by ownmask, eg 700 -> -rwx------ Possible owner mode permissions -> -rwx------ Other read -> -r--r--r-- Other write -> --w--w--w- Other read and filetype UnixExec -> ---x--x--x These are then masked by othmask, eg 077 -> ----rwxrwx Possible other mode permissions -> ----rwxrwx Hence, with the default masks, if a file is owner read/write, and not a UnixExec filetype, then the permissions will be: -rw------- However, if the masks were ownmask=0770,othmask=0007, then this would be modified to: -rw-rw---- There is no restriction on what you can do with these masks. You may wish that either read bits give read access to the file for all, but keep the default write protection (ownmask=0755,othmask=0577): -rw-r--r-- You can therefore tailor the permission translation to whatever you desire the permissions should be under Linux. Overview of Amiga Filesystems ============================= Not all varieties of the Amiga filesystems are supported for reading and writing. The Amiga currently knows six different filesystems: DOS\0 The old or original filesystem, not really suited for hard disks and normally not used on them, either. Supported read/write. DOS\1 The original Fast File System. Supported read/write. DOS\2 The old "international" filesystem. International means that a bug has been fixed so that accented ("international") letters in file names are case-insensitive, as they ought to be. Supported read/write. DOS\3 The "international" Fast File System. Supported read/write. DOS\4 The original filesystem with directory cache. The directory cache speeds up directory accesses on floppies considerably, but slows down file creation/deletion. Doesn't make much sense on hard disks. Supported read only. DOS\5 The Fast File System with directory cache. Supported read only. All of the above filesystems allow block sizes from 512 to 32K bytes. Supported block sizes are: 512, 1024, 2048 and 4096 bytes. Larger blocks speed up almost everything at the expense of wasted disk space. The speed gain above 4K seems not really worth the price, so you don't lose too much here, either. The muFS (multi user File System) equivalents of the above file systems are supported, too. Mount options for the AFFS ========================== protect If this option is set, the protection bits cannot be altered. setuid[=uid] This sets the owner of all files and directories in the file system to uid or the uid of the current user, respectively. setgid[=gid] Same as above, but for gid. mode=mode Sets the mode flags to the given (octal) value, regardless of the original permissions. Directories will get an x permission if the corresponding r bit is set. This is useful since most of the plain AmigaOS files will map to 600. reserved=num Sets the number of reserved blocks at the start of the partition to num. You should never need this option. Default is 2. root=block Sets the block number of the root block. This should never be necessary. bs=blksize Sets the blocksize to blksize. Valid block sizes are 512, 1024, 2048 and 4096. Like the root option, this should never be necessary, as the affs can figure it out itself. quiet The file system will not return an error for disallowed mode changes. verbose The volume name, file system type and block size will be written to the syslog when the filesystem is mounted. mufs The filesystem is really a muFS, also it doesn't identify itself as one. This option is necessary if the filesystem wasn't formatted as muFS, but is used as one. prefix=path Path will be prefixed to every absolute path name of symbolic links on an AFFS partition. Default = "/". (See below.) volume=name When symbolic links with an absolute path are created on an AFFS partition, name will be prepended as the volume name. Default = "" (empty string). (See below.) Handling of the Users/Groups and protection flags ================================================= Amiga -> Linux: The Amiga protection flags RWEDRWEDHSPARWED are handled as follows: - R maps to r for user, group and others. On directories, R implies x. - If both W and D are allowed, w will be set. - E maps to x. - H and P are always retained and ignored under Linux. - A is always reset when a file is written to. User id and group id will be used unless set[gu]id are given as mount options. Since most of the Amiga file systems are single user systems they will be owned by root. The root directory (the mount point) of the Amiga filesystem will be owned by the user who actually mounts the filesystem (the root directory doesn't have uid/gid fields). Linux -> Amiga: The Linux rwxrwxrwx file mode is handled as follows: - r permission will set R for user, group and others. - w permission will set W and D for user, group and others. - x permission of the user will set E for plain files. - All other flags (suid, sgid, ...) are ignored and will not be retained. Newly created files and directories will get the user and group ID of the current user and a mode according to the umask. Symbolic links ============== Although the Amiga and Linux file systems resemble each other, there are some, not always subtle, differences. One of them becomes apparent with symbolic links. While Linux has a file system with exactly one root directory, the Amiga has a separate root directory for each file system (for example, partition, floppy disk, ...). With the Amiga, these entities are called "volumes". They have symbolic names which can be used to access them. Thus, symbolic links can point to a different volume. AFFS turns the volume name into a directory name and prepends the prefix path (see prefix option) to it. Example: You mount all your Amiga partitions under /amiga/ (where is the name of the volume), and you give the option "prefix=/amiga/" when mounting all your AFFS partitions. (They might be "User", "WB" and "Graphics", the mount points /amiga/User, /amiga/WB and /amiga/Graphics). A symbolic link referring to "User:sc/include/dos/dos.h" will be followed to "/amiga/User/sc/include/dos/dos.h". Examples ======== Command line: mount Archive/Amiga/Workbench3.1.adf /mnt -t affs -o loop,verbose mount /dev/sda3 /Amiga -t affs /etc/fstab entry: /dev/sdb5 /amiga/Workbench affs noauto,user,exec,verbose 0 0 IMPORTANT NOTE ============== If you boot Windows 95 (don't know about 3.x, 98 and NT) while you have an Amiga harddisk connected to your PC, it will overwrite the bytes 0x00dc..0x00df of block 0 with garbage, thus invalidating the Rigid Disk Block. Sheer luck has it that this is an unused area of the RDB, so only the checksum doesn't match anymore. Linux will ignore this garbage and recognize the RDB anyway, but before you connect that drive to your Amiga again, you must restore or repair your RDB. So please do make a backup copy of it before booting Windows! If the damage is already done, the following should fix the RDB (where is the device name). DO AT YOUR OWN RISK: dd if=/dev/ of=rdb.tmp count=1 cp rdb.tmp rdb.fixed dd if=/dev/zero of=rdb.fixed bs=1 seek=220 count=4 dd if=rdb.fixed of=/dev/ Bugs, Restrictions, Caveats =========================== Quite a few things may not work as advertised. Not everything is tested, though several hundred MB have been read and written using this fs. For a most up-to-date list of bugs please consult fs/affs/Changes. Filenames are truncated to 30 characters without warning (this can be changed by setting the compile-time option AFFS_NO_TRUNCATE in include/linux/amigaffs.h). Case is ignored by the affs in filename matching, but Linux shells do care about the case. Example (with /wb being an affs mounted fs): rm /wb/WRONGCASE will remove /mnt/wrongcase, but rm /wb/WR* will not since the names are matched by the shell. The block allocation is designed for hard disk partitions. If more than 1 process writes to a (small) diskette, the blocks are allocated in an ugly way (but the real AFFS doesn't do much better). This is also true when space gets tight. You cannot execute programs on an OFS (Old File System), since the program files cannot be memory mapped due to the 488 byte blocks. For the same reason you cannot mount an image on such a filesystem via the loopback device. The bitmap valid flag in the root block may not be accurate when the system crashes while an affs partition is mounted. There's currently no way to fix a garbled filesystem without an Amiga (disk validator) or manually (who would do this?). Maybe later. If you mount affs partitions on system startup, you may want to tell fsck that the fs should not be checked (place a '0' in the sixth field of /etc/fstab). It's not possible to read floppy disks with a normal PC or workstation due to an incompatibility with the Amiga floppy controller. If you are interested in an Amiga Emulator for Linux, look at http://www-users.informatik.rwth-aachen.de/~crux/uae.html NOTE: This is one of the technical documents describing a component of Coda -- this document describes the client kernel-Venus interface. For more information: http://www.coda.cs.cmu.edu For user level software needed to run Coda: ftp://ftp.coda.cs.cmu.edu To run Coda you need to get a user level cache manager for the client, named Venus, as well as tools to manipulate ACLs, to log in, etc. The client needs to have the Coda filesystem selected in the kernel configuration. The server needs a user level server and at present does not depend on kernel support. The Venus kernel interface Peter J. Braam v1.0, Nov 9, 1997 This document describes the communication between Venus and kernel level filesystem code needed for the operation of the Coda file sys- tem. This document version is meant to describe the current interface (version 1.0) as well as improvements we envisage. ______________________________________________________________________ Table of Contents 1. Introduction 2. Servicing Coda filesystem calls 3. The message layer 3.1 Implementation details 4. The interface at the call level 4.1 Data structures shared by the kernel and Venus 4.2 The pioctl interface 4.3 root 4.4 lookup 4.5 getattr 4.6 setattr 4.7 access 4.8 create 4.9 mkdir 4.10 link 4.11 symlink 4.12 remove 4.13 rmdir 4.14 readlink 4.15 open 4.16 close 4.17 ioctl 4.18 rename 4.19 readdir 4.20 vget 4.21 fsync 4.22 inactive 4.23 rdwr 4.24 odymount 4.25 ody_lookup 4.26 ody_expand 4.27 prefetch 4.28 signal 5. The minicache and downcalls 5.1 INVALIDATE 5.2 FLUSH 5.3 PURGEUSER 5.4 ZAPFILE 5.5 ZAPDIR 5.6 ZAPVNODE 5.7 PURGEFID 5.8 REPLACE 6. Initialization and cleanup 6.1 Requirements ______________________________________________________________________ 0wpage 11.. IInnttrroodduuccttiioonn A key component in the Coda Distributed File System is the cache manager, _V_e_n_u_s. When processes on a Coda enabled system access files in the Coda filesystem, requests are directed at the filesystem layer in the operating system. The operating system will communicate with Venus to service the request for the process. Venus manages a persistent client cache and makes remote procedure calls to Coda file servers and related servers (such as authentication servers) to service these requests it receives from the operating system. When Venus has serviced a request it replies to the operating system with appropriate return codes, and other data related to the request. Optionally the kernel support for Coda may maintain a minicache of recently processed requests to limit the number of interactions with Venus. Venus possesses the facility to inform the kernel when elements from its minicache are no longer valid. This document describes precisely this communication between the kernel and Venus. The definitions of so called upcalls and downcalls will be given with the format of the data they handle. We shall also describe the semantic invariants resulting from the calls. Historically Coda was implemented in a BSD file system in Mach 2.6. The interface between the kernel and Venus is very similar to the BSD VFS interface. Similar functionality is provided, and the format of the parameters and returned data is very similar to the BSD VFS. This leads to an almost natural environment for implementing a kernel-level filesystem driver for Coda in a BSD system. However, other operating systems such as Linux and Windows 95 and NT have virtual filesystem with different interfaces. To implement Coda on these systems some reverse engineering of the Venus/Kernel protocol is necessary. Also it came to light that other systems could profit significantly from certain small optimizations and modifications to the protocol. To facilitate this work as well as to make future ports easier, communication between Venus and the kernel should be documented in great detail. This is the aim of this document. 0wpage 22.. SSeerrvviicciinngg CCooddaa ffiilleessyysstteemm ccaallllss The service of a request for a Coda file system service originates in a process PP which accessing a Coda file. It makes a system call which traps to the OS kernel. Examples of such calls trapping to the kernel are _r_e_a_d_, _w_r_i_t_e_, _o_p_e_n_, _c_l_o_s_e_, _c_r_e_a_t_e_, _m_k_d_i_r_, _r_m_d_i_r_, _c_h_m_o_d in a Unix context. Similar calls exist in the Win32 environment, and are named _C_r_e_a_t_e_F_i_l_e_, . Generally the operating system handles the request in a virtual filesystem (VFS) layer, which is named I/O Manager in NT and IFS manager in Windows 95. The VFS is responsible for partial processing of the request and for locating the specific filesystem(s) which will service parts of the request. Usually the information in the path assists in locating the correct FS drivers. Sometimes after extensive pre-processing, the VFS starts invoking exported routines in the FS driver. This is the point where the FS specific processing of the request starts, and here the Coda specific kernel code comes into play. The FS layer for Coda must expose and implement several interfaces. First and foremost the VFS must be able to make all necessary calls to the Coda FS layer, so the Coda FS driver must expose the VFS interface as applicable in the operating system. These differ very significantly among operating systems, but share features such as facilities to read/write and create and remove objects. The Coda FS layer services such VFS requests by invoking one or more well defined services offered by the cache manager Venus. When the replies from Venus have come back to the FS driver, servicing of the VFS call continues and finishes with a reply to the kernel's VFS. Finally the VFS layer returns to the process. As a result of this design a basic interface exposed by the FS driver must allow Venus to manage message traffic. In particular Venus must be able to retrieve and place messages and to be notified of the arrival of a new message. The notification must be through a mechanism which does not block Venus since Venus must attend to other tasks even when no messages are waiting or being processed. Interfaces of the Coda FS Driver Furthermore the FS layer provides for a special path of communication between a user process and Venus, called the pioctl interface. The pioctl interface is used for Coda specific services, such as requesting detailed information about the persistent cache managed by Venus. Here the involvement of the kernel is minimal. It identifies the calling process and passes the information on to Venus. When Venus replies the response is passed back to the caller in unmodified form. Finally Venus allows the kernel FS driver to cache the results from certain services. This is done to avoid excessive context switches and results in an efficient system. However, Venus may acquire information, for example from the network which implies that cached information must be flushed or replaced. Venus then makes a downcall to the Coda FS layer to request flushes or updates in the cache. The kernel FS driver handles such requests synchronously. Among these interfaces the VFS interface and the facility to place, receive and be notified of messages are platform specific. We will not go into the calls exported to the VFS layer but we will state the requirements of the message exchange mechanism. 0wpage 33.. TThhee mmeessssaaggee llaayyeerr At the lowest level the communication between Venus and the FS driver proceeds through messages. The synchronization between processes requesting Coda file service and Venus relies on blocking and waking up processes. The Coda FS driver processes VFS- and pioctl-requests on behalf of a process P, creates messages for Venus, awaits replies and finally returns to the caller. The implementation of the exchange of messages is platform specific, but the semantics have (so far) appeared to be generally applicable. Data buffers are created by the FS Driver in kernel memory on behalf of P and copied to user memory in Venus. The FS Driver while servicing P makes upcalls to Venus. Such an upcall is dispatched to Venus by creating a message structure. The structure contains the identification of P, the message sequence number, the size of the request and a pointer to the data in kernel memory for the request. Since the data buffer is re-used to hold the reply from Venus, there is a field for the size of the reply. A flags field is used in the message to precisely record the status of the message. Additional platform dependent structures involve pointers to determine the position of the message on queues and pointers to synchronization objects. In the upcall routine the message structure is filled in, flags are set to 0, and it is placed on the _p_e_n_d_i_n_g queue. The routine calling upcall is responsible for allocating the data buffer; its structure will be described in the next section. A facility must exist to notify Venus that the message has been created, and implemented using available synchronization objects in the OS. This notification is done in the upcall context of the process P. When the message is on the pending queue, process P cannot proceed in upcall. The (kernel mode) processing of P in the filesystem request routine must be suspended until Venus has replied. Therefore the calling thread in P is blocked in upcall. A pointer in the message structure will locate the synchronization object on which P is sleeping. Venus detects the notification that a message has arrived, and the FS driver allow Venus to retrieve the message with a getmsg_from_kernel call. This action finishes in the kernel by putting the message on the queue of processing messages and setting flags to READ. Venus is passed the contents of the data buffer. The getmsg_from_kernel call now returns and Venus processes the request. At some later point the FS driver receives a message from Venus, namely when Venus calls sendmsg_to_kernel. At this moment the Coda FS driver looks at the contents of the message and decides if: +o the message is a reply for a suspended thread P. If so it removes the message from the processing queue and marks the message as WRITTEN. Finally, the FS driver unblocks P (still in the kernel mode context of Venus) and the sendmsg_to_kernel call returns to Venus. The process P will be scheduled at some point and continues processing its upcall with the data buffer replaced with the reply from Venus. +o The message is a _d_o_w_n_c_a_l_l. A downcall is a request from Venus to the FS Driver. The FS driver processes the request immediately (usually a cache eviction or replacement) and when it finishes sendmsg_to_kernel returns. Now P awakes and continues processing upcall. There are some subtleties to take account of. First P will determine if it was woken up in upcall by a signal from some other source (for example an attempt to terminate P) or as is normally the case by Venus in its sendmsg_to_kernel call. In the normal case, the upcall routine will deallocate the message structure and return. The FS routine can proceed with its processing. Sleeping and IPC arrangements In case P is woken up by a signal and not by Venus, it will first look at the flags field. If the message is not yet READ, the process P can handle its signal without notifying Venus. If Venus has READ, and the request should not be processed, P can send Venus a signal message to indicate that it should disregard the previous message. Such signals are put in the queue at the head, and read first by Venus. If the message is already marked as WRITTEN it is too late to stop the processing. The VFS routine will now continue. (-- If a VFS request involves more than one upcall, this can lead to complicated state, an extra field "handle_signals" could be added in the message structure to indicate points of no return have been passed.--) 33..11.. IImmpplleemmeennttaattiioonn ddeettaaiillss The Unix implementation of this mechanism has been through the implementation of a character device associated with Coda. Venus retrieves messages by doing a read on the device, replies are sent with a write and notification is through the select system call on the file descriptor for the device. The process P is kept waiting on an interruptible wait queue object. In Windows NT and the DPMI Windows 95 implementation a DeviceIoControl call is used. The DeviceIoControl call is designed to copy buffers from user memory to kernel memory with OPCODES. The sendmsg_to_kernel is issued as a synchronous call, while the getmsg_from_kernel call is asynchronous. Windows EventObjects are used for notification of message arrival. The process P is kept waiting on a KernelEvent object in NT and a semaphore in Windows 95. 0wpage 44.. TThhee iinntteerrffaaccee aatt tthhee ccaallll lleevveell This section describes the upcalls a Coda FS driver can make to Venus. Each of these upcalls make use of two structures: inputArgs and outputArgs. In pseudo BNF form the structures take the following form: struct inputArgs { u_long opcode; u_long unique; /* Keep multiple outstanding msgs distinct */ u_short pid; /* Common to all */ u_short pgid; /* Common to all */ struct CodaCred cred; /* Common to all */ }; struct outputArgs { u_long opcode; u_long unique; /* Keep multiple outstanding msgs distinct */ u_long result; }; Before going on let us elucidate the role of the various fields. The inputArgs start with the opcode which defines the type of service requested from Venus. There are approximately 30 upcalls at present which we will discuss. The unique field labels the inputArg with a unique number which will identify the message uniquely. A process and process group id are passed. Finally the credentials of the caller are included. Before delving into the specific calls we need to discuss a variety of data structures shared by the kernel and Venus. 44..11.. DDaattaa ssttrruuccttuurreess sshhaarreedd bbyy tthhee kkeerrnneell aanndd VVeennuuss The CodaCred structure defines a variety of user and group ids as they are set for the calling process. The vuid_t and guid_t are 32 bit unsigned integers. It also defines group membership in an array. On Unix the CodaCred has proven sufficient to implement good security semantics for Coda but the structure may have to undergo modification for the Windows environment when these mature. struct CodaCred { vuid_t cr_uid, cr_euid, cr_suid, cr_fsuid; /* Real, effective, set, fs uid*/ vgid_t cr_gid, cr_egid, cr_sgid, cr_fsgid; /* same for groups */ vgid_t cr_groups[NGROUPS]; /* Group membership for caller */ }; NNOOTTEE It is questionable if we need CodaCreds in Venus. Finally Venus doesn't know about groups, although it does create files with the default uid/gid. Perhaps the list of group membership is superfluous. The next item is the fundamental identifier used to identify Coda files, the ViceFid. A fid of a file uniquely defines a file or directory in the Coda filesystem within a _c_e_l_l. (-- A _c_e_l_l is a group of Coda servers acting under the aegis of a single system control machine or SCM. See the Coda Administration manual for a detailed description of the role of the SCM.--) typedef struct ViceFid { VolumeId Volume; VnodeId Vnode; Unique_t Unique; } ViceFid; Each of the constituent fields: VolumeId, VnodeId and Unique_t are unsigned 32 bit integers. We envisage that a further field will need to be prefixed to identify the Coda cell; this will probably take the form of a Ipv6 size IP address naming the Coda cell through DNS. The next important structure shared between Venus and the kernel is the attributes of the file. The following structure is used to exchange information. It has room for future extensions such as support for device files (currently not present in Coda). struct coda_vattr { enum coda_vtype va_type; /* vnode type (for create) */ u_short va_mode; /* files access mode and type */ short va_nlink; /* number of references to file */ vuid_t va_uid; /* owner user id */ vgid_t va_gid; /* owner group id */ long va_fsid; /* file system id (dev for now) */ long va_fileid; /* file id */ u_quad_t va_size; /* file size in bytes */ long va_blocksize; /* blocksize preferred for i/o */ struct timespec va_atime; /* time of last access */ struct timespec va_mtime; /* time of last modification */ struct timespec va_ctime; /* time file changed */ u_long va_gen; /* generation number of file */ u_long va_flags; /* flags defined for file */ dev_t va_rdev; /* device special file represents */ u_quad_t va_bytes; /* bytes of disk space held by file */ u_quad_t va_filerev; /* file modification number */ u_int va_vaflags; /* operations flags, see below */ long va_spare; /* remain quad aligned */ }; 44..22.. TThhee ppiiooccttll iinntteerrffaaccee Coda specific requests can be made by application through the pioctl interface. The pioctl is implemented as an ordinary ioctl on a fictitious file /coda/.CONTROL. The pioctl call opens this file, gets a file handle and makes the ioctl call. Finally it closes the file. The kernel involvement in this is limited to providing the facility to open and close and pass the ioctl message _a_n_d to verify that a path in the pioctl data buffers is a file in a Coda filesystem. The kernel is handed a data packet of the form: struct { const char *path; struct ViceIoctl vidata; int follow; } data; where struct ViceIoctl { caddr_t in, out; /* Data to be transferred in, or out */ short in_size; /* Size of input buffer <= 2K */ short out_size; /* Maximum size of output buffer, <= 2K */ }; The path must be a Coda file, otherwise the ioctl upcall will not be made. NNOOTTEE The data structures and code are a mess. We need to clean this up. We now proceed to document the individual calls: 0wpage 44..33.. rroooott AArrgguummeennttss iinn empty oouutt struct cfs_root_out { ViceFid VFid; } cfs_root; DDeessccrriippttiioonn This call is made to Venus during the initialization of the Coda filesystem. If the result is zero, the cfs_root structure contains the ViceFid of the root of the Coda filesystem. If a non-zero result is generated, its value is a platform dependent error code indicating the difficulty Venus encountered in locating the root of the Coda filesystem. 0wpage 44..44.. llooookkuupp SSuummmmaarryy Find the ViceFid and type of an object in a directory if it exists. AArrgguummeennttss iinn struct cfs_lookup_in { ViceFid VFid; char *name; /* Place holder for data. */ } cfs_lookup; oouutt struct cfs_lookup_out { ViceFid VFid; int vtype; } cfs_lookup; DDeessccrriippttiioonn This call is made to determine the ViceFid and filetype of a directory entry. The directory entry requested carries name name and Venus will search the directory identified by cfs_lookup_in.VFid. The result may indicate that the name does not exist, or that difficulty was encountered in finding it (e.g. due to disconnection). If the result is zero, the field cfs_lookup_out.VFid contains the targets ViceFid and cfs_lookup_out.vtype the coda_vtype giving the type of object the name designates. The name of the object is an 8 bit character string of maximum length CFS_MAXNAMLEN, currently set to 256 (including a 0 terminator.) It is extremely important to realize that Venus bitwise ors the field cfs_lookup.vtype with CFS_NOCACHE to indicate that the object should not be put in the kernel name cache. NNOOTTEE The type of the vtype is currently wrong. It should be coda_vtype. Linux does not take note of CFS_NOCACHE. It should. 0wpage 44..55.. ggeettaattttrr SSuummmmaarryy Get the attributes of a file. AArrgguummeennttss iinn struct cfs_getattr_in { ViceFid VFid; struct coda_vattr attr; /* XXXXX */ } cfs_getattr; oouutt struct cfs_getattr_out { struct coda_vattr attr; } cfs_getattr; DDeessccrriippttiioonn This call returns the attributes of the file identified by fid. EErrrroorrss Errors can occur if the object with fid does not exist, is unaccessible or if the caller does not have permission to fetch attributes. NNoottee Many kernel FS drivers (Linux, NT and Windows 95) need to acquire the attributes as well as the Fid for the instantiation of an internal "inode" or "FileHandle". A significant improvement in performance on such systems could be made by combining the _l_o_o_k_u_p and _g_e_t_a_t_t_r calls both at the Venus/kernel interaction level and at the RPC level. The vattr structure included in the input arguments is superfluous and should be removed. 0wpage 44..66.. sseettaattttrr SSuummmmaarryy Set the attributes of a file. AArrgguummeennttss iinn struct cfs_setattr_in { ViceFid VFid; struct coda_vattr attr; } cfs_setattr; oouutt empty DDeessccrriippttiioonn The structure attr is filled with attributes to be changed in BSD style. Attributes not to be changed are set to -1, apart from vtype which is set to VNON. Other are set to the value to be assigned. The only attributes which the FS driver may request to change are the mode, owner, groupid, atime, mtime and ctime. The return value indicates success or failure. EErrrroorrss A variety of errors can occur. The object may not exist, may be inaccessible, or permission may not be granted by Venus. 0wpage 44..77.. aacccceessss SSuummmmaarryy AArrgguummeennttss iinn struct cfs_access_in { ViceFid VFid; int flags; } cfs_access; oouutt empty DDeessccrriippttiioonn Verify if access to the object identified by VFid for operations described by flags is permitted. The result indicates if access will be granted. It is important to remember that Coda uses ACLs to enforce protection and that ultimately the servers, not the clients enforce the security of the system. The result of this call will depend on whether a _t_o_k_e_n is held by the user. EErrrroorrss The object may not exist, or the ACL describing the protection may not be accessible. 0wpage 44..88.. ccrreeaattee SSuummmmaarryy Invoked to create a file AArrgguummeennttss iinn struct cfs_create_in { ViceFid VFid; struct coda_vattr attr; int excl; int mode; char *name; /* Place holder for data. */ } cfs_create; oouutt struct cfs_create_out { ViceFid VFid; struct coda_vattr attr; } cfs_create; DDeessccrriippttiioonn This upcall is invoked to request creation of a file. The file will be created in the directory identified by VFid, its name will be name, and the mode will be mode. If excl is set an error will be returned if the file already exists. If the size field in attr is set to zero the file will be truncated. The uid and gid of the file are set by converting the CodaCred to a uid using a macro CRTOUID (this macro is platform dependent). Upon success the VFid and attributes of the file are returned. The Coda FS Driver will normally instantiate a vnode, inode or file handle at kernel level for the new object. EErrrroorrss A variety of errors can occur. Permissions may be insufficient. If the object exists and is not a file the error EISDIR is returned under Unix. NNOOTTEE The packing of parameters is very inefficient and appears to indicate confusion between the system call creat and the VFS operation create. The VFS operation create is only called to create new objects. This create call differs from the Unix one in that it is not invoked to return a file descriptor. The truncate and exclusive options, together with the mode, could simply be part of the mode as it is under Unix. There should be no flags argument; this is used in open (2) to return a file descriptor for READ or WRITE mode. The attributes of the directory should be returned too, since the size and mtime changed. 0wpage 44..99.. mmkkddiirr SSuummmmaarryy Create a new directory. AArrgguummeennttss iinn struct cfs_mkdir_in { ViceFid VFid; struct coda_vattr attr; char *name; /* Place holder for data. */ } cfs_mkdir; oouutt struct cfs_mkdir_out { ViceFid VFid; struct coda_vattr attr; } cfs_mkdir; DDeessccrriippttiioonn This call is similar to create but creates a directory. Only the mode field in the input parameters is used for creation. Upon successful creation, the attr returned contains the attributes of the new directory. EErrrroorrss As for create. NNOOTTEE The input parameter should be changed to mode instead of attributes. The attributes of the parent should be returned since the size and mtime changes. 0wpage 44..1100.. lliinnkk SSuummmmaarryy Create a link to an existing file. AArrgguummeennttss iinn struct cfs_link_in { ViceFid sourceFid; /* cnode to link *to* */ ViceFid destFid; /* Directory in which to place link */ char *tname; /* Place holder for data. */ } cfs_link; oouutt empty DDeessccrriippttiioonn This call creates a link to the sourceFid in the directory identified by destFid with name tname. The source must reside in the target's parent, i.e. the source must be have parent destFid, i.e. Coda does not support cross directory hard links. Only the return value is relevant. It indicates success or the type of failure. EErrrroorrss The usual errors can occur.0wpage 44..1111.. ssyymmlliinnkk SSuummmmaarryy create a symbolic link AArrgguummeennttss iinn struct cfs_symlink_in { ViceFid VFid; /* Directory to put symlink in */ char *srcname; struct coda_vattr attr; char *tname; } cfs_symlink; oouutt none DDeessccrriippttiioonn Create a symbolic link. The link is to be placed in the directory identified by VFid and named tname. It should point to the pathname srcname. The attributes of the newly created object are to be set to attr. EErrrroorrss NNOOTTEE The attributes of the target directory should be returned since its size changed. 0wpage 44..1122.. rreemmoovvee SSuummmmaarryy Remove a file AArrgguummeennttss iinn struct cfs_remove_in { ViceFid VFid; char *name; /* Place holder for data. */ } cfs_remove; oouutt none DDeessccrriippttiioonn Remove file named cfs_remove_in.name in directory identified by VFid. EErrrroorrss NNOOTTEE The attributes of the directory should be returned since its mtime and size may change. 0wpage 44..1133.. rrmmddiirr SSuummmmaarryy Remove a directory AArrgguummeennttss iinn struct cfs_rmdir_in { ViceFid VFid; char *name; /* Place holder for data. */ } cfs_rmdir; oouutt none DDeessccrriippttiioonn Remove the directory with name name from the directory identified by VFid. EErrrroorrss NNOOTTEE The attributes of the parent directory should be returned since its mtime and size may change. 0wpage 44..1144.. rreeaaddlliinnkk SSuummmmaarryy Read the value of a symbolic link. AArrgguummeennttss iinn struct cfs_readlink_in { ViceFid VFid; } cfs_readlink; oouutt struct cfs_readlink_out { int count; caddr_t data; /* Place holder for data. */ } cfs_readlink; DDeessccrriippttiioonn This routine reads the contents of symbolic link identified by VFid into the buffer data. The buffer data must be able to hold any name up to CFS_MAXNAMLEN (PATH or NAM??). EErrrroorrss No unusual errors. 0wpage 44..1155.. ooppeenn SSuummmmaarryy Open a file. AArrgguummeennttss iinn struct cfs_open_in { ViceFid VFid; int flags; } cfs_open; oouutt struct cfs_open_out { dev_t dev; ino_t inode; } cfs_open; DDeessccrriippttiioonn This request asks Venus to place the file identified by VFid in its cache and to note that the calling process wishes to open it with flags as in open(2). The return value to the kernel differs for Unix and Windows systems. For Unix systems the Coda FS Driver is informed of the device and inode number of the container file in the fields dev and inode. For Windows the path of the container file is returned to the kernel. EErrrroorrss NNOOTTEE Currently the cfs_open_out structure is not properly adapted to deal with the Windows case. It might be best to implement two upcalls, one to open aiming at a container file name, the other at a container file inode. 0wpage 44..1166.. cclloossee SSuummmmaarryy Close a file, update it on the servers. AArrgguummeennttss iinn struct cfs_close_in { ViceFid VFid; int flags; } cfs_close; oouutt none DDeessccrriippttiioonn Close the file identified by VFid. EErrrroorrss NNOOTTEE The flags argument is bogus and not used. However, Venus' code has room to deal with an execp input field, probably this field should be used to inform Venus that the file was closed but is still memory mapped for execution. There are comments about fetching versus not fetching the data in Venus vproc_vfscalls. This seems silly. If a file is being closed, the data in the container file is to be the new data. Here again the execp flag might be in play to create confusion: currently Venus might think a file can be flushed from the cache when it is still memory mapped. This needs to be understood. 0wpage 44..1177.. iiooccttll SSuummmmaarryy Do an ioctl on a file. This includes the pioctl interface. AArrgguummeennttss iinn struct cfs_ioctl_in { ViceFid VFid; int cmd; int len; int rwflag; char *data; /* Place holder for data. */ } cfs_ioctl; oouutt struct cfs_ioctl_out { int len; caddr_t data; /* Place holder for data. */ } cfs_ioctl; DDeessccrriippttiioonn Do an ioctl operation on a file. The command, len and data arguments are filled as usual. flags is not used by Venus. EErrrroorrss NNOOTTEE Another bogus parameter. flags is not used. What is the business about PREFETCHING in the Venus code? 0wpage 44..1188.. rreennaammee SSuummmmaarryy Rename a fid. AArrgguummeennttss iinn struct cfs_rename_in { ViceFid sourceFid; char *srcname; ViceFid destFid; char *destname; } cfs_rename; oouutt none DDeessccrriippttiioonn Rename the object with name srcname in directory sourceFid to destname in destFid. It is important that the names srcname and destname are 0 terminated strings. Strings in Unix kernels are not always null terminated. EErrrroorrss 0wpage 44..1199.. rreeaaddddiirr SSuummmmaarryy Read directory entries. AArrgguummeennttss iinn struct cfs_readdir_in { ViceFid VFid; int count; int offset; } cfs_readdir; oouutt struct cfs_readdir_out { int size; caddr_t data; /* Place holder for data. */ } cfs_readdir; DDeessccrriippttiioonn Read directory entries from VFid starting at offset and read at most count bytes. Returns the data in data and returns the size in size. EErrrroorrss NNOOTTEE This call is not used. Readdir operations exploit container files. We will re-evaluate this during the directory revamp which is about to take place. 0wpage 44..2200.. vvggeett SSuummmmaarryy instructs Venus to do an FSDB->Get. AArrgguummeennttss iinn struct cfs_vget_in { ViceFid VFid; } cfs_vget; oouutt struct cfs_vget_out { ViceFid VFid; int vtype; } cfs_vget; DDeessccrriippttiioonn This upcall asks Venus to do a get operation on an fsobj labelled by VFid. EErrrroorrss NNOOTTEE This operation is not used. However, it is extremely useful since it can be used to deal with read/write memory mapped files. These can be "pinned" in the Venus cache using vget and released with inactive. 0wpage 44..2211.. ffssyynncc SSuummmmaarryy Tell Venus to update the RVM attributes of a file. AArrgguummeennttss iinn struct cfs_fsync_in { ViceFid VFid; } cfs_fsync; oouutt none DDeessccrriippttiioonn Ask Venus to update RVM attributes of object VFid. This should be called as part of kernel level fsync type calls. The result indicates if the syncing was successful. EErrrroorrss NNOOTTEE Linux does not implement this call. It should. 0wpage 44..2222.. iinnaaccttiivvee SSuummmmaarryy Tell Venus a vnode is no longer in use. AArrgguummeennttss iinn struct cfs_inactive_in { ViceFid VFid; } cfs_inactive; oouutt none DDeessccrriippttiioonn This operation returns EOPNOTSUPP. EErrrroorrss NNOOTTEE This should perhaps be removed. 0wpage 44..2233.. rrddwwrr SSuummmmaarryy Read or write from a file AArrgguummeennttss iinn struct cfs_rdwr_in { ViceFid VFid; int rwflag; int count; int offset; int ioflag; caddr_t data; /* Place holder for data. */ } cfs_rdwr; oouutt struct cfs_rdwr_out { int rwflag; int count; caddr_t data; /* Place holder for data. */ } cfs_rdwr; DDeessccrriippttiioonn This upcall asks Venus to read or write from a file. EErrrroorrss NNOOTTEE It should be removed since it is against the Coda philosophy that read/write operations never reach Venus. I have been told the operation does not work. It is not currently used. 0wpage 44..2244.. ooddyymmoouunntt SSuummmmaarryy Allows mounting multiple Coda "filesystems" on one Unix mount point. AArrgguummeennttss iinn struct ody_mount_in { char *name; /* Place holder for data. */ } ody_mount; oouutt struct ody_mount_out { ViceFid VFid; } ody_mount; DDeessccrriippttiioonn Asks Venus to return the rootfid of a Coda system named name. The fid is returned in VFid. EErrrroorrss NNOOTTEE This call was used by David for dynamic sets. It should be removed since it causes a jungle of pointers in the VFS mounting area. It is not used by Coda proper. Call is not implemented by Venus. 0wpage 44..2255.. ooddyy__llooookkuupp SSuummmmaarryy Looks up something. AArrgguummeennttss iinn irrelevant oouutt irrelevant DDeessccrriippttiioonn EErrrroorrss NNOOTTEE Gut it. Call is not implemented by Venus. 0wpage 44..2266.. ooddyy__eexxppaanndd SSuummmmaarryy expands something in a dynamic set. AArrgguummeennttss iinn irrelevant oouutt irrelevant DDeessccrriippttiioonn EErrrroorrss NNOOTTEE Gut it. Call is not implemented by Venus. 0wpage 44..2277.. pprreeffeettcchh SSuummmmaarryy Prefetch a dynamic set. AArrgguummeennttss iinn Not documented. oouutt Not documented. DDeessccrriippttiioonn Venus worker.cc has support for this call, although it is noted that it doesn't work. Not surprising, since the kernel does not have support for it. (ODY_PREFETCH is not a defined operation). EErrrroorrss NNOOTTEE Gut it. It isn't working and isn't used by Coda. 0wpage 44..2288.. ssiiggnnaall SSuummmmaarryy Send Venus a signal about an upcall. AArrgguummeennttss iinn none oouutt not applicable. DDeessccrriippttiioonn This is an out-of-band upcall to Venus to inform Venus that the calling process received a signal after Venus read the message from the input queue. Venus is supposed to clean up the operation. EErrrroorrss No reply is given. NNOOTTEE We need to better understand what Venus needs to clean up and if it is doing this correctly. Also we need to handle multiple upcall per system call situations correctly. It would be important to know what state changes in Venus take place after an upcall for which the kernel is responsible for notifying Venus to clean up (e.g. open definitely is such a state change, but many others are maybe not). 0wpage 55.. TThhee mmiinniiccaacchhee aanndd ddoowwnnccaallllss The Coda FS Driver can cache results of lookup and access upcalls, to limit the frequency of upcalls. Upcalls carry a price since a process context switch needs to take place. The counterpart of caching the information is that Venus will notify the FS Driver that cached entries must be flushed or renamed. The kernel code generally has to maintain a structure which links the internal file handles (called vnodes in BSD, inodes in Linux and FileHandles in Windows) with the ViceFid's which Venus maintains. The reason is that frequent translations back and forth are needed in order to make upcalls and use the results of upcalls. Such linking objects are called ccnnooddeess. The current minicache implementations have cache entries which record the following: 1. the name of the file 2. the cnode of the directory containing the object 3. a list of CodaCred's for which the lookup is permitted. 4. the cnode of the object The lookup call in the Coda FS Driver may request the cnode of the desired object from the cache, by passing its name, directory and the CodaCred's of the caller. The cache will return the cnode or indicate that it cannot be found. The Coda FS Driver must be careful to invalidate cache entries when it modifies or removes objects. When Venus obtains information that indicates that cache entries are no longer valid, it will make a downcall to the kernel. Downcalls are intercepted by the Coda FS Driver and lead to cache invalidations of the kind described below. The Coda FS Driver does not return an error unless the downcall data could not be read into kernel memory. 55..11.. IINNVVAALLIIDDAATTEE No information is available on this call. 55..22.. FFLLUUSSHH AArrgguummeennttss None SSuummmmaarryy Flush the name cache entirely. DDeessccrriippttiioonn Venus issues this call upon startup and when it dies. This is to prevent stale cache information being held. Some operating systems allow the kernel name cache to be switched off dynamically. When this is done, this downcall is made. 55..33.. PPUURRGGEEUUSSEERR AArrgguummeennttss struct cfs_purgeuser_out {/* CFS_PURGEUSER is a venus->kernel call */ struct CodaCred cred; } cfs_purgeuser; DDeessccrriippttiioonn Remove all entries in the cache carrying the Cred. This call is issued when tokens for a user expire or are flushed. 55..44.. ZZAAPPFFIILLEE AArrgguummeennttss struct cfs_zapfile_out { /* CFS_ZAPFILE is a venus->kernel call */ ViceFid CodaFid; } cfs_zapfile; DDeessccrriippttiioonn Remove all entries which have the (dir vnode, name) pair. This is issued as a result of an invalidation of cached attributes of a vnode. NNOOTTEE Call is not named correctly in NetBSD and Mach. The minicache zapfile routine takes different arguments. Linux does not implement the invalidation of attributes correctly. 55..55.. ZZAAPPDDIIRR AArrgguummeennttss struct cfs_zapdir_out { /* CFS_ZAPDIR is a venus->kernel call */ ViceFid CodaFid; } cfs_zapdir; DDeessccrriippttiioonn Remove all entries in the cache lying in a directory CodaFid, and all children of this directory. This call is issued when Venus receives a callback on the directory. 55..66.. ZZAAPPVVNNOODDEE AArrgguummeennttss struct cfs_zapvnode_out { /* CFS_ZAPVNODE is a venus->kernel call */ struct CodaCred cred; ViceFid VFid; } cfs_zapvnode; DDeessccrriippttiioonn Remove all entries in the cache carrying the cred and VFid as in the arguments. This downcall is probably never issued. 55..77.. PPUURRGGEEFFIIDD SSuummmmaarryy AArrgguummeennttss struct cfs_purgefid_out { /* CFS_PURGEFID is a venus->kernel call */ ViceFid CodaFid; } cfs_purgefid; DDeessccrriippttiioonn Flush the attribute for the file. If it is a dir (odd vnode), purge its children from the namecache and remove the file from the namecache. 55..88.. RREEPPLLAACCEE SSuummmmaarryy Replace the Fid's for a collection of names. AArrgguummeennttss struct cfs_replace_out { /* cfs_replace is a venus->kernel call */ ViceFid NewFid; ViceFid OldFid; } cfs_replace; DDeessccrriippttiioonn This routine replaces a ViceFid in the name cache with another. It is added to allow Venus during reintegration to replace locally allocated temp fids while disconnected with global fids even when the reference counts on those fids are not zero. 0wpage 66.. IInniittiiaalliizzaattiioonn aanndd cclleeaannuupp This section gives brief hints as to desirable features for the Coda FS Driver at startup and upon shutdown or Venus failures. Before entering the discussion it is useful to repeat that the Coda FS Driver maintains the following data: 1. message queues 2. cnodes 3. name cache entries The name cache entries are entirely private to the driver, so they can easily be manipulated. The message queues will generally have clear points of initialization and destruction. The cnodes are much more delicate. User processes hold reference counts in Coda filesystems and it can be difficult to clean up the cnodes. It can expect requests through: 1. the message subsystem 2. the VFS layer 3. pioctl interface Currently the _p_i_o_c_t_l passes through the VFS for Coda so we can treat these similarly. 66..11.. RReeqquuiirreemmeennttss The following requirements should be accommodated: 1. The message queues should have open and close routines. On Unix the opening of the character devices are such routines. +o Before opening, no messages can be placed. +o Opening will remove any old messages still pending. +o Close will notify any sleeping processes that their upcall cannot be completed. +o Close will free all memory allocated by the message queues. 2. At open the namecache shall be initialized to empty state. 3. Before the message queues are open, all VFS operations will fail. Fortunately this can be achieved by making sure than mounting the Coda filesystem cannot succeed before opening. 4. After closing of the queues, no VFS operations can succeed. Here one needs to be careful, since a few operations (lookup, read/write, readdir) can proceed without upcalls. These must be explicitly blocked. 5. Upon closing the namecache shall be flushed and disabled. 6. All memory held by cnodes can be freed without relying on upcalls. 7. Unmounting the file system can be done without relying on upcalls. 8. Mounting the Coda filesystem should fail gracefully if Venus cannot get the rootfid or the attributes of the rootfid. The latter is best implemented by Venus fetching these objects before attempting to mount. NNOOTTEE NetBSD in particular but also Linux have not implemented the above requirements fully. For smooth operation this needs to be corrected. This is the main documentation for the CVF-FAT filesystem extension. 18Nov1998 Table of Contents: 1. The idea of CVF-FAT 2. Restrictions 3. Mount options 4. Description of the CVF-FAT interface 5. CVF Modules ------------------------------------------------------------------------------ 1. The idea of CVF-FAT ------------------------------------------------------------------------------ CVF-FAT is a FAT filesystem extension that provides a generic interface for Compressed Volume Files in FAT partitions. Popular CVF software, for example, are Microsoft's Doublespace/Drivespace and Stac's Stacker. Using the CVF-FAT interface, it is possible to load a module that handles all the low-level disk access that has to do with on-the-fly compression and decompression. Any other part of FAT filesystem access is still handled by the FAT, MSDOS or VFAT or even UMSDOS driver. CVF access works by redirecting certain low-level routines from the FAT driver to a loadable, CVF-format specific module. This module must fake a normal FAT filesystem to the FAT driver while doing all the extra stuff like compression and decompression silently. 2. Restrictions ------------------------------------------------------------------------------ - BMAP problems CVF filesystems cannot do bmap. It's impossible in principle. Thus all actions that require bmap do not work (swapping, writable mmapping). Read-only mmapping works because the FAT driver has a hack for this situation :) Well, writable mmapping should now work using the readpage interface function which has been hacked into the FAT driver just for CVF-FAT :) - attention, DOSEmu users You may have to unmount all CVF partitions before running DOSEmu depending on your configuration. If DOSEmu is configured to use wholedisk or partition access (this is often the case to let DOSEmu access compressed partitions) there's a risk of destroying your compressed partitions or crashing your system because of confused drivers. Note that it is always safe to redirect the compressed partitions with lredir or emufs.sys. Refer to the DOSEmu documentation for details. 3. Mount options ------------------------------------------------------------------------------ The CVF-FAT extension currently adds the following options to the FAT driver's standard options: cvf_format=xxx Forces the driver to use the CVF module "xxx" instead of auto-detection. Without this option, the CVF-FAT interface asks all currently loaded CVF modules whether they recognize the CVF. Therefore, this option is only necessary if the CVF format is not recognized correctly because of bugs or incompatibilities in the CVF modules. (It skips the detect_cvf call.) "xxx" may be the text "none" (without the quotes) to inhibit using any of the loaded CVF modules, just in case a CVF module insists on mounting plain FAT filesystems by misunderstanding. "xxx" may also be the text "autoload", which has a special meaning for a module loader, but does not skip auto-detection. If the kernel supports kmod, the cvf_format=xxx option also controls on-demand CVF module loading. Without this option, nothing is loaded on demand. With cvf_format=xxx, a module "xxx" is requested automatically before mounting the compressed filesystem (unless "xxx" is "none"). In case there is a difference between the CVF format name and the module name, setup aliases in your modules configuration. If the string "xxx" is "autoload", a non-existent module "cvf_autoload" is requested which can be used together with a special modules configuration (alias and pre-install statements) in order to load more than one CVF module, let them detect automatically which kind of CVF is to be mounted, and only keep the "right" module in memory. For examples please refer to the dmsdos documentation (ftp and http addresses see below). cvf_options=yyy Option string passed to the CVF module. I.e. only the "yyy" is passed (without the quotes). The documentation for each CVF module should explain it since it is interpreted only by the CVF module. Note that the string must not contain a comma (",") - this would lead to misinterpretation by the FAT driver, which would recognize the text after a comma as a FAT driver option and might get confused or print strange error messages. The documentation for the CVF module should offer a different separation symbol, for example the dot "." or the plus sign "+", which is only valid inside the string "yyy". 4. Description of the CVF-FAT interface ------------------------------------------------------------------------------ Assuming you want to write your own CVF module, you need to write a lot of interface functions. Most of them are covered in the kernel documentation you can find on the net, and thus won't be described here. They have been marked with "[...]" :-) Take a look at include/linux/fat_cvf.h. struct cvf_format { int cvf_version; char* cvf_version_text; unsigned long int flags; int (*detect_cvf) (struct super_block*sb); int (*mount_cvf) (struct super_block*sb,char*options); int (*unmount_cvf) (struct super_block*sb); [...] void (*zero_out_cluster) (struct inode*, int clusternr); } This structure defines the capabilities of a CVF module. It must be filled out completely by a CVF module. Consider it as a kind of form that is used to introduce the module to the FAT/CVF-FAT driver. It contains... - cvf_version: A version id which must be unique. Choose one. - cvf_version_text: A human readable version string that should be one short word describing the CVF format the module implements. This text is used for the cvf_format option. This name must also be unique. - flags: Bit coded flags, currently only used for a readpage/mmap hack that provides both mmap and readpage functionality. If CVF_USE_READPAGE is set, mmap is set to generic_file_mmap and readpage is caught and redirected to the cvf_readpage function. If it is not set, readpage is set to generic_readpage and mmap is caught and redirected to cvf_mmap. (If you want writable mmap use the readpage interface.) - detect_cvf: A function that is called to decide whether the filesystem is a CVF of the type the module supports. The detect_cvf function must return 0 for "NO, I DON'T KNOW THIS GARBAGE" or anything >0 for "YES, THIS IS THE KIND OF CVF I SUPPORT". The function must maintain the module usage counters for safety, i.e. do MOD_INC_USE_COUNT at the beginning and MOD_DEC_USE_COUNT at the end. The function *must not* assume that successful recognition would lead to a call of the mount_cvf function later. - mount_cvf: A function that sets up some values or initializes something additional to what has to be done when a CVF is mounted. This is called at the end of fat_read_super and must return 0 on success. Definitely, this function must increment the module usage counter by MOD_INC_USE_COUNT. This mount_cvf function is also responsible for interpreting a CVF module specific option string (the "yyy" from the FAT mount option "cvf_options=yyy") which cannot contain a comma (use for example the dot "." as option separator symbol). - unmount_cvf: A function that is called when the filesystem is unmounted. Most likely it only frees up some memory and calls MOD_DEC_USE_COUNT. The return value might be ignored (it currently is ignored). - [...]: All other interface functions are "caught" FAT driver functions, i.e. are executed by the FAT driver *instead* of the original FAT driver functions. NULL means use the original FAT driver functions instead. If you really want "no action", write a function that does nothing and hang it in instead. - zero_out_cluster: The zero_out_cluster function is called when the fat driver wants to zero out a (new) cluster. This is important for directories (mkdir). If it is NULL, the FAT driver defaults to overwriting the whole cluster with zeros. Note that clusternr is absolute, not relative to the provided inode. Notes: 1. The cvf_bmap function should be ignored. It really should never get called from somewhere. I recommend redirecting it to a panic or fatal error message so bugs show up immediately. 2. The cvf_writepage function is ignored. This is because the fat driver doesn't support it. This might change in future. I recommend setting it to NULL (i.e use default). int register_cvf_format(struct cvf_format*cvf_format); If you have just set up a variable containing the above structure, call this function to introduce your CVF format to the FAT/CVF-FAT driver. This is usually done in init_module. Be sure to check the return value. Zero means success, everything else causes a kernel message printed in the syslog describing the error that occurred. Typical errors are: - a module with the same version id is already registered or - too many CVF formats. Hack fs/fat/cvf.c if you need more. int unregister_cvf_format(struct cvf_format*cvf_format); This is usually called in cleanup_module. Return value =0 means success. An error only occurs if you try to unregister a CVF format that has not been previously registered. The code uses the version id to distinguish the modules, so be sure to keep it unique. 5. CVF Modules ------------------------------------------------------------------------------ Refer to the dmsdos module (the successor of the dmsdos filesystem) for a sample implementation. It can currently be found at ftp://fb9nt.uni-duisburg.de/pub/linux/dmsdos/dmsdos-x.y.z.tgz ftp://sunsite.unc.edu/pub/Linux/system/Filesystems/dosfs/dmsdos-x.y.z.tgz ftp://ftp.uni-stuttgart.de/pub/systems/linux/local/system/dmsdos-x.y.z.tgz (where x.y.z is to be replaced with the actual version number). Full documentation about dmsdos is included in the dmsdos package, but can also be found at http://fb9nt.uni-duisburg.de/mitarbeiter/gockel/software/dmsdos/index.html http://www.yk.rim.or.jp/~takafumi/dmsdos/index.html (in Japanese). Linux can read, but not write, OS/2 HPFS partitions. Mount options are the same as for msdos partitions. uid=nnn All files in the partition will be owned by user id nnn. gid=nnn All files in the partition will be in group nnn. umask=nnn The permission mask (see umask(1)) for the partition. conv=binary Data is returned exactly as is, with CRLFs. [default] conv=text (Carriage return, line feed) is replaced with newline. conv=auto Chooses, file by file, conv=binary or conv=text (by guessing) There are mount options unique to HPFS. case=lower Convert file names to lower case. [default] case=asis Return file names as is, in mixed case. nocheck Proceed even if "Improperly stopped flag is set" Case is not significant in filename matching, like real HPFS. Command line example mkdir -p /os2/c mount -t hpfs -o uid=100,gid=100 /dev/sda6 /os2/c /etc/fstab example /dev/sdb5 /d/f hpfs ro,uid=402,gid=402,umask=002 Mount options that are the same as for msdos and vfat partitions. gid=nnn All files in the partition will be in group nnn. uid=nnn All files in the partition will be owned by user id nnn. umask=nnn The permission mask (see umask(1)) for the partition. Mount options that are the same as vfat partitions. These are only useful when using discs encoded using Microsoft's Joliet extensions. iocharset=name Character set to use for converting from Unicode to ASCII. Joliet filenames are stored in Unicode format, but Unix for the most part doesn't know how to deal with Unicode. There is also an option of doing UTF8 translations with the utf8 option. utf8 Encode Unicode names in UTF8 format. Default is no. Mount options unique to the isofs filesystem. block=512 Set the block size for the disk to 512 bytes block=1024 Set the block size for the disk to 1024 bytes block=2048 Set the block size for the disk to 2048 bytes check=relaxed Matches filenames with different cases check=strict Matches only filenames with the exact same case cruft Try to handle badly formatted CDs. map=off Do not map non-Rock Ridge filenames to lower case map=normal Map non-Rock Ridge filenames to lower case map=acorn As map=normal but also apply Acorn extensions if present mode=xxx Sets the permissions on files to xxx nojoliet Ignore Joliet extensions if they are present. norock Ignore Rock Ridge extensions if they are present. unhide Show hidden files. Minix 2.0.0/2.0.2 subpartition support. ======================================= Minix subpartition support is provided in `linux/drivers/block/genhd.c'. Minix partitions are shown with the device name suffixed with an `@' followed by any detected subpartitions inside angle brackets, like this: Partition check: hda: hda1 hda2@ < hda5 hda6 > hda3 hda4 Usage ===== Add entries to /etc/fstab, change for your setup: /dev/hda5 /mnt/minix minix rw,noauto 0 0 /dev/hda6 /mnt/minix/usr minix rw,noauto 0 0 To mount your Minix filesystems: mount /mnt/minix # mount / mount /mnt/minix/usr # mount /usr Note ==== The first sector of a Minix 2.0.0/2.0.2 partition containing subpartitions looks like the master boot record (MBR) on the first sector of the hard disk. It has 1) a small loader program which loads the boot sector from the Minix root partition (usually hd?a). 2) a small partition table which gives the starting C/H/S values and sizes for the 4 Minix subpartitions. If there are no subpartitions then the first sector of the Minix partition contains the usual boot sector. Bug Reports =========== Anand Krishnamurthy Rajeev V. Pillai The ncpfs filesystem understands the NCP protocol, designed by the Novell Corporation for their NetWare(tm) product. NCP is functionally similar to the NFS used in the TCP/IP community. To mount a NetWare filesystem, you need a special mount program, which can be found in the ncpfs package. The home site for ncpfs is ftp.gwdg.de/pub/linux/misc/ncpfs, but sunsite and its many mirrors will have it as well. Related products are linware and mars_nwe, which will give Linux partial NetWare server functionality. Linware's home site is klokan.sh.cvut.cz/pub/linux/linware; mars_nwe can be found on ftp.gwdg.de/pub/linux/misc/ncpfs. NTFS Overview ============= To mount an NTFS volume, use the filesystem type 'ntfs'. The driver currently works only in read-only mode, with no fault-tolerance supported. If you enable the experimental write support, make sure you can recover from a complete loss of data and also always run chkdsk from within Microsoft Windows NT after performing a write to a NTFS partition from Linux to detect any problems as early as possible. For ftdisk support, limited success was reported with volume sets on top of the md driver, although mirror and stripe sets should work as well - if the md driver can be talked into using the same layout as Windows NT. Please note that the experimental write support is limited to Windows NT4 and earlier versions. The ntfs driver supports the following mount options: iocharset=name Character set to use when returning file names. Unlike VFAT, NTFS suppresses names that contain unconvertible characters utf8= Use UTF-8 for converting file names uni_xlate=,2 Use the VFAT-style encoding for file names outside the current character set. A boolean value will enable the feature, a value of 2 will enable the encoding as documented in vfat.txt: ':', (u & 0x3f), ((u>>6) & 0x3f), (u>>12), uid= gid= umask= These options work as documented in mount(8). By default, the files are owned by root and not readable by somebody else. posix= If enabled, the file system distinguishes between upper and lower case. The 8.3 alias names are presented as hard links instead of being suppressed. ROMFS - ROM FILE SYSTEM This is a quite dumb, read only filesystem, mainly for initial RAM disks of installation disks. It has grown up by the need of having modules linked at boot time. Using this filesystem, you get a very similar feature, and even the possibility of a small kernel, with a file system which doesn't take up useful memory from the router functions in the basement of your office. For comparison, both the older minix and xiafs (the latter is now defunct) filesystems, compiled as module need more than 20000 bytes, while romfs is less than a page, about 4000 bytes (assuming i586 code). Under the same conditions, the msdos filesystem would need about 30K (and does not support device nodes or symlinks), while the nfs module with nfsroot is about 57K. Furthermore, as a bit unfair comparison, an actual rescue disk used up 3202 blocks with ext2, while with romfs, it needed 3079 blocks. To create such a file system, you'll need a user program named genromfs. It is available via anonymous ftp on sunsite.unc.edu and its mirrors, in the /pub/Linux/system/recovery/ directory. As the name suggests, romfs could be also used (space-efficiently) on various read-only media, like (E)EPROM disks if someone will have the motivation.. :) However, the main purpose of romfs is to have a very small kernel, which has only this filesystem linked in, and then can load any module later, with the current module utilities. It can also be used to run some program to decide if you need SCSI devices, and even IDE or floppy drives can be loaded later if you use the "initrd"--initial RAM disk--feature of the kernel. This would not be really news flash, but with romfs, you can even spare off your ext2 or minix or maybe even affs filesystem until you really know that you need it. For example, a distribution boot disk can contain only the cd disk drivers (and possibly the SCSI drivers), and the ISO 9660 filesystem module. The kernel can be small enough, since it doesn't have other filesystems, like the quite large ext2fs module, which can then be loaded off the CD at a later stage of the installation. Another use would be for a recovery disk, when you are reinstalling a workstation from the network, and you will have all the tools/modules available from a nearby server, so you don't want to carry two disks for this purpose, just because it won't fit into ext2. romfs operates on block devices as you can expect, and the underlying structure is very simple. Every accessible structure begins on 16 byte boundaries for fast access. The minimum space a file will take is 32 bytes (this is an empty file, with a less than 16 character name). The maximum overhead for any non-empty file is the header, and the 16 byte padding for the name and the contents, also 16+14+15 = 45 bytes. This is quite rare however, since most file names are longer than 3 bytes, and shorter than 15 bytes. The layout of the filesystem is the following: offset content +---+---+---+---+ 0 | - | r | o | m | \ +---+---+---+---+ The ASCII representation of those bytes 4 | 1 | f | s | - | / (i.e. "-rom1fs-") +---+---+---+---+ 8 | full size | The number of accessible bytes in this fs. +---+---+---+---+ 12 | checksum | The checksum of the FIRST 512 BYTES. +---+---+---+---+ 16 | volume name | The zero terminated name of the volume, : : padded to 16 byte boundary. +---+---+---+---+ xx | file | : headers : Every multi byte value (32 bit words, I'll use the longwords term from now on) must be in big endian order. The first eight bytes identify the filesystem, even for the casual inspector. After that, in the 3rd longword, it contains the number of bytes accessible from the start of this filesystem. The 4th longword is the checksum of the first 512 bytes (or the number of bytes accessible, whichever is smaller). The applied algorithm is the same as in the AFFS filesystem, namely a simple sum of the longwords (assuming bigendian quantities again). For details, please consult the source. This algorithm was chosen because although it's not quite reliable, it does not require any tables, and it is very simple. The following bytes are now part of the file system; each file header must begin on a 16 byte boundary. offset content +---+---+---+---+ 0 | next filehdr|X| The offset of the next file header +---+---+---+---+ (zero if no more files) 4 | spec.info | Info for directories/hard links/devices +---+---+---+---+ 8 | size | The size of this file in bytes +---+---+---+---+ 12 | checksum | Covering the meta data, including the file +---+---+---+---+ name, and padding 16 | file name | The zero terminated name of the file, : : padded to 16 byte boundary +---+---+---+---+ xx | file data | : : Since the file headers begin always at a 16 byte boundary, the lowest 4 bits would be always zero in the next filehdr pointer. These four bits are used for the mode information. Bits 0..2 specify the type of the file; while bit 4 shows if the file is executable or not. The permissions are assumed to be world readable, if this bit is not set, and world executable if it is; except the character and block devices, they are never accessible for other than owner. The owner of every file is user and group 0, this should never be a problem for the intended use. The mapping of the 8 possible values to file types is the following: mapping spec.info means 0 hard link link destination [file header] 1 directory first file's header 2 regular file unused, must be zero [MBZ] 3 symbolic link unused, MBZ (file data is the link content) 4 block device 16/16 bits major/minor number 5 char device - " - 6 socket unused, MBZ 7 fifo unused, MBZ Note that hard links are specifically marked in this filesystem, but they will behave as you can expect (i.e. share the inode number). Note also that it is your responsibility to not create hard link loops, and creating all the . and .. links for directories. This is normally done correctly by the genromfs program. Please refrain from using the executable bits for special purposes on the socket and fifo special files, they may have other uses in the future. Additionally, please remember that only regular files, and symlinks are supposed to have a nonzero size field; they contain the number of bytes available directly after the (padded) file name. Another thing to note is that romfs works on file headers and data aligned to 16 byte boundaries, but most hardware devices and the block device drivers are unable to cope with smaller than block-sized data. To overcome this limitation, the whole size of the file system must be padded to an 1024 byte boundary. If you have any problems or suggestions concerning this file system, please contact me. However, think twice before wanting me to add features and code, because the primary and most important advantage of this file system is the small code. On the other hand, don't be alarmed, I'm not getting that much romfs related mail. Now I can understand why Avery wrote poems in the ARCnet docs to get some more feedback. :) romfs has also a mailing list, and to date, it hasn't received any traffic, so you are welcome to join it to discuss your ideas. :) It's run by ezmlm, so you can subscribe to it by sending a message to romfs-subscribe@shadow.banki.hu, the content is irrelevant. Pending issues: - Permissions and owner information are pretty essential features of a Un*x like system, but romfs does not provide the full possibilities. I have never found this limiting, but others might. - The file system is read only, so it can be very small, but in case one would want to write _anything_ to a file system, he still needs a writable file system, thus negating the size advantages. Possible solutions: implement write access as a compile-time option, or a new, similarly small writable filesystem for RAM disks. - Since the files are only required to have alignment on a 16 byte boundary, it is currently possibly suboptimal to read or execute files from the filesystem. It might be resolved by reordering file data to have most of it (i.e. except the start and the end) laying at "natural" boundaries, thus it would be possible to directly map a big portion of the file contents to the mm subsystem. - Compression might be an useful feature, but memory is quite a limiting factor in my eyes. - Where it is used? - Does it work on other architectures than intel and motorola? Have fun, Janos Farkas Smbfs is a filesystem that implements the SMB protocol, which is the protocol used by Windows for Workgroups, Windows 95 and Windows NT. Smbfs was inspired by Samba, the program written by Andrew Tridgell that turns any Unix host into a file server for DOS or Windows clients. See ftp://nimbus.anu.edu.au/pub/tridge/samba/ for this interesting program suite and much more information on SMB, NetBIOS over TCP/IP, and explanations for concepts like netbios name or share. To use smbfs, you must first install the Samba package (Samba-1.9.18p1 or later). This package includes the special smbmount utility needed to mount smbfs volumes. Refer to the smbmount(8) and smbmnt(8) manpages for the details regarding smbfs mounts. The smbmount utility reads the Samba smb.conf config file for some of its options, and at least one of these is important for smbfs operation. You should enable the TCP_NODELAY socket option, or else directory listings will be dramatically slower (under Win NT at least). Mount-Time Options Windows 95 has several bugs that affect SMB operations, and smbfs includes work-arounds for all of the bugs found (so far, at least.) These can be enabled at compile-time with the CONFIG_SMB_WIN95 kernel option. Unfortunately, some of the Win 95 work-arounds interact with Win NT bugs, so if you're using several different types of servers on your network you probably want to enable the work-arounds at mount time. To do this, answer `N' to the CONFIG_SMB_WIN95 option, and add the needed options listed below to the file mode argument of the mount command for the Win 95 servers. Option Value Effect Identify Win 95 Server 1 Enables bug fixes Use Core Attributes 2 Speeds up directory scans, only mtime Use Dir Attributes 4 Alternate way to get file attributes To apply the options, sum the values and prepend it to the file mode. For example, to use options 1 and 2 with file mode 755, you would specify 3755: mount /mnt/tmp -f 3755 Smbfs will print a message at mount time confirming the selected options. Note that _only_ Windows 95 servers require special treatment; using the "core attributes" option with Win NT will give trash timestamp values. To summarize, if your network includes both Win 95 and NT servers: (1) Do _not_ enable the CONFIG_SMB_WIN95 kernel option (2) Add the desired work-around options to the mount command for your Win 95 server(s). This is the implementation of the SystemV/Coherent filesystem for Linux. It implements all of - Xenix FS, - SystemV/386 FS, - Coherent FS. This is version beta 4. To install: * Answer the 'System V and Coherent filesystem support' question with 'y' when configuring the kernel. * To mount a disk or a partition, use mount [-r] -t sysv device mountpoint The file system type names -t sysv -t xenix -t coherent may be used interchangeably, but the last two will eventually disappear. Bugs in the present implementation: - Coherent FS: - The "free list interleave" n:m is currently ignored. - Only file systems with no filesystem name and no pack name are recognized. (See Coherent "man mkfs" for a description of these features.) - SystemV Release 2 FS: The superblock is only searched in the blocks 9, 15, 18, which corresponds to the beginning of track 1 on floppy disks. No support for this FS on hard disk yet. Please report any bugs and suggestions to Bruno Haible Pascal Haible Krzysztof G. Baranowski Bruno Haible USING UFS ========= mount -t ufs -o ufstype=type_of_ufs device dir UFS OPTIONS =========== ufstype=type_of_ufs UFS is a file system widely used in different operating systems. The problem are differences among implementations. Features of some implementations are undocumented, so its hard to recognize type of ufs automatically. That's why user must specify type of ufs manually by mount option ufstype. Possible values are: old old format of ufs default value, supported os read-only 44bsd used in FreeBSD, NetBSD, OpenBSD supported os read-write sun used in SunOS (Solaris) supported as read-write sunx86 used in SunOS for Intel (Solarisx86) supported as read-write nextstep used in NextStep supported as read-only nextstep-cd used for NextStep CDROMs (block_size == 2048) supported as read-only openstep used in OpenStep supported as read-only POSSIBLE PROBLEMS ================= There is still bug in reallocation of fragment, in file fs/ufs/balloc.c, line 364. But it seem working on current buffer cache configuration. BUG REPORTS =========== Any ufs bug report you can send to daniel.pirkl@email.cz (do not send partition tables bug reports.) Firstly, let me say that UMSDOS is going through some major code changes, and has some KNOWN BUGS (and quite a few unknown :-). Please read fs/umsdos/README-WIP.txt for more information on current status. Thanks. ---------------------------------------------------------------------------- Very short explanation for the impatient! Umsdos is a file system driver that run on top the MSDOS fs driver. It is written by Jacques Gelinas (jacques@solucorp.qc.ca) and is currently maintained by Matija Nalis (mnalis@jagor.srce.hr) Umsdos is not a file system per se, but a twist to make a boring one into a useful one. It gives you: long file names Permissions and owners Links Special files (devices, pipes...) All that is needed to be a linux root fs. There is plenty of documentation on it in the source. A formatted document made from those comments is available from sunsite.unc.edu:/pub/Linux/system/Filesystems/umsdos. You mount a DOS partition like this: mount -t umsdos /dev/hda3 /mnt ^ ---------| All options are passed to the msdos drivers. Option like uid,gid etc are given to msdos. The default behavior of Umsdos is to do the same thing as the msdos driver mostly passing commands to it without much processing. Again, this is the default. After doing the mount on a DOS partition, nothing special happens. This is why all mount options are passed to the msdos fs driver. Umsdos uses a special DOS file --linux-.--- to store the information which can't be handled by the normal MS-DOS filesystem. This is the trick. --linux-.--- is optional. There is one per directory. **** If --linux-.--- is missing, then Umsdos process the directory the same way the msdos driver does. Short file names, no goodies, default owner and permissions. So each directory may have or not this --linux-.--- Now, how to get those --linux-.---. \begin joke_section Well send me a directory content and I will send you one customised for you. $5 per directory. Add any applicable taxes. \end joke_section A utility umssync creates those. The kernel maintains them. It is available from the same directory above (sunsite) in the file umsdos_progs-0.7.tar.gz. A compiled version is available in umsdos_progs-0.7.bin.tar.gz. So in our example, after mounting mnt, we do umssync . This will promote this directory (a recursive option is available) to full umsdos capabilities (long name, etc.). However, an "ls -l" before and after won't show much difference. The files which were there are still there, but now you can do all this: chmod 644 * chown you.your_group * ls >THIS_IS.A.VERY.LONG.NAME ln -s toto tata ls -l Once a directory is promoted, all subdirectories created will inherit that promotion. What happens if you boot DOS and create files in those promoted directories ? Umsdos won't notice new files, but will signal removed files (it won't crash). Using umssync in /etc/rc will make sure the DOS directory is in sync with the --linux-.---. It is a good idea to put the following command in your RC file just after the "mount -a": mount -a /sbin/umssync -i+ -c+ -r99 /umsdos_mount_point (You put one for each umsdos mount point in the fstab) This will ensure nice operation. A umsdos.fsck is in the making, so you will be allowed to manage umsdos partitions in the same way other filesystems are, using the generic fsck front end. Hope this helps! USING VFAT ---------------------------------------------------------------------- To use the vfat filesystem, use the filesystem type 'vfat'. i.e. mount -t vfat /dev/fd0 /mnt No special partition formatter is required. mkdosfs will work fine if you want to format from within Linux. VFAT MOUNT OPTIONS ---------------------------------------------------------------------- codepage=### -- Sets the codepage for converting to shortname characters on FAT and VFAT filesystems. By default, codepage 437 is used. This is the default for the U.S. and some European countries. iocharset=name -- Character set to use for converting between 8 bit characters and 16 bit Unicode characters. Long filenames are stored on disk in Unicode format, but Unix for the most part doesn't know how to deal with Unicode. There is also an option of doing UTF8 translations with the utf8 option. utf8= -- UTF8 is the filesystem safe version of Unicode that is used by the console. It can be be enabled for the filesystem with this option. If 'uni_xlate' gets set, UTF8 gets disabled. uni_xlate= -- Translate unhandled Unicode characters to special escaped sequences. This would let you backup and restore filenames that are created with any Unicode characters. Until Linux supports Unicode for real, this gives you an alternative. Without this option, a '?' is used when no translation is possible. The escape character is ':' because it is otherwise illegal on the vfat filesystem. The escape sequence that gets used, where u is the unicode character, is: ':', (u & 0x3f), ((u>>6) & 0x3f), (u>>12), posix= -- Allow names of same letters, different case such as 'LongFileName' and 'longfilename' to coexist. This has some problems currently because 8.3 conflicts are not handled correctly for POSIX filesystem compliance. nonumtail= -- When creating 8.3 aliases, normally the alias will end in '~1' or tilde followed by some number. If this option is set, then if the filename is "longfilename.txt" and "longfile.txt" does not currently exist in the directory, 'longfile.txt' will be the short alias instead of 'longfi~1.txt'. quiet -- Stops printing certain warning messages. check=s|r|n -- Case sensitivity checking setting. s: strict, case sensitive r: relaxed, case insensitive n: normal, default setting, currently case insensitive : 0,1,yes,no,true,false TODO ---------------------------------------------------------------------- * When only shortnames exist, translate them from the codepage character set to the iocharset. Currently, translations only occur when longnames exist. To translate, first convert from codepage to Unicode and then to the output character set. * Need to get rid of the raw scanning stuff. Instead, always use a get next directory entry approach. The only thing left that uses raw scanning is the directory renaming code. * Fix the POSIX filesystem support to work in 8.3 space. This involves renaming aliases if a conflict occurs between a new filename and an old alias. This is quite a mess. POSSIBLE PROBLEMS ---------------------------------------------------------------------- * vfat_valid_longname does not properly checked reserved names. * When a volume name is the same as a directory name in the root directory of the filesystem, the directory name sometimes shows up as an empty file. * autoconv option does not work correctly. BUG REPORTS ---------------------------------------------------------------------- If you have trouble with the VFAT filesystem, mail bug reports to chaffee@bmrc.cs.berkeley.edu. Please specify the filename and the operation that gave you trouble. TEST SUITE ---------------------------------------------------------------------- If you plan to make any modifications to the vfat filesystem, please get the test suite that comes with the vfat distribution at http://bmrc.berkeley.edu/people/chaffee/vfat.html This tests quite a few parts of the vfat filesystem and additional tests for new features or untested features would be appreciated. NOTES ON THE STRUCTURE OF THE VFAT FILESYSTEM ---------------------------------------------------------------------- (This documentation was provided by Galen C. Hunt and lightly annotated by Gordon Chaffee). This document presents a very rough, technical overview of my knowledge of the extended FAT file system used in Windows NT 3.5 and Windows 95. I don't guarantee that any of the following is correct, but it appears to be so. The extended FAT file system is almost identical to the FAT file system used in DOS versions up to and including 6.223410239847 :-). The significant change has been the addition of long file names. These names support up to 255 characters including spaces and lower case characters as opposed to the traditional 8.3 short names. Here is the description of the traditional FAT entry in the current Windows 95 filesystem: struct directory { // Short 8.3 names unsigned char name[8]; // file name unsigned char ext[3]; // file extension unsigned char attr; // attribute byte unsigned char lcase; // Case for base and extension unsigned char ctime_ms; // Creation time, milliseconds unsigned char ctime[2]; // Creation time unsigned char cdate[2]; // Creation date unsigned char adate[2]; // Last access date unsigned char reserved[2]; // reserved values (ignored) unsigned char time[2]; // time stamp unsigned char date[2]; // date stamp unsigned char start[2]; // starting cluster number unsigned char size[4]; // size of the file }; The lcase field specifies if the base and/or the extension of an 8.3 name should be capitalized. This field does not seem to be used by Windows 95 but it is used by Windows NT. The case of filenames is not completely compatible from Windows NT to Windows 95. It is not completely compatible in the reverse direction, however. Filenames that fit in the 8.3 namespace and are written on Windows NT to be lowercase will show up as uppercase on Windows 95. Note that the "start" and "size" values are actually little endian integer values. The descriptions of the fields in this structure are public knowledge and can be found elsewhere. With the extended FAT system, Microsoft has inserted extra directory entries for any files with extended names. (Any name which legally fits within the old 8.3 encoding scheme does not have extra entries.) I call these extra entries slots. Basically, a slot is a specially formatted directory entry which holds up to 13 characters of a file's extended name. Think of slots as additional labeling for the directory entry of the file to which they correspond. Microsoft prefers to refer to the 8.3 entry for a file as its alias and the extended slot directory entries as the file name. The C structure for a slot directory entry follows: struct slot { // Up to 13 characters of a long name unsigned char id; // sequence number for slot unsigned char name0_4[10]; // first 5 characters in name unsigned char attr; // attribute byte unsigned char reserved; // always 0 unsigned char alias_checksum; // checksum for 8.3 alias unsigned char name5_10[12]; // 6 more characters in name unsigned char start[2]; // starting cluster number unsigned char name11_12[4]; // last 2 characters in name }; If the layout of the slots looks a little odd, it's only because of Microsoft's efforts to maintain compatibility with old software. The slots must be disguised to prevent old software from panicking. To this end, a number of measures are taken: 1) The attribute byte for a slot directory entry is always set to 0x0f. This corresponds to an old directory entry with attributes of "hidden", "system", "read-only", and "volume label". Most old software will ignore any directory entries with the "volume label" bit set. Real volume label entries don't have the other three bits set. 2) The starting cluster is always set to 0, an impossible value for a DOS file. Because the extended FAT system is backward compatible, it is possible for old software to modify directory entries. Measures must be taken to ensure the validity of slots. An extended FAT system can verify that a slot does in fact belong to an 8.3 directory entry by the following: 1) Positioning. Slots for a file always immediately proceed their corresponding 8.3 directory entry. In addition, each slot has an id which marks its order in the extended file name. Here is a very abbreviated view of an 8.3 directory entry and its corresponding long name slots for the file "My Big File.Extension which is long": Note that the slots are stored from last to first. Slots are numbered from 1 to N. The Nth slot is or'ed with 0x40 to mark it as the last one. 2) Checksum. Each slot has an "alias_checksum" value. The checksum is calculated from the 8.3 name using the following algorithm: for (sum = i = 0; i < 11; i++) { sum = (((sum&1)<<7)|((sum&0xfe)>>1)) + name[i] } 3) If there is free space in the final slot, a Unicode NULL (0x0000) is stored after the final character. After that, all unused characters in the final slot are set to Unicode 0xFFFF. Finally, note that the extended name is stored in Unicode. Each Unicode character takes two bytes. /* -*- auto-fill -*- */ Overview of the Virtual File System Richard Gooch 23-APR-1999 Conventions used in this document
================================= Each section in this document will have the string "
" at the right-hand side of the section title. Each subsection will have "" at the right-hand side. These strings are meant to make it easier to search through the document. NOTE that the master copy of this document is available online at: http://www.atnf.csiro.au/~rgooch/linux/docs/vfs.txt What is it?
=========== The Virtual File System (otherwise known as the Virtual Filesystem Switch) is the software layer in the kernel that provides the filesystem interface to userspace programmes. It also provides an abstraction within the kernel which allows different filesystem implementations to co-exist. A Quick Look At How It Works
============================ In this section I'll briefly describe how things work, before launching into the details. I'll start with describing what happens when user programmes open and manipulate files, and then look from the other view which is how a filesystem is supported and subsequently mounted. Opening a File -------------- The VFS implements the open(2) system call. The pathname argument is used by the VFS to search through the directory entry cache (dentry cache or "dcache"). This provides a very fast lookup mechanism to translate a pathname (filename) into a specific dentry. An individual dentry usually has a pointer to an inode. Inodes are the things that live on disc drives, and can be regular files (you know: those things that you write data into), directories, FIFOs and other beasts. Dentries live in RAM and are never saved to disc: they exist only for performance. Inodes live on disc and are copied into memory when required. Later any changes are written back to disc. The inode that lives in RAM is a VFS inode, and it is this which the dentry points to. The dcache is meant to be a view into your entire filespace. Unlike Linus, most of us losers can't fit enough dentries into RAM to cover all of our filespace, so the dcache has bits missing. In order to resolve your pathname into a dentry, the VFS may have to resort to creating dentries along the way, and then loading the inode. This is done by looking up the inode. To lookup an inode (usually read from disc) requires that the VFS calls the lookup() method of the parent directory inode. This method is installed by the specific filesystem implementation that the inode lives in. There will be more on this later. Once the VFS has the required dentry (and hence the inode), we can do all those boring things like open(2) the file, or stat(2) it to peek at the inode data. The stat(2) operation is fairly simple: once the VFS has the dentry, it peeks at the inode data and passes some of it back to userspace. Opening a file requires another operation: allocation of a file structure (this is the kernel-side implementation of file descriptors). The freshly allocated file structure is initialised with a pointer to the dentry and a set of file operation member functions. These are taken from the inode data. The open() file method is then called so the specific filesystem implementation can do it's work. You can see that this is another switch performed by the VFS. The file structure is placed into the file descriptor table for the process. Reading, writing and closing files (and other assorted VFS operations) is done by using the userspace file descriptor to grab the appropriate file structure, and then calling the required file structure method function to do whatever is required. For as long as the file is open, it keeps the dentry "open" (in use), which in turn means that the VFS inode is still in use. Registering and Mounting a Filesystem ------------------------------------- If you want to support a new kind of filesystem in the kernel, all you need to do is call register_filesystem(). You pass a structure describing the filesystem implementation (struct file_system_type) which is then added to an internal table of supported filesystems. You can do: % cat /proc/filesystems to see what filesystems are currently available on your system. When a request is made to mount a block device onto a directory in your filespace the VFS will call the appropriate method for the specific filesystem. The dentry for the mount point will then be updated to point to the root inode for the new filesystem. It's now time to look at things in more detail. struct file_system_type
======================= This describes the filesystem. As of kernel 2.1.99, the following members are defined: struct file_system_type { const char *name; int fs_flags; struct super_block *(*read_super) (struct super_block *, void *, int); struct file_system_type * next; }; name: the name of the filesystem type, such as "ext2", "iso9660", "msdos" and so on fs_flags: various flags (e.g. FS_REQUIRES_DEV, FS_NO_DCACHE, etc.) read_super: the method to call when a new instance of this filesystem should be mounted next: for internal VFS use: you should initialise this to NULL The read_super() method has the following arguments: struct super_block *sb: the superblock structure. This is partially initialised by the VFS and the rest must be initialised by the read_super() method void *data: arbitrary mount options, usually comes as an ASCII string int silent: whether or not to be silent on error The read_super() method must determine if the block device specified in the superblock contains a filesystem of the type the method supports. On success the method returns the superblock pointer, on failure it returns NULL. The most interesting member of the superblock structure that the read_super() method fills in is the "s_op" field. This is a pointer to a "struct super_operations" which describes the next level of the filesystem implementation. struct super_operations
======================= This describes how the VFS can manipulate the superblock of your filesystem. As of kernel 2.1.99, the following members are defined: struct super_operations { void (*read_inode) (struct inode *); void (*write_inode) (struct inode *); void (*put_inode) (struct inode *); void (*delete_inode) (struct inode *); int (*notify_change) (struct dentry *, struct iattr *); void (*put_super) (struct super_block *); void (*write_super) (struct super_block *); int (*statfs) (struct super_block *, struct statfs *, int); int (*remount_fs) (struct super_block *, int *, char *); void (*clear_inode) (struct inode *); }; All methods are called without any locks being held, unless otherwise noted. This means that most methods can block safely. All methods are only called from a process context (i.e. not from an interrupt handler or bottom half). read_inode: this method is called to read a specific inode from the mounted filesystem. The "i_ino" member in the "struct inode" will be initialised by the VFS to indicate which inode to read. Other members are filled in by this method write_inode: this method is called when the VFS needs to write an inode to disc put_inode: called when the VFS inode is removed from the inode cache. This method is optional delete_inode: called when the VFS wants to delete an inode notify_change: called when VFS inode attributes are changed. If this is NULL the VFS falls back to the write_inode() method. This is called with the kernel lock held put_super: called when the VFS wishes to free the superblock (i.e. unmount). This is called with the superblock lock held write_super: called when the VFS superblock needs to be written to disc. This method is optional statfs: called when the VFS needs to get filesystem statistics. This is called with the kernel lock held remount_fs: called when the filesystem is remounted. This is called with the kernel lock held clear_inode: called then the VFS clears the inode. Optional The read_inode() method is responsible for filling in the "i_op" field. This is a pointer to a "struct inode_operations" which describes the methods that can be performed on individual inodes. struct inode_operations
======================= This describes how the VFS can manipulate an inode in your filesystem. As of kernel 2.1.99, the following members are defined: struct inode_operations { struct file_operations * default_file_ops; int (*create) (struct inode *,struct dentry *,int); int (*lookup) (struct inode *,struct dentry *); int (*link) (struct dentry *,struct inode *,struct dentry *); int (*unlink) (struct inode *,struct dentry *); int (*symlink) (struct inode *,struct dentry *,const char *); int (*mkdir) (struct inode *,struct dentry *,int); int (*rmdir) (struct inode *,struct dentry *); int (*mknod) (struct inode *,struct dentry *,int,int); int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *); int (*readlink) (struct dentry *, char *,int); struct dentry * (*follow_link) (struct dentry *, struct dentry *); int (*readpage) (struct file *, struct page *); int (*writepage) (struct file *, struct page *); int (*bmap) (struct inode *,int); void (*truncate) (struct inode *); int (*permission) (struct inode *, int); int (*smap) (struct inode *,int); int (*updatepage) (struct file *, struct page *, const char *, unsigned long, unsigned int, int); int (*revalidate) (struct dentry *); }; default_file_ops: this is a pointer to a "struct file_operations" which describes how to manipulate open files create: called by the open(2) and creat(2) system calls. Only required if you want to support regular files. The dentry you get should not have an inode (i.e. it should be a negative dentry). Here you will probably call d_instantiate() with the dentry and the newly created inode lookup: called when the VFS needs to lookup an inode in a parent directory. The name to look for is found in the dentry. This method must call d_add() to insert the found inode into the dentry. The "i_count" field in the inode structure should be incremented. If the named inode does not exist a NULL inode should be inserted into the dentry (this is called a negative dentry). Returning an error code from this routine must only be done on a real error, otherwise creating inodes with system calls like create(2), mknod(2), mkdir(2) and so on will fail. If you wish to overload the dentry methods then you should initialise the "d_dop" field in the dentry; this is a pointer to a struct "dentry_operations". This method is called with the directory semaphore held link: called by the link(2) system call. Only required if you want to support hard links. You will probably need to call d_instantiate() just as you would in the create() method unlink: called by the unlink(2) system call. Only required if you want to support deleting inodes symlink: called by the symlink(2) system call. Only required if you want to support symlinks. You will probably need to call d_instantiate() just as you would in the create() method mkdir: called by the mkdir(2) system call. Only required if you want to support creating subdirectories. You will probably need to call d_instantiate() just as you would in the create() method rmdir: called by the rmdir(2) system call. Only required if you want to support deleting subdirectories mknod: called by the mknod(2) system call to create a device (char, block) inode or a named pipe (FIFO) or socket. Only required if you want to support creating these types of inodes. You will probably need to call d_instantiate() just as you would in the create() method readlink: called by the readlink(2) system call. Only required if you want to support reading symbolic links follow_link: called by the VFS to follow a symbolic link to the inode it points to. Only required if you want to support symbolic links struct file_operations
====================== This describes how the VFS can manipulate an open file. As of kernel 2.1.99, the following members are defined: struct file_operations { loff_t (*llseek) (struct file *, loff_t, int); ssize_t (*read) (struct file *, char *, size_t, loff_t *); ssize_t (*write) (struct file *, const char *, size_t, loff_t *); int (*readdir) (struct file *, void *, filldir_t); unsigned int (*poll) (struct file *, struct poll_table_struct *); int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long); int (*mmap) (struct file *, struct vm_area_struct *); int (*open) (struct inode *, struct file *); int (*release) (struct inode *, struct file *); int (*fsync) (struct file *, struct dentry *); int (*fasync) (struct file *, int); int (*check_media_change) (kdev_t dev); int (*revalidate) (kdev_t dev); int (*lock) (struct file *, int, struct file_lock *); }; llseek: called when the VFS needs to move the file position index read: called by the read(2) system call write: called by the write(2) system call readdir: called when the VFS needs to read the directory contents poll: called by the VFS when a process wants to check if there is activity on this file and (optionally) go to sleep until there is activity ioctl: called by the ioctl(2) system call mmap: called by the mmap(2) system call open: called by the VFS when an inode should be opened. When the VFS opens a file, it creates a new "struct file" and initialises the "f_op" file operations member with the "default_file_ops" field in the inode structure. It then calls the open method for the newly allocated file structure. You might think that the open method really belongs in "struct inode_operations", and you may be right. I think it's done the way it is because it makes filesystems simpler to implement. The open() method is a good place to initialise the "private_data" member in the file structure if you want to point to a device structure release: called when the last reference to an open file is closed fsync: called by the fsync(2) system call fasync: called by the fcntl(2) system call when asynchronous (non-blocking) mode is enabled for a file Note that the file operations are implemented by the specific filesystem in which the inode resides. When opening a device node (character or block special) most filesystems will call special support routines in the VFS which will locate the required device driver information. These support routines replace the filesystem file operations with those for the device driver, and then proceed to call the new open() method for the file. This is how opening a device file in the filesystem eventually ends up calling the device driver open() method. Note the devfs (the Device FileSystem) has a more direct path from device node to device driver (this is an unofficial kernel patch). struct dentry_operations
======================== This describes how a filesystem can overload the standard dentry operations. Dentries and the dcache are the domain of the VFS and the individual filesystem implementations. Device drivers have no business here. As of kernel 2.1.99, the following members are defined: struct dentry_operations { int (*d_revalidate)(struct dentry *); int (*d_hash) (struct dentry *, struct qstr *); int (*d_compare) (struct dentry *, struct qstr *, struct qstr *); void (*d_delete)(struct dentry *); void (*d_release)(struct dentry *); void (*d_iput)(struct dentry *, struct inode *); }; d_revalidate: called when the VFS needs to revalidate a dentry d_hash: called when the VFS adds a dentry to the hash table d_compare: called when a dentry should be compared with another d_delete: called when the last reference to a dentry is deleted. This means no-one is using the dentry, however it is still valid and in the dcache d_release: called when a dentry is deallocated d_iput: called when a dentry loses its inode (just prior to its being deallocated). The default when this is NULL is that the VFS calls iput(). If you define this method, you must call iput() yourself Each dentry has a pointer to its parent dentry, as well as a hash list of child dentries. Child dentries are basically like files in a directory. There are a number of functions defined which permit a filesystem to manipulate dentries: dget: open a new handle for an existing dentry (this just increments the usage count) dput: close a handle for a dentry (decrements the usage count). If the usage count drops to 0, the "d_delete" method is called and the dentry is placed on the unused list if the dentry is still in its parents hash list. Putting the dentry on the unused list just means that if the system needs some RAM, it goes through the unused list of dentries and deallocates them. If the dentry has already been unhashed and the usage count drops to 0, the dentry is deallocated after the "d_delete" method is called d_drop: this unhashes a dentry from its parents hash list. A subsequent call to dput() will deallocate the dentry if its usage count drops to 0 d_delete: delete a dentry. If there are no other open references to the dentry then the dentry is turned into a negative dentry (the d_iput() method is called). If there are other references, then d_drop() is called instead d_add: add a dentry to its parents hash list and then calls d_instantiate() d_instantiate: add a dentry to the alias hash list for the inode and updates the "d_inode" member. The "i_count" member in the inode structure should be set/incremented. If the inode pointer is NULL, the dentry is called a "negative dentry". This function is commonly called when an inode is created for an existing negative dentry 00-INDEX - this file 3c505.txt - information on the 3Com EtherLink Plus (3c505) driver. 6pack.txt - info on the 6pack protocol, an alternative to KISS for AX.25 Configurable - info on some of the configurable network parameters DLINK.txt - info on the D-Link DE-600/DE-620 parallel port pocket adapters PLIP.txt - PLIP: The Parallel Line Internet Protocol device driver alias.txt - info on using alias network devices arcnet-hardware.txt - tons of info on ARCnet, hubs, jumper settings for ARCnet cards, etc. arcnet.txt - info on the using the ARCnet driver itself. ax25.txt - info on using AX.25 and NET/ROM code for Linux baycom.txt - info on the driver for Baycom style amateur radio modems cops.txt - info on the COPS LocalTalk Linux driver cs89x0.txt - the Crystal LAN (CS8900/20-based) Ethernet ISA adapter driver de4x5.txt - the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver depca.txt - the Digital DEPCA/EtherWORKS DE1?? and DE2?? LANCE Ethernet driver dgrs.txt - the Digi International RightSwitch SE-X Ethernet driver eql.txt - serial IP load balancing ethertap.txt - the Ethertap user space packet reception and transmission driver ewrk3.txt - the Digital EtherWORKS 3 DE203/4/5 Ethernet driver filter.txt - Linux Socket Filtering framerelay.txt - info on using Frame Relay/Data Link Connection Identifier (DLCI). ip-sysctl.txt - /proc/sys/net/ipv4/* variables ip_dynaddr.txt - IP dynamic address hack e.g. for auto-dialup links ipddp.txt - AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation lapb-module.txt - programming information of the LAPB module. ltpc.txt - the Apple or Farallon LocalTalk PC card driver multicast.txt - Behaviour of cards under Multicast ncsa-telnet - notes on how NCSA telnet (DOS) breaks with MTU discovery enabled. net-modules.txt - info and "insmod" parameters for all network driver modules. policy-routing.txt - IP policy-based routing ppp.txt - info on what software you should use to run PPP. pt.txt - the Gracilis Packetwin AX.25 device driver routing.txt - the new routing mechanism shaper.txt - info on the module that can shape/limit transmitted traffic. smc9.txt - the driver for SMC's 9000 series of Ethernet cards soundmodem.txt - Linux driver for sound cards as AX.25 modems tcp.txt - short blurb on how TCP output takes place. tulip.txt - info on using DEC 21040/21041/21140 based PCI Ethernet cards. vortex.txt - info on using 3Com Vortex (3c590, 3c592, 3c595, 3c597) Ethernet cards. wan-router.txt - Wan router documentation wanpipe.txt - WANPIPE(tm) Multiprotocol WAN Driver for Linux WAN Router wavelan.txt - AT&T GIS (nee NCR) WaveLAN card: An Ethernet-like radio transceiver x25.txt - general info on X.25 development. x25-iface.txt - description of the X.25 Packet Layer to LAPB device interface. z8530drv.txt - info about Linux driver for Z8530 based HDLC cards for AX.25 The 3Com Etherlink Plus (3c505) driver. This driver now uses DMA. There is currently no support for PIO operation. The default DMA channel is 6; this is _not_ autoprobed, so you must make sure you configure it correctly. If loading the driver as a module, you can do this with "modprobe 3c505 dma=n". If the driver is linked statically into the kernel, you must either use an "ether=" statement on the command line, or change the definition of ELP_DMA in 3c505.h. The driver will warn you if it has to fall back on the compiled in default DMA channel. If no base address is given at boot time, the driver will autoprobe ports 0x300, 0x280 and 0x310 (in that order). If no IRQ is given, the driver will try to probe for it. The driver can be used as a loadable module. See net-modules.txt for details of the parameters it can take. Theoretically, one instance of the driver can now run multiple cards, in the standard way (when loading a module, say "modprobe 3c505 io=0x300,0x340 irq=10,11 dma=6,7" or whatever). I have not tested this, though. The driver may now support revision 2 hardware; the dependency on being able to read the host control register has been removed. This is also untested, since I don't have a suitable card. Known problems: I still see "DMA upload timed out" messages from time to time. These seem to be fairly non-fatal though. The card is old and slow. To do: Improve probe/setup code Test multicast and promiscuous operation Authors: The driver is mainly written by Craig Southeren, email . Parts of the driver (adapting the driver to 1.1.4+ kernels, IRQ/address detection, some changes) and this README by Juha Laiho . DMA mode, more fixes, etc, by Philip Blundell Multicard support, Software configurable DMA, etc., by Christopher Collins This is the 6pack-mini-HOWTO, written by Andreas Knsgen DG3KQ Internet: ajk@iehk.rwth-aachen.de AMPR-net: dg3kq@db0pra.ampr.org AX.25: dg3kq@db0ach.#nrw.deu.eu Last update: April 7, 1998 1. What is 6pack, and what are the advantages to KISS? 6pack is a transmission protocol for data exchange between the PC and the TNC over a serial line. It can be used as an alternative to KISS. 6pack has two major advantages: - The PC is given full control over the radio channel. Special control data is exchanged between the PC and the TNC so that the PC knows at any time if the TNC is receiving data, if a TNC buffer underrun or overrun has occurred, if the PTT is set and so on. This control data is processed at a higher priority than normal data, so a data stream can be interrupted at any time to issue an important event. This helps to improve the channel access and timing algorithms as everything is computed in the PC. It would even be possible to experiment with something completely different from the known CSMA and DAMA channel access methods. This kind of real-time control is especially important to supply several TNCs that are connected between each other and the PC by a daisy chain (however, this feature is not supported yet by the Linux 6pack driver). - Each packet transferred over the serial line is supplied with a checksum, so it is easy to detect errors due to problems on the serial line. Received packets that are corrupt are not passed on to the AX.25 layer. Damaged packets that the TNC has received from the PC are not transmitted. More details about 6pack are described in the file 6pack.ps that is located in the doc directory of the AX.25 utilities package. 2. Who has developed the 6pack protocol? The 6pack protocol has been developed by Ekki Plicht DF4OR, Henning Rech DF9IC and Gunter Jost DK7WJ. A driver for 6pack, written by Gunter Jost and Matthias Welwarsky DG2FEF, comes along with the PC version of FlexNet. They have also written a firmware for TNCs to perform the 6pack protocol (see section 4 below). 3. Where can I get the latest version of 6pack for LinuX? At the moment, the 6pack stuff can obtained via anonymous ftp from db0bm.automation.fh-aachen.de. In the directory /incoming/dg3kq, there is a file named 6pack.tgz. 4. Preparing the TNC for 6pack operation To be able to use 6pack, a special firmware for the TNC is needed. The EPROM of a newly bought TNC does not contain 6pack, so you will have to program an EPROM yourself. The image file for 6pack EPROMs should be available on any packet radio box where PC/FlexNet can be found. The name of the file is 6pack.bin. This file is copyrighted and maintained by the FlexNet team. It can be used under the terms of the license that comes along with PC/FlexNet. Please do not ask me about the internals of this file as I don't know anything about it. I used a textual description of the 6pack protocol to program the Linux driver. TNCs contain a 64kByte EPROM, the lower half of which is used for the firmware/KISS. The upper half is either empty or is sometimes programmed with software called TAPR. In the latter case, the TNC is supplied with a DIP switch so you can easily change between the two systems. When programming a new EPROM, one of the systems is replaced by 6pack. It is useful to replace TAPR, as this software is rarely used nowadays. If your TNC is not equipped with the switch mentioned above, you can build in one yourself that switches over the highest address pin of the EPROM between HIGH and LOW level. After having inserted the new EPROM and switched to 6pack, apply power to the TNC for a first test. The connect and the status LED are lit for about a second if the firmware initialises the TNC correctly. 5. Building and installing the 6pack driver The driver has been tested with kernel version 2.1.90. Use with older kernels may lead to a compilation error because the interface to a kernel function has been changed in the 2.1.8x kernels. How to turn on 6pack support: - In the linux kernel configuration program, select the code maturity level options menu and turn on the prompting for development drivers. - Select the amateur radio support menu and turn on the serial port 6pack driver. - Compile and install the kernel and the modules. To use the driver, the kissattach program delivered with the AX.25 utilities has to be modified. - Do a cd to the directory that holds the kissattach sources. Edit the kissattach.c file. At the top, insert the following lines: #ifndef N_6PACK #define N_6PACK (N_AX25+1) #endif Then find the line int disc = N_AX25; and replace N_AX25 by N_6PACK. - Recompile kissattach. Rename it to spattach to avoid confusions. Installing the driver: - Do an insmod 6pack. Look at your /var/log/messages file to check if the module has printed its initialization message. - Do a spattach as you would launch kissattach when starting a KISS port. Check if the kernel prints the message '6pack: TNC found'. - From here, everything should work as if you were setting up a KISS port. The only difference is that the network device that represents the 6pack port is called sp instead of sl or ax. So, sp0 would be the first 6pack port. Although the driver has been tested on various platforms, I still declare it ALPHA. BE CAREFUL! Sync your disks before insmoding the 6pack module and spattaching. Watch out if your computer behaves strangely. Read section 6 of this file about known problems. Note that the connect and status LEDs of the TNC are controlled in a different way than they are when the TNC is used with PC/FlexNet. When using FlexNet, the connect LED is on if there is a connection; the status LED is on if there is data in the buffer of the PC's AX.25 engine that has to be transmitted. Under Linux, the 6pack layer is beyond the AX.25 layer, so the 6pack driver doesn't know anything about connects or data that has not yet been transmitted. Therefore the LEDs are controlled as they are in KISS mode: The connect LED is turned on if data is transferred from the PC to the TNC over the serial line, the status LED if data is sent to the PC. 6. Known problems When testing the driver with 2.0.3x kernels and operating with data rates on the radio channel of 9600 Baud or higher, the driver may, on certain systems, sometimes print the message '6pack: bad checksum', which is due to data loss if the other station sends two or more subsequent packets. I have been told that this is due to a problem with the serial driver of 2.0.3x kernels. I don't know yet if the problem still exists with 2.1.x kernels, as I have heard that the serial driver code has been changed with 2.1.x. When shutting down the sp interface with ifconfig, the kernel crashes if there is still an AX.25 connection left over which an IP connection was running, even if that IP connection is already closed. The problem does not occur when there is a bare AX.25 connection still running. I don't know if this is a problem of the 6pack driver or something else in the kernel. The driver has been tested as a module, not yet as a kernel-builtin driver. The 6pack protocol supports daisy-chaining of TNCs in a token ring, which is connected to one serial port of the PC. This feature is not implemented and at least at the moment I won't be able to do it because I do not have the opportunity to build a TNC daisy-chain and test it. Some of the comments in the source code are inaccurate. They are left from the SLIP/KISS driver, from which the 6pack driver has been derived. I haven't modified or removed them yet -- sorry! The code itself needs some cleaning and optimizing. This will be done in a later release. If you encounter a bug or if you have a question or suggestion concerning the driver, feel free to mail me, using the addresses given at the beginning of this file. Have fun! Andreas IP-Aliasing: ============ o For IP aliasing you must have IP_ALIAS support included by static linking. o Alias creation. Alias creation is done by 'magic' iface naming: eg. to create a 200.1.1.1 alias for eth0 ... # ifconfig eth0:0 200.1.1.1 etc,etc.... ~~ -> request alias #0 creation (if not yet exists) for eth0 and routing stuff also ... # route add -host 200.1.1.1 dev eth0:0 (if same IP network as main device) # route add -net 200.1.1.0 dev eth0:0 (if completely new network wanted for eth0:0) o Alias deletion. Also done by shutting the interface down: # ifconfig eth0:0 down ~~~~~~~~~~ -> will delete alias Alias (re-)configuring Aliases are not real devices, but programs` should be able to configure and refer to them as usual (ifconfig, route, etc). Relationship with main device ----------------------------- - the main device is an alias itself like additional aliases and can be shut down without deleting other aliases. Contact ------- Please finger or e-mail me: Juan Jose Ciarlante Updated by Erik Schoenfelder ; local variables: ; mode: indented-text ; mode: auto-fill ; end: ---------------------------------------------------------------------------- NOTE: See also arcnet-hardware.txt in this directory for jumper-setting and cabling information if you're like many of us and didn't happen to get a manual with your ARCnet card. ---------------------------------------------------------------------------- Since no one seems to listen to me otherwise, perhaps a poem will get your attention: This driver's getting fat and beefy, But my cat is still named Fifi. Hmm, I think I'm allowed to call that a poem, even though it's only two lines. Hey, I'm in Computer Science, not English. Give me a break. The point is: I REALLY REALLY REALLY REALLY REALLY want to hear from you if you test this and get it working. Or if you don't. Or anything. ARCnet 0.32 ALPHA first made it into the Linux kernel 1.1.80 - this was nice, but after that even FEWER people started writing to me because they didn't even have to install the patch. Come on, be a sport! Send me a success report! (hey, that was even better than my original poem... this is getting bad!) -------- WARNING: -------- If you don't e-mail me about your success/failure soon, I may be forced to start SINGING. And we don't want that, do we? (You know, it might be argued that I'm pushing this point a little too much. If you think so, why not flame me in a quick little e-mail? Please also include the type of card(s) you're using, software, size of network, and whether it's working or not.) My e-mail address is: apenwarr@worldvisions.ca --------------------------------------------------------------------------- These are the ARCnet drivers for Linux. This new release (2.91) has been put together by David Woodhouse , in an attempt to tidy up the driver after adding support for yet another chipset. Now the generic support has been separated from the individual chipset drivers, and the source files aren't quite so packed with #ifdefs! I've changed this file a bit, but kept it in the first person from Avery, because I didn't want to completely rewrite it. The previous release resulted from many months of on-and-off effort from me (Avery Pennarun), many bug reports/fixes and suggestions from others, and in particular a lot of input and coding from Tomasz Motylewski. Starting with ARCnet 2.10 ALPHA, Tomasz's all-new-and-improved RFC1051 support has been included and seems to be working fine! Where do I discuss these drivers? --------------------------------- Tomasz has been so kind as to set up a new and improved mailing list. Subscribe by sending a message with the BODY "subscribe linux-arcnet YOUR REAL NAME" to listserv@tichy.ch.uj.edu.pl. Then, to submit messages to the list, mail to linux-arcnet@tichy.ch.uj.edu.pl. There are archives of the mailing list at: http://tichy.ch.uj.edu.pl/lists/linux-arcnet The people on linux-net@vger.kernel.org have also been known to be very helpful, especially when we're talking about ALPHA Linux kernels that may or may not work right in the first place. Other Drivers and Info ---------------------- You can try my ARCNET page on the World Wide Web at: http://www.worldvisions.ca/~apenwarr/arcnet/ Also, SMC (one of the companies that makes ARCnet cards) has a WWW site you might be interested in, which includes several drivers for various cards including ARCnet. Try: http://www.smc.com/ Performance Technologies makes various network software that supports ARCnet: http://www.perftech.com/ or ftp to ftp.perftech.com. Novell makes a networking stack for DOS which includes ARCnet drivers. Try FTPing to ftp.novell.com. You can get the Crynwr packet driver collection (including arcether.com, the one you'll want to use with ARCnet cards) from oak.oakland.edu:/simtel/msdos/pktdrvr. It won't work perfectly on a 386+ without patches, though, and also doesn't like several cards. Fixed versions are available on my WWW page, or via e-mail if you don't have WWW access. Installing the Driver --------------------- All you will need to do in order to install the driver is: make config (be sure to choose ARCnet in the network devices and at least one chipset driver.) make dep make clean make zImage If you obtained this ARCnet package as an upgrade to the ARCnet driver in your current kernel, you will need to first copy arcnet.c over the one in the linux/drivers/net directory. You will know the driver is installed properly if you get some ARCnet messages when you reboot into the new Linux kernel. There are four chipset options: 1. Standard ARCnet COM90xx chipset. This is the normal ARCnet card, which you've probably got. This is the only chipset driver which will autoprobe if not told where the card is. It following options on the command line: com90xx=[[,[,]]][,] | If you load the chipset support as a module, the options are: io= irq= shmem= device= To disable the autoprobe, just specify "com90xx=" on the kernel command line. To specify the name alone, but allow autoprobe, just put "com90xx=" 2. ARCnet COM20020 chipset. This is the new chipset from SMC with support for promiscuous mode (packet sniffing), extra diagnostic information, etc. Unfortunately, there is no sensible method of autoprobing for these cards. You must specify the I/O address on the kernel command line. The command line options are: com20020=[,[,[,backplane[,CKP[,timeout]]]]][,name] If you load the chipset support as a module, the options are: io= irq= node= backplane= clock= timeout= device= The COM20020 chipset allows you to set the node ID in software, overriding the default which is still set in DIP switches on the card. If you don't have the COM20020 data sheets, and you don't know what the other three options refer to, then they won't interest you - forget them. 3. ARCnet COM90xx chipset in IO-mapped mode. This will also work with the normal ARCnet cards, but doesn't use the shared memory. It performs less well than the above driver, but is provided in case you have a card which doesn't support shared memory, or (strangely) in case you have so many ARCnet cards in your machine that you run out of shmem slots. If you don't give the IO address on the kernel command line, then the driver will not find the card. The command line options are: com90io=[,][,] If you load the chipset support as a module, the options are: io= irq= device= 4. ARCnet RIM I cards. These are COM90xx chips which are _completely_ memory mapped. The support for these is not tested. If you have one, please mail the author with a success report. All options must be specified, except the device name. Command line options: arcrimi=,,[,] If you load the chipset support as a module, the options are: shmem= irq= node= device= Loadable Module Support ----------------------- Configure and rebuild Linux. When asked, answer 'm' to "Generic ARCnet support" and to support for your ARCnet chipset if you want to use the loadable module. You can also say 'y' to "Generic ARCnet support" and 'm' to the chipset support if you wish. make config make dep make clean make zImage make modules If you're using a loadable module, you need to use insmod to load it, and you can specify various characteristics of your card on the command line. (In recent versions of the driver, autoprobing is much more reliable and works as a module, so most of this is now unnecessary.) For example: cd /usr/src/linux/modules insmod arcnet.o insmod com90xx.o insmod com20020.o io=0x2e0 device=eth1 Using the Driver ---------------- If you build your kernel with ARCnet COM90xx support included, it should probe for your card automatically when you boot. If you use a different chipset driver complied into the kernel, you must give the necessary options on the kernel command line, as detailed above. Go read the NET-2-HOWTO and ETHERNET-HOWTO for Linux; they should be available where you picked up this driver. Think of your ARCnet as a souped-up (or down, as the case may be) Ethernet card. By the way, be sure to change all references from "eth0" to "arc0" in the HOWTOs. Remember that ARCnet isn't a "true" Ethernet, and the device name is DIFFERENT. Multiple Cards in One Computer ------------------------------ Linux has pretty good support for this now, but since I've been busy, the ARCnet driver has somewhat suffered in this respect. COM90xx support, if compiled into the kernel, will (try to) autodetect all the installed cards. If you have other cards, with support compiled into the kernel, then you can just repeat the options on the kernel command line, e.g.: LILO: linux com20020=0x2e0 com20020=0x380 com90io=0x260 If you have the chipset support built as a loadable module, then you need to do something like this: insmod -o arc0 com90xx insmod -o arc1 com20020 io=0x2e0 insmod -o arc2 com90xx The ARCnet drivers will now sort out their names automatically. How do I get it to work with...? -------------------------------- NFS: Should be fine linux->linux, just pretend you're using Ethernet cards. oak.oakland.edu:/simtel/msdos/nfs has some nice DOS clients. There is also a DOS-based NFS server called SOSS. It doesn't multitask quite the way Linux does (actually, it doesn't multitask AT ALL) but you never know what you might need. With AmiTCP (and possibly others), you may need to set the following options in your Amiga nfstab: MD 1024 MR 1024 MW 1024 (Thanks to Christian Gottschling for this.) Probably these refer to maximum NFS data/read/write block sizes. I don't know why the defaults on the Amiga didn't work; write to me if you know more. DOS: If you're using the freeware arcether.com, you might want to install the driver patch from my web page. It helps with PC/TCP, and also can get arcether to load if it timed out too quickly during initialization. In fact, if you use it on a 386+ you REALLY need the patch, really. Windows: See DOS :) Trumpet Winsock works fine with either the Novell or Arcether client, assuming you remember to load winpkt of course. LAN Manager and Windows for Workgroups: These programs use protocols that are incompatible with the Internet standard. They try to pretend the cards are Ethernet, and confuse everyone else on the network. However, v2.00 and higher of the Linux ARCnet driver supports this protocol via the 'arc0e' device. See the section on "Multiprotocol Support" for more information. Using the freeware Samba server and clients for Linux, you can now interface quite nicely with TCP/IP-based WfWg or Lan Manager networks. Windows 95: Tools are included with Win95 that let you use either the LANMAN style network drivers (NDIS) or Novell drivers (ODI) to handle your ARCnet packets. If you use ODI, you'll need to use the 'arc0' device with Linux. If you use NDIS, then try the 'arc0e' device. See the "Multiprotocol Support" section below if you need arc0e, you're completely insane, and/or you need to build some kind of hybrid network that uses both encapsulation types. OS/2: I've been told it works under Warp Connect with an ARCnet driver from SMC. You need to use the 'arc0e' interface for this. If you get the SMC driver to work with the TCP/IP stuff included in the "normal" Warp Bonus Pack, let me know. ftp.microsoft.com also has a freeware "Lan Manager for OS/2" client which should use the same protocol as WfWg does. I had no luck installing it under Warp, however. Please mail me with any results. NetBSD/AmiTCP: These use an old version of the Internet standard ARCnet protocol (RFC1051) which is compatible with the Linux driver v2.10 ALPHA and above using the arc0s device. (See "Multiprotocol ARCnet" below.) ** Newer versions of NetBSD apparently support RFC1201. Using Multiprotocol ARCnet -------------------------- The ARCnet driver v2.10 ALPHA supports three protocols, each on its own "virtual network device": arc0 - RFC1201 protocol, the official Internet standard which just happens to be 100% compatible with Novell's TRXNET driver. Version 1.00 of the ARCnet driver supported _only_ this protocol. arc0 is the fastest of the three protocols (for whatever reason), and allows larger packets to be used because it supports RFC1201 "packet splitting" operations. Unless you have a specific need to use a different protocol, I strongly suggest that you stick with this one. arc0e - "Ethernet-Encapsulation" which sends packets over ARCnet that are actually a lot like Ethernet packets, including the 6-byte hardware addresses. This protocol is compatible with Microsoft's NDIS ARCnet driver, like the one in WfWg and LANMAN. Because the MTU of 493 is actually smaller than the one "required" by TCP/IP (576), there is a chance that some network operations will not function properly. The Linux TCP/IP layer can compensate in most cases, however, by automatically fragmenting the TCP/IP packets to make them fit. arc0e also works slightly more slowly than arc0, for reasons yet to be determined. (Probably it's the smaller MTU that does it.) arc0s - The "[s]imple" RFC1051 protocol is the "previous" Internet standard that is completely incompatible with the new standard. Some software today, however, continues to support the old standard (and only the old standard) including NetBSD and AmiTCP. RFC1051 also does not support RFC1201's packet splitting, and the MTU of 507 is still smaller than the Internet "requirement," so it's quite possible that you may run into problems. It's also slower than RFC1201 by about 25%, for the same reason as arc0e. The arc0s support was contributed by Tomasz Motylewski and modified somewhat by me. Bugs are probably my fault. You can choose not to compile arc0e and arc0s into the driver if you want - this will save you a bit of memory and avoid confusion when eg. trying to use the "NFS-root" stuff in recent Linux kernels. The arc0e and arc0s devices are created automatically when you first ifconfig the arc0 device. To actually use them, though, you need to also ifconfig the other virtual devices you need. There are a number of ways you can set up your network then: 1. Single Protocol. This is the simplest way to configure your network: use just one of the two available protocols. As mentioned above, it's a good idea to use only arc0 unless you have a good reason (like some other software, ie. WfWg, that only works with arc0e). If you need only arc0, then the following commands should get you going: ifconfig arc0 MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0 route add -net SUB.NET.ADD.RESS arc0 [add other local routes here] If you need arc0e (and only arc0e), it's a little different: ifconfig arc0 MY.IP.ADD.RESS ifconfig arc0e MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0e route add -net SUB.NET.ADD.RESS arc0e arc0s works much the same way as arc0e. 2. More than one protocol on the same wire. Now things start getting confusing. To even try it, you may need to be partly crazy. Here's what *I* did. :) Note that I don't include arc0s in my home network; I don't have any NetBSD or AmiTCP computers, so I only use arc0s during limited testing. I have three computers on my home network; two Linux boxes (which prefer RFC1201 protocol, for reasons listed above), and one XT that can't run Linux but runs the free Microsoft LANMAN Client instead. Worse, one of the Linux computers (freedom) also has a modem and acts as a router to my Internet provider. The other Linux box (insight) also has its own IP address and needs to use freedom as its default gateway. The XT (patience), however, does not have its own Internet IP address and so I assigned it one on a "private subnet" (as defined by RFC1597). To start with, take a simple network with just insight and freedom. Insight needs to: - talk to freedom via RFC1201 (arc0) protocol, because I like it more and it's faster. - use freedom as its Internet gateway. That's pretty easy to do. Set up insight like this: ifconfig arc0 insight route add insight arc0 route add freedom arc0 /* I would use the subnet here (like I said to to in "single protocol" above), but the rest of the subnet unfortunately lies across the PPP link on freedom, which confuses things. */ route add default gw freedom And freedom gets configured like so: ifconfig arc0 freedom route add freedom arc0 route add insight arc0 /* and default gateway is configured by pppd */ Great, now insight talks to freedom directly on arc0, and sends packets to the Internet through freedom. If you didn't know how to do the above, you should probably stop reading this section now because it only gets worse. Now, how do I add patience into the network? It will be using LANMAN Client, which means I need the arc0e device. It needs to be able to talk to both insight and freedom, and also use freedom as a gateway to the Internet. (Recall that patience has a "private IP address" which won't work on the Internet; that's okay, I configured Linux IP masquerading on freedom for this subnet). So patience (necessarily; I don't have another IP number from my provider) has an IP address on a different subnet than freedom and insight, but needs to use freedom as an Internet gateway. Worse, most DOS networking programs, including LANMAN, have braindead networking schemes that rely completely on the netmask and a 'default gateway' to determine how to route packets. This means that to get to freedom or insight, patience WILL send through its default gateway, regardless of the fact that both freedom and insight (courtesy of the arc0e device) could understand a direct transmission. I compensate by giving freedom an extra IP address - aliased 'gatekeeper' - that is on my private subnet, the same subnet that patience is on. I then define gatekeeper to be the default gateway for patience. To configure freedom (in addition to the commands above): ifconfig arc0e gatekeeper route add gatekeeper arc0e route add patience arc0e This way, freedom will send all packets for patience through arc0e, giving its IP address as gatekeeper (on the private subnet). When it talks to insight or the Internet, it will use its "freedom" Internet IP address. You will notice that we haven't configured the arc0e device on insight. This would work, but is not really necessary, and would require me to assign insight another special IP number from my private subnet. Since both insight and patience are using freedom as their default gateway, the two can already talk to each other. It's quite fortunate that I set things up like this the first time (cough cough) because it's really handy when I boot insight into DOS. There, it runs the Novell ODI protocol stack, which only works with RFC1201 ARCnet. In this mode it would be impossible for insight to communicate directly with patience, since the Novell stack is incompatible with Microsoft's Ethernet-Encap. Without changing any settings on freedom or patience, I simply set freedom as the default gateway for insight (now in DOS, remember) and all the forwarding happens "automagically" between the two hosts that would normally not be able to communicate at all. For those who like diagrams, I have created two "virtual subnets" on the same physical ARCnet wire. You can picture it like this: [RFC1201 NETWORK] [ETHER-ENCAP NETWORK] (registered Internet subnet) (RFC1597 private subnet) (IP Masquerade) /---------------\ * /---------------\ | | * | | | +-Freedom-*-Gatekeeper-+ | | | | * | | \-------+-------/ | * \-------+-------/ | | | Insight | Patience (Internet) It works: what now? ------------------- Send mail describing your setup, preferably including driver version, kernel version, ARCnet card model, CPU type, number of systems on your network, and list of software in use to me at the following address: apenwarr@worldvisions.ca I do send (sometimes automated) replies to all messages I receive. My email can be weird (and also usually gets forwarded all over the place along the way to me), so if you don't get a reply within a reasonable time, please resend. It doesn't work: what now? -------------------------- Do the same as above, but also include the output of the ifconfig and route commands, as well as any pertinent log entries (ie. anything that starts with "arcnet:" and has shown up since the last reboot) in your mail. If you want to try fixing it yourself (I strongly recommend that you mail me about the problem first, since it might already have been solved) you may want to try some of the debug levels available. For heavy testing on D_DURING or more, it would be a REALLY good idea to kill your klogd daemon first! D_DURING displays 4-5 lines for each packet sent or received. D_TX, D_RX, and D_SKB actually DISPLAY each packet as it is sent or received, which is obviously quite big. Starting with v2.40 ALPHA, the autoprobe routines have changed significantly. In particular, they won't tell you why the card was not found unless you turn on the D_INIT_REASONS debugging flag. Once the driver is running, you can run the arcdump shell script (available from me or in the full ARCnet package, if you have it) as root to list the contents of the arcnet buffers at any time. To make any sense at all out of this, you should grab the pertinent RFCs. (some are listed near the top of arcnet.c). arcdump assumes your card is at 0xD0000. If it isn't, edit the script. Buffers 0 and 1 are used for receiving, and Buffers 2 and 3 are for sending. Ping-pong buffers are implemented both ways. If your debug level includes D_DURING and you did NOT define SLOW_XMIT_COPY, the buffers are cleared to a constant value of 0x42 every time the card is reset (which should only happen when you do an ifconfig up, or when Linux decides that the driver is broken). During a transmit, unused parts of the buffer will be cleared to 0x42 as well. This is to make it easier to figure out which bytes are being used by a packet. You can change the debug level without recompiling the kernel by typing: ifconfig arc0 down metric 1xxx /etc/rc.d/rc.inet1 where "xxx" is the debug level you want. For example, "metric 1015" would put you at debug level 15. Debug level 7 is currently the default. Note that the debug level is (starting with v1.90 ALPHA) a binary combination of different debug flags; so debug level 7 is really 1+2+4 or D_NORMAL+D_EXTRA+D_INIT. To include D_DURING, you would add 16 to this, resulting in debug level 23. If you don't understand that, you probably don't want to know anyway. E-mail me about your problem. I want to send money: what now? ------------------------------- Go take a nap or something. You'll feel better in the morning. ----------------------------------------------------------------------------- 1) This file is a supplement to arcnet.txt. Please read that for general driver configuration help. ----------------------------------------------------------------------------- 2) This file is no longer Linux-specific. It should probably be moved out of the kernel sources. Ideas? ----------------------------------------------------------------------------- Because so many people (myself included) seem to have obtained ARCnet cards without manuals, this file contains a quick introduction to ARCnet hardware, some cabling tips, and a listing of all jumper settings I can find. Please e-mail apenwarr@worldvisions.ca with any settings for your particular card, or any other information you have! INTRODUCTION TO ARCNET ---------------------- ARCnet is a network type which works in a way similar to popular Ethernet networks but which is also different in some very important ways. First of all, you can get ARCnet cards in at least two speeds: 2.5 Mbps (slower than Ethernet) and 100 Mbps (faster than normal Ethernet). In fact, there are others as well, but these are less common. The different hardware types, as far as I'm aware, are not compatible and so you cannot wire a 100 Mbps card to a 2.5 Mbps card, and so on. From what I hear, my driver does work with 100 Mbps cards, but I haven't been able to verify this myself, since I only have the 2.5 Mbps variety. It is probably not going to saturate your 100 Mbps card. Stop complaining. :) You also cannot connect an ARCnet card to any kind of Ethernet card and expect it to work. There are two "types" of ARCnet - STAR topology and BUS topology. This refers to how the cards are meant to be wired together. According to most available documentation, you can only connect STAR cards to STAR cards and BUS cards to BUS cards. That makes sense, right? Well, it's not quite true; see below under "Cabling." Once you get past these little stumbling blocks, ARCnet is actually quite a well-designed standard. It uses something called "modified token passing" which makes it completely incompatible with so-called "Token Ring" cards, but which makes transfers much more reliable than Ethernet does. In fact, ARCnet will guarantee that a packet arrives safely at the destination, and even if it can't possibly be delivered properly (ie. because of a cable break, or because the destination computer does not exist) it will at least tell the sender about it. Because of the carefully defined action of the "token", it will always make a pass around the "ring" within a maximum length of time. This makes it useful for realtime networks. In addition, all known ARCnet cards have an (almost) identical programming interface. This means that with one ARCnet driver you can support any card, whereas with Ethernet each manufacturer uses what is sometimes a completely different programming interface, leading to a lot of different, sometimes very similar, Ethernet drivers. Of course, always using the same programming interface also means that when high-performance hardware facilities like PCI bus mastering DMA appear, it's hard to take advantage of them. Let's not go into that. One thing that makes ARCnet cards difficult to program for, however, is the limit on their packet sizes; standard ARCnet can only send packets that are up to 508 bytes in length. This is smaller than the Internet "bare minimum" of 576 bytes, let alone the Ethernet MTU of 1500. To compensate, an extra level of encapsulation is defined by RFC1201, which I call "packet splitting," that allows "virtual packets" to grow as large as 64K each, although they are generally kept down to the Ethernet-style 1500 bytes. For more information on the advantages and disadvantages (mostly the advantages) of ARCnet networks, you might try the "ARCnet Trade Association" WWW page: http://www.arcnet.com CABLING ARCNET NETWORKS ----------------------- This section was rewritten by Vojtech Pavlik using information from several people, including: Avery Pennraun Stephen A. Wood John Paul Morrison Joachim Koenig and Avery touched it up a bit, at Vojtech's request. ARCnet (the classic 2.5 Mbps version) can be connected by two different types of cabling: coax and twisted pair. The other ARCnet-type networks (100 Mbps TCNS and 320 kbps - 32 Mbps ARCnet Plus) use different types of cabling (Type1, Fiber, C1, C4, C5). For a coax network, you "should" use 93 Ohm RG-62 cable. But other cables also work fine, because ARCnet is a very stable network. I personally use 75 Ohm TV antenna cable. Cards for coax cabling are shipped in two different variants: for BUS and STAR network topologies. They are mostly the same. The only difference lies in the hybrid chip installed. BUS cards use high impedance output, while STAR use low impedance. Low impedance card (STAR) is electrically equal to a high impedance one with a terminator installed. Usually, the ARCnet networks are built up from STAR cards and hubs. There are two types of hubs - active and passive. Passive hubs are small boxes with four BNC connectors containing four 47 Ohm resistors: | | wires R + junction -R-+-R- R 47 Ohm resistors R | The shielding is connected together. Active hubs are much more complicated; they are powered and contain electronics to amplify the signal and send it to other segments of the net. They usually have eight connectors. Active hubs come in two variants - dumb and smart. The dumb variant just amplifies, but the smart one decodes to digital and encodes back all packets coming through. This is much better if you have several hubs in the net, since many dumb active hubs may worsen the signal quality. And now to the cabling. What you can connect together: 1. A card to a card. This is the simplest way of creating a 2-computer network. 2. A card to a passive hub. Remember that all unused connectors on the hub must be properly terminated with 93 Ohm (or something else if you don't have the right ones) terminators. (Avery's note: oops, I didn't know that. Mine (TV cable) works anyway, though.) 3. A card to an active hub. Here is no need to terminate the unused connectors except some kind of aesthetic feeling. But, there may not be more than eleven active hubs between any two computers. That of course doesn't limit the number of active hubs on the network. 4. An active hub to another. 5. An active hub to passive hub. Remember, that you can not connect two passive hubs together. The power loss implied by such a connection is too high for the net to operate reliably. An example of a typical ARCnet network: R S - STAR type card S------H--------A-------S R - Terminator | | H - Hub | | A - Active hub | S----H----S S | | S The BUS topology is very similar to the one used by Ethernet. The only difference is in cable and terminators: they should be 93 Ohm. Ethernet uses 50 Ohm impedance. You use T connectors to put the computers on a single line of cable, the bus. You have to put terminators at both ends of the cable. A typical BUS ARCnet network looks like: RT----T------T------T------T------TR B B B B B B B - BUS type card R - Terminator T - T connector But that is not all! The two types can be connected together. According to the official documentation the only way of connecting them is using an active hub: A------T------T------TR | B B B S---H---S | S The official docs also state that you can use STAR cards at the ends of BUS network in place of a BUS card and a terminator: S------T------T------S B B But, according to my own experiments, you can simply hang a BUS type card anywhere in middle of a cable in a STAR topology network. And more - you can use the bus card in place of any star card if you use a terminator. Then you can build very complicated networks fulfilling all your needs! An example: S | RT------T-------T------H------S B B B | | R S------A------T-------T-------A-------H------TR | B B | | B | S BT | | | | S----A-----S S------H---A----S | | | | S------T----H---S | S S B R S A basically different cabling scheme is used with Twisted Pair cabling. Each of the TP cards has two RJ (phone-cord style) connectors. The cards are then daisy-chained together using a cable connecting every two neighboring cards. The ends are terminated with RJ 93 Ohm terminators which plug into the empty connectors of cards on the ends of the chain. An example: ___________ ___________ _R_|_ _|_|_ _|_R_ | | | | | | |Card | |Card | |Card | |_____| |_____| |_____| There are also hubs for the TP topology. There is nothing difficult involved in using them; you just connect a TP chain to a hub on any end or even at both. This way you can create almost any network configuration. The maximum of 11 hubs between any two computers on the net applies here as well. An example: RP-------P--------P--------H-----P------P-----PR | RP-----H--------P--------H-----P------PR | | PR PR R - RJ Terminator P - TP Card H - TP Hub Like any network, ARCnet has a limited cable length. These are the maximum cable lengths between two active ends (an active end being an active hub or a STAR card). RG-62 93 Ohm up to 650 m RG-59/U 75 Ohm up to 457 m RG-11/U 75 Ohm up to 533 m IBM Type 1 150 Ohm up to 200 m IBM Type 3 100 Ohm up to 100 m The maximum length of all cables connected to a passive hub is limited to 65 meters for RG-62 cabling; less for others. You can see that using passive hubs in a large network is a bad idea. The maximum length of a single "BUS Trunk" is about 300 meters for RG-62. The maximum distance between the two most distant points of the net is limited to 3000 meters. The maximum length of a TP cable between two cards/hubs is 650 meters. SETTING THE JUMPERS ------------------- All ARCnet cards should have a total of four or five different settings: - the I/O address: this is the "port" your ARCnet card is on. Probed values in the Linux ARCnet driver are only from 0x200 through 0x3F0. (If your card has additional ones, which is possible, please tell me.) This should not be the same as any other device on your system. According to a doc I got from Novell, MS Windows prefers values of 0x300 or more, eating net connections on my system (at least) otherwise. My guess is this may be because, if your card is at 0x2E0, probing for a serial port at 0x2E8 will reset the card and probably mess things up royally. - Avery's favourite: 0x300. - the IRQ: on 8-bit cards, it might be 2 (9), 3, 4, 5, or 7. on 16-bit cards, it might be 2 (9), 3, 4, 5, 7, or 10-15. Make sure this is different from any other card on your system. Note that IRQ2 is the same as IRQ9, as far as Linux is concerned. You can "cat /proc/interrupts" for a somewhat complete list of which ones are in use at any given time. Here is a list of common usages from Vojtech Pavlik : ("Not on bus" means there is no way for a card to generate this interrupt) IRQ 0 - Timer 0 (Not on bus) IRQ 1 - Keyboard (Not on bus) IRQ 2 - IRQ Controller 2 (Not on bus, nor does interrupt the CPU) IRQ 3 - COM2 IRQ 4 - COM1 IRQ 5 - FREE (LPT2 if you have it; sometimes COM3; maybe PLIP) IRQ 6 - Floppy disk controller IRQ 7 - FREE (LPT1 if you don't use the polling driver; PLIP) IRQ 8 - Realtime Clock Interrupt (Not on bus) IRQ 9 - FREE (VGA vertical sync interrupt if enabled) IRQ 10 - FREE IRQ 11 - FREE IRQ 12 - FREE IRQ 13 - Numeric Coprocessor (Not on bus) IRQ 14 - Fixed Disk Controller IRQ 15 - FREE (Fixed Disk Controller 2 if you have it) Note: IRQ 9 is used on some video cards for the "vertical retrace" interrupt. This interrupt would have been handy for things like video games, as it occurs exactly once per screen refresh, but unfortunately IBM cancelled this feature starting with the original VGA and thus many VGA/SVGA cards do not support it. For this reason, no modern software uses this interrupt and it can almost always be safely disabled, if your video card supports it at all. If your card for some reason CANNOT disable this IRQ (usually there is a jumper), one solution would be to clip the printed circuit contact on the board: it's the fourth contact from the left on the back side. I take no responsibility if you try this. - Avery's favourite: IRQ2 (actually IRQ9). Watch that VGA, though. - the memory address: Unlike most cards, ARCnets use "shared memory" for copying buffers around. Make SURE it doesn't conflict with any other used memory in your system! A0000 - VGA graphics memory (ok if you don't have VGA) B0000 - Monochrome text mode C0000 \ One of these is your VGA BIOS - usually C0000. E0000 / F0000 - System BIOS Anything less than 0xA0000 is, well, a BAD idea since it isn't above 640k. - Avery's favourite: 0xD0000 - the station address: Every ARCnet card has its own "unique" network address from 0 to 255. Unlike Ethernet, you can set this address yourself with a jumper or switch (or on some cards, with special software). Since it's only 8 bits, you can only have 254 ARCnet cards on a network. DON'T use 0 or 255, since these are reserved (although neat stuff will probably happen if you DO use them). By the way, if you haven't already guessed, don't set this the same as any other ARCnet on your network! - Avery's favourite: 3 and 4. Not that it matters. - There may be ETS1 and ETS2 settings. These may or may not make a difference on your card (many manuals call them "reserved"), but are used to change the delays used when powering up a computer on the network. This is only necessary when wiring VERY long range ARCnet networks, on the order of 4km or so; in any case, the only real requirement here is that all cards on the network with ETS1 and ETS2 jumpers have them in the same position. Chris Hindy sent in a chart with actual values for this: ET1 ET2 Response Time Reconfiguration Time --- --- ------------- -------------------- open open 74.7us 840us open closed 283.4us 1680us closed open 561.8us 1680us closed closed 1118.6us 1680us Make sure you set ETS1 and ETS2 to the SAME VALUE for all cards on your network. Also, on many cards (not mine, though) there are red and green LED's. Vojtech Pavlik tells me this is what they mean: GREEN RED Status ----- --- ------ OFF OFF Power off OFF Short flashes Cabling problems (broken cable or not terminated) OFF (short) ON Card init ON ON Normal state - everything OK, nothing happens ON Long flashes Data transfer ON OFF Never happens (maybe when wrong ID) The following is all the specific information people have sent me about their own particular ARCnet cards. It is officially a mess, and contains huge amounts of duplicated information. I have no time to fix it. If you want to, PLEASE DO! Just send me a 'diff -u' of all your changes. The model # is listed right above specifics for that card, so you should be able to use your text viewer's "search" function to find the entry you want. If you don't KNOW what kind of card you have, try looking through the various diagrams to see if you can tell. If your model isn't listed and/or has different settings, PLEASE PLEASE tell me. I had to figure mine out without the manual, and it WASN'T FUN! Even if your ARCnet model isn't listed, but has the same jumpers as another model that is, please e-mail me to say so. Cards Listed in this file (in this order, mostly): Manufacturer Model # Bits ------------ ------- ---- SMC PC100 8 SMC PC110 8 SMC PC120 8 SMC PC130 8 SMC PC270E 8 SMC PC500 16 SMC PC500Longboard 16 SMC PC550Longboard 16 SMC PC600 16 SMC PC710 8 SMC? LCS-8830(-T) 8/16 Puredata PDI507 8 CNet Tech CN120-Series 8 CNet Tech CN160-Series 16 Lantech? UM9065L chipset 8 Acer 5210-003 8 Datapoint? LAN-ARC-8 8 Topware TA-ARC/10 8 Thomas-Conrad 500-6242-0097 REV A 8 Waterloo? (C)1985 Waterloo Micro. 8 No Name -- 8/16 No Name Taiwan R.O.C? 8 No Name Model 9058 8 Tiara Tiara Lancard? 8 ** SMC = Standard Microsystems Corp. ** CNet Tech = CNet Technology, Inc. Unclassified Stuff ------------------ - Please send any other information you can find. - And some other stuff (more info is welcome!): From: root@ultraworld.xs4all.nl (Timo Hilbrink) To: apenwarr@foxnet.net (Avery Pennarun) Date: Wed, 26 Oct 1994 02:10:32 +0000 (GMT) Reply-To: timoh@xs4all.nl [...parts deleted...] About the jumpers: On my PC130 there is one more jumper, located near the cable-connector and it's for changing to star or bus topology; closed: star - open: bus On the PC500 are some more jumper-pins, one block labeled with RX,PDN,TXI and another with ALE,LA17,LA18,LA19 these are undocumented.. [...more parts deleted...] --- CUT --- ** Standard Microsystems Corp (SMC) ** PC100, PC110, PC120, PC130 (8-bit cards) PC500, PC600 (16-bit cards) --------------------------------- - mainly from Avery Pennarun . Values depicted are from Avery's setup. - special thanks to Timo Hilbrink for noting that PC120, 130, 500, and 600 all have the same switches as Avery's PC100. PC500/600 have several extra, undocumented pins though. (?) - PC110 settings were verified by Stephen A. Wood - Also, the JP- and S-numbers probably don't match your card exactly. Try to find jumpers/switches with the same number of settings - it's probably more reliable. JP5 [|] : : : : (IRQ Setting) IRQ2 IRQ3 IRQ4 IRQ5 IRQ7 Put exactly one jumper on exactly one set of pins. 1 2 3 4 5 6 7 8 9 10 S1 /----------------------------------\ (I/O and Memory | 1 1 * 0 0 0 0 * 1 1 0 1 | addresses) \----------------------------------/ |--| |--------| |--------| (a) (b) (m) WARNING. It's very important when setting these which way you're holding the card, and which way you think is '1'! If you suspect that your settings are not being made correctly, try reversing the direction or inverting the switch positions. a: The first digit of the I/O address. Setting Value ------- ----- 00 0 01 1 10 2 11 3 b: The second digit of the I/O address. Setting Value ------- ----- 0000 0 0001 1 0010 2 ... ... 1110 E 1111 F The I/O address is in the form ab0. For example, if a is 0x2 and b is 0xE, the address will be 0x2E0. DO NOT SET THIS LESS THAN 0x200!!!!! m: The first digit of the memory address. Setting Value ------- ----- 0000 0 0001 1 0010 2 ... ... 1110 E 1111 F The memory address is in the form m0000. For example, if m is D, the address will be 0xD0000. DO NOT SET THIS TO C0000, F0000, OR LESS THAN A0000! 1 2 3 4 5 6 7 8 S2 /--------------------------\ (Station Address) | 1 1 0 0 0 0 0 0 | \--------------------------/ Setting Value ------- ----- 00000000 00 10000000 01 01000000 02 ... 01111111 FE 11111111 FF Note that this is binary with the digits reversed! DO NOT SET THIS TO 0 OR 255 (0xFF)! ***************************************************************************** ** Standard Microsystems Corp (SMC) ** PC130E/PC270E (8-bit cards) --------------------------- - from Juergen Seifert STANDARD MICROSYSTEMS CORPORATION (SMC) ARCNET(R)-PC130E/PC270E =============================================================== This description has been written by Juergen Seifert using information from the following Original SMC Manual "Configuration Guide for ARCNET(R)-PC130E/PC270 Network Controller Boards Pub. # 900.044A June, 1989" ARCNET is a registered trademark of the Datapoint Corporation SMC is a registered trademark of the Standard Microsystems Corporation The PC130E is an enhanced version of the PC130 board, is equipped with a standard BNC female connector for connection to RG-62/U coax cable. Since this board is designed both for point-to-point connection in star networks and for connection to bus networks, it is downwardly compatible with all the other standard boards designed for coax networks (that is, the PC120, PC110 and PC100 star topology boards and the PC220, PC210 and PC200 bus topology boards). The PC270E is an enhanced version of the PC260 board, is equipped with two modular RJ11-type jacks for connection to twisted pair wiring. It can be used in a star or a daisy-chained network. 8 7 6 5 4 3 2 1 ________________________________________________________________ | | S1 | | | |_________________| | | Offs|Base |I/O Addr | | RAM Addr | ___| | ___ ___ CR3 |___| | | \/ | CR4 |___| | | PROM | ___| | | | N | | 8 | | SOCKET | o | | 7 | |________| d | | 6 | ___________________ e | | 5 | | | A | S | 4 | |oo| EXT2 | | d | 2 | 3 | |oo| EXT1 | SMC | d | | 2 | |oo| ROM | 90C63 | r |___| 1 | |oo| IRQ7 | | |o| _____| | |oo| IRQ5 | | |o| | J1 | | |oo| IRQ4 | | STAR |_____| | |oo| IRQ3 | | | J2 | | |oo| IRQ2 |___________________| |_____| |___ ______________| | | |_____________________________________________| Legend: SMC 90C63 ARCNET Controller / Transceiver /Logic S1 1-3: I/O Base Address Select 4-6: Memory Base Address Select 7-8: RAM Offset Select S2 1-8: Node ID Select EXT Extended Timeout Select ROM ROM Enable Select STAR Selected - Star Topology (PC130E only) Deselected - Bus Topology (PC130E only) CR3/CR4 Diagnostic LEDs J1 BNC RG62/U Connector (PC130E only) J1 6-position Telephone Jack (PC270E only) J2 6-position Telephone Jack (PC270E only) Setting one of the switches to Off/Open means "1", On/Closed means "0". Setting the Node ID ------------------- The eight switches in group S2 are used to set the node ID. These switches work in a way similar to the PC100-series cards; see that entry for more information. Setting the I/O Base Address ---------------------------- The first three switches in switch group S1 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 1 2 3 | Address -------|-------- 0 0 0 | 260 0 0 1 | 290 0 1 0 | 2E0 (Manufacturer's default) 0 1 1 | 2F0 1 0 0 | 300 1 0 1 | 350 1 1 0 | 380 1 1 1 | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer requires 2K of a 16K block of RAM. The base of this 16K block can be located in any of eight positions. Switches 4-6 of switch group S1 select the Base of the 16K block. Within that 16K address space, the buffer may be assigned any one of four positions, determined by the offset, switches 7 and 8 of group S1. Switch | Hex RAM | Hex ROM 4 5 6 7 8 | Address | Address *) -----------|---------|----------- 0 0 0 0 0 | C0000 | C2000 0 0 0 0 1 | C0800 | C2000 0 0 0 1 0 | C1000 | C2000 0 0 0 1 1 | C1800 | C2000 | | 0 0 1 0 0 | C4000 | C6000 0 0 1 0 1 | C4800 | C6000 0 0 1 1 0 | C5000 | C6000 0 0 1 1 1 | C5800 | C6000 | | 0 1 0 0 0 | CC000 | CE000 0 1 0 0 1 | CC800 | CE000 0 1 0 1 0 | CD000 | CE000 0 1 0 1 1 | CD800 | CE000 | | 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default) 0 1 1 0 1 | D0800 | D2000 0 1 1 1 0 | D1000 | D2000 0 1 1 1 1 | D1800 | D2000 | | 1 0 0 0 0 | D4000 | D6000 1 0 0 0 1 | D4800 | D6000 1 0 0 1 0 | D5000 | D6000 1 0 0 1 1 | D5800 | D6000 | | 1 0 1 0 0 | D8000 | DA000 1 0 1 0 1 | D8800 | DA000 1 0 1 1 0 | D9000 | DA000 1 0 1 1 1 | D9800 | DA000 | | 1 1 0 0 0 | DC000 | DE000 1 1 0 0 1 | DC800 | DE000 1 1 0 1 0 | DD000 | DE000 1 1 0 1 1 | DD800 | DE000 | | 1 1 1 0 0 | E0000 | E2000 1 1 1 0 1 | E0800 | E2000 1 1 1 1 0 | E1000 | E2000 1 1 1 1 1 | E1800 | E2000 *) To enable the 8K Boot PROM install the jumper ROM. The default is jumper ROM not installed. Setting the Timeouts and Interrupt ---------------------------------- The jumpers labeled EXT1 and EXT2 are used to determine the timeout parameters. These two jumpers are normally left open. To select a hardware interrupt level set one (only one!) of the jumpers IRQ2, IRQ3, IRQ4, IRQ5, IRQ7. The Manufacturer's default is IRQ2. Configuring the PC130E for Star or Bus Topology ----------------------------------------------- The single jumper labeled STAR is used to configure the PC130E board for star or bus topology. When the jumper is installed, the board may be used in a star network, when it is removed, the board can be used in a bus topology. Diagnostic LEDs --------------- Two diagnostic LEDs are visible on the rear bracket of the board. The green LED monitors the network activity: the red one shows the board activity: Green | Status Red | Status -------|------------------- ---------|------------------- on | normal activity flash/on | data transfer blink | reconfiguration off | no data transfer; off | defective board or | incorrect memory or | node ID is zero | I/O address ***************************************************************************** ** Standard Microsystems Corp (SMC) ** PC500/PC550 Longboard (16-bit cards) ------------------------------------- - from Juergen Seifert STANDARD MICROSYSTEMS CORPORATION (SMC) ARCNET-PC500/PC550 Long Board ===================================================================== Note: There is another Version of the PC500 called Short Version, which is different in hard- and software! The most important differences are: - The long board has no Shared memory. - On the long board the selection of the interrupt is done by binary coded switch, on the short board directly by jumper. [Avery's note: pay special attention to that: the long board HAS NO SHARED MEMORY. This means the current Linux-ARCnet driver can't use these cards. I have obtained a PC500Longboard and will be doing some experiments on it in the future, but don't hold your breath. Thanks again to Juergen Seifert for his advice about this!] This description has been written by Juergen Seifert using information from the following Original SMC Manual "Configuration Guide for SMC ARCNET-PC500/PC550 Series Network Controller Boards Pub. # 900.033 Rev. A November, 1989" ARCNET is a registered trademark of the Datapoint Corporation SMC is a registered trademark of the Standard Microsystems Corporation The PC500 is equipped with a standard BNC female connector for connection to RG-62/U coax cable. The board is designed both for point-to-point connection in star networks and for connection to bus networks. The PC550 is equipped with two modular RJ11-type jacks for connection to twisted pair wiring. It can be used in a star or a daisy-chained (BUS) network. 1 0 9 8 7 6 5 4 3 2 1 6 5 4 3 2 1 ____________________________________________________________________ < | SW1 | | SW2 | | > |_____________________| |_____________| | < IRQ |I/O Addr | > ___| < CR4 |___| > CR3 |___| < ___| > N | | 8 < o | | 7 > d | S | 6 < e | W | 5 > A | 3 | 4 < d | | 3 > d | | 2 < r |___| 1 > |o| _____| < |o| | J1 | > 3 1 JP6 |_____| < |o|o| JP2 | J2 | > |o|o| |_____| < 4 2__ ______________| > | | | <____| |_____________________________________________| Legend: SW1 1-6: I/O Base Address Select 7-10: Interrupt Select SW2 1-6: Reserved for Future Use SW3 1-8: Node ID Select JP2 1-4: Extended Timeout Select JP6 Selected - Star Topology (PC500 only) Deselected - Bus Topology (PC500 only) CR3 Green Monitors Network Activity CR4 Red Monitors Board Activity J1 BNC RG62/U Connector (PC500 only) J1 6-position Telephone Jack (PC550 only) J2 6-position Telephone Jack (PC550 only) Setting one of the switches to Off/Open means "1", On/Closed means "0". Setting the Node ID ------------------- The eight switches in group SW3 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 1 serves as the least significant bit (LSB). The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 1 | 1 2 | 2 3 | 4 4 | 8 5 | 16 6 | 32 7 | 64 8 | 128 Some Examples: Switch | Hex | Decimal 8 7 6 5 4 3 2 1 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The first six switches in switch group SW1 are used to select one of 32 possible I/O Base addresses using the following table Switch | Hex I/O 6 5 4 3 2 1 | Address -------------|-------- 0 1 0 0 0 0 | 200 0 1 0 0 0 1 | 210 0 1 0 0 1 0 | 220 0 1 0 0 1 1 | 230 0 1 0 1 0 0 | 240 0 1 0 1 0 1 | 250 0 1 0 1 1 0 | 260 0 1 0 1 1 1 | 270 0 1 1 0 0 0 | 280 0 1 1 0 0 1 | 290 0 1 1 0 1 0 | 2A0 0 1 1 0 1 1 | 2B0 0 1 1 1 0 0 | 2C0 0 1 1 1 0 1 | 2D0 0 1 1 1 1 0 | 2E0 (Manufacturer's default) 0 1 1 1 1 1 | 2F0 1 1 0 0 0 0 | 300 1 1 0 0 0 1 | 310 1 1 0 0 1 0 | 320 1 1 0 0 1 1 | 330 1 1 0 1 0 0 | 340 1 1 0 1 0 1 | 350 1 1 0 1 1 0 | 360 1 1 0 1 1 1 | 370 1 1 1 0 0 0 | 380 1 1 1 0 0 1 | 390 1 1 1 0 1 0 | 3A0 1 1 1 0 1 1 | 3B0 1 1 1 1 0 0 | 3C0 1 1 1 1 0 1 | 3D0 1 1 1 1 1 0 | 3E0 1 1 1 1 1 1 | 3F0 Setting the Interrupt --------------------- Switches seven through ten of switch group SW1 are used to select the interrupt level. The interrupt level is binary coded, so selections from 0 to 15 would be possible, but only the following eight values will be supported: 3, 4, 5, 7, 9, 10, 11, 12. Switch | IRQ 10 9 8 7 | ---------|-------- 0 0 1 1 | 3 0 1 0 0 | 4 0 1 0 1 | 5 0 1 1 1 | 7 1 0 0 1 | 9 (=2) (default) 1 0 1 0 | 10 1 0 1 1 | 11 1 1 0 0 | 12 Setting the Timeouts -------------------- The two jumpers JP2 (1-4) are used to determine the timeout parameters. These two jumpers are normally left open. Refer to the COM9026 Data Sheet for alternate configurations. Configuring the PC500 for Star or Bus Topology ---------------------------------------------- The single jumper labeled JP6 is used to configure the PC500 board for star or bus topology. When the jumper is installed, the board may be used in a star network, when it is removed, the board can be used in a bus topology. Diagnostic LEDs --------------- Two diagnostic LEDs are visible on the rear bracket of the board. The green LED monitors the network activity: the red one shows the board activity: Green | Status Red | Status -------|------------------- ---------|------------------- on | normal activity flash/on | data transfer blink | reconfiguration off | no data transfer; off | defective board or | incorrect memory or | node ID is zero | I/O address ***************************************************************************** ** SMC ** PC710 (8-bit card) ------------------ - from J.S. van Oosten Note: this data is gathered by experimenting and looking at info of other cards. However, I'm sure I got 99% of the settings right. The SMC710 card resembles the PC270 card, but is much more basic (i.e. no LEDs, RJ11 jacks, etc.) and 8 bit. Here's a little drawing: _______________________________________ | +---------+ +---------+ |____ | | S2 | | S1 | | | +---------+ +---------+ | | | | +===+ __ | | | R | | | X-tal ###___ | | O | |__| ####__'| | | M | || ### | +===+ | | | | .. JP1 +----------+ | | .. | big chip | | | .. | 90C63 | | | .. | | | | .. +----------+ | ------- ----------- ||||||||||||||||||||| The row of jumpers at JP1 actually consists of 8 jumpers, (sometimes labelled) the same as on the PC270, from top to bottom: EXT2, EXT1, ROM, IRQ7, IRQ5, IRQ4, IRQ3, IRQ2 (gee, wonder what they would do? :-) ) S1 and S2 perform the same function as on the PC270, only their numbers are swapped (S1 is the nodeaddress, S2 sets IO- and RAM-address). I know it works when connected to a PC110 type ARCnet board. ***************************************************************************** ** Possibly SMC ** LCS-8830(-T) (8 and 16-bit cards) --------------------------------- - from Mathias Katzer - Marek Michalkiewicz says the LCS-8830 is slightly different from LCS-8830-T. These are 8 bit, BUS only (the JP0 jumper is hardwired), and BNC only. This is a LCS-8830-T made by SMC, I think ('SMC' only appears on one PLCC, nowhere else, not even on the few Xeroxed sheets from the manual). SMC ARCnet Board Type LCS-8830-T ------------------------------------ | | | JP3 88 8 JP2 | | ##### | \ | | ##### ET1 ET2 ###| | 8 ###| | U3 SW 1 JP0 ###| Phone Jacks | -- ###| | | | | | | | SW2 | | | | | | | | ##### | | -- ##### #### BNC Connector | #### | 888888 JP1 | | 234567 | -- ------- ||||||||||||||||||||||||||| -------------------------- SW1: DIP-Switches for Station Address SW2: DIP-Switches for Memory Base and I/O Base addresses JP0: If closed, internal termination on (default open) JP1: IRQ Jumpers JP2: Boot-ROM enabled if closed JP3: Jumpers for response timeout U3: Boot-ROM Socket ET1 ET2 Response Time Idle Time Reconfiguration Time 78 86 840 X 285 316 1680 X 563 624 1680 X X 1130 1237 1680 (X means closed jumper) (DIP-Switch downwards means "0") The station address is binary-coded with SW1. The I/O base address is coded with DIP-Switches 6,7 and 8 of SW2: Switches Base 678 Address 000 260-26f 100 290-29f 010 2e0-2ef 110 2f0-2ff 001 300-30f 101 350-35f 011 380-38f 111 3e0-3ef DIP Switches 1-5 of SW2 encode the RAM and ROM Address Range: Switches RAM ROM 12345 Address Range Address Range 00000 C:0000-C:07ff C:2000-C:3fff 10000 C:0800-C:0fff 01000 C:1000-C:17ff 11000 C:1800-C:1fff 00100 C:4000-C:47ff C:6000-C:7fff 10100 C:4800-C:4fff 01100 C:5000-C:57ff 11100 C:5800-C:5fff 00010 C:C000-C:C7ff C:E000-C:ffff 10010 C:C800-C:Cfff 01010 C:D000-C:D7ff 11010 C:D800-C:Dfff 00110 D:0000-D:07ff D:2000-D:3fff 10110 D:0800-D:0fff 01110 D:1000-D:17ff 11110 D:1800-D:1fff 00001 D:4000-D:47ff D:6000-D:7fff 10001 D:4800-D:4fff 01001 D:5000-D:57ff 11001 D:5800-D:5fff 00101 D:8000-D:87ff D:A000-D:bfff 10101 D:8800-D:8fff 01101 D:9000-D:97ff 11101 D:9800-D:9fff 00011 D:C000-D:c7ff D:E000-D:ffff 10011 D:C800-D:cfff 01011 D:D000-D:d7ff 11011 D:D800-D:dfff 00111 E:0000-E:07ff E:2000-E:3fff 10111 E:0800-E:0fff 01111 E:1000-E:17ff 11111 E:1800-E:1fff ***************************************************************************** ** PureData Corp ** PDI507 (8-bit card) -------------------- - from Mark Rejhon (slight modifications by Avery) - Avery's note: I think PDI508 cards (but definitely NOT PDI508Plus cards) are mostly the same as this. PDI508Plus cards appear to be mainly software-configured. Jumpers: There is a jumper array at the bottom of the card, near the edge connector. This array is labelled J1. They control the IRQs and something else. Put only one jumper on the IRQ pins. ETS1, ETS2 are for timing on very long distance networks. See the more general information near the top of this file. There is a J2 jumper on two pins. A jumper should be put on them, since it was already there when I got the card. I don't know what this jumper is for though. There is a two-jumper array for J3. I don't know what it is for, but there were already two jumpers on it when I got the card. It's a six pin grid in a two-by-three fashion. The jumpers were configured as follows: .-------. o | o o | :-------: ------> Accessible end of card with connectors o | o o | in this direction -------> `-------' Carl de Billy explains J3 and J4: J3 Diagram: .-------. o | o o | :-------: TWIST Technology o | o o | `-------' .-------. | o o | o :-------: COAX Technology | o o | o `-------' - If using coax cable in a bus topology the J4 jumper must be removed; place it on one pin. - If using bus topology with twisted pair wiring move the J3 jumpers so they connect the middle pin and the pins closest to the RJ11 Connectors. Also the J4 jumper must be removed; place it on one pin of J4 jumper for storage. - If using star topology with twisted pair wiring move the J3 jumpers so they connect the middle pin and the pins closest to the RJ11 connectors. DIP Switches: The DIP switches accessible on the accessible end of the card while it is installed, is used to set the ARCnet address. There are 8 switches. Use an address from 1 to 254. Switch No. 12345678 ARCnet address ----------------------------------------- 00000000 FF (Don't use this!) 00000001 FE 00000010 FD .... 11111101 2 11111110 1 11111111 0 (Don't use this!) There is another array of eight DIP switches at the top of the card. There are five labelled MS0-MS4 which seem to control the memory address, and another three labelled IO0-IO2 which seem to control the base I/O address of the card. This was difficult to test by trial and error, and the I/O addresses are in a weird order. This was tested by setting the DIP switches, rebooting the computer, and attempting to load ARCETHER at various addresses (mostly between 0x200 and 0x400). The address that caused the red transmit LED to blink, is the one that I thought works. Also, the address 0x3D0 seem to have a special meaning, since the ARCETHER packet driver loaded fine, but without the red LED blinking. I don't know what 0x3D0 is for though. I recommend using an address of 0x300 since Windows may not like addresses below 0x300. IO Switch No. 210 I/O address ------------------------------- 111 0x260 110 0x290 101 0x2E0 100 0x2F0 011 0x300 010 0x350 001 0x380 000 0x3E0 The memory switches set a reserved address space of 0x1000 bytes (0x100 segment units, or 4k). For example if I set an address of 0xD000, it will use up addresses 0xD000 to 0xD100. The memory switches were tested by booting using QEMM386 stealth, and using LOADHI to see what address automatically became excluded from the upper memory regions, and then attempting to load ARCETHER using these addresses. I recommend using an ARCnet memory address of 0xD000, and putting the EMS page frame at 0xC000 while using QEMM stealth mode. That way, you get contiguous high memory from 0xD100 almost all the way the end of the megabyte. Memory Switch 0 (MS0) didn't seem to work properly when set to OFF on my card. It could be malfunctioning on my card. Experiment with it ON first, and if it doesn't work, set it to OFF. (It may be a modifier for the 0x200 bit?) MS Switch No. 43210 Memory address -------------------------------- 00001 0xE100 (guessed - was not detected by QEMM) 00011 0xE000 (guessed - was not detected by QEMM) 00101 0xDD00 00111 0xDC00 01001 0xD900 01011 0xD800 01101 0xD500 01111 0xD400 10001 0xD100 10011 0xD000 10101 0xCD00 10111 0xCC00 11001 0xC900 (guessed - crashes tested system) 11011 0xC800 (guessed - crashes tested system) 11101 0xC500 (guessed - crashes tested system) 11111 0xC400 (guessed - crashes tested system) ***************************************************************************** ** CNet Technology Inc. ** 120 Series (8-bit cards) ------------------------ - from Juergen Seifert CNET TECHNOLOGY INC. (CNet) ARCNET 120A SERIES ============================================== This description has been written by Juergen Seifert using information from the following Original CNet Manual "ARCNET USER'S MANUAL for CN120A CN120AB CN120TP CN120ST CN120SBT P/N:12-01-0007 Revision 3.00" ARCNET is a registered trademark of the Datapoint Corporation P/N 120A ARCNET 8 bit XT/AT Star P/N 120AB ARCNET 8 bit XT/AT Bus P/N 120TP ARCNET 8 bit XT/AT Twisted Pair P/N 120ST ARCNET 8 bit XT/AT Star, Twisted Pair P/N 120SBT ARCNET 8 bit XT/AT Star, Bus, Twisted Pair __________________________________________________________________ | | | ___| | LED |___| | ___| | N | | ID7 | o | | ID6 | d | S | ID5 | e | W | ID4 | ___________________ A | 2 | ID3 | | | d | | ID2 | | | 1 2 3 4 5 6 7 8 d | | ID1 | | | _________________ r |___| ID0 | | 90C65 || SW1 | ____| | JP 8 7 | ||_________________| | | | |o|o| JP1 | | | J2 | | |o|o| |oo| | | JP 1 1 1 | | | ______________ | | 0 1 2 |____| | | PROM | |___________________| |o|o|o| _____| | > SOCKET | JP 6 5 4 3 2 |o|o|o| | J1 | | |______________| |o|o|o|o|o| |o|o|o| |_____| |_____ |o|o|o|o|o| ______________| | | |_____________________________________________| Legend: 90C65 ARCNET Probe S1 1-5: Base Memory Address Select 6-8: Base I/O Address Select S2 1-8: Node ID Select (ID0-ID7) JP1 ROM Enable Select JP2 IRQ2 JP3 IRQ3 JP4 IRQ4 JP5 IRQ5 JP6 IRQ7 JP7/JP8 ET1, ET2 Timeout Parameters JP10/JP11 Coax / Twisted Pair Select (CN120ST/SBT only) JP12 Terminator Select (CN120AB/ST/SBT only) J1 BNC RG62/U Connector (all except CN120TP) J2 Two 6-position Telephone Jack (CN120TP/ST/SBT only) Setting one of the switches to Off means "1", On means "0". Setting the Node ID ------------------- The eight switches in SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 1 (ID0) serves as the least significant bit (LSB). The node ID is the sum of the values of all switches set to "1" These values are: Switch | Label | Value -------|-------|------- 1 | ID0 | 1 2 | ID1 | 2 3 | ID2 | 4 4 | ID3 | 8 5 | ID4 | 16 6 | ID5 | 32 7 | ID6 | 64 8 | ID7 | 128 Some Examples: Switch | Hex | Decimal 8 7 6 5 4 3 2 1 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The last three switches in switch block SW1 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 6 7 8 | Address ------------|-------- ON ON ON | 260 OFF ON ON | 290 ON OFF ON | 2E0 (Manufacturer's default) OFF OFF ON | 2F0 ON ON OFF | 300 OFF ON OFF | 350 ON OFF OFF | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer (RAM) requires 2K. The base of this buffer can be located in any of eight positions. The address of the Boot Prom is memory base + 8K or memory base + 0x2000. Switches 1-5 of switch block SW1 select the Memory Base address. Switch | Hex RAM | Hex ROM 1 2 3 4 5 | Address | Address *) --------------------|---------|----------- ON ON ON ON ON | C0000 | C2000 ON ON OFF ON ON | C4000 | C6000 ON ON ON OFF ON | CC000 | CE000 ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default) ON ON ON ON OFF | D4000 | D6000 ON ON OFF ON OFF | D8000 | DA000 ON ON ON OFF OFF | DC000 | DE000 ON ON OFF OFF OFF | E0000 | E2000 *) To enable the Boot ROM install the jumper JP1 Note: Since the switches 1 and 2 are always set to ON it may be possible that they can be used to add an offset of 2K, 4K or 6K to the base address, but this feature is not documented in the manual and I haven't tested it yet. Setting the Interrupt Line -------------------------- To select a hardware interrupt level install one (only one!) of the jumpers JP2, JP3, JP4, JP5, JP6. JP2 is the default. Jumper | IRQ -------|----- 2 | 2 3 | 3 4 | 4 5 | 5 6 | 7 Setting the Internal Terminator on CN120AB/TP/SBT -------------------------------------------------- The jumper JP12 is used to enable the internal terminator. ----- 0 | 0 | ----- ON | | ON | 0 | | 0 | | | OFF ----- OFF | 0 | 0 ----- Terminator Terminator disabled enabled Selecting the Connector Type on CN120ST/SBT ------------------------------------------- JP10 JP11 JP10 JP11 ----- ----- 0 0 | 0 | | 0 | ----- ----- | | | | | 0 | | 0 | | 0 | | 0 | | | | | ----- ----- | 0 | | 0 | 0 0 ----- ----- Coaxial Cable Twisted Pair Cable (Default) Setting the Timeout Parameters ------------------------------ The jumpers labeled EXT1 and EXT2 are used to determine the timeout parameters. These two jumpers are normally left open. ***************************************************************************** ** CNet Technology Inc. ** 160 Series (16-bit cards) ------------------------- - from Juergen Seifert CNET TECHNOLOGY INC. (CNet) ARCNET 160A SERIES ============================================== This description has been written by Juergen Seifert using information from the following Original CNet Manual "ARCNET USER'S MANUAL for CN160A CN160AB CN160TP P/N:12-01-0006 Revision 3.00" ARCNET is a registered trademark of the Datapoint Corporation P/N 160A ARCNET 16 bit XT/AT Star P/N 160AB ARCNET 16 bit XT/AT Bus P/N 160TP ARCNET 16 bit XT/AT Twisted Pair ___________________________________________________________________ < _________________________ ___| > |oo| JP2 | | LED |___| < |oo| JP1 | 9026 | LED |___| > |_________________________| ___| < N | | ID7 > 1 o | | ID6 < 1 2 3 4 5 6 7 8 9 0 d | S | ID5 > _______________ _____________________ e | W | ID4 < | PROM | | SW1 | A | 2 | ID3 > > SOCKET | |_____________________| d | | ID2 < |_______________| | IO-Base | MEM | d | | ID1 > r |___| ID0 < ____| > | | < | J1 | > | | < |____| > 1 1 1 1 | < 3 4 5 6 7 JP 8 9 0 1 2 3 | > |o|o|o|o|o| |o|o|o|o|o|o| | < |o|o|o|o|o| __ |o|o|o|o|o|o| ___________| > | | | <____________| |_______________________________________| Legend: 9026 ARCNET Probe SW1 1-6: Base I/O Address Select 7-10: Base Memory Address Select SW2 1-8: Node ID Select (ID0-ID7) JP1/JP2 ET1, ET2 Timeout Parameters JP3-JP13 Interrupt Select J1 BNC RG62/U Connector (CN160A/AB only) J1 Two 6-position Telephone Jack (CN160TP only) LED Setting one of the switches to Off means "1", On means "0". Setting the Node ID ------------------- The eight switches in SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 1 (ID0) serves as the least significant bit (LSB). The node ID is the sum of the values of all switches set to "1" These values are: Switch | Label | Value -------|-------|------- 1 | ID0 | 1 2 | ID1 | 2 3 | ID2 | 4 4 | ID3 | 8 5 | ID4 | 16 6 | ID5 | 32 7 | ID6 | 64 8 | ID7 | 128 Some Examples: Switch | Hex | Decimal 8 7 6 5 4 3 2 1 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The first six switches in switch block SW1 are used to select the I/O Base address using the following table: Switch | Hex I/O 1 2 3 4 5 6 | Address ------------------------|-------- OFF ON ON OFF OFF ON | 260 OFF ON OFF ON ON OFF | 290 OFF ON OFF OFF OFF ON | 2E0 (Manufacturer's default) OFF ON OFF OFF OFF OFF | 2F0 OFF OFF ON ON ON ON | 300 OFF OFF ON OFF ON OFF | 350 OFF OFF OFF ON ON ON | 380 OFF OFF OFF OFF OFF ON | 3E0 Note: Other IO-Base addresses seem to be selectable, but only the above combinations are documented. Setting the Base Memory (RAM) buffer Address -------------------------------------------- The switches 7-10 of switch block SW1 are used to select the Memory Base address of the RAM (2K) and the PROM. Switch | Hex RAM | Hex ROM 7 8 9 10 | Address | Address ----------------|---------|----------- OFF OFF ON ON | C0000 | C8000 OFF OFF ON OFF | D0000 | D8000 (Default) OFF OFF OFF ON | E0000 | E8000 Note: Other MEM-Base addresses seem to be selectable, but only the above combinations are documented. Setting the Interrupt Line -------------------------- To select a hardware interrupt level install one (only one!) of the jumpers JP3 through JP13 using the following table: Jumper | IRQ -------|----------------- 3 | 14 4 | 15 5 | 12 6 | 11 7 | 10 8 | 3 9 | 4 10 | 5 11 | 6 12 | 7 13 | 2 (=9) Default! Note: - Do not use JP11=IRQ6, it may conflict with your Floppy Disk Controller - Use JP3=IRQ14 only, if you don't have an IDE-, MFM-, or RLL- Hard Disk, it may conflict with their controllers Setting the Timeout Parameters ------------------------------ The jumpers labeled JP1 and JP2 are used to determine the timeout parameters. These two jumpers are normally left open. ***************************************************************************** ** Lantech ** 8-bit card, unknown model ------------------------- - from Vlad Lungu - his e-mail address seemed broken at the time I tried to reach him. Sorry Vlad, if you didn't get my reply. ________________________________________________________________ | 1 8 | | ___________ __| | | SW1 | LED |__| | |__________| | | ___| | _____________________ |S | 8 | | | |W | | | | |2 | | | | |__| 1 | | UM9065L | |o| JP4 ____|____ | | | |o| | CN | | | | |________| | | | | | |___________________| | | | | | | _____________ | | | | | | | PROM | |ooooo| JP6 | | |____________| |ooooo| | |_____________ _ _| |____________________________________________| |__| UM9065L : ARCnet Controller SW 1 : Shared Memory Address and I/O Base ON=0 12345|Memory Address -----|-------------- 00001| D4000 00010| CC000 00110| D0000 01110| D1000 01101| D9000 10010| CC800 10011| DC800 11110| D1800 It seems that the bits are considered in reverse order. Also, you must observe that some of those addresses are unusual and I didn't probe them; I used a memory dump in DOS to identify them. For the 00000 configuration and some others that I didn't write here the card seems to conflict with the video card (an S3 GENDAC). I leave the full decoding of those addresses to you. 678| I/O Address ---|------------ 000| 260 001| failed probe 010| 2E0 011| 380 100| 290 101| 350 110| failed probe 111| 3E0 SW 2 : Node ID (binary coded) JP 4 : Boot PROM enable CLOSE - enabled OPEN - disabled JP 6 : IRQ set (ONLY ONE jumper on 1-5 for IRQ 2-6) ***************************************************************************** ** Acer ** 8-bit card, Model 5210-003 -------------------------- - from Vojtech Pavlik using portions of the existing arcnet-hardware file. This is a 90C26 based card. Its configuration seems similar to the SMC PC100, but has some additional jumpers I don't know. __ | | ___________|__|_________________________ | | | | | | BNC | | | |______| ___| | _____________________ |___ | | | | | | Hybrid IC | | | | | o|o J1 | | |_____________________| 8|8 | | 8|8 J5 | | o|o | | 8|8 | |__ 8|8 | (|__| LED o|o | | 8|8 | | 8|8 J15 | | | | _____ | | | | _____ | | | | | | ___| | | | | | | | _____ | ROM | | UFS | | | | | | | | | | | | | ___ | | | | | | | | | | |__.__| |__.__| | | | NCR | |XTL| _____ _____ | | | | |___| | | | | | | |90C26| | | | | | | | | | RAM | | UFS | | | | | J17 o|o | | | | | | | | J16 o|o | | | | | | |__.__| |__.__| |__.__| | | ___ | | | |8 | | |SW2| | | | | | | |___|1 | | ___ | | | |10 J18 o|o | | | | o|o | | |SW1| o|o | | | | J21 o|o | | |___|1 | | | |____________________________________| Legend: 90C26 ARCNET Chip XTL 20 MHz Crystal SW1 1-6 Base I/O Address Select 7-10 Memory Address Select SW2 1-8 Node ID Select (ID0-ID7) J1-J5 IRQ Select J6-J21 Unknown (Probably extra timeouts & ROM enable ...) LED1 Activity LED BNC Coax connector (STAR ARCnet) RAM 2k of SRAM ROM Boot ROM socket UFS Unidentified Flying Sockets Setting the Node ID ------------------- The eight switches in SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must not be 0. Switch 1 (ID0) serves as the least significant bit (LSB). Setting one of the switches to OFF means "1", ON means "0". The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 1 | 1 2 | 2 3 | 4 4 | 8 5 | 16 6 | 32 7 | 64 8 | 128 Don't set this to 0 or 255; these values are reserved. Setting the I/O Base Address ---------------------------- The switches 1 to 6 of switch block SW1 are used to select one of 32 possible I/O Base addresses using the following tables | Hex Switch | Value -------|------- 1 | 200 2 | 100 3 | 80 4 | 40 5 | 20 6 | 10 The I/O address is sum of all switches set to "1". Remember that the I/O address space bellow 0x200 is RESERVED for mainboard, so switch 1 should be ALWAYS SET TO OFF. Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer (RAM) requires 2K. The base of this buffer can be located in any of sixteen positions. However, the addresses below A0000 are likely to cause system hang because there's main RAM. Jumpers 7-10 of switch block SW1 select the Memory Base address. Switch | Hex RAM 7 8 9 10 | Address ----------------|--------- OFF OFF OFF OFF | F0000 (conflicts with main BIOS) OFF OFF OFF ON | E0000 OFF OFF ON OFF | D0000 OFF OFF ON ON | C0000 (conflicts with video BIOS) OFF ON OFF OFF | B0000 (conflicts with mono video) OFF ON OFF ON | A0000 (conflicts with graphics) Setting the Interrupt Line -------------------------- Jumpers 1-5 of the jumper block J1 control the IRQ level. ON means shorted, OFF means open. Jumper | IRQ 1 2 3 4 5 | ---------------------------- ON OFF OFF OFF OFF | 7 OFF ON OFF OFF OFF | 5 OFF OFF ON OFF OFF | 4 OFF OFF OFF ON OFF | 3 OFF OFF OFF OFF ON | 2 Unknown jumpers & sockets ------------------------- I know nothing about these. I just guess that J16&J17 are timeout jumpers and maybe one of J18-J21 selects ROM. Also J6-J10 and J11-J15 are connecting IRQ2-7 to some pins on the UFSs. I can't guess the purpose. ***************************************************************************** ** Datapoint? ** LAN-ARC-8, an 8-bit card ------------------------ - from Vojtech Pavlik This is another SMC 90C65-based ARCnet card. I couldn't identify the manufacturer, but it might be DataPoint, because the card has the original arcNet logo in its upper right corner. _______________________________________________________ | _________ | | | SW2 | ON arcNet | | |_________| OFF ___| | _____________ 1 ______ 8 | | 8 | | | SW1 | XTAL | ____________ | S | | > RAM (2k) | |______|| | | W | | |_____________| | H | | 3 | | _________|_____ y | |___| 1 | _________ | | |b | | | |_________| | | |r | | | | SMC | |i | | | | 90C65| |d | | | _________ | | | | | | | SW1 | ON | | |I | | | |_________| OFF |_________|_____/C | _____| | 1 8 | | | |___ | ______________ | | | BNC |___| | | | |____________| |_____| | > EPROM SOCKET | _____________ | | |______________| |_____________| | | ______________| | | |________________________________________| Legend: 90C65 ARCNET Chip SW1 1-5: Base Memory Address Select 6-8: Base I/O Address Select SW2 1-8: Node ID Select SW3 1-5: IRQ Select 6-7: Extra Timeout 8 : ROM Enable BNC Coax connector XTAL 20 MHz Crystal Setting the Node ID ------------------- The eight switches in SW3 are used to set the node ID. Each node attached to the network must have an unique node ID which must not be 0. Switch 1 serves as the least significant bit (LSB). Setting one of the switches to Off means "1", On means "0". The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 1 | 1 2 | 2 3 | 4 4 | 8 5 | 16 6 | 32 7 | 64 8 | 128 Setting the I/O Base Address ---------------------------- The last three switches in switch block SW1 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 6 7 8 | Address ------------|-------- ON ON ON | 260 OFF ON ON | 290 ON OFF ON | 2E0 (Manufacturer's default) OFF OFF ON | 2F0 ON ON OFF | 300 OFF ON OFF | 350 ON OFF OFF | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer (RAM) requires 2K. The base of this buffer can be located in any of eight positions. The address of the Boot Prom is memory base + 0x2000. Jumpers 3-5 of switch block SW1 select the Memory Base address. Switch | Hex RAM | Hex ROM 1 2 3 4 5 | Address | Address *) --------------------|---------|----------- ON ON ON ON ON | C0000 | C2000 ON ON OFF ON ON | C4000 | C6000 ON ON ON OFF ON | CC000 | CE000 ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default) ON ON ON ON OFF | D4000 | D6000 ON ON OFF ON OFF | D8000 | DA000 ON ON ON OFF OFF | DC000 | DE000 ON ON OFF OFF OFF | E0000 | E2000 *) To enable the Boot ROM set the switch 8 of switch block SW3 to position ON. The switches 1 and 2 probably add 0x0800 and 0x1000 to RAM base address. Setting the Interrupt Line -------------------------- Switches 1-5 of the switch block SW3 control the IRQ level. Jumper | IRQ 1 2 3 4 5 | ---------------------------- ON OFF OFF OFF OFF | 3 OFF ON OFF OFF OFF | 4 OFF OFF ON OFF OFF | 5 OFF OFF OFF ON OFF | 7 OFF OFF OFF OFF ON | 2 Setting the Timeout Parameters ------------------------------ The switches 6-7 of the switch block SW3 are used to determine the timeout parameters. These two switches are normally left in the OFF position. ***************************************************************************** ** Topware ** 8-bit card, TA-ARC/10 ------------------------- - from Vojtech Pavlik This is another very similar 90C65 card. Most of the switches and jumpers are the same as on other clones. _____________________________________________________________________ | ___________ | | ______ | | |SW2 NODE ID| | | | XTAL | | | |___________| | Hybrid IC | |______| | | ___________ | | __| | |SW1 MEM+I/O| |_________________________| LED1|__|) | |___________| 1 2 | | J3 |o|o| TIMEOUT ______| | ______________ |o|o| | | | | | ___________________ | RJ | | > EPROM SOCKET | | \ |------| |J2 |______________| | | | | ||o| | | |______| ||o| ROM ENABLE | SMC | _________ | | _____________ | 90C65 | |_________| _____| | | | | | | |___ | > RAM (2k) | | | | BNC |___| | |_____________| | | |_____| | |____________________| | | ________ IRQ 2 3 4 5 7 ___________ | ||________| |o|o|o|o|o| |___________| | |________ J1|o|o|o|o|o| ______________| | | |_____________________________________________| Legend: 90C65 ARCNET Chip XTAL 20 MHz Crystal SW1 1-5 Base Memory Address Select 6-8 Base I/O Address Select SW2 1-8 Node ID Select (ID0-ID7) J1 IRQ Select J2 ROM Enable J3 Extra Timeout LED1 Activity LED BNC Coax connector (BUS ARCnet) RJ Twisted Pair Connector (daisy chain) Setting the Node ID ------------------- The eight switches in SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must not be 0. Switch 1 (ID0) serves as the least significant bit (LSB). Setting one of the switches to Off means "1", On means "0". The node ID is the sum of the values of all switches set to "1" These values are: Switch | Label | Value -------|-------|------- 1 | ID0 | 1 2 | ID1 | 2 3 | ID2 | 4 4 | ID3 | 8 5 | ID4 | 16 6 | ID5 | 32 7 | ID6 | 64 8 | ID7 | 128 Setting the I/O Base Address ---------------------------- The last three switches in switch block SW1 are used to select one of eight possible I/O Base addresses using the following table: Switch | Hex I/O 6 7 8 | Address ------------|-------- ON ON ON | 260 (Manufacturer's default) OFF ON ON | 290 ON OFF ON | 2E0 OFF OFF ON | 2F0 ON ON OFF | 300 OFF ON OFF | 350 ON OFF OFF | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer (RAM) requires 2K. The base of this buffer can be located in any of eight positions. The address of the Boot Prom is memory base + 0x2000. Jumpers 3-5 of switch block SW1 select the Memory Base address. Switch | Hex RAM | Hex ROM 1 2 3 4 5 | Address | Address *) --------------------|---------|----------- ON ON ON ON ON | C0000 | C2000 ON ON OFF ON ON | C4000 | C6000 (Manufacturer's default) ON ON ON OFF ON | CC000 | CE000 ON ON OFF OFF ON | D0000 | D2000 ON ON ON ON OFF | D4000 | D6000 ON ON OFF ON OFF | D8000 | DA000 ON ON ON OFF OFF | DC000 | DE000 ON ON OFF OFF OFF | E0000 | E2000 *) To enable the Boot ROM short the jumper J2. The jumpers 1 and 2 probably add 0x0800 and 0x1000 to RAM address. Setting the Interrupt Line -------------------------- Jumpers 1-5 of the jumper block J1 control the IRQ level. ON means shorted, OFF means open. Jumper | IRQ 1 2 3 4 5 | ---------------------------- ON OFF OFF OFF OFF | 2 OFF ON OFF OFF OFF | 3 OFF OFF ON OFF OFF | 4 OFF OFF OFF ON OFF | 5 OFF OFF OFF OFF ON | 7 Setting the Timeout Parameters ------------------------------ The jumpers J3 are used to set the timeout parameters. These two jumpers are normally left open. ***************************************************************************** ** Thomas-Conrad ** Model #500-6242-0097 REV A (8-bit card) --------------------------------------- - from Lars Karlsson <100617.3473@compuserve.com> ________________________________________________________ | ________ ________ |_____ | |........| |........| | | |________| |________| ___| | SW 3 SW 1 | | | Base I/O Base Addr. Station | | | address | | | ______ switch | | | | | | | | | | |___| | | | ______ |___._ | |______| |______| ____| BNC | Jumper- _____| Connector | Main chip block _ __| ' | | | | RJ Connector | |_| | with 110 Ohm | |__ Terminator | ___________ __| | |...........| | RJ-jack | |...........| _____ | (unused) | |___________| |_____| |__ | Boot PROM socket IRQ-jumpers |_ Diagnostic |________ __ _| LED (red) | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |________| | | And here are the settings for some of the switches and jumpers on the cards. I/O 1 2 3 4 5 6 7 8 2E0----- 0 0 0 1 0 0 0 1 2F0----- 0 0 0 1 0 0 0 0 300----- 0 0 0 0 1 1 1 1 350----- 0 0 0 0 1 1 1 0 "0" in the above example means switch is off "1" means that it is on. ShMem address. 1 2 3 4 5 6 7 8 CX00--0 0 1 1 | | | DX00--0 0 1 0 | X000--------- 1 1 | X400--------- 1 0 | X800--------- 0 1 | XC00--------- 0 0 ENHANCED----------- 1 COMPATIBLE--------- 0 IRQ 3 4 5 7 2 . . . . . . . . . . There is a DIP-switch with 8 switches, used to set the shared memory address to be used. The first 6 switches set the address, the 7th doesn't have any function, and the 8th switch is used to select "compatible" or "enhanced". When I got my two cards, one of them had this switch set to "enhanced". That card didn't work at all, it wasn't even recognized by the driver. The other card had this switch set to "compatible" and it behaved absolutely normally. I guess that the switch on one of the cards, must have been changed accidently when the card was taken out of its former host. The question remains unanswered, what is the purpose of the "enhanced" position? [Avery's note: "enhanced" probably either disables shared memory (use IO ports instead) or disables IO ports (use memory addresses instead). This varies by the type of card involved. I fail to see how either of these enhance anything. Send me more detailed information about this mode, or just use "compatible" mode instead.] ***************************************************************************** ** Waterloo Microsystems Inc. ?? ** 8-bit card (C) 1985 ------------------- - from Robert Michael Best [Avery's note: these don't work with my driver for some reason. These cards SEEM to have settings similar to the PDI508Plus, which is software-configured and doesn't work with my driver either. The "Waterloo chip" is a boot PROM, probably designed specifically for the University of Waterloo. If you have any further information about this card, please e-mail me.] The probe has not been able to detect the card on any of the J2 settings, and I tried them again with the "Waterloo" chip removed. _____________________________________________________________________ | \/ \/ ___ __ __ | | C4 C4 |^| | M || ^ ||^| | | -- -- |_| | 5 || || | C3 | | \/ \/ C10 |___|| ||_| | | C4 C4 _ _ | | ?? | | -- -- | \/ || | | | | || | | | | || C1 | | | | || | \/ _____| | | C6 || | C9 | |___ | | || | -- | BNC |___| | | || | >C7| |_____| | | || | | | __ __ |____||_____| 1 2 3 6 | || ^ | >C4| |o|o|o|o|o|o| J2 >C4| | || | |o|o|o|o|o|o| | || C2 | >C4| >C4| | || | >C8| | || | 2 3 4 5 6 7 IRQ >C4| | ||_____| |o|o|o|o|o|o| J3 | |_______ |o|o|o|o|o|o| _______________| | | |_____________________________________________| C1 -- "COM9026 SMC 8638" In a chip socket. C2 -- "@Copyright Waterloo Microsystems Inc. 1985" In a chip Socket with info printed on a label covering a round window showing the circuit inside. (The window indicates it is an EPROM chip.) C3 -- "COM9032 SMC 8643" In a chip socket. C4 -- "74LS" 9 total no sockets. M5 -- "50006-136 20.000000 MHZ MTQ-T1-S3 0 M-TRON 86-40" Metallic case with 4 pins, no socket. C6 -- "MOSTEK@TC8643 MK6116N-20 MALAYSIA" No socket. C7 -- No stamp or label but in a 20 pin chip socket. C8 -- "PAL10L8CN 8623" In a 20 pin socket. C9 -- "PAl16R4A-2CN 8641" In a 20 pin socket. C10 -- "M8640 NMC 9306N" In an 8 pin socket. ?? -- Some components on a smaller board and attached with 20 pins all along the side closest to the BNC connector. The are coated in a dark resin. On the board there are two jumper banks labeled J2 and J3. The manufacturer didn't put a J1 on the board. The two boards I have both came with a jumper box for each bank. J2 -- Numbered 1 2 3 4 5 6. 4 and 5 are not stamped due to solder points. J3 -- IRQ 2 3 4 5 6 7 The board itself has a maple leaf stamped just above the irq jumpers and "-2 46-86" beside C2. Between C1 and C6 "ASS 'Y 300163" and "@1986 CORMAN CUSTOM ELECTRONICS CORP." stamped just below the BNC connector. Below that "MADE IN CANADA" ***************************************************************************** ** No Name ** 8-bit cards, 16-bit cards ------------------------- - from Juergen Seifert NONAME 8-BIT ARCNET =================== I have named this ARCnet card "NONAME", since there is no name of any manufacturer on the Installation manual nor on the shipping box. The only hint to the existence of a manufacturer at all is written in copper, it is "Made in Taiwan" This description has been written by Juergen Seifert using information from the Original "ARCnet Installation Manual" ________________________________________________________________ | |STAR| BUS| T/P| | | |____|____|____| | | _____________________ | | | | | | | | | | | | | | | SMC | | | | | | | | COM90C65 | | | | | | | | | | | |__________-__________| | | _____| | _______________ | CN | | | PROM | |_____| | > SOCKET | | | |_______________| 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 | | _______________ _______________ | | |o|o|o|o|o|o|o|o| | SW1 || SW2 || | |o|o|o|o|o|o|o|o| |_______________||_______________|| |___ 2 3 4 5 7 E E R Node ID IOB__|__MEM____| | \ IRQ / T T O | |__________________1_2_M______________________| Legend: COM90C65: ARCnet Probe S1 1-8: Node ID Select S2 1-3: I/O Base Address Select 4-6: Memory Base Address Select 7-8: RAM Offset Select ET1, ET2 Extended Timeout Select ROM ROM Enable Select CN RG62 Coax Connector STAR| BUS | T/P Three fields for placing a sign (colored circle) indicating the topology of the card Setting one of the switches to Off means "1", On means "0". Setting the Node ID ------------------- The eight switches in group SW1 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 8 serves as the least significant bit (LSB). The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 8 | 1 7 | 2 6 | 4 5 | 8 4 | 16 3 | 32 2 | 64 1 | 128 Some Examples: Switch | Hex | Decimal 1 2 3 4 5 6 7 8 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The first three switches in switch group SW2 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 1 2 3 | Address ------------|-------- ON ON ON | 260 ON ON OFF | 290 ON OFF ON | 2E0 (Manufacturer's default) ON OFF OFF | 2F0 OFF ON ON | 300 OFF ON OFF | 350 OFF OFF ON | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer requires 2K of a 16K block of RAM. The base of this 16K block can be located in any of eight positions. Switches 4-6 of switch group SW2 select the Base of the 16K block. Within that 16K address space, the buffer may be assigned any one of four positions, determined by the offset, switches 7 and 8 of group SW2. Switch | Hex RAM | Hex ROM 4 5 6 7 8 | Address | Address *) -----------|---------|----------- 0 0 0 0 0 | C0000 | C2000 0 0 0 0 1 | C0800 | C2000 0 0 0 1 0 | C1000 | C2000 0 0 0 1 1 | C1800 | C2000 | | 0 0 1 0 0 | C4000 | C6000 0 0 1 0 1 | C4800 | C6000 0 0 1 1 0 | C5000 | C6000 0 0 1 1 1 | C5800 | C6000 | | 0 1 0 0 0 | CC000 | CE000 0 1 0 0 1 | CC800 | CE000 0 1 0 1 0 | CD000 | CE000 0 1 0 1 1 | CD800 | CE000 | | 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default) 0 1 1 0 1 | D0800 | D2000 0 1 1 1 0 | D1000 | D2000 0 1 1 1 1 | D1800 | D2000 | | 1 0 0 0 0 | D4000 | D6000 1 0 0 0 1 | D4800 | D6000 1 0 0 1 0 | D5000 | D6000 1 0 0 1 1 | D5800 | D6000 | | 1 0 1 0 0 | D8000 | DA000 1 0 1 0 1 | D8800 | DA000 1 0 1 1 0 | D9000 | DA000 1 0 1 1 1 | D9800 | DA000 | | 1 1 0 0 0 | DC000 | DE000 1 1 0 0 1 | DC800 | DE000 1 1 0 1 0 | DD000 | DE000 1 1 0 1 1 | DD800 | DE000 | | 1 1 1 0 0 | E0000 | E2000 1 1 1 0 1 | E0800 | E2000 1 1 1 1 0 | E1000 | E2000 1 1 1 1 1 | E1800 | E2000 *) To enable the 8K Boot PROM install the jumper ROM. The default is jumper ROM not installed. Setting Interrupt Request Lines (IRQ) ------------------------------------- To select a hardware interrupt level set one (only one!) of the jumpers IRQ2, IRQ3, IRQ4, IRQ5 or IRQ7. The manufacturer's default is IRQ2. Setting the Timeouts -------------------- The two jumpers labeled ET1 and ET2 are used to determine the timeout parameters (response and reconfiguration time). Every node in a network must be set to the same timeout values. ET1 ET2 | Response Time (us) | Reconfiguration Time (ms) --------|--------------------|-------------------------- Off Off | 78 | 840 (Default) Off On | 285 | 1680 On Off | 563 | 1680 On On | 1130 | 1680 On means jumper installed, Off means jumper not installed NONAME 16-BIT ARCNET ==================== The manual of my 8-Bit NONAME ARCnet Card contains another description of a 16-Bit Coax / Twisted Pair Card. This description is incomplete, because there are missing two pages in the manual booklet. (The table of contents reports pages ... 2-9, 2-11, 2-12, 3-1, ... but inside the booklet there is a different way of counting ... 2-9, 2-10, A-1, (empty page), 3-1, ..., 3-18, A-1 (again), A-2) Also the picture of the board layout is not as good as the picture of 8-Bit card, because there isn't any letter like "SW1" written to the picture. Should somebody have such a board, please feel free to complete this description or to send a mail to me! This description has been written by Juergen Seifert using information from the Original "ARCnet Installation Manual" ___________________________________________________________________ < _________________ _________________ | > | SW? || SW? | | < |_________________||_________________| | > ____________________ | < | | | > | | | < | | | > | | | < | | | > | | | < | | | > |____________________| | < ____| > ____________________ | | < | | | J1 | > | < | | < |____________________| ? ? ? ? ? ? |____| > |o|o|o|o|o|o| | < |o|o|o|o|o|o| | > | < __ ___________| > | | | <____________| |_______________________________________| Setting one of the switches to Off means "1", On means "0". Setting the Node ID ------------------- The eight switches in group SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 8 serves as the least significant bit (LSB). The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 8 | 1 7 | 2 6 | 4 5 | 8 4 | 16 3 | 32 2 | 64 1 | 128 Some Examples: Switch | Hex | Decimal 1 2 3 4 5 6 7 8 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The first three switches in switch group SW1 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 3 2 1 | Address ------------|-------- ON ON ON | 260 ON ON OFF | 290 ON OFF ON | 2E0 (Manufacturer's default) ON OFF OFF | 2F0 OFF ON ON | 300 OFF ON OFF | 350 OFF OFF ON | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer requires 2K of a 16K block of RAM. The base of this 16K block can be located in any of eight positions. Switches 6-8 of switch group SW1 select the Base of the 16K block. Within that 16K address space, the buffer may be assigned any one of four positions, determined by the offset, switches 4 and 5 of group SW1. Switch | Hex RAM | Hex ROM 8 7 6 5 4 | Address | Address -----------|---------|----------- 0 0 0 0 0 | C0000 | C2000 0 0 0 0 1 | C0800 | C2000 0 0 0 1 0 | C1000 | C2000 0 0 0 1 1 | C1800 | C2000 | | 0 0 1 0 0 | C4000 | C6000 0 0 1 0 1 | C4800 | C6000 0 0 1 1 0 | C5000 | C6000 0 0 1 1 1 | C5800 | C6000 | | 0 1 0 0 0 | CC000 | CE000 0 1 0 0 1 | CC800 | CE000 0 1 0 1 0 | CD000 | CE000 0 1 0 1 1 | CD800 | CE000 | | 0 1 1 0 0 | D0000 | D2000 (Manufacturer's default) 0 1 1 0 1 | D0800 | D2000 0 1 1 1 0 | D1000 | D2000 0 1 1 1 1 | D1800 | D2000 | | 1 0 0 0 0 | D4000 | D6000 1 0 0 0 1 | D4800 | D6000 1 0 0 1 0 | D5000 | D6000 1 0 0 1 1 | D5800 | D6000 | | 1 0 1 0 0 | D8000 | DA000 1 0 1 0 1 | D8800 | DA000 1 0 1 1 0 | D9000 | DA000 1 0 1 1 1 | D9800 | DA000 | | 1 1 0 0 0 | DC000 | DE000 1 1 0 0 1 | DC800 | DE000 1 1 0 1 0 | DD000 | DE000 1 1 0 1 1 | DD800 | DE000 | | 1 1 1 0 0 | E0000 | E2000 1 1 1 0 1 | E0800 | E2000 1 1 1 1 0 | E1000 | E2000 1 1 1 1 1 | E1800 | E2000 Setting Interrupt Request Lines (IRQ) ------------------------------------- ?????????????????????????????????????? Setting the Timeouts -------------------- ?????????????????????????????????????? ***************************************************************************** ** No Name ** 8-bit cards ("Made in Taiwan R.O.C.") ----------- - from Vojtech Pavlik I have named this ARCnet card "NONAME", since I got only the card with no manual at all and the only text identifying the manufacturer is "MADE IN TAIWAN R.O.C" printed on the card. ____________________________________________________________ | 1 2 3 4 5 6 7 8 | | |o|o| JP1 o|o|o|o|o|o|o|o| ON | | + o|o|o|o|o|o|o|o| ___| | _____________ o|o|o|o|o|o|o|o| OFF _____ | | ID7 | | | SW1 | | | | ID6 | > RAM (2k) | ____________________ | H | | S | ID5 | |_____________| | || y | | W | ID4 | | || b | | 2 | ID3 | | || r | | | ID2 | | || i | | | ID1 | | 90C65 || d | |___| ID0 | SW3 | || | | | |o|o|o|o|o|o|o|o| ON | || I | | | |o|o|o|o|o|o|o|o| | || C | | | |o|o|o|o|o|o|o|o| OFF |____________________|| | _____| | 1 2 3 4 5 6 7 8 | | | |___ | ______________ | | | BNC |___| | | | |_____| |_____| | > EPROM SOCKET | | | |______________| | | ______________| | | |_____________________________________________| Legend: 90C65 ARCNET Chip SW1 1-5: Base Memory Address Select 6-8: Base I/O Address Select SW2 1-8: Node ID Select (ID0-ID7) SW3 1-5: IRQ Select 6-7: Extra Timeout 8 : ROM Enable JP1 Led connector BNC Coax connector Although the jumpers SW1 and SW3 are marked SW, not JP, they are jumpers, not switches. Setting the jumpers to ON means connecting the upper two pins, off the bottom two - or - in case of IRQ setting, connecting none of them at all. Setting the Node ID ------------------- The eight switches in SW2 are used to set the node ID. Each node attached to the network must have an unique node ID which must not be 0. Switch 1 (ID0) serves as the least significant bit (LSB). Setting one of the switches to Off means "1", On means "0". The node ID is the sum of the values of all switches set to "1" These values are: Switch | Label | Value -------|-------|------- 1 | ID0 | 1 2 | ID1 | 2 3 | ID2 | 4 4 | ID3 | 8 5 | ID4 | 16 6 | ID5 | 32 7 | ID6 | 64 8 | ID7 | 128 Some Examples: Switch | Hex | Decimal 8 7 6 5 4 3 2 1 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed 0 0 0 0 0 0 0 1 | 1 | 1 0 0 0 0 0 0 1 0 | 2 | 2 0 0 0 0 0 0 1 1 | 3 | 3 . . . | | 0 1 0 1 0 1 0 1 | 55 | 85 . . . | | 1 0 1 0 1 0 1 0 | AA | 170 . . . | | 1 1 1 1 1 1 0 1 | FD | 253 1 1 1 1 1 1 1 0 | FE | 254 1 1 1 1 1 1 1 1 | FF | 255 Setting the I/O Base Address ---------------------------- The last three switches in switch block SW1 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 6 7 8 | Address ------------|-------- ON ON ON | 260 OFF ON ON | 290 ON OFF ON | 2E0 (Manufacturer's default) OFF OFF ON | 2F0 ON ON OFF | 300 OFF ON OFF | 350 ON OFF OFF | 380 OFF OFF OFF | 3E0 Setting the Base Memory (RAM) buffer Address -------------------------------------------- The memory buffer (RAM) requires 2K. The base of this buffer can be located in any of eight positions. The address of the Boot Prom is memory base + 0x2000. Jumpers 3-5 of jumper block SW1 select the Memory Base address. Switch | Hex RAM | Hex ROM 1 2 3 4 5 | Address | Address *) --------------------|---------|----------- ON ON ON ON ON | C0000 | C2000 ON ON OFF ON ON | C4000 | C6000 ON ON ON OFF ON | CC000 | CE000 ON ON OFF OFF ON | D0000 | D2000 (Manufacturer's default) ON ON ON ON OFF | D4000 | D6000 ON ON OFF ON OFF | D8000 | DA000 ON ON ON OFF OFF | DC000 | DE000 ON ON OFF OFF OFF | E0000 | E2000 *) To enable the Boot ROM set the jumper 8 of jumper block SW3 to position ON. The jumpers 1 and 2 probably add 0x0800, 0x1000 and 0x1800 to RAM adders. Setting the Interrupt Line -------------------------- Jumpers 1-5 of the jumper block SW3 control the IRQ level. Jumper | IRQ 1 2 3 4 5 | ---------------------------- ON OFF OFF OFF OFF | 2 OFF ON OFF OFF OFF | 3 OFF OFF ON OFF OFF | 4 OFF OFF OFF ON OFF | 5 OFF OFF OFF OFF ON | 7 Setting the Timeout Parameters ------------------------------ The jumpers 6-7 of the jumper block SW3 are used to determine the timeout parameters. These two jumpers are normally left in the OFF position. ***************************************************************************** ** No Name ** (Generic Model 9058) -------------------- - from Andrew J. Kroll - Sorry this sat in my to-do box for so long, Andrew! (yikes - over a year!) _____ | < | .---' ________________________________________________________________ | | | | SW2 | | | | ___________ |_____________| | | | | | 1 2 3 4 5 6 ___| | | > 6116 RAM | _________ 8 | | | | |___________| |20MHzXtal| 7 | | | | |_________| __________ 6 | S | | | 74LS373 | |- 5 | W | | | _________ | E |- 4 | | | | >_______| ______________|..... P |- 3 | 3 | | | | | : O |- 2 | | | | | | : X |- 1 |___| | | ________________ | | : Y |- | | | | SW1 | | SL90C65 | : |- | | | |________________| | | : B |- | | | 1 2 3 4 5 6 7 8 | | : O |- | | | |_________o____|..../ A |- _______| | | ____________________ | R |- | |------, | | | | D |- | BNC | # | | > 2764 PROM SOCKET | |__________|- |_______|------' | |____________________| _________ | | | >________| <- 74LS245 | | | | | |___ ______________| | |H H H H H H H H H H H H H H H H H H H H H H H| | | |U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U_U| | | \| Legend: SL90C65 ARCNET Controller / Transceiver /Logic SW1 1-5: IRQ Select 6: ET1 7: ET2 8: ROM ENABLE SW2 1-3: Memory Buffer/PROM Address 3-6: I/O Address Map SW3 1-8: Node ID Select BNC BNC RG62/U Connection *I* have had success using RG59B/U with *NO* terminators! What gives?! SW1: Timeouts, Interrupt and ROM --------------------------------- To select a hardware interrupt level set one (only one!) of the dip switches up (on) SW1...(switches 1-5) IRQ3, IRQ4, IRQ5, IRQ7, IRQ2. The Manufacturer's default is IRQ2. The switches on SW1 labeled EXT1 (switch 6) and EXT2 (switch 7) are used to determine the timeout parameters. These two dip switches are normally left off (down). To enable the 8K Boot PROM position SW1 switch 8 on (UP) labeled ROM. The default is jumper ROM not installed. Setting the I/O Base Address ---------------------------- The last three switches in switch group SW2 are used to select one of eight possible I/O Base addresses using the following table Switch | Hex I/O 4 5 6 | Address -------|-------- 0 0 0 | 260 0 0 1 | 290 0 1 0 | 2E0 (Manufacturer's default) 0 1 1 | 2F0 1 0 0 | 300 1 0 1 | 350 1 1 0 | 380 1 1 1 | 3E0 Setting the Base Memory Address (RAM & ROM) ------------------------------------------- The memory buffer requires 2K of a 16K block of RAM. The base of this 16K block can be located in any of eight positions. Switches 1-3 of switch group SW2 select the Base of the 16K block. (0 = DOWN, 1 = UP) I could, however, only verify two settings... Switch| Hex RAM | Hex ROM 1 2 3 | Address | Address ------|---------|----------- 0 0 0 | E0000 | E2000 0 0 1 | D0000 | D2000 (Manufacturer's default) 0 1 0 | ????? | ????? 0 1 1 | ????? | ????? 1 0 0 | ????? | ????? 1 0 1 | ????? | ????? 1 1 0 | ????? | ????? 1 1 1 | ????? | ????? Setting the Node ID ------------------- The eight switches in group SW3 are used to set the node ID. Each node attached to the network must have an unique node ID which must be different from 0. Switch 1 serves as the least significant bit (LSB). switches in the DOWN position are OFF (0) and in the UP position are ON (1) The node ID is the sum of the values of all switches set to "1" These values are: Switch | Value -------|------- 1 | 1 2 | 2 3 | 4 4 | 8 5 | 16 6 | 32 7 | 64 8 | 128 Some Examples: Switch# | Hex | Decimal 8 7 6 5 4 3 2 1 | Node ID | Node ID ----------------|---------|--------- 0 0 0 0 0 0 0 0 | not allowed <-. 0 0 0 0 0 0 0 1 | 1 | 1 | 0 0 0 0 0 0 1 0 | 2 | 2 | 0 0 0 0 0 0 1 1 | 3 | 3 | . . . | | | 0 1 0 1 0 1 0 1 | 55 | 85 | . . . | | + Don't use 0 or 255! 1 0 1 0 1 0 1 0 | AA | 170 | . . . | | | 1 1 1 1 1 1 0 1 | FD | 253 | 1 1 1 1 1 1 1 0 | FE | 254 | 1 1 1 1 1 1 1 1 | FF | 255 <-' ***************************************************************************** ** Tiara ** (model unknown) ------------------------- - from Christoph Lameter Here is information about my card as far as I could figure it out: ----------------------------------------------- tiara Tiara LanCard of Tiara Computer Systems. +----------------------------------------------+ ! ! Transmitter Unit ! ! ! +------------------+ ------- ! MEM Coax Connector ! ROM 7654321 <- I/O ------- ! : : +--------+ ! ! : : ! 90C66LJ! +++ ! : : ! ! !D Switch to set ! : : ! ! !I the Nodenumber ! : : +--------+ !P ! !++ ! 234567 <- IRQ ! +------------!!!!!!!!!!!!!!!!!!!!!!!!--------+ !!!!!!!!!!!!!!!!!!!!!!!! 0 = Jumper Installed 1 = Open Top Jumper line Bit 7 = ROM Enable 654=Memory location 321=I/O Settings for Memory Location (Top Jumper Line) 456 Address selected 000 C0000 001 C4000 010 CC000 011 D0000 100 D4000 101 D8000 110 DC000 111 E0000 Settings for I/O Address (Top Jumper Line) 123 Port 000 260 001 290 010 2E0 011 2F0 100 300 101 350 110 380 111 3E0 Settings for IRQ Selection (Lower Jumper Line) 234567 011111 IRQ 2 101111 IRQ 3 110111 IRQ 4 111011 IRQ 5 111110 IRQ 7 ***************************************************************************** Other Cards ----------- I have no information on other models of ARCnet cards at the moment. Please send any and all info to: apenwarr@worldvisions.ca Thanks. To use the amateur radio protocols within Linux you will need to get a suitable copy of the AX.25 Utilities. More detailed information about these and associated programs can be found on http://zone.pspt.fi/~jsn/. For more information about the AX.25, NET/ROM and ROSE protocol stacks, see the AX25-HOWTO written by Terry Dawson who is also the AX.25 Utilities maintainer. There is an active mailing list for discussing Linux amateur radio matters called linux-hams. To subscribe to it, send a message to majordomo@vger.kernel.org with the words "subscribe linux-hams" in the body of the message, the subject field is ignored. Jonathan G4KLX g4klx@g4klx.demon.co.uk LINUX DRIVERS FOR BAYCOM MODEMS Thomas M. Sailer, HB9JNX/AE4WA, !!NEW!! (04/98) The drivers for the baycom modems have been split into separate drivers as they did not share any code, and the driver and device names have changed. This document describes the Linux Kernel Drivers for simple Baycom style amateur radio modems. The following drivers are available: baycom_ser_fdx: This driver supports the SER12 modems either full or half duplex. Its baud rate may be changed via the `baud' module parameter, therefore it supports just about every bit bang modem on a serial port. Its devices are called bcsf0 through bcsf3. This is the recommended driver for SER12 type modems, however if you have a broken UART clone that does not have working delta status bits, you may try baycom_ser_hdx. baycom_ser_hdx: This is an alternative driver for SER12 type modems. It only supports half duplex, and only 1200 baud. Its devices are called bcsh0 through bcsh3. Use this driver only if baycom_ser_fdx does not work with your UART. baycom_par: This driver supports the par96 and picpar modems. Its devices are called bcp0 through bcp3. baycom_epp: This driver supports the EPP modem. Its devices are called bce0 through bce3. This driver is work-in-progress. The following modems are supported: ser12: This is a very simple 1200 baud AFSK modem. The modem consists only of a modulator/demodulator chip, usually a TI TCM3105. The computer is responsible for regenerating the receiver bit clock, as well as for handling the HDLC protocol. The modem connects to a serial port, hence the name. Since the serial port is not used as an async serial port, the kernel driver for serial ports cannot be used, and this driver only supports standard serial hardware (8250, 16450, 16550) par96: This is a modem for 9600 baud FSK compatible to the G3RUH standard. The modem does all the filtering and regenerates the receiver clock. Data is transferred from and to the PC via a shift register. The shift register is filled with 16 bits and an interrupt is signalled. The PC then empties the shift register in a burst. This modem connects to the parallel port, hence the name. The modem leaves the implementation of the HDLC protocol and the scrambler polynomial to the PC. picpar: This is a redesign of the par96 modem by Henning Rech, DF9IC. The modem is protocol compatible to par96, but uses only three low power ICs and can therefore be fed from the parallel port and does not require an additional power supply. Furthermore, it incorporates a carrier detect circuitry. EPP: This is a high-speed modem adaptor that connects to an enhanced parallel port. Its target audience is users working over a high speed hub (76.8kbit/s). eppfpga: This is a redesign of the EPP adaptor. All of the above modems only support half duplex communications. However, the driver supports the KISS (see below) fullduplex command. It then simply starts to send as soon as there's a packet to transmit and does not care about DCD, i.e. it starts to send even if there's someone else on the channel. This command is required by some implementations of the DAMA channel access protocol. The Interface of the drivers Unlike previous drivers, these drivers are no longer character devices, but they are now true kernel network interfaces. Installation is therefore simple. Once installed, four interfaces named bc{sf,sh,p,e}[0-3] are available. sethdlc from the ax25 utilities may be used to set driver states etc. Users of userland AX.25 stacks may use the net2kiss utility (also available in the ax25 utilities package) to convert packets of a network interface to a KISS stream on a pseudo tty. There's also a patch available from me for WAMPES which allows attaching a kernel network interface directly. Configuring the driver Every time a driver is inserted into the kernel, it has to know which modems it should access at which ports. This can be done with the setbaycom utility. If you are only using one modem, you can also configure the driver from the insmod command line (or by means of an option line in /etc/conf.modules). Examples: insmod baycom_ser_fdx mode="ser12*" iobase=0x3f8 irq=4 sethdlc -i bcsf0 -p mode "ser12*" io 0x3f8 irq 4 Both lines configure the first port to drive a ser12 modem at the first serial port (COM1 under DOS). The * in the mode parameter instructs the driver to use the software DCD algorithm (see below). insmod baycom_par mode="picpar" iobase=0x378 sethdlc -i bcp0 -p mode "picpar" io 0x378 Both lines configure the first port to drive a picpar modem at the first parallel port (LPT1 under DOS). (Note: picpar implies hardware DCD, par96 implies software DCD). The channel access parameters can be set with sethdlc -a or kissparms. Note that both utilities interpret the values slightly differently. Hardware DCD versus Software DCD To avoid collisions on the air, the driver must know when the channel is busy. This is the task of the DCD circuitry/software. The driver may either utilise a software DCD algorithm (options=1) or use a DCD signal from the hardware (options=0). ser12: if software DCD is utilised, the radio's squelch should always be open. It is highly recommended to use the software DCD algorithm, as it is much faster than most hardware squelch circuitry. The disadvantage is a slightly higher load on the system. par96: the software DCD algorithm for this type of modem is rather poor. The modem simply does not provide enough information to implement a reasonable DCD algorithm in software. Therefore, if your radio feeds the DCD input of the PAR96 modem, the use of the hardware DCD circuitry is recommended. picpar: the picpar modem features a builtin DCD hardware, which is highly recommended. Compatibility with the rest of the Linux kernel The serial driver and the baycom serial drivers compete for the same hardware resources. Of course only one driver can access a given interface at a time. The serial driver grabs all interfaces it can find at startup time. Therefore the baycom drivers subsequently won't be able to access a serial port. You might therefore find it necessary to release a port owned by the serial driver with 'setserial /dev/ttyS# uart none', where # is the number of the interface. The baycom drivers do not reserve any ports at startup, unless one is specified on the 'insmod' command line. Another method to solve the problem is to compile all drivers as modules and leave it to kmod to load the correct driver depending on the application. The parallel port drivers (baycom_par, baycom_epp) now use the parport subsystem to arbitrate the ports between different client drivers. vy 73s de Tom Sailer, sailer@ife.ee.ethz.ch hb9jnx @ hb9w.ampr.org Installation: Apply patch. (if your reading this in /usr/src/linux/Documentation/networking/bonding.txt, then it's already applied.) Run make menuconfig/xconfig/config, and select 'bonding device' in network devices. Build the new kernel/modules. Get update ifenslave.c (included in tar file.) (location to be determined.) install ifenslave.c; do: gcc -O2 -o ifenslave ifenslave.c cp ifenslave /sbin/ifenslave Modify /etc/conf.modules by adding the line: alias bond0 bonding If you running a RH5.0 or newer distribution, do: cd /etc/sysconfig/network-scripts cp ifcfg-eth0 ifcfg-bond0 edit ifcfg-bond0, and make it look the following: DEVICE=bond0 USERCTL=no ONBOOT=yes BOOTPROTO=none BROADCAST=XXX.XXX.XXX.255 NETWORK=XXX.XXX.XXX.0 NETMASK=255.255.255.0 IPADDR=XXX.XXX.XXX.XXX (put the approiate values for you network in where the XXX's are at.) Then, edit ifcfg-eth0/ifcfg-eth1 (and all the other slave devices), and make them look like this: DEVICE=eth0 USERCTL=no ONBOOT=yes MASTER=bond0 SLAVE=yes BOOTPROTO=none Reboot, and the network should come up bonded together. For other distributions, you need to do something like: /sbin/ifconfig bond0 addresss netmask xxx.xxx.xxx.xxx broadcast xxx.xxx.xxx.xxx up /sbin/ifenslave bond0 eth0 /sbin/ifenslave bond0 eth1 When properly configured, it will look this: [root]# /sbin/ifconfig bond0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:7224794 errors:0 dropped:0 overruns:0 frame:0 TX packets:3286647 errors:1 dropped:0 overruns:1 carrier:0 collisions:0 txqueuelen:0 eth0 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:3573025 errors:0 dropped:0 overruns:0 frame:0 TX packets:1643167 errors:1 dropped:0 overruns:1 carrier:0 collisions:0 txqueuelen:100 Interrupt:10 Base address:0x1080 eth1 Link encap:Ethernet HWaddr 00:C0:F0:1F:37:B4 inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.252.0 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:3651769 errors:0 dropped:0 overruns:0 frame:0 TX packets:1643480 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 Interrupt:9 Base address:0x1400 Questions: 1. Is it SMP safe? Yes. The old 2.0.xx channel bonding patch wasn't SMP safe. This one was designed from the start to be SMP safe. 2. What type of cards can it work with it? Any Ethernet type cards (ie, you can even mix cards - a tulip and a 3com 3c905, for example). You can even bond together Gigabit Ethernet cards! 3. How many bond devices can I have? Just one at this time. 4. How many slaves can a bond device have? Limited by the number of cards you can place in your system. 5. What happens when a slave dies? Currently, the ethernet drivers don't really handle this situation very well. The tulip driver never stalls; it just starts to throw packets away! 6. If this was fixed, can bonding be used for High Availability? Yes! 7. Which switches/systems does it work with? Cisco 5500 series (look for EtherChannel support). SunTrunking software. 8. Where does the bond0 device get it's mac address from? It's taken from the first slave device. If you remove that first slave device, the MAC address continues to be associated with it. If you wish to remove that MAC address, you have to ifconfig bond0 down, and then modprobe -r bonding. If you wish, you can also assign a MAC address when you ifconfig the bond0 device. 9. Which transmit policy is used? Round robin, based on order of enslaving. COMX drivers for the 2.2 kernel Originally written by: Tivadar Szemethy, Currently maintained by: Gergely Madarasz Last change: 21/06/1999. INTRODUCTION This document describes the software drivers and their use for the COMX line of synchronous serial adapters for Linux version 2.2.0 and above. The cards are produced and sold by ITC-Pro Ltd. Budapest, Hungary For further info contact or http://www.itc.hu (mostly in Hungarian). The firmware files and software are available from ftp://ftp.itc.hu Currently, the drivers support the following cards and protocols: COMX (2x64 kbps intelligent board) CMX (1x256 + 1x128 kbps intelligent board) HiCOMX (2x2Mbps intelligent board) LoCOMX (1x512 kbps passive board) MixCOM (1x512 or 2x512kbps passive board with a hardware watchdog an optional BRI interface and optional flashROM (1-32M)) At the moment of writing this document, the (Cisco)-HDLC, LAPB, SyncPPP and Frame Relay (DTE, rfc1294 IP encapsulation with partially implemented Q933a LMI) protocols are available as link-level protocol. X.25 support is being worked on. USAGE Load the comx.o module and the hardware-specific and protocol-specific modules you'll need into the running kernel using the insmod utility. This creates the /proc/comx directory. See the example scripts in the 'etc' directory. /proc INTERFACE INTRO The COMX driver set has a new type of user interface based on the /proc filesystem which eliminates the need for external user-land software doing IOCTL calls. Each network interface or device (i.e. those ones you configure with 'ifconfig' and 'route' etc.) has a corresponding directory under /proc/comx. You can dynamically create a new interface by saying 'mkdir /proc/comx/comx0' (or you can name it whatever you want up to 8 characters long, comx[n] is just a convention). Generally the files contained in these directories are text files, which can be viewed by 'cat filename' and you can write a string to such a file by saying 'echo _string_ >filename'. This is very similar to the sysctl interface. Don't use a text editor to edit these files, always use 'echo' (or 'cat' where appropriate). When you've created the comx[n] directory, two files are created automagically in it: 'boardtype' and 'protocol'. You have to fill in these files correctly for your board and protocol you intend to use (see the board and protocol descriptions in this file below or the example scripts in the 'etc' directory). After filling in these files, other files will appear in the directory for setting the various hardware- and protocol-related informations (for example irq and io addresses, keepalive values etc.) These files are set to default values upon creation, so you don't necessarily have to change all of them. When you're ready with filling in the files in the comx[n] directory, you can configure the corresponding network interface with the standard network configuration utilities. If you're unable to bring the interfaces up, look up the various kernel log files on your system, and consult the messages for a probable reason. EXAMPLE To create the interface 'comx0' which is the first channel of a COMX card: insmod comx # insmod comx-hw-comx ; insmod comx-proto-hdlc (these are usually autoloaded if you use the kernel module loader) mkdir /proc/comx/comx0 echo comx >/proc/comx/comx0/boardtype echo 0x360 >/proc/comx/comx0/io <- jumper-selectable I/O port echo 0x0a >/proc/comx/comx0/irq <- jumper-selectable IRQ line echo 0xd000 >/proc/comx/comx0/memaddr <- software-configurable memory address. COMX uses 64 KB, and this can be: 0xa000, 0xb000, 0xc000, 0xd000, 0xe000. Avoid conflicts with other hardware. cat /proc/comx/comx0/firmware <- the firmware for the card echo HDLC >/proc/comx/comx0/protocol <- the data-link protocol echo 10 >/proc/comx/comx0/keepalive <- the keepalive for the protocol ifconfig comx0 1.2.3.4 pointopoint 5.6.7.8 netmask 255.255.255.255 <- finally configure it with ifconfig Check its status: cat /proc/comx/comx0/status If you want to use the second channel of this board: mkdir /proc/comx/comx1 echo comx >/proc/comx/comx1/boardtype echo 0x360 >/proc/comx/comx1/io echo 10 >/proc/comx/comx1/irq echo 0xd000 >/proc/comx/comx1/memaddr echo 1 >/proc/comx/comx1/channel <- channels are numbered as 0 (default) and 1 Now, check if the driver recognized that you're going to use the other channel of the same adapter: cat /proc/comx/comx0/twin comx1 cat /proc/comx/comx1/twin comx0 You don't have to load the firmware twice, if you use both channels of an adapter, just write it into the channel 0's /proc firmware file. Default values: io 0x360 for COMX, 0x320 (HICOMX), irq 10, memaddr 0xd0000 THE LOCOMX HARDWARE DRIVER The LoCOMX driver doesn't require firmware, and it doesn't use memory either, but it uses DMA channels 1 and 3. You can set the clock rate (if enabled by jumpers on the board) by writing the kbps value into the file named 'clock'. Set it to 'external' (it is the default) if you have external clock source. (Note: currently the LoCOMX driver does not support the internal clock) THE COMX, CMX AND HICOMX DRIVERS On the HICOMX, COMX and CMX, you have to load the firmware (it is different for the three cards!). All these adapters can share the same memory address (we usually use 0xd0000). On the CMX you can set the internal clock rate (if enabled by jumpers on the small adapter boards) by writing the kbps value into the 'clock' file. You have to do this before initializing the card. If you use both HICOMX and CMX/COMX cards, initialize the HICOMX first. The I/O address of the HICOMX board is not configurable by any method available to the user: it is hardwired to 0x320, and if you have to change it, consult ITC-Pro Ltd. THE MIXCOM DRIVER The MixCOM board doesn't require firmware, the driver communicates with it through I/O ports. You can have three of these cards in one machine. THE HDLC LINE PROTOCOL DRIVER There's only one configurable parameter with this protocol: the 'keepalive' value. You can set this in seconds or set to 'off'. Agree with the administrator of your peer router on this setting. The default is 10 (seconds). EXAMPLE (setting up hw parameters, see above) echo hdlc >/proc/comx/comx0/protocol echo 10 >/proc/comx/comx0/keepalive <- not necessary, 10 is the default ifconfig comx0 1.2.3.4 pointopoint 5.6.7.8 netmask 255.255.255.255 THE PPP LINE PROTOCOL DRIVER To use this driver, you have to have ppp-2.3.4, and have a modified version of pppd (this pppd will work as async pppd to, the modifiactions merely relax some restricions in order to be able to use non-async lines too. If configured, this driver can use Van Jacobson TCP header compression (you'll need the slhc.o module for this). Additionaly to use this protocol, enable async ppp in your kernel config, and create the comx device special files in /dev. They're character special files with major 88, and their names must be the same as their network interface counterparts (i.e /dev/comx0 with minor 0 corresponds interface comx0 and so on). EXAMPLE (setting up hw parameters, see above) echo ppp >/proc/comx/comx0/protocol ifconfig comx0 up pppd comx0 1.2.3.4:5.6.7.8 persist <- with this option pppd won't exit when the line goes down THE LAPB LINE PROTOCOL DRIVER For this, you'll need to configure LAPB support (See 'LAPB Data Link Driver' in 'Network options' section) into your kernel (thanks to Jonathan Naylor for his excellent implementation). comxlapb.o provides the following files in the appropriate directory (the default values in parens): t1 (5), t2 (1), n2 (20), mode (DTE, STD) and window (7). Agree with the administrator of your peer router on these settings (most people use defaults, but you have to know if you are DTE or DCE). EXAMPLE (setting up hw parameters, see above) echo lapb >/proc/comx/comx0/protocol echo dce >/proc/comx/comx0/mode <- DCE interface in this example ifconfig comx0 1.2.3.4 pointopoint 5.6.7.8 netmask 255.255.255.255 THE FRAME RELAY PROTOCOL DRIVER You DON'T need any other frame relay related modules from the kernel to use COMX-Frame Relay. This protocol is a bit more complicated than the others, because it allows to use 'subinterfaces' or DLCIs within one physical device. First you have to create the 'master' device (the actual physical interface) as you would do for other protocols. Specify 'frad' as protocol type. Now you can bring this interface up by saying 'ifconfig comx0 up' (or whatever you've named the interface). Do not assign any IP address to this interface and do not set any routes through it. Then, set up your DLCIs the following way: create a comx interface for each DLCI you intend to use (with mkdir), and write 'dlci' to the 'boardtype' file, and 'ietf-ip' to the 'protocol' file. Currently, the only supported encapsulation type is this (also called as RFC1294/1490 IP encapsulation). Write the DLCI number to the 'dlci' file, and write the name of the physical COMX device to the file called 'master'. Now you can assign an IP address to this interface and set routes using it. See the example file for further info and example config script. Notes: this driver implements a DTE interface with partially implemented Q933a LMI. You can find an extensively commented example in the 'etc' directory. FURTHER /proc FILES boardtype: Type of the hardware. Valid values are: 'comx', 'hicomx', 'locomx', 'cmx'. protocol: Data-link protocol on this channel. Can be: HDLC, LAPB, PPP, FRAD status: You can read the channel's actual status from the 'status' file, for example 'cat /proc/comx/comx3/status'. lineup_delay: Interpreted in seconds (default is 1). Used to avoid line jitter: the system will consider the line status 'UP' only if it is up for at least this number of seconds. debug: You can set various debug options through this file. Valid options are: 'comx_events', 'comx_tx', 'comx_rx', 'hw_events', 'hw_tx', 'hw_rx'. You can enable a debug options by writing its name prepended by a '+' into the debug file, for example 'echo +comx_rx >comx0/debug'. Disabling an option happens similarly, use the '-' prefix (e.g. 'echo -hw_rx >debug'). Debug results can be read from the debug file, for example: tail -f /proc/comx/comx2/debug There are a few network parameters that can be tuned to better match the kernel to your system hardware and intended usage. The defaults are usually a good choice for 99% of the people 99% of the time, but you should be aware they do exist and can be changed. The current list of parameters can be found in the files: linux/net/TUNABLE linux/Documentation/networking/ip-sysctl.txt Some of these are accessible via the sysctl interface, and many more are scheduled to be added in this way. For example, some parameters related to Address Resolution Protocol (ARP) are very easily viewed and altered. # cat /proc/sys/net/ipv4/arp_timeout 6000 # echo 7000 > /proc/sys/net/ipv4/arp_timeout # cat /proc/sys/net/ipv4/arp_timeout 7000 Others are already accessible via the related user space programs. For example, MAX_WINDOW has a default of 32 k which is a good choice for modern hardware, but if you have a slow (8 bit) Ethernet card and/or a slow machine, then this will be far too big for the card to keep up with fast machines transmitting on the same net, resulting in overruns and receive errors. A value of about 4 k would be more appropriate, which can be set via: # route add -net 192.168.3.0 window 4096 The remainder of these can only be presently changed by altering a #define in the related header file. This means an edit and recompile cycle. Paul Gortmaker 06/96 Text File for the COPS LocalTalk Linux driver (cops.c). By Jay Schulist This driver has two modes and they are: Dayna mode and Tangent mode. Each mode corresponds with the type of card. It has been found that there are 2 main types of cards and all other cards are the same and just have different names or only have minor differences such as more IO ports. As this driver is tested it will become more clear exactly what cards are supported. Right now these cards are known to work with the COPS driver. The LT-200 cards work in a somewhat more limited capacity than the DL200 cards, which work very well and are in use by many people. TANGENT driver mode: Tangent ATB-II, Novell NL-1000, Daystar Digital LT-200 DAYNA driver mode: Dayna DL2000/DaynaTalk PC (Half Length), COPS LT-95, Farallon PhoneNET PC III, Farallon PhoneNET PC II Other cards possibly supported mode unknown though: Dayna DL2000 (Full length) The COPS driver defaults to using Dayna mode. To change the driver's mode if you built a driver with dual support use board_type=1 or board_type=2 for Dayna or Tangent with insmod. ** Operation/loading of the driver. Use modprobe like this: /sbin/modprobe cops.o (IO #) (IRQ #) If you do not specify any options the driver will try and use the IO = 0x240, IRQ = 5. As of right now I would only use IRQ 5 for the card, if autoprobing. To load multiple COPS driver Localtalk cards you can do one of the following. insmod cops io=0x240 irq=5 insmod -o cops2 cops io=0x260 irq=3 Or in lilo.conf put something like this: append="ether=5,0x240,lt0 ether=3,0x260,lt1" Then bring up the interface with ifconfig. It will look something like this: lt0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-F7-00-00-00-00-00-00-00-00 inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0 UP BROADCAST RUNNING NOARP MULTICAST MTU:600 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 coll:0 ** Netatalk Configuration You will need to configure atalkd with something like the following to make it work with the cops.c driver. * For single LTalk card use. dummy -seed -phase 2 -net 2000 -addr 2000.10 -zone "1033" lt0 -seed -phase 1 -net 1000 -addr 1000.50 -zone "1033" * For multiple cards, Ethernet and LocalTalk. eth0 -seed -phase 2 -net 3000 -addr 3000.20 -zone "1033" lt0 -seed -phase 1 -net 1000 -addr 1000.50 -zone "1033" * For multiple LocalTalk cards, and an Ethernet card. * Order seems to matter here, Ethernet last. lt0 -seed -phase 1 -net 1000 -addr 1000.10 -zone "LocalTalk1" lt1 -seed -phase 1 -net 2000 -addr 2000.20 -zone "LocalTalk2" eth0 -seed -phase 2 -net 3000 -addr 3000.30 -zone "EtherTalk" CRYSTAL LAN CS8900/CS8920 ETHERNET ADAPTERS Linux Network Interface Driver ver. 1.02 =============================================================================== TABLE OF CONTENTS 1.0 CRYSTAL LAN CS8900/CS8920 ETHERNET ADAPTERS 1.1 Product Overview 1.2 Driver Description 1.2.1 Driver Name 1.2.2 File in the Driver Package 1.3 System Requirements 1.4 Licensing Information 2.0 ADAPTER INSTALLATION and CONFIGURATION 2.1 CS8900-based Adapter Configuration 2.2 CS8920-based Adapter Configuration 3.0 LOADING THE DRIVER AS A MODULE 4.0 COMPILING THE DRIVER 4.1 Compiling the Driver As a Loadable Module 4.2 Compiling the Driver Into the Kernel 4.3 Compiling the Driver for a Linux v1.2.13 Kernel 5.0 TESTING AND TROUBLESHOOTING 5.1 Known Defects and Limitations 5.2 Testing the Adapter 5.2.1 Diagnostic Self-Test 5.2.2 Diagnostic Network Test 5.3 Using the Adapter's LEDs 5.4 Resolving I/O Conflicts 6.0 TECHNICAL SUPPORT 6.1 Contacting Crystal's Technical Support 6.2 Information Required Before Contacting Technical Support 6.3 Obtaining the Latest Driver Version 6.3.1 Crystal's Web Site 6.3.2 Crystal's Bulletin Board Service 1.0 CRYSTAL LAN CS8900/CS8920 ETHERNET ADAPTERS =============================================================================== 1.1 PRODUCT OVERVIEW The CS8900-based ISA Ethernet Adapters from Crystal Semiconductor follow IEEE 802.3 standards and support half or full-duplex operation in ISA bus computers on 10 Mbps Ethernet networks. The adapters are designed for operation in 16-bit ISA or EISA bus expansion slots and are available in 10BaseT-only or 3-media configurations (10BaseT, 10Base2, and AUI for 10Base-5 or fiber networks). CS8920-based adapters are similar to the CS8900-based adapter with additional features for Plug and Play (PnP) support and Wakeup Frame recognition. As such, the configuration procedures differ somewhat between the two types of adapters. Refer to the "Adapter Configuration" section for details on configuring both types of adapters. 1.2 DRIVER DESCRIPTION The CS8900/CS8920 Ethernet Adapter driver for Linux supports the Linux v1.2.13 and v2.0 (or greater) kernels. It can be compiled directly into the kernel or loaded at run-time as a device driver module. 1.2.1 Driver Name: cs89x0 1.2.2 Files in the Driver Archive: readme.txt - this file release.txt - known defects and modification log cs89x0.c - driver C code cs89x0.h - driver header file cs89x0.o - pre-compiled module (for v2.0 kernel) 1.3 SYSTEM REQUIREMENTS The following hardware is required: * Crystal LAN (CS8900/20-based) Ethernet ISA Adapter * IBM or IBM-compatible PC with: * An 80386 or higher processor * 16 bytes of contiguous IO space available between 210h - 370h * One available IRQ (5,10,11,or 12 for the CS8900, 3-7,9-15 for CS8920). * Appropriate cable (and connector for AUI, 10BASE-2) for your network topology. The following software is required: * LINUX kernel version 1.2.13 or 2.X * CS8900/20 Setup Utility (DOS-based) * LINUX kernel sources for your kernel (if compiling into kernel) * GNU Toolkit (gcc and make) v2.6 or above (if compiling into kernel or a module) 1.4 LICENSING INFORMATION 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, version 1. 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. For a full copy of the GNU General Public License, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 2.0 ADAPTER INSTALLATION and CONFIGURATION =============================================================================== Both the CS8900 and CS8920-based adapters can be configured using parameters stored in an on-board EEPROM. You must use the DOS-based CS8900/20 Setup Utility if you want to change the adapter's configuration in EEPROM. When loading the driver as a module, you can specify many of the adapter's configuration parameters on the command-line to override the EEPROM's settings or for interface configuration when an EEPROM is not used. (CS8920-based adapters must use an EEPROM.) See Section 3.0 LOADING THE DRIVER AS A MODULE. Since the CS8900/20 Setup Utility is a DOS-based application, you must install and configure the adapter in a DOS-based system using the CS8900/20 Setup Utility before installation in the target LINUX system. (Not required if installing a CS8900-based adapter and the default configuration is acceptable.) 2.1 CS8900-BASED ADAPTER CONFIGURATION CS8900-based adapters shipped from Crystal Semiconductor have been configured with the following "default" settings: Operation Mode: Memory Mode IRQ: 10 Base I/O Address: 300 Memory Base Address: D0000 Optimization: DOS Client Transmission Mode: Half-duplex BootProm: None Media Type: Autodetect (3-media cards) or 10BASE-T (10BASE-T only adapter) You should only change the default configuration settings if conflicts with another adapter exist. To change the adapter's configuration, run the CS8900/20 Setup Utility. 2.2 CS8920-BASED ADAPTER CONFIGURATION CS8920-based adapters are shipped from Crystal Semiconductor configured as Plug and Play (PnP) enabled. However, since Linux is not currently a PnP compatible operating system, you must install the CS8920 adapter in a DOS-based PC and run the CS8900/20 Setup Utility to disable PnP and configure the adapter before installation in the target Linux system. Failure to do this will leave the adapter inactive and the driver will be unable to communicate with the adapter. **************************************************************** * CS8920-BASED ADAPTERS: * * * * CS8920-BASED ADAPTERS ARE PLUG and PLAY ENABLED BY DEFAULT. * * SCO UNIX IS NOT A PnP OPERATING SYSTEM. THEREFORE, YOU MUST * * RUN THE CS8900/20 SETUP UTILITY TO DISABLE PnP SUPPORT AND * * TO ACTIVATE THE ADAPTER. * **************************************************************** 3.0 LOADING THE DRIVER AS A MODULE =============================================================================== If the driver is compiled as a loadable module, you can load the driver module with the 'insmod' command. Many of the adapter's configuration parameters can be specified as command-line arguments to the load command. This facility provides a means to override the EEPROM's settings or for interface configuration when an EEPROM is not used. Example: insmod cs89x0.o io=0x200 irq=0xA media=aui This example loads the module and configures the adapter to use an IO port base address of 200h, interrupt 10, and use the AUI media connection. The following configuration options are available on the command line: * io=### - specify IO address (200h-360h) * irq=## - specify interrupt level * mmode=##### - specify memory base address * dma=# - specify DMA channel * media=rj45 - specify media type or media=bnc or media=aui * duplex=f - specify forced half/full/autonegotiate duplex or duplex=h or duplex=auto * debug=# - debug level NOTES: * If an EEPROM is present, any specified command-line parameter will override the corresponding configuration value stored in EEPROM. * If no "io" or "mmode" parameter is specified on the command-line, the driver will scan for the adapter. When scanning, the driver only reads I/O ports. This sometimes is not sufficient, (e.g. after a warm boot). If you wish to allow the driver to perform a more aggressive scan (one write to the IO base addresses to reset the data port pointer) you can specify an I/O address with an address value one greater than the configured address. Example, to scan for an adapter located at IO base 0x300, specify an IO address of 0x301. Only ports between 200h and 360h at 20h intervals are scanned. * The "duplex=auto" parameter is only supported for the CS8920. * The minimum command-line configuration required if an EEPROM is not present is: * io or mmode base address * irq * media type (no autodetect) The following additional parameters are CS89XX defaults (values used with no EEPROM or command-line argument). * DMA Burst = enabled * IOCHRDY Enabled = enabled * UseSA = enabled * CS8900 defaults to half-duplex if not specified on command-line * CS8920 defaults to autoneg if not specified on command-line * Use reset defaults for other config parameters * You can use ifconfig to set the adapter's Ethernet address. 4.0 COMPILING THE DRIVER =============================================================================== The cs89x0 driver can be compiled directly into the kernel or compiled into a loadable device driver module. NOTE: This part of the description relates to adding the driver to a kernel not containing the cs89x0 driver. This kernel already contains it. 4.1 COMPILING THE DRIVER AS A LOADABLE MODULE To compile the driver into a loadable module, use the following command (single command line, without quotes): "gcc -D__KERNEL__ -I/usr/src/linux/include -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -DMODULE -DCONFIG_MODVERSIONS -c cs89x0.c" 4.2 COMPILING THE DRIVER INTO THE KERNEL To compile the driver directly into the kernel requires editing four configuration files, copying the source file to the /linux/drivers/net directory and then running the make utility to rebuild the kernel. 1. Edit the following configuration files by adding the statements as indicated. (When possible, try to locate the added text to the section of the file containing similar statements). a.) In /usr/src/linux/drivers/net/CONFIG, add CS89x0_OPTS = Example: WD_OPTS = #-DWD_SHMEM=0xDD000 EL2_OPTS = #-DEL2_AUI CS89x0_OPTS = NE_OPTS = HP_OPTS = PLIP_OPTS = b.) In /usr/src/linux/drivers/net/Config.in, add: tristate 'CS89x0 support' CONFIG_CS89x0 Example: if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then tristate 'ICL EtherTeam 16i/32 support' CONFIG_ETH16I fi tristate 'CS89x0 support' CONFIG_CS89x0 tristate 'NE2000/NE1000 support' CONFIG_NE2000 if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then tristate 'NI5210 support' CONFIG_NI52 c.) In /usr/src/linux/drivers/net/Makefile, add the following lines: ifeq ($(CONFIG_CS89x0),y) L_OBJS += cs89x0.o else ifeq ($(CONFIG_CS89x0),m) M_OBJS += cs89x0.o endif endif d.) In /linux/drivers/net/Space.c file, add the line: extern int cs89x0_probe(struct device *dev); Example: extern int ultra_probe(struct device *dev); extern int wd_probe(struct device *dev); extern int el2_probe(struct device *dev); extern int cs89x0_probe(struct device *dev); extern int ne_probe(struct device *dev); extern int hp_probe(struct device *dev); extern int hp_plus_probe(struct device *dev); Also add: #ifdef CONFIG_CS89x0 && cs89x0_probe(dev) #endif 2.) Copy the driver source files (cs89x0.c and cs89x0.h) and this README file into the /usr/src/linux/drivers/net directory. 3.) Run 'make config' followed by 'make dep' and finally 'make' to rebuild the kernel. 4.3 COMPILING THE DRIVER FOR A LINUX v1.2.13 KERNEL To compile the driver for Linux v1.2.13 (into the kernel or as a module), change the "SUPPORTS" define at the beginning of the cs89x0.c file. Example: #define SUPPORTS_1_2_13 1 /* supports Linux kernel v1.2.13 */ or #define SUPPORTS_1_2_13 0 /* supports Linux kernel v2.0 (default) */ 5.0 TESTING AND TROUBLESHOOTING =============================================================================== 5.1 KNOWN DEFECTS and LIMITATIONS Refer to the RELEASE.TXT file distributed as part of this archive for a list of known defects, driver limitations, and work arounds. 5.2 TESTING THE ADAPTER Once the adapter has been installed and configured, the diagnostic option of the CS8900/20 Setup Utility can be used to test the functionality of the adapter and its network connection. Use the diagnostics 'Self Test' option to test the functionality of the adapter with the hardware configuration you have assigned. You can use the diagnostics 'Network Test' to test the ability of the adapter to communicate across the Ethernet with another PC equipped with a CS8900/20-based adapter card (it must also be running the CS8900/20 Setup Utility). NOTE: The Setup Utility's diagnostics are designed to run in a DOS-only operating system environment. DO NOT run the diagnostics from a DOS or command prompt session under Windows 95, Windows NT, OS/2, or other operating system. [AC - Question : Do they work in DOSEMU ?] To run the diagnostics tests on the CS8900/20 adapter: 1.) Boot DOS on the PC and start the CS8900/20 Setup Utility. 2.) The adapter's current configuration is displayed. Hit the ENTER key to get to the main menu. 4.) Select 'Diagnostics' (ALT-G) from the main menu. * Select 'Self-Test' to test the adapter's basic functionality. * Select 'Network Test' to test the network connection and cabling. 5.2.1 DIAGNOSTIC SELF-TEST The diagnostic self-test checks the adapter's basic functionality as well as its ability to communicate across the ISA bus based on the system resources assigned during hardware configuration. The following tests are performed: * IO Register Read/Write Test The IO Register Read/Write test ensures that the CS8900/20 can be accessed in IO mode, and that the IO base address is correct. * Shared Memory Test The Shared Memory test ensures the CS8900/20 can be accessed in memory mode and that the range of memory addresses assigned does not conflict with other devices in the system. * Interrupt Test The Interrupt test ensures there are no conflicts with the assigned IRQ signal. * EEPROM Test The EEPROM test ensures the EEPROM can be read. * Chip RAM Test The Chip RAM test ensures the 4 K of memory internal to the CS8900/20 is working properly. * Internal Loop-back Test The Internal Loop Back test ensures the adapter's transmitter and receiver are operating properly. If this test fails, make sure the adapter's cable is connected to the network (check for LED activity for example). * Boot PROM Test The Boot PROM test ensures the Boot PROM is present, and can be read. Failure indicates the Boot PROM was not successfully read due to a hardware problem or due to a conflicts on the Boot PROM address assignment. (Test only applies if the adapter is configured to use the Boot PROM option.) Failure of a test item indicates a possible system resource conflict with another device on the ISA bus. In this case, you should use the Manual Setup option to reconfigure the adapter by selecting a different value for the system resource that failed. 5.2.2 DIAGNOSTIC NETWORK TEST The Diagnostic Network Test verifies a working network connection by transferring data between two CS8900/20 adapters installed in different PCs on the same network. (Note: the diagnostic network test should not be run between two nodes across a router.) This test requires that each of the two PCs have a CS8900/20-based adapter installed and have the CS8900/20 Setup Utility running. The first PC is configured as a Responder and the other PC is configured as an Initiator. Once the Initiator is started, it sends data frames to the Responder which returns the frames to the Initiator. The total number of frames received and transmitted are displayed on the Initiator's display, along with a count of the number of frames received and transmitted OK or in error. The test can be terminated anytime by the user at either PC. To setup the Diagnostic Network Test: 1.) Select a PC with a CS8900/20-based adapter and a known working network connection to act as the Responder. Run the CS8900/20 Setup Utility and select 'Diagnostics -> Network Test -> Responder' from the main menu. Hit ENTER to start the Responder. 2.) Return to the PC with the CS8900/20-based adapter you want to test and start the CS8900/20 Setup Utility. 3.) From the main menu, Select 'Diagnostic -> Network Test -> Initiator'. Hit ENTER to start the test. You may stop the test on the Initiator at any time while allowing the Responder to continue running. In this manner, you can move to additional PCs and test them by starting the Initiator on another PC without having to stop/start the Responder. 5.3 USING THE ADAPTER'S LEDs The 2 and 3-media adapters have two LEDs visible on the back end of the board located near the 10Base-T connector. Link Integrity LED: A "steady" ON of the green LED indicates a valid 10Base-T connection. (Only applies to 10Base-T. The green LED has no significance for a 10Base-2 or AUI connection.) TX/RX LED: The yellow LED lights briefly each time the adapter transmits or receives data. (The yellow LED will appear to "flicker" on a typical network.) 5.4 RESOLVING I/O CONFLICTS An IO conflict occurs when two or more adapter use the same ISA resource (IO address, memory address or IRQ). You can usually detect an IO conflict in one of four ways after installing and or configuring the CS8900/20-based adapter: 1.) The system does not boot properly (or at all). 2.) The driver can not communicate with the adapter, reporting an "Adapter not found" error message. 3.) You cannot connect to the network or the driver will not load. 4.) If you have configured the adapter to run in memory mode but the driver reports it is using IO mode when loading, this is an indication of a memory address conflict. If an IO conflict occurs, run the CS8900/20 Setup Utility and perform a diagnostic self-test. Normally, the ISA resource in conflict will fail the self-test. If so, reconfigure the adapter selecting another choice for the resource in conflict. Run the diagnostics again to check for further IO conflicts. In some cases, such as when the PC will not boot, it may be necessary to remove the adapter and reconfigure it by installing it in another PC to run the CS8900/20 Setup Utility. Once reinstalled in the target system, run the diagnostics self-test to ensure the new configuration is free of conflicts before loading the driver again. When manually configuring the adapter, keep in mind the typical ISA system resource usage as indicated in the tables below. I/O Address Device IRQ Device ----------- -------- --- -------- 200-20F Game I/O adapter 3 COM2, Bus Mouse 230-23F Bus Mouse 4 COM1 270-27F LPT3: third parallel port 5 LPT2 2F0-2FF COM2: second serial port 6 Floppy Disk controller 320-32F Fixed disk controller 7 LPT1 8 Real-time Clock 9 EGA/VGA display adapter 12 Mouse (PS/2) Memory Address Device 13 Math Coprocessor -------------- --------------------- 14 Hard Disk controller A000-BFFF EGA Graphics Adapter A000-C7FF VGA Graphics Adapter B000-BFFF Mono Graphics Adapter B800-BFFF Color Graphics Adapter E000-FFFF AT BIOS 6.0 TECHNICAL SUPPORT =============================================================================== 6.1 CONTACTING CRYSTAL'S TECHNICAL SUPPORT Crystal's CS89XX Technical Application Support can be reached at: Telephone :(800) 888-5016 (from inside U.S. and Canada) :(512) 442-7555 (from outside the U.S. and Canada) Fax :(512) 912-3871 E-mail :ethernet@crystal.cirrus.com WWW :http://www.crystal.com 6.2 INFORMATION REQUIRED BEFORE CONTACTING TECHNICAL SUPPORT Before contacting Crystal for technical support, be prepared to provide as much of the following information as possible. 1.) Adapter type (CRD8900, CDB8900, CDB8920, etc.) 2.) Adapter configuration * IO Base, Memory Base, IO or memory mode enabled, IRQ, DMA channel * Plug and Play enabled/disabled (CS8920-based adapters only) * Configured for media auto-detect or specific media type (which type). 3.) PC System's Configuration * Plug and Play system (yes/no) * BIOS (make and version) * System make and model * CPU (type and speed) * System RAM * SCSI Adapter 4.) Software * CS89XX driver and version * Your network operating system and version * Your system's OS version * Version of all protocol support files 5.) Any Error Message displayed. 6.3 OBTAINING THE LATEST DRIVER VERSION You can obtain the latest CS89XX drivers and support software from Crystal's BBS or Web site. You can also contact Crystal's Technical Support (email: ethernet@crystal.cirrus.com) and request that you be registered for automatic software-update notification. 6.3.1 CRYSTAL'S WEB SITE Crystal Semiconductor maintains a web page at http://www.crystal.com with the latest drivers and technical publications. 6.3.2 CRYSTAL'S BULLETIN BOARD SERVICE Access to the BBS is available 24 hours a day, seven days a week. Baud rates from 300K to 14.4K are supported as well as most common file transfer protocols. To access the BBS, set your terminal software to use 8 data bits, 1 stop bit, and no parity. Dial (512) 441-3265 and press after connection is made. Login using your account name and password. (If you do not have an account, you may login as "GUEST". No password is required for the Guest account.) From the main system menu, select the "Enter Public File Area" menu option. From the Public File Area menu, select the "LAN (Local Area Network)" file area. A list of the latest drivers and support utilities available for the CS89XX ISA Ethernet adapter will be presented along with the option to download the file(s) of your choice. Originally, this driver was written for the Digital Equipment Corporation series of EtherWORKS Ethernet cards: DE425 TP/COAX EISA DE434 TP PCI DE435 TP/COAX/AUI PCI DE450 TP/COAX/AUI PCI DE500 10/100 PCI Fasternet but it will now attempt to support all cards which conform to the Digital Semiconductor SROM Specification. The driver currently recognises the following chips: DC21040 (no SROM) DC21041[A] DC21140[A] DC21142 DC21143 So far the driver is known to work with the following cards: KINGSTON Linksys ZNYX342 SMC8432 SMC9332 (w/new SROM) ZNYX31[45] ZNYX346 10/100 4 port (can act as a 10/100 bridge!) The driver has been tested on a relatively busy network using the DE425, DE434, DE435 and DE500 cards and benchmarked with 'ttcp': it transferred 16M of data to a DECstation 5000/200 as follows: TCP UDP TX RX TX RX DE425 1030k 997k 1170k 1128k DE434 1063k 995k 1170k 1125k DE435 1063k 995k 1170k 1125k DE500 1063k 998k 1170k 1125k in 10Mb/s mode All values are typical (in kBytes/sec) from a sample of 4 for each measurement. Their error is +/-20k on a quiet (private) network and also depend on what load the CPU has. ========================================================================= The ability to load this driver as a loadable module has been included and used extensively during the driver development (to save those long reboot sequences). Loadable module support under PCI and EISA has been achieved by letting the driver autoprobe as if it were compiled into the kernel. Do make sure you're not sharing interrupts with anything that cannot accommodate interrupt sharing! To utilise this ability, you have to do 8 things: 0) have a copy of the loadable modules code installed on your system. 1) copy de4x5.c from the /linux/drivers/net directory to your favourite temporary directory. 2) for fixed autoprobes (not recommended), edit the source code near line 5594 to reflect the I/O address you're using, or assign these when loading by: insmod de4x5 io=0xghh where g = bus number hh = device number NB: autoprobing for modules is now supported by default. You may just use: insmod de4x5 to load all available boards. For a specific board, still use the 'io=?' above. 3) compile de4x5.c, but include -DMODULE in the command line to ensure that the correct bits are compiled (see end of source code). 4) if you are wanting to add a new card, goto 5. Otherwise, recompile a kernel with the de4x5 configuration turned off and reboot. 5) insmod de4x5 [io=0xghh] 6) run the net startup bits for your new eth?? interface(s) manually (usually /etc/rc.inet[12] at boot time). 7) enjoy! To unload a module, turn off the associated interface(s) 'ifconfig eth?? down' then 'rmmod de4x5'. Automedia detection is included so that in principle you can disconnect from, e.g. TP, reconnect to BNC and things will still work (after a pause whilst the driver figures out where its media went). My tests using ping showed that it appears to work.... By default, the driver will now autodetect any DECchip based card. Should you have a need to restrict the driver to DIGITAL only cards, you can compile with a DEC_ONLY define, or if loading as a module, use the 'dec_only=1' parameter. I've changed the timing routines to use the kernel timer and scheduling functions so that the hangs and other assorted problems that occurred while autosensing the media should be gone. A bonus for the DC21040 auto media sense algorithm is that it can now use one that is more in line with the rest (the DC21040 chip doesn't have a hardware timer). The downside is the 1 'jiffies' (10ms) resolution. IEEE 802.3u MII interface code has been added in anticipation that some products may use it in the future. The SMC9332 card has a non-compliant SROM which needs fixing - I have patched this driver to detect it because the SROM format used complies to a previous DEC-STD format. I have removed the buffer copies needed for receive on Intels. I cannot remove them for Alphas since the Tulip hardware only does longword aligned DMA transfers and the Alphas get alignment traps with non longword aligned data copies (which makes them really slow). No comment. I have added SROM decoding routines to make this driver work with any card that supports the Digital Semiconductor SROM spec. This will help all cards running the dc2114x series chips in particular. Cards using the dc2104x chips should run correctly with the basic driver. I'm in debt to for the testing and feedback that helped get this feature working. So far we have tested KINGSTON, SMC8432, SMC9332 (with the latest SROM complying with the SROM spec V3: their first was broken), ZNYX342 and LinkSys. ZNYX314 (dual 21041 MAC) and ZNYX 315 (quad 21041 MAC) cards also appear to work despite their incorrectly wired IRQs. I have added a temporary fix for interrupt problems when some SCSI cards share the same interrupt as the DECchip based cards. The problem occurs because the SCSI card wants to grab the interrupt as a fast interrupt (runs the service routine with interrupts turned off) vs. this card which really needs to run the service routine with interrupts turned on. This driver will now add the interrupt service routine as a fast interrupt if it is bounced from the slow interrupt. THIS IS NOT A RECOMMENDED WAY TO RUN THE DRIVER and has been done for a limited time until people sort out their compatibility issues and the kernel interrupt service code is fixed. YOU SHOULD SEPARATE OUT THE FAST INTERRUPT CARDS FROM THE SLOW INTERRUPT CARDS to ensure that they do not run on the same interrupt. PCMCIA/CardBus is another can of worms... Finally, I think I have really fixed the module loading problem with more than one DECchip based card. As a side effect, I don't mess with the device structure any more which means that if more than 1 card in 2.0.x is installed (4 in 2.1.x), the user will have to edit linux/drivers/net/Space.c to make room for them. Hence, module loading is the preferred way to use this driver, since it doesn't have this limitation. Where SROM media detection is used and full duplex is specified in the SROM, the feature is ignored unless lp->params.fdx is set at compile time OR during a module load (insmod de4x5 args='eth??:fdx' [see below]). This is because there is no way to automatically detect full duplex links except through autonegotiation. When I include the autonegotiation feature in the SROM autoconf code, this detection will occur automatically for that case. Command line arguments are now allowed, similar to passing arguments through LILO. This will allow a per adapter board set up of full duplex and media. The only lexical constraints are: the board name (dev->name) appears in the list before its parameters. The list of parameters ends either at the end of the parameter list or with another board name. The following parameters are allowed: fdx for full duplex autosense to set the media/speed; with the following sub-parameters: TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO Case sensitivity is important for the sub-parameters. They *must* be upper case. Examples: insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'. For a compiled in driver, in linux/drivers/net/CONFIG, place e.g. DE4X5_OPTS = -DDE4X5_PARM='"eth0:fdx autosense=AUI eth2:autosense=TP"' Yes, I know full duplex isn't permissible on BNC or AUI; they're just examples. By default, full duplex is turned off and AUTO is the default autosense setting. In reality, I expect only the full duplex option to be used. Note the use of single quotes in the two examples above and the lack of commas to separate items. DE10x ===== Memory Addresses: SW1 SW2 SW3 SW4 64K on on on on d0000 dbfff off on on on c0000 cbfff off off on on e0000 ebfff 32K on on off on d8000 dbfff off on off on c8000 cbfff off off off on e8000 ebfff DBR ROM on on dc000 dffff off on cc000 cffff off off ec000 effff Note that the 2K mode is set by SW3/SW4 on/off or off/off. Address assignment is through the RBSA register. I/O Address: SW5 0x300 on 0x200 off Remote Boot: SW6 Disable on Enable off Remote Boot Timeout: SW7 2.5min on 30s off IRQ: SW8 SW9 SW10 SW11 SW12 2 on off off off off 3 off on off off off 4 off off on off off 5 off off off on off 7 off off off off on DE20x ===== Memory Size: SW3 SW4 64K on on 32K off on 2K on off 2K off off Start Addresses: SW1 SW2 SW3 SW4 64K on on on on c0000 cffff on off on on d0000 dffff off on on on e0000 effff 32K on on off off c8000 cffff on off off off d8000 dffff off on off off e8000 effff Illegal off off - - - - I/O Address: SW5 0x300 on 0x200 off Remote Boot: SW6 Disable on Enable off Remote Boot Timeout: SW7 2.5min on 30s off IRQ: SW8 SW9 SW10 SW11 SW12 5 on off off off off 9 off on off off off 10 off off on off off 11 off off off on off 15 off off off off on The Digi Intl. RightSwitch SE-X (dgrs) Device Driver This is a Linux driver for the Digi International RightSwitch SE-X EISA and PCI boards. These are 4 (EISA) or 6 (PCI) port Ethernet switches and a NIC combined into a single board. This driver can be compiled into the kernel statically or as a loadable module. There is also a companion management tool, called "xrightswitch". The management tool lets you watch the performance graphically, as well as set the SNMP agent IP and IPX addresses, IEEE Spanning Tree, and Aging time. These can also be set from the command line when the driver is loaded. The driver command line options are: debug=NNN Debug printing level dma=0/1 Disable/Enable DMA on PCI card spantree=0/1 Disable/Enable IEEE spanning tree hashexpire=NNN Change address aging time (default 300 seconds) ipaddr=A,B,C,D Set SNMP agent IP address i.e. 199,86,8,221 iptrap=A,B,C,D Set SNMP agent IP trap address i.e. 199,86,8,221 ipxnet=NNN Set SNMP agent IPX network number nicmode=0/1 Disable/Enable multiple NIC mode There is also a tool for setting up input and output packet filters on each port, called "dgrsfilt". Both the management tool and the filtering tool are available separately from the following FTP site: ftp://ftp.dgii.com/drivers/rightswitch/linux/ When nicmode=1, the board and driver operate as 4 or 6 individual NIC ports (eth0...eth5) instead of as a switch. All switching functions are disabled. In the future, the board firmware may include a routing cache when in this mode. Copyright 1995-1996 Digi International Inc. This software may be used and distributed according to the terms of the GNU General Public License, incorporated herein by reference. For information on purchasing a RightSwitch SE-4 or SE-6 board, please contact Digi's sales department at 1-612-912-3444 or 1-800-DIGIBRD. Outside the U.S., please check our Web page at: http://www.dgii.com for sales offices worldwide. Tech support is also available through the channels listed on the Web site, although as long as I am employed on networking products at Digi I will be happy to provide any bug fixes that may be needed. -Rick Richardson, rick@dgii.com Released 1994-06-13 CONTENTS: 1. Introduction. 2. License. 3. Files in this release. 4. Installation. 5. Problems and tuning. 6. Using the drivers with earlier releases. 7. Acknowledgments. 1. INTRODUCTION. This is a set of Ethernet drivers for the D-Link DE-600/DE-620 pocket adapters, for the parallel port on a Linux based machine. Some adapter "clones" will also work. Xircom is _not_ a clone... These drivers _can_ be used as loadable modules, and were developed for use on Linux 1.1.13 and above. For use on Linux 1.0.X, or earlier releases, see below. I have used these drivers for NFS, ftp, telnet and X-clients on remote machines. Transmissions with ftp seems to work as good as can be expected (i.e. > 80k bytes/sec) from a parallel port...:-) Receive speeds will be about 60-80% of this. Depending on your machine, somewhat higher speeds can be achieved. All comments/fixes to Bjorn Ekwall (bj0rn@blox.se). 2. LICENSE. 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. 3. FILES IN THIS RELEASE. README.DLINK This file. de600.c The Source (may it be with You :-) for the DE-600 de620.c ditto for the DE-620 de620.h Macros for de620.c If you are upgrading from the d-link tar release, there will also be a "dlink-patches" file that will patch Linux 1.1.18: linux/drivers/net/Makefile linux/drivers/net/CONFIG linux/drivers/net/MODULES linux/drivers/net/Space.c linux/config.in Apply the patch by: "cd /usr/src; patch -p0 < linux/drivers/net/dlink-patches" The old source, "linux/drivers/net/d_link.c", can be removed. 4. INSTALLATION. o Get the latest net binaries, according to current net.wisdom. o Read the NET-2 and Ethernet HOWTOs and modify your setup. o If your parallel port has a strange address or irq, modify "linux/drivers/net/CONFIG" accordingly, or adjust the parameters in the "tuning" section in the sources. If you are going to use the drivers as loadable modules, do _not_ enable them while doing "make config", but instead make sure that the drivers are included in "linux/drivers/net/MODULES". If you are _not_ going to use the driver(s) as loadable modules, but instead have them included in the kernel, remember to enable the drivers while doing "make config". o To include networking and DE600/DE620 support in your kernel: # cd /linux (as modules:) # make config (answer yes on CONFIG_NET and CONFIG_INET) (else included in the kernel:) # make config (answer yes on CONFIG _NET, _INET and _DE600 or _DE620) # make clean # make depend # make zImage (or whatever magic you usually do) o I use lilo to boot multiple kernels, so that I at least can have one working kernel :-). If you do too, append these lines to /etc/lilo/config: image = /linux/zImage label = newlinux root = /dev/hda2 (or whatever YOU have...) # /etc/lilo/install o Do "sync" and reboot the new kernel with a D-Link DE-600/DE-620 pocket adapter connected. o The adapter can be configured with ifconfig eth? where the actual number is decided by the kernel when the drivers are initialized. 5. "PROBLEMS" AND TUNING, o If you see error messages from the driver, and if the traffic stops on the adapter, try to do "ifconfig" and "route" once more, just as in "rc.inet1". This should take care of most problems, including effects from power loss, or adapters that aren't connected to the printer port in some way or another. You can somewhat change the behaviour by enabling/disabling the macro SHUTDOWN_WHEN_LOST in the "tuning" section. For the DE-600 there is another macro, CHECK_LOST_DE600, that you might want to read about in the "tuning" section. o Some machines have trouble handling the parallel port and the adapter at high speed. If you experience problems: DE-600: - The adapter is not recognized at boot, i.e. an Ethernet address of 00:80:c8:... is not shown, try to add another "; SLOW_DOWN_IO" at DE600_SLOW_DOWN in the "tuning" section. As a last resort, uncomment: "#define REALLY_SLOW_IO" (see for hints). - You experience "timeout" messages: first try to add another "; SLOW_DOWN_IO" at DE600_SLOW_DOWN in the "tuning" section, _then_ try to increase the value (original value: 5) at "if (tickssofar < 5)" near line 422. DE-620: - Your parallel port might be "sluggish". To cater for this, there are the macros LOWSPEED and READ_DELAY/WRITE_DELAY in the "tuning" section. Your first step should be to enable LOWSPEED, and after that you can "tune" the XXX_DELAY values. o If the adapter _is_ recognized at boot but you get messages about "Network Unreachable", then the problem is probably _not_ with the driver. Check your net configuration instead (ifconfig and route) in "rc.inet1". o There is some rudimentary support for debugging, look at the source. Use "-DDE600_DEBUG=3" or "-DDE620_DEBUG=3" when compiling, or include it in "linux/drivers/net/CONFIG". IF YOU HAVE PROBLEMS YOU CAN'T SOLVE: PLEASE COMPILE THE DRIVER WITH DEBUGGING ENABLED, AND SEND ME THE RESULTING OUTPUT! 6. USING THE DRIVERS WITH EARLIER RELEASES. The later 1.1.X releases of the Linux kernel include some changes in the networking layer (a.k.a. NET3). This affects these drivers in a few places. The hints that follow are _not_ tested by me, since I don't have the disk space to keep all releases on-line. Known needed changes to date: - release patchfile: some patches will fail, but they should be easy to apply "by hand", since they are trivial. (Space.c: d_link_init() is now called de600_probe()) - de600.c: change "mark_bh(NET_BH)" to "mark_bh(INET_BH)". - de620.c: (maybe) change the code around "netif_rx(skb);" to be similar to the code around "dev_rint(...)" in de600.c 7. ACKNOWLEDGMENTS. These drivers wouldn't have been done without the base (and support) from Ross Biro , and D-Link Systems Inc. The driver relies upon GPL-ed source from D-Link Systems Inc. and from Russel Nelson at Crynwr Software . Additional input also from: Donald Becker , Alan Cox and Fred N. van Kempen DE-600 alpha release primary victim^H^H^H^H^H^Htester: - Erik Proper . Good input also from several users, most notably - Mark Burton . DE-620 alpha release victims^H^H^H^H^H^H^Htesters: - J. Joshua Kopper - Olav Kvittem - Germano Caronni - Jeremy Fitzhardinge Happy hacking! Bjorn Ekwall == bj0rn@blox.se dmfe.c: Version 1.28 01/18/2000 A Davicom DM9102(A)/DM9132/DM9801 fast ethernet driver for Linux. Copyright (C) 1997 Sten Wang 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. A. Compiler command: A-1: For normal single processor kernel "gcc -DMODULE -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -c dmfe.c" A-2: For single processor and enable kernel module version function "gcc -DMODULE -DMODVERSIONS -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -c dmfe.c" A-3: For multiple processors(SMP) and enable the module version function "gcc -D__SMP__ -DMODULE -DMODVERSIONS -D__KERNEL__ -I/usr/src/linux /net/inet -Wall -Wstrict-prototypes -O6 -c dmfe.c" B. The following steps teach you how to activate a DM9102 board: 1. Used the upper compiler command to compile dmfe.c 2. Insert dmfe module into kernel "insmod dmfe" ;;Auto Detection Mode (Suggest) "insmod dmfe mode=0" ;;Force 10M Half Duplex "insmod dmfe mode=1" ;;Force 100M Half Duplex "insmod dmfe mode=4" ;;Force 10M Full Duplex "insmod dmfe mode=5" ;;Force 100M Full Duplex 3. Config a dm9102 network interface "ifconfig eth0 172.22.3.18" ^^^^^^^^^^^ Your IP address 4. Activate the IP routing table. For some distributions, it is not necessary. You can type "route" to check. "route add default eth0" 5. Well done. Your DM9102 adapter is now activated. C. Object files description: 1. dmfe_rh61.o: For Redhat 6.1 If you can make sure your kernel version, you can rename to dmfe.o and directly use it without re-compiling. Author: Sten Wang, 886-3-5798797-8517, E-mail: sten_wang@davicom.com.tw EQL Driver: Serial IP Load Balancing HOWTO Simon "Guru Aleph-Null" Janes, simon@ncm.com v1.1, February 27, 1995 This is the manual for the EQL device driver. EQL is a software device that lets you load-balance IP serial links (SLIP or uncompressed PPP) to increase your bandwidth. It will not reduce your latency (i.e. ping times) except in the case where you already have lots of traffic on your link, in which it will help them out. This driver has been tested with the 1.1.75 kernel, and is known to have patched cleanly with 1.1.86. Some testing with 1.1.92 has been done with the v1.1 patch which was only created to patch cleanly in the very latest kernel source trees. (Yes, it worked fine.) 1. Introduction Which is worse? A huge fee for a 56K leased line or two phone lines? It's probably the former. If you find yourself craving more bandwidth, and have a ISP that is flexible, it is now possible to bind modems together to work as one point-to-point link to increase your bandwidth. All without having to have a special black box on either side. The eql driver has only been tested with the Livingston PortMaster-2e terminal server. I do not know if other terminal servers support load- balancing, but I do know that the PortMaster does it, and does it almost as well as the eql driver seems to do it (-- Unfortunately, in my testing so far, the Livingston PortMaster 2e's load-balancing is a good 1 to 2 KB/s slower than the test machine working with a 28.8 Kbps and 14.4 Kbps connection. However, I am not sure that it really is the PortMaster, or if it's Linux's TCP drivers. I'm told that Linux's TCP implementation is pretty fast though.--) I suggest to ISPs out there that it would probably be fair to charge a load-balancing client 75% of the cost of the second line and 50% of the cost of the third line etc... Hey, we can all dream you know... 2. Kernel Configuration Here I describe the general steps of getting a kernel up and working with the eql driver. From patching, building, to installing. 2.1. Patching The Kernel If you do not have or cannot get a copy of the kernel with the eql driver folded into it, get your copy of the driver from ftp://slaughter.ncm.com/pub/Linux/LOAD_BALANCING/eql-1.1.tar.gz. Unpack this archive someplace obvious like /usr/local/src/. It will create the following files: ______________________________________________________________________ -rw-r--r-- guru/ncm 198 Jan 19 18:53 1995 eql-1.1/NO-WARRANTY -rw-r--r-- guru/ncm 30620 Feb 27 21:40 1995 eql-1.1/eql-1.1.patch -rwxr-xr-x guru/ncm 16111 Jan 12 22:29 1995 eql-1.1/eql_enslave -rw-r--r-- guru/ncm 2195 Jan 10 21:48 1995 eql-1.1/eql_enslave.c ______________________________________________________________________ Unpack a recent kernel (something after 1.1.92) someplace convenient like say /usr/src/linux-1.1.92.eql. Use symbolic links to point /usr/src/linux to this development directory. Apply the patch by running the commands: ______________________________________________________________________ cd /usr/src patch ". Here are some example enslavings: ______________________________________________________________________ eql_enslave eql sl0 28800 eql_enslave eql ppp0 14400 eql_enslave eql sl1 57600 ______________________________________________________________________ When you want to free a device from its life of slavery, you can either down the device with ifconfig (eql will automatically bury the dead slave and remove it from its queue) or use eql_emancipate to free it. (-- Or just ifconfig it down, and the eql driver will take it out for you.--) ______________________________________________________________________ eql_emancipate eql sl0 eql_emancipate eql ppp0 eql_emancipate eql sl1 ______________________________________________________________________ 3.3. DSLIP Configuration for the eql Device The general idea is to bring up and keep up as many SLIP connections as you need, automatically. 3.3.1. /etc/slip/runslip.conf Here is an example runslip.conf: ______________________________________________________________________ name sl-line-1 enabled baud 38400 mtu 576 ducmd -e /etc/slip/dialout/cua2-288.xp -t 9 command eql_enslave eql $interface 28800 address 198.67.33.239 line /dev/cua2 name sl-line-2 enabled baud 38400 mtu 576 ducmd -e /etc/slip/dialout/cua3-288.xp -t 9 command eql_enslave eql $interface 28800 address 198.67.33.239 line /dev/cua3 ______________________________________________________________________ 3.4. Using PPP and the eql Device I have not yet done any load-balancing testing for PPP devices, mainly because I don't have a PPP-connection manager like SLIP has with DSLIP. I did find a good tip from LinuxNET:Billy for PPP performance: make sure you have asyncmap set to something so that control characters are not escaped. I tried to fix up a PPP script/system for redialing lost PPP connections for use with the eql driver the weekend of Feb 25-26 '95 (Hereafter known as the 8-hour PPP Hate Festival). Perhaps later this year. 4. About the Slave Scheduler Algorithm The slave scheduler probably could be replaced with a dozen other things and push traffic much faster. The formula in the current set up of the driver was tuned to handle slaves with wildly different bits-per-second "priorities". All testing I have done was with two 28.8 V.FC modems, one connecting at 28800 bps or slower, and the other connecting at 14400 bps all the time. One version of the scheduler was able to push 5.3 K/s through the 28800 and 14400 connections, but when the priorities on the links were very wide apart (57600 vs. 14400) the "faster" modem received all traffic and the "slower" modem starved. 5. Testers' Reports Some people have experimented with the eql device with newer kernels (than 1.1.75). I have since updated the driver to patch cleanly in newer kernels because of the removal of the old "slave- balancing" driver config option. o icee from LinuxNET patched 1.1.86 without any rejects and was able to boot the kernel and enslave a couple of ISDN PPP links. 5.1. Randolph Bentson's Test Report From bentson@grieg.seaslug.org Wed Feb 8 19:08:09 1995 Date: Tue, 7 Feb 95 22:57 PST From: Randolph Bentson To: guru@ncm.com Subject: EQL driver tests I have been checking out your eql driver. (Nice work, that!) Although you may already done this performance testing, here are some data I've discovered. Randolph Bentson bentson@grieg.seaslug.org --------------------------------------------------------- A pseudo-device driver, EQL, written by Simon Janes, can be used to bundle multiple SLIP connections into what appears to be a single connection. This allows one to improve dial-up network connectivity gradually, without having to buy expensive DSU/CSU hardware and services. I have done some testing of this software, with two goals in mind: first, to ensure it actually works as described and second, as a method of exercising my device driver. The following performance measurements were derived from a set of SLIP connections run between two Linux systems (1.1.84) using a 486DX2/66 with a Cyclom-8Ys and a 486SLC/40 with a Cyclom-16Y. (Ports 0,1,2,3 were used. A later configuration will distribute port selection across the different Cirrus chips on the boards.) Once a link was established, I timed a binary ftp transfer of 289284 bytes of data. If there were no overhead (packet headers, inter-character and inter-packet delays, etc.) the transfers would take the following times: bits/sec seconds 345600 8.3 234600 12.3 172800 16.7 153600 18.8 76800 37.6 57600 50.2 38400 75.3 28800 100.4 19200 150.6 9600 301.3 A single line running at the lower speeds and with large packets comes to within 2% of this. Performance is limited for the higher speeds (as predicted by the Cirrus databook) to an aggregate of about 160 kbits/sec. The next round of testing will distribute the load across two or more Cirrus chips. The good news is that one gets nearly the full advantage of the second, third, and fourth line's bandwidth. (The bad news is that the connection establishment seemed fragile for the higher speeds. Once established, the connection seemed robust enough.) #lines speed mtu seconds theory actual %of kbit/sec duration speed speed max 3 115200 900 _ 345600 3 115200 400 18.1 345600 159825 46 2 115200 900 _ 230400 2 115200 600 18.1 230400 159825 69 2 115200 400 19.3 230400 149888 65 4 57600 900 _ 234600 4 57600 600 _ 234600 4 57600 400 _ 234600 3 57600 600 20.9 172800 138413 80 3 57600 900 21.2 172800 136455 78 3 115200 600 21.7 345600 133311 38 3 57600 400 22.5 172800 128571 74 4 38400 900 25.2 153600 114795 74 4 38400 600 26.4 153600 109577 71 4 38400 400 27.3 153600 105965 68 2 57600 900 29.1 115200 99410.3 86 1 115200 900 30.7 115200 94229.3 81 2 57600 600 30.2 115200 95789.4 83 3 38400 900 30.3 115200 95473.3 82 3 38400 600 31.2 115200 92719.2 80 1 115200 600 31.3 115200 92423 80 2 57600 400 32.3 115200 89561.6 77 1 115200 400 32.8 115200 88196.3 76 3 38400 400 33.5 115200 86353.4 74 2 38400 900 43.7 76800 66197.7 86 2 38400 600 44 76800 65746.4 85 2 38400 400 47.2 76800 61289 79 4 19200 900 50.8 76800 56945.7 74 4 19200 400 53.2 76800 54376.7 70 4 19200 600 53.7 76800 53870.4 70 1 57600 900 54.6 57600 52982.4 91 1 57600 600 56.2 57600 51474 89 3 19200 900 60.5 57600 47815.5 83 1 57600 400 60.2 57600 48053.8 83 3 19200 600 62 57600 46658.7 81 3 19200 400 64.7 57600 44711.6 77 1 38400 900 79.4 38400 36433.8 94 1 38400 600 82.4 38400 35107.3 91 2 19200 900 84.4 38400 34275.4 89 1 38400 400 86.8 38400 33327.6 86 2 19200 600 87.6 38400 33023.3 85 2 19200 400 91.2 38400 31719.7 82 4 9600 900 94.7 38400 30547.4 79 4 9600 400 106 38400 27290.9 71 4 9600 600 110 38400 26298.5 68 3 9600 900 118 28800 24515.6 85 3 9600 600 120 28800 24107 83 3 9600 400 131 28800 22082.7 76 1 19200 900 155 19200 18663.5 97 1 19200 600 161 19200 17968 93 1 19200 400 170 19200 17016.7 88 2 9600 600 176 19200 16436.6 85 2 9600 900 180 19200 16071.3 83 2 9600 400 181 19200 15982.5 83 1 9600 900 305 9600 9484.72 98 1 9600 600 314 9600 9212.87 95 1 9600 400 332 9600 8713.37 90 5.2. Anthony Healy's Report Date: Mon, 13 Feb 1995 16:17:29 +1100 (EST) From: Antony Healey To: Simon Janes Subject: Re: Load Balancing Hi Simon, I've installed your patch and it works great. I have trialed it over twin SL/IP lines, just over null modems, but I was able to data at over 48Kb/s [ISDN link -Simon]. I managed a transfer of up to 7.5 Kbyte/s on one go, but averaged around 6.4 Kbyte/s, which I think is pretty cool. :) Documentation on setup and use of EtherTap. Contact Jay Schulist if you have questions or need further assistance. Introduction ============ Ethertap provides packet reception and transmission for user space programs. It can be viewed as a simple Ethernet device, which instead of receiving packets from a network wire, it receives them from user space. Ethertap can be used for anything from AppleTalk to IPX to even building bridging tunnels. It also has many other general purpose uses. Ethertap also can do ARP for you, although this is not enabled by default. SetUp ===== First you will have to enable Ethertap in the kernel configuration. Then you will need to create any number of ethertap device files, /dev/tap0->/dev/tap15. This is done by the following command. mknod /dev/tap* c 36 16 ( 17 18 19 20 for tap1,2,3,4...) ** Replace * with the proper tap device number you need. ** Now with your kernel that has ethertap enabled, you will need to ifconfig /dev/tap* 192.168.1.1 (replace 192.168.1.1 with the proper IP number for your situation.) If you want your Ethertap device to ARP for you would ifconfig the interface like this: ifconfig tap* 192.168.1.1 arp Remember that you need to have a corresponding /dev/tap* file for each tap* device you need to ifconfig. Now Ethertap should be ready to use. Diagram of how Ethertap works. (Courtesy of Alan Cox) ==================================================== This is for a tunnel, but you should be able to get the general idea. 1.2.3.4 will be the router to the outside world 1.2.3.5 our box 2.0.0.1 our box (AppleTalk side) 2.0.0.* a pile of Macintoys [1.2.3.4]-------------1.2.3.5[Our Box]2.0.0.1---------> Macs The routing on our box would be ifconfig eth0 1.2.3.5 netmask 255.255.255.0 up route add default gw 1.2.3.4 ifconfig tap0 2.0.0.1 netmask 255.255.255.0 up arp (route add 2.0.0.0 netmask 255.255.255.0) C code for a Simple program using an EtherTap device ==================================================== This code is just excerpts from a real program, so some parts are missing but the important stuff is below. void main (void) { int TapDevice, eth_pkt_len = 0; unsigned char full_pkt_len[MAX_PKT_LEN]; TapDevice = open("/dev/tap0", O_RDWR); if(TapDevice < 0) { perror("Error opening device"); exit(1); } write(TapDevice, full_packet, eth_pkt_len); close(TapDevice); return; } The EtherWORKS 3 driver in this distribution is designed to work with all kernels > 1.1.33 (approx) and includes tools in the 'ewrk3tools' subdirectory to allow set up of the card, similar to the MSDOS 'NICSETUP.EXE' tools provided on the DOS drivers disk (type 'make' in that subdirectory to make the tools). The supported cards are DE203, DE204 and DE205. All other cards are NOT supported - refer to 'depca.c' for running the LANCE based network cards and 'de4x5.c' for the DIGITAL Semiconductor PCI chip based adapters from Digital. The ability to load this driver as a loadable module has been included and used extensively during the driver development (to save those long reboot sequences). To utilise this ability, you have to do 8 things: 0) have a copy of the loadable modules code installed on your system. 1) copy ewrk3.c from the /linux/drivers/net directory to your favourite temporary directory. 2) edit the source code near line 1898 to reflect the I/O address and IRQ you're using. 3) compile ewrk3.c, but include -DMODULE in the command line to ensure that the correct bits are compiled (see end of source code). 4) if you are wanting to add a new card, goto 5. Otherwise, recompile a kernel with the ewrk3 configuration turned off and reboot. 5) insmod ewrk3.o [Alan Cox: Changed this so you can insmod ewrk3.o irq=x io=y] 6) run the net startup bits for your new eth?? interface manually (usually /etc/rc.inet[12] at boot time). 7) enjoy! Note that autoprobing is not allowed in loadable modules - the system is already up and running and you're messing with interrupts. To unload a module, turn off the associated interface 'ifconfig eth?? down' then 'rmmod ewrk3'. The performance we've achieved so far has been measured through the 'ttcp' tool at 975kB/s. This measures the total TCP stack performance which includes the card, so don't expect to get much nearer the 1.25MB/s theoretical Ethernet rate. Enjoy! Dave filter.txt: Linux Socket Filtering Written by: Jay Schulist Introduction ============ Linux Socket Filtering is derived from the Berkeley Packet Filter. There are some distinct differences between the BSD and Linux Kernel Filtering. Linux Socket Filtering (LSF) allows a user-space program to attach a filter onto any socket and allow or disallow certain types of data to come through the socket. LSF follows exactly the same filter code structure as the BSD Berkeley Packet Filter (BPF), so referring to the BSD bpf.4 manpage is very helpful in creating filters. LSF is much simpler than BPF. One does not have to worry about devices or anything like that. You simply create your filter code, send it to the kernel via the SO_ATTACH_FILTER ioctl and if your filter code passes the kernel check on it, you then immediately begin filtering data on that socket. You can also detach filters from your socket via the SO_DETACH_FILTER ioctl. This will probably not be used much since when you close a socket that has a filter on it the filter is automagically removed. The other less common case may be adding a different filter on the same socket where you had another filter that is still running: the kernel takes care of removing the old one and placing your new one in its place, assuming your filter has passed the checks, otherwise if it fails the old filter will remain on that socket. Examples ======== Ioctls- setsockopt(sockfd, SOL_SOCKET, SO_ATTACH_FILTER, &Filter, sizeof(Filter)); setsockopt(sockfd, SOL_SOCKET, SO_DETACH_FILTER, &value, sizeof(value)); See the BSD bpf.4 manpage and the BSD Packet Filter paper written by Steven McCanne and Van Jacobson of Lawrence Berkeley Laboratory. Frame Relay (FR) support for linux is built into a two tiered system of device drivers. The upper layer implements RFC1490 FR specification, and uses the Data Link Connection Identifier (DLCI) as its hardware address. Usually these are assigned by your network supplier, they give you the number/numbers of the Virtual Connections (VC) assigned to you. Each DLCI is a point-to-point link between your machine and a remote one. As such, a separate device is needed to accommodate the routing. Within the net-tools archives is 'dlcicfg'. This program will communicate with the base "DLCI" device, and create new net devices named 'dlci00', 'dlci01'... The configuration script will ask you how many DLCIs you need, as well as how many DLCIs you want to assign to each Frame Relay Access Device (FRAD). The DLCI uses a number of function calls to communicate with the FRAD, all of which are stored in the FRAD's private data area. assoc/deassoc, activate/deactivate and dlci_config. The DLCI supplies a receive function to the FRAD to accept incoming packets. With this initial offering, only 1 FRAD driver is available. With many thanks to Sangoma Technologies, David Mandelstam & Gene Kozin, the S502A, S502E & S508 are supported. This driver is currently set up for only FR, but as Sangoma makes more firmware modules available, it can be updated to provide them as well. Configuration of the FRAD makes use of another net-tools program, 'fradcfg'. This program makes use of a configuration file (which dlcicfg can also read) to specify the types of boards to be configured as FRADs, as well as perform any board specific configuration. The Sangoma module of fradcfg loads the FR firmware into the card, sets the irq/port/memory information, and provides an initial configuration. Additional FRAD device drivers can be added as hardware is available. At this time, the dlcicfg and fradcfg programs have not been incorporated into the net-tools distribution. They can be found at ftp.invlogic.com, in /pub/linux. Note that with OS/2 FTPD, you end up in /pub by default, so just use 'cd linux'. v0.10 is for use on pre-2.0.3 and earlier, v0.15 is for pre-2.0.4 and later. /proc/sys/net/ipv4/* Variables: ip_forward - BOOLEAN 0 - disabled (default) not 0 - enabled Forward Packets between interfaces. This variable is special, its change resets all configuration parameters to their default state (RFC1122 for hosts, RFC1812 for routers) ip_default_ttl - INTEGER default 64 ip_addrmask_agent - BOOLEAN Reply to ICMP ADDRESS MASK requests. default TRUE (router) FALSE (host) ip_bootp_agent - BOOLEAN Accept packets with source address of sort 0.b.c.d and destined to this host, broadcast or multicast. Such packets are silently ignored otherwise. default FALSE ip_no_pmtu_disc - BOOLEAN Disable Path MTU Discovery. default FALSE ip_fib_model - INTEGER 0 - (DEFAULT) Standard model. All routes are in class MAIN. 1 - default routes go to class DEFAULT. This mode should be very convenient for small ISPs making policy routing. 2 - RFC1812 compliant model. Interface routes are in class MAIN. Gateway routes are in class DEFAULT. IP Fragmentation: ip_always_defrag - BOOLEAN 0 - (DEFAULT) Normal setting for a normal router or host. 1 - Reassemble all fragments before processing. Useful for a firewall or transparent proxying hosts. ipfrag_high_thresh - INTEGER Maximum memory used to reassemble IP fragments. When ipfrag_high_thresh bytes of memory is allocated for this purpose, the fragment handler will toss packets until ipfrag_low_thresh is reached. ipfrag_low_thresh - INTEGER See ipfrag_high_thresh ipfrag_time - INTEGER Time in seconds to keep an IP fragment in memory. TCP variables: tcp_syn_retries - INTEGER Number of times initial SYNs for an TCP connection attempt will be retransmitted. Should not be higher than 255. tcp_keepalive_time - INTEGER How often TCP sends out keepalive messages when keepalive is enabled. Default: 2hours. tcp_keepalive_probes - INTEGER How many keepalive probes TCP sends out, until it decides that the connection is broken. tcp_retries1 - INTEGER tcp_retries2 - INTEGER tcp_max_delay_acks - INTEGER tcp_fin_timeout - INTEGER tcp_max_ka_probes - INTEGER tcp_hoe_retransmits - INTEGER Undocumented for now. tcp_syncookies - BOOLEAN Only valid when the kernel was compiled with CONFIG_SYNCOOKIES Send out syncookies when the syn backlog queue of a socket overflows. This is to prevent against the common 'syn flood attack' Default: FALSE tcp_stdurg - BOOLEAN Use the Host requirements interpretation of the TCP urg pointer field. Most hosts use the older BSD interpretation, so if you turn this on Linux might not communicate correctly with them. Default: FALSE tcp_syn_taildrop - BOOLEAN tcp_max_syn_backlog - INTEGER Undocumented (work in progress) tcp_window_scaling - BOOLEAN Enable window scaling as defined in RFC1323. tcp_timestamps - BOOLEAN Enable timestamps as defined in RFC1323. tcp_sack - BOOLEAN Enable select acknowledgments. tcp_retrans_collapse - BOOLEAN Bug-to-bug compatibility with some broken printers. On retransmit try to send bigger packets to work around bugs in certain TCP stacks. ip_local_port_range - 2 INTEGERS Defines the local port range that is used by TCP and UDP to choose the local port. The first number is the first, the second the last local port number. For high-usage systems change this to 32768-61000. icmp_echo_ignore_all - BOOLEAN icmp_echo_ignore_broadcasts - BOOLEAN If either is set to true, then the kernel will ignore either all ICMP ECHO requests sent to it or just those to broadcast/multicast addresses, respectively. icmp_destunreach_rate - INTEGER icmp_paramprob_rate - INTEGER icmp_timeexceed_rate - INTEGER icmp_echoreply_rate - INTEGER (not enabled per default) Limit the maximal rates for sending ICMP packets to specific targets. 0 to disable any limiting, otherwise the maximal rate in jiffies(1) See the source for more information. icmp_ignore_bogus_error_responses - BOOLEAN Some routers violate RFC 1122 by sending bogus responses to broadcast frames. Such violations are normally logged via a kernel warning. If this is set to TRUE, the kernel will not give such warnings, which will avoid log file clutter. Default: FALSE (1) Jiffie: internal timeunit for the kernel. On the i386 1/100s, on the Alpha 1/1024s. See the HZ define in /usr/include/asm/param.h for the exact value on your system. conf/interface/*: conf/all/* is special and changes the settings for all interfaces. Change special settings per interface. log_martians - BOOLEAN Log packets with impossible addresses to kernel log. accept_redirects - BOOLEAN Accept ICMP redirect messages. default TRUE (host) FALSE (router) forwarding - BOOLEAN Enable IP forwarding on this interface. mc_forwarding - BOOLEAN Do multicast routing. The kernel needs to be compiled with CONFIG_MROUTE and a multicast routing daemon is required. proxy_arp - BOOLEAN Do proxy arp. hidden - BOOLEAN Hide addresses attached to this device from another devices. Such addresses will never be selected by source address autoselection mechanism, host does not answer broadcast ARP requests for them, does not announce it as source address of ARP requests, but they are still reachable via IP. This flag is activated only if it is enabled both in specific device section and in "all" section. shared_media - BOOLEAN undocumented. secure_redirects - BOOLEAN Accept ICMP redirect messages only for gateways, listed in default gateway list. default TRUE redirects - BOOLEAN Send(router) or accept(host) RFC1620 shared media redirects. Overrides ip_secure_redirects. default TRUE (should be FALSE for distributed version, but I use it...) bootp_relay - BOOLEAN Accept packets with source address 0.b.c.d destined not to this host as local ones. It is supposed, that BOOTP relay daemon will catch and forward such packets. default FALSE Not Implemented Yet. accept_source_route - BOOLEAN Accept packets with SRR option. default TRUE (router) FALSE (host) rp_filter - INTEGER 2 - do source validation by reversed path, as specified in RFC1812 Recommended option for single homed hosts and stub network routers. Could cause troubles for complicated (not loop free) networks running a slow unreliable protocol (sort of RIP), or using static routes. 1 - (DEFAULT) Weaker form of RP filtering: drop all the packets that look as sourced at a directly connected interface, but were input from another interface. 0 - No source validation. NOTE: do not disable this option! All BSD derived routing software (sort of gated, routed etc. etc.) is confused by such packets, even if they are valid. When enabled it also prevents ip spoofing in some limited fashion. NOTE: this option is turned on per default only when ip_forwarding is on. For non-forwarding hosts it doesn't make much sense and makes some legal multihoming configurations impossible. Alexey Kuznetsov. kuznet@ms2.inr.ac.ru Updated by: Andi Kleen ak@muc.de $Id: ip-sysctl.txt,v 1.9 1999/05/08 02:58:44 davem Exp $ Text file for ipddp.c: AppleTalk-IP Decapsulation and AppleTalk-IP Encapsulation This text file writen by Jay Schulist Introduction ------------ AppleTalk-IP (IPDDP) is the method computers connected to AppleTalk networks can use to communicate via IP. AppleTalk-IP is simply IP datagrams inside AppleTalk packets. Through this driver you can either allow your Linux box to communicate IP over an AppleTalk network or you can provide IP gatewaying functions for your AppleTalk users. You can currently encapsulate or decapsulate AppleTalk-IP on LocalTalk, EtherTalk and PPPTalk. The only limit on the protocol is that of what kernel AppleTalk layer and drivers are available. Each mode requires its own user space software. Compiling AppleTalk-IP Decapsulation/Encapsulation ================================================= AppleTalk-IP decapsulation needs to be compiled into your kernel. You will need to turn on AppleTalk-IP driver support. Then you will need to select ONE of the two options; IP to AppleTalk-IP encapsulation support or AppleTalk-IP to IP decapsulation support. If you compile the driver statically you will only be able to use the driver for the function you have enabled in the kernel. If you compile the driver as a module you can select what mode you want it to run in via a module loading param. ipddp_mode=1 for AppleTalk-IP encapsulation and ipddp_mode=2 for AppleTalk-IP to IP decapsulation. Basic instructions for user space tools ======================================= To enable AppleTalk-IP decapsulation/encapsulation you will need the proper tools. You can get the tools for decapsulation from http://spacs1.spacs.k12.wi.us/~jschlst/MacGate and for encapsulation from http://www.maths.unm.edu/~bradford/ltpc.html I will briefly describe the operation of the tools, but you will need to consult the supporting documentation for each set of tools. Decapsulation - You will need to download a software package called MacGate. In this distribution there will be a tool called MacRoute which enables you to add routes to the kernel for your Macs by hand. Also the tool MacRegGateWay is included to register the proper IP Gateway and IP addresses for your machine. Included in this distribution is a patch to netatalk-1.4b2+asun2.0a17.2 (available from ftp.u.washington.edu/pub/user-supported/asun/) this patch is optional but it allows automatic adding and deleting of routes for Macs. (Handy for locations with large Mac installations) Encapsulation - You will need to download a software daemon called ipddpd. This software expects there to be an AppleTalk-IP gateway on the network. You will also need to add the proper routes to route your Linux box's IP traffic out the ipddp interface. Common Uses of ipddp.c ---------------------- Of course AppleTalk-IP decapsulation and encapsulation, but specifically decapsulation is being used most for connecting LocalTalk networks to IP networks. Although it has been used on EtherTalk networks to allow Macs that are only able to tunnel IP over EtherTalk. Encapsulation has been used to allow a Linux box stuck on a LocalTalk network to use IP. It should work equally well if you are stuck on an EtherTalk only network. Further Assistance ------------------- You can contact me (Jay Schulist ) with any questions regarding decapsulation or encapsulation. Bradford W. Johnson originally wrote the ipddp.c driver for IP encapsulation in AppleTalk. IP dynamic address hack-port v0.03 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This stuff allows diald ONESHOT connections to get established by dynamically changing packet source address (and socket's if local procs). It is implemented for TCP diald-box connections(1) and IP_MASQuerading(2). If enabled[*] and forwarding interface has changed: 1) Socket (and packet) source address is rewritten ON RETRANSMISSIONS while in SYN_SENT state (diald-box processes). 2) Out-bounded MASQueraded source address changes ON OUTPUT (when internal host does retransmission) until a packet from outside is received by the tunnel. This is specially helpful for auto dialup links (diald), where the ``actual'' outgoing address is unknown at the moment the link is going up. So, the *same* (local AND masqueraded) connections requests that bring the link up will be able to get established. [*] At boot, by default no address rewriting is attempted. To enable: # echo 1 > /proc/sys/net/ipv4/ip_dynaddr To enable verbose mode: # echo 2 > /proc/sys/net/ipv4/ip_dynaddr To disable (default) # echo 0 > /proc/sys/net/ipv4/ip_dynaddr Enjoy! -- Juanjo To use the IrDA protocols within Linux you will need to get a suitable copy of the IrDA Utilities. More detailed information about these and associated programs can be found on http://www.cs.uit.no/~dagb/irda/. For more information about the IrDA protocol stack, see the IR-HOWTO written by Werner Heuser There is an active mailing list for discussing Linux IrDA matters called linux-irda. To subscribe to it, send a message to Majordomo@list.uit.no with the words "subscribe linux-irda" in the body of the message, the subject field is ignored. Dag Brattli The Linux LAPB Module Interface 1.3 Jonathan Naylor 29.12.96 The LAPB module will be a separately compiled module for use by any parts of the Linux operating system that require a LAPB service. This document defines the interfaces to, and the services provided by this module. The term module in this context does not imply that the LAPB module is a separately loadable module, although it may be. The term module is used in its more standard meaning. The interface to the LAPB module consists of functions to the module, callbacks from the module to indicate important state changes, and structures for getting and setting information about the module. Structures ---------- Probably the most important structure is the skbuff structure for holding received and transmitted data, however it is beyond the scope of this document. The two LAPB specific structures are the LAPB initialisation structure and the LAPB parameter structure. These will be defined in a standard header file, . The header file is internal to the LAPB module and is not for use. LAPB Initialisation Structure ----------------------------- This structure is used only once, in the call to lapb_register (see below). It contains information about the device driver that requires the services of the LAPB module. struct lapb_register_struct { void (*connect_confirmation)(int token, int reason); void (*connect_indication)(int token, int reason); void (*disconnect_confirmation)(int token, int reason); void (*disconnect_indication)(int token, int reason); void (*data_indication)(int token, struct sk_buff *skb); void (*data_transmit)(int token, struct sk_buff *skb); }; Each member of this structure corresponds to a function in the device driver that is called when a particular event in the LAPB module occurs. These will be described in detail below. If a callback is not required (!!) then a NULL may be substituted. LAPB Parameter Structure ------------------------ This structure is used with the lapb_getparms and lapb_setparms functions (see below). They are used to allow the device driver to get and set the operational parameters of the LAPB implementation for a given connection. struct lapb_parms_struct { unsigned int t1; unsigned int t1timer; unsigned int t2; unsigned int t2timer; unsigned int n2; unsigned int n2count; unsigned int window; unsigned int state; unsigned int mode; }; T1 and T2 are protocol timing parameters and are given in units of 100ms. N2 is the maximum number of tries on the link before it is declared a failure. The window size is the maximum number of outstanding data packets allowed to be unacknowledged by the remote end, the value of the window is between 1 and 7 for a standard LAPB link, and between 1 and 127 for an extended LAPB link. The mode variable is a bit field used for setting (at present) three values. The bit fields have the following meanings: Bit Meaning 0 LAPB operation (0=LAPB_STANDARD 1=LAPB_EXTENDED). 1 [SM]LP operation (0=LAPB_SLP 1=LAPB=MLP). 2 DTE/DCE operation (0=LAPB_DTE 1=LAPB_DCE) 3-31 Reserved, must be 0. Extended LAPB operation indicates the use of extended sequence numbers and consequently larger window sizes, the default is standard LAPB operation. MLP operation is the same as SLP operation except that the addresses used by LAPB are different to indicate the mode of operation, the default is Single Link Procedure. The difference between DCE and DTE operation is (i) the addresses used for commands and responses, and (ii) when the DCE is not connected, it sends DM without polls set, every T1. The upper case constant names will be defined in the public LAPB header file. Functions --------- The LAPB module provides a number of function entry points. int lapb_register(void *token, struct lapb_register_struct); This must be called before the LAPB module may be used. If the call is successful then LAPB_OK is returned. The token must be a unique identifier generated by the device driver to allow for the unique identification of the instance of the LAPB link. It is returned by the LAPB module in all of the callbacks, and is used by the device driver in all calls to the LAPB module. For multiple LAPB links in a single device driver, multiple calls to lapb_register must be made. The format of the lapb_register_struct is given above. The return values are: LAPB_OK LAPB registered successfully. LAPB_BADTOKEN Token is already registered. LAPB_NOMEM Out of memory int lapb_unregister(void *token); This releases all the resources associated with a LAPB link. Any current LAPB link will be abandoned without further messages being passed. After this call, the value of token is no longer valid for any calls to the LAPB function. The valid return values are: LAPB_OK LAPB unregistered successfully. LAPB_BADTOKEN Invalid/unknown LAPB token. int lapb_getparms(void *token, struct lapb_parms_struct *parms); This allows the device driver to get the values of the current LAPB variables, the lapb_parms_struct is described above. The valid return values are: LAPB_OK LAPB getparms was successful. LAPB_BADTOKEN Invalid/unknown LAPB token. int lapb_setparms(void *token, struct lapb_parms_struct *parms); This allows the device driver to set the values of the current LAPB variables, the lapb_parms_struct is described above. The values of t1timer, t2timer and n2count are ignored, likewise changing the mode bits when connected will be ignored. An error implies that none of the values have been changed. The valid return values are: LAPB_OK LAPB getparms was successful. LAPB_BADTOKEN Invalid/unknown LAPB token. LAPB_INVALUE One of the values was out of its allowable range. int lapb_connect_request(void *token); Initiate a connect using the current parameter settings. The valid return values are: LAPB_OK LAPB is starting to connect. LAPB_BADTOKEN Invalid/unknown LAPB token. LAPB_CONNECTED LAPB module is already connected. int lapb_disconnect_request(void *token); Initiate a disconnect. The valid return values are: LAPB_OK LAPB is starting to disconnect. LAPB_BADTOKEN Invalid/unknown LAPB token. LAPB_NOTCONNECTED LAPB module is not connected. int lapb_data_request(void *token, struct sk_buff *skb); Queue data with the LAPB module for transmitting over the link. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are: LAPB_OK LAPB has accepted the data. LAPB_BADTOKEN Invalid/unknown LAPB token. LAPB_NOTCONNECTED LAPB module is not connected. int lapb_data_received(void *token, struct sk_buff *skb); Queue data with the LAPB module which has been received from the device. It is expected that the data passed to the LAPB module has skb->data pointing to the beginning of the LAPB data. If the call is successful then the skbuff is owned by the LAPB module and may not be used by the device driver again. The valid return values are: LAPB_OK LAPB has accepted the data. LAPB_BADTOKEN Invalid/unknown LAPB token. Callbacks --------- These callbacks are functions provided by the device driver for the LAPB module to call when an event occurs. They are registered with the LAPB module with lapb_register (see above) in the structure lapb_register_struct (see above). void (*connect_confirmation)(void *token, int reason); This is called by the LAPB module when a connection is established after being requested by a call to lapb_connect_request (see above). The reason is always LAPB_OK. void (*connect_indication)(void *token, int reason); This is called by the LAPB module when the link is established by the remote system. The value of reason is always LAPB_OK. void (*disconnect_confirmation)(void *token, int reason); This is called by the LAPB module when an event occurs after the device driver has called lapb_disconnect_request (see above). The reason indicates what has happened. In all cases the LAPB link can be regarded as being terminated. The values for reason are: LAPB_OK The LAPB link was terminated normally. LAPB_NOTCONNECTED The remote system was not connected. LAPB_TIMEDOUT No response was received in N2 tries from the remote system. void (*disconnect_indication)(void *token, int reason); This is called by the LAPB module when the link is terminated by the remote system or another event has occurred to terminate the link. This may be returned in response to a lapb_connect_request (see above) if the remote system refused the request. The values for reason are: LAPB_OK The LAPB link was terminated normally by the remote system. LAPB_REFUSED The remote system refused the connect request. LAPB_NOTCONNECTED The remote system was not connected. LAPB_TIMEDOUT No response was received in N2 tries from the remote system. void (*data_indication)(void *token, struct sk_buff *skb); This is called by the LAPB module when data has been received from the remote system that should be passed onto the next layer in the protocol stack. The skbuff becomes the property of the device driver and the LAPB module will not perform any more actions on it. The skb->data pointer will be pointing to the first byte of data after the LAPB header. void (*data_transmit)(void *token, struct sk_buff *skb); This is called by the LAPB module when data is to be transmitted to the remote system by the device driver. The skbuff becomes the property of the device driver and the LAPB module will not perform any more actions on it. The skb->data pointer will be pointing to the first byte of the LAPB header. This is the ALPHA version of the ltpc driver. In order to use it, you will need at least version 1.3.3 of the netatalk package, and the Apple or Farallon LocalTalk PC card. There are a number of different LocalTalk cards for the PC; this driver applies only to the one with the 65c02 processor chip on it. To include it in the kernel, select the CONFIG_LTPC switch in the configuration dialog. You can also compile it as a module. While the driver will attempt to autoprobe the I/O port address, IRQ line, and DMA channel of the card, this does not always work. For this reason, you should be prepared to supply these parameters yourself. (see "Card Configuration" below for how to determine or change the settings on your card) When the driver is compiled into the kernel, you can add a line such as the following to your /etc/lilo.conf: append="ltpc=0x240,9,1" where the parameters (in order) are the port address, IRQ, and DMA channel. The second and third values can be omitted, in which case the driver will try to determine them itself. If you load the driver as a module, you can pass the parameters "io=", "irq=", and "dma=" on the command line with insmod or modprobe, or add them as options in /etc/conf.modules: alias lt0 ltpc # autoload the module when the interface is configured options ltpc io=0x240 irq=9 dma=1 Before starting up the netatalk demons (perhaps in rc.local), you need to add a line such as: /sbin/ifconfig lt0 127.0.0.42 The address is unimportant - however, the card needs to be configured with ifconfig so that Netatalk can find it. The appropriate netatalk configuration depends on whether you are attached to a network that includes AppleTalk routers or not. If, like me, you are simply connecting to your home Macintoshes and printers, you need to set up netatalk to "seed". The way I do this is to have the lines dummy -seed -phase 2 -net 2000 -addr 2000.26 -zone "1033" lt0 -seed -phase 1 -net 1033 -addr 1033.27 -zone "1033" in my atalkd.conf. What is going on here is that I need to fool netatalk into thinking that there are two AppleTalk interfaces present; otherwise, it refuses to seed. This is a hack, and a more permanent solution would be to alter the netatalk code. Also, make sure you have the correct name for the dummy interface - If it's compiled as a module, you will need to refer to it as "dummy0" or some such. If you are attached to an extended AppleTalk network, with routers on it, then you don't need to fool around with this -- the appropriate line in atalkd.conf is lt0 -phase 1 -------------------------------------- Card Configuration: The interrupts and so forth are configured via the DIP switch on the board. Set the switches so as not to conflict with other hardware. Interrupts -- set at most one. If none are set, the driver uses polled mode. Because the card was developed in the XT era, the original documentation refers to IRQ2. Since you'll be running this on an AT (or later) class machine, that really means IRQ9. SW1 IRQ 4 SW2 IRQ 3 SW3 IRQ 9 (2 in original card documentation only applies to XT) DMA -- choose DMA 1 or 3, and set both corresponding switches. SW4 DMA 3 SW5 DMA 1 SW6 DMA 3 SW7 DMA 1 I/O address -- choose one. SW8 220 / 240 -------------------------------------- IP: Yes, it is possible to do IP over LocalTalk. However, you can't just treat the LocalTalk device like an ordinary Ethernet device, even if that's what it looks like to Netatalk. Instead, you follow the same procedure as for doing IP in EtherTalk. See Documentation/networking/ipddp.txt for more information about the kernel driver and userspace tools needed. -------------------------------------- BUGS: IRQ autoprobing often doesn't work on a cold boot. To get around this, either compile the driver as a module, or pass the parameters for the card to the kernel as described above. Also, as usual, autoprobing is not recommended when you use the driver as a module. (though it usually works at boot time, at least) Polled mode is *really* slow sometimes, but this seems to depend on the configuration of the network. It may theoretically be possible to use two LTPC cards in the same machine, but this is unsupported, so if you really want to do this, you'll probably have to hack the initialization code a bit. ______________________________________ THANKS: Thanks to Alan Cox for helpful discussions early on in this work, and to Denis Hainsworth for doing the bleeding-edge testing. -- Bradford Johnson -- Updated 11/09/1998 by David Huggins-Daines Behaviour of Cards Under Multicast ================================== This is how they currently behave, not what the hardware can do--for example, the Lance driver doesn't use its filter, even though the code for loading it is in the DEC Lance-based driver. The following are requirements for multicasting ----------------------------------------------- AppleTalk Multicast hardware filtering not important but avoid cards only doing promisc IP-Multicast Multicast hardware filters really help IP-MRoute AllMulti hardware filters are of no help Board Multicast AllMulti Promisc Filter ------------------------------------------------------------------------ 3c501 YES YES YES Software 3c503 YES YES YES Hardware 3c505 YES NO YES Hardware 3c507 NO NO NO N/A 3c509 YES YES YES Software 3c59x YES YES YES Software ac3200 YES YES YES Hardware apricot YES PROMISC YES Hardware arcnet NO NO NO N/A at1700 PROMISC PROMISC YES Software atp PROMISC PROMISC YES Software cs89x0 YES YES YES Software de4x5 YES YES YES Hardware de600 NO NO NO N/A de620 PROMISC PROMISC YES Software depca YES PROMISC YES Hardware e2100 YES YES YES Hardware eepro YES PROMISC YES Hardware eexpress NO NO NO N/A ewrk3 YES PROMISC YES Hardware hp-plus YES YES YES Hardware hp YES YES YES Hardware hp100 YES YES YES Hardware ibmtr NO NO NO N/A lance YES YES YES Software(#) ne YES YES YES Hardware ni52 <------------------ Buggy ------------------> ni65 YES YES YES Software(#) seeq NO NO NO N/A sk_g16 NO NO YES N/A smc-ultra YES YES YES Hardware sunlance YES YES YES Hardware tulip YES YES YES Hardware wavelan YES PROMISC YES Hardware wd YES YES YES Hardware znet YES YES YES Software PROMISC = This multicast mode is in fact promiscuous mode. Avoid using cards who go PROMISC on any multicast in a multicast kernel. (#) = Hardware multicast support is not used yet. NCSA telnet doesn't work with path MTU discovery enabled. This is due to a bug in NCSA that also stops it working with other modern networking code such as Solaris. The following information is courtesy of Marek There is a fixed version somewhere on ftp.upe.ac.za (sorry, I don't remember the exact pathname, and this site is very slow from here). It may or may not be faster for you to get it from ftp://ftp.ists.pwr.wroc.pl/pub/msdos/telnet/ncsa_upe/tel23074.zip (source is in v230704s.zip). I have tested it with 1.3.79 (with path mtu discovery enabled - ncsa 2.3.08 didn't work) and it seems to work. I don't know if anyone is working on this code - this version is over a year old. Too bad - it's faster and often more stable than these windoze telnets, and runs on almost anything... Wed 2-Aug-95 Linux network driver modules Do not mistake this for "README.modules" at the top-level directory! That document tells about modules in general, while this one tells only about network device driver modules. This is a potpourri of INSMOD-time(*) configuration options (if such exists) and their default values of various modules in the Linux network drivers collection. Some modules have also hidden (= non-documented) tunable values. The choice of not documenting them is based on general belief, that the less the user needs to know, the better. (There are things that driver developers can use, others should not confuse themselves.) In many cases it is highly preferred that insmod:ing is done ONLY with defining an explicit address for the card, AND BY NOT USING AUTO-PROBING! Now most cards have some explicitly defined base address that they are compiled with (to avoid auto-probing, among other things). If that compiled value does not match your actual configuration, do use the "io=0xXXX" -parameter for the insmod, and give there a value matching your environment. If you are adventurous, you can ask the driver to autoprobe by using the "io=0" parameter, however it is a potentially dangerous thing to do in a live system. (If you don't know where the card is located, you can try autoprobing, and after possible crash recovery, insmod with proper IO-address..) -------------------------- (*) "INSMOD-time" means when you load module with /sbin/insmod you can feed it optional parameters. See "man insmod". -------------------------- 8390 based Network Modules (Paul Gortmaker, Nov 12, 1995) -------------------------- (Includes: smc-ultra, ne, wd, 3c503, hp, hp-plus, e2100 and ac3200) The 8390 series of network drivers now support multiple card systems without reloading the same module multiple times (memory efficient!) This is done by specifying multiple comma separated values, such as: insmod 3c503.o io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1 The above would have the one module controlling four 3c503 cards, with card 2 and 4 using external transceivers. The "insmod" manual describes the usage of comma separated value lists. It is *STRONGLY RECOMMENDED* that you supply "io=" instead of autoprobing. If an "io=" argument is not supplied, then the ISA drivers will complain about autoprobing being not recommended, and begrudgingly autoprobe for a *SINGLE CARD ONLY* -- if you want to use multiple cards you *have* to supply an "io=0xNNN,0xQQQ,..." argument. The ne module is an exception to the above. A NE2000 is essentially an 8390 chip, some bus glue and some RAM. Because of this, the ne probe is more invasive than the rest, and so at boot we make sure the ne probe is done last of all the 8390 cards (so that it won't trip over other 8390 based cards) With modules we can't ensure that all other non-ne 8390 cards have already been found. Because of this, the ne module REQUIRES an "io=0xNNN" argument passed in via insmod. It will refuse to autoprobe. It is also worth noting that auto-IRQ probably isn't as reliable during the flurry of interrupt activity on a running machine. Cards such as the ne2000 that can't get the IRQ setting from an EEPROM or configuration register are probably best supplied with an "irq=M" argument as well. ---------------------------------------------------------------------- Card/Module List - Configurable Parameters and Default Values ---------------------------------------------------------------------- 3c501.c: io = 0x280 IO base address irq = 5 IRQ (Probes ports: 0x280, 0x300) 3c503.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ software selected by driver using autoIRQ) xcvr = 0 (Use xcvr=1 to select external transceiver.) (Probes ports: 0x300, 0x310, 0x330, 0x350, 0x250, 0x280, 0x2A0, 0x2E0) 3c505.c: io = 0 irq = 0 dma = 6 (not autoprobed) (Probes ports: 0x300, 0x280, 0x310) 3c507.c: io = 0x300 irq = 0 (Probes ports: 0x300, 0x320, 0x340, 0x280) 3c509.c: io = 0 irq = 0 ( Module load-time probing Works reliably only on EISA, ISA ID-PROBE IS NOT RELIABLE! Compile this driver statically into kernel for now, if you need it auto-probing on an ISA-bus machine. ) 8390.c: (No public options, several other modules need this one) a2065.c: Since this is a Zorro board, it supports full autoprobing, even for multiple boards. (m68k/Amiga) ac3200.c: io = 0 (Checks 0x1000 to 0x8fff in 0x1000 intervals) irq = 0 (Read from config register) (EISA probing..) apricot.c: io = 0x300 (Can't be altered!) irq = 10 arcnet.c: io = 0 irqnum = 0 shmem = 0 num = 0 DO SET THESE MANUALLY AT INSMOD! (When probing, looks at the following possible addresses: Suggested ones: 0x300, 0x2E0, 0x2F0, 0x2D0 Other ones: 0x200, 0x210, 0x220, 0x230, 0x240, 0x250, 0x260, 0x270, 0x280, 0x290, 0x2A0, 0x2B0, 0x2C0, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360, 0x370, 0x380, 0x390, 0x3A0, 0x3E0, 0x3F0 ) ariadne.c: Since this is a Zorro board, it supports full autoprobing, even for multiple boards. (m68k/Amiga) at1700.c: io = 0x260 irq = 0 (Probes ports: 0x260, 0x280, 0x2A0, 0x240, 0x340, 0x320, 0x380, 0x300) atari_bionet.c: Supports full autoprobing. (m68k/Atari) atari_pamsnet.c: Supports full autoprobing. (m68k/Atari) atarilance.c: Supports full autoprobing. (m68k/Atari) atp.c: *Not modularized* (Probes ports: 0x378, 0x278, 0x3BC; fixed IRQs: 5 and 7 ) cops.c: io = 0x240 irq = 5 nodeid = 0 (AutoSelect = 0, NodeID 1-254 is hand selected.) (Probes ports: 0x240, 0x340, 0x200, 0x210, 0x220, 0x230, 0x260, 0x2A0, 0x300, 0x310, 0x320, 0x330, 0x350, 0x360) de4x5.c: io = 0x000b irq = 10 is_not_dec = 0 -- For non-DEC card using DEC 21040/21041/21140 chip, set this to 1 (EISA, and PCI probing) de600.c: de600_debug = 0 (On port 0x378, irq 7 -- lpt1; compile time configurable) de620.c: bnc = 0, utp = 0 <-- Force media by setting either. io = 0x378 (also compile-time configurable) irq = 7 depca.c: io = 0x200 irq = 7 (Probes ports: ISA: 0x300, 0x200; EISA: 0x0c00 ) dummy.c: No options e2100.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ software selected by driver) mem = 0 (Override default shared memory start of 0xd0000) xcvr = 0 (Use xcvr=1 to select external transceiver.) (Probes ports: 0x300, 0x280, 0x380, 0x220) eepro.c: io = 0x200 irq = 0 (Probes ports: 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340, 0x360) eexpress.c: io = 0x300 irq = 0 (IRQ value read from EEPROM) (Probes ports: 0x300, 0x270, 0x320, 0x340) eql.c: (No parameters) ewrk3.c: io = 0x300 irq = 5 (With module no autoprobing! On EISA-bus does EISA probing. Static linkage probes ports on ISA bus: 0x100, 0x120, 0x140, 0x160, 0x180, 0x1A0, 0x1C0, 0x200, 0x220, 0x240, 0x260, 0x280, 0x2A0, 0x2C0, 0x2E0, 0x300, 0x340, 0x360, 0x380, 0x3A0, 0x3C0) hp-plus.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ read from configuration register) (Probes ports: 0x200, 0x240, 0x280, 0x2C0, 0x300, 0x320, 0x340) hp.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ software selected by driver using autoIRQ) (Probes ports: 0x300, 0x320, 0x340, 0x280, 0x2C0, 0x200, 0x240) hp100.c: hp100_port = 0 (IO-base address) (Does EISA-probing, if on EISA-slot; On ISA-bus probes all ports from 0x100 thru to 0x3E0 in increments of 0x020) hydra.c: Since this is a Zorro board, it supports full autoprobing, even for multiple boards. (m68k/Amiga) ibmtr.c: io = 0xa20, 0xa24 (autoprobed by default) irq = 0 (driver cannot select irq - read from hardware) mem = 0 (shared memory base set at 0xd0000 and not yet able to override thru mem= parameter.) lance.c: *Not modularized* (PCI, and ISA probing; "CONFIG_PCI" needed for PCI support) (Probes ISA ports: 0x300, 0x320, 0x340, 0x360) loopback.c: *Static kernel component* ne.c: io = 0 (Explicitly *requires* an "io=0xNNN" value) irq = 0 (Tries to determine configured IRQ via autoIRQ) (Probes ports: 0x300, 0x280, 0x320, 0x340, 0x360) net_init.c: *Static kernel component* ni52.c: *Not modularized* (Probes ports: 0x300, 0x280, 0x360, 0x320, 0x340 mems: 0xD0000, 0xD2000, 0xC8000, 0xCA000, 0xD4000, 0xD6000, 0xD8000 ) ni65.c: *Not modularized* **16MB MEMORY BARRIER BUG** (Probes ports: 0x300, 0x320, 0x340, 0x360) pi2.c: *Not modularized* (well, NON-STANDARD modularization!) Only one card supported at this time. (Probes ports: 0x380, 0x300, 0x320, 0x340, 0x360, 0x3A0) plip.c: io = 0 irq = 0 (by default, uses IRQ 5 for port at 0x3bc, IRQ 7 for port at 0x378, and IRQ 2 for port at 0x278) (Probes ports: 0x278, 0x378, 0x3bc) ppp.c: No options (ppp-2.2+ has some, this is based on non-dynamic version from ppp-2.1.2d) seeq8005.c: *Not modularized* (Probes ports: 0x300, 0x320, 0x340, 0x360) sk_g16.c: *Not modularized* (Probes ports: 0x100, 0x180, 0x208, 0x220m 0x288, 0x320, 0x328, 0x390) skeleton.c: *Skeleton* slhc.c: No configuration parameters slip.c: slip_maxdev = 256 (default value from SL_NRUNIT on slip.h) smc-ultra.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ val. read from EEPROM) (Probes ports: 0x200, 0x220, 0x240, 0x280, 0x300, 0x340, 0x380) tulip.c: *Partial modularization* (init-time memory allocation makes problems..) tunnel.c: No insmod parameters wavelan.c: io = 0x390 (Settable, but change not recommended) irq = 0 (Not honoured, if changed..) wd.c: io = 0 (It will complain if you don't supply an "io=0xNNN") irq = 0 (IRQ val. read from EEPROM, ancient cards use autoIRQ) mem = 0 (Force shared-memory on address 0xC8000, or whatever..) mem_end = 0 (Force non-std. mem. size via supplying mem_end val.) (eg. for 32k WD8003EBT, use mem=0xd0000 mem_end=0xd8000) (Probes ports: 0x300, 0x280, 0x380, 0x240) znet.c: *Not modularized* (Only one device on Zenith Z-Note (notebook?) systems, configuration information from (EE)PROM) IBM PCI Pit/Pit-Phy/Olympic CHIPSET BASED TOKEN RING CARDS README Release 0.2.0 - Release June 8th 1999 Peter De Schrijver & Mike Phillips Thanks: Erik De Cock, Adrian Bridgett and Frank Fiene for their patience and testing. Paul Norton without whose tr.c code we would have had a lot more work to do. Options: The driver accepts three options: ringspeed, pkt_buf_sz, and message_level. These options can be specified differently for each card found. ringspeed: Has one of three settings 0 (default), 4 or 16. 0 will make the card autosense the ringspeed and join at the appropriate speed, this will be the default option for most people. 4 or 16 allow you to explicitly force the card to operate at a certain speed. The card will fail if you try to insert it at the wrong speed. (Although some hubs will allow this so be *very* careful). The main purpose for explicitly setting the ring speed is for when the card is first on the ring. In autosense mode, if the card cannot detect any active monitors on the ring it will not open, so you must re-init the card at the appropriate speed. Unfortunately at present the only way of doing this is rmmod and insmod which is a bit tough if it is compiled in the kernel. pkt_buf_sz: This is this initial receive buffer allocation size. This will default to 4096 if no value is entered. You may increase performance of the driver by setting this to a value larger than the network packet size, although the driver now re-sizes buffers based on MTU settings as well. message_level: Controls level of messages created by the driver. Defaults to 0: which only displays start-up and critical messages. Presently any non-zero value will display all soft messages as well. NB This does not turn debugging messages on, that must be done by modified the source code. Multi-card: The driver will detect multiple cards and will work with shared interrupts, each card is assigned the next token ring device, i.e. tr0 , tr1, tr2. The driver should also happily reside in the system with other drivers. It has been tested with ibmtr.c running, and I personally have had one Olicom PCI card and two IBM olympic cards (all on the same interrupt), all running together. Variable MTU size: The driver can handle a MTU size upto either 4500 or 18000 depending upon ring speed. The driver also changes the size of the receive buffers as part of the mtu re-sizing, so if you set mtu = 18000, you will need to be able to allocate 16 * (sk_buff with 18000 buffer size) call it 18500 bytes per ring position = 296,000 bytes of memory space, plus of course anything necessary for the tx sk_buff's. Remember this is per card, so if you are building routers, gateway's etc, you could start to use a lot of memory real fast. Network Monitor Mode: By modifying the #define OLYMPIC_NETWORK_MONITOR from 0 to 1 in the source code the driver will implement a quasi network monitoring mode. All unexpected MAC frames (beaconing etc.) will be received by the driver and the source and destination addresses printed. Also an entry will be added in /proc/net called olympic_tr. This displays low level information about the configuration of the ring and the adapter. This feature has been designed for network administrators to assist in the diagnosis of network / ring problems. 6/8/99 Peter De Schrijver and Mike Phillips PLIP: The Parallel Line Internet Protocol Device Donald Becker (becker@super.org) I.D.A. Supercomputing Research Center, Bowie MD 20715 At some point T. Thorn will probably contribute text, Tommy Thorn (tthorn@daimi.aau.dk) PLIP Introduction ----------------- This document describes the parallel port packet pusher for Net/LGX. This device interface allows a point-to-point connection between two parallel ports to appear as a IP network interface. What is PLIP? ============= PLIP is Parallel Line IP, that is, the transportation of IP packages over a parallel port. In the case of a PC, the obvious choice is the printer port. PLIP is a non-standard, but [can use] uses the standard LapLink null-printer cable [can also work in turbo mode, with a PLIP cable]. [The protocol used to pack IP packages, is a simple one initiated by Crynwr.] Advantages of PLIP ================== It's cheap, it's available everywhere, and it's easy. The PLIP cable is all that's needed to connect two Linux boxes, and it can be built for very few bucks. Connecting two Linux boxes takes only a second's decision and a few minutes' work, no need to search for a [supported] netcard. This might even be especially important in the case of notebooks, where netcards are not easily available. Not requiring a netcard also means that apart from connecting the cables, everything else is software configuration [which in principle could be made very easy.] Disadvantages of PLIP ===================== Doesn't work over a modem, like SLIP and PPP. Limited range, 15 m. Can only be used to connect three (?) Linux boxes. Doesn't connect to an existing Ethernet. Isn't standard (not even de facto standard, like SLIP). Performance ========== PLIP easily outperforms Ethernet cards....(ups, I was dreaming, but it *is* getting late. EOB) PLIP hardware interconnection ----------------------------- PLIP uses several different data transfer methods. The first (and the only one implemented in the early version of the code) uses a standard printer "null" cable to transfers data four bits at a time using data bit outputs connected to status bit inputs. The second data transfer method relies on both machines having bi-directional parallel ports, rather than output-only ``printer'' ports. This allows byte-wide transfers and avoids reconstructing nibbles into bytes, leading to much faster transfers. Parallel Transfer Mode 0 Cable ============================== The cable for the first transfer mode is a standard printer "null" cable which transfers data four bits at a time using data bit outputs of the first port (machine T) connected to the status bit inputs of the second port (machine R). There are five status inputs, and they are used as four data inputs and a clock (data strobe) input, arranged so that the data input bits appear as contiguous bits with standard status register implementation. A cable that implements this protocol is available commercially as a "Null Printer" or "Turbo Laplink" cable. It can be constructed with two DB-25 male connectors symmetrically connected as follows: STROBE output 1* D0->ERROR 2 - 15 15 - 2 D1->SLCT 3 - 13 13 - 3 D2->PAPOUT 4 - 12 12 - 4 D3->ACK 5 - 10 10 - 5 D4->BUSY 6 - 11 11 - 6 D5,D6,D7 are 7*, 8*, 9* AUTOFD output 14* INIT output 16* SLCTIN 17 - 17 extra grounds are 18*,19*,20*,21*,22*,23*,24* GROUND 25 - 25 * Do not connect these pins on either end If the cable you are using has a metallic shield it should be connected to the metallic DB-25 shell at one end only. Parallel Transfer Mode 1 ======================== The second data transfer method relies on both machines having bi-directional parallel ports, rather than output-only ``printer'' ports. This allows byte-wide transfers, and avoids reconstructing nibbles into bytes. This cable should not be used on unidirectional ``printer'' (as opposed to ``parallel'') ports or when the machine isn't configured for PLIP, as it will result in output driver conflicts and the (unlikely) possibility of damage. The cable for this transfer mode should be constructed as follows: STROBE->BUSY 1 - 11 D0->D0 2 - 2 D1->D1 3 - 3 D2->D2 4 - 4 D3->D3 5 - 5 D4->D4 6 - 6 D5->D5 7 - 7 D6->D6 8 - 8 D7->D7 9 - 9 INIT -> ACK 16 - 10 AUTOFD->PAPOUT 14 - 12 SLCT->SLCTIN 13 - 17 GND->ERROR 18 - 15 extra grounds are 19*,20*,21*,22*,23*,24* GROUND 25 - 25 * Do not connect these pins on either end Once again, if the cable you are using has a metallic shield it should be connected to the metallic DB-25 shell at one end only. PLIP Mode 0 transfer protocol ============================= The PLIP driver is compatible with the "Crynwr" parallel port transfer standard in Mode 0. That standard specifies the following protocol: send header nibble '8' count-low octet count-high octet ... data octets checksum octet Each octet is sent as >4)&0x0F)> To start a transfer the transmitting machine outputs a nibble 0x08. The raises the ACK line, triggering an interrupt in the receiving machine. The receiving machine disables interrupts and raises its own ACK line. Restated: (OUT is bit 0-4, OUT.j is bit j from OUT. IN likewise) Send_Byte: OUT := low nibble, OUT.4 := 1 WAIT FOR IN.4 = 1 OUT := high nibble, OUT.4 := 0 WAIT FOR IN.4 = 0 Classes ------- "Class" is a complete routing table in common sense. I.e. it is tree of nodes (destination prefix, tos, metric) with attached information: gateway, device etc. This tree is looked up as specified in RFC1812 5.2.4.3 1. Basic match 2. Longest match 3. Weak TOS. 4. Metric. (should not be in kernel space, but they are) 5. Additional pruning rules. (not in kernel space). We have two special type of nodes: REJECT - abort route lookup and return an error value. THROW - abort route lookup in this class. Currently the number of classes is limited to 255 (0 is reserved for "not specified class") Three classes are builtin: RT_CLASS_LOCAL=255 - local interface addresses, broadcasts, nat addresses. RT_CLASS_MAIN=254 - all normal routes are put there by default. RT_CLASS_DEFAULT=253 - if ip_fib_model==1, then normal default routes are put there, if ip_fib_model==2 all gateway routes are put there. Rules ----- Rule is a record of (src prefix, src interface, tos, dst prefix) with attached information. Rule types: RTP_ROUTE - lookup in attached class RTP_NAT - lookup in attached class and if a match is found, translate packet source address. RTP_MASQUERADE - lookup in attached class and if a match is found, masquerade packet as sourced by us. RTP_DROP - silently drop the packet. RTP_REJECT - drop the packet and send ICMP NET UNREACHABLE. RTP_PROHIBIT - drop the packet and send ICMP COMM. ADM. PROHIBITED. Rule flags: RTRF_LOG - log route creations. RTRF_VALVE - One way route (used with masquerading) Default setup: root@amber:/pub/ip-routing # iproute -r Kernel routing policy rules Pref Source Destination TOS Iface Cl 0 default default 00 * 255 254 default default 00 * 254 255 default default 00 * 253 Lookup algorithm ---------------- We scan rules list, and if a rule is matched, apply it. If a route is found, return it. If it is not found or a THROW node was matched, continue to scan rules. Applications ------------ 1. Just ignore classes. All the routes are put into MAIN class (and/or into DEFAULT class). HOWTO: iproute add PREFIX [ tos TOS ] [ gw GW ] [ dev DEV ] [ metric METRIC ] [ reject ] ... (look at iproute utility) or use route utility from current net-tools. 2. Opposite case. Just forget all that you know about routing tables. Every rule is supplied with its own gateway, device info. record. This approach is not appropriate for automated route maintenance, but it is ideal for manual configuration. HOWTO: iproute addrule [ from PREFIX ] [ to PREFIX ] [ tos TOS ] [ dev INPUTDEV] [ pref PREFERENCE ] route [ gw GATEWAY ] [ dev OUTDEV ] ..... Warning: As of now the size of the routing table in this approach is limited to 256. If someone likes this model, I'll relax this limitation. 3. OSPF classes (see RFC1583, RFC1812 E.3.3) Very clean, stable and robust algorithm for OSPF routing domains. Unfortunately, it is not widely used in the Internet. Proposed setup: 255 local addresses 254 interface routes 253 ASE routes with external metric 252 ASE routes with internal metric 251 inter-area routes 250 intra-area routes for 1st area 249 intra-area routes for 2nd area etc. Rules: iproute addrule class 253 iproute addrule class 252 iproute addrule class 251 iproute addrule to a-prefix-for-1st-area class 250 iproute addrule to another-prefix-for-1st-area class 250 ... iproute addrule to a-prefix-for-2nd-area class 249 ... Area classes must be terminated with reject record. iproute add default reject class 250 iproute add default reject class 249 ... 4. The Variant Router Requirements Algorithm (RFC1812 E.3.2) Create 16 classes for different TOS values. It is a funny, but pretty useless algorithm. I listed it just to show the power of new routing code. 5. All the variety of combinations...... GATED ----- Gated does not understand classes, but it will work happily in MAIN+DEFAULT. All policy routes can be set and maintained manually. IMPORTANT NOTE -------------- route.c has a compilation time switch CONFIG_IP_LOCAL_RT_POLICY. If it is set, locally originated packets are routed using all the policy list. This is not very convenient and pretty ambiguous when used with NAT and masquerading. I set it to FALSE by default. Alexey Kuznetov kuznet@ms2.inr.ac.ru *NEWSFLASH* This kernel release needs a minor bug fix for pppd to run properly with the new routing code. When your pppd doesn't work apply the following patch to pppd-2.2.0f or update to the newest pppd version. Patch: --- ppp-2.2.0f/pppd/sys-linux.c-o Wed Sep 17 00:23:01 1997 +++ ppp-2.2.0f/pppd/sys-linux.c Wed Sep 17 00:23:11 1997 @@ -927,8 +927,11 @@ if (ioctl(sockfd, SIOCADDRT, &rt) < 0) { +/* The new linux routing code doesn't like routes on down devices. */ +#if 0 syslog (LOG_ERR, "ioctl(SIOCADDRT) device route: %m"); return (0); +#endif } return 1; } -Andi Kleen -------------------------------------------------------------------- The PPP support for this kernel requires the 2.2.0 version of the pppd daemon. You will find the current version of the daemon on sunsite.unc.edu in the /pub/Linux/system/Network/serial directory. Sunsite has many mirror sites. Please feel free to obtain it from a mirror site close to you. If you attempt to use a version of pppd which is not compatible then you will have some error condition. It usually is reflected in that an ioctl operation will generate a fatal error. Please do not use earlier versions of the 2.2 package. If you obtained a copy from merit.edu or bellatrix then please get an update from the sunsite site. The CCP (Compression Control Protocol) which is supported by this code is functional. You will need a compatible BSD compressor on your peer site to use the code. The BSD compression code will only build as a loadable module. There was an earlier version which would build it into the kernel but that functionality has been removed for various reasons. -- Al Longyear longyear@netcom.com This is the README for the Gracilis Packetwin device driver, version 0.5 ALPHA for Linux 1.3.43. These files will allow you to talk to the PackeTwin (now know as PT) and connect through it just like a pair of TNCs. To do this you will also require the AX.25 code in the kernel enabled. There are four files in this archive; this readme, a patch file, a .c file and finally a .h file. The two program files need to be put into the drivers/net directory in the Linux source tree, for me this is the directory /usr/src/linux/drivers/net. The patch file needs to be patched in at the top of the Linux source tree (/usr/src/linux in my case). You will most probably have to edit the pt.c file to suit your own setup, this should just involve changing some of the defines at the top of the file. Please note that if you run an external modem you must specify a speed of 0. The program is currently setup to run a 4800 baud external modem on port A and a Kantronics DE-9600 daughter board on port B so if you have this (or something similar) then you're right. To compile in the driver, put the files in the correct place and patch in the diff. You will have to re-configure the kernel again before you recompile it. The driver is not real good at the moment for finding the card. You can 'help' it by changing the order of the potential addresses in the structure found in the pt_init() function so the address of where the card is is put first. After compiling, you have to get them going, they are pretty well like any other net device and just need ifconfig to get them going. As an example, here is my /etc/rc.net -------------------------- # # Configure the PackeTwin, port A. /sbin/ifconfig pt0a 44.136.8.87 hw ax25 vk2xlz mtu 512 /sbin/ifconfig pt0a 44.136.8.87 broadcast 44.136.8.255 netmask 255.255.255.0 /sbin/route add -net 44.136.8.0 netmask 255.255.255.0 dev pt0a /sbin/route add -net 44.0.0.0 netmask 255.0.0.0 gw 44.136.8.68 dev pt0a /sbin/route add -net 138.25.16.0 netmask 255.255.240.0 dev pt0a /sbin/route add -host 44.136.8.255 dev pt0a # # Configure the PackeTwin, port B. /sbin/ifconfig pt0b 44.136.8.87 hw ax25 vk2xlz-1 mtu 512 /sbin/ifconfig pt0b 44.136.8.87 broadcast 44.255.255.255 netmask 255.0.0.0 /sbin/route add -host 44.136.8.216 dev pt0b /sbin/route add -host 44.136.8.95 dev pt0b /sbin/route add -host 44.255.255.255 dev pt0b This version of the driver comes under the GNU GPL. If you have one of my previous (non-GPL) versions of the driver, please update to this one. I hope that this all works well for you. I would be pleased to hear how many people use the driver and if it does its job. - Craig vk2xlz sb1000 is a module network device driver for the General Instrument (also known as NextLevel) SURFboard1000 internal cable modem board. This is an ISA card which is used by a number of cable TV companies to provide cable modem access. It's a one-way downstream-only cable modem, meaning that your upstream net link is provided by your regular phone modem. This driver was written by Franco Venturi . He deserves a great deal of thanks for this wonderful piece of code! ----------------------------------------------------------------------------- Support for this device is now a part of the standard Linux kernel. The driver source code file is drivers/net/sb1000.c. In addition to this you will need: 1.) The "cmconfig" program. This is a utility which supplements "ifconfig" to configure the cable modem and network interface (usually called "cm0"); and 2.) Several PPP scripts which live in /etc/ppp to make connecting via your cable modem easy. These utilities can be obtained from: http://www.jacksonville.net/~fventuri/ in Franco's original source code distribution .tar.gz file. Support for the sb1000 driver can be found at: http://home.adelphia.net/~siglercm/sb1000.html http://linuxpower.cx/~cable/ along with these utilities. 3.) The standard isapnp tools. These are necessary to configure your SB1000 card at boot time (or afterwards by hand) since it's a PnP card. If you don't have these installed as a standard part of your Linux distribution, you can find them at: http://www.roestock.demon.co.uk/isapnptools/ or check your Linux distribution binary CD or their web site. For help with isapnp, pnpdump, or /etc/isapnp.conf, go to: http://www.roestock.demon.co.uk/isapnptools/isapnpfaq.html ----------------------------------------------------------------------------- To make the SB1000 card work, follow these steps: 1.) Run `make config', or `make menuconfig', or `make xconfig', whichever you prefer, in the top kernel tree directory to set up your kernel configuration. Make sure to say "Y" to "Prompt for development drivers" and to say "M" to the sb1000 driver. Also say "Y" or "M" to all the standard networking questions to get TCP/IP and PPP networking support. 2.) *BEFORE* you build the kernel, edit drivers/net/sb1000.c. Make sure to redefine the value of READ_DATA_PORT to match the I/O address used by isapnp to access your PnP cards. This is the value of READPORT in /etc/isapnp.conf or given by the output of pnpdump. 3.) Build and install the kernel and modules as usual. 4.) Boot your new kernel following the usual procedures. 5.) Set up to configure the new SB1000 PnP card by capturing the output of "pnpdump" to a file and editing this file to set the correct I/O ports, IRQ, and DMA settings for all your PnP cards. Make sure none of the settings conflict with one another. Then test this configuration by running the "isapnp" command with your new config file as the input. Check for errors and fix as necessary. (As an aside, I use I/O ports 0x110 and 0x310 and IRQ 11 for my SB1000 card and these work well for me. YMMV.) Then save the finished config file as /etc/isapnp.conf for proper configuration on subsequent reboots. 6.) Download the original file sb1000-1.1.2.tar.gz from Franco's site or one of the others referenced above. As root, unpack it into a temporary directory and do a `make cmconfig' and then `install -c cmconfig /usr/local/sbin'. Don't do `make install' because it expects to find all the utilities built and ready for installation, not just cmconfig. 7.) As root, copy all the files under the ppp/ subdirectory in Franco's tar file into /etc/ppp, being careful not to overwrite any files that are already in there. Then modify ppp@gi-on to set the correct login name, phone number, and frequency for the cable modem. Also edit pap-secrets to specify your login name and password and any site-specific information you need. 8.) Be sure to modify /etc/ppp/firewall to use ipchains instead of the older ipfwadm commands from the 2.0.x kernels. There's a neat utility to convert ipfwadm commands to ipchains commands: http://users.dhp.com/~whisper/ipfwadm2ipchains/ You may also wish to modify the firewall script to implement a different firewalling scheme. 9.) Start the PPP connection via the script /etc/ppp/ppp@gi-on. You must be root to do this. It's better to use a utility like sudo to execute frequently used commands like this with root permissions if possible. If you connect successfully the cable modem interface will come up and you'll see a driver message like this at the console: cm0: sb1000 at (0x110,0x310), csn 1, S/N 0x2a0d16d8, IRQ 11. sb1000.c:v1.1.2 6/01/98 (fventuri@mediaone.net) The "ifconfig" command should show two new interfaces, ppp0 and cm0. The command "cmconfig cm0" will give you information about the cable modem interface. 10.) Try pinging a site via `ping -c 5 www.yahoo.com', for example. You should see packets received. 11.) If you can't get site names (like www.yahoo.com) to resolve into IP addresses (like 204.71.200.67), be sure your /etc/resolv.conf file has no syntax errors and has the right nameserver IP addresses in it. If this doesn't help, try something like `ping -c 5 204.71.200.67' to see if the networking is running but the DNS resolution is where the problem lies. 12.) If you still have problems, go to the support web sites mentioned above and read the information and documentation there. ----------------------------------------------------------------------------- Common problems: 1.) Packets go out on the ppp0 interface but don't come back on the cm0 interface. It looks like I'm connected but I can't even ping any numerical IP addresses. (This happens predominantly on Debian systems due to a default boot-time configuration script.) Solution -- As root `echo 0 > /proc/sys/net/ipv4/conf/cm0/rp_filter' so it can share the same IP address as the ppp0 interface. Note that this command should probably be added to the /etc/ppp/cablemodem script *right*between* the "/sbin/ifconfig" and "/sbin/cmconfig" commands. You may need to do this to /proc/sys/net/ipv4/conf/ppp0/rp_filter as well. If you do this to /proc/sys/net/ipv4/conf/default/rp_filter on each reboot (in rc.local or some such) then any interfaces can share the same IP addresses. 2.) I get "unresolved symbol" error messages on executing `insmod sb1000.o'. Solution -- You probably have a non-matching kernel source tree and /usr/include/linux and /usr/include/asm header files. Make sure you install the correct versions of the header files in these two directories. Then rebuild and reinstall the kernel. 3.) When isapnp runs it reports an error, and my SB1000 card isn't working. Solution -- There's a problem with later versions of isapnp using the "(CHECK)" option in the lines that allocate the two I/O addresses for the SB1000 card. This first popped up on RH 6.0. Delete "(CHECK)" for the SB1000 I/O addresses. Make sure they don't conflict with any other pieces of hardware first! Then rerun isapnp and go from there. 4.) I can't execute the /etc/ppp/ppp@gi-on file. Solution -- As root do `chmod ug+x /etc/ppp/ppp@gi-on'. 5.) The firewall script isn't working (with 2.2.x and higher kernels). Solution -- Use the ipfwadm2ipchains script referenced above to convert the /etc/ppp/firewall script from the deprecated ipfwadm commands to ipchains. 6.) I'm getting *tons* of firewall deny messages in the /var/kern.log, /var/messages, and/or /var/syslog files, and they're filling up my /var partition!!! Solution -- First, tell your ISP that you're receiving DoS (Denial of Service) and/or portscanning (UDP connection attempts) attacks! Look over the deny messages to figure out what the attack is and where it's coming from. Next, edit /etc/ppp/cablemodem and make sure the ",nobroadcast" option is turned on to the "cmconfig" command (uncomment that line). If you're not receiving these denied packets on your broadcast interface (IP address xxx.yyy.zzz.255 typically), then someone is attacking your machine in particular. Be careful out there.... 7.) Everything seems to work fine but my computer locks up after a while (and typically during a lengthy download through the cable modem)! Solution -- You may need to add a short delay in the driver to 'slow down' the SURFboard because your PC might not be able to keep up with the transfer rate of the SB1000. To do this, it's probably best to download Franco's sb1000-1.1.2.tar.gz archive and build and install sb1000.o manually. You'll want to edit the 'Makefile' and look for the 'SB1000_DELAY' define. Uncomment those 'CFLAGS' lines (and comment out the default ones) and try setting the delay to something like 60 microseconds with: '-DSB1000_DELAY=60'. Then do `make' and as root `make install' and try it out. If it still doesn't work or you like playing with the driver, you may try other numbers. Remember though that the higher the delay, the slower the driver (which slows down the rest of the PC too when it is actively used). Thanks to Ed Daiga for this tip! ----------------------------------------------------------------------------- Credits: This README came from Franco Venturi's original README file which is still supplied with his driver .tar.gz archive. I and all other sb1000 users owe Franco a tremendous "Thank you!" Additional thanks goes to Carl Patten and Ralph Bonnell who are now managing the Linux SB1000 web site, and to the SB1000 users who reported and helped debug the common problems listed above. Clemmitt Sigler csigler@vt.edu Driver for Xpeed Inc. PCI network cards --------------------------------------- The following cards are supported with this driver: Xpeed X200 IDSL NIC (http://www.xpeed.com/Products/x200/x200_c.html) Xpeed X300 SDSL NIC (http://www.xpeed.com/Products/x300/x300_c.html) This driver handles frame relay encapsulation of WAN link and presents the card to the kernel as an ethernet-like device called dsl0, dsl1, etc. The driver supports up to 6 cards and supports operation in either RFC1490 frame relay or bridged ethernet modes. Note that when operating in RFC1490 frame relay mode, "ifconfig -arp" (no ARP) should be used. =============================== NOTE ==================================== You will NEED to use the xpds-config utility to configure the link speed, change LT/NT mode, change swap/invert parameters, and reflash the adapter firmware. This utility and other support files can be downloaded at ftp://ftp.xpeed.com/pub/linux/ =============================== NOTE ==================================== The driver accepts the following parameters when compiled as a module: xpds_default_dlci Defines the DLCI to be used for the local interface. Default is 16. xpds_default_dlci_cr A special mask value to be used when speaking with certain buggy vendor equipment. Can be 0 or 2. Default is 0. xpds_default_dlci_lmi Defines how the card will perform LMI protocol negotiation. Valid values are: 0 No LMI will be used. 1 LMI will operate in LT (Line Termination) mode. 2 LMI will operate in NT (Network Termination) mode. 3 LMI will operation in bidirectional NT mode. -1 Attempt to autoconfigure LMI mode. (Default) xpds_default_bridged Defines whether the card will operate in RFC1490 frame relay or bridged ethernet mode. Default is 0, RFC1490 frame relay mode. Typical usage for a connection in RFC1490 frame relay mode: # modprobe xpds-fr # ifconfig dsl0 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255 -arp Typical usage for a connection in bridged ethernet mode: # modprobe xpds-fr xpds_default_bridged=1 # ifconfig dsl0 10.0.0.2 netmask 255.255.255.0 broadcast 10.0.0.255 The directory ftp.inr.ac.ru:/ip-routing contains: - iproute.c - "professional" routing table maintenance utility. - rdisc.tar.gz - rdisc daemon, ported from Sun. STRONGLY RECOMMENDED FOR ALL HOSTS. - routing.tgz - original Mike McLagan's route by source patch. Currently it is obsolete. - gated.dif-ss.gz - gated-R3_6Alpha_2 fixes. Look at README.gated - mrouted-3.8.dif.gz - mrouted-3.8 fixes. - rtmon.c - trivial debugging utility: reads and stores netlink. NEWS for user. - Policy based routing. Routing decisions are made on the basis not only of destination address, but also source address, TOS and incoming interface. - Complete set of IP level control messages. Now Linux is the only OS in the world complying to RFC requirements. Great win 8) - New interface addressing paradigm. Assignment of address ranges to interface, multiple prefixes etc. etc. Do not bother, it is compatible with the old one. Moreover: - You don't need to do "route add aaa.bbb.ccc... eth0" anymore, it is done automatically. - "Abstract" UNIX sockets and security enhancements. This is necessary to use TIRPC and TLI emulation library. NEWS for hacker. - New destination cache. Flexible, robust and just beautiful. - Network stack is reordered, simplified, optimized, a lot of bugs fixed. (well, and new bugs were introduced, but I haven't seen them yet 8)) It is difficult to describe all the changes, look into source. If you see this file, then this patch works 8) Alexey Kuznetsov. kuznet@ms2.inr.ac.ru Traffic Shaper For Linux This is the current BETA release of the traffic shaper for Linux. It works within the following limits: o Minimum shaping speed is currently about 9600 baud (it can only shape down to 1 byte per clock tick) o Maximum is about 256K, it will go above this but get a bit blocky. o If you ifconfig the master device that a shaper is attached to down then your machine will follow. o The shaper must be a module. Setup: A shaper device is configured using the shapeconfig program. Typically you will do something like this shapecfg attach shaper0 eth1 shapecfg speed shaper0 64000 ifconfig shaper0 myhost netmask 255.255.255.240 broadcast 1.2.3.4.255 up route add -net some.network netmask a.b.c.d dev shaper0 The shaper should have the same IP address as the device it is attached to for normal use. Gotchas: The shaper shapes transmitted traffic. It's rather impossible to shape received traffic except at the end (or a router) transmitting it. Gated/routed/rwhod/mrouted all see the shaper as an additional device and will treat it as such unless patched. Note that for mrouted you can run mrouted tunnels via a traffic shaper to control bandwidth usage. The shaper is device/route based. This makes it very easy to use with any setup BUT less flexible. You may need to use iproute2 to set up multiple route tables to get the flexibility. There is no "borrowing" or "sharing" scheme. This is a simple traffic limiter. We implement Van Jacobson and Sally Floyd's CBQ architecture into Linux 2.2. This is the preferred solution. Shaper is for simple or back compatible setups. Alan SiS 900/7016 Fast Ethernet Device Driver by Ollie Lho (ollie@sis.com.tw) November 4, 1999. Document Revision: 0.2 This document gives some information on installation and usage of SiS 900/7016 device driver under Linux. ______________________________________________________________________ Table of Contents 1. Introduction 2. License 3. Changes 4. Tested Environment 5. Files in This Package 6. Installation 6.1 Kernel version later than 2.2.11 and 2.3.15 6.1.1 Building the driver as loadable module 6.1.2 Building the driver into kernel 6.2 Earlier Kernel Version in 2.2.x and 2.3.x Series 7. Known Problems and Bugs 8. Revision History 9. Acknowledgements ______________________________________________________________________ 1. Introduction This document describes the revision 1.06 of SiS 900/7016 Fast Ethernet device driver under Linux. The driver is developed by Silicon Integrated System Corp. and distributed freely under the GNU General Public License (GPL). The driver can be compiled as a loadable module and used under Linux kernel version 2.2.x. With minimal changes, the driver can also be used under 2.3.x kernel, please see section ``Installation''. If you are intended to use the driver for earlier kernels, you are on your own. The driver is tested with usual TCP/IP applications including FTP, Telnet, Netscape etc. and is used constantly by the developers. Please send all comments/fixes/questions to Ollie Lho. 2. License Copyright (C) 1999 Silicon Integrated System Corp. 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 3. Changes Changes made in Revision 1.06 1. Separation of sis900.c and sis900.h in order to move most constant definition to sis900.h (many of those constants were corrected) 2. Clean up PCI detection, the pci-scan from Donald Becker were not used, just simple pci_find_*. 3. MII detection is modified to support multiple mii transceiver. 4. Bugs in read_eeprom, mdio_* were removed. 5. Lot of sis900 irrelevant comments were removed/changed and more comments were added to reflect the real situation. 6. Clean up of physical/virtual address space mess in buffer descriptors. 7. Better transmit/receive error handling. 8. The driver now uses zero-copy single buffer management scheme to improve performance. 9. Names of variables were changed to be more consistent. 10. Clean up of auo-negotiation and timer code. 11. Automatic detection and change of PHY on the fly. 4. Tested Environment This driver is developed on the following hardware o Intel Celeron 336 with SiS 620 (rev 02) chipset o SiS 900 (rev 01) and SiS 7016/7014 Fast Ethernet Card and tested with these software environments o Red Hat Linux version 6.0 o Linux kernel version 2.2.13 o Netscape version 4.6 o NcFTP 3.0.0 beta 18 o Samba version 2.0.3 5. Files in This Package In the package you can find these files: sis900-2.2.x.c Driver source for kernel 2.2.x sis900-2.3.x.c Driver source for kernel 2.3.x sis900.h Header file for both 2.2.x and 2.3.x kernel sis900.sgml Linux-Doc SGML source of the document 6. Installation Silicon Integrated System Corp. is cooperating closely with core Linux Kernel developers. The revisions of SiS 900 driver are distributed by the usual channels for kernel tar files and patches. Those kernel tar files for official kernel and patches for kernel pre-release can be download at official kernel ftp site and its mirrors. The 1.06 revision can be found in kernel version later than 2.3.15 and pre-2.2.14. If you have no prior experience in networking under Linux, please read Ethernet HOWTO and Networking HOWTO available from Linux Documentation Project (LDP). The installation procedure are different according to your kernel versions. 6.1. Kernel version later than 2.2.11 and 2.3.15 The driver is bundled in release later than 2.2.11 and 2.3.15 so this is the most easy case. Be sure you have the appropriate packages for compiling kernel source. Those packages are listed in Document/Changes in kernel source distribution. There are two alternative ways to install the driver 6.1.1. Building the driver as loadable module To build the driver as a loadable kernel module you have to reconfigure the kernel to activate network support by make config Choose "Network Device Support" to "Y" and "Ethernet Support" to "Y". Then you have to choose "SiS 900 Fast Ethernet Adapter Support" to "M". After reconfiguring the kernel, you can make the driver module by make modules The driver should be compiled with no errors. After compiling the driver, the driver can be installed to proper place by make modules_install Load the driver into kernel by insmod sis900 When loading the driver into memory, some information message can be view by dmesg or cat /var/log/message If the driver is loaded properly you will have messages similar to this: sis900.c: v1.06 11/04/99 eth0: SiS 900 PCI Fast Ethernet at 0xd000, IRQ 10, 00:00:e8:83:7f:a4. eth0: SiS 900 Internal MII PHY transceiver found at address 1. eth0: Using SiS 900 Internal MII PHY as default showing the version of the driver and the results of probing routine. Once the driver is loaded, network can be brought up by /sbin/ifconfig eth0 IPADDR broadcast BROADCAST netmask NETMASK where IPADDR, BROADCAST, NETMASK are your IP address, broadcast address and netmask respectively. For more information on how to configure network interface, please refer to Networking HOWTO. The link status is also shown by kernel messages. For example, after the network interface is activated, you may have the message: eth0: Media Link On 100mbps full-duplex If you try to unplug the twist pair (TP) cable you will get eth0: Media Link Off indicating that the link is failed. 6.1.2. Building the driver into kernel If you want to make the driver into kernel, choose "Y" rather than "M" on "SiS 900 Fast Ethernet Adapter Support" when configuring the kernel. Build the kernel image in the usual way make dep make clean make bzlilo Next time the system reboot, you have the driver in memory. 6.2. Earlier Kernel Version in 2.2.x and 2.3.x Series Installing the driver for earlier kernels in 2.2.x and 2.3.x series requires a little bit more work. First you have to copy sis900-2.x.x.c to /usr/src/linux/drivers/net/ and you have to modify some files manually (sorry !! no patch available !!) in Space.c, add extern int sis900_probe(struct device *dev); ... #ifdef CONFIG_SIS900 {sis900_probe,0}, #endif in Config.in add if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then ... //other adapter drivers tristate 'SiS 900 PCI Fast Ethernet Adapter Support' CONFIG_SIS900 ... //other adapter drivers fi in Makefile add ifeq ($(CONFIG_SIS900),y) L_OBJS += sis900.o else ifeq ($(CONFIG_SIS900),m) M_OBJS += sis900.o endif endif After modifying these files, the driver can be build as described in the previous section. 7. Known Problems and Bugs There are some known problems and bugs. If you find any other bugs please mail to ollie@sis.com.tw 1. AM79C901 HomePNA PHY is not thoroughly tested, there may be some bugs in the "on the fly" change of transceiver. 2. A bug is hidden somewhere in the receive buffer management code, the bug causes NULL pointer reference in the kernel. This fault is caught before bad things happen and reported with the message: eth0: NULL pointer encountered in Rx ring, skipping which can be viewed with dmesg or cat /var/log/message. 8. Revision History o November 4, 1999, Revision 1.06, Second release, lots of clean up and optimization. o August 8, 1999, Revision 1.05, Initial Public Release 9. Acknowledgements This driver was originally derived form Donald Becker's pci-skeleton and rtl8139 drivers. Donald also provided various suggestion regarded with improvements made in revision 1.06. The 1.05 revision was created by Jim Huang, AMD 79c901 support was added by Chin-Shan Li. (C)Copyright 1999-2001 SysKonnect GmbH. All rights reserved =========================================================================== sk98lin.txt created 07-Jun-2001 Readme File for sk98lin v4.07 SK-NET Gigabit Ethernet PCI driver for LINUX This file contains (1) OVERVIEW (2) REQUIRED FILES (3) INSTALLATION (4) INCLUSION OF ADAPTER AT SYSTEM START (5) DRIVER PARAMETERS (6) LARGE FRAME SUPPORT (7) TROUBLESHOOTING (8) HISTORY =========================================================================== (1) OVERVIEW ============ The sk98lin driver supports the SysKonnect SK-NET Gigabit Ethernet Adapter SK-98xx family on Linux 2.2.x and above. It has been tested with Linux on Intel/x86 machines. From v3.02 on, the driver is integrated in the linux kernel source. *** (2) REQUIRED FILES ================== The linux kernel source. No additional files required. *** (3) INSTALLATION ================ The following steps describe the actions that are required to install the driver and to start it manually. These steps should be carried out for the initial driver setup. Once confirmed to be ok, they can be included in the system start which is described in the next chapter. NOTE 1: You must have 'root' access to the system to perform the following tasks. NOTE 2: IMPORTANT: In case of problems, please read the section "Troubleshooting" below. 1) The driver can either be integrated into the kernel or it can be compiled as a module. Select the appropriate option during the kernel configuration. For use as a module, your kernel must have 'loadable module support' enabled. For automatic driver start, you also need 'Kernel module loader' enabled. Configure those options, build and install the new kernel. If you choose to use the driver as a module, do "make modules" and "make modules_install". Reboot your system. 2) Load the module manually by entering: modprobe sk98lin If the SysKonnect SK-98xx adapter is installed in your computer and you have a /proc filesystem, running the command 'more /proc/net/dev' should produce an output containing a line with the following format: eth0: 0 0 ... which means that your adapter has been found and initialized. NOTE 1: If you have more than one SysKonnect SK-98xx adapter, the adapters will be listed as 'eth0', 'eth1', 'eth2', etc. For each adapter, repeat the steps 5) and 6). NOTE 2: If you have other Ethernet adapters installed, your SysKonnect SK-98xx adapter can be mapped to 'eth1' or 'eth2' ... The module installation message (in system logfile or on console, depending on /etc/syslog.conf) prints a line for each adapter that is found, containing the corresponding 'ethX'. 3) Select an IP address and assign it to the respective adapter by entering: ifconfig eth0 This causes the adapter to connect to the ethernet. The solitary yellow LED at the adapter is now active, the link status LED of the primary port is on and the link status LED of the secondary port (on dual port adapters) is blinking (only if the laters are connected to a switch or hub). You will also get a status message on the console saying "ethX: network connection up using port Y" and indicating the selected connection parameters. NOTE: If you are in doubt about IP addresses, ask your network administrator for assistance. 4) Your adapter should now be fully operational. Use 'ping ' to verify the connection to other computers on your network. By viewing /proc/net/sk98lin/[devicename], you can check some information regarding to the adapter configuration. 5) The driver module can be stopped and unloaded using the following commands: ifconfig eth0 down rmmod sk98lin *** (4) INCLUSION OF ADAPTER AT SYSTEM START ======================================== Since a large number of different Linux distributions are available, we are unable to describe a general installation procedure for the driver module. Because the driver is now integrated in the kernel, installation should be easy, using the standard mechanism of your distribution. Refer to the distribution's manual for installation of ethernet adapters. *** (5) DRIVER PARAMETERS ===================== Parameters can be set at the command line while loading the module with 'modprobe'. The configuration tools of some distributions can also give parameters to the driver module. If you use the kernel module loader, you can set driver parameters in the file /etc/modules.conf (or old name: /etc/conf.modules). Insert a line of the form: options sk98lin ... For "...", use the same syntax as described below for the command line paramaters of modprobe. You either have to reboot your computer or unload and reload the driver to activate the new parameters. The syntax of the driver parameters is: modprobe sk98lin parameter=value1[,value2[,value3...]] value1 is for the first adapter, value2 for the second one etc. All Parameters are case sensitive, so write them exactly as shown below. Sample: Suppose you have two adapters. You want to set AutoNegotiation on Port A of the first adapter to ON and on Port A of the second adapter to OFF. You also want to set DuplexCapabilities on Port A of the first adapter to FULL and on Port A of the second adapter to HALF. You must enter: modprobe sk98lin AutoNeg_A=On,Off DupCap_A=Full,Half NOTE: The number of adapters that can be configured this way is limited in the driver (file skge.c, constant SK_MAX_CARD_PARAM). The current limit is 16. If you happen to install more adapters, adjust this and recompile. 5.1 Per-Port Parameters ----------------------- Those setting are available for each port on the adapter. In the following description, '?' stands for the port for which you set the parameter (A or B). - Auto Negotiation Parameter: AutoNeg_? Values: On, Off, Sense Default: Sense The "Sense"-mode finds out automatically whether the link partner supports autonegotiation or not. - Duplex Capabilities Parameter: DupCap_? Values: Half, Full, Both Default: Both This parameters is relevant only if autonegotiation for this port is not "Sense". If autonegotiation is "On", all three values are possible. If it is "Off", only "Full" and "Half" are allowed. It is usefull if your link partner does not support all possible combinations. - Flow Control Parameter: FlowCtrl_? Values: Sym, SymOrRem, LocSend, None Default: SymOrRem This parameter can be used to set the flow control capabilities that the port reports during autonegotiation. The meaning of the different modes is: -- Sym = Symetric: both link partners are allowed to send PAUSE frames -- SymOrRem = SymetricOrRemote: both or only remote partner are allowed to send PAUSE frames -- LocSend = LocalSend: only local link partner is allowed to send PAUSE frames -- None: no link partner is allowed to send PAUSE frames NOTE: This parameter is ignored if autonegotiation is set to "Off". - Role in Master-Slave-Negotiation (1000Base-T only). Parameter: Role_? Values: Auto, Master, Slave Default: Auto This parameter is only valid for the SK-9821 and SK-9822 adapters. For two 1000Base-T ports to communicate, one must take the role as master (providing timing information), while the other must be slave. Normally, this is negotiated between the two ports during link establishment. If this should ever fail, you can force a port to a specific setting with this parameter. 5.2 Per-Adapter Parameters -------------------------- - Preferred Port Parameter: PrefPort Values: A, B Default: A This is used to force the preferred port to A or B (on two-port NICs). The preferred port is the one that is used if both are detected as fully functional. - RLMT (Redundant Link Management Technology) Mode Parameter: RlmtMode Values: CheckLinkState,CheckLocalPort, CheckSeg, DualNet Default: CheckLinkState RLMT (the driver part that decides which port to use) knows three ways of checking if a port is available for use: -- CheckLinkState = Check link state only: RLMT uses the link state reported by the adapter hardware for each individual port to determine whether a port can be used for all network traffic or not. -- CheckLocalPort - Check other port on adapter: RLMT sends test frames from each port to each other port and checks if they are received by the other port, respectively. Thus, the ports must be connected to the network such that LLC test frames can be exchanged between them (i.e. there must be no routers between the ports). -- CheckSeg - Check other port and segmentation: RLMT checks the other port and in addition requests information from the Gigabit Ethernet switch next to each port to see if the network is segmented between the ports. Thus, this mode is only to be used if you have Gigabit Ethernet switches installed in your network that have been configured to use the Spanning Tree protocol. -- DualNet - Both ports A and B are used as separate devices at the same time. So if you have a dual port adapter, port A will show up as eth0 and port B as eth1. Both ports can be used independend with distinct IP addresses. The preferred port setting is not used. Rlmt is turned off. NOTE: The modes CheckLocalPort and CheckSeg are meant to operate in configurations where a network path between the ports on one adapter exists. Especially, they are not designed to work where adapters are connected back-to-back. *** (6) LARGE FRAME SUPPORT ======================= Large frames (also called jumbo frames) are now supported by the driver. This can result in a greatly improved throughput if transfering large amounts of data. To enable large frames, set the MTU (maximum transfer unit) of the interface to the value you wish (up to 9000). The command for this is: ifconfig eth0 mtu 9000 This will only work if you have two adapters connected back-to-back or if you use a switch that supports large frames. When using a switch, it should be configured to allow large frames, without autonegotiating for them. The setting must be done on all adapters that can be reached by the large frames. If one adapter is not set to receive large frames, it will simply drop them. You can switch back to the standard ethernet frame size with: ifconfig eth0 mtu 1500 To make this setting persitent, add a script with the 'ifconfig' line to the system startup sequence (named something like "S99sk98lin" in /etc/rc.d/rc2.d). *** (7) TROUBLESHOOTING =================== If you run into problems during installation, check those items: Problem: The SK-98xx adapter can not be found by the driver. Reason: Look in /proc/pci for the following entry: 'Ethernet controller: SysKonnect SK-98xx ...' If this entry exists, then the SK-98xx adapter has been found by the system and should be able to be used. If this entry does not exist or if the file '/proc/pci' is not there, then you may have a hardware problem or PCI support may not be enabled in your kernel. The adapter can be checked using the diagnostic program which is available from the SysKonnect web site: www.syskonnect.de Some COMPAQ machines have a problem with PCI under Linux. This is described in the 'PCI howto' document (included in some distributions or available from the www, e.g. at 'www.linux.org'). This might be fixed in the 2.2.x kernel series (I've not tested it). Problem: Programs such as 'ifconfig' or 'route' can not be found or you get an error message 'Operation not permitted'. Reason: You are not logged in as user 'root'. Logout and login as root or change to root via 'su'. Problem: Using the command 'ping
', you get a message "ping: sendto: Network is unreachable". Reason: Your route is not set up correct. If you are using RedHat, you probably forgot to set up the route in 'network configuration'. Check the existing routes with the 'route' command and check if there is an entry for 'eth0' and if it is correct. Problem: The driver can be started, the adapter is connected to the network, but you can not receive or transmit any packet; e.g. 'ping' does not work. Reason: You have an incorrect route in your routing table. Check the routing table with the command 'route' and read the manual pages about route ('man route'). NOTE: Although the 2.2.x kernel versions generate the routing entry automatically, you may have problems of this kind here, too. We found a case where the driver started correct at system boot, but after removing and reloading the driver, the route of the adapter's network pointed to the 'dummy0' device and had to be corrected manually. Problem: You want to use your computer as a router between multiple IP subnetworks (using multiple adapters), but you can not reach computers in other subnetworks. Reason: Either the router's kernel is not configured for IP forwarding or there is a problem with the routing table and gateway configuration in at least one of the computers. Problem: At the start of the driver, you get an error message: "eth0: -- ERROR -- Class: internal Software error Nr: 0xcc Msg: SkGeInitPort() cannot init running ports" Reason: You are using a driver compiled for single processor machines on an multiprocessor machine with SMP (Symetric MultiProcessor) kernel. Configure your kernel appropriate and recompile the kernel or the modules. If your problem is not listed here, please contact SysKonnect's technical support for help (linux@syskonnect.de). When contacting our technical support, please ensure that the following information is available: - System Manufacturer and Model - Boards in your system - Distribution - Kernel version *** (8) HISTORY =========== VERSION 4.02 (In-Kernel version) New Features: - Add Kernel 2.4 changes Known limitations: - None VERSION 4.01 (In-Kernel version) Problems fixed: - Full statistics support for DualNet mode Known limitations: - None VERSION 4.00 (In-Kernel version) Problems fixed: - Memory leak found New Features: - Proc filesystem integration - DualNet functionality integrated - Rlmt networks added Known limitations: - statistics partially incorrect in DualNet mode VERSION 3.04 (In-Kernel version) Problems fixed: - Driver start failed on UltraSPARC - Rx checksum calculation for big endian machines did not work - Jumbo frames were counted as input-errors in netstat VERSION 3.03 (Standalone version) Problems fixed: - Compilation did not find script "printver.sh" if "." not in PATH Known limitations: - None VERSION 3.02 (In-Kernel version) Problems fixed: - None New Features: - Integration in Linux kernel source (2.2.14 and 2.3.29) Known limitations: - None VERSION 3.01 Problems fixed: - None New Features: - Full source release Known limitations: - None VERSION 3.00 Problems fixed: - None New Features: - Support for 1000Base-T adapters (SK-9821 and SK-9822) Known limitations: - None VERSION 1.07 Problems fixed: - RlmtMode parameter value strings were wrong (#10437) - Driver sent too many RLMT frames (#10439) - Driver did not recognize network segmentation (#10440) - RLMT switched too often on segmented network (#10441) Known limitations: - None VERSION 1.06 Problems fixed: - System panic'ed after some time when running with RlmtMode=CheckOtherLink or RlmtMode=CheckSeg (#10421) Panic message: "Kernel panic: skput: over ... dev: eth0" - Driver did not switch back to default port when connected back-to-back (#10422). Changes: - RlmtMode parameter names have changed New features: - There is now a version for ALPHA processors Known limitations: - None VERSION 1.05 Problems fixed: - Driver failed to load on kernels with version information for module symbols enabled Known limitations: - None VERSION 1.04 Problems fixed: - Large frame support does work now (no autonegotiation support for large frames, just manually selectable) New Features: - Receive checksumming in hardware - Performance optimizations Some numbers (on two PII-400 machines, back-to-back): netpipe: 300 MBit/sec, with large frames: 470 MBit/sec ttcp: 38 MByte/sec, with large frames: 60 MByte/sec ttcp (UDP send): 66 MByte/sec, with large frames: 106 MByte/sec Known limitations: - None VERSION 1.03 Problems fixed: - Unloading with "rmmod" caused segmentation fault (#10415) - The link LED flickered from time to time, if no link was established (#10402) - Installation problems with RedHat 6.0 (#10409) New Features: - Connection state ouput at "network connection up" Known limitations: - None VERSION 1.02 Problems fixed: - Failed with multiple adapters - Failed with Single Port adapters - Startup string was only displayed if adapter found - No link could be established on certain switches when the switches were rebooted. (#10377) Known limitations: - Segmentation fault at "rmmod" with kernel 2.2.3 on some machines VERSION 1.01 Problems fixed: - Sensor status was not set back to 'ok' after 'warning/error'. (#10386) Changes: - improved parallelism in driver VERSION 1.00 Known limitations: - not tested with all kernel versions (I don't have that much time :-) - only x86 version available (if you need others, ask for it) - source code not completely available ***End of Readme File*** (C)Copyright 1998-2000 SysKonnect, =========================================================================== skfp.txt created 17-Jul-2000 Readme File for skfp.o v2.07 This file contains (1) OVERVIEW (2) SUPPORTED ADAPTERS (3) GENERAL INFORMATION (4) INSTALLATION (5) INCLUSION OF THE ADAPTER IN SYSTEM START (6) TROUBLESHOOTING (7) FUNCTION OF THE ADAPTER LEDS (8) HISTORY =========================================================================== (1) OVERVIEW ============ This README explains how to use the driver 'skfp' for Linux with your network adapter. Chapter 2: Contains a list of all network adapters that are supported by this driver. Chapter 3: Gives some general information. Chapter 4: Describes common problems and solutions. Chapter 5: Shows the changed functionality of the adapter LEDs. Chapter 6: History of development. *** (2) SUPPORTED ADAPTERS ====================== The network driver 'skfp' supports the following network adapters: SysKonnect adapters: - SK-5521 (SK-NET FDDI-UP) - SK-5522 (SK-NET FDDI-UP DAS) - SK-5541 (SK-NET FDDI-FP) - SK-5543 (SK-NET FDDI-LP) - SK-5544 (SK-NET FDDI-LP DAS) - SK-5821 (SK-NET FDDI-UP64) - SK-5822 (SK-NET FDDI-UP64 DAS) - SK-5841 (SK-NET FDDI-FP64) - SK-5843 (SK-NET FDDI-LP64) - SK-5844 (SK-NET FDDI-LP64 DAS) Compaq adapters (not tested): - Netelligent 100 FDDI DAS Fibre SC - Netelligent 100 FDDI SAS Fibre SC - Netelligent 100 FDDI DAS UTP - Netelligent 100 FDDI SAS UTP - Netelligent 100 FDDI SAS Fibre MIC *** (3) GENERAL INFORMATION ======================= From v2.01 on, the driver is integrated in the linux kernel sources. Therefor, the installation is the same as for any other adapter supported by the kernel. Refer to the manual of your distribution about the installation of network adapters. Makes my life much easier :-) *** (4) TROUBLESHOOTING =================== If you run into problems during installation, check those items: Problem: The FDDI adapter can not be found by the driver. Reason: Look in /proc/pci for the following entry: 'FDDI network controller: SysKonnect SK-FDDI-PCI ...' If this entry exists, then the FDDI adapter has been found by the system and should be able to be used. If this entry does not exist or if the file '/proc/pci' is not there, then you may have a hardware problem or PCI support may not be enabled in your kernel. The adapter can be checked using the diagnostic program which is available from the SysKonnect web site: www.syskonnect.de Some COMPAQ machines have a problem with PCI under Linux. This is described in the 'PCI howto' document (included in some distributions or available from the www, e.g. at 'www.linux.org') and no workaround is available. Problem: You want to use your computer as a router between multiple IP subnetworks (using multiple adapters), but you can not reach computers in other subnetworks. Reason: Either the router's kernel is not configured for IP forwarding or there is a problem with the routing table and gateway configuration in at least one of the computers. If your problem is not listed here, please contact our technical support for help. You can send email to: linux@syskonnect.de When contacting our technical support, please ensure that the following information is available: - System Manufacturer and Model - Boards in your system - Distribution - Kernel version *** (5) FUNCTION OF THE ADAPTER LEDS ================================ The functionality of the LED's on the FDDI network adapters was changed in SMT version v2.82. With this new SMT version, the yellow LED works as a ring operational indicator. An active yellow LED indicates that the ring is down. The green LED on the adapter now works as a link indicator where an active GREEN LED indicates that the respective port has a physical connection. With versions of SMT prior to v2.82 a ring up was indicated if the yellow LED was off while the green LED(s) showed the connection status of the adapter. During a ring down the green LED was off and the yellow LED was on. All implementations indicate that a driver is not loaded if all LEDs are off. *** (6) HISTORY =========== v2.07 (20000717) (In-Kernel version) New features: - in kernel 2.2.17 (hopefully !) v2.06 (20000511) (In-Kernel version) New features: - 64 bit support - new pci dma interface - in kernel 2.3.99 v2.05 (20000217) (In-Kernel version) New features: - Changes for 2.3.45 kernel v2.04 (20000207) (Standalone version) New features: - Added rx/tx byte counter v2.03 (20000111) (Standalone version) Problems fixed: - Fixed printk statements from v2.02 v2.02 (991215) (Standalone version) Problems fixed: - Removed unnecessary output - Fixed path for "printver.sh" in makefile v2.01 (991122) New features: - Integration in Linux kernel sources - Support for memory mapped I/O v2.00 (991112) New features: - Full source released under GPL v1.05 (991023) Problems fixed: - Compilation with kernel version 2.2.13 failed v1.04 (990427) Changes: - New SMT module included, changing LED functionality Problems fixed: - Synchronization on SMP machines was buggy v1.03 (990325) Problems fixed: - Interrupt routing on SMP machines could be incorrect v1.02 (990310) New features: - Support for kernel versions 2.2.x added - Kernel patch instead of private duplicate of kernel functions v1.01 (980812) Problems fixed: Connection hangup with telnet Slow telnet connection v1.00 beta 01 (980507) New features: None. Problems fixed: None. Known limitations: - tar archive instead of standard package format (rpm). - FDDI statistic is empty. - not tested with 2.1.xx kernels - integration in kernel not tested - not tested simultaneously with FDDI adapters from other vendors. - only X86 processors supported. - SBA (Synchronous Bandwidth Allocator) parameters can not be configured. - does not work on some COMPAQ machines. See the PCI howto document for details about this problem. - data corruption with kernel versions below 2.0.33. *** End of information file *** Text file for the Linux SysKonnect Token Ring ISA/PCI Adapter Driver. Text file by: Jay Schulist The Linux SysKonnect Token Ring driver works with the SysKonnect TR4/16(+) ISA, SysKonnect TR4/16(+) PCI, SysKonnect TR4/16 PCI, and older revisions of the SK NET TR4/16 ISA card. Latest information on this driver can be obtained on the Linux-SNA WWW site. Please point your browser to: http://samba.anu.edu.au/linux-sna/documents/drivers/SysKonnect/ Many thanks to Christoph Goos for his excellent work on this driver and SysKonnect for donating the adapters to Linux-SNA for the testing and maintaince of this device driver. Important information to be noted: 1. Adapters can be slow to open (~20 secs) and close (~5 secs), please be patient. 2. This driver works very well when autoprobing for adapters. Why even think about those nasty io/int/dma settings of modprobe when the driver will do it all for you! This driver is rather simple to use. Select Y to Token Ring adapter support in the kernel configuration. A choice for SysKonnect Token Ring adapters will appear. This drives supports all SysKonnect ISA and PCI adapters. Choose this option. I personally recommend compiling the driver as a module (M), but if you you would like to compile it staticly answer Y instead. This driver supports multiple adapters without the need to load multiple copies of the driver. You should be able to load up to 7 adapters without any kernel modifications, if you are in need of more please contact the maintainer of this driver. Load the driver either by lilo/loadlin or as a module. When a module using the following command will suffice for most: # modprobe sktr This will produce output similar to the following: (Output is user specific) sktr.c: v1.01 08/29/97 by Christoph Goos tr0: SK NET TR 4/16 PCI found at 0x6100, using IRQ 17. tr1: SK NET TR 4/16 PCI found at 0x6200, using IRQ 16. tr2: SK NET TR 4/16 ISA found at 0xa20, using IRQ 10 and DMA 5. Now just setup the device via ifconfig and set and routes you may have. After this you are ready to start sending some tokens. Parameters: The driver supports the usual parameters irq and dma (for ISA-adapters only). Additional, there is a parameter for setting the connection speed (4 MBits/sec or 16 MBit/sec). Default is 16, use "rate=4" to force 4 MBit. Errata: For anyone wondering where to pick up the SysKonnect adapters please browse to http://www.syskonnect.com This driver is under the GNU General Public License. Its Firmware image is included as an initialized C-array and is licensed by SysKonnect to the Linux users of this driver. However no waranty about its fitness is expressed or implied by SysKonnect. Below find attached the setting for the SK NET TR 4/16 ISA adapters ------------------------------------------------------------------- *************************** *** C O N T E N T S *** *************************** 1) Location of DIP-Switch W1 2) Default settings 3) DIP-Switch W1 description ============================================================== CHAPTER 1 LOCATION OF DIP-SWITCH ============================================================== UĿ UĿ UĿ UĿ AU W1 AU UĿ UĿ Uſ AU UĿ AU UĿ UĿ AU AU AU TMS380C26 UĿ AU AĿ AU AU AU AAAAAU AU AU ============================================================== CHAPTER 2 DEFAULT SETTINGS ============================================================== W1 1 2 3 4 5 6 7 8 +------------------------------+ | ON X | | OFF X X X X X X X | +------------------------------+ W1.1 = ON Adapter drives address lines SA17..19 W1.2 - 1.5 = OFF BootROM disabled W1.6 - 1.8 = OFF I/O address 0A20h ============================================================== CHAPTER 3 DIP SWITCH W1 DESCRIPTION ============================================================== UAAAAAAAĿ ON 1 2 3 4 5 6 7 8 AAAAAAAAU OFF |AD | BootROM Addr. | I/O | +-+-+-------+-------+-----+-----+ | | | | | +------ 6 7 8 | | ON ON ON 1900h | | ON ON OFF 0900h | | ON OFF ON 1980h | | ON OFF OFF 0980h | | OFF ON ON 1b20h | | OFF ON OFF 0b20h | | OFF OFF ON 1a20h | | OFF OFF OFF 0a20h (+) | | | | | +-------- 2 3 4 5 | OFF x x x disabled (+) | ON ON ON ON C0000 | ON ON ON OFF C4000 | ON ON OFF ON C8000 | ON ON OFF OFF CC000 | ON OFF ON ON D0000 | ON OFF ON OFF D4000 | ON OFF OFF ON D8000 | ON OFF OFF OFF DC000 | | +----- 1 OFF adapter does NOT drive SA<17..19> ON adapter drives SA<17..19> (+) (+) means default setting ******************************** SMC 9xxxx Driver Revision 0.12 3/5/96 Copyright 1996 Erik Stahlman Released under terms of the GNU public license. This file contains the instructions and caveats for my SMC9xxx driver. You should not be using the driver without reading this file. Things to note about installation: 1. The driver should work on all kernels from 1.2.13 until 1.3.71. (A kernel patch is supplied for 1.3.71 ) 2. If you include this into the kernel, you might need to change some options, such as for forcing IRQ. 3. To compile as a module, run 'make' . Make will give you the appropriate options for various kernel support. 4. Loading the driver as a module : use: insmod smc9194.o optional parameters: io=xxxx : your base address irq=xx : your irq ifport=x : 0 for whatever is default 1 for twisted pair 2 for AUI ( or BNC on some cards ) How to obtain the latest version? FTP: ftp://fenris.campus.vt.edu/smc9/smc9-12.tar.gz ftp://sfbox.vt.edu/filebox/F/fenris/smc9/smc9-12.tar.gz Contacting me: erik@mail.vt.edu LINUX DRIVER FOR SOUNDCARDS AS AX.25 MODEMS Thomas M. Sailer, HB9JNX/AE4WA, This driver allows either SoundBlaster (sbc) or Windows Sound System (wss) compatible soundcards to be used as either 1200 baud AFSK or 9600 baud FSK AX.25 packet radio modems. Only half duplex operation is supported; an attempt to include full duplex support failed because the hardware did not support it (it appeared that the card only provides one DMA channel, although the codec chip would support two channels). The driver needs some processing power! A 66 MHz 486 DX2 is a minimum requirement. Otherwise interactive performance of the computer may become sluggish. This driver does *not* support telephone modem standards, it is intended for radio use only. The Interface of the driver The driver provides kernel network drivers named sm[0-3]. sethdlc from the ax25 utilities may be used to set driver states etc. Users of userland AX.25 stacks may use the net2kiss utility (also available in the ax25 utilities package) to convert packets of a network interface to a KISS stream on a pseudo tty. There's also a patch available from me for WAMPES which allows attaching a kernel network interface directly. Configuring the driver Some sound cards need to be initialized before they operate in either SoundBlaster or WSS compatibility mode. The driver does _NOT_ do this; you may use the standard linux sound driver to initialize the soundcard; compile it as a module, and do insmod sound rmmod sound The soundcard should then be initialized correctly. If this does not help, you'll have to write your own initialization utility. Every time the driver is inserted into the kernel, it has to know which modems it should access at which ports. This can be done with the setbaycom utility. If you are only using one modem, you can also configure the driver from the insmod command line (or by means of an option line in /etc/conf.modules). Examples: insmod soundmodem mode="sbc:afsk1200" iobase=0x220 irq=5 dma=1 sethdlc -i sm0 -p mode "sbc:afsk1200" io 0x220 irq 5 dma 1 Both lines configure the first port to drive a soundblaster card in 1200 baud AFSK mode. The channel access parameters can be set with sethdlc -a or kissparms. Note that both utilities interpret the values slightly different. Input and output levels It is important that the input and output levels are adjusted properly. There are two utilities, available in the ax25 utilities distribution, to facilitate this: smmixer and smdiag. smdiag allows you to display the input signal in an oscilloscope like display or an eye diagram. smmixer allows you to adjust input/output levels. See the respective man pages. Transmitter keying Since soundcards do not have a DC coupled output; PTT keying options include the following: * VOX circuitry * Serial port pin * Parallel port pin * MPU401 MIDI output via a retriggerable monoflop. Circuit schematics may be found at http://www.ife.ee.ethz.ch/~sailer/pcf/ptt_circ/ptt.html. Compatibility with the rest of the Linux kernel The sound driver and the soundcard modem driver compete for the same hardware resources. Of course only one driver can access a given interface at a time. Worse yet, the sound driver grabs the soundcard at startup time. Therefore the soundcard modem driver subsequently won't be able to access the soundcard. You might therefore find it necessary to unload the sound driver before using the soundcard modem driver. vy 73s de Tom Sailer, sailer@ife.ee.ethz.ch hb9jnx @ hb9w.ampr.org How the new TCP output machine [nyi] works. Data is kept on a single queue. The skb->users flag tells us if the frame is one that has been queued already. To add a frame we throw it on the end. Ack walks down the list from the start. We keep a set of control flags sk->tcp_pend_event TCP_PEND_ACK Ack needed TCP_ACK_NOW Needed now TCP_WINDOW Window update check TCP_WINZERO Zero probing sk->transmit_queue The transmission frame begin sk->transmit_new First new frame pointer sk->transmit_end Where to add frames sk->tcp_last_tx_ack Last ack seen sk->tcp_dup_ack Dup ack count for fast retransmit Frames are queued for output by tcp_write. We do our best to send the frames off immediately if possible, but otherwise queue and compute the body checksum in the copy. When a write is done we try to clear any pending events and piggy back them. If the window is full we queue full sized frames. On the first timeout in zero window we split this. On a timer we walk the retransmit list to send any retransmits, update the backoff timers etc. A change of route table stamp causes a change of header and recompute. We add any new tcp level headers and refinish the checksum before sending. TLAN driver for Linux, version 1.3b README I. Supported Devices. Only PCI devices will work with this driver. Supported: Vendor ID Device ID Name 0e11 ae32 Compaq Netelligent 10/100 TX PCI UTP 0e11 ae34 Compaq Netelligent 10 T PCI UTP 0e11 ae35 Compaq Integrated NetFlex 3/P 0e11 ae40 Compaq Netelligent Dual 10/100 TX PCI UTP 0e11 ae43 Compaq Netelligent Integrated 10/100 TX UTP 0e11 b011 Compaq Netelligent 10/100 TX Embedded UTP 0e11 b012 Compaq Netelligent 10 T/2 PCI UTP/Coax 0e11 b030 Compaq Netelligent 10/100 TX UTP 0e11 f130 Compaq NetFlex 3/P 0e11 f150 Compaq NetFlex 3/P 108d 0012 Olicom OC-2325 108d 0013 Olicom OC-2183 108d 0014 Olicom OC-2326 Caveats: I am not sure if 100BaseTX daughterboards (for those cards which support such things) will work. I haven't had any solid evidence either way. However, if a card supports 100BaseTx without requiring an add on daughterboard, it should work with 100BaseTx. The "Netelligent 10 T/2 PCI UTP/Coax" (b012) device is untested, but I do not expect any problems. II. Driver Options 1. You can append debug=x to the end of the insmod line to get debug messages, where x is a bit field where the bits mean the following: 0x01 Turn on general debugging messages. 0x02 Turn on receive debugging messages. 0x04 Turn on transmit debugging messages. 0x08 Turn on list debugging messages. 2. You can append aui=1 to the end of the insmod line to cause the adapter to use the AUI interface instead of the 10 Base T interface. This is also what to do if you want to use the BNC connector on a TLAN based device. (Setting this option on a device that does not have an AUI/BNC connector will probably cause it to not function correctly.) 3. You can set duplex=1 to force half duplex, and duplex=2 to force full duplex. 4. You can set speed=10 to force 10Mbs operation, and speed=100 to force 100Mbs operation. (I'm not sure what will happen if a card which only supports 10Mbs is forced into 100Mbs mode.) 5. If the driver is built into the kernel, you can use the 3rd and 4th parameters to set aui and debug respectively. For example: ether=0,0,0x1,0x7,eth0 This sets aui to 0x1 and debug to 0x7, assuming eth0 is a supported TLAN device. The bits in the third byte are assigned as follows: 0x01 = aui 0x02 = use SA_INTERRUPT flag when reserving the irq. 0x04 = use half duplex 0x08 = use full duplex 0x10 = use 10BaseT 0x20 = use 100BaseTx 6. This driver can be used as a loadable module. Se net-modules.txt for details. III. Things to try if you have problems. 1. Make sure your card's PCI id is among those listed in section I, above. 2. Make sure routing is correct. There is also a tlan mailing list which you can join by sending "subscribe tlan" in the body of an email to majordomo@vuser.vu.union.edu. Tulip Ethernet Card Driver The Tulip driver is developed by Donald Becker and changed by Takashi Manabe. This driver is designed to work with PCI Ethernet cards which use the DECchip DC21x4x family. This driver hopefully works with all of 1.2.x and 1.3.x kernels, but I tested only with 1.2.13, 1.3.39, 1.3.49, 1.3.52, 1.3.57 and later. Hopefully, the de4x5.c driver will support all cards supported by the tulip.c driver. However, the SMC's 9332dst card and some cards do not work with the de4x5.c driver. So, if your card is not a 9332dst, please try the de4x5.c driver first. Success List ============ +-------------------------------------+-----------+-------------+ |vendor/card |chip |system | +-------------------------------------+-----------+-------------+ |SMC | | | | EtherPower 10 PCI(8432T/8432BT) |21040/21041|Pentium | +-------------------------------------+-----------+-------------+ |SMC | | | | EtherPower 10/100 PCI(9332DST) |21140 |Pentium/UDB | +-------------------------------------+-----------+-------------+ |DEC | | | | EtherWorks 100/10 PCI(DE500-XA) |21140 |Pentium | +-------------------------------------+-----------+-------------+ |DEC | | | | EtherWorks 10 PCI(DE450) |21041 |Pentium | +-------------------------------------+-----------+-------------+ |DEC | | | | QSILVER's |21040 |UDB | +-------------------------------------+-----------+-------------+ |ZNYX | | | | 312 etherarray |21040 |Pentium | +-------------------------------------+-----------+-------------+ |Allied Telesis | | | | LA100PCI-T |21140 |Pentium/UDB | +-------------------------------------+-----------+-------------+ |Danpex ('Planet Japan' in Japan?) | | | | EN-9400 |21040 |Pentium | +-------------------------------------+-----------+-------------+ |Cogent | | | | EM110 |21140 |Pentium | +-------------------------------------+-----------+-------------+ Pentium: PCI machine with Pentium CPU UDB: Universal Desktop Box(aka Multia) with Alpha 21066 CPU Known bug(s) ============ This driver's media detection is very simple and sometimes it causes serious problem. The driver automatically switches media when it causes timeout. If you want to specify or to fix a media; - Modify TULIP_PORT in tulip.c, line 33. - Uncomment the definition of TULIP_FIX_PORT in tulip.c, line 40. or - Use patched ifconfig command and specify 'link='. The patch against ifconfig.c in net-tools-1.3.50-BETA6e is included in this file. Thanks ====== o becker@CESDIS.gsfc.nasa.gov (author of the tulip.c driver) o davies@wanton.lkg.dec.com (author of the de4x5.c driver) o siekas@mailhost.tcs.tulane.edu o jheiss@calvin.caltech.edu (providing information about smc8432 card) o goto@plathome.co.jp (lending me a DE450 card) o ted@physics.ucsb.edu o pmheuvel@xs4all.nl o hjl@lucon.org (EN-9400) o niles@axp745.gsfc.nasa.gov (ZNYX312) o pkc@scs.carleton.ca (EM110) o and testers... ----------------------------------------------------------------------- *** ifconfig.c-dist Wed Jan 17 07:25:36 1996 --- ifconfig.c Tue Apr 9 15:24:25 1996 *************** *** 765,770 **** --- 766,786 ---- continue; } ifr.ifr_map.irq = atoi(*spp); + if (ioctl(skfd, SIOCSIFMAP, &ifr) < 0) { + fprintf(stderr, "SIOCSIFMAP: %s\n", strerror(errno)); + goterr = 1; + } + spp++; + continue; + } + + if (!strcmp(*spp, "link")) { + if (*++spp == NULL) usage(); + if (ioctl(skfd, SIOCGIFMAP, &ifr) < 0) { + goterr = 1; + continue; + } + ifr.ifr_map.port = atoi(*spp); if (ioctl(skfd, SIOCSIFMAP, &ifr) < 0) { fprintf(stderr, "SIOCSIFMAP: %s\n", strerror(errno)); goterr = 1; Documentation/networking/vortex.txt Andrew Morton 18 Feb 2001 This document describes the usage and errata of the 3Com "Vortex" device driver for Linux, 3c59x.c. The driver was written by Donald Becker Don is no longer the prime maintainer of this version of the driver. Please report problems to one or more of: Andrew Morton Netdev mailing list Linux kernel mailing list Please note the 'Reporting and Diagnosing Problems' section at the end of this file. This driver supports the following hardware: 3c590 Vortex 10Mbps 3c592 EISA 10mbps Demon/Vortex 3c597 EISA Fast Demon/Vortex 3c595 Vortex 100baseTx 3c595 Vortex 100baseT4 3c595 Vortex 100base-MII 3Com Vortex 3c900 Boomerang 10baseT 3c900 Boomerang 10Mbps Combo 3c900 Cyclone 10Mbps Combo 3c900B-FL Cyclone 10base-FL 3c900 Cyclone 10Mbps TPO 3c900 Cyclone 10Mbps TPC 3c905 Boomerang 100baseTx 3c905 Boomerang 100baseT4 3c905B Cyclone 100baseTx 3c905B Cyclone 10/100/BNC 3c905B-FX Cyclone 100baseFx 3c905C Tornado 3c980 Cyclone 3cSOHO100-TX Hurricane 3c555 Laptop Hurricane 3c556 10/100 Mini PCI Adapter 3c556B Laptop Hurricane 3c575 Boomerang CardBus 3CCFE575 Cyclone CardBus 3CCFE656 Cyclone CardBus 3CCFEM656 Cyclone CardBus 3c575 series CardBus (unknown version) 3c450 HomePNA Tornado 3Com Boomerang (unknown version) Module parameters ================= There are several parameters which may be provided to the driver when its module is loaded. These are usually placed in /etc/modules.conf (used to be conf.modules). Example: options 3c59x debug=3 rx_copybreak=300 The supported parameters are: debug=N Where N is a number from 0 to 7. Anything above 3 produces a lot of output in your system logs. debug=1 is default. options=N1,N2,N3,... Each number in the list provides an option to the corresponding network card. So if you have two 3c905's and you wish to provide them with option 0x204 you would use: options=0x204,0x204 The individual options are composed of a number of bitfields which have the following meanings: ssible media type settings 0 10baseT 1 10Mbs AUI 2 undefined 3 10base2 (BNC) 4 100base-TX 5 100base-FX 6 MII (Media Independent Interface) 7 Use default setting from EEPROM 8 Autonegotiate 9 External MII 10 Use default setting from EEPROM When generating a value for the 'options' setting, the above media selection values may be OR'ed (or added to) the following: 512 (0x200) Force full duplex mode. 16 (0x10) Bus-master enable bit (Old Vortex cards only) For example: insmod 3c59x options=0x204 will force full-duplex 100base-TX, rather than allowing the usual autonegotiation. full_duplex=N1,N2,N3... Similar to bit 9 of 'options'. Forces the corresponding card into full-duplex mode. Please use this in preference to the `options' parameter. In fact, please don't use this at all! You're better off getting autonegotiation working properly. rx_copybreak=M The driver preallocates 32 full-sized (1536 byte) network buffers for receiving. When a packet arrives, the driver has to decide whether to leave the packet in its full-sized buffer, or to allocate a smaller buffer and copy the packet across into it. This is a speed/space tradeoff. The value of rx_copybreak is used to decide when to make the copy. If the packet size is less than rx_copybreak, the packet is copied. The default value for rx_copybreak is 200 bytes. max_interrupt_work=N The driver's interrupt service routine can handle many receive and transmit packets in a single invocation. It does this in a loop. The value of max_interrupt_work governs how mnay times the interrupt service routine will loop. The default value is 32 loops. If this is exceeded the interrupt service routine gives up and generates a warning message "eth0: Too much work in interrupt". compaq_ioaddr=N compaq_irq=N compaq_device_id=N "Variables to work-around the Compaq PCI BIOS32 problem".... enable_wol=N1,N2,N3,... Enable Wake-on-LAN support for the relevant interface. Donald Becker's `ether-wake' application may be used to wake suspended machines. Media selection --------------- A number of the older NICs such as the 3c590 and 3c900 series have 10base2 and AUI interfaces. Prior to January, 2001 this driver would autoeselect the 10base2 or AUI port if it didn't detect activity on the 10baseT port. It would then get stuck on the 10base2 port and a driver reload was necessary to switch back to 10baseT. This behaviour could not be prevented with a module option override. Later (current) versions of the driver _do_ support locking of the media type. So if you load the driver module with modprobe 3c59x options=0 it will permanently select the 10baseT port. Automatic selection of other media types does not occur. Additional resources -------------------- Details of the device driver implementation are at the top of the source file. Additional documentation is available at Don Becker's Linux Drivers site: http://www.scyld.com/network/vortex.html Donald Becker's driver development site: http://www.scyld.com/network Donald's vortex-diag program is useful for inspecting the NIC's state: http://www.scyld.com/diag/#pci-diags Donald's mii-diag program may be used for inspecting and manipulating the NIC's Media Independent Interface subsystem: http://www.scyld.com/diag/#mii-diag Donald's wake-on-LAN page: http://www.scyld.com/expert/wake-on-lan.html 3Com's documentation for many NICs, including the ones supported by this driver is available at http://support.3com.com/partners/developer/developer_form.html 3Com's DOS-based application for setting up the NICs EEPROMs: ftp://ftp.3com.com/pub/nic/3c90x/3c90xx2.exe Driver updates and a detailed changelog for the modifications which were made for the 2.3/2,4 series kernel is available at http://www.uow.edu.au/~andrewm/linux/#3c59x-2.3 Autonegotiation notes --------------------- The driver uses a one-minute heartbeat for adapting to changes in the external LAN environment. This means that when, for example, a machine is unplugged from a hubbed 10baseT LAN plugged into a switched 100baseT LAN, the throughput will be quite dreadful for up to sixty seconds. Be patient. Cisco interoperability note from Walter Wong : On a side note, adding HAS_NWAY seems to share a problem with the Cisco 6509 switch. Specifically, you need to change the spanning tree parameter for the port the machine is plugged into to 'portfast' mode. Otherwise, the negotiation fails. This has been an issue we've noticed for a while but haven't had the time to track down. Cisco switches (Jeff Busch ) My "standard config" for ports to which PC's/servers connect directly: interface FastEthernet0/N description machinename load-interval 30 spanning-tree portfast If autonegotiation is a problem, you may need to specify "speed 100" and "duplex full" as well (or "speed 10" and "duplex half"). WARNING: DO NOT hook up hubs/switches/bridges to these specially-configured ports! The switch will become very confused. Reporting and diagnosing problems --------------------------------- Maintainers find that accurate and complete problem reports are invaluable in resolving driver problems. We are frequently not able to reproduce problems and must rely on your patience and efforts to get to the bottom of the problem. If you believe you have a driver problem here are some of the steps you should take: - Is it really a driver problem? Eliminate some variables: try different cards, different computers, different cables, different ports on the switch/hub, different versions of the kernel or ofthe driver, etc. - OK, it's a driver problem. You need to generate a report. Typically this is an email to the maintainer and/or linux-net@vger.kernel.org. The maintainer's email address will be inthe driver source or in the MAINTAINERS file. - The contents of your report will vary a lot depending upon the problem. If it's a kernel crash then you should refer to the REPORTING-BUGS file. But for most problems it is useful to provide the following: o Kernel version, driver version o A copy of the banner message which the driver generates when it is initialised. For example: eth0: 3Com PCI 3c905C Tornado at 0xa400, 00:50:da:6a:88:f0, IRQ 19 8K byte-wide RAM 5:3 Rx:Tx split, autoselect/Autonegotiate interface. MII transceiver found at address 24, status 782d. Enabling bus-master transmits and whole-frame receives. o If it is a PCI device, the relevant output from 'lspci -vx', eg: 00:09.0 Ethernet controller: 3Com Corporation 3c905C-TX [Fast Etherlink] (rev 74) Subsystem: 3Com Corporation: Unknown device 9200 Flags: bus master, medium devsel, latency 32, IRQ 19 I/O ports at a400 [size=128] Memory at db000000 (32-bit, non-prefetchable) [size=128] Expansion ROM at [disabled] [size=128K] Capabilities: [dc] Power Management version 2 00: b7 10 00 92 07 00 10 02 74 00 00 02 08 20 00 00 10: 01 a4 00 00 00 00 00 db 00 00 00 00 00 00 00 00 20: 00 00 00 00 00 00 00 00 00 00 00 00 b7 10 00 10 30: 00 00 00 00 dc 00 00 00 00 00 00 00 05 01 0a 0a o A description of the environment: 10baseT? 100baseT? full/half duplex? switched or hubbed? o Any additional module parameters which you may be providing to the driver. o Any kernel logs which are produced. The more the merrier. If this is a large file and you are sending your report to a mailing list, mention that you have the logfile, but don't send it. If you're reporting direct to the maintainer then just send it. To ensure that all kernel logs are available, add the following line to /etc/syslog.conf: kern.* /var/log/messages Then restart syslogd with: /etc/rc.d/init.d/syslog restart (The above may vary, depending upon which Linux distribution you use). o If your problem is reproducible then that's great. Try the following: 1) Increase the debug level. Usually this is done via: a) modprobe driver.o debug=7 b) In /etc/conf.modules (or modules.conf): options driver_name debug=7 2) Recreate the problem with the higher debug level, send all logs to the maintainer. 3) Download you card's diagnostic tool from Donald Backer's website http://www.scyld.com/diag. Download mii-diag.c as well. Build these. a) Run 'vortex-diag -aaee' and 'mii-diag -v' when the card is working correctly. Save the output. b) Run the above commands when the card is malfunctioning. Send both sets of output. Finally, please be patient and be prepared to do some work. You may end up working on this problem for a week or more as the maintainer asks more questions, asks for more tests, asks for patches to be applied, etc. At the end of it all, the problem may even remain unresolved. ------------------------------------------------------------------------------ WAN Router for Linux Operating System ------------------------------------------------------------------------------ Version 2.1.1 - Nov 08, 1999 Version 2.0.8 - Nov 02, 1999 Version 2.0.7 - Aug 26, 1999 Version 2.0.6 - Aug 17, 1999 Version 2.0.5 - Aug 12, 1999 Version 2.0.4 - Nov 26, 1998 Version 2.0.3 - Aug 25, 1998 Version 2.0.2 - Dec 09, 1997 Version 2.0.1 - Nov 28, 1997 Version 2.0.0 - Nov 06, 1997 Version 1.0.3 - June 3, 1997 Version 1.0.1 - January 30, 1997 Author: Nenad Corbic Copyright (c) 1995-1999 Sangoma Technologies Inc. ------------------------------------------------------------------------------ WARNING: This Version of WANPIPE supports only the S508 and S508/FT1 cards. IF YOU OWN A S502E OR A S508 CARD THEN PLEASE CONTACT SANGOMA TECHNOLOGIES FOR AN UPGRADE. ONLY THE BiSYNC STREAMING CODE IS SUPPORTED ON S502E/S503 cards. INTRODUCTION Wide Area Networks (WANs) are used to interconnect Local Area Networks (LANs) and/or stand-alone hosts over vast distances with data transfer rates significantly higher than those achievable with commonly used dial-up connections. Usually an external device called `WAN router' sitting on your local network or connected to your machine's serial port provides physical connection to WAN. Although router's job may be as simple as taking your local network traffic, converting it to WAN format and piping it through the WAN link, these devices are notoriously expensive, with prices as much as 2 - 5 times higher then the price of a typical PC box. Alternatively, considering robustness and multitasking capabilities of Linux, an internal router can be built (most routers use some sort of stripped down Unix-like operating system anyway). With a number of relatively inexpensive WAN interface cards available on the market, a perfectly usable router can be built for less than half a price of an external router. Yet a Linux box acting as a router can still be used for other purposes, such as firewalling, running FTP, WWW or DNS server, etc. This kernel module introduces the notion of a WAN Link Driver (WLD) to Linux operating system and provides generic hardware-independent services for such drivers. Why can existing Linux network device interface not be used for this purpose? Well, it can. However, there are a few key differences between a typical network interface (e.g. Ethernet) and a WAN link. Many WAN protocols, such as X.25 and frame relay, allow for multiple logical connections (known as `virtual circuits' in X.25 terminology) over a single physical link. Each such virtual circuit may (and almost always does) lead to a different geographical location and, therefore, different network. As a result, it is the virtual circuit, not the physical link, that represents a route and, therefore, a network interface in Linux terms. To further complicate things, virtual circuits are usually volatile in nature (excluding so called `permanent' virtual circuits or PVCs). With almost no time required to set up and tear down a virtual circuit, it is highly desirable to implement on-demand connections in order to minimize network charges. So unlike a typical network driver, the WAN driver must be able to handle multiple network interfaces and cope as multiple virtual circuits come into existence and go away dynamically. Last, but not least, WAN configuration is much more complex than that of say Ethernet and may well amount to several dozens of parameters. Some of them are "link-wide" while others are virtual circuit-specific. The same holds true for WAN statistics which is by far more extensive and extremely useful when troubleshooting WAN connections. Extending the ifconfig utility to suit these needs may be possible, but does not seem quite reasonable. Therefore, a WAN configuration utility and corresponding application programmer's interface is needed for this purpose. Most of these problems are taken care of by this module. Its goal is to provide a user with more-or-less standard look and feel for all WAN devices and assist a WAN device driver writer by providing common services, such as: o User-level interface via /proc file system o Centralized configuration o Device management (setup, shutdown, etc.) o Network interface management (dynamic creation/destruction) o Protocol encapsulation/decapsulation To ba able to use the Linux WAN Router you will also need a WAN Tools package available from ftp.sangoma.com/pub/linux/vX.Y.Z/wantools-X.Y.Z.tgz or ftp.sangoma.com/pub/linux/vX.Y.Z/wanpipe-X.Y.Z.tgz where vX.Y.Z represent the Linux kernel version number. For technical questions and/or comments regarding this product please e-mail to jaspreet@sangoma.com or dm@sangoma.com. COPYRIGHT AND LICENSING INFORMATION 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. ACKNOWLEDGMENTS This product is based on the WANPIPE(tm) Multiprotocol WAN Router developed by Sangoma Technologies Inc. for Linux 1.2.x. Release of Linux 2.0 in summer 1996 commanded adequate changes to the WANPIPE code to take full advantage of new Linux features. Instead of continuing developing proprietary interface specific to Sangoma WAN cards, we decided to put all hardware-independent code into a separate module and define two levels of interfaces - one for user- level applications and another for kernel-level WAN drivers. Many useful ideas concerning hardware-independent interface implementation were given by Mike McLagan and his implementation of the Frame Relay router and drivers for Sangoma cards (dlci/sdla). Special thanks to all the WANPIPE users who performed field-testing, reported bugs and made valuable comments and suggestions that help us to improve this product. REVISION HISTORY 2.1.1 Nov 09, 1999 - New code for S514PCI card - Completely redesigned drivers fully tested and optimized. 2.0.8 Nov 02, 1999 - Fixed up the X25API code. - Clear call bug fixed.i - Enabled driver for multi-card operation. 2.0.7 Aug 26, 1999 - Merged X25API code into WANPIPE. - Fixed a memory leak for X25API - Updated the X25API code for 2.2.X kernels. - Improved NEM handling. 2.0.6 Aug 17, 1999 - Kernel patch works for both 2.2.10 and 2.2.11 kernels - Fixed up 2.0.5 installation bugs - No functional difference between 2.0.6 and 2.0.5 2.0.5 Aug 12, 1999 - NEW PPP, interrupt drive code - NEW X25 Xpipmon debugger - Comments added to setup scripts - Numerous bug fixes 2.0.4 Nov 26, 1998 - NEW Cisco Dual Port support. - NEW support for BiSync Streaming API. - NEW support for HDLC (LAPB) API. - WANPIPE provides an API for application development using the BSD socket interface. 2.0.3 Aug 25, 1998 - NEW support for Cisco HDLC, with cpipemon utility for monitoring - CIR support for Frame-relay - Support for PAP and CHAP for ppp has been implemented - Dynamic IP assignment for PPP - Multiple channel IPX support for Frame-relay and X25 - Inverse Arp support for Frame-relay - FT1 Configuration utility for linux - Man Pages for router.conf, router, sdladump, cfgft1, fpipemon, ppipemon and cpipemon 2.0.2 Dev 09, 1997 - Implemented PAP and CHAP for ppp. 2.0.1 Nov 28, 1997 - Protection of "enable_irq()" while "disable_irq()" has been enabled from any other routine (for Frame Relay, PPP and X25). - Added additional Stats for Fpipemon and Ppipemon - Improved Load Sharing for multiple boards. 2.0.0 Nov 07, 1997 - Implemented protection of RACE conditions by critical flags for FRAME RELAY and PPP. - DLCI List interrupt mode implemented. - IPX support in FRAME RELAY and PPP. - IPX Server Support (MARS) - More driver specific stats included in FPIPEMON and PIPEMON. 1.0.5 July 28, 1997 - Configurable T391,T392,N391,N392,N393 for Frame Relay in router.conf. - Configurable Memory Address through router.conf for Frame Relay, PPP and X.25. (commenting this out enables auto-detection). - Fixed freeing up received buffers using kfree() for Frame Relay and X.25. - Protect sdla_peek() by calling save_flags(), cli() and restore_flags(). - Changed number of Trace elements from 32 to 20 - Added DLCI specific data monitoring in FPIPEMON. 1.0.4 July 10, 1997 - S508/FT1 monitoring capability in fpipemon and ppipemon utilities. - Configurable TTL for UDP packets. - Multicast and Broadcast IP source addresses are silently discarded. 1.0.3 June 3, 1997 - UDP port for multiple boards (Frame relay, PPP) Continuous Transmission of Configure Request - Packet for PPP (this support is only added for 508 cards) - Connection Timeout for PPP changed from 900 to 0 - Flow Control for multiple boards and multiple channels (Frame Relay) 1.0.1 January 30, 1997 - Implemented user-readable status and statistics via /proc filesystem 1.0.0 December 31, 1996 - Initial version >>>>>> END <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ------------------------------------------------------------------------------ Linux WAN Router Utilities Package ------------------------------------------------------------------------------ Version 2.1.1 Nov 08, 1999 Author: Nenad Corbic Copyright (c) 1995-1999 Sangoma Technologies Inc. ------------------------------------------------------------------------------ INTRODUCTION This is a set of utilities and shell scripts you need in order to be able to use Linux kernel-level WAN Router. Please read WAN Router User's manual (router.txt) and WANPIPE driver documentation found in /usr/lib/router/doc directory for installation and configuration instructions. You can find the latest version of this software in /pub/linux directory on Sangoma Technologies' anonymous FTP server (ftp.sangoma.com). For technical questions and/or comments please e-mail to ncorbic@sangoma.com. For general inquiries please contact Sangoma Technologies Inc. by Hotline: 1-800-388-2475 (USA and Canada, toll free) Phone: (905) 474-1990 Fax: (905) 474-9223 E-mail: dm@sangoma.com (David Mandelstam) WWW: http://www.sangoma.com COPYRIGHT AND LICENSING INFORMATION 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, 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., 675 Mass Ave, Cambridge, MA 02139, USA. ACKNOWLEDGEMENTS This product is based on the WANPIPE(tm) Multiprotocol WAN Router developed by Sangoma Technologies Inc. for Linux 2.2.x. Success of the WANPIPE together with the next major release of Linux kernel in summer 1996 commanded adequate changes to the WANPIPE code to take full advantage of new Linux features. Instead of continuing developing proprietary interface tied to Sangoma WAN cards, we decided to separate all hardware-independent code into a separate module and defined two levels of interfaces - one for user-level applications and another for kernel-level WAN drivers. WANPIPE is now implemented as a WAN driver compliant with the WAN Link Driver interface. Also a general purpose WAN configuration utility and a set of shell scripts was developed to support WAN router at the user level. Many useful ideas concerning hardware-independent interface implementation were given by Mike McLagan and his implementation of the Frame Relay router and drivers for Sangoma cards (dlci/sdla). With the new implementation of the APIs being incorporated into the WANPIPE, a special thank goes to Alan Cox in providing insight into BSD sockets. Special thanks to all the WANPIPE users who performed field-testing, reported bugs and made valuable comments and suggestions that help us to improve this product. NEW IN THIS RELEASE o Renamed startup script to wanrouter o Option to turn off/on each router separately o New source directory /usr/lib/wanrouter o New PPP driver o X25 is not supported in this release PRODUCT COMPONENTS AND RELATED FILES /etc: wanpipe1.conf default router configuration file wanrouter.rc meta-configuration file (used by the Setup script) /lib/modules/X.Y.Z/misc: wanrouter.o router kernel loadable module /lib/modules/X.Y.Z/net: sdladrv.o Sangoma SDLA support module wanpipe.o Sangoma WANPIPE(tm) driver module /proc/net/wanrouter Config reads current router configuration Status reads current router status {name} reads WAN driver statistics /usr/sbin: wanrouter router start-up script wanconfig router configuration utility sdladump WANPIPE adapter memory dump utility fpipemon Monitor for Frame Relay cpipemon Monitor for Cisco HDLC /usr/lib/wanrouter: README this file COPYING GNU General Public License Setup installation script Configure configuration script Filelist distribution definition file /usr/lib/wanrouter/doc: WANPIPE_USER_MANUAL.txt WAN Router User's Manual WANPIPE_CONFIG.txt WAN Configuration Manual /usr/lib/wanrouter/interfaces: * interface configuration files (TCP/IP configuration) /usr/lib/wanrouter/patches: wanrouter-22.gz patch for Linux kernel 2.2.10 and 2.2.11 (compatible for all 2.2.X kernels) wanrouter-20.gz patch for Linux kernel 2.0.36 Fix_2.2.11.gz patch to fix the 2.2.11 kernel so other patches can be applied properly. /usr/lib/wanrouter/samples: interface sample interface configuration file wanpipe1.cpri CHDLC primary port wanpipe2.csec CHDLC secondary port wanpipe1.fr Frame Relay protocol wanpipe1.ppp PPP protocol ) wanrouter.rc sample meta-configuration file /usr/lib/wanrouter/src: * wan-tools source code /usr/include/linux: wanrouter.h router API definitions wanpipe.h WANPIPE API definitions sdladrv.h SDLA support module API definitions sdlasfm.h SDLA firmware module definitions /usr/src/linux/net/router: * router source code /var/log: wanrouter router start-up log (created by the Setup script) /var/lock: wanrouter router lock file (created by the Setup script) /usr/lib/wanrouter/wanpipe: fr514.sfm Frame relay firmware for Sangoma S508/S514 card cdual514.sfm Dual Port Cisco HDLC firmware for Sangoma S508/S514 card ppp514.sfm PPP Firmware for Sangoma S508 and S514 cards REVISION HISTORY 1.0.0 December 31, 1996 Initial version 1.0.1 January 30, 1997 Status and statistics can be read via /proc filesystem entries. 1.0.2 April 30, 1997 Added UDP management via monitors. 1.0.3 June 3, 1997 UDP management for multiple boards using Frame Relay and PPP Enabled continuous transmission of Configure Request Packet for PPP (for 508 only) Connection Timeout for PPP changed from 900 to 0 Flow Control Problem fixed for Frame Relay 1.0.4 July 10, 1997 S508/FT1 monitoring capability in fpipemon and ppipemon utilities. Configurable TTL for UDP packets. Multicast and Broadcast IP source addresses are silently discarded. 1.0.5 July 28, 1997 Configurable T391,T392,N391,N392,N393 for Frame Relay in router.conf. Configurable Memory Address through router.conf for Frame Relay, PPP and X.25. (commenting this out enables auto-detection). Fixed freeing up received buffers using kfree() for Frame Relay and X.25. Protect sdla_peek() by calling save_flags(), cli() and restore_flags(). Changed number of Trace elements from 32 to 20 Added DLCI specific data monitoring in FPIPEMON. 2.0.0 Nov 07, 1997 Implemented protection of RACE conditions by critical flags for FRAME RELAY and PPP. DLCI List interrupt mode implemented. IPX support in FRAME RELAY and PPP. IPX Server Support (MARS) More driver specific stats included in FPIPEMON and PIPEMON. 2.0.1 Nov 28, 1997 Bug Fixes for version 2.0.0. Protection of "enable_irq()" while "disable_irq()" has been enabled from any other routine (for Frame Relay, PPP and X25). Added additional Stats for Fpipemon and Ppipemon Improved Load Sharing for multiple boards 2.0.2 Dec 09, 1997 Support for PAP and CHAP for ppp has been implemented. 2.0.3 Aug 15, 1998 New release supporting Cisco HDLC, CIR for Frame relay, Dynamic IP assignment for PPP and Inverse Arp support for Frame-relay. Man Pages are included for better support and a new utility for configuring FT1 cards. 2.0.4 Dec 09, 1998 Dual Port support for Cisco HDLC. Support for HDLC (LAPB) API. Supports BiSync Streaming code for S502E and S503 cards. Support for Streaming HDLC API. Provides a BSD socket interface for creating applications using BiSync streaming. 2.0.5 Aug 04, 1999 CHDLC initialization bug fix. PPP interrupt driven driver: Fix to the PPP line hangup problem. New PPP firmware Added comments to the startup SYSTEM ERROR messages Xpipemon debugging application for the X25 protocol New USER_MANUAL.txt Fixed the odd boundary 4byte writes to the board. BiSync Streaming code has been taken out. Available as a patch. Streaming HDLC API has been taken out. Available as a patch. 2.0.6 Aug 17, 1999 Increased debugging in startup scripts Fixed installation bugs from 2.0.5 Kernel patch works for both 2.2.10 and 2.2.11 kernels. There is no functional difference between the two packages 2.0.7 Aug 26, 1999 o Merged X25API code into WANPIPE. o Fixed a memory leak for X25API o Updated the X25API code for 2.2.X kernels. o Improved NEM handling. 2.1.0 Oct 25, 1999 o New code for S514 PCI Card o New CHDLC and Frame Relay drivers o PPP and X25 are not supported in this release >>>>>> END OF README <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Sun Jul 2 01:38:33 EST 1995 As the date above certify, this ``readme'' is mostly obsolete. Please read release notes and change list in driver/net/wavelan.p.h, and consult my web page at : http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html Jean 1. At present the driver autoprobes for a WaveLAN card only at I/O address 0x390. The version of the card that I use (NCR) supports four I/O addresses (selectable via a pair of DIP switches). If you want the driver to autoprobe a different subset of the four valid addresses then you will need to edit .../drivers/net/wavelan.c (near line 714) and change the initialisation of the `iobase[]' array. Normally, I use a LILO configuration file directive to obviate the need for autoprobing entirely, a course of action I heartily recommend. 2. By default, the driver uses the Network ID (NWID) stored in the card's Parameter Storage Area (PSA). However, the PSA NWID can be overridden by a value passed explicitly as the third numeric argument to LILO's "ether=" directive, either at the LILO prompt at boot time or within LILO's configuration file. For example, the following line from such a LILO configuration file would auto-configure the IRQ value, set the I/O base to 0x390 and set the NWID to 0x4321, all on a WaveLAN card labelled "eth0": .. append ="ether=0,0x390,0x4321,eth0" .. 3. The driver uses the IRQ stored in the card's PSA. To change this you will need to use the configuration/setup software that accompanies each WaveLAN device. Yes, the driver should use the value passed in via LILO and it will, just as soon as I can work out why that part of the code doesn't work :-(. 4. If you encounter any problems send me some email. Good luck, Bruce Janson (bruce@cs.usyd.edu.au) Linux X.25 Project As my third year dissertation at University I have taken it upon myself to write an X.25 implementation for Linux. My aim is to provide a complete X.25 Packet Layer and a LAPB module to allow for "normal" X.25 to be run using Linux. There are two sorts of X.25 cards available, intelligent ones that implement LAPB on the card itself, and unintelligent ones that simply do framing, bit-stuffing and checksumming. These both need to be handled by the system. I therefore decided to write the implementation such that as far as the Packet Layer is concerned, the link layer was being performed by a lower layer of the Linux kernel and therefore it did not concern itself with implementation of LAPB. Therefore the LAPB modules would be called by unintelligent X.25 card drivers and not by intelligent ones, this would provide a uniform device driver interface, and simplify configuration. To confuse matters a little, an 802.2 LLC implementation for Linux is being written which will allow X.25 to be run over an Ethernet (or Token Ring) and conform with the JNT "Pink Book", this will have a different interface to the Packet Layer but there will be no confusion since the class of device being served by the LLC will be completely separate from LAPB. The LLC implementation is being done as part of another protocol project (SNA) and by a different author. Just when you thought that it could not become more confusing, another option appeared, XOT. This allows X.25 Packet Layer frames to operate over the Internet using TCP/IP as a reliable link layer. RFC1613 specifies the format and behaviour of the protocol. If time permits this option will also be actively considered. A linux-x25 mailing list has been created at vger.kernel.org to support the development and use of Linux X.25. It is early days yet, but interested parties are welcome to subscribe to it. Just send a message to majordomo@vger.kernel.org with the following in the message body: subscribe linux-x25 end The contents of the Subject line are ignored. Jonathan g4klx@g4klx.demon.co.uk X.25 Device Driver Interface 1.1 Jonathan Naylor 26.12.96 This is a description of the messages to be passed between the X.25 Packet Layer and the X.25 device driver. They are designed to allow for the easy setting of the LAPB mode from within the Packet Layer. The X.25 device driver will be coded normally as per the Linux device driver standards. Most X.25 device drivers will be moderately similar to the already existing Ethernet device drivers. However unlike those drivers, the X.25 device driver has a state associated with it, and this information needs to be passed to and from the Packet Layer for proper operation. All messages are held in sk_buff's just like real data to be transmitted over the LAPB link. The first byte of the skbuff indicates the meaning of the rest of the skbuff, if any more information does exist. Packet Layer to Device Driver ----------------------------- First Byte = 0x00 This indicates that the rest of the skbuff contains data to be transmitted over the LAPB link. The LAPB link should already exist before any data is passed down. First Byte = 0x01 Establish the LAPB link. If the link is already established then the connect confirmation message should be returned as soon as possible. First Byte = 0x02 Terminate the LAPB link. If it is already disconnected then the disconnect confirmation message should be returned as soon as possible. First Byte = 0x03 LAPB parameters. To be defined. Device Driver to Packet Layer ----------------------------- First Byte = 0x00 This indicates that the rest of the skbuff contains data that has been received over the LAPB link. First Byte = 0x01 LAPB link has been established. The same message is used for both a LAPB link connect_confirmation and a connect_indication. First Byte = 0x02 LAPB link has been terminated. This same message is used for both a LAPB link disconnect_confirmation and a disconnect_indication. First Byte = 0x03 LAPB parameters. To be defined. This is a subset of the documentation. To use this driver you MUST have the full package from: Internet: ========= 1. ftp://ftp.ccac.rwth-aachen.de/pub/jr/z8530drv-utils_3.0-3.tar.gz 2. ftp://ftp.pspt.fi/pub/ham/linux/ax25/z8530drv-utils_3.0-3.tar.gz Please note that the information in this document may be hopelessly outdated. A new version of the documentation, along with links to other important Linux Kernel AX.25 documentation and programs, is available on http://yaina.de/jreuter ----------------------------------------------------------------------------- SCC.C - Linux driver for Z8530 based HDLC cards for AX.25 ******************************************************************** (c) 1993,2000 by Joerg Reuter DL1BKE portions (c) 1993 Guido ten Dolle PE1NNZ for the complete copyright notice see >> Copying.Z8530DRV << ******************************************************************** 1. Initialization of the driver =============================== To use the driver, 3 steps must be performed: 1. if compiled as module: loading the module 2. Setup of hardware, MODEM and KISS parameters with sccinit 3. Attach each channel to the Linux kernel AX.25 with "ifconfig" Unlike the versions below 2.4 this driver is a real network device driver. If you want to run xNOS instead of our fine kernel AX.25 use a 2.x version (available from above sites) or read the AX.25-HOWTO on how to emulate a KISS TNC on network device drivers. 1.1 Loading the module ====================== (If you're going to compile the driver as a part of the kernel image, skip this chapter and continue with 1.2) Before you can use a module, you'll have to load it with insmod scc.o please read 'man insmod' that comes with modutils. You should include the insmod in one of the /etc/rc.d/rc.* files, and don't forget to insert a call of sccinit after that. It will read your /etc/z8530drv.conf. 1.2. /etc/z8530drv.conf ======================= To setup all parameters you must run /sbin/sccinit from one of your rc.*-files. This has to be done BEFORE you can "ifconfig" an interface. Sccinit reads the file /etc/z8530drv.conf and sets the hardware, MODEM and KISS parameters. A sample file is delivered with this package. Change it to your needs. The file itself consists of two main sections. 1.2.1 configuration of hardware parameters ========================================== The hardware setup section defines the following parameters for each Z8530: chip 1 data_a 0x300 # data port A ctrl_a 0x304 # control port A data_b 0x301 # data port B ctrl_b 0x305 # control port B irq 5 # IRQ No. 5 pclock 4915200 # clock board BAYCOM # hardware type escc no # enhanced SCC chip? (8580/85180/85280) vector 0 # latch for interrupt vector special no # address of special function register option 0 # option to set via sfr chip - this is just a delimiter to make sccinit a bit simpler to program. A parameter has no effect. data_a - the address of the data port A of this Z8530 (needed) ctrl_a - the address of the control port A (needed) data_b - the address of the data port B (needed) ctrl_b - the address of the control port B (needed) irq - the used IRQ for this chip. Different chips can use different IRQs or the same. If they share an interrupt, it needs to be specified within one chip-definition only. pclock - the clock at the PCLK pin of the Z8530 (option, 4915200 is default), measured in Hertz board - the "type" of the board: SCC type value --------------------------------- PA0HZP SCC card PA0HZP EAGLE card EAGLE PC100 card PC100 PRIMUS-PC (DG9BL) card PRIMUS BayCom (U)SCC card BAYCOM escc - if you want support for ESCC chips (8580, 85180, 85280), set this to "yes" (option, defaults to "no") vector - address of the vector latch (aka "intack port") for PA0HZP cards. There can be only one vector latch for all chips! (option, defaults to 0) special - address of the special function register on several cards. (option, defaults to 0) option - The value you write into that register (option, default is 0) You can specify up to four chips (8 channels). If this is not enough, just change #define MAXSCC 4 to a higher value. Example for the BAYCOM USCC: ---------------------------- chip 1 data_a 0x300 # data port A ctrl_a 0x304 # control port A data_b 0x301 # data port B ctrl_b 0x305 # control port B irq 5 # IRQ No. 5 (#) board BAYCOM # hardware type (*) # # SCC chip 2 # chip 2 data_a 0x302 ctrl_a 0x306 data_b 0x303 ctrl_b 0x307 board BAYCOM An example for a PA0HZP card: ----------------------------- chip 1 data_a 0x153 data_b 0x151 ctrl_a 0x152 ctrl_b 0x150 irq 9 pclock 4915200 board PA0HZP vector 0x168 escc no # # # chip 2 data_a 0x157 data_b 0x155 ctrl_a 0x156 ctrl_b 0x154 irq 9 pclock 4915200 board PA0HZP vector 0x168 escc no A DRSI would should probably work with this: -------------------------------------------- (actually: two DRSI cards...) chip 1 data_a 0x303 data_b 0x301 ctrl_a 0x302 ctrl_b 0x300 irq 7 pclock 4915200 board DRSI escc no # # # chip 2 data_a 0x313 data_b 0x311 ctrl_a 0x312 ctrl_b 0x310 irq 7 pclock 4915200 board DRSI escc no Note that you cannot use the on-board baudrate generator off DRSI cards. Use "mode dpll" for clock source (see below). This is based on information provided by Mike Bilow (and verified by Paul Helay) The utility "gencfg" -------------------- If you only know the parameters for the PE1CHL driver for DOS, run gencfg. It will generate the correct port addresses (I hope). Its parameters are exactly the same as the ones you use with the "attach scc" command in net, except that the string "init" must not appear. Example: gencfg 2 0x150 4 2 0 1 0x168 9 4915200 will print a skeleton z8530drv.conf for the OptoSCC to stdout. gencfg 2 0x300 2 4 5 -4 0 7 4915200 0x10 does the same for the BAYCOM USCC card. In my opinion it is much easier to edit scc_config.h... 1.2.2 channel configuration =========================== The channel definition is divided into three sub sections for each channel: An example for scc0: # DEVICE device scc0 # the device for the following params # MODEM / BUFFERS speed 1200 # the default baudrate clock dpll # clock source: # dpll = normal half duplex operation # external = MODEM provides own Rx/Tx clock # divider = use full duplex divider if # installed (1) mode nrzi # HDLC encoding mode # nrzi = 1k2 MODEM, G3RUH 9k6 MODEM # nrz = DF9IC 9k6 MODEM # bufsize 384 # size of buffers. Note that this must include # the AX.25 header, not only the data field! # (optional, defaults to 384) # KISS (Layer 1) txdelay 36 # (see chapter 1.4) persist 64 slot 8 tail 8 fulldup 0 wait 12 min 3 maxkey 7 idle 3 maxdef 120 group 0 txoff off softdcd on slip off The order WITHIN these sections is unimportant. The order OF these sections IS important. The MODEM parameters are set with the first recognized KISS parameter... Please note that you can initialize the board only once after boot (or insmod). You can change all parameters but "mode" and "clock" later with the Sccparam program or through KISS. Just to avoid security holes... (1) this divider is usually mounted on the SCC-PBC (PA0HZP) or not present at all (BayCom). It feeds back the output of the DPLL (digital pll) as transmit clock. Using this mode without a divider installed will normally result in keying the transceiver until maxkey expires --- of course without sending anything (useful). 2. Attachment of a channel by your AX.25 software ================================================= 2.1 Kernel AX.25 ================ To set up an AX.25 device you can simply type: ifconfig scc0 44.128.1.1 hw ax25 dl0tha-7 This will create a network interface with the IP number 44.128.20.107 and the callsign "dl0tha". If you do not have any IP number (yet) you can use any of the 44.128.0.0 network. Note that you do not need axattach. The purpose of axattach (like slattach) is to create a KISS network device linked to a TTY. Please read the documentation of the ax25-utils and the AX.25-HOWTO to learn how to set the parameters of the kernel AX.25. 2.2 NOS, NET and TFKISS ======================= Since the TTY driver (aka KISS TNC emulation) is gone you need to emulate the old behaviour. The cost of using these programs is that you probably need to compile the kernel AX.25, regardless of whether you actually use it or not. First setup your /etc/ax25/axports, for example: 9k6 dl0tha-9 9600 255 4 9600 baud port (scc3) axlink dl0tha-15 38400 255 4 Link to NOS Now "ifconfig" the scc device: ifconfig scc3 44.128.1.1 hw ax25 dl0tha-9 You can now axattach a pseudo-TTY: axattach /dev/ptys0 axlink and start your NOS and attach /dev/ptys0 there. The problem is that NOS is reachable only via digipeating through the kernel AX.25 (disastrous on a DAMA controlled channel). To solve this problem, configure "rxecho" to echo the incoming frames from "9k6" to "axlink" and outgoing frames from "axlink" to "9k6" and start: rxecho Or simply use "kissbridge" coming with z8530drv-utils: ifconfig scc3 hw ax25 dl0tha-9 kissbridge scc3 /dev/ptys0 3. Adjustment and Display of parameters ======================================= 3.1 Displaying SCC Parameters: ============================== Once a SCC channel has been attached, the parameter settings and some statistic information can be shown using the param program: dl1bke-u:~$ sccstat scc0 Parameters: speed : 1200 baud txdelay : 36 persist : 255 slottime : 0 txtail : 8 fulldup : 1 waittime : 12 mintime : 3 sec maxkeyup : 7 sec idletime : 3 sec maxdefer : 120 sec group : 0x00 txoff : off softdcd : on SLIP : off Status: HDLC Z8530 Interrupts Buffers ----------------------------------------------------------------------- Sent : 273 RxOver : 0 RxInts : 125074 Size : 384 Received : 1095 TxUnder: 0 TxInts : 4684 NoSpace : 0 RxErrors : 1591 ExInts : 11776 TxErrors : 0 SpInts : 1503 Tx State : idle The status info shown is: Sent - number of frames transmitted Received - number of frames received RxErrors - number of receive errors (CRC, ABORT) TxErrors - number of discarded Tx frames (due to various reasons) Tx State - status of the Tx interrupt handler: idle/busy/active/tail (2) RxOver - number of receiver overruns TxUnder - number of transmitter underruns RxInts - number of receiver interrupts TxInts - number of transmitter interrupts EpInts - number of receiver special condition interrupts SpInts - number of external/status interrupts Size - maximum size of an AX.25 frame (*with* AX.25 headers!) NoSpace - number of times a buffer could not get allocated An overrun is abnormal. If lots of these occur, the product of baudrate and number of interfaces is too high for the processing power of your computer. NoSpace errors are unlikely to be caused by the driver or the kernel AX.25. 3.2 Setting Parameters ====================== The setting of parameters of the emulated KISS TNC is done in the same way in the SCC driver. You can change parameters by using the kissparms program from the ax25-utils package or use the program "sccparam": sccparam You can change the following parameters: param : value ------------------------ speed : 1200 txdelay : 36 persist : 255 slottime : 0 txtail : 8 fulldup : 1 waittime : 12 mintime : 3 maxkeyup : 7 idletime : 3 maxdefer : 120 group : 0x00 txoff : off softdcd : on SLIP : off The parameters have the following meaning: speed: The baudrate on this channel in bits/sec Example: sccparam /dev/scc3 speed 9600 txdelay: The delay (in units of 10 ms) after keying of the transmitter, until the first byte is sent. This is usually called "TXDELAY" in a TNC. When 0 is specified, the driver will just wait until the CTS signal is asserted. This assumes the presence of a timer or other circuitry in the MODEM and/or transmitter, that asserts CTS when the transmitter is ready for data. A normal value of this parameter is 30-36. Example: sccparam /dev/scc0 txd 20 persist: This is the probability that the transmitter will be keyed when the channel is found to be free. It is a value from 0 to 255, and the probability is (value+1)/256. The value should be somewhere near 50-60, and should be lowered when the channel is used more heavily. Example: sccparam /dev/scc2 persist 20 slottime: This is the time between samples of the channel. It is expressed in units of 10 ms. About 200-300 ms (value 20-30) seems to be a good value. Example: sccparam /dev/scc0 slot 20 tail: The time the transmitter will remain keyed after the last byte of a packet has been transferred to the SCC. This is necessary because the CRC and a flag still have to leave the SCC before the transmitter is keyed down. The value depends on the baudrate selected. A few character times should be sufficient, e.g. 40ms at 1200 baud. (value 4) The value of this parameter is in 10 ms units. Example: sccparam /dev/scc2 4 full: The full-duplex mode switch. This can be one of the following values: 0: The interface will operate in CSMA mode (the normal half-duplex packet radio operation) 1: Fullduplex mode, i.e. the transmitter will be keyed at any time, without checking the received carrier. It will be unkeyed when there are no packets to be sent. 2: Like 1, but the transmitter will remain keyed, also when there are no packets to be sent. Flags will be sent in that case, until a timeout (parameter 10) occurs. Example: sccparam /dev/scc0 fulldup off wait: The initial waittime before any transmit attempt, after the frame has been queue for transmit. This is the length of the first slot in CSMA mode. In full duplex modes it is set to 0 for maximum performance. The value of this parameter is in 10 ms units. Example: sccparam /dev/scc1 wait 4 maxkey: The maximal time the transmitter will be keyed to send packets, in seconds. This can be useful on busy CSMA channels, to avoid "getting a bad reputation" when you are generating a lot of traffic. After the specified time has elapsed, no new frame will be started. Instead, the trans- mitter will be switched off for a specified time (parameter min), and then the selected algorithm for keyup will be started again. The value 0 as well as "off" will disable this feature, and allow infinite transmission time. Example: sccparam /dev/scc0 maxk 20 min: This is the time the transmitter will be switched off when the maximum transmission time is exceeded. Example: sccparam /dev/scc3 min 10 idle This parameter specifies the maximum idle time in full duplex 2 mode, in seconds. When no frames have been sent for this time, the transmitter will be keyed down. A value of 0 is has same result as the fullduplex mode 1. This parameter can be disabled. Example: sccparam /dev/scc2 idle off # transmit forever maxdefer This is the maximum time (in seconds) to wait for a free channel to send. When this timer expires the transmitter will be keyed IMMEDIATELY. If you love to get trouble with other users you should set this to a very low value ;-) Example: sccparam /dev/scc0 maxdefer 240 # 2 minutes txoff: When this parameter has the value 0, the transmission of packets is enable. Otherwise it is disabled. Example: sccparam /dev/scc2 txoff on group: It is possible to build special radio equipment to use more than one frequency on the same band, e.g. using several receivers and only one transmitter that can be switched between frequencies. Also, you can connect several radios that are active on the same band. In these cases, it is not possible, or not a good idea, to transmit on more than one frequency. The SCC driver provides a method to lock transmitters on different interfaces, using the "param group " command. This will only work when you are using CSMA mode (parameter full = 0). The number must be 0 if you want no group restrictions, and can be computed as follows to create restricted groups: is the sum of some OCTAL numbers: 200 This transmitter will only be keyed when all other transmitters in the group are off. 100 This transmitter will only be keyed when the carrier detect of all other interfaces in the group is off. 0xx A byte that can be used to define different groups. Interfaces are in the same group, when the logical AND between their xx values is nonzero. Examples: When 2 interfaces use group 201, their transmitters will never be keyed at the same time. When 2 interfaces use group 101, the transmitters will only key when both channels are clear at the same time. When group 301, the transmitters will not be keyed at the same time. Don't forget to convert the octal numbers into decimal before you set the parameter. Example: (to be written) softdcd: use a software dcd instead of the real one... Useful for a very slow squelch. Example: sccparam /dev/scc0 soft on 4. Problems =========== If you have tx-problems with your BayCom USCC card please check the manufacturer of the 8530. SGS chips have a slightly different timing. Try Zilog... A solution is to write to register 8 instead to the data port, but this won't work with the ESCC chips. *SIGH!* A very common problem is that the PTT locks until the maxkeyup timer expires, although interrupts and clock source are correct. In most cases compiling the driver with CONFIG_SCC_DELAY (set with make config) solves the problems. For more hints read the (pseudo) FAQ and the documentation coming with z8530drv-utils. I got reports that the driver has problems on some 386-based systems. (i.e. Amstrad) Those systems have a bogus AT bus timing which will lead to delayed answers on interrupts. You can recognize these problems by looking at the output of Sccstat for the suspected port. If it shows under- and overruns you own such a system. Delayed processing of received data: This depends on - the kernel version - kernel profiling compiled or not - a high interrupt load - a high load of the machine --- running X, Xmorph, XV and Povray, while compiling the kernel... hmm ... even with 32 MB RAM ... ;-) Or running a named for the whole .ampr.org domain on an 8 MB box... - using information from rxecho or kissbridge. Kernel panics: please read /linux/README and find out if it really occurred within the scc driver. If you cannot solve a problem, send me - a description of the problem, - information on your hardware (computer system, scc board, modem) - your kernel version - the output of cat /proc/net/z8530 4. Thor RLC100 ============== Mysteriously this board seems not to work with the driver. Anyone got it up-and-running? Many thanks to Linus Torvalds and Alan Cox for including the driver in the Linux standard distribution and their support. Joerg Reuter ampr-net: dl1bke@db0pra.ampr.org AX-25 : DL1BKE @ DB0ABH.#BAY.DEU.EU Internet: jreuter@yaina.de WWW : http://yaina.de/jreuter /* There is only 1 optname (see setsockopt(2)), IP_FW_MASQ_CTL that must be used. Funcionality depends on your kernel CONFIG options, here is an example you can use to create an ``incoming'' tunnel: See "user.c" module under ipmasqadm tree for a generic example */ #undef __KERNEL__ /* Makefile lazyness ;) */ #include #include #include #include #include #include #include /* For __uXX types */ #include #include #include #include #include /* For IP_FW_MASQ_CTL */ #include /* For specific masq defs */ int create_listening_masq(struct ip_masq_ctl *masq, int proto, u_int32_t src_addr, u_int16_t src_port, u_int32_t dst_addr) { int sockfd; sockfd = socket(AF_INET, SOCK_RAW, IPPROTO_RAW); if (sockfd<0) { perror("socket(RAW)"); return -1; } memset (masq, 0, sizeof (*masq)); /* * Want user tunnel control */ masq->m_target = IP_MASQ_TARGET_USER; /* * Want to insert new */ masq->m_cmd = IP_MASQ_CMD_INSERT; masq->u.user.protocol = proto; masq->u.user.saddr = src_addr; masq->u.user.sport = src_port; masq->u.user.rt_daddr = inet_addr("192.168.21.239"); if (setsockopt(sockfd, IPPROTO_IP, IP_FW_MASQ_CTL, (char *)masq, sizeof(*masq))) { perror("setsockopt()"); return -1; } /* masq struct now contains tunnel details */ fprintf(stderr, "PROTO=%d SRC=0x%X:%x - MASQ=0x%X:%x - DST=0x%X:%x\n", masq->u.user.protocol, ntohl(masq->u.user.saddr), ntohs(masq->u.user.sport), ntohl(masq->u.user.maddr), ntohs(masq->u.user.mport), ntohl(masq->u.user.daddr), ntohs(masq->u.user.dport)); return 0; } int main(void) { struct ip_masq_ctl masq_buf; return create_listening_masq(&masq_buf, IPPROTO_TCP, inet_addr("192.168.1.4"), htons(23), inet_addr("192.168.21.3")); } #!/bin/sh # # rc.masqfw v0.2 # # Author: Juanjo Ciarlante # 03-Oct-00 # # Setup reverse masquerading (ala portfw) with using firewall mark-ing # _AND_ userspace "redir" support for complete redirection (even local # connects). # # Semantics: # Let ip_masq_mfw intercept truly "forward-able" packets based # on ipchains ruling _AND_ leave the rest for redir tool. # # Requirement: # - ipmasqadm http://juanjox.kernelnotes.org/ # . setups kernel mark forwarding) # - redir 2.2.x http://freshmeat.net/search/?q=redir # . setups "local" socket forwarding) # - ip_masq_ftp PATCHED for firewall marking (module parm "in_mark") # . support internal server forwarding for PASV clients) # # Setup: # EXT_IP, EXT_PORT: external (visible) IP address (can be '0') and port. # INT_IP, INT_PORT: internal server address and port # IN_MARK: arbitrary value to use when marking pkts (ipchains -m) # FTP: if not-null activate ftp support # REDIR: path to redir-2.2.x (set to "" to avoid using) export PATH="/sbin:/usr/sbin:$PATH" EXT_IP=192.168.2.16 EXT_PORT=2021 INT_IP=10.1.1.128 INT_PORT=21 IN_MARK=4321 FTP=1 REDIR="/usr/sbin/redir" FW_IPCHAINS="-i eth0 -d $EXT_IP $EXT_PORT -p tcp" PID_FILE="/var/run/redir-$EXT_IP-$EXT_PORT" # seems ascii art... but it runs!! =) # run() { $* || { echo "-> '$*'" return 1 } } get_pid() { test -f $PID_FILE || return 1 typeset pid=`cat $PID_FILE` test -n "$pid" || return 1 kill -0 $pid || return 1 echo $pid } exit_err() { ERR=$1;shift echo $@ >&2 exit $ERR } redir_on() { test -n "$REDIR" || return 1 test -n "$FTP" && REDIR="$REDIR --ftp=both" $SHELL -c 'echo $$ > '"$PID_FILE exec $REDIR \ --laddr $EXT_IP --lport $EXT_PORT \ --caddr $INT_IP --cport $INT_PORT " & } redir_off() { test -n "$REDIR" || return 1 if pid=`get_pid`;then kill $pid rm $PID_FILE fi fuser -k -n tcp $EXT_PORT } case "$1" in start) #run modprobe ip_masq_mfw run ipmasqadm mfw -I -m $IN_MARK -r $INT_IP $INT_PORT if test -n "$FTP";then run modprobe ip_masq_ftp in_mark=$IN_MARK || \ exit_err 1 "Incorrect ftp module version ?" fi run ipchains -m $IN_MARK -I input $FW_IPCHAINS redir_on ;; stop) run ipchains -m $IN_MARK -D input $FW_IPCHAINS if test -n "$FTP";then run rmmod ip_masq_ftp fi run ipmasqadm mfw -D -m $IN_MARK -r $INT_IP $INT_PORT #run ipmasqadm mfw -F #run rmmod ip_masq_mfw redir_off ;; esac 00-INDEX - this file (info on CD-ROMs and Linux) Makefile - only used to generate TeX output from the documentation. aztcd - info on Aztech/Orchid/Okano/Wearnes/Conrad/CyCDROM driver. cdrom-standard.tex - LaTeX document on standardizing the CD-ROM programming interface. cdu31a - info on the Sony CDU31A/CDU33A CD-ROM driver. cm206 - info on the Philips/LMS cm206/cm260 CD-ROM driver. gscd - info on the Goldstar R420 CD-ROM driver. ide-cd - info on setting up and using ATAPI (aka IDE) CD-ROMs. isp16 - info on the CD-ROM interface on ISP16, MAD16 or Mozart sound card. mcd - info on limitations of standard Mitsumi CD-ROM driver. mcdx - info on improved Mitsumi CD-ROM driver. optcd - info on the Optics Storage 8000 AT CD-ROM driver sbpcd - info on the SoundBlaster/Panasonic CD-ROM interface driver. sjcd - info on the SANYO CDR-H94A CD-ROM interface driver. sonycd535 - info on the Sony CDU-535 (and 531) CD-ROM driver. $Id: README.aztcd,v 2.60 1997/11/29 09:51:25 root Exp root $ Readme-File /usr/src/Documentation/cdrom/aztcd for AZTECH CD-ROM CDA268-01A, ORCHID CD-3110, OKANO/WEARNES CDD110, CONRAD TXC, CyCDROM CR520, CR540 CD-ROM Drives Version 2.6 and newer (for other drives see 6.-8.) NOTE: THIS DRIVER WILL WORK WITH THE CD-ROM DRIVES LISTED, WHICH HAVE A PROPRIETARY INTERFACE (implemented on a sound card or on an ISA-AT-bus card). IT WILL DEFINITELY NOT WORK WITH CD-ROM DRIVES WITH *IDE*-INTERFACE, such as the Aztech CDA269-031SE !!! (The only known exceptions are 'faked' IDE drives like the CyCDROM CR520ie which work with aztcd under certain conditions, see 7.). IF YOU'RE USING A CD-ROM DRIVE WITH IDE-INTERFACE, SOMETIMES ALSO CALLED ATAPI-COMPATIBLE, PLEASE USE THE ide-cd.c DRIVER, WRITTEN BY MARK LORD AND SCOTT SNYDER ! THE STANDARD-KERNEL 1.2.x NOW ALSO SUPPORTS IDE-CDROM-DRIVES, SEE THE HARDDISK (!) SECTION OF make config, WHEN COMPILING A NEW KERNEL!!! ---------------------------------------------------------------------------- Contents of this file: 1. NOTE 2. INSTALLATION 3. CONFIGURING YOUR KERNEL 4. RECOMPILING YOUR KERNEL 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE 4.2 CDROM CONNECTED TO A SOUNDCARD 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 5.1 MULTISESSION SUPPORT 5.2 STATUS RECOGNITION 5.3 DOSEMU's CDROM SUPPORT 6. BUG REPORTS 7. OTHER DRIVES 8. IF YOU DON'T SUCCEED ... DEBUGGING 9. TECHNICAL HISTORY OF THE DRIVER 10. ACKNOWLEDGMENTS 11. PROGRAMMING ADD ONS: CDPLAY.C APPENDIX: Source code of cdplay.c ---------------------------------------------------------------------------- 1. NOTE This software has been successfully in alpha and beta test and is part of the standard kernel since kernel 1.1.8x since December 1994. It works with AZTECH CDA268-01A, ORCHID CDS-3110, ORCHID/WEARNES CDD110 and CONRAD TXC (Nr.99 31 23 -series 04) and has proven to be stable with kernel versions 1.0.9 and newer. But with any software there still may be bugs in it. So if you encounter problems, you are invited to help us improve this software. Please send me a detailed bug report (see chapter BUG REPORTS). You are also invited in helping us to increase the number of drives, which are supported. Please read the README-files carefully and always keep a backup copy of your old kernel, in order to reboot if something goes wrong! 2. INSTALLATION The driver consists of a header file 'aztcd.h', which normally should reside in /usr/src/linux/drivers/cdrom and the source code 'aztcd.c', which normally resides in the same place. It uses /dev/aztcd (/dev/aztcd0 in some distri- butions), which must be a valid block device with major number 29 and reside in directory /dev. To mount a CD-ROM, your kernel needs to have the ISO9660- filesystem support included. PLEASE NOTE: aztcd.c has been developed in parallel to the linux kernel, which had and is having many major and minor changes which are not backward compatible. Quite definitely aztcd.c version 1.80 and newer will NOT work in kernels older than 1.3.33. So please always use the most recent version of aztcd.c with the appropriate linux-kernel. 3. CONFIGURING YOUR KERNEL If your kernel is already configured for using the AZTECH driver you will see the following message while Linux boots: Aztech CD-ROM Init: DriverVersion= BaseAddress= Aztech CD-ROM Init: FirmwareVersion=>> Aztech CD-ROM Init: detected Aztech CD-ROM Init: End If the message looks different and you are sure to have a supported drive, it may have a different base address. The Aztech driver does look for the CD-ROM drive at the base address specified in aztcd.h at compile time. This address can be overwritten by boot parameter aztcd=....You should reboot and start Linux with boot parameter aztcd=, e.g. aztcd=0x320. If you do not know the base address, start your PC with DOS and look at the boot message of your CD-ROM's DOS driver. If that still does not help, use boot parameter aztcd=,0x79 , this tells aztcd to try a little harder. aztcd may be configured to use autoprobing the base address by recompiling it (see chapter 4.). If the message looks correct, as user 'root' you should be able to mount the drive by mount -t iso9660 -r /dev/aztcd0 /mnt and use it as any other filesystem. (If this does not work, check if /dev/aztcd0 and /mnt do exist and create them, if necessary by doing mknod /dev/aztcd0 b 29 0 mkdir /mnt If you still get a different message while Linux boots or when you get the message, that the ISO9660-filesystem is not supported by your kernel, when you try to mount the CD-ROM drive, you have to recompile your kernel. If you do *not* have an Aztech/Orchid/Okano/Wearnes/TXC drive and want to bypass drive detection during Linux boot up, start with boot parameter aztcd=0. Most distributions nowadays do contain a boot disk image containing aztcd. Please note, that this driver will not work with IDE/ATAPI drives! With these you must use ide-cd.c instead. 4. RECOMPILING YOUR KERNEL If your kernel is not yet configured for the AZTECH driver and the ISO9660- filesystem, you have to recompile your kernel: - Edit aztcd.h to set the I/O-address to your I/O-Base address (AZT_BASE_ADDR), the driver does not use interrupts or DMA, so if you are using an AZTECH CD268, an ORCHID CD-3110 or ORCHID/WEARNES CDD110 that's the only item you have to set up. If you have a soundcard, read chapter 4.2. Users of other drives should read chapter OTHER DRIVES of this file. You also can configure that address by kernel boot parameter aztcd=... - aztcd may be configured to use autoprobing the base address by setting AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed under AZT_BASE_AUTO. But please remember, that autoprobing always may incorrectly influence other hardware components too! - There are some other points, which may be configured, e.g. auto-eject the CD when unmounting a drive, tray locking etc., see aztcd.h for details. - If you're using a linux kernel version prior to 2.1.0, in aztcd.h uncomment the line '#define AZT_KERNEL_PRIOR_2_1' - Build a new kernel, configure it for 'Aztech/Orchid/Okano/Wearnes support' (if you want aztcd to be part of the kernel). Do not configure it for 'Aztech... support', if you want to use aztcd as a run time loadable module. But in any case you must have the ISO9660-filesystem included in your kernel. - Activate the new kernel, normally this is done by running LILO (don't for- get to configure it before and to keep a copy of your old kernel in case something goes wrong!). - Reboot - If you've included aztcd in your kernel, you now should see during boot some messages like Aztech CD-ROM Init: DriverVersion= BaseAddress= Aztech CD-ROM Init: FirmwareVersion= Aztech CD-ROM Init: detected Aztech CD-ROM Init: End - If you have not included aztcd in your kernel, but want to load aztcd as a run time loadable module see 4.1. - If the message looks correct, as user 'root' you should be able to mount the drive by mount -t iso9660 -r /dev/aztcd0 /mnt and use it as any other filesystem. (If this does not work, check if /dev/aztcd0 and /mnt do exist and create them, if necessary by doing mknod /dev/aztcd0 b 29 0 mkdir /mnt - If this still does not help, see chapters OTHER DRIVES and DEBUGGING. 4.1 AZTCD AS A RUN-TIME LOADABLE MODULE If you do not need aztcd permanently, you can also load and remove the driver during runtime via insmod and rmmod. To build aztcd as a loadable module you must configure your kernel for AZTECH module support (answer 'm' when con- figuring the kernel). Anyhow, you may run into problems, if the version of your boot kernel is not the same than the source kernel version, from which you create the modules. So rebuild your kernel, if necessary. Now edit the base address of your AZTECH interface card in /usr/src/linux/drivers/cdrom/aztcd.h to the appropriate value. aztcd may be configured to use autoprobing the base address by setting AZT_BASE_ADDR to '-1'. In that case aztcd probes the addresses listed under AZT_BASE_AUTO. But please remember, that autoprobing always may incorrectly influence other hardware components too! There are also some special features which may be configured, e.g. auto-eject a CD when unmounting the drive etc; see aztcd.h for details. Then change to /usr/src/linux and do a make modules make modules_install After that you can run-time load the driver via insmod /lib/modules/X.X.X/misc/aztcd.o and remove it via rmmod aztcd. If you did not set the correct base address in aztcd.h, you can also supply the base address when loading the driver via insmod /lib/modules/X.X.X/misc/aztcd.o aztcd= Again specifying aztcd=-1 will cause autoprobing. If you do not have the iso9660-filesystem in your boot kernel, you also have to load it before you can mount the CDROM: insmod /lib/modules/X.X.X/fs/isofs.o The mount procedure works as described in 4. above. (In all commands 'X.X.X' is the current linux kernel version number. For details see file modules.txt in /usr/src/linux/Documentation) 4.2 CDROM CONNECTED TO A SOUNDCARD Most soundcards do have a bus interface to the CDROM-drive. In many cases this soundcard needs to be configured, before the CDROM can be used. This configuration procedure consists of writing some kind of initialization data to the soundcard registers. The AZTECH-CDROM driver in the moment does only support one type of soundcard (SoundWave32). Users of other soundcards should try to boot DOS first and let their DOS drivers initialize the soundcard and CDROM, then warm boot (or use loadlin) their PC to start Linux. Support for the CDROM-interface of SoundWave32-soundcards is directly implemented in the AZTECH driver. Please edit linux/drivers/cdrom/aztdc.h, uncomment line '#define AZT_SW32' and set the appropriate value for AZT_BASE_ADDR and AZT_SW32_BASE_ADDR. This support was tested with an Orchid CDS-3110 connected to a SoundWave32. If you want your soundcard to be supported, find out, how it needs to be configured and mail me (see 6.) the appropriate information. 5. KNOWN PROBLEMS, FUTURE DEVELOPMENTS 5.1 MULTISESSION SUPPORT Multisession support for CD's still is a myth. I implemented and tested a basic support for multisession and XA CDs, but I still have not enough CDs and appli- cations to test it rigorously. So if you'd like to help me, please contact me (Email address see below). As of version 1.4 and newer you can enable the multisession support in aztcd.h by setting AZT_MULTISESSION to 1. Doing so will cause the ISO9660-filesystem to deal with multisession CDs, ie. redirect requests to the Table of Contents (TOC) information from the last session, which contains the info of all previous sessions etc.. If you do set AZT_MULTISESSION to 0, you can use multisession CDs anyway. In that case the drive's firmware will do automatic redirection. For the ISO9660-filesystem any multisession CD will then look like a 'normal' single session CD. But never- theless the data of all sessions are viewable and accessible. So with practical- ly all real world applications you won't notice the difference. But as future applications may make use of advanced multisession features, I've started to implement the interface for the ISO9660 multisession interface via ioctl CDROMMULTISESSION. 5.2 STATUS RECOGNITION The drive status recognition does not work correctly in all cases. Changing a disk or having the door open, when a drive is already mounted, is detected by the Aztech driver itself, but nevertheless causes multiple read attempts by the different layers of the ISO9660-filesystem driver, which finally timeout, so you have to wait quite a little... But isn't it bad style to change a disk in a mounted drive, anyhow ?! The driver uses busy wait in most cases for the drive handshake (macros STEN_LOW and DTEN_LOW). I tested with a 486/DX2 at 66MHz and a Pentium at 60MHz and 90MHz. Whenever you use a much faster machine you are likely to get timeout messages. In that case edit aztcd.h and increase the timeout value AZT_TIMEOUT. For some 'slow' drive commands I implemented waiting with a timer waitqueue (macro STEN_LOW_WAIT). If you get this timeout message, you may also edit aztcd.h and increase the timeout value AZT_STATUS_DELAY. The waitqueue has shown to be a little critical. If you get kernel panic messages, edit aztcd.c and substitute STEN_LOW_WAIT by STEN_LOW. Busy waiting with STEN_LOW is more stable, but also causes CPU overhead. 5.3 DOSEMU's CD-ROM SUPPORT With release 1.20 aztcd was modified to allow access to CD-ROMS when running under dosemu-0.60.0 aztcd-versions before 1.20 are most likely to crash Linux, when a CD-ROM is accessed under dosemu. This problem has partly been fixed, but still when accessing a directory for the first time the system might hang for some 30sec. So be patient, when using dosemu's CD-ROM support in combination with aztcd :-) ! This problem has now (July 1995) been fixed by a modification to dosemu's CD-ROM driver. The new version came with dosemu-0.60.2, see dosemu's README.CDROM. 6. BUG REPORTS Please send detailed bug reports and bug fixes via EMail to Werner.Zimmermann@fht-esslingen.de Please include a description of your CD-ROM drive type and interface card, the exact firmware message during Linux bootup, the version number of the AZTECH-CDROM-driver and the Linux kernel version. Also a description of your system's other hardware could be of interest, especially microprocessor type, clock frequency, other interface cards such as soundcards, ethernet adapter, game cards etc.. I will try to collect the reports and make the necessary modifications from time to time. I may also come back to you directly with some bug fixes and ask you to do further testing and debugging. Editors of CD-ROMs are invited to send a 'cooperation' copy of their CD-ROMs to the volunteers, who provided the CD-ROM support for Linux. My snail mail address for such 'stuff' is Prof. Dr. W. Zimmermann Fachhochschule fuer Technik Esslingen Fachbereich IT Flandernstrasse 101 D-73732 Esslingen Germany 7. OTHER DRIVES The following drives ORCHID CDS3110, OKANO CDD110, WEARNES CDD110 and Conrad TXC Nr. 993123-series 04 nearly look the same as AZTECH CDA268-01A, especially they seem to use the same command codes. So it was quite simple to make the AZTECH driver work with these drives. Unfortunately I do not have any of these drives available, so I couldn't test it myself. In some installations, it seems necessary to initialize the drive with the DOS driver before (especially if combined with a sound card) and then do a warm boot (CTRL-ALT-RESET) or start Linux from DOS, e.g. with 'loadlin'. If you do not succeed, read chapter DEBUGGING. Thanks in advance! Sorry for the inconvenience, but it is difficult to develop for hardware, which you don't have available for testing. So if you like, please help us. If you do have a CyCDROM CR520ie thanks to Hilmar Berger's help your chances are good, that it will work with aztcd. The CR520ie is sold as an IDE-drive and really is connected to the IDE interface (primary at 0x1F0 or secondary at 0x170, configured as slave, not as master). Nevertheless it is not ATAPI compatible but still uses Aztech's command codes. 8. DEBUGGING : IF YOU DON'T SUCCEED, TRY THE FOLLOWING -reread the complete README file -make sure, that your drive is hardware configured for transfer mode: polled IRQ: not used DMA: not used Base Address: something like 300, 320 ... You can check this, when you start the DOS driver, which came with your drive. By appropriately configuring the drive and the DOS driver you can check, whether your drive does operate in this mode correctly under DOS. If it does not operate under DOS, it won't under Linux. If your drive's base address is something like 0x170 or 0x1F0 (and it is not a CyCDROM CR520ie or CR 940ie) you most likely are having an IDE/ATAPI- compatible drive, which is not supported by aztcd.c, use ide-cd.c instead. Make sure the Base Address is configured correctly in aztcd.h, also make sure, that /dev/aztcd0 exists with the correct major number (compare it with the entry in file /usr/include/linux/major.h for the Aztech drive). -insert a CD-ROM and close the tray -cold boot your PC (i.e. via the power on switch or the reset button) -if you start Linux via DOS, e.g. using loadlin, make sure, that the DOS driver for the CD-ROM drive is not loaded (comment out the calling lines in DOS' config.sys!) -look for the aztcd: init message during Linux init and note them exactly -log in as root and do a mount -t iso9660 /dev/aztcd0 /mnt -if you don't succeed in the first time, try several times. Try also to open and close the tray, then mount again. Please note carefully all commands you typed in and the aztcd-messages, which you get. -if you get an 'Aztech CD-ROM init: aborted' message, read the remarks about the version string below. If this does not help, do the same with the following differences -start DOS before; make now sure, that the DOS driver for the CD-ROM is loaded under DOS (i.e. uncomment it again in config.sys) -warm boot your PC (i.e. via CTRL-ALT-DEL) if you have it, you can also start via loadlin (try both). ... Again note all commands and the aztcd-messages. If you see STEN_LOW or STEN_LOW_WAIT error messages, increase the timeout values. If this still does not help, -look in aztcd.c for the lines #if 0 #define AZT_TEST1 ... #endif and substitute '#if 0' by '#if 1'. -recompile your kernel and repeat the above two procedures. You will now get a bundle of debugging messages from the driver. Again note your commands and the appropriate messages. If you have syslogd running, these messages may also be found in syslogd's kernel log file. Nevertheless in some installations syslogd does not yet run, when init() is called, thus look for the aztcd-messages during init, before the login-prompt appears. Then look in aztcd.c, to find out, what happened. The normal calling sequence is: aztcd_init() during Linux bootup procedure init() after doing a 'mount -t iso9660 /dev/aztcd0 /mnt' the normal calling sequence is aztcd_open() -> Status 2c after cold reboot with CDROM or audio CD inserted -> Status 8 after warm reboot with CDROM inserted -> Status 2e after cold reboot with no disk, closed tray -> Status 6e after cold reboot, mount with door open aztUpdateToc() aztGetDiskInfo() aztGetQChannelInfo() repeated several times aztGetToc() aztGetQChannelInfo() repeated several times a list of track information do_aztcd_request() } azt_transfer() } repeated several times azt_poll } Check, if there is a difference in the calling sequence or the status flags! There are a lot of other messages, eg. the ACMD-command code (defined in aztcd.h), status info from the getAztStatus-command and the state sequence of the finite state machine in azt_poll(). The most important are the status messages, look how they are defined and try to understand, if they make sense in the context where they appear. With a CD-ROM inserted the status should always be 8, except in aztcd_open(). Try to open the tray, insert an audio disk, insert no disk or reinsert the CD-ROM and check, if the status bits change accordingly. The status bits are the most likely point, where the drive manufacturers may implement changes. If you still don't succeed, a good point to start is to look in aztcd.c in function aztcd_init, where the drive should be detected during init. Do the following: -reboot the system with boot parameter 'aztcd=,0x79'. With parameter 0x79 most of the drive version detection is bypassed. After that you should see the complete version string including leading and trailing blanks during init. Now adapt the statement if ((result[1]=='A')&&(result[2]=='Z' ...) in aztcd_init() to exactly match the first 3 or 4 letters you have seen. -Another point is the 'smart' card detection feature in aztcd_init(). Normally the CD-ROM drive is ready, when aztcd_init is trying to read the version string and a time consuming ACMD_SOFT_RESET command can be avoided. This is detected by looking, if AFL_OP_OK can be read correctly. If the CD-ROM drive hangs in some unknown state, e.g. because of an error before a warm start or because you first operated under DOS, even the version string may be correct, but the following commands will not. Then change the code in such a way, that the ACMD_SOFT_RESET is issued in any case, by substituting the if-statement 'if ( ...=AFL_OP_OK)' by 'if (1)'. If you succeed, please mail me the exact version string of your drive and the code modifications, you have made together with a short explanation. If you don't succeed, you may mail me the output of the debugging messages. But remember, they are only useful, if they are exact and complete and you describe in detail your hardware setup and what you did (cold/warm reboot, with/without DOS, DOS-driver started/not started, which Linux-commands etc.) 9. TECHNICAL HISTORY OF THE DRIVER The AZTECH-Driver is a rework of the Mitsumi-Driver. Four major items had to be reworked: a) The Mitsumi drive does issue complete status information acknowledging each command, the Aztech drive does only signal that the command was processed. So whenever the complete status information is needed, an extra ACMD_GET_STATUS command is issued. The handshake procedure for the drive can be found in the functions aztSendCmd(), sendAztCmd() and getAztStatus(). b) The Aztech Drive does not have a ACMD_GET_DISK_INFO command, so the necessary info about the number of tracks (firstTrack, lastTrack), disk length etc. has to be read from the TOC in the lead in track (see function aztGetDiskInfo()). c) Whenever data is read from the drive, the Mitsumi drive is started with a command to read an indefinite (0xffffff) number of sectors. When the appropriate number of sectors is read, the drive is stopped by a ACDM_STOP command. This does not work with the Aztech drive. I did not find a way to stop it. The stop and pause commands do only work in AUDIO mode but not in DATA mode. Therefore I had to modify the 'finite state machine' in function azt_poll to only read a certain number of sectors and then start a new read on demand. As I have not completely understood, how the buffer/caching scheme of the Mitsumi driver was implemented, I am not sure, if I have covered all cases correctly, whenever you get timeout messages, the bug is most likely to be in that function azt_poll() around switch(cmd) .... case ACD_S_DATA. d) I did not get information about changing drive mode. So I doubt, that the code around function azt_poll() case AZT_S_MODE does work. In my test I have not been able to switch to reading in raw mode. For reading raw mode, Aztech uses a different command than for cooked mode, which I only have implemen- ted in the ioctl-section but not in the section which is used by the ISO9660. The driver was developed on an AST PC with Intel 486/DX2, 8MB RAM, 340MB IDE hard disk and on an AST PC with Intel Pentium 60MHz, 16MB RAM, 520MB IDE running Linux kernel version 1.0.9 from the LST 1.8 Distribution. The kernel was compiled with gcc.2.5.8. My CD-ROM drive is an Aztech CDA268-01A. My drive says, that it has Firmware Version AZT26801A1.3. It came with an ISA-bus interface card and works with polled I/O without DMA and without interrupts. The code for all other drives was 'remote' tested and debugged by a number of volunteers on the Internet. Points, where I feel that possible problems might be and all points where I did not completely understand the drive's behaviour or trust my own code are marked with /*???*/ in the source code. There are also some parts in the Mitsumi driver, where I did not completely understand their code. 10. ACKNOWLEDGMENTS Without the help of P.Bush, Aztech, who delivered technical information about the Aztech Drive and without the help of E.Moenkeberg, GWDG, who did a great job in analyzing the command structure of various CD-ROM drives, this work would not have been possible. E.Moenkeberg was also a great help in making the software 'kernel ready' and in answering many of the CDROM-related questions in the newsgroups. He really is *the* Linux CD-ROM guru. Thanks also to all the guys on the Internet, who collected valuable technical information about CDROMs. Joe Nardone (joe@access.digex.net) was a patient tester even for my first trial, which was more than slow, and made suggestions for code improvement. Especially the 'finite state machine' azt_poll() was rewritten by Joe to get clean C code and avoid the ugly 'gotos', which I copied from mcd.c. Robby Schirmer (schirmer@fmi.uni-passau.de) tested the audio stuff (ioctls) and suggested a lot of patches for them. Joseph Piskor and Peter Nugent were the first users with the ORCHID CD3110 and also were very patient with the problems which occurred. Reinhard Max delivered the information for the CDROM-interface of the SoundWave32 soundcards. Jochen Kunz and Olaf Kaluza delivered the information for supporting Conrad's TXC drive. Hilmar Berger delivered the patches for supporting CyCDROM CR520ie. Anybody, who is interested in these items should have a look at 'ftp.gwdg.de', directory 'pub/linux/cdrom' and at 'ftp.cdrom.com', directory 'pub/cdrom'. 11. PROGRAMMING ADD ONs: cdplay.c You can use the ioctl-functions included in aztcd.c in your own programs. As an example on how to do this, you will find a tiny CD Player for audio CDs named 'cdplay.c'. It allows you to play audio CDs. You can play a specified track, pause and resume or skip tracks forward and backwards. If you quit the program without stopping the drive, playing is continued. You can also (mis)use cdplay to read and hexdump data disks. You can find the code in the APPENDIX of this file, which you should cut out with an editor and store in a separate file 'cdplay.c'. To compile it and make it executable, do gcc -s -Wall -O2 -L/usr/lib cdplay.c -o /usr/local/bin/cdplay # compiles it chmod +755 /usr/local/bin/cdplay # makes it executable ln -s /dev/aztcd0 /dev/cdrom # creates a link (for /usr/lib substitute the top level directory, where your include files reside, and for /usr/local/bin the directory, where you want the executable binary to reside ) You have to set the correct permissions for cdplay *and* for /dev/mcd0 or /dev/aztcd0 in order to use it. Remember, that you should not have /dev/cdrom mounted, when you're playing audio CDs. This program is just a hack for testing the ioctl-functions in aztcd.c. I will not maintain it, so if you run into problems, discard it or have a look into the source code 'cdplay.c'. The program does only contain a minimum of user protection and input error detection. If you use the commands in the wrong order or if you try to read a CD at wrong addresses, you may get error messages or even hang your machine. If you get STEN_LOW, STEN_LOW_WAIT or segment violation error messages when using cdplay, after that, the system might not be stable any more, so you'd better reboot. As the ioctl-functions run in kernel mode, most normal Linux-multitasking protection features do not work. By using uninitialized 'wild' pointers etc., it is easy to write to other users' data and program areas, destroy kernel tables etc.. So if you experiment with ioctls as always when you are doing systems programming and kernel hacking, you should have a backup copy of your system in a safe place (and you also should try restoring from a backup copy first)! A reworked and improved version called 'cdtester.c', which has yet more features for testing CDROM-drives can be found in /usr/src/linux/Documentation/cdrom/sbpcd, written by E.Moenkeberg. Werner Zimmermann Fachhochschule fuer Technik Esslingen (EMail: Werner.Zimmermann@fht-esslingen.de) October, 1997 --------------------------------------------------------------------------- APPENDIX: Source code of cdplay.c /* Tiny Audio CD Player Copyright 1994, 1995, 1996 Werner Zimmermann (Werner.Zimmermann@fht-esslingen.de) This program originally was written to test the audio functions of the AZTECH.CDROM-driver, but it should work with every CD-ROM drive. Before using it, you should set a symlink from /dev/cdrom to your real CDROM device. The GNU General Public License applies to this program. History: V0.1 W.Zimmermann: First release. Nov. 8, 1994 V0.2 W.Zimmermann: Enhanced functionality. Nov. 9, 1994 V0.3 W.Zimmermann: Additional functions. Nov. 28, 1994 V0.4 W.Zimmermann: fixed some bugs. Dec. 17, 1994 V0.5 W.Zimmermann: clean 'scanf' commands without compiler warnings Jan. 6, 1995 V0.6 W.Zimmermann: volume control (still experimental). Jan. 24, 1995 V0.7 W.Zimmermann: read raw modified. July 26, 95 */ #include #include #include #include #include #include #include #include void help(void) { printf("Available Commands: STOP s EJECT/CLOSE e QUIT q\n"); printf(" PLAY TRACK t PAUSE p RESUME r\n"); printf(" NEXT TRACK n REPEAT LAST l HELP h\n"); printf(" SUB CHANNEL c TRACK INFO i PLAY AT a\n"); printf(" READ d READ RAW w VOLUME v\n"); } int main(void) { int handle; unsigned char command=' ', ini=0, first=1, last=1; unsigned int cmd, i,j,k, arg1,arg2,arg3; struct cdrom_ti ti; struct cdrom_tochdr tocHdr; struct cdrom_subchnl subchnl; struct cdrom_tocentry entry; struct cdrom_msf msf; union { struct cdrom_msf msf; unsigned char buf[CD_FRAMESIZE_RAW]; } azt; struct cdrom_volctrl volctrl; printf("\nMini-Audio CD-Player V0.72 (C) 1994,1995,1996 W.Zimmermann\n"); handle=open("/dev/cdrom",O_RDWR); ioctl(handle,CDROMRESUME); if (handle<=0) { printf("Drive Error: already playing, no audio disk, door open\n"); printf(" or no permission (you must be ROOT in order to use this program)\n"); } else { help(); while (1) { printf("Type command (h = help): "); scanf("%s",&command); switch (command) { case 'e': cmd=CDROMEJECT; ioctl(handle,cmd); break; case 'p': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMPAUSE; if (ioctl(handle,cmd)) printf("Drive Error\n"); } break; case 'r': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMRESUME; if (ioctl(handle,cmd)) printf("Drive Error\n"); } break; case 's': cmd=CDROMPAUSE; if (ioctl(handle,cmd)) printf("Drive error or already stopped\n"); cmd=CDROMSTOP; if (ioctl(handle,cmd)) printf("Drive error\n"); break; case 't': cmd=CDROMREADTOCHDR; if (ioctl(handle,cmd,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { printf("--first track: %d --last track: %d --enter track number: ",first,last); cmd=CDROMPLAYTRKIND; scanf("%i",&arg1); ti.cdti_trk0=arg1; if (ti.cdti_trk0last) ti.cdti_trk0=last; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'n': if (!ini++) { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; ti.cdti_trk0=first-1; } if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { cmd=CDROMPLAYTRKIND; if (++ti.cdti_trk0 > last) ti.cdti_trk0=last; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'l': if (!ini++) { if (ioctl(handle,CDROMREADTOCHDR,&tocHdr)) printf("Drive Error\n"); first=tocHdr.cdth_trk0; last= tocHdr.cdth_trk1; ti.cdti_trk0=first+1; } if ((first==0)||(first>last)) { printf ("--could not read TOC\n"); } else { cmd=CDROMPLAYTRKIND; if (--ti.cdti_trk0 < first) ti.cdti_trk0=first; ti.cdti_ind0=0; ti.cdti_trk1=last; ti.cdti_ind1=0; if (ioctl(handle,cmd,&ti)) printf("Drive Error\n"); ini=1; } break; case 'c': subchnl.cdsc_format=CDROM_MSF; if (ioctl(handle,CDROMSUBCHNL,&subchnl)) printf("Drive Error\n"); else { printf("AudioStatus:%s Track:%d Mode:%d MSF=%d:%d:%d\n", \ subchnl.cdsc_audiostatus==CDROM_AUDIO_PLAY ? "PLAYING":"NOT PLAYING",\ subchnl.cdsc_trk,subchnl.cdsc_adr, \ subchnl.cdsc_absaddr.msf.minute, subchnl.cdsc_absaddr.msf.second, \ subchnl.cdsc_absaddr.msf.frame); } break; case 'i': if (!ini) { printf("Command not allowed - play track first\n"); } else { cmd=CDROMREADTOCENTRY; printf("Track No.: "); scanf("%d",&arg1); entry.cdte_track=arg1; if (entry.cdte_tracklast) entry.cdte_track=last; entry.cdte_format=CDROM_MSF; if (ioctl(handle,cmd,&entry)) { printf("Drive error or invalid track no.\n"); } else { printf("Mode %d Track, starts at %d:%d:%d\n", \ entry.cdte_adr,entry.cdte_addr.msf.minute, \ entry.cdte_addr.msf.second,entry.cdte_addr.msf.frame); } } break; case 'a': cmd=CDROMPLAYMSF; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); msf.cdmsf_min0 =arg1; msf.cdmsf_sec0 =arg2; msf.cdmsf_frame0=arg3; if (msf.cdmsf_sec0 > 59) msf.cdmsf_sec0 =59; if (msf.cdmsf_frame0> 74) msf.cdmsf_frame0=74; msf.cdmsf_min1=60; msf.cdmsf_sec1=00; msf.cdmsf_frame1=00; if (ioctl(handle,cmd,&msf)) { printf("Drive error or invalid address\n"); } break; #ifdef AZT_PRIVATE_IOCTLS /*not supported by every CDROM driver*/ case 'd': cmd=CDROMREADCOOKED; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); azt.msf.cdmsf_min0 =arg1; azt.msf.cdmsf_sec0 =arg2; azt.msf.cdmsf_frame0=arg3; if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; if (ioctl(handle,cmd,&azt.msf)) { printf("Drive error, invalid address or unsupported command\n"); } k=0; getchar(); for (i=0;i<128;i++) { printf("%4d:",i*16); for (j=0;j<16;j++) { printf("%2x ",azt.buf[i*16+j]); } for (j=0;j<16;j++) { if (isalnum(azt.buf[i*16+j])) printf("%c",azt.buf[i*16+j]); else printf("."); } printf("\n"); k++; if (k>=20) { printf("press ENTER to continue\n"); getchar(); k=0; } } break; case 'w': cmd=CDROMREADRAW; printf("Address (min:sec:frame) "); scanf("%d:%d:%d",&arg1,&arg2,&arg3); azt.msf.cdmsf_min0 =arg1; azt.msf.cdmsf_sec0 =arg2; azt.msf.cdmsf_frame0=arg3; if (azt.msf.cdmsf_sec0 > 59) azt.msf.cdmsf_sec0 =59; if (azt.msf.cdmsf_frame0> 74) azt.msf.cdmsf_frame0=74; if (ioctl(handle,cmd,&azt)) { printf("Drive error, invalid address or unsupported command\n"); } k=0; for (i=0;i<147;i++) { printf("%4d:",i*16); for (j=0;j<16;j++) { printf("%2x ",azt.buf[i*16+j]); } for (j=0;j<16;j++) { if (isalnum(azt.buf[i*16+j])) printf("%c",azt.buf[i*16+j]); else printf("."); } printf("\n"); k++; if (k>=20) { getchar(); k=0; } } break; #endif case 'v': cmd=CDROMVOLCTRL; printf("--Channel 0 Left (0-255): "); scanf("%d",&arg1); printf("--Channel 1 Right (0-255): "); scanf("%d",&arg2); volctrl.channel0=arg1; volctrl.channel1=arg2; volctrl.channel2=0; volctrl.channel3=0; if (ioctl(handle,cmd,&volctrl)) { printf("Drive error or unsupported command\n"); } break; case 'q': if (close(handle)) printf("Drive Error: CLOSE\n"); exit(0); case 'h': help(); break; default: printf("unknown command\n"); break; } } } return 0; } \documentclass{article} \def\version{$Id: cdrom-standard.tex,v 1.9 1997/12/28 15:42:49 david Exp $} \newcommand{\newsection}[1]{\newpage\section{#1}} \evensidemargin=0pt \oddsidemargin=0pt \topmargin=-\headheight \advance\topmargin by -\headsep \textwidth=15.99cm \textheight=24.62cm % normal A4, 1'' margin \def\linux{{\sc Linux}} \def\cdrom{{\sc cd-rom}} \def\UCD{{\sc Uniform cd-rom Driver}} \def\cdromc{{\tt {cdrom.c}}} \def\cdromh{{\tt {cdrom.h}}} \def\fo{\sl} % foreign words \def\ie{{\fo i.e.}} \def\eg{{\fo e.g.}} \everymath{\it} \everydisplay{\it} \catcode `\_=\active \def_{\_\penalty100 } \catcode`\<=\active \def<#1>{{\langle\hbox{\rm#1}\rangle}} \begin{document} \title{A \linux\ \cdrom\ standard} \author{David van Leeuwen\\{\normalsize\tt david@ElseWare.cistron.nl} \\{\footnotesize updated by Erik Andersen {\tt(andersee@debian.org)}} \\{\footnotesize updated by Jens Axboe {\tt(axboe@suse.de)}}} \date{12 March 1999} \maketitle \newsection{Introduction} \linux\ is probably the Unix-like operating system that supports the widest variety of hardware devices. The reasons for this are presumably \begin{itemize} \item The large list of hardware devices available for the many platforms that \linux\ now supports (\ie, i386-PCs, Sparc Suns, etc.) \item The open design of the operating system, such that anybody can write a driver for \linux. \item There is plenty of source code around as examples of how to write a driver. \end{itemize} The openness of \linux, and the many different types of available hardware has allowed \linux\ to support many different hardware devices. Unfortunately, the very openness that has allowed \linux\ to support all these different devices has also allowed the behavior of each device driver to differ significantly from one device to another. This divergence of behavior has been very significant for \cdrom\ devices; the way a particular drive reacts to a `standard' $ioctl()$ call varies greatly from one device driver to another. To avoid making their drivers totally inconsistent, the writers of \linux\ \cdrom\ drivers generally created new device drivers by understanding, copying, and then changing an existing one. Unfortunately, this practice did not maintain uniform behavior across all the \linux\ \cdrom\ drivers. This document describes an effort to establish Uniform behavior across all the different \cdrom\ device drivers for \linux. This document also defines the various $ioctl$s, and how the low-level \cdrom\ device drivers should implement them. Currently (as of the \linux\ 2.1.$x$ development kernels) several low-level \cdrom\ device drivers, including both IDE/ATAPI and SCSI, now use this Uniform interface. When the \cdrom\ was developed, the interface between the \cdrom\ drive and the computer was not specified in the standards. As a result, many different \cdrom\ interfaces were developed. Some of them had their own proprietary design (Sony, Mitsumi, Panasonic, Philips), other manufacturers adopted an existing electrical interface and changed the functionality (CreativeLabs/SoundBlaster, Teac, Funai) or simply adapted their drives to one or more of the already existing electrical interfaces (Aztech, Sanyo, Funai, Vertos, Longshine, Optics Storage and most of the `NoName' manufacturers). In cases where a new drive really brought its own interface or used its own command set and flow control scheme, either a separate driver had to be written, or an existing driver had to be enhanced. History has delivered us \cdrom\ support for many of these different interfaces. Nowadays, almost all new \cdrom\ drives are either IDE/ATAPI or SCSI, and it is very unlikely that any manufacturer will create a new interface. Even finding drives for the old proprietary interfaces is getting difficult. When (in the 1.3.70's) I looked at the existing software interface, which was expressed through \cdromh, it appeared to be a rather wild set of commands and data formats.\footnote{I cannot recollect what kernel version I looked at, then, presumably 1.2.13 and 1.3.34---the latest kernel that I was indirectly involved in.} It seemed that many features of the software interface had been added to accommodate the capabilities of a particular drive, in an {\fo ad hoc\/} manner. More importantly, it appeared that the behavior of the `standard' commands was different for most of the different drivers: \eg, some drivers close the tray if an $open()$ call occurs when the tray is open, while others do not. Some drivers lock the door upon opening the device, to prevent an incoherent file system, but others don't, to allow software ejection. Undoubtedly, the capabilities of the different drives vary, but even when two drives have the same capability their drivers' behavior was usually different. I decided to start a discussion on how to make all the \linux\ \cdrom\ drivers behave more uniformly. I began by contacting the developers of the many \cdrom\ drivers found in the \linux\ kernel. Their reactions encouraged me to write the \UCD\ which this document is intended to describe. The implementation of the \UCD\ is in the file \cdromc. This driver is intended to be an additional software layer that sits on top of the low-level device drivers for each \cdrom\ drive. By adding this additional layer, it is possible to have all the different \cdrom\ devices behave {\em exactly\/} the same (insofar as the underlying hardware will allow). The goal of the \UCD\ is {\em not\/} to alienate driver developers who have not yet taken steps to support this effort. The goal of \UCD\ is simply to give people writing application programs for \cdrom\ drives {\em one\/} \linux\ \cdrom\ interface with consistent behavior for all \cdrom\ devices. In addition, this also provides a consistent interface between the low-level device driver code and the \linux\ kernel. Care is taken that 100\,\% compatibility exists with the data structures and programmer's interface defined in \cdromh. This guide was written to help \cdrom\ driver developers adapt their code to use the \UCD\ code defined in \cdromc. Personally, I think that the most important hardware interfaces are the IDE/ATAPI drives and, of course, the SCSI drives, but as prices of hardware drop continuously, it is also likely that people may have more than one \cdrom\ drive, possibly of mixed types. It is important that these drives behave in the same way. In December 1994, one of the cheapest \cdrom\ drives was a Philips cm206, a double-speed proprietary drive. In the months that I was busy writing a \linux\ driver for it, proprietary drives became obsolete and IDE/ATAPI drives became the standard. At the time of the last update to this document (November 1997) it is becoming difficult to even {\em find} anything less than a 16 speed \cdrom\ drive, and 24 speed drives are common. \newsection{Standardizing through another software level} \label{cdrom.c} At the time this document was conceived, all drivers directly implemented the \cdrom\ $ioctl()$ calls through their own routines. This led to the danger of different drivers forgetting to do important things like checking that the user was giving the driver valid data. More importantly, this led to the divergence of behavior, which has already been discussed. For this reason, the \UCD\ was created to enforce consistent \cdrom\ drive behavior, and to provide a common set of services to the various low-level \cdrom\ device drivers. The \UCD\ now provides another software-level, that separates the $ioctl()$ and $open()$ implementation from the actual hardware implementation. Note that this effort has made few changes which will affect a user's application programs. The greatest change involved moving the contents of the various low-level \cdrom\ drivers' header files to the kernel's cdrom directory. This was done to help ensure that the user is only presented with only one cdrom interface, the interface defined in \cdromh. \cdrom\ drives are specific enough (\ie, different from other block-devices such as floppy or hard disc drives), to define a set of common {\em \cdrom\ device operations}, $_dops$. These operations are different from the classical block-device file operations, $_fops$. The routines for the \UCD\ interface level are implemented in the file \cdromc. In this file, the \UCD\ interfaces with the kernel as a block device by registering the following general $struct\ file_operations$: $$ \halign{$#$\ \hfil&$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr struct& file_operations\ cdrom_fops = \{\hidewidth\cr &NULL, & lseek \cr &block_read, & read---general block-dev read \cr &block_write, & write---general block-dev write \cr &NULL, & readdir \cr &NULL, & select \cr &cdrom_ioctl, & ioctl \cr &NULL, & mmap \cr &cdrom_open, & open \cr &cdrom_release, & release \cr &NULL, & fsync \cr &NULL, & fasync \cr &cdrom_media_changed, & media change \cr &NULL & revalidate \cr \};\cr } $$ Every active \cdrom\ device shares this $struct$. The routines declared above are all implemented in \cdromc, since this file is the place where the behavior of all \cdrom-devices is defined and standardized. The actual interface to the various types of \cdrom\ hardware is still performed by various low-level \cdrom-device drivers. These routines simply implement certain {\em capabilities\/} that are common to all \cdrom\ (and really, all removable-media devices). Registration of a low-level \cdrom\ device driver is now done through the general routines in \cdromc, not through the Virtual File System (VFS) any more. The interface implemented in \cdromc\ is carried out through two general structures that contain information about the capabilities of the driver, and the specific drives on which the driver operates. The structures are: \begin{description} \item[$cdrom_device_ops$] This structure contains information about the low-level driver for a \cdrom\ device. This structure is conceptually connected to the major number of the device (although some drivers may have different major numbers, as is the case for the IDE driver). \item[$cdrom_device_info$] This structure contains information about a particular \cdrom\ drive, such as its device name, speed, etc. This structure is conceptually connected to the minor number of the device. \end{description} Registering a particular \cdrom\ drive with the \UCD\ is done by the low-level device driver though a call to: $$register_cdrom(struct\ cdrom_device_info * _info) $$ The device information structure, $_info$, contains all the information needed for the kernel to interface with the low-level \cdrom\ device driver. One of the most important entries in this structure is a pointer to the $cdrom_device_ops$ structure of the low-level driver. The device operations structure, $cdrom_device_ops$, contains a list of pointers to the functions which are implemented in the low-level device driver. When \cdromc\ accesses a \cdrom\ device, it does it through the functions in this structure. It is impossible to know all the capabilities of future \cdrom\ drives, so it is expected that this list may need to be expanded from time to time as new technologies are developed. For example, CD-R and CD-R/W drives are beginning to become popular, and support will soon need to be added for them. For now, the current $struct$ is: $$ \halign{$#$\ \hfil&$#$\ \hfil&\hbox to 10em{$#$\hss}& $/*$ \rm# $*/$\hfil\cr struct& cdrom_device_ops\ \{ \hidewidth\cr &int& (* open)(struct\ cdrom_device_info *, int)\cr &void& (* release)(struct\ cdrom_device_info *);\cr &int& (* drive_status)(struct\ cdrom_device_info *, int);\cr &int& (* media_changed)(struct\ cdrom_device_info *, int);\cr &int& (* tray_move)(struct\ cdrom_device_info *, int);\cr &int& (* lock_door)(struct\ cdrom_device_info *, int);\cr &int& (* select_speed)(struct\ cdrom_device_info *, int);\cr &int& (* select_disc)(struct\ cdrom_device_info *, int);\cr &int& (* get_last_session) (struct\ cdrom_device_info *, struct\ cdrom_multisession *{});\cr &int& (* get_mcn)(struct\ cdrom_device_info *, struct\ cdrom_mcn *{});\cr &int& (* reset)(struct\ cdrom_device_info *);\cr &int& (* audio_ioctl)(struct\ cdrom_device_info *, unsigned\ int, void *{});\cr &int& (* dev_ioctl)(struct\ cdrom_device_info *, unsigned\ int, unsigned\ long);\cr \noalign{\medskip} &const\ int& capability;& capability flags \cr &int& n_minors;& number of active minor devices \cr \};\cr } $$ When a low-level device driver implements one of these capabilities, it should add a function pointer to this $struct$. When a particular function is not implemented, however, this $struct$ should contain a NULL instead. The $capability$ flags specify the capabilities of the \cdrom\ hardware and/or low-level \cdrom\ driver when a \cdrom\ drive is registered with the \UCD. The value $n_minors$ should be a positive value indicating the number of minor devices that are supported by the low-level device driver, normally~1. Although these two variables are `informative' rather than `operational,' they are included in $cdrom_device_ops$ because they describe the capability of the {\em driver\/} rather than the {\em drive}. Nomenclature has always been difficult in computer programming. Note that most functions have fewer parameters than their $blkdev_fops$ counterparts. This is because very little of the information in the structures $inode$ and $file$ is used. For most drivers, the main parameter is the $struct$ $cdrom_device_info$, from which the major and minor number can be extracted. (Most low-level \cdrom\ drivers don't even look at the major and minor number though, since many of them only support one device.) This will be available through $dev$ in $cdrom_device_info$ described below. The drive-specific, minor-like information that is registered with \cdromc, currently contains the following fields: $$ \halign{$#$\ \hfil&$#$\ \hfil&\hbox to 10em{$#$\hss}& $/*$ \rm# $*/$\hfil\cr struct& cdrom_device_info\ \{ \hidewidth\cr & struct\ cdrom_device_ops *& ops;& device operations for this major\cr & struct\ cdrom_device_info *& next;& next device_info for this major\cr & void *& handle;& driver-dependent data\cr \noalign{\medskip} & kdev_t& dev;& device number (incorporates minor)\cr & int& mask;& mask of capability: disables them \cr & int& speed;& maximum speed for reading data \cr & int& capacity;& number of discs in a jukebox \cr \noalign{\medskip} &int& options : 30;& options flags \cr &unsigned& mc_flags : 2;& media-change buffer flags \cr & int& use_count;& number of times device is opened\cr & char& name[20];& name of the device type\cr \}\cr }$$ Using this $struct$, a linked list of the registered minor devices is built, using the $next$ field. The device number, the device operations struct and specifications of properties of the drive are stored in this structure. The $mask$ flags can be used to mask out some of the capabilities listed in $ops\to capability$, if a specific drive doesn't support a feature of the driver. The value $speed$ specifies the maximum head-rate of the drive, measured in units of normal audio speed (176\,kB/sec raw data or 150\,kB/sec file system data). The value $n_discs$ should reflect the number of discs the drive can hold simultaneously, if it is designed as a juke-box, or otherwise~1. The parameters are declared $const$ because they describe properties of the drive, which don't change after registration. A few registers contain variables local to the \cdrom\ drive. The flags $options$ are used to specify how the general \cdrom\ routines should behave. These various flags registers should provide enough flexibility to adapt to the different users' wishes (and {\em not\/} the `arbitrary' wishes of the author of the low-level device driver, as is the case in the old scheme). The register $mc_flags$ is used to buffer the information from $media_changed()$ to two separate queues. Other data that is specific to a minor drive, can be accessed through $handle$, which can point to a data structure specific to the low-level driver. The fields $use_count$, $next$, $options$ and $mc_flags$ need not be initialized. The intermediate software layer that \cdromc\ forms will perform some additional bookkeeping. The use count of the device (the number of processes that have the device opened) is registered in $use_count$. The function $cdrom_ioctl()$ will verify the appropriate user-memory regions for read and write, and in case a location on the CD is transferred, it will `sanitize' the format by making requests to the low-level drivers in a standard format, and translating all formats between the user-software and low level drivers. This relieves much of the drivers' memory checking and format checking and translation. Also, the necessary structures will be declared on the program stack. The implementation of the functions should be as defined in the following sections. Two functions {\em must\/} be implemented, namely $open()$ and $release()$. Other functions may be omitted, their corresponding capability flags will be cleared upon registration. Generally, a function returns zero on success and negative on error. A function call should return only after the command has completed, but of course waiting for the device should not use processor time. \subsection{$Int\ open(struct\ cdrom_device_info * cdi, int\ purpose)$} $Open()$ should try to open the device for a specific $purpose$, which can be either: \begin{itemize} \item[0] Open for reading data, as done by {\tt {mount()}} (2), or the user commands {\tt {dd}} or {\tt {cat}}. \item[1] Open for $ioctl$ commands, as done by audio-CD playing programs. \end{itemize} In case the driver supports modules, the call $MOD_INC_USE_COUNT$ should be performed exactly once, if the $open()$ was successful. The return value is negative on error, and zero on success. The open-for-ioctl call can only fail if there is no hardware. Notice that any strategic code (closing tray upon $open()$, etc.)\ is done by the calling routine in \cdromc, so the low-level routine should only be concerned with proper initialization, such as spinning up the disc, etc. % and device-use count \subsection{$Void\ release(struct\ cdrom_device_info * cdi)$} In case of module support, a single call $MOD_DEC_USE_COUNT$ should be coded here. Possibly other device-specific actions should be taken such as spinning down the device. However, strategic actions such as ejection of the tray, or unlocking the door, should be left over to the general routine $cdrom_release()$. Also, the invalidation of the allocated buffers in the VFS is taken care of by the routine in \cdromc. This is the only function returning type $void$. \subsection{$Int\ drive_status(struct\ cdrom_device_info * cdi, int\ slot_nr)$} \label{drive status} The function $drive_status$, if implemented, should provide information on the status of the drive (not the status of the disc, which may or may not be in the drive). If the drive is not a changer, $slot_nr$ should be ignored. In \cdromh\ the possibilities are listed: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDS_NO_INFO& no information available\cr CDS_NO_DISC& no disc is inserted, tray is closed\cr CDS_TRAY_OPEN& tray is opened\cr CDS_DRIVE_NOT_READY& something is wrong, tray is moving?\cr CDS_DISC_OK& a disc is loaded and everything is fine\cr } $$ \subsection{$Int\ media_changed(struct\ cdrom_device_info * cdi, int\ disc_nr)$} This function is very similar to the original function in $struct\ file_operations$. It returns 1 if the medium of the device $cdi\to dev$ has changed since the last call, and 0 otherwise. The parameter $disc_nr$ identifies a specific slot in a juke-box, it should be ignored for single-disc drives. Note that by `re-routing' this function through $cdrom_media_changed()$, we can implement separate queues for the VFS and a new $ioctl()$ function that can report device changes to software (\eg, an auto-mounting daemon). \subsection{$Int\ tray_move(struct\ cdrom_device_info * cdi, int\ position)$} This function, if implemented, should control the tray movement. (No other function should control this.) The parameter $position$ controls the desired direction of movement: \begin{itemize} \item[0] Close tray \item[1] Open tray \end{itemize} This function returns 0 upon success, and a non-zero value upon error. Note that if the tray is already in the desired position, no action need be taken, and the return value should be 0. \subsection{$Int\ lock_door(struct\ cdrom_device_info * cdi, int\ lock)$} This function (and no other code) controls locking of the door, if the drive allows this. The value of $lock$ controls the desired locking state: \begin{itemize} \item[0] Unlock door, manual opening is allowed \item[1] Lock door, tray cannot be ejected manually \end{itemize} This function returns 0 upon success, and a non-zero value upon error. Note that if the door is already in the requested state, no action need be taken, and the return value should be 0. \subsection{$Int\ select_speed(struct\ cdrom_device_info * cdi, int\ speed)$} Some \cdrom\ drives are capable of changing their head-speed. There are several reasons for changing the speed of a \cdrom\ drive. Badly pressed \cdrom s may benefit from less-than-maximum head rate. Modern \cdrom\ drives can obtain very high head rates (up to $24\times$ is common). It has been reported that these drives can make reading errors at these high speeds, reducing the speed can prevent data loss in these circumstances. Finally, some of these drives can make an annoyingly loud noise, which a lower speed may reduce. %Finally, %although the audio-low-pass filters probably aren't designed for it, %more than real-time playback of audio might be used for high-speed %copying of audio tracks. This function specifies the speed at which data is read or audio is played back. The value of $speed$ specifies the head-speed of the drive, measured in units of standard cdrom speed (176\,kB/sec raw data or 150\,kB/sec file system data). So to request that a \cdrom\ drive operate at 300\,kB/sec you would call the CDROM_SELECT_SPEED $ioctl$ with $speed=2$. The special value `0' means `auto-selection', \ie, maximum data-rate or real-time audio rate. If the drive doesn't have this `auto-selection' capability, the decision should be made on the current disc loaded and the return value should be positive. A negative return value indicates an error. \subsection{$Int\ select_disc(struct\ cdrom_device_info * cdi, int\ number)$} If the drive can store multiple discs (a juke-box) this function will perform disc selection. It should return the number of the selected disc on success, a negative value on error. Currently, only the ide-cd driver supports this functionality. \subsection{$Int\ get_last_session(struct\ cdrom_device_info * cdi, struct\ cdrom_multisession * ms_info)$} This function should implement the old corresponding $ioctl()$. For device $cdi\to dev$, the start of the last session of the current disc should be returned in the pointer argument $ms_info$. Note that routines in \cdromc\ have sanitized this argument: its requested format will {\em always\/} be of the type $CDROM_LBA$ (linear block addressing mode), whatever the calling software requested. But sanitization goes even further: the low-level implementation may return the requested information in $CDROM_MSF$ format if it wishes so (setting the $ms_info\rightarrow addr_format$ field appropriately, of course) and the routines in \cdromc\ will make the transformation if necessary. The return value is 0 upon success. \subsection{$Int\ get_mcn(struct\ cdrom_device_info * cdi, struct\ cdrom_mcn * mcn)$} Some discs carry a `Media Catalog Number' (MCN), also called `Universal Product Code' (UPC). This number should reflect the number that is generally found in the bar-code on the product. Unfortunately, the few discs that carry such a number on the disc don't even use the same format. The return argument to this function is a pointer to a pre-declared memory region of type $struct\ cdrom_mcn$. The MCN is expected as a 13-character string, terminated by a null-character. \subsection{$Int\ reset(struct\ cdrom_device_info * cdi)$} This call should perform a hard-reset on the drive (although in circumstances that a hard-reset is necessary, a drive may very well not listen to commands anymore). Preferably, control is returned to the caller only after the drive has finished resetting. If the drive is no longer listening, it may be wise for the underlying low-level cdrom driver to time out. \subsection{$Int\ audio_ioctl(struct\ cdrom_device_info * cdi, unsigned\ int\ cmd, void * arg)$} Some of the \cdrom-$ioctl$s defined in \cdromh\ can be implemented by the routines described above, and hence the function $cdrom_ioctl$ will use those. However, most $ioctl$s deal with audio-control. We have decided to leave these to be accessed through a single function, repeating the arguments $cmd$ and $arg$. Note that the latter is of type $void*{}$, rather than $unsigned\ long\ int$. The routine $cdrom_ioctl()$ does do some useful things, though. It sanitizes the address format type to $CDROM_MSF$ (Minutes, Seconds, Frames) for all audio calls. It also verifies the memory location of $arg$, and reserves stack-memory for the argument. This makes implementation of the $audio_ioctl()$ much simpler than in the old driver scheme. For example, you may look up the function $cm206_audio_ioctl()$ in {\tt {cm206.c}} that should be updated with this documentation. An unimplemented ioctl should return $-ENOSYS$, but a harmless request (\eg, $CDROMSTART$) may be ignored by returning 0 (success). Other errors should be according to the standards, whatever they are. When an error is returned by the low-level driver, the \UCD\ tries whenever possible to return the error code to the calling program. (We may decide to sanitize the return value in $cdrom_ioctl()$ though, in order to guarantee a uniform interface to the audio-player software.) \subsection{$Int\ dev_ioctl(struct\ cdrom_device_info * cdi, unsigned\ int\ cmd, unsigned\ long\ arg)$} Some $ioctl$s seem to be specific to certain \cdrom\ drives. That is, they are introduced to service some capabilities of certain drives. In fact, there are 6 different $ioctl$s for reading data, either in some particular kind of format, or audio data. Not many drives support reading audio tracks as data, I believe this is because of protection of copyrights of artists. Moreover, I think that if audio-tracks are supported, it should be done through the VFS and not via $ioctl$s. A problem here could be the fact that audio-frames are 2352 bytes long, so either the audio-file-system should ask for 75264 bytes at once (the least common multiple of 512 and 2352), or the drivers should bend their backs to cope with this incoherence (to which I would be opposed). Furthermore, it is very difficult for the hardware to find the exact frame boundaries, since there are no synchronization headers in audio frames. Once these issues are resolved, this code should be standardized in \cdromc. Because there are so many $ioctl$s that seem to be introduced to satisfy certain drivers,\footnote{Is there software around that actually uses these? I'd be interested!} any `non-standard' $ioctl$s are routed through the call $dev_ioctl()$. In principle, `private' $ioctl$s should be numbered after the device's major number, and not the general \cdrom\ $ioctl$ number, {\tt {0x53}}. Currently the non-supported $ioctl$s are: {\it CDROMREADMODE1, CDROMREADMODE2, CDROMREADAUDIO, CDROMREADRAW, CDROMREADCOOKED, CDROMSEEK, CDROMPLAY\-BLK and CDROM\-READALL}. \subsection{\cdrom\ capabilities} \label{capability} Instead of just implementing some $ioctl$ calls, the interface in \cdromc\ supplies the possibility to indicate the {\em capabilities\/} of a \cdrom\ drive. This can be done by ORing any number of capability-constants that are defined in \cdromh\ at the registration phase. Currently, the capabilities are any of: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDC_CLOSE_TRAY& can close tray by software control\cr CDC_OPEN_TRAY& can open tray\cr CDC_LOCK& can lock and unlock the door\cr CDC_SELECT_SPEED& can select speed, in units of $\sim$150\,kB/s\cr CDC_SELECT_DISC& drive is juke-box\cr CDC_MULTI_SESSION& can read sessions $>\rm1$\cr CDC_MCN& can read Media Catalog Number\cr CDC_MEDIA_CHANGED& can report if disc has changed\cr CDC_PLAY_AUDIO& can perform audio-functions (play, pause, etc)\cr CDC_RESET& hard reset device\cr CDC_IOCTLS& driver has non-standard ioctls\cr CDC_DRIVE_STATUS& driver implements drive status\cr } $$ The capability flag is declared $const$, to prevent drivers from accidentally tampering with the contents. The capability fags actually inform \cdromc\ of what the driver can do. If the drive found by the driver does not have the capability, is can be masked out by the $cdrom_device_info$ variable $mask$. For instance, the SCSI \cdrom\ driver has implemented the code for loading and ejecting \cdrom's, and hence its corresponding flags in $capability$ will be set. But a SCSI \cdrom\ drive might be a caddy system, which can't load the tray, and hence for this drive the $cdrom_device_info$ struct will have set the $CDC_CLOSE_TRAY$ bit in $mask$. In the file \cdromc\ you will encounter many constructions of the type $$\it if\ (cdo\rightarrow capability \mathrel\& \mathord{\sim} cdi\rightarrow mask \mathrel{\&} CDC_) \ldots $$ There is no $ioctl$ to set the mask\dots The reason is that I think it is better to control the {\em behavior\/} rather than the {\em capabilities}. \subsection{Options} A final flag register controls the {\em behavior\/} of the \cdrom\ drives, in order to satisfy different users' wishes, hopefully independently of the ideas of the respective author who happened to have made the drive's support available to the \linux\ community. The current behavior options are: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDO_AUTO_CLOSE& try to close tray upon device $open()$\cr CDO_AUTO_EJECT& try to open tray on last device $close()$\cr CDO_USE_FFLAGS& use $file_pointer\rightarrow f_flags$ to indicate purpose for $open()$\cr CDO_LOCK& try to lock door if device is opened\cr CDO_CHECK_TYPE& ensure disc type is data if opened for data\cr } $$ The initial value of this register is $CDO_AUTO_CLOSE \mathrel| CDO_USE_FFLAGS \mathrel| CDO_LOCK$, reflecting my own view on user interface and software standards. Before you protest, there are two new $ioctl$s implemented in \cdromc, that allow you to control the behavior by software. These are: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDROM_SET_OPTIONS& set options specified in $(int)\ arg$\cr CDROM_CLEAR_OPTIONS& clear options specified in $(int)\ arg$\cr } $$ One option needs some more explanation: $CDO_USE_FFLAGS$. In the next newsection we explain what the need for this option is. A software package {\tt setcd}, available from the Debian distribution and {\tt sunsite.unc.edu}, allows user level control of these flags. \newsection{The need to know the purpose of opening the \cdrom\ device} Traditionally, Unix devices can be used in two different `modes', either by reading/writing to the device file, or by issuing controlling commands to the device, by the device's $ioctl()$ call. The problem with \cdrom\ drives, is that they can be used for two entirely different purposes. One is to mount removable file systems, \cdrom s, the other is to play audio CD's. Audio commands are implemented entirely through $ioctl$s, presumably because the first implementation (SUN?) has been such. In principle there is nothing wrong with this, but a good control of the `CD player' demands that the device can {\em always\/} be opened in order to give the $ioctl$ commands, regardless of the state the drive is in. On the other hand, when used as a removable-media disc drive (what the original purpose of \cdrom s is) we would like to make sure that the disc drive is ready for operation upon opening the device. In the old scheme, some \cdrom\ drivers don't do any integrity checking, resulting in a number of i/o errors reported by the VFS to the kernel when an attempt for mounting a \cdrom\ on an empty drive occurs. This is not a particularly elegant way to find out that there is no \cdrom\ inserted; it more-or-less looks like the old IBM-PC trying to read an empty floppy drive for a couple of seconds, after which the system complains it can't read from it. Nowadays we can {\em sense\/} the existence of a removable medium in a drive, and we believe we should exploit that fact. An integrity check on opening of the device, that verifies the availability of a \cdrom\ and its correct type (data), would be desirable. These two ways of using a \cdrom\ drive, principally for data and secondarily for playing audio discs, have different demands for the behavior of the $open()$ call. Audio use simply wants to open the device in order to get a file handle which is needed for issuing $ioctl$ commands, while data use wants to open for correct and reliable data transfer. The only way user programs can indicate what their {\em purpose\/} of opening the device is, is through the $flags$ parameter (see {\tt {open(2)}}). For \cdrom\ devices, these flags aren't implemented (some drivers implement checking for write-related flags, but this is not strictly necessary if the device file has correct permission flags). Most option flags simply don't make sense to \cdrom\ devices: $O_CREAT$, $O_NOCTTY$, $O_TRUNC$, $O_APPEND$, and $O_SYNC$ have no meaning to a \cdrom. We therefore propose to use the flag $O_NONBLOCK$ to indicate that the device is opened just for issuing $ioctl$ commands. Strictly, the meaning of $O_NONBLOCK$ is that opening and subsequent calls to the device don't cause the calling process to wait. We could interpret this as ``don't wait until someone has inserted some valid data-\cdrom.'' Thus, our proposal of the implementation for the $open()$ call for \cdrom s is: \begin{itemize} \item If no other flags are set than $O_RDONLY$, the device is opened for data transfer, and the return value will be 0 only upon successful initialization of the transfer. The call may even induce some actions on the \cdrom, such as closing the tray. \item If the option flag $O_NONBLOCK$ is set, opening will always be successful, unless the whole device doesn't exist. The drive will take no actions whatsoever. \end{itemize} \subsection{And what about standards?} You might hesitate to accept this proposal as it comes from the \linux\ community, and not from some standardizing institute. What about SUN, SGI, HP and all those other Unix and hardware vendors? Well, these companies are in the lucky position that they generally control both the hardware and software of their supported products, and are large enough to set their own standard. They do not have to deal with a dozen or more different, competing hardware configurations.\footnote{Incidentally, I think that SUN's approach to mounting \cdrom s is very good in origin: under Solaris a volume-daemon automatically mounts a newly inserted \cdrom\ under {\tt {/cdrom/$$/}}. In my opinion they should have pushed this further and have {\em every\/} \cdrom\ on the local area network be mounted at the similar location, \ie, no matter in which particular machine you insert a \cdrom, it will always appear at the same position in the directory tree, on every system. When I wanted to implement such a user-program for \linux, I came across the differences in behavior of the various drivers, and the need for an $ioctl$ informing about media changes.} We believe that using $O_NONBLOCK$ to indicate that a device is being opened for $ioctl$ commands only can be easily introduced in the \linux\ community. All the CD-player authors will have to be informed, we can even send in our own patches to the programs. The use of $O_NONBLOCK$ has most likely no influence on the behavior of the CD-players on other operating systems than \linux. Finally, a user can always revert to old behavior by a call to $ioctl(file_descriptor, CDROM_CLEAR_OPTIONS, CDO_USE_FFLAGS)$. \subsection{The preferred strategy of $open()$} The routines in \cdromc\ are designed in such a way that run-time configuration of the behavior of \cdrom\ devices (of {\em any\/} type) can be carried out, by the $CDROM_SET/CLEAR_OPTIONS$ $ioctls$. Thus, various modes of operation can be set: \begin{description} \item[$CDO_AUTO_CLOSE \mathrel| CDO_USE_FFLAGS \mathrel| CDO_LOCK$] This is the default setting. (With $CDO_CHECK_TYPE$ it will be better, in the future.) If the device is not yet opened by any other process, and if the device is being opened for data ($O_NONBLOCK$ is not set) and the tray is found to be open, an attempt to close the tray is made. Then, it is verified that a disc is in the drive and, if $CDO_CHECK_TYPE$ is set, that it contains tracks of type `data mode 1.' Only if all tests are passed is the return value zero. The door is locked to prevent file system corruption. If the drive is opened for audio ($O_NONBLOCK$ is set), no actions are taken and a value of 0 will be returned. \item[$CDO_AUTO_CLOSE \mathrel| CDO_AUTO_EJECT \mathrel| CDO_LOCK$] This mimics the behavior of the current sbpcd-driver. The option flags are ignored, the tray is closed on the first open, if necessary. Similarly, the tray is opened on the last release, \ie, if a \cdrom\ is unmounted, it is automatically ejected, such that the user can replace it. \end{description} We hope that these option can convince everybody (both driver maintainers and user program developers) to adopt the new \cdrom\ driver scheme and option flag interpretation. \newsection{Description of routines in \cdromc} Only a few routines in \cdromc\ are exported to the drivers. In this new section we will discuss these, as well as the functions that `take over' the \cdrom\ interface to the kernel. The header file belonging to \cdromc\ is called \cdromh. Formerly, some of the contents of this file were placed in the file {\tt {ucdrom.h}}, but this file has now been merged back into \cdromh. \subsection{$Struct\ file_operations\ cdrom_fops$} The contents of this structure were described in section~\ref{cdrom.c}. As already stated, this structure should be used to register block devices with the kernel: $$ register_blkdev(major, , \&cdrom_fops); $$ \subsection{$Int\ register_cdrom( struct\ cdrom_device_info\ * cdi)$} This function is used in about the same way one registers $cdrom_fops$ with the kernel, the device operations and information structures, as described in section~\ref{cdrom.c}, should be registered with the \UCD: $$ register_cdrom(\&_info)); $$ This function returns zero upon success, and non-zero upon failure. The structure $_info$ should have a pointer to the driver's $_dops$, as in $$ \vbox{\halign{&$#$\hfil\cr struct\ &cdrom_device_info\ _info = \{\cr & _dops;\cr &\ldots\cr \}\cr }}$$ Note that a driver must have one static structure, $_dops$, while it may have as many structures $_info$ as there are minor devices active. $Register_cdrom()$ builds a linked list from these. \subsection{$Int\ unregister_cdrom(struct\ cdrom_device_info * cdi)$} Unregistering device $cdi$ with minor number $MINOR(cdi\to dev)$ removes the minor device from the list. If it was the last registered minor for the low-level driver, this disconnects the registered device-operation routines from the \cdrom\ interface. This function returns zero upon success, and non-zero upon failure. \subsection{$Int\ cdrom_open(struct\ inode * ip, struct\ file * fp)$} This function is not called directly by the low-level drivers, it is listed in the standard $cdrom_fops$. If the VFS opens a file, this function becomes active. A strategy is implemented in this routine, taking care of all capabilities and options that are set in the $cdrom_device_ops$ connected to the device. Then, the program flow is transferred to the device_dependent $open()$ call. \subsection{$Void\ cdrom_release(struct\ inode *ip, struct\ file *fp)$} This function implements the reverse-logic of $cdrom_open()$, and then calls the device-dependent $release()$ routine. When the use-count has reached 0, the allocated buffers are flushed by calls to $sync_dev(dev)$ and $invalidate_buffers(dev)$. \subsection{$Int\ cdrom_ioctl(struct\ inode *ip, struct\ file *fp, unsigned\ int\ cmd, unsigned\ long\ arg)$} \label{cdrom-ioctl} This function handles all the standard $ioctl$ requests for \cdrom\ devices in a uniform way. The different calls fall into three categories: $ioctl$s that can be directly implemented by device operations, ones that are routed through the call $audio_ioctl()$, and the remaining ones, that are presumable device-dependent. Generally, a negative return value indicates an error. \subsubsection{Directly implemented $ioctl$s} \label{ioctl-direct} The following `old' \cdrom-$ioctl$s are implemented by directly calling device-operations in $cdrom_device_ops$, if implemented and not masked: \begin{description} \item[CDROMMULTISESSION] Requests the last session on a \cdrom. \item[CDROMEJECT] Open tray. \item[CDROMCLOSETRAY] Close tray. \item[CDROMEJECT_SW] If $arg\not=0$, set behavior to auto-close (close tray on first open) and auto-eject (eject on last release), otherwise set behavior to non-moving on $open()$ and $release()$ calls. \item[CDROM_GET_MCN] Get the Media Catalog Number from a CD. \end{description} \subsubsection{$Ioctl$s routed through $audio_ioctl()$} \label{ioctl-audio} The following set of $ioctl$s are all implemented through a call to the $cdrom_fops$ function $audio_ioctl()$. Memory checks and allocation are performed in $cdrom_ioctl()$, and also sanitization of address format ($CDROM_LBA$/$CDROM_MSF$) is done. \begin{description} \item[CDROMSUBCHNL] Get sub-channel data in argument $arg$ of type $struct\ cdrom_subchnl *{}$. \item[CDROMREADTOCHDR] Read Table of Contents header, in $arg$ of type $struct\ cdrom_tochdr *{}$. \item[CDROMREADTOCENTRY] Read a Table of Contents entry in $arg$ and specified by $arg$ of type $struct\ cdrom_tocentry *{}$. \item[CDROMPLAYMSF] Play audio fragment specified in Minute, Second, Frame format, delimited by $arg$ of type $struct\ cdrom_msf *{}$. \item[CDROMPLAYTRKIND] Play audio fragment in track-index format delimited by $arg$ of type $struct\ \penalty-1000 cdrom_ti *{}$. \item[CDROMVOLCTRL] Set volume specified by $arg$ of type $struct\ cdrom_volctrl *{}$. \item[CDROMVOLREAD] Read volume into by $arg$ of type $struct\ cdrom_volctrl *{}$. \item[CDROMSTART] Spin up disc. \item[CDROMSTOP] Stop playback of audio fragment. \item[CDROMPAUSE] Pause playback of audio fragment. \item[CDROMRESUME] Resume playing. \end{description} \subsubsection{New $ioctl$s in \cdromc} The following $ioctl$s have been introduced to allow user programs to control the behavior of individual \cdrom\ devices. New $ioctl$ commands can be identified by the underscores in their names. \begin{description} \item[CDROM_SET_OPTIONS] Set options specified by $arg$. Returns the option flag register after modification. Use $arg = \rm0$ for reading the current flags. \item[CDROM_CLEAR_OPTIONS] Clear options specified by $arg$. Returns the option flag register after modification. \item[CDROM_SELECT_SPEED] Select head-rate speed of disc specified as by $arg$ in units of standard cdrom speed (176\,kB/sec raw data or 150\,kB/sec file system data). The value 0 means `auto-select', \ie, play audio discs at real time and data discs at maximum speed. The value $arg$ is checked against the maximum head rate of the drive found in the $cdrom_dops$. \item[CDROM_SELECT_DISC] Select disc numbered $arg$ from a juke-box. First disc is numbered 0. The number $arg$ is checked against the maximum number of discs in the juke-box found in the $cdrom_dops$. \item[CDROM_MEDIA_CHANGED] Returns 1 if a disc has been changed since the last call. Note that calls to $cdrom_media_changed$ by the VFS are treated by an independent queue, so both mechanisms will detect a media change once. For juke-boxes, an extra argument $arg$ specifies the slot for which the information is given. The special value $CDSL_CURRENT$ requests that information about the currently selected slot be returned. \item[CDROM_DRIVE_STATUS] Returns the status of the drive by a call to $drive_status()$. Return values are defined in section~\ref{drive status}. Note that this call doesn't return information on the current playing activity of the drive; this can be polled through an $ioctl$ call to $CDROMSUBCHNL$. For juke-boxes, an extra argument $arg$ specifies the slot for which (possibly limited) information is given. The special value $CDSL_CURRENT$ requests that information about the currently selected slot be returned. \item[CDROM_DISC_STATUS] Returns the type of the disc currently in the drive. It should be viewed as a complement to $CDROM_DRIVE_STATUS$. This $ioctl$ can provide \emph {some} information about the current disc that is inserted in the drive. This functionality used to be implemented in the low level drivers, but is now carried out entirely in \UCD. The history of development of the CD's use as a carrier medium for various digital information has lead to many different disc types. This $ioctl$ is useful only in the case that CDs have \emph {only one} type of data on them. While this is often the case, it is also very common for CDs to have some tracks with data, and some tracks with audio. Because this is an existing interface, rather than fixing this interface by changing the assumptions it was made under, thereby breaking all user applications that use this function, the \UCD\ implements this $ioctl$ as follows: If the CD in question has audio tracks on it, and it has absolutely no CD-I, XA, or data tracks on it, it will be reported as $CDS_AUDIO$. If it has both audio and data tracks, it will return $CDS_MIXED$. If there are no audio tracks on the disc, and if the CD in question has any CD-I tracks on it, it will be reported as $CDS_XA_2_2$. Failing that, if the CD in question has any XA tracks on it, it will be reported as $CDS_XA_2_1$. Finally, if the CD in question has any data tracks on it, it will be reported as a data CD ($CDS_DATA_1$). This $ioctl$ can return: $$ \halign{$#$\ \hfil&$/*$ \rm# $*/$\hfil\cr CDS_NO_INFO& no information available\cr CDS_NO_DISC& no disc is inserted, or tray is opened\cr CDS_AUDIO& Audio disc (2352 audio bytes/frame)\cr CDS_DATA_1& data disc, mode 1 (2048 user bytes/frame)\cr CDS_XA_2_1& mixed data (XA), mode 2, form 1 (2048 user bytes)\cr CDS_XA_2_2& mixed data (XA), mode 2, form 1 (2324 user bytes)\cr CDS_MIXED& mixed audio/data disc\cr } $$ For some information concerning frame layout of the various disc types, see a recent version of \cdromh. \item[CDROM_CHANGER_NSLOTS] Returns the number of slots in a juke-box. \item[CDROMRESET] Reset the drive. \item[CDROM_GET_CAPABILITY] Returns the $capability$ flags for the drive. Refer to section \ref{capability} for more information on these flags. \item[CDROM_LOCKDOOR] Locks the door of the drive. $arg == \rm0$ unlocks the door, any other value locks it. \item[CDROM_DEBUG] Turns on debugging info. Only root is allowed to do this. Same semantics as CDROM_LOCKDOOR. \end{description} \subsubsection{Device dependent $ioctl$s} Finally, all other $ioctl$s are passed to the function $dev_ioctl()$, if implemented. No memory allocation or verification is carried out. \newsection{How to update your driver} \begin{enumerate} \item Make a backup of your current driver. \item Get hold of the files \cdromc\ and \cdromh, they should be in the directory tree that came with this documentation. \item Make sure you include \cdromh. \item Change the 3rd argument of $register_blkdev$ from $\&_fops$ to $\&cdrom_fops$. \item Just after that line, add the following to register with the \UCD: $$register_cdrom(\&_info);$$ Similarly, add a call to $unregister_cdrom()$ at the appropriate place. \item Copy an example of the device-operations $struct$ to your source, \eg, from {\tt {cm206.c}} $cm206_dops$, and change all entries to names corresponding to your driver, or names you just happen to like. If your driver doesn't support a certain function, make the entry $NULL$. At the entry $capability$ you should list all capabilities your driver currently supports. If your driver has a capability that is not listed, please send me a message. \item Copy the $cdrom_device_info$ declaration from the same example driver, and modify the entries according to your needs. If your driver dynamically determines the capabilities of the hardware, this structure should also be declared dynamically. \item Implement all functions in your $_dops$ structure, according to prototypes listed in \cdromh, and specifications given in section~\ref{cdrom.c}. Most likely you have already implemented the code in a large part, and you will almost certainly need to adapt the prototype and return values. \item Rename your $_ioctl()$ function to $audio_ioctl$ and change the prototype a little. Remove entries listed in the first part in section~\ref{cdrom-ioctl}, if your code was OK, these are just calls to the routines you adapted in the previous step. \item You may remove all remaining memory checking code in the $audio_ioctl()$ function that deals with audio commands (these are listed in the second part of section~\ref{cdrom-ioctl}). There is no need for memory allocation either, so most $case$s in the $switch$ statement look similar to: $$ case\ CDROMREADTOCENTRY\colon get_toc_entry\bigl((struct\ cdrom_tocentry *{})\ arg\bigr); $$ \item All remaining $ioctl$ cases must be moved to a separate function, $_ioctl$, the device-dependent $ioctl$s. Note that memory checking and allocation must be kept in this code! \item Change the prototypes of $_open()$ and $_release()$, and remove any strategic code (\ie, tray movement, door locking, etc.). \item Try to recompile the drivers. We advise you to use modules, both for {\tt {cdrom.o}} and your driver, as debugging is much easier this way. \end{enumerate} \newsection{Thanks} Thanks to all the people involved. First, Erik Andersen, who has taken over the torch in maintaining \cdromc\ and integrating much \cdrom-related code in the 2.1-kernel. Thanks to Scott Snyder and Gerd Knorr, who were the first to implement this interface for SCSI and IDE-CD drivers and added many ideas for extension of the data structures relative to kernel~2.0. Further thanks to Heiko Eissfeldt, Thomas Quinot, Jon Tombs, Ken Pizzini, Eberhard M\"onkeberg and Andrew Kroll, the \linux\ \cdrom\ device driver developers who were kind enough to give suggestions and criticisms during the writing. Finally of course, I want to thank Linus Torvalds for making this possible in the first place. \vfill $ \version\ $ \eject \end{document} CDU31A/CDU33A Driver Info ------------------------- Information on the Sony CDU31A/CDU33A CDROM driver for the Linux kernel. Corey Minyard (minyard@metronet.com) Colossians 3:17 Crude Table of Contents ----------------------- Setting Up the Hardware Configuring the Kernel Configuring as a Module Driver Special Features This device driver handles Sony CDU31A/CDU33A CDROM drives and provides a complete block-level interface as well as an ioctl() interface as specified in include/linux/cdrom.h). With this interface, CDROMs can be accessed, standard audio CDs can be played back normally, and CD audio information can be read off the drive. Note that this will only work for CDU31A/CDU33A drives. Some vendors market their drives as CDU31A compatible. They lie. Their drives are really CDU31A hardware interface compatible (they can plug into the same card). They are not software compatible. Setting Up the Hardware ----------------------- The CDU31A driver is unable to safely tell if an interface card is present that it can use because the interface card does not announce its presence in any way besides placing 4 I/O locations in memory. It used to just probe memory and attempt commands, but Linus wisely asked me to remove that because it could really screw up other hardware in the system. Because of this, you must tell the kernel where the drive interface is, what interrupts are used, and possibly if you are on a PAS-16 soundcard. If you have the Sony CDU31A/CDU33A drive interface card, the following diagram will help you set it up. If you have another card, you are on your own. You need to make sure that the I/O address and interrupt is not used by another card in the system. You will need to know the I/O address and interrupt you have set. Note that use of interrupts is highly recommended, if possible, it really cuts down on CPU used. Unfortunately, most soundcards do not support interrupts for their CDROM interfaces. By default, the Sony interface card comes with interrupts disabled. +----------+-----------------+----------------------+ | JP1 | 34 Pin Conn | | | JP2 +-----------------+ | | JP3 | | JP4 | | +--+ | | +-+ | | | | External | | | | Connector | | | | | | +-+ | +--+ | | | +--------+ | | +------------------------------------------+ JP1 sets the Base Address, using the following settings: Address Pin 1 Pin 2 ------- ----- ----- 0x320 Short Short 0x330 Short Open 0x340 Open Short 0x360 Open Open JP2 and JP3 configure the DMA channel; they must be set the same. DMA Pin 1 Pin 2 Pin 3 --- ----- ----- ----- 1 On Off On 2 Off On Off 3 Off Off On JP4 Configures the IRQ: IRQ Pin 1 Pin 2 Pin 3 Pin 4 --- ----- ----- ----- ----- 3 Off Off On Off 4 Off Off* Off On 5 On Off Off Off 6 Off On Off Off The documentation states to set this for interrupt 4, but I think that is a mistake. Note that if you have another interface card, you will need to look at the documentation to find the I/O base address. This is specified to the SLCD.SYS driver for DOS with the /B: parameter, so you can look at you DOS driver setup to find the address, if necessary. Configuring the Kernel ---------------------- You must tell the kernel where the drive is at boot time. This can be done at the Linux boot prompt, by using LILO, or by using Bootlin. Note that this is no substitute for HOWTOs and LILO documentation, if you are confused please read those for info on bootline configuration and LILO. At the linux boot prompt, press the ALT key and add the following line after the boot name (you can let the kernel boot, it will tell you the default boot name while booting): cdu31a=,[,PAS] The base address needs to have "0x" in front of it, since it is in hex. For instance, to configure a drive at address 320 on interrupt 5, use the following: cdu31a=0x320,5 I use the following boot line: cdu31a=0x1f88,0,PAS because I have a PAS-16 which does not support interrupt for the CDU31A interface. Adding this as an append line at the beginning of the /etc/lilo.conf file will set it for lilo configurations. I have the following as the first line in my lilo.conf file: append="cdu31a=0x1f88,0" I'm not sure how to set up Bootlin (I have never used it), if someone would like to fill in this section please do. Configuring as a Module ----------------------- The driver supports loading as a module. However, you must specify the boot address and interrupt on the boot line to insmod. You can't use modprobe to load it, since modprobe doesn't support setting variables. Anyway, I use the following line to load my driver as a module /sbin/insmod /lib/modules/`uname -r`/misc/cdu31a.o cdu31a_port=0x1f88 You can set the following variables in the driver: cdu31a_port= - sets the base I/O. If hex, put 0x in front of it. This must be specified. cdu31a_irq= - Sets the interrupt number. Leaving this off will turn interrupts off. Driver Special Features ----------------------- This section describes features beyond the normal audio and CD-ROM functions of the drive. 2048 byte buffer mode If a disk is mounted with -o block=2048, data is copied straight from the drive data port to the buffer. Otherwise, the readahead buffer must be involved to hold the other 1K of data when a 1K block operation is done. Note that with 2048 byte blocks you cannot execute files from the CD. XA compatibility The driver should support XA disks for both the CDU31A and CDU33A. It does this transparently, the using program doesn't need to set it. Multi-Session A multi-session disk looks just like a normal disk to the user. Just mount one normally, and all the data should be there. A special thanks to Koen for help with this! Raw sector I/O Using the CDROMREADAUDIO it is possible to read raw audio and data tracks. Both operations return 2352 bytes per sector. On the data tracks, the first 12 bytes is not returned by the drive and the value of that data is indeterminate. This is the readme file for the driver for the Philips/LMS cdrom drive cm206 in combination with the cm260 host adapter card. (c) 1995 David A. van Leeuwen Changes since version 0.99 -------------------------- - Interfacing to the kernel is routed though an extra interface layer, cdrom.c. This allows runtime-configurable `behavior' of the cdrom-drive, independent of the driver. Features since version 0.33 --------------------------- - Full audio support, that is, both workman, workbone and cdp work now reasonably. Reading TOC still takes some time. xmcd has been reported to run successfully. - Made auto-probe code a little better, I hope Features since version 0.28 --------------------------- - Full speed transfer rate (300 kB/s). - Minimum kernel memory usage for buffering (less than 3 kB). - Multisession support. - Tray locking. - Statistics of driver accessible to the user. - Module support. - Auto-probing of adapter card's base port and irq line, also configurable at boot time or module load time. Decide how you are going to use the driver. There are two options: (a) installing the driver as a resident part of the kernel (b) compiling the driver as a loadable module Further, you must decide if you are going to specify the base port address and the interrupt request line of the adapter card cm260 as boot options for (a), module parameters for (b), use automatic probing of these values, or hard-wire your adaptor card's settings into the source code. If you don't care, you can choose autoprobing, which is the default. In that case you can move on to the next step. Compiling the kernel -------------------- 1) move to /usr/src/linux and do a make config If you have chosen option (a), answer yes to CONFIG_CM206 and CONFIG_ISO9660_FS. If you have chosen option (b), answer yes to CONFIG_MODVERSIONS and no (!) to CONFIG_CM206 and CONFIG_ISO9660_FS. 2) then do a make dep; make clean; make zImage; make modules 3) do the usual things to install a new image (backup the old one, run `rdev -R zImage 1', copy the new image in place, run lilo). Might be `make zlilo'. Using the driver as a module ---------------------------- If you will only occasionally use the cd-rom driver, you can choose option (b), install as a loadable module. You may have to re-compile the module when you upgrade the kernel to a new version. Since version 0.96, much of the functionality has been transferred to a generic cdrom interface in the file cdrom.c. The module cm206.o depends on cdrom.o. If the latter is not compiled into the kernel, you must explicitly load it before cm206.o: insmod /usr/src/linux/modules/cdrom.o To install the module, you use the command, as root insmod /usr/src/linux/modules/cm206.o You can specify the base address on the command line as well as the irq line to be used, e.g. insmod /usr/src/linux/modules/cm206.o cm206=0x300,11 The order of base port and irq line doesn't matter; if you specify only one, the other will have the value of the compiled-in default. You may also have to install the file-system module `iso9660.o', if you didn't compile that into the kernel. Using the driver as part of the kernel -------------------------------------- If you have chosen option (a), you can specify the base-port address and irq on the lilo boot command line, e.g.: LILO: linux cm206=0x340,11 This assumes that your linux kernel image keyword is `linux'. If you specify either IRQ (3--11) or base port (0x300--0x370), auto probing is turned off for both settings, thus setting the other value to the compiled-in default. Note that you can also put these parameters in the lilo configuration file: # linux config image = /vmlinuz root = /dev/hda1 label = Linux append = "cm206=0x340,11" read-only If module parameters and LILO config options don't work ------------------------------------------------------- If autoprobing does not work, you can hard-wire the default values of the base port address (CM206_BASE) and interrupt request line (CM206_IRQ) into the file /usr/src/linux/drivers/cdrom/cm206.h. Change the defines of CM206_IRQ and CM206_BASE. Mounting the cdrom ------------------ 1) Make sure that the right device is installed in /dev. mknod /dev/cm206cd b 32 0 2) Make sure there is a mount point, e.g., /cdrom mkdir /cdrom 3) mount using a command like this (run as root): mount -rt iso9660 /dev/cm206cd /cdrom 4) For user-mounts, add a line in /etc/fstab /dev/cm206cd /cdrom iso9660 ro,noauto,user This will allow users to give the commands mount /cdrom umount /cdrom If things don't work -------------------- - Try to do a `dmesg' to find out if the driver said anything about what is going wrong during the initialization. - Try to do a `dd if=/dev/cm206cd | od -tc | less' to read from the CD. - Look in the /proc directory to see if `cm206' shows up under one of `interrupts', `ioports', `devices' or `modules' (if applicable). DISCLAIMER ---------- I cannot guarantee that this driver works, or that the hardware will not be harmed, although I consider it most unlikely. I hope that you'll find this driver in some way useful. David van Leeuwen david@tm.tno.nl Note for Linux CDROM vendors ----------------------------- You are encouraged to include this driver on your Linux CDROM. If you do, you might consider sending me a free copy of that cd-rom. You can contact me through my e-mail address, david@tm.tno.nl. If this driver is compiled into a kernel to boot off a cdrom, you should actually send me a free copy of that cd-rom. Copyright --------- The copyright of the cm206 driver for Linux is (c) 1995 David A. van Leeuwen The driver is released under the conditions of the GNU general public license, which can be found in the file COPYING in the root of this source tree. Goldstar R420 CD-Rom device driver README For all kind of other information about the GoldStar R420 CDROM and this Linux device driver see the WWW page: http://linux.rz.fh-hannover.de/~raupach If you are the editor of a Linux CD, you should enable gscd.c within your boot floppy kernel. Please, send me one of your CDs for free. This current driver version 0.4a only supports reading data from the disk. Currently we have no audio and no multisession or XA support. The polling interface is used, no DMA. Sometimes the GoldStar R420 is sold in a 'Reveal Multimedia Kit'. This kit's drive interface is compatible, too. Installation ------------ Change to '/usr/src/linux/drivers/cdrom' and edit the file 'gscd.h'. Insert the i/o address of your interface card. The default base address is 0x340. This will work for most applications. Address selection is accomplished by jumpers PN801-1 to PN801-4 on the GoldStar Interface Card. Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360 0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0 Then go back to '/usr/src/linux/' and 'make config' to build the new configuration for your kernel. If you want to use the GoldStar driver like a module, don't select 'GoldStar CDROM support'. By the way, you have to include the iso9660 filesystem. Now start compiling the kernel with 'make dep ; make zImage'. If you want to use the driver as a module, you have to do 'make modules' and 'make modules_install', additionally. Install your new kernel as usual - maybe you do it with 'make zlilo'. Before you can use the driver, you have to mknod /dev/gscd0 b 16 0 to create the appropriate device file (you only need to do this once). If you use modules, you can try to insert the driver. Say: 'insmod /usr/src/linux/modules/gscd.o' or: 'insmod /usr/src/linux/modules/gscd.o gscd=
' The driver should report its results. That's it! Mount a disk, i.e. 'mount -rt iso9660 /dev/gscd0 /cdrom' Feel free to report errors and suggestions to the following address. Be sure, I'm very happy to receive your comments! Oliver Raupach Hannover, Juni 1995 (raupach@nwfs1.rz.fh-hannover.de) IDE-CD driver documentation Originally by scott snyder (19 May 1996) Carrying on the torch is: Erik Andersen New maintainer (19 Oct 1998): Jens Axboe 1. Introduction --------------- The ide-cd driver should work with all ATAPI ver 1.2 to ATAPI 2.6 compliant CDROM drives which attach to an IDE interface. Note that some CDROM vendors (including Mitsumi, Sony, Creative, Aztech, and Goldstar) have made both ATAPI-compliant drives and drives which use a proprietary interface. If your drive uses one of those proprietary interfaces, this driver will not work with it (but one of the other CDROM drivers probably will). This driver will not work with `ATAPI' drives which attach to the parallel port. In addition, there is at least one drive (CyCDROM CR520ie) which attaches to the IDE port but is not ATAPI; this driver will not work with drives like that either (but see the aztcd driver). This driver provides the following features: - Reading from data tracks, and mounting ISO 9660 filesystems. - Playing audio tracks. Most of the CDROM player programs floating around should work; I usually use Workman. - Multisession support. - On drives which support it, reading digital audio data directly from audio tracks. The program cdda2wav can be used for this. Note, however, that only some drives actually support this. - There is now support for CDROM changers which comply with the ATAPI 2.6 draft standard (such as the NEC CDR-251). This additional functionality includes a function call to query which slot is the currently selected slot, a function call to query which slots contain CDs, etc. A sample program which demonstrates this functionality is appended to the end of this file. The Sanyo 3-disc changer (which does not conform to the standard) is also now supported. Please note the driver refers to the first CD as slot # 0. 2. Installation --------------- 0. The ide-cd relies on the ide disk driver. See Documentation/ide.txt for up-to-date information on the ide driver. 1. Make sure that the ide and ide-cd drivers are compiled into the kernel you're using. When configuring the kernel, in the section entitled "Floppy, IDE, and other block devices", say either `Y' (which will compile the support directly into the kernel) or `M' (to compile support as a module which can be loaded and unloaded) to the options: Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support Include IDE/ATAPI CDROM support and `no' to Use old disk-only driver on primary interface Depending on what type of IDE interface you have, you may need to specify additional configuration options. See Documentation/ide.txt. 2. You should also ensure that the iso9660 filesystem is either compiled into the kernel or available as a loadable module. You can see if a filesystem is known to the kernel by catting /proc/filesystems. 3. The CDROM drive should be connected to the host on an IDE interface. Each interface on a system is defined by an I/O port address and an IRQ number, the standard assignments being 0x170 and 14 for the primary interface and 0x1f0 and 15 for the secondary interface. Each interface can control up to two devices, where each device can be a hard drive, a CDROM drive, a floppy drive, or a tape drive. The two devices on an interface are called `master' and `slave'; this is usually selectable via a jumper on the drive. Linux names these devices as follows. The master and slave devices on the primary IDE interface are called `hda' and `hdb', respectively. The drives on the secondary interface are called `hdc' and `hdd'. (Interfaces at other locations get other letters in the third position; see Documentation/ide.txt.) If you want your CDROM drive to be found automatically by the driver, you should make sure your IDE interface uses either the primary or secondary addresses mentioned above. In addition, if the CDROM drive is the only device on the IDE interface, it should be jumpered as `master'. (If for some reason you cannot configure your system in this manner, you can probably still use the driver. You may have to pass extra configuration information to the kernel when you boot, however. See Documentation/ide.txt for more information.) 4. Boot the system. If the drive is recognized, you should see a message which looks like hdb: NEC CD-ROM DRIVE:260, ATAPI CDROM drive If you do not see this, see section 5 below. 5. You may want to create a symbolic link /dev/cdrom pointing to the actual device. You can do this with the command ln -s /dev/hdX /dev/cdrom where X should be replaced by the letter indicating where your drive is installed. 6. You should be able to see any error messages from the driver with the `dmesg' command. 3. Basic usage -------------- An ISO 9660 CDROM can be mounted by putting the disc in the drive and typing (as root) mount -t iso9660 /dev/cdrom /mnt/cdrom where it is assumed that /dev/cdrom is a link pointing to the actual device (as described in step 5 of the last section) and /mnt/cdrom is an empty directory. You should now be able to see the contents of the CDROM under the /mnt/cdrom directory. If you want to eject the CDROM, you must first dismount it with a command like umount /mnt/cdrom Note that audio CDs cannot be mounted. Some distributions set up /etc/fstab to always try to mount a CDROM filesystem on bootup. It is not required to mount the CDROM in this manner, though, and it may be a nuisance if you change CDROMs often. You should feel free to remove the cdrom line from /etc/fstab and mount CDROMs manually if that suits you better. Multisession and photocd discs should work with no special handling. The hpcdtoppm package (ftp.gwdg.de:/pub/linux/hpcdtoppm/) may be useful for reading photocds. To play an audio CD, you should first unmount and remove any data CDROM. Any of the CDROM player programs should then work (workman, workbone, cdplayer, etc.). Lacking anything else, you could use the cdtester program in Documentation/cdrom/sbpcd. On a few drives, you can read digital audio directly using a program such as cdda2wav. The only types of drive which I've heard support this are Sony and Toshiba drives. You will get errors if you try to use this function on a drive which does not support it. For supported changers, you can use the `cdchange' program (appended to the end of this file) to switch between changer slots. Note that the drive should be unmounted before attempting this. The program takes two arguments: the CDROM device, and the slot number to which you wish to change. If the slot number is -1, the drive is unloaded. 4. Compilation options ---------------------- There are a few additional options which can be set when compiling the driver. Most people should not need to mess with any of these; they are listed here simply for completeness. A compilation option can be enabled by adding a line of the form `#define