# User: marcelo # Host: plucky.distro.conectiva # Root: /home/marcelo/bk/linux-2.4 # Patch vers: 1.3 # Patch type: REGULAR == ChangeSet == torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 marcelo@plucky.distro.conectiva|ChangeSet|20020313233536|58103 D 1.162 02/03/13 20:54:53-03:00 marcelo@plucky.distro.conectiva +388 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c - -ac merge (including new IDE) (Alan Cox) c - S390 merge (IBM) c - More cciss fixes (Stephen Cameron) c - Eicon SMP race fix (Armin Schindler) c - w9966 driver update (Jakob Kemi) c - Unify crc32 routine (removes lots of duplicated c code from drivers) (Matt Domsch) c - Lanstreamer bugfixes (Kent Yoder) c - Update scsi_debug (Douglas Gilbert) c - MCE Configure.help update (Paul Gortmaker) c - Fix SMB NLS oops (Urban Widmark) c - AGP Config.in update (Daniele Venzano) c - Fix small thinko in UFS set_blocksize return handling (me) c - Avoid unecessary cache flushes on PPC (Paul Mackerras) c - PPP deadlock fixes (Paul Mackerras) c - Signal changes for thread groups (Dave McCracken) c - Make max_threads be based on normal zone size (Dave McCracken) c - ray_cs wireless extension fix (Jean Tourrilhes) c - irda bugfixes and enhancements (Jean Tourrilhes) c - USB update (Greg KH) c - Fix through-8259A mode for IRQ0 routing on APIC (Maciej W. Rozycki/Joe Korty) c - Add Dell Inspiron 2500 to broken APM blacklist (Arjan van de Ven) c - Fix off-by-one error in bluesmoke (Dave Jones) c - Reiserfs update (Oleg Drokin) c - Fix PCI compile without /proc support (Eric Sandeen) c - Fix problem with bad inode handling (Alexander Viro) c - aic7xxx update (Justin T. Gibbs) c - Do not consider SCSI recovered errors as fatal errors (Justin T. Gibbs) c - Add Memory-Write-Invalidate support to PCI (Jeff Garzik) c - Starfire update (Ion Badulescu) c - tulip update (Jeff Garzik) K 28601 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|CREDITS|20020205173939|12513|5d6d2a7f91060c26 patch@plucky.distro.conectiva|CREDITS|20020313234106|29410 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 patch@plucky.distro.conectiva|MAINTAINERS|20020313234106|54982 > torvalds@athlon.transmeta.com|Makefile|20020205173938|00876|d6ad9c1a8d595a5 patch@plucky.distro.conectiva|Makefile|20020313234106|16544 > torvalds@athlon.transmeta.com|Rules.make|20020205173957|63306|8c675afb7343e389 patch@plucky.distro.conectiva|Rules.make|20020313234106|40184 > patch@plucky.distro.conectiva|drivers/net/meth.c|20020313233104|16294|e0b45fc91fecee61 patch@plucky.distro.conectiva|BitKeeper/deleted/.del-meth.c~e0b45fc91fecee61|20020313234105|06220 > torvalds@athlon.transmeta.com|Documentation/Changes|20020205174036|00998|40f9af765c0c7a9a patch@plucky.distro.conectiva|Documentation/Changes|20020313234106|40962 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d patch@plucky.distro.conectiva|Documentation/Configure.help|20020313234107|36495 > torvalds@athlon.transmeta.com|Documentation/cachetlb.txt|20020205174038|14423|f78b20942650bf26 patch@plucky.distro.conectiva|Documentation/cachetlb.txt|20020313234107|62526 > patch@plucky.distro.conectiva|Documentation/watchdog-api.txt|20020313233106|12165|bd2bb6f5d72aa80f patch@plucky.distro.conectiva|Documentation/watchdog-api.txt|20020313234107|16401 > torvalds@athlon.transmeta.com|Documentation/DocBook/kernel-locking.tmpl|20020205174037|26875|75503485e0a89f11 patch@plucky.distro.conectiva|Documentation/DocBook/kernel-locking.tmpl|20020313234107|38739 > patch@plucky.distro.conectiva|Documentation/networking/3c359.txt|20020313234105|06686|2e17002288c4a2f patch@plucky.distro.conectiva|Documentation/networking/3c359.txt|20020313234106|18384 > patch@plucky.distro.conectiva|Documentation/networking/ppp_generic.txt|20020313234105|07478|9bc9c97ffbc4a153 patch@plucky.distro.conectiva|Documentation/networking/ppp_generic.txt|20020313234106|25960 > patch@plucky.distro.conectiva|Documentation/usb/auerswald.txt|20020313234105|07778|3462da5c642ce3f7 patch@plucky.distro.conectiva|Documentation/usb/auerswald.txt|20020313234106|12944 > torvalds@athlon.transmeta.com|Documentation/usb/usb-serial.txt|20020205174038|05468|60304c28b012364b patch@plucky.distro.conectiva|Documentation/usb/usb-serial.txt|20020313234107|34681 > torvalds@athlon.transmeta.com|arch/alpha/kernel/entry.S|20020205174022|29067|1a3f0588ee1a7058 patch@plucky.distro.conectiva|arch/alpha/kernel/entry.S|20020313234107|52108 > torvalds@athlon.transmeta.com|arch/alpha/kernel/signal.c|20020205174022|38543|570d98eaae756dd patch@plucky.distro.conectiva|arch/alpha/kernel/signal.c|20020313234107|44487 > torvalds@athlon.transmeta.com|arch/alpha/kernel/smp.c|20020205174022|37727|91b1d680d248f9bd patch@plucky.distro.conectiva|arch/alpha/kernel/smp.c|20020313234107|34231 > torvalds@athlon.transmeta.com|arch/arm/kernel/calls.S|20020205174029|24447|d6fcf80a34289c70 patch@plucky.distro.conectiva|arch/arm/kernel/calls.S|20020313234107|57065 > torvalds@athlon.transmeta.com|arch/arm/kernel/signal.c|20020205174029|27905|e01c72383a1607da patch@plucky.distro.conectiva|arch/arm/kernel/signal.c|20020313234107|04165 > patch@athlon.transmeta.com|arch/cris/drivers/ethernet.c|20020205175643|10034|fc07081786c677a1 patch@plucky.distro.conectiva|arch/cris/drivers/ethernet.c|20020313234107|34317 > patch@athlon.transmeta.com|arch/cris/drivers/ide.c|20020205175643|10228|78b931d654294f6d patch@plucky.distro.conectiva|arch/cris/drivers/ide.c|20020313234107|47629 > patch@athlon.transmeta.com|arch/cris/drivers/lpslave/e100lpslavenet.c|20020205191006|32515|9180cdb6e50541d1 patch@plucky.distro.conectiva|arch/cris/drivers/lpslave/e100lpslavenet.c|20020313234107|21547 > patch@athlon.transmeta.com|arch/cris/kernel/entry.S|20020205175643|11180|6d929641b9a76004 patch@plucky.distro.conectiva|arch/cris/kernel/entry.S|20020313234107|30354 > patch@athlon.transmeta.com|arch/cris/kernel/signal.c|20020205175643|12864|3896825956309f96 patch@plucky.distro.conectiva|arch/cris/kernel/signal.c|20020313234107|02189 > patch@athlon.transmeta.com|arch/i386/kernel/acpitable.c|20020205203238|00590|b5a2bedb380100c7 patch@plucky.distro.conectiva|arch/i386/kernel/acpitable.c|20020313234107|17310 > torvalds@athlon.transmeta.com|arch/i386/kernel/bluesmoke.c|20020205174021|12271|acfb19e910c2eb1 patch@plucky.distro.conectiva|arch/i386/kernel/bluesmoke.c|20020313234107|41210 > torvalds@athlon.transmeta.com|arch/i386/kernel/dmi_scan.c|20020205174021|13175|15e3b244aee71d2f patch@plucky.distro.conectiva|arch/i386/kernel/dmi_scan.c|20020313234107|19532 > torvalds@athlon.transmeta.com|arch/i386/kernel/entry.S|20020205174021|41356|7408c2c5b715ab4f patch@plucky.distro.conectiva|arch/i386/kernel/entry.S|20020313234107|32185 > torvalds@athlon.transmeta.com|arch/i386/kernel/io_apic.c|20020205174021|62744|7f663fd82f3fff2a patch@plucky.distro.conectiva|arch/i386/kernel/io_apic.c|20020313234107|12152 > patch@athlon.transmeta.com|arch/i386/kernel/nmi.c|20020205201857|56826|3dc5eec37a996025 patch@plucky.distro.conectiva|arch/i386/kernel/nmi.c|20020313234107|42418 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 patch@plucky.distro.conectiva|arch/i386/kernel/setup.c|20020313234107|64281 > torvalds@athlon.transmeta.com|arch/i386/kernel/signal.c|20020205174021|52177|a7f842c73f583d7d patch@plucky.distro.conectiva|arch/i386/kernel/signal.c|20020313234107|31107 > torvalds@athlon.transmeta.com|arch/i386/kernel/traps.c|20020205174021|43275|f01e9a814d3e2866 patch@plucky.distro.conectiva|arch/i386/kernel/traps.c|20020313234107|26623 > torvalds@athlon.transmeta.com|arch/i386/mm/init.c|20020205174020|22129|6d1d13376f42353a patch@plucky.distro.conectiva|arch/i386/mm/init.c|20020313234107|50268 > torvalds@athlon.transmeta.com|arch/i386/mm/ioremap.c|20020205174020|23851|3736bdedd6cc37b8 patch@plucky.distro.conectiva|arch/i386/mm/ioremap.c|20020313234107|36125 > torvalds@athlon.transmeta.com|arch/ia64/kernel/entry.S|20020205174031|52149|d716f26aff904d6a patch@plucky.distro.conectiva|arch/ia64/kernel/entry.S|20020313234107|60866 > torvalds@athlon.transmeta.com|arch/ia64/kernel/signal.c|20020205174031|00451|dbc21472b8b776b4 patch@plucky.distro.conectiva|arch/ia64/kernel/signal.c|20020313234107|39334 > torvalds@athlon.transmeta.com|arch/m68k/kernel/entry.S|20020205174027|20055|59adb93bf0343fc1 patch@plucky.distro.conectiva|arch/m68k/kernel/entry.S|20020313234107|43496 > torvalds@athlon.transmeta.com|arch/m68k/kernel/signal.c|20020205174027|25119|514874dccf9806a2 patch@plucky.distro.conectiva|arch/m68k/kernel/signal.c|20020313234107|21665 > torvalds@athlon.transmeta.com|arch/mips/baget/vacserial.c|20020205174024|57175|ba3e9265a4e0bb7e patch@plucky.distro.conectiva|arch/mips/baget/vacserial.c|20020313234107|44883 > torvalds@athlon.transmeta.com|arch/mips/kernel/signal.c|20020205174023|13918|1645fefb26dba5fb patch@plucky.distro.conectiva|arch/mips/kernel/signal.c|20020313234107|05708 > torvalds@athlon.transmeta.com|arch/mips/kernel/syscalls.h|20020205174023|23175|d1290518f2bbb7ae patch@plucky.distro.conectiva|arch/mips/kernel/syscalls.h|20020313234107|03703 > torvalds@athlon.transmeta.com|arch/mips64/kernel/scall_64.S|20020205174032|59071|2573beba2617f832 patch@plucky.distro.conectiva|arch/mips64/kernel/scall_64.S|20020313234107|08088 > torvalds@athlon.transmeta.com|arch/mips64/kernel/scall_o32.S|20020205174032|59726|fddaf190e4f0e28a patch@plucky.distro.conectiva|arch/mips64/kernel/scall_o32.S|20020313234107|08966 > torvalds@athlon.transmeta.com|arch/mips64/kernel/signal.c|20020205174032|61705|f036e2513314d06b patch@plucky.distro.conectiva|arch/mips64/kernel/signal.c|20020313234107|13521 > torvalds@athlon.transmeta.com|arch/mips64/kernel/signal32.c|20020205174032|62403|ff631304e7ca5642 patch@plucky.distro.conectiva|arch/mips64/kernel/signal32.c|20020313234108|35836 > torvalds@athlon.transmeta.com|arch/mips64/sgi-ip27/ip27-rtc.c|20020205174033|02458|d5362941b01b6f25 patch@plucky.distro.conectiva|arch/mips64/sgi-ip27/ip27-rtc.c|20020313234108|20543 > torvalds@athlon.transmeta.com|arch/parisc/kernel/signal.c|20020205174035|17480|3311c81a3480b38e patch@plucky.distro.conectiva|arch/parisc/kernel/signal.c|20020313234108|44112 > torvalds@athlon.transmeta.com|arch/parisc/kernel/syscall.S|20020205174035|18613|d05019063dcbd77f patch@plucky.distro.conectiva|arch/parisc/kernel/syscall.S|20020313234108|31308 > torvalds@athlon.transmeta.com|arch/ppc/kernel/misc.S|20020205174025|06351|1931d0769829cbe1 patch@plucky.distro.conectiva|arch/ppc/kernel/misc.S|20020313234108|50065 > torvalds@athlon.transmeta.com|arch/ppc/kernel/ppc_ksyms.c|20020205174025|24555|ed26bb10e68d159b patch@plucky.distro.conectiva|arch/ppc/kernel/ppc_ksyms.c|20020313234108|01595 > torvalds@athlon.transmeta.com|arch/ppc/kernel/setup.c|20020205174025|18661|7c079e68c9621644 patch@plucky.distro.conectiva|arch/ppc/kernel/setup.c|20020313234108|06383 > torvalds@athlon.transmeta.com|arch/ppc/kernel/signal.c|20020205174025|12377|e1f46d7278a24d2a patch@plucky.distro.conectiva|arch/ppc/kernel/signal.c|20020313234108|31375 > torvalds@athlon.transmeta.com|arch/ppc/mm/init.c|20020205174024|33660|9e754c1b56624c1c patch@plucky.distro.conectiva|arch/ppc/mm/init.c|20020313234108|02218 > torvalds@athlon.transmeta.com|arch/s390/Makefile|20020205174033|08850|dba3a4c7f053986b patch@plucky.distro.conectiva|arch/s390/Makefile|20020313234108|13777 > torvalds@athlon.transmeta.com|arch/s390/config.in|20020205174033|13080|45bbab077883102f patch@plucky.distro.conectiva|arch/s390/config.in|20020313234108|62288 > torvalds@athlon.transmeta.com|arch/s390/defconfig|20020205174033|13748|bd20af47147bed2d patch@plucky.distro.conectiva|arch/s390/defconfig|20020313234108|23018 > patch@plucky.distro.conectiva|arch/s390/boot/install.sh|20020313234105|07902|50f3f186416ca37a patch@plucky.distro.conectiva|arch/s390/boot/install.sh|20020313234106|08854 > torvalds@athlon.transmeta.com|arch/s390/kernel/Makefile|20020205174033|14446|723451d648e41c85 patch@plucky.distro.conectiva|arch/s390/kernel/Makefile|20020313234108|45073 > patch@plucky.distro.conectiva|arch/s390/kernel/asm-offsets.c|20020313234105|08033|289aad19b8b7eb51 patch@plucky.distro.conectiva|arch/s390/kernel/asm-offsets.c|20020313234106|26148 > torvalds@athlon.transmeta.com|arch/s390/kernel/entry.S|20020205174033|17944|ff8aec818c42dcd5 patch@plucky.distro.conectiva|arch/s390/kernel/entry.S|20020313234108|01593 > torvalds@athlon.transmeta.com|arch/s390/kernel/irq.c|20020205174033|22389|eeeb5b3398b7a2ec patch@plucky.distro.conectiva|arch/s390/kernel/irq.c|20020313234108|52279 > torvalds@athlon.transmeta.com|arch/s390/kernel/process.c|20020205174033|25304|2e91137b2238b756 patch@plucky.distro.conectiva|arch/s390/kernel/process.c|20020313234108|32674 > torvalds@athlon.transmeta.com|arch/s390/kernel/reipl.S|20020205174033|26763|141281bb7d57e80a patch@plucky.distro.conectiva|arch/s390/kernel/reipl.S|20020313234108|27993 > torvalds@athlon.transmeta.com|arch/s390/kernel/s390_ksyms.c|20020205174033|27455|ce2fd9995f633f65 patch@plucky.distro.conectiva|arch/s390/kernel/s390_ksyms.c|20020313234108|46596 > torvalds@athlon.transmeta.com|arch/s390/kernel/setup.c|20020205174033|32050|63c6d41be32a006 patch@plucky.distro.conectiva|arch/s390/kernel/setup.c|20020313234108|17978 > torvalds@athlon.transmeta.com|arch/s390/kernel/signal.c|20020205174033|32780|fbdef6bc767efce9 patch@plucky.distro.conectiva|arch/s390/kernel/signal.c|20020313234108|06199 > torvalds@athlon.transmeta.com|arch/s390/kernel/smp.c|20020205174033|33549|2fdb3f667a4721a4 patch@plucky.distro.conectiva|arch/s390/kernel/smp.c|20020313234108|20435 > torvalds@athlon.transmeta.com|arch/s390/kernel/time.c|20020205174033|35076|4567d395fa77617a patch@plucky.distro.conectiva|arch/s390/kernel/time.c|20020313234108|15144 > torvalds@athlon.transmeta.com|arch/s390/kernel/traps.c|20020205174033|35836|cbb7b7fdfef46619 patch@plucky.distro.conectiva|arch/s390/kernel/traps.c|20020313234108|15485 > torvalds@athlon.transmeta.com|arch/s390/mm/fault.c|20020205174035|56716|23742d3e771747ce patch@plucky.distro.conectiva|arch/s390/mm/fault.c|20020313234108|42698 > patch@athlon.transmeta.com|arch/s390x/Makefile|20020205175910|09389|b16005281d76ed5d patch@plucky.distro.conectiva|arch/s390x/Makefile|20020313234108|08367 > patch@athlon.transmeta.com|arch/s390x/config.in|20020205175910|09952|8009325d76fd859a patch@plucky.distro.conectiva|arch/s390x/config.in|20020313234108|65406 > patch@athlon.transmeta.com|arch/s390x/defconfig|20020205175910|10053|cda635d23b7a288 patch@plucky.distro.conectiva|arch/s390x/defconfig|20020313234108|23978 > patch@plucky.distro.conectiva|arch/s390x/boot/install.sh|20020313234105|08159|58c27cf331013d3d patch@plucky.distro.conectiva|arch/s390x/boot/install.sh|20020313234106|08854 > patch@athlon.transmeta.com|arch/s390x/kernel/Makefile|20020205175910|10185|7e74b74cb40973df patch@plucky.distro.conectiva|arch/s390x/kernel/Makefile|20020313234108|60300 > patch@plucky.distro.conectiva|arch/s390x/kernel/asm-offsets.c|20020313234105|08294|ac2e5406e9d341ba patch@plucky.distro.conectiva|arch/s390x/kernel/asm-offsets.c|20020313234106|26148 > patch@athlon.transmeta.com|arch/s390x/kernel/entry.S|20020205175910|11217|10e183ae85e77718 patch@plucky.distro.conectiva|arch/s390x/kernel/entry.S|20020313234108|62192 > patch@athlon.transmeta.com|arch/s390x/kernel/irq.c|20020205175910|12232|325cc06f32cd46e9 patch@plucky.distro.conectiva|arch/s390x/kernel/irq.c|20020313234108|53360 > patch@athlon.transmeta.com|arch/s390x/kernel/linux32.c|20020205175910|12532|21517b9d721b066f patch@plucky.distro.conectiva|arch/s390x/kernel/linux32.c|20020313234108|08947 > patch@athlon.transmeta.com|arch/s390x/kernel/process.c|20020205175910|13482|2a080160ebc99523 patch@plucky.distro.conectiva|arch/s390x/kernel/process.c|20020313234108|21976 > patch@athlon.transmeta.com|arch/s390x/kernel/reipl.S|20020205175910|13813|b0ab507225a81311 patch@plucky.distro.conectiva|arch/s390x/kernel/reipl.S|20020313234108|12729 > patch@athlon.transmeta.com|arch/s390x/kernel/s390_ksyms.c|20020205175910|14051|4db9de8d26e23297 patch@plucky.distro.conectiva|arch/s390x/kernel/s390_ksyms.c|20020313234108|00412 > patch@athlon.transmeta.com|arch/s390x/kernel/setup.c|20020205175910|14438|eadb7fcf184931d2 patch@plucky.distro.conectiva|arch/s390x/kernel/setup.c|20020313234108|47142 > patch@athlon.transmeta.com|arch/s390x/kernel/signal.c|20020205175910|14589|c2069270bb5bcccb patch@plucky.distro.conectiva|arch/s390x/kernel/signal.c|20020313234108|20429 > patch@athlon.transmeta.com|arch/s390x/kernel/signal32.c|20020205175910|14758|5be1ebbda9fe046 patch@plucky.distro.conectiva|arch/s390x/kernel/signal32.c|20020313234108|41900 > patch@athlon.transmeta.com|arch/s390x/kernel/smp.c|20020205175910|14939|8a3989272e0d965d patch@plucky.distro.conectiva|arch/s390x/kernel/smp.c|20020313234108|06059 > patch@athlon.transmeta.com|arch/s390x/kernel/time.c|20020205175910|15272|d99bb8fc902d8f74 patch@plucky.distro.conectiva|arch/s390x/kernel/time.c|20020313234108|20015 > patch@athlon.transmeta.com|arch/s390x/kernel/traps.c|20020205175910|15410|4874de24c0af0f92 patch@plucky.distro.conectiva|arch/s390x/kernel/traps.c|20020313234108|38217 > patch@athlon.transmeta.com|arch/s390x/mm/fault.c|20020205175910|16891|47cff616d1f00062 patch@plucky.distro.conectiva|arch/s390x/mm/fault.c|20020313234108|60025 > torvalds@athlon.transmeta.com|arch/sh/kernel/entry.S|20020205174031|04592|ed3521b585253c7f patch@plucky.distro.conectiva|arch/sh/kernel/entry.S|20020313234108|53330 > torvalds@athlon.transmeta.com|arch/sh/kernel/signal.c|20020205174031|08300|2b4764eaac617d0f patch@plucky.distro.conectiva|arch/sh/kernel/signal.c|20020313234108|26846 > torvalds@athlon.transmeta.com|arch/sparc/kernel/signal.c|20020205174022|30589|9d7428957021736a patch@plucky.distro.conectiva|arch/sparc/kernel/signal.c|20020313234108|53333 > torvalds@athlon.transmeta.com|arch/sparc/kernel/systbls.S|20020205174022|00566|c606b480b8e2359 patch@plucky.distro.conectiva|arch/sparc/kernel/systbls.S|20020313234108|56742 > torvalds@athlon.transmeta.com|arch/sparc64/kernel/signal.c|20020205174029|13768|feeb1b324f00398 patch@plucky.distro.conectiva|arch/sparc64/kernel/signal.c|20020313234108|49807 > torvalds@athlon.transmeta.com|arch/sparc64/kernel/signal32.c|20020205174029|01526|8f8388459472f510 patch@plucky.distro.conectiva|arch/sparc64/kernel/signal32.c|20020313234108|17563 > torvalds@athlon.transmeta.com|arch/sparc64/kernel/systbls.S|20020205174029|04332|7b9598ed387c1a13 patch@plucky.distro.conectiva|arch/sparc64/kernel/systbls.S|20020313234108|32115 > patch@athlon.transmeta.com|drivers/acorn/char/mouse_ps2.c|20020205184819|34049|7f5d21bceef8aa3a patch@plucky.distro.conectiva|drivers/acorn/char/mouse_ps2.c|20020313234108|38784 > torvalds@athlon.transmeta.com|drivers/acorn/scsi/ecoscsi.c|20020205174017|17274|cc3dd69996732667 patch@plucky.distro.conectiva|drivers/acorn/scsi/ecoscsi.c|20020313234108|39114 > torvalds@athlon.transmeta.com|drivers/atm/fore200e.c|20020205174018|29301|13c516873f9e24 patch@plucky.distro.conectiva|drivers/atm/fore200e.c|20020313234108|58207 > torvalds@athlon.transmeta.com|drivers/block/cciss.c|20020205174004|21553|b515e003e5c354a6 patch@plucky.distro.conectiva|drivers/block/cciss.c|20020313234108|37581 > torvalds@athlon.transmeta.com|drivers/block/cciss_cmd.h|20020205174004|35679|c69729f148ff0a65 patch@plucky.distro.conectiva|drivers/block/cciss_cmd.h|20020313234108|61808 > marcelo@plucky.distro.conectiva|drivers/block/cciss_scsi.c|20020313224744|32590|b0bb1a815c345ff8 patch@plucky.distro.conectiva|drivers/block/cciss_scsi.c|20020313234108|42206 > patch@athlon.transmeta.com|drivers/bluetooth/hci_emu.c|20020205183534|15573|e8b06ba8f3a89ee3 patch@plucky.distro.conectiva|drivers/bluetooth/hci_vhci.c|20020313234108|60086 > torvalds@athlon.transmeta.com|drivers/char/Config.in|20020205174004|15867|9958e4513e63c76 patch@plucky.distro.conectiva|drivers/char/Config.in|20020313234108|52773 > torvalds@athlon.transmeta.com|drivers/char/acquirewdt.c|20020205174005|44732|60c17dfd8e025c6d patch@plucky.distro.conectiva|drivers/char/acquirewdt.c|20020313234108|34344 > torvalds@athlon.transmeta.com|drivers/char/esp.c|20020205174004|63860|ba70d97ba3ace962 patch@plucky.distro.conectiva|drivers/char/esp.c|20020313234108|50119 > torvalds@athlon.transmeta.com|drivers/char/pc_keyb.c|20020205174005|34918|887573fe115d4264 patch@plucky.distro.conectiva|drivers/char/pc_keyb.c|20020313234108|64991 > patch@plucky.distro.conectiva|drivers/char/serial_txx927.c|20020313233104|05131|f7535fe4e02ee368 patch@plucky.distro.conectiva|drivers/char/serial_txx927.c|20020313234108|63829 > torvalds@athlon.transmeta.com|drivers/i2c/i2c-algo-bit.c|20020205174018|60477|39c7342d3338b9dc patch@plucky.distro.conectiva|drivers/i2c/i2c-algo-bit.c|20020313234108|04845 > torvalds@athlon.transmeta.com|drivers/ide/Config.in|20020205174016|13923|319a49c12041349a patch@plucky.distro.conectiva|drivers/ide/Config.in|20020313234108|05923 > torvalds@athlon.transmeta.com|drivers/ide/Makefile|20020205174016|14283|d9ebd000ef77b743 patch@plucky.distro.conectiva|drivers/ide/Makefile|20020313234108|55764 > torvalds@athlon.transmeta.com|drivers/ide/alim15x3.c|20020205174015|27261|c8310355ae76a6a3 patch@plucky.distro.conectiva|drivers/ide/alim15x3.c|20020313234108|52633 > patch@athlon.transmeta.com|drivers/ide/amd74xx.c|20020205201019|55401|d5454c986c8a6a4f patch@plucky.distro.conectiva|drivers/ide/amd74xx.c|20020313234108|51036 > torvalds@athlon.transmeta.com|drivers/ide/cmd64x.c|20020205174015|29289|c54f5e965a2d9c86 patch@plucky.distro.conectiva|drivers/ide/cmd64x.c|20020313234108|49510 > torvalds@athlon.transmeta.com|drivers/ide/hpt366.c|20020205174015|33336|315b9cd2cecdcd75 patch@plucky.distro.conectiva|drivers/ide/hpt366.c|20020313234108|47102 > torvalds@athlon.transmeta.com|drivers/ide/ide-cd.c|20020205174015|00449|bac63db380c085 patch@plucky.distro.conectiva|drivers/ide/ide-cd.c|20020313234109|51623 > torvalds@athlon.transmeta.com|drivers/ide/ide-cd.h|20020205174016|01188|9b3e614c5c4c426d patch@plucky.distro.conectiva|drivers/ide/ide-cd.h|20020313234109|55279 > torvalds@athlon.transmeta.com|drivers/ide/ide-cs.c|20020205174016|01619|89275429ade73b48 patch@plucky.distro.conectiva|drivers/ide/ide-cs.c|20020313234109|58229 > torvalds@athlon.transmeta.com|drivers/ide/ide-disk.c|20020205174016|01994|95cf473536302b6b patch@plucky.distro.conectiva|drivers/ide/ide-disk.c|20020313234109|37686 > torvalds@athlon.transmeta.com|drivers/ide/ide-dma.c|20020205174016|02397|e7bccab22af51d82 patch@plucky.distro.conectiva|drivers/ide/ide-dma.c|20020313234109|21607 > torvalds@athlon.transmeta.com|drivers/ide/ide-features.c|20020205174016|02826|7a36607a6110187e patch@plucky.distro.conectiva|drivers/ide/ide-features.c|20020313234109|40354 > torvalds@athlon.transmeta.com|drivers/ide/ide-floppy.c|20020205174016|03210|f55dd2d98292a583 patch@plucky.distro.conectiva|drivers/ide/ide-floppy.c|20020313234109|06430 > torvalds@athlon.transmeta.com|drivers/ide/ide-geometry.c|20020205174016|03695|8c57593d9550e3c patch@plucky.distro.conectiva|drivers/ide/ide-geometry.c|20020313234109|58529 > torvalds@athlon.transmeta.com|drivers/ide/ide-pci.c|20020205174016|04052|bd5d06e6a781ad85 patch@plucky.distro.conectiva|drivers/ide/ide-pci.c|20020313234109|40850 > torvalds@athlon.transmeta.com|drivers/ide/ide-probe.c|20020205174016|05214|ee23cdfc3007a4e1 patch@plucky.distro.conectiva|drivers/ide/ide-probe.c|20020313234109|01929 > torvalds@athlon.transmeta.com|drivers/ide/ide-proc.c|20020205174016|05689|b7fdab209ef3600a patch@plucky.distro.conectiva|drivers/ide/ide-proc.c|20020313234109|31462 > torvalds@athlon.transmeta.com|drivers/ide/ide-tape.c|20020205174016|06184|f32b83f78ff86e89 patch@plucky.distro.conectiva|drivers/ide/ide-tape.c|20020313234109|13570 > patch@plucky.distro.conectiva|drivers/ide/ide-taskfile.c|20020313234105|08494|9ffea63beb4fa376 patch@plucky.distro.conectiva|drivers/ide/ide-taskfile.c|20020313234106|18986 > torvalds@athlon.transmeta.com|drivers/ide/ide.c|20020205174016|07154|4e2661f01dc7c5c1 patch@plucky.distro.conectiva|drivers/ide/ide.c|20020313234109|27356 > torvalds@athlon.transmeta.com|drivers/ide/pdc202xx.c|20020205174016|09201|db4851ab690ecaab patch@plucky.distro.conectiva|drivers/ide/pdc202xx.c|20020313234109|14700 > torvalds@athlon.transmeta.com|drivers/ide/pdc4030.c|20020205174016|09621|f65f9db4bea7b286 patch@plucky.distro.conectiva|drivers/ide/pdc4030.c|20020313234109|20900 > torvalds@athlon.transmeta.com|drivers/ide/piix.c|20020205174016|10329|f6f1c753a7a16702 patch@plucky.distro.conectiva|drivers/ide/piix.c|20020313234109|20652 > torvalds@athlon.transmeta.com|drivers/ide/qd6580.c|20020205174016|11045|c2297263f83da64 patch@plucky.distro.conectiva|drivers/ide/qd65xx.c|20020313234109|51673 > patch@athlon.transmeta.com|drivers/ide/qd65xx.h|20020205201335|40861|d447ed4c205a5355 patch@plucky.distro.conectiva|drivers/ide/qd65xx.h|20020313234109|12572 > patch@athlon.transmeta.com|drivers/ide/serverworks.c|20020205201019|55930|2bd53d5ad6a4717 patch@plucky.distro.conectiva|drivers/ide/serverworks.c|20020313234109|36034 > torvalds@athlon.transmeta.com|drivers/ide/sis5513.c|20020205174016|12081|6641e319c30fb81a patch@plucky.distro.conectiva|drivers/ide/sis5513.c|20020313234109|51474 > torvalds@athlon.transmeta.com|drivers/ide/slc90e66.c|20020205174016|14649|7230c47748b1f9f patch@plucky.distro.conectiva|drivers/ide/slc90e66.c|20020313234109|03063 > torvalds@athlon.transmeta.com|drivers/isdn/act2000/act2000_isa.c|20020205174012|18800|8830ab7aa8b49157 patch@plucky.distro.conectiva|drivers/isdn/act2000/act2000_isa.c|20020313234109|58090 > torvalds@athlon.transmeta.com|drivers/isdn/eicon/eicon_mod.c|20020205174012|34365|c02377c259590294 patch@plucky.distro.conectiva|drivers/isdn/eicon/eicon_mod.c|20020313234109|08809 > patch@athlon.transmeta.com|drivers/media/video/w9966.c|20020205181626|01685|c41feffd524d7b6a patch@plucky.distro.conectiva|drivers/media/video/w9966.c|20020313234109|59221 > patch@athlon.transmeta.com|drivers/mtd/chips/sharp.c|20020205183855|59041|55f2ecd47a1c9533 patch@plucky.distro.conectiva|drivers/mtd/chips/sharp.c|20020313234109|11755 > torvalds@athlon.transmeta.com|drivers/net/7990.c|20020205174002|33456|dcb0c81be07ac4be patch@plucky.distro.conectiva|drivers/net/7990.c|20020313234109|07386 > torvalds@athlon.transmeta.com|drivers/net/7990.h|20020205174003|25135|dde12c721f088b44 patch@plucky.distro.conectiva|drivers/net/7990.h|20020313234109|25805 > patch@athlon.transmeta.com|drivers/net/8139cp.c|20020205202444|25227|2810dcfe9fc63266 patch@plucky.distro.conectiva|drivers/net/8139cp.c|20020313234109|26868 > torvalds@athlon.transmeta.com|drivers/net/8139too.c|20020205174003|10391|d8a222ce6495fff6 patch@plucky.distro.conectiva|drivers/net/8139too.c|20020313234109|43955 > torvalds@athlon.transmeta.com|drivers/net/8390.c|20020205174000|07553|4f21fcf989e9e684 patch@plucky.distro.conectiva|drivers/net/8390.c|20020313234109|42591 > torvalds@athlon.transmeta.com|drivers/net/Config.in|20020205174000|25876|fcd3a351e213bc2d patch@plucky.distro.conectiva|drivers/net/Config.in|20020313234109|47233 > torvalds@athlon.transmeta.com|drivers/net/a2065.c|20020205174001|21175|bef10f9afc3553ac patch@plucky.distro.conectiva|drivers/net/a2065.c|20020313234109|16381 > torvalds@athlon.transmeta.com|drivers/net/a2065.h|20020205174002|15611|1d2b4cd04bf96b55 patch@plucky.distro.conectiva|drivers/net/a2065.h|20020313234109|43927 > torvalds@athlon.transmeta.com|drivers/net/am79c961a.c|20020205174002|00570|30a02910c55a5e57 patch@plucky.distro.conectiva|drivers/net/am79c961a.c|20020313234109|20596 > torvalds@athlon.transmeta.com|drivers/net/at1700.c|20020205174000|31647|6c24b5fb82d46590 patch@plucky.distro.conectiva|drivers/net/at1700.c|20020313234109|53156 > torvalds@athlon.transmeta.com|drivers/net/atp.c|20020205174000|19262|b608a7f2362848c6 patch@plucky.distro.conectiva|drivers/net/atp.c|20020313234109|18294 > patch@athlon.transmeta.com|drivers/net/au1000_eth.c|20020205191031|43292|202840abd01a5764 patch@plucky.distro.conectiva|drivers/net/au1000_eth.c|20020313234109|20979 > torvalds@athlon.transmeta.com|drivers/net/bmac.c|20020205174003|04125|82b2b26dfc586ab1 patch@plucky.distro.conectiva|drivers/net/bmac.c|20020313234109|62014 > torvalds@athlon.transmeta.com|drivers/net/de4x5.c|20020205174001|15470|9f85d0724b544b0a patch@plucky.distro.conectiva|drivers/net/de4x5.c|20020313234109|14067 > torvalds@athlon.transmeta.com|drivers/net/declance.c|20020205174003|01977|ef39e11bcdfcd4b4 patch@plucky.distro.conectiva|drivers/net/declance.c|20020313234109|35848 > torvalds@athlon.transmeta.com|drivers/net/depca.c|20020205174000|34122|753fdf341224e6e8 patch@plucky.distro.conectiva|drivers/net/depca.c|20020313234110|17394 > patch@athlon.transmeta.com|drivers/net/dl2k.c|20020205191047|64064|17c7d48fd15e052 patch@plucky.distro.conectiva|drivers/net/dl2k.c|20020313234110|41418 > patch@athlon.transmeta.com|drivers/net/dl2k.h|20020205191047|64289|38e433430e66f8 patch@plucky.distro.conectiva|drivers/net/dl2k.h|20020313234110|22837 > torvalds@athlon.transmeta.com|drivers/net/dmfe.c|20020205174003|06194|90c4b68ac4430377 patch@plucky.distro.conectiva|drivers/net/dmfe.c|20020313234110|14121 > torvalds@athlon.transmeta.com|drivers/net/epic100.c|20020205174003|01374|111fce8220b44dca patch@plucky.distro.conectiva|drivers/net/epic100.c|20020313234110|22197 > torvalds@athlon.transmeta.com|drivers/net/ewrk3.c|20020205174001|13864|cfa24e3bd0cdc03c patch@plucky.distro.conectiva|drivers/net/ewrk3.c|20020313234110|50221 > patch@athlon.transmeta.com|drivers/net/fealnx.c|20020205181618|10095|3919f1cd979f5944 patch@plucky.distro.conectiva|drivers/net/fealnx.c|20020313234110|16254 > torvalds@athlon.transmeta.com|drivers/net/gmac.c|20020205174003|06930|89e28b6afd998a49 patch@plucky.distro.conectiva|drivers/net/gmac.c|20020313234110|17706 > torvalds@athlon.transmeta.com|drivers/net/ioc3-eth.c|20020205174003|04824|e007c1ba28a071af patch@plucky.distro.conectiva|drivers/net/ioc3-eth.c|20020313234110|08828 > torvalds@athlon.transmeta.com|drivers/net/lance.c|20020205174000|15663|ddb1c095716c91c8 patch@plucky.distro.conectiva|drivers/net/lance.c|20020313234110|32358 > torvalds@athlon.transmeta.com|drivers/net/mace.c|20020205174002|55704|3541c9b5c56cabaf patch@plucky.distro.conectiva|drivers/net/mace.c|20020313234110|19601 > torvalds@athlon.transmeta.com|drivers/net/macmace.c|20020205174004|02746|ba8d4ee6eb3031b0 patch@plucky.distro.conectiva|drivers/net/macmace.c|20020313234110|55248 > torvalds@athlon.transmeta.com|drivers/net/myri_sbus.c|20020205174002|26648|d4a47cce2cd8912b patch@plucky.distro.conectiva|drivers/net/myri_sbus.c|20020313234110|21443 > torvalds@athlon.transmeta.com|drivers/net/natsemi.c|20020205174004|13788|7571079fa0bab369 patch@plucky.distro.conectiva|drivers/net/natsemi.c|20020313234110|01273 > patch@athlon.transmeta.com|drivers/net/pci-skeleton.c|20020205175910|18737|dcf8cca64f0ef32d patch@plucky.distro.conectiva|drivers/net/pci-skeleton.c|20020313234110|39479 > torvalds@athlon.transmeta.com|drivers/net/pcnet32.c|20020205174002|39776|348dd0b7870db84b patch@plucky.distro.conectiva|drivers/net/pcnet32.c|20020313234110|35816 > torvalds@athlon.transmeta.com|drivers/net/ppp_async.c|20020205174002|57092|b7b38530eba02bf0 patch@plucky.distro.conectiva|drivers/net/ppp_async.c|20020313234110|54293 > torvalds@athlon.transmeta.com|drivers/net/ppp_generic.c|20020205174002|35550|ca630029e9ac1847 patch@plucky.distro.conectiva|drivers/net/ppp_generic.c|20020313234110|08841 > torvalds@athlon.transmeta.com|drivers/net/ppp_synctty.c|20020205174003|20290|cd56a78561e04eb9 patch@plucky.distro.conectiva|drivers/net/ppp_synctty.c|20020313234110|56775 > torvalds@athlon.transmeta.com|drivers/net/pppoe.c|20020205174003|22373|1db5cc88a7bb4037 patch@plucky.distro.conectiva|drivers/net/pppoe.c|20020313234110|33519 > torvalds@athlon.transmeta.com|drivers/net/sis900.c|20020205174002|44842|359d808f9779c820 patch@plucky.distro.conectiva|drivers/net/sis900.c|20020313234110|42944 > torvalds@athlon.transmeta.com|drivers/net/smc9194.c|20020205174001|19544|9314e6603f0f9949 patch@plucky.distro.conectiva|drivers/net/smc9194.c|20020313234110|53959 > torvalds@athlon.transmeta.com|drivers/net/starfire.c|20020205174002|38362|d6d0d6d4882b4b0c patch@plucky.distro.conectiva|drivers/net/starfire.c|20020313234110|02856 > torvalds@athlon.transmeta.com|drivers/net/sunbmac.c|20020205174003|25788|f9cd8b1ef99e325 patch@plucky.distro.conectiva|drivers/net/sunbmac.c|20020313234110|09103 > torvalds@athlon.transmeta.com|drivers/net/sundance.c|20020205174004|14503|f8169616a0ccd91f patch@plucky.distro.conectiva|drivers/net/sundance.c|20020313234110|52691 > patch@athlon.transmeta.com|drivers/net/sungem.c|20020205180614|25467|6af2a0e0fcdb12e9 patch@plucky.distro.conectiva|drivers/net/sungem.c|20020313234110|51315 > torvalds@athlon.transmeta.com|drivers/net/sunhme.c|20020205174001|18531|7d59194b7968e20b patch@plucky.distro.conectiva|drivers/net/sunhme.c|20020313234110|27281 > torvalds@athlon.transmeta.com|drivers/net/sunlance.c|20020205174001|17635|540a6117441a4655 patch@plucky.distro.conectiva|drivers/net/sunlance.c|20020313234110|60822 > torvalds@athlon.transmeta.com|drivers/net/sunqe.c|20020205174002|27355|2767d49f5484351b patch@plucky.distro.conectiva|drivers/net/sunqe.c|20020313234110|05851 > patch@plucky.distro.conectiva|drivers/net/tc35815.c|20020313233104|18317|35520c4bdf218f4 patch@plucky.distro.conectiva|drivers/net/tc35815.c|20020313234110|37982 > torvalds@athlon.transmeta.com|drivers/net/via-rhine.c|20020205174002|40539|d599109dbcb76de7 patch@plucky.distro.conectiva|drivers/net/via-rhine.c|20020313234110|10090 > torvalds@athlon.transmeta.com|drivers/net/winbond-840.c|20020205174004|15226|ee818ceb7120b2b7 patch@plucky.distro.conectiva|drivers/net/winbond-840.c|20020313234110|40620 > torvalds@athlon.transmeta.com|drivers/net/yellowfin.c|20020205174002|41948|7be7b75b6dc5a93c patch@plucky.distro.conectiva|drivers/net/yellowfin.c|20020313234111|55714 > torvalds@athlon.transmeta.com|drivers/net/irda/Config.in|20020205174003|11179|6b0735c3d83d86a7 patch@plucky.distro.conectiva|drivers/net/irda/Config.in|20020313234111|08125 > patch@athlon.transmeta.com|drivers/net/irda/ali-ircc.c|20020205191006|33736|d804cfa2819f8e4a patch@plucky.distro.conectiva|drivers/net/irda/ali-ircc.c|20020313234111|49499 > patch@athlon.transmeta.com|drivers/net/irda/irda-usb.c|20020205181400|55514|cefdeaf478a984c6 patch@plucky.distro.conectiva|drivers/net/irda/irda-usb.c|20020313234111|44534 > torvalds@athlon.transmeta.com|drivers/net/pcmcia/fmvj18x_cs.c|20020205174003|20887|9ab5c9b7300d5fa patch@plucky.distro.conectiva|drivers/net/pcmcia/fmvj18x_cs.c|20020313234111|20713 > torvalds@athlon.transmeta.com|drivers/net/pcmcia/ray_cs.c|20020205174003|14371|644274396f4ba35c patch@plucky.distro.conectiva|drivers/net/pcmcia/ray_cs.c|20020313234111|25214 > torvalds@athlon.transmeta.com|drivers/net/pcmcia/smc91c92_cs.c|20020205174003|25006|584b3194194b765c patch@plucky.distro.conectiva|drivers/net/pcmcia/smc91c92_cs.c|20020313234111|17445 > torvalds@athlon.transmeta.com|drivers/net/pcmcia/xircom_tulip_cb.c|20020205174003|31997|c18ee608787470db patch@plucky.distro.conectiva|drivers/net/pcmcia/xircom_tulip_cb.c|20020313234111|22808 > torvalds@athlon.transmeta.com|drivers/net/sk98lin/skaddr.c|20020205174003|42190|6a9c134877368 patch@plucky.distro.conectiva|drivers/net/sk98lin/skaddr.c|20020313234111|54500 > torvalds@athlon.transmeta.com|drivers/net/sk98lin/h/skdrv1st.h|20020205174003|30258|619475235c30b1bf patch@plucky.distro.conectiva|drivers/net/sk98lin/h/skdrv1st.h|20020313234111|43639 > torvalds@athlon.transmeta.com|drivers/net/tokenring/lanstreamer.c|20020205174001|15050|a6c907ae77db6443 patch@plucky.distro.conectiva|drivers/net/tokenring/lanstreamer.c|20020313234111|00517 > torvalds@athlon.transmeta.com|drivers/net/tokenring/lanstreamer.h|20020205174001|16025|54eaa167339edff0 patch@plucky.distro.conectiva|drivers/net/tokenring/lanstreamer.h|20020313234111|08118 > torvalds@athlon.transmeta.com|drivers/net/tulip/tulip_core.c|20020205174003|64009|fc08ffb72c095f27 patch@plucky.distro.conectiva|drivers/net/tulip/tulip_core.c|20020313234111|19728 > torvalds@athlon.transmeta.com|drivers/net/wan/lmc/lmc_debug.c|20020205174001|53355|46ae93f16f7b62d6 patch@plucky.distro.conectiva|drivers/net/wan/lmc/lmc_debug.c|20020313234111|15972 > torvalds@athlon.transmeta.com|drivers/pci/pci.c|20020205174010|23421|908d67a21ae3f5ec patch@plucky.distro.conectiva|drivers/pci/pci.c|20020313234111|19483 > torvalds@athlon.transmeta.com|arch/s390/kernel/s390io.c|20020205174033|29542|cd59a2442be41ec patch@plucky.distro.conectiva|drivers/s390/s390io.c|20020313234111|07304 > torvalds@athlon.transmeta.com|drivers/s390/misc/chandev.c|20020205174018|31825|5d3401e2646e05a7 patch@plucky.distro.conectiva|drivers/s390/misc/chandev.c|20020313234111|11232 > torvalds@athlon.transmeta.com|drivers/s390/net/Makefile|20020205174018|32426|764f489c5e99040 patch@plucky.distro.conectiva|drivers/s390/net/Makefile|20020313234111|23642 > torvalds@athlon.transmeta.com|drivers/s390/net/iucv.c|20020205174018|33710|fe178ff5e8cb00be patch@plucky.distro.conectiva|drivers/s390/net/iucv.c|20020313234111|03376 > patch@athlon.transmeta.com|drivers/s390/net/netiucv.c|20020205175910|24626|9f8420d26ec18362 patch@plucky.distro.conectiva|drivers/s390/net/netiucv.c|20020313234111|30483 > torvalds@athlon.transmeta.com|drivers/scsi/cpqfcTSstructs.h|20020205174009|55053|f5ccb3daeac764d7 patch@plucky.distro.conectiva|drivers/scsi/cpqfcTSstructs.h|20020313234111|42366 > torvalds@athlon.transmeta.com|drivers/scsi/ide-scsi.c|20020205174008|03200|681d34e050d28956 patch@plucky.distro.conectiva|drivers/scsi/ide-scsi.c|20020313234111|45783 > torvalds@athlon.transmeta.com|drivers/scsi/scsi_debug.c|20020205174007|55256|311fcf51bd0cf148 patch@plucky.distro.conectiva|drivers/scsi/scsi_debug.c|20020313234111|33410 > torvalds@athlon.transmeta.com|drivers/scsi/scsi_debug.h|20020205174007|55977|4287332dfd3b5061 patch@plucky.distro.conectiva|drivers/scsi/scsi_debug.h|20020313234111|00053 > torvalds@athlon.transmeta.com|drivers/scsi/sym53c8xx.c|20020205174009|11025|180cda83f20a4355 patch@plucky.distro.conectiva|drivers/scsi/sym53c8xx.c|20020313234111|29441 > torvalds@athlon.transmeta.com|drivers/sound/Config.in|20020205174009|07627|ccee96f665afcb21 patch@plucky.distro.conectiva|drivers/sound/Config.in|20020313234111|23858 > patch@athlon.transmeta.com|drivers/sound/nec_vrc5477.c|20020205201335|44777|c274a0de38ba2dce patch@plucky.distro.conectiva|drivers/sound/nec_vrc5477.c|20020313234112|61550 > patch@plucky.distro.conectiva|drivers/usb/auerswald.c|20020313234105|08951|f59d6f50a2bac764 patch@plucky.distro.conectiva|drivers/usb/auerswald.c|20020313234106|37534 > patch@plucky.distro.conectiva|drivers/usb/hcd.c|20020313233104|00357|14df4151e13d95c3 patch@plucky.distro.conectiva|drivers/usb/hcd.c|20020313234112|21248 > patch@athlon.transmeta.com|drivers/usb/hpusbscsi.c|20020205202100|00911|b365c31f2ad86af1 patch@plucky.distro.conectiva|drivers/usb/hpusbscsi.c|20020313234112|06210 > patch@athlon.transmeta.com|drivers/usb/hpusbscsi.h|20020205202100|01449|d532117e5fee2a33 patch@plucky.distro.conectiva|drivers/usb/hpusbscsi.h|20020313234112|29582 > patch@athlon.transmeta.com|drivers/usb/kaweth.c|20020205201000|18923|be9a440fb4ddc042 patch@plucky.distro.conectiva|drivers/usb/kaweth.c|20020313234112|15169 > torvalds@athlon.transmeta.com|drivers/usb/ov511.c|20020205174017|49790|6ef777c6d4ac86 patch@plucky.distro.conectiva|drivers/usb/ov511.c|20020313234112|27441 > torvalds@athlon.transmeta.com|drivers/usb/ov511.h|20020205174017|51038|e9fc8323524f10d6 patch@plucky.distro.conectiva|drivers/usb/ov511.h|20020313234112|27887 > torvalds@athlon.transmeta.com|drivers/usb/pegasus.h|20020205174017|02638|3f606ca7ad43b40e patch@plucky.distro.conectiva|drivers/usb/pegasus.h|20020313234112|24067 > patch@athlon.transmeta.com|drivers/usb/stv680.c|20020205223622|62865|4538fdd17323e497 patch@plucky.distro.conectiva|drivers/usb/stv680.c|20020313234112|44611 > torvalds@athlon.transmeta.com|drivers/usb/uhci.c|20020205174017|62355|c263a651cd5ca4e2 patch@plucky.distro.conectiva|drivers/usb/uhci.c|20020313234112|55941 > torvalds@athlon.transmeta.com|drivers/usb/uhci.h|20020205174017|64923|9873e1d9357be5c2 patch@plucky.distro.conectiva|drivers/usb/uhci.h|20020313234112|11991 > patch@athlon.transmeta.com|drivers/usb/usb-skeleton.c|20020205191031|43847|e738d031e56e3181 patch@plucky.distro.conectiva|drivers/usb/usb-skeleton.c|20020313234112|63658 > patch@athlon.transmeta.com|drivers/usb/vicam.c|20020205223622|63269|6c0bb81e390c6b79 patch@plucky.distro.conectiva|drivers/usb/vicam.c|20020313234112|31373 > patch@athlon.transmeta.com|drivers/usb/serial/cyberjack.c|20020205184819|00074|dbb7626b604961a0 patch@plucky.distro.conectiva|drivers/usb/serial/cyberjack.c|20020313234112|18590 > torvalds@athlon.transmeta.com|drivers/usb/serial/ftdi_sio.c|20020205174017|09746|e31759968a21d82d patch@plucky.distro.conectiva|drivers/usb/serial/ftdi_sio.c|20020313234112|03397 > torvalds@athlon.transmeta.com|drivers/usb/serial/ftdi_sio.h|20020205174017|07515|943a0cb36fae1ead patch@plucky.distro.conectiva|drivers/usb/serial/ftdi_sio.h|20020313234112|30262 > patch@athlon.transmeta.com|drivers/usb/serial/ipaq.c|20020205223622|62133|bc36e4bd893e3bb6 patch@plucky.distro.conectiva|drivers/usb/serial/ipaq.c|20020313234112|59505 > patch@athlon.transmeta.com|drivers/usb/serial/ipaq.h|20020205223622|62289|aaec04d07a8d00d0 patch@plucky.distro.conectiva|drivers/usb/serial/ipaq.h|20020313234112|19793 > patch@athlon.transmeta.com|drivers/usb/storage/datafab.c|20020205191457|54551|f91d75b7a0e9dd8f patch@plucky.distro.conectiva|drivers/usb/storage/datafab.c|20020313234112|40969 > torvalds@athlon.transmeta.com|drivers/usb/storage/debug.c|20020205174017|26165|2ee3c074d9efec0d patch@plucky.distro.conectiva|drivers/usb/storage/debug.c|20020313234112|42600 > patch@athlon.transmeta.com|drivers/usb/storage/isd200.c|20020205191457|56022|57920ea4db9d3e9 patch@plucky.distro.conectiva|drivers/usb/storage/isd200.c|20020313234112|57513 > patch@athlon.transmeta.com|drivers/usb/storage/jumpshot.c|20020205191457|57420|54bd9d20b0bad16c patch@plucky.distro.conectiva|drivers/usb/storage/jumpshot.c|20020313234112|64503 > torvalds@athlon.transmeta.com|drivers/usb/storage/protocol.c|20020205174017|27232|dfc7d52a59e448dd patch@plucky.distro.conectiva|drivers/usb/storage/protocol.c|20020313234112|46732 > torvalds@athlon.transmeta.com|drivers/usb/storage/sddr09.c|20020205174017|32269|eb16ea14383fce04 patch@plucky.distro.conectiva|drivers/usb/storage/sddr09.c|20020313234112|07786 > torvalds@athlon.transmeta.com|drivers/usb/storage/shuttle_usbat.c|20020205174017|33927|fd2536c1756262c2 patch@plucky.distro.conectiva|drivers/usb/storage/shuttle_usbat.c|20020313234112|24216 > torvalds@athlon.transmeta.com|drivers/usb/storage/transport.c|20020205174017|29409|dc211e2e5f8d425d patch@plucky.distro.conectiva|drivers/usb/storage/transport.c|20020313234112|18379 > torvalds@athlon.transmeta.com|drivers/usb/storage/transport.h|20020205174017|30028|e22c9717770a578a patch@plucky.distro.conectiva|drivers/usb/storage/transport.h|20020313234112|35316 > patch@athlon.transmeta.com|drivers/usb/storage/unusual_devs.h|20020205175037|02097|15a91f301f4a405 patch@plucky.distro.conectiva|drivers/usb/storage/unusual_devs.h|20020313234112|52975 > torvalds@athlon.transmeta.com|drivers/usb/storage/usb.c|20020205174017|30573|b7a03dee3de562d9 patch@plucky.distro.conectiva|drivers/usb/storage/usb.c|20020313234112|52475 > torvalds@athlon.transmeta.com|drivers/video/acornfb.c|20020205174016|45546|9b9b5eceaddbbae9 patch@plucky.distro.conectiva|drivers/video/acornfb.c|20020313234112|37974 > torvalds@athlon.transmeta.com|drivers/video/fbmem.c|20020205174016|47455|4a4f4e5fb62ba31b patch@plucky.distro.conectiva|drivers/video/fbmem.c|20020313234112|04605 > torvalds@athlon.transmeta.com|drivers/video/igafb.c|20020205174016|48922|6b475b4df1fe680b patch@plucky.distro.conectiva|drivers/video/igafb.c|20020313234112|56352 > patch@plucky.distro.conectiva|drivers/video/neofb.c|20020313234105|09492|9f7784deb8f3326d patch@plucky.distro.conectiva|drivers/video/neofb.c|20020313234106|56760 > patch@plucky.distro.conectiva|drivers/video/neofb.h|20020313234105|09971|cfdd76174d6074d0 patch@plucky.distro.conectiva|drivers/video/neofb.h|20020313234106|06903 > torvalds@athlon.transmeta.com|drivers/video/newport_con.c|20020205174016|35088|868a6dba10495ff0 patch@plucky.distro.conectiva|drivers/video/newport_con.c|20020313234112|43887 > torvalds@athlon.transmeta.com|drivers/video/sgivwfb.c|20020205174016|56574|e39debcde327b2e9 patch@plucky.distro.conectiva|drivers/video/sgivwfb.c|20020313234112|17099 > patch@athlon.transmeta.com|drivers/video/sstfb.c|20020205201335|46359|a84a09c31f4b5b1a patch@plucky.distro.conectiva|drivers/video/sstfb.c|20020313234112|24580 > patch@athlon.transmeta.com|drivers/video/sstfb.h|20020205201335|46650|f6f7159ac4375436 patch@plucky.distro.conectiva|drivers/video/sstfb.h|20020313234112|62483 > torvalds@athlon.transmeta.com|fs/bad_inode.c|20020205173938|29932|a680b6af3451e569 patch@plucky.distro.conectiva|fs/bad_inode.c|20020313234112|07586 > torvalds@athlon.transmeta.com|fs/pipe.c|20020205173938|03734|cfcd77688dfe62f2 patch@plucky.distro.conectiva|fs/pipe.c|20020313234112|07776 > patch@athlon.transmeta.com|fs/reiserfs/bitmap.c|20020205175032|30486|f4879a953de9cf5a patch@plucky.distro.conectiva|fs/reiserfs/bitmap.c|20020313234112|37860 > patch@athlon.transmeta.com|fs/reiserfs/dir.c|20020205175032|30915|5669974bbd93f61f patch@plucky.distro.conectiva|fs/reiserfs/dir.c|20020313234112|51490 > patch@athlon.transmeta.com|fs/reiserfs/fix_node.c|20020205175032|31677|3421e51857803570 patch@plucky.distro.conectiva|fs/reiserfs/fix_node.c|20020313234112|56499 > patch@athlon.transmeta.com|fs/reiserfs/inode.c|20020205175032|32598|dde399c4d9dcf14b patch@plucky.distro.conectiva|fs/reiserfs/inode.c|20020313234112|13381 > patch@athlon.transmeta.com|fs/reiserfs/ioctl.c|20020205175032|32925|2c80c1e42e37f95b patch@plucky.distro.conectiva|fs/reiserfs/ioctl.c|20020313234112|47766 > patch@athlon.transmeta.com|fs/reiserfs/item_ops.c|20020205175032|33118|4f5d04ec5c09df9 patch@plucky.distro.conectiva|fs/reiserfs/item_ops.c|20020313234112|42233 > patch@athlon.transmeta.com|fs/reiserfs/journal.c|20020205175032|33379|c978f60ec0ca7b52 patch@plucky.distro.conectiva|fs/reiserfs/journal.c|20020313234112|18288 > patch@athlon.transmeta.com|fs/reiserfs/namei.c|20020205175032|34164|1b238378806a7202 patch@plucky.distro.conectiva|fs/reiserfs/namei.c|20020313234113|40160 > patch@athlon.transmeta.com|fs/reiserfs/objectid.c|20020205175032|34443|3c629917be42063b patch@plucky.distro.conectiva|fs/reiserfs/objectid.c|20020313234113|17454 > patch@athlon.transmeta.com|fs/reiserfs/prints.c|20020205175032|00174|c3be0bb295bc9a7a patch@plucky.distro.conectiva|fs/reiserfs/prints.c|20020313234113|45584 > patch@athlon.transmeta.com|fs/reiserfs/procfs.c|20020205203238|10812|e7e35251ff800ac3 patch@plucky.distro.conectiva|fs/reiserfs/procfs.c|20020313234113|31638 > patch@athlon.transmeta.com|fs/reiserfs/stree.c|20020205175033|00641|21879a298ebfbd9f patch@plucky.distro.conectiva|fs/reiserfs/stree.c|20020313234113|45609 > patch@athlon.transmeta.com|fs/reiserfs/super.c|20020205175033|01005|5b68d38545a870fb patch@plucky.distro.conectiva|fs/reiserfs/super.c|20020313234113|14413 > patch@athlon.transmeta.com|fs/reiserfs/tail_conversion.c|20020205175033|01249|330b08139ddc224 patch@plucky.distro.conectiva|fs/reiserfs/tail_conversion.c|20020313234113|37693 > torvalds@athlon.transmeta.com|fs/smbfs/cache.c|20020205173938|22307|372f6b056577ce1c patch@plucky.distro.conectiva|fs/smbfs/cache.c|20020313234113|58822 > torvalds@athlon.transmeta.com|fs/smbfs/proc.c|20020205173938|21777|591ea10c90b7c1c9 patch@plucky.distro.conectiva|fs/smbfs/proc.c|20020313234113|42003 > torvalds@athlon.transmeta.com|fs/ufs/super.c|20020205173938|32248|b768eb2c6b6d1156 patch@plucky.distro.conectiva|fs/ufs/super.c|20020313234113|18288 > torvalds@athlon.transmeta.com|include/asm-alpha/ide.h|20020205173946|20492|635c7fdb564e2a98 patch@plucky.distro.conectiva|include/asm-alpha/ide.h|20020313234113|44137 > torvalds@athlon.transmeta.com|include/asm-alpha/pgalloc.h|20020205173946|38939|cde0fe999ff5c343 patch@plucky.distro.conectiva|include/asm-alpha/pgalloc.h|20020313234113|16185 > torvalds@athlon.transmeta.com|include/asm-alpha/siginfo.h|20020205173946|28890|1a646a60e550cf9f patch@plucky.distro.conectiva|include/asm-alpha/siginfo.h|20020313234113|02260 > torvalds@athlon.transmeta.com|include/asm-alpha/unistd.h|20020205173945|30922|24baf7c044e3ec04 patch@plucky.distro.conectiva|include/asm-alpha/unistd.h|20020313234113|11140 > torvalds@athlon.transmeta.com|include/asm-arm/ide.h|20020205173951|31387|12f46abb99729a5f patch@plucky.distro.conectiva|include/asm-arm/ide.h|20020313234113|14896 > torvalds@athlon.transmeta.com|include/asm-arm/siginfo.h|20020205173952|07164|dc19e66ae3b0e6c0 patch@plucky.distro.conectiva|include/asm-arm/siginfo.h|20020313234113|04541 > patch@athlon.transmeta.com|include/asm-cris/ide.h|20020205175643|19518|10e385ebf27e214 patch@plucky.distro.conectiva|include/asm-cris/ide.h|20020313234113|22473 > patch@athlon.transmeta.com|include/asm-cris/pgtable.h|20020205175643|22323|349e9f7910e6f4bf patch@plucky.distro.conectiva|include/asm-cris/pgtable.h|20020313234113|34112 > patch@athlon.transmeta.com|include/asm-cris/siginfo.h|20020205175643|24851|8f886cabcdb7a778 patch@plucky.distro.conectiva|include/asm-cris/siginfo.h|20020313234113|00591 > patch@athlon.transmeta.com|include/asm-cris/unistd.h|20020205175643|29680|feaa5c12fcd33a37 patch@plucky.distro.conectiva|include/asm-cris/unistd.h|20020313234113|24291 > torvalds@athlon.transmeta.com|include/asm-i386/fixmap.h|20020205173944|00987|f2e5f6127fdeefc6 patch@plucky.distro.conectiva|include/asm-i386/fixmap.h|20020313234113|59386 > torvalds@athlon.transmeta.com|include/asm-i386/ide.h|20020205173944|54097|5713ad731627013 patch@plucky.distro.conectiva|include/asm-i386/ide.h|20020313234113|46963 > torvalds@athlon.transmeta.com|include/asm-i386/io.h|20020205173944|22373|77a78f0b7346f59a patch@plucky.distro.conectiva|include/asm-i386/io.h|20020313234113|49775 > torvalds@athlon.transmeta.com|include/asm-i386/irq.h|20020205173944|23037|cfa60afe4ac0a973 patch@plucky.distro.conectiva|include/asm-i386/irq.h|20020313234113|24989 > torvalds@athlon.transmeta.com|include/asm-i386/msr.h|20020205173944|05737|99b319b68f052f64 patch@plucky.distro.conectiva|include/asm-i386/msr.h|20020313234113|05497 > torvalds@athlon.transmeta.com|include/asm-i386/pgtable.h|20020205173944|31987|8abb9f032053fc41 patch@plucky.distro.conectiva|include/asm-i386/pgtable.h|20020313234113|30896 > torvalds@athlon.transmeta.com|include/asm-i386/siginfo.h|20020205173944|61863|ac6002a0f0c8ebae patch@plucky.distro.conectiva|include/asm-i386/siginfo.h|20020313234113|03434 > torvalds@athlon.transmeta.com|include/asm-i386/unistd.h|20020205173944|20441|cd86f1465871d2ae patch@plucky.distro.conectiva|include/asm-i386/unistd.h|20020313234113|06189 > torvalds@athlon.transmeta.com|include/asm-ia64/ide.h|20020205173954|18559|be06d75fecd7e707 patch@plucky.distro.conectiva|include/asm-ia64/ide.h|20020313234113|60750 > torvalds@athlon.transmeta.com|include/asm-ia64/siginfo.h|20020205173954|49498|6ab498acbe0edfd2 patch@plucky.distro.conectiva|include/asm-ia64/siginfo.h|20020313234113|07496 > torvalds@athlon.transmeta.com|include/asm-ia64/unistd.h|20020205173954|60639|b9f2d2e35a3c22a5 patch@plucky.distro.conectiva|include/asm-ia64/unistd.h|20020313234113|00494 > torvalds@athlon.transmeta.com|include/asm-m68k/ide.h|20020205173946|02219|93987617a2f556c patch@plucky.distro.conectiva|include/asm-m68k/ide.h|20020313234113|42883 > torvalds@athlon.transmeta.com|include/asm-m68k/pgalloc.h|20020205173947|39368|3dcee2c2e9e6f340 patch@plucky.distro.conectiva|include/asm-m68k/pgalloc.h|20020313234113|41166 > torvalds@athlon.transmeta.com|include/asm-m68k/siginfo.h|20020205173946|13293|71f5983dc5975d2 patch@plucky.distro.conectiva|include/asm-m68k/siginfo.h|20020313234113|33904 > torvalds@athlon.transmeta.com|include/asm-m68k/unistd.h|20020205173946|54521|d9c227cc6a90087e patch@plucky.distro.conectiva|include/asm-m68k/unistd.h|20020313234113|48443 > torvalds@athlon.transmeta.com|include/asm-mips/ide.h|20020205173945|41221|96afd3b52322ccd7 patch@plucky.distro.conectiva|include/asm-mips/ide.h|20020313234113|28942 > torvalds@athlon.transmeta.com|include/asm-mips/pgtable.h|20020205173945|19541|1ee86b45ad89df47 patch@plucky.distro.conectiva|include/asm-mips/pgtable.h|20020313234113|12112 > torvalds@athlon.transmeta.com|include/asm-mips/siginfo.h|20020205173945|50912|1c3148b6739e58ff patch@plucky.distro.conectiva|include/asm-mips/siginfo.h|20020313234113|49053 > torvalds@athlon.transmeta.com|include/asm-mips/unistd.h|20020205173944|32413|96869979d8709174 patch@plucky.distro.conectiva|include/asm-mips/unistd.h|20020313234113|42145 > torvalds@athlon.transmeta.com|include/asm-mips64/ide.h|20020205173955|59780|cb03d3f8803381ef patch@plucky.distro.conectiva|include/asm-mips64/ide.h|20020313234113|60609 > torvalds@athlon.transmeta.com|include/asm-mips64/pgtable.h|20020205173955|15590|b56a294b3de28c2e patch@plucky.distro.conectiva|include/asm-mips64/pgtable.h|20020313234113|39982 > torvalds@athlon.transmeta.com|include/asm-mips64/siginfo.h|20020205173956|04418|e613ff7f87778f7 patch@plucky.distro.conectiva|include/asm-mips64/siginfo.h|20020313234113|52926 > torvalds@athlon.transmeta.com|include/asm-mips64/unistd.h|20020205173956|26536|ab2cbd0531100d2c patch@plucky.distro.conectiva|include/asm-mips64/unistd.h|20020313234113|17869 > torvalds@athlon.transmeta.com|include/asm-parisc/ide.h|20020205173957|16172|99996fd875c266 patch@plucky.distro.conectiva|include/asm-parisc/ide.h|20020313234113|39826 > torvalds@athlon.transmeta.com|include/asm-parisc/pgalloc.h|20020205173957|33023|ace80fc1133d44a9 patch@plucky.distro.conectiva|include/asm-parisc/pgalloc.h|20020313234113|38232 > torvalds@athlon.transmeta.com|include/asm-parisc/siginfo.h|20020205173957|46811|31b51db130c64acc patch@plucky.distro.conectiva|include/asm-parisc/siginfo.h|20020313234113|15437 > torvalds@athlon.transmeta.com|include/asm-parisc/unistd.h|20020205173957|61783|d6136df5cc94809e patch@plucky.distro.conectiva|include/asm-parisc/unistd.h|20020313234113|13307 > torvalds@athlon.transmeta.com|include/asm-ppc/ide.h|20020205173949|54435|614352ad142bb6f6 patch@plucky.distro.conectiva|include/asm-ppc/ide.h|20020313234113|26952 > torvalds@athlon.transmeta.com|include/asm-ppc/page.h|20020205173949|30753|230e2f2675701a78 patch@plucky.distro.conectiva|include/asm-ppc/page.h|20020313234113|15538 > torvalds@athlon.transmeta.com|include/asm-ppc/pgtable.h|20020205173949|32184|2bc6619f7a073e1c patch@plucky.distro.conectiva|include/asm-ppc/pgtable.h|20020313234113|28973 > torvalds@athlon.transmeta.com|include/asm-ppc/siginfo.h|20020205173949|11703|b93f87ed436bce0 patch@plucky.distro.conectiva|include/asm-ppc/siginfo.h|20020313234113|00780 > torvalds@athlon.transmeta.com|include/asm-ppc/unistd.h|20020205173949|43229|8a600d62c03b3c46 patch@plucky.distro.conectiva|include/asm-ppc/unistd.h|20020313234113|11641 > torvalds@athlon.transmeta.com|include/asm-s390/atomic.h|20020205173956|41158|4672faf1fed330cc patch@plucky.distro.conectiva|include/asm-s390/atomic.h|20020313234113|16802 > torvalds@athlon.transmeta.com|include/asm-s390/bitops.h|20020205173956|41847|9243092a4463188 patch@plucky.distro.conectiva|include/asm-s390/bitops.h|20020313234113|61839 > patch@athlon.transmeta.com|include/asm-s390/debug.h|20020205175910|25210|d5734a8893f92282 patch@plucky.distro.conectiva|include/asm-s390/debug.h|20020313234113|31985 > torvalds@athlon.transmeta.com|include/asm-s390/ebcdic.h|20020205173956|48690|275954301f3e7b9f patch@plucky.distro.conectiva|include/asm-s390/ebcdic.h|20020313234113|51040 > torvalds@athlon.transmeta.com|include/asm-s390/ide.h|20020205173956|53736|7f8f4e293bec924c patch@plucky.distro.conectiva|include/asm-s390/ide.h|20020313234113|01123 > torvalds@athlon.transmeta.com|include/asm-s390/irq.h|20020205173956|58702|30dd15fb66c1e28 patch@plucky.distro.conectiva|include/asm-s390/irq.h|20020313234113|44372 > torvalds@athlon.transmeta.com|include/asm-s390/lowcore.h|20020205173956|60214|187dcf32c1bcc4c5 patch@plucky.distro.conectiva|include/asm-s390/lowcore.h|20020313234113|53342 > torvalds@athlon.transmeta.com|include/asm-s390/pgtable.h|20020205173956|02741|2306e9c8938ba24d patch@plucky.distro.conectiva|include/asm-s390/pgtable.h|20020313234113|34563 > torvalds@athlon.transmeta.com|include/asm-s390/processor.h|20020205173956|04951|57b9b7582209d398 patch@plucky.distro.conectiva|include/asm-s390/processor.h|20020313234113|00974 > torvalds@athlon.transmeta.com|include/asm-s390/ptrace.h|20020205173956|05689|2fffbfffe6d38861 patch@plucky.distro.conectiva|include/asm-s390/ptrace.h|20020313234113|37009 > patch@plucky.distro.conectiva|include/asm-s390/rwsem.h|20020313234105|10157|69530a28830bc215 patch@plucky.distro.conectiva|include/asm-s390/rwsem.h|20020313234106|04433 > torvalds@athlon.transmeta.com|include/asm-s390/siginfo.h|20020205173956|17480|b5c55070efb1867d patch@plucky.distro.conectiva|include/asm-s390/siginfo.h|20020313234113|11229 > torvalds@athlon.transmeta.com|include/asm-s390/sigp.h|20020205173956|18978|165ba4b57f8071f0 patch@plucky.distro.conectiva|include/asm-s390/sigp.h|20020313234113|31025 > torvalds@athlon.transmeta.com|include/asm-s390/spinlock.h|20020205173956|23403|df2c9f8fad27b11e patch@plucky.distro.conectiva|include/asm-s390/spinlock.h|20020313234113|65396 > torvalds@athlon.transmeta.com|include/asm-s390/system.h|20020205173956|26410|a9214f8ce3f943a6 patch@plucky.distro.conectiva|include/asm-s390/system.h|20020313234114|47687 > torvalds@athlon.transmeta.com|include/asm-s390/timex.h|20020205173956|28674|44ab728e7c1fb9e0 patch@plucky.distro.conectiva|include/asm-s390/timex.h|20020313234114|07042 > torvalds@athlon.transmeta.com|include/asm-s390/uaccess.h|20020205173956|30162|9afbefd2ffae4797 patch@plucky.distro.conectiva|include/asm-s390/uaccess.h|20020313234114|41165 > torvalds@athlon.transmeta.com|include/asm-s390/unistd.h|20020205173956|32461|f9237e7e318aa08a patch@plucky.distro.conectiva|include/asm-s390/unistd.h|20020313234114|63872 > patch@athlon.transmeta.com|include/asm-s390x/atomic.h|20020205175910|26183|6780ab838adbded8 patch@plucky.distro.conectiva|include/asm-s390x/atomic.h|20020313234114|16665 > patch@athlon.transmeta.com|include/asm-s390x/bitops.h|20020205175910|26375|39a0c461d76b3419 patch@plucky.distro.conectiva|include/asm-s390x/bitops.h|20020313234114|08014 > patch@athlon.transmeta.com|include/asm-s390x/debug.h|20020205175910|28027|dbde306ec711b6 patch@plucky.distro.conectiva|include/asm-s390x/debug.h|20020313234114|31985 > patch@athlon.transmeta.com|include/asm-s390x/ebcdic.h|20020205175910|28713|5843f6e3b9f8106f patch@plucky.distro.conectiva|include/asm-s390x/ebcdic.h|20020313234114|50744 > patch@athlon.transmeta.com|include/asm-s390x/ide.h|20020205175910|30166|9ccc64d78f5b2ee patch@plucky.distro.conectiva|include/asm-s390x/ide.h|20020313234114|01123 > patch@athlon.transmeta.com|include/asm-s390x/irq.h|20020205175910|31437|912d8420d0188c17 patch@plucky.distro.conectiva|include/asm-s390x/irq.h|20020313234114|44372 > patch@athlon.transmeta.com|include/asm-s390x/lowcore.h|20020205175910|31901|47bd98f3de92023c patch@plucky.distro.conectiva|include/asm-s390x/lowcore.h|20020313234114|37392 > patch@athlon.transmeta.com|include/asm-s390x/pgtable.h|20020205175910|34414|d2bd9bf2a4d35e55 patch@plucky.distro.conectiva|include/asm-s390x/pgtable.h|20020313234114|40270 > patch@athlon.transmeta.com|include/asm-s390x/processor.h|20020205175910|00582|eba1ddaa80d8b54b patch@plucky.distro.conectiva|include/asm-s390x/processor.h|20020313234114|13634 > patch@athlon.transmeta.com|include/asm-s390x/ptrace.h|20020205175911|00812|68970fdc43a61ef patch@plucky.distro.conectiva|include/asm-s390x/ptrace.h|20020313234114|03554 > patch@plucky.distro.conectiva|include/asm-s390x/rwsem.h|20020313234105|10369|c523b076944990a5 patch@plucky.distro.conectiva|include/asm-s390x/rwsem.h|20020313234106|06435 > patch@athlon.transmeta.com|include/asm-s390x/siginfo.h|20020205175911|04557|792fe067ea9063c2 patch@plucky.distro.conectiva|include/asm-s390x/siginfo.h|20020313234114|11229 > patch@athlon.transmeta.com|include/asm-s390x/sigp.h|20020205175911|05007|37a8f284521230d5 patch@plucky.distro.conectiva|include/asm-s390x/sigp.h|20020313234114|31198 > patch@athlon.transmeta.com|include/asm-s390x/spinlock.h|20020205175911|06294|d767987c3ccbee25 patch@plucky.distro.conectiva|include/asm-s390x/spinlock.h|20020313234114|01529 > patch@athlon.transmeta.com|include/asm-s390x/system.h|20020205175911|07171|b7f27bfadeeb63f patch@plucky.distro.conectiva|include/asm-s390x/system.h|20020313234114|09404 > patch@athlon.transmeta.com|include/asm-s390x/timex.h|20020205175911|07902|1ac5b9d7a670341 patch@plucky.distro.conectiva|include/asm-s390x/timex.h|20020313234114|07672 > patch@athlon.transmeta.com|include/asm-s390x/unistd.h|20020205175911|09322|e11686f6c1dd62a5 patch@plucky.distro.conectiva|include/asm-s390x/unistd.h|20020313234114|58533 > torvalds@athlon.transmeta.com|include/asm-sh/ide.h|20020205173953|00167|3540589f6e0cebd1 patch@plucky.distro.conectiva|include/asm-sh/ide.h|20020313234114|09762 > torvalds@athlon.transmeta.com|include/asm-sh/pgtable.h|20020205173953|44065|abc15b622d4b636e patch@plucky.distro.conectiva|include/asm-sh/pgtable.h|20020313234114|14352 > torvalds@athlon.transmeta.com|include/asm-sh/siginfo.h|20020205173953|50786|bc991c45f1f4380 patch@plucky.distro.conectiva|include/asm-sh/siginfo.h|20020313234114|05834 > torvalds@athlon.transmeta.com|include/asm-sh/unistd.h|20020205173953|63633|43c1bffd8f0393af patch@plucky.distro.conectiva|include/asm-sh/unistd.h|20020313234114|30475 > torvalds@athlon.transmeta.com|include/asm-sparc/ide.h|20020205173948|37856|1c7c3fa8419e799 patch@plucky.distro.conectiva|include/asm-sparc/ide.h|20020313234114|05356 > torvalds@athlon.transmeta.com|include/asm-sparc/pgtable.h|20020205173947|11759|4cb7722612a83f5f patch@plucky.distro.conectiva|include/asm-sparc/pgtable.h|20020313234114|59715 > torvalds@athlon.transmeta.com|include/asm-sparc/siginfo.h|20020205173948|27516|21f72582b16ee5ac patch@plucky.distro.conectiva|include/asm-sparc/siginfo.h|20020313234114|23808 > torvalds@athlon.transmeta.com|include/asm-sparc/unistd.h|20020205173947|32259|73232bead6069ba6 patch@plucky.distro.conectiva|include/asm-sparc/unistd.h|20020313234114|24306 > torvalds@athlon.transmeta.com|include/asm-sparc64/ide.h|20020205173950|18765|504787b4ca3f602b patch@plucky.distro.conectiva|include/asm-sparc64/ide.h|20020313234114|21569 > torvalds@athlon.transmeta.com|include/asm-sparc64/siginfo.h|20020205173950|00234|1752112f221f71cf patch@plucky.distro.conectiva|include/asm-sparc64/siginfo.h|20020313234114|06085 > torvalds@athlon.transmeta.com|include/asm-sparc64/unistd.h|20020205173950|07023|941d3dea84d70261 patch@plucky.distro.conectiva|include/asm-sparc64/unistd.h|20020313234114|36082 > torvalds@athlon.transmeta.com|include/linux/auto_fs.h|20020205173941|36716|ff1a7393309b1e42 patch@plucky.distro.conectiva|include/linux/auto_fs.h|20020313234114|61059 > patch@plucky.distro.conectiva|include/linux/crc32.h|20020313234105|10669|411d3ffb6a9e20f3 patch@plucky.distro.conectiva|include/linux/crc32.h|20020313234106|43814 > torvalds@athlon.transmeta.com|include/linux/hdreg.h|20020205173939|13366|18d891f21d4831b6 patch@plucky.distro.conectiva|include/linux/hdreg.h|20020313234114|64114 > torvalds@athlon.transmeta.com|include/linux/ide.h|20020205173942|08422|3a76b07e7b4461c8 patch@plucky.distro.conectiva|include/linux/ide.h|20020313234114|63403 > torvalds@athlon.transmeta.com|include/linux/mm.h|20020205173939|17274|63c59e97371c7867 patch@plucky.distro.conectiva|include/linux/mm.h|20020313234114|36346 > torvalds@athlon.transmeta.com|include/linux/pm.h|20020205173941|07647|96c93fa5e1757922 patch@plucky.distro.conectiva|include/linux/pm.h|20020313234114|01258 > patch@athlon.transmeta.com|include/linux/reiserfs_fs.h|20020205175033|01657|b34c33bb40399685 patch@plucky.distro.conectiva|include/linux/reiserfs_fs.h|20020313234114|55878 > patch@athlon.transmeta.com|include/linux/reiserfs_fs_i.h|20020205175033|02042|f1f0dcbd1fe52d99 patch@plucky.distro.conectiva|include/linux/reiserfs_fs_i.h|20020313234114|19292 > patch@athlon.transmeta.com|include/linux/reiserfs_fs_sb.h|20020205175033|02238|f7bb33c694e42a8d patch@plucky.distro.conectiva|include/linux/reiserfs_fs_sb.h|20020313234114|24664 > torvalds@athlon.transmeta.com|include/linux/sched.h|20020205173939|14611|469f79add8db23ef patch@plucky.distro.conectiva|include/linux/sched.h|20020313234114|47249 > torvalds@athlon.transmeta.com|include/linux/skbuff.h|20020205173940|33080|68f44fdaa277a7e9 patch@plucky.distro.conectiva|include/linux/skbuff.h|20020313234114|65277 > torvalds@athlon.transmeta.com|include/linux/sysctl.h|20020205173940|27927|76bc981cd02a2c3b patch@plucky.distro.conectiva|include/linux/sysctl.h|20020313234114|35058 > torvalds@athlon.transmeta.com|include/net/irda/irlap.h|20020205173948|28075|c28791f2b9ba6b4a patch@plucky.distro.conectiva|include/net/irda/irlap.h|20020313234114|01399 > torvalds@athlon.transmeta.com|include/net/irda/irlap_event.h|20020205173948|28926|57b464b84a3d5dc0 patch@plucky.distro.conectiva|include/net/irda/irlap_event.h|20020313234114|04385 > torvalds@athlon.transmeta.com|init/main.c|20020205173939|45706|e820548da8f9d8f9 patch@plucky.distro.conectiva|init/main.c|20020313234114|40297 > torvalds@athlon.transmeta.com|kernel/fork.c|20020205173939|48374|31bd2da114c0e69e patch@plucky.distro.conectiva|kernel/fork.c|20020313234114|52597 > torvalds@athlon.transmeta.com|kernel/panic.c|20020205173939|48960|45464593133e90fa patch@plucky.distro.conectiva|kernel/panic.c|20020313234114|33471 > torvalds@athlon.transmeta.com|kernel/pm.c|20020205173939|59736|54cf9cb48854e8d patch@plucky.distro.conectiva|kernel/pm.c|20020313234114|36272 > torvalds@athlon.transmeta.com|kernel/ptrace.c|20020205173939|58105|631293b6e5f412d0 patch@plucky.distro.conectiva|kernel/ptrace.c|20020313234114|54841 > torvalds@athlon.transmeta.com|kernel/signal.c|20020205173939|49957|6f3d1ccf7056b094 patch@plucky.distro.conectiva|kernel/signal.c|20020313234114|41345 > torvalds@athlon.transmeta.com|mm/memory.c|20020205173939|00997|5853d9ffd315b495 patch@plucky.distro.conectiva|mm/memory.c|20020313234114|33559 > torvalds@athlon.transmeta.com|net/irda/af_irda.c|20020205174000|01347|ca3de77db33226dd patch@plucky.distro.conectiva|net/irda/af_irda.c|20020313234114|38916 > torvalds@athlon.transmeta.com|net/irda/irlap.c|20020205174000|19661|76c5af7fac94b9f2 patch@plucky.distro.conectiva|net/irda/irlap.c|20020313234114|21515 > torvalds@athlon.transmeta.com|net/irda/irlap_event.c|20020205174000|21016|dd81de21e1f64770 patch@plucky.distro.conectiva|net/irda/irlap_event.c|20020313234114|63327 > torvalds@athlon.transmeta.com|net/irda/irlap_frame.c|20020205174000|21790|8d056a8e5dae0605 patch@plucky.distro.conectiva|net/irda/irlap_frame.c|20020313234114|26837 > torvalds@athlon.transmeta.com|net/irda/irnet/irnet.h|20020205174000|33282|f517ddc360af736e patch@plucky.distro.conectiva|net/irda/irnet/irnet.h|20020313234114|42171 > torvalds@athlon.transmeta.com|net/irda/irnet/irnet_irda.c|20020205174000|33943|eaea5899892185 patch@plucky.distro.conectiva|net/irda/irnet/irnet_irda.c|20020313234114|05586 marcelo@plucky.distro.conectiva|ChangeSet|20020313235453|28601 M 1.162 02/03/13 20:58:24-03:00 marcelo@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 P ChangeSet S v2.4.19-pre3 s g s l s marcelo@plucky.distro.conectiva|ChangeSet|20020313233628|00000 ------------------------------------------------ == drivers/block/cciss_scsi.c == marcelo@plucky.distro.conectiva|drivers/block/cciss_scsi.c|20020313224744|32590|b0bb1a815c345ff8 marcelo@plucky.distro.conectiva|drivers/block/cciss_scsi.c|20020313224745|45478 D 1.2 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +8 -7 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 42206 O -rw-rw-r-- P drivers/block/cciss_scsi.c ------------------------------------------------ I889 1 DECLARE_COMPLETION(wait); I914 2 cp->waiting = &wait; \ D922 3 I924 1 wait_for_completion(&wait); D1071 4 I1074 4 cdb[6] = (bufsize >> 24) & 0xFF; //MSB cdb[7] = (bufsize >> 16) & 0xFF; cdb[8] = (bufsize >> 8) & 0xFF; cdb[9] = bufsize & 0xFF; == arch/cris/drivers/ethernet.c == patch@athlon.transmeta.com|arch/cris/drivers/ethernet.c|20020205175643|10034|fc07081786c677a1 patch@plucky.distro.conectiva|arch/cris/drivers/ethernet.c|20020313010046|30194 D 1.9 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +3 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 34317 O -rw-rw-r-- P arch/cris/drivers/ethernet.c ------------------------------------------------ D1008 1 I1008 1 if (!led_active && time_after(jiffies, led_next_time)) { D1300 1 I1300 1 if (!led_active && time_after(jiffies, led_next_time)) { D1325 1 I1325 1 if (led_active && jiffies > time_after(jiffies, led_next_time)) { == arch/cris/drivers/ide.c == patch@athlon.transmeta.com|arch/cris/drivers/ide.c|20020205175643|10228|78b931d654294f6d patch@athlon.transmeta.com|arch/cris/drivers/ide.c|20020205191006|46443 D 1.6 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 47629 O -rw-rw-r-- P arch/cris/drivers/ide.c ------------------------------------------------ D357 1 I357 1 while(time_before(jiffies, h)) ; == arch/cris/drivers/lpslave/e100lpslavenet.c == patch@athlon.transmeta.com|arch/cris/drivers/lpslave/e100lpslavenet.c|20020205191006|32515|9180cdb6e50541d1 patch@athlon.transmeta.com|arch/cris/drivers/lpslave/e100lpslavenet.c|20020205191452|21505 D 1.3 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 21547 O -rw-rw-r-- P arch/cris/drivers/lpslave/e100lpslavenet.c ------------------------------------------------ D313 1 I313 1 /* Not connected, don't care */ == arch/cris/kernel/entry.S == patch@athlon.transmeta.com|arch/cris/kernel/entry.S|20020205175643|11180|6d929641b9a76004 patch@plucky.distro.conectiva|arch/cris/kernel/entry.S|20020313010047|27653 D 1.12 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 30354 O -rw-rw-r-- P arch/cris/kernel/entry.S ------------------------------------------------ I1015 1 .long SYMBOL_NAME(sys_tkill) == arch/cris/kernel/signal.c == patch@athlon.transmeta.com|arch/cris/kernel/signal.c|20020205175643|12864|3896825956309f96 patch@athlon.transmeta.com|arch/cris/kernel/signal.c|20020205202122|10333 D 1.6 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +1 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 2189 O -rw-rw-r-- P arch/cris/kernel/signal.c ------------------------------------------------ D682 4 I685 1 sig_exit(signr, exit_code, &info); == arch/i386/kernel/acpitable.c == patch@athlon.transmeta.com|arch/i386/kernel/acpitable.c|20020205203238|00590|b5a2bedb380100c7 patch@athlon.transmeta.com|arch/i386/kernel/acpitable.c|20020205203342|61601 D 1.3 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +24 -20 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 17310 O -rw-rw-r-- P arch/i386/kernel/acpitable.c ------------------------------------------------ D175 1 I175 1 * Temporarily use the virtual area starting from FIX_IO_APIC_BASE_END, I180 4 * * Important Safety Note: The fixed I/O APIC page numbers are *subtracted* * from the fixed base. That's why we start at FIX_IO_APIC_BASE_END and * count idx down while incrementing the phys address. D182 1 I182 1 static __init char * D185 2 I186 2 unsigned long base, offset, mapped_size; int idx; D190 2 I191 4 set_fixmap(FIX_IO_APIC_BASE_END, phys); base = fix_to_virt(FIX_IO_APIC_BASE_END); dprintk("__va_range(0x%lx, 0x%lx): idx=%d mapped at %lx\n", phys, size, FIX_IO_APIC_BASE_END, base); D196 8 I203 3 idx = FIX_IO_APIC_BASE_END; while (mapped_size < size) { if (--idx < FIX_IO_APIC_BASE_0) D205 4 I208 4 phys += PAGE_SIZE; set_fixmap(idx, phys); mapped_size += PAGE_SIZE; } D270 1 I270 1 /* Map in header, then map in full table length. */ D274 1 I274 4 if (!header) break; header = (acpi_table_header *) __va_range(saved_rsdt.entry[i], header->length); == arch/i386/kernel/nmi.c == patch@athlon.transmeta.com|arch/i386/kernel/nmi.c|20020205201857|56826|3dc5eec37a996025 patch@athlon.transmeta.com|arch/i386/kernel/nmi.c|20020205201912|23525 D 1.3 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +109 -22 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 42418 O -rw-rw-r-- P arch/i386/kernel/nmi.c ------------------------------------------------ I10 1 * Mikael Pettersson : Pentium 4 support for local APIC NMI watchdog. I45 26 #define MSR_P4_MISC_ENABLE 0x1A0 #define MSR_P4_MISC_ENABLE_PERF_AVAIL (1<<7) #define MSR_P4_MISC_ENABLE_PEBS_UNAVAIL (1<<12) #define MSR_P4_PERFCTR0 0x300 #define MSR_P4_CCCR0 0x360 #define P4_ESCR_EVENT_SELECT(N) ((N)<<25) #define P4_ESCR_OS (1<<3) #define P4_ESCR_USR (1<<2) #define P4_CCCR_OVF_PMI (1<<26) #define P4_CCCR_THRESHOLD(N) ((N)<<20) #define P4_CCCR_COMPLEMENT (1<<19) #define P4_CCCR_COMPARE (1<<18) #define P4_CCCR_REQUIRED (3<<16) #define P4_CCCR_ESCR_SELECT(N) ((N)<<13) #define P4_CCCR_ENABLE (1<<12) /* Set up IQ_COUNTER0 to behave like a clock, by having IQ_CCCR0 filter CRU_ESCR0 (with any non-null event selector) through a complemented max threshold. [IA32-Vol3, Section 14.9.9] */ #define MSR_P4_IQ_COUNTER0 0x30C #define MSR_P4_IQ_CCCR0 0x36C #define MSR_P4_CRU_ESCR0 0x3B8 #define P4_NMI_CRU_ESCR0 (P4_ESCR_EVENT_SELECT(0x3F)|P4_ESCR_OS|P4_ESCR_USR) #define P4_NMI_IQ_CCCR0 \ (P4_CCCR_OVF_PMI|P4_CCCR_THRESHOLD(15)|P4_CCCR_COMPLEMENT| \ P4_CCCR_COMPARE|P4_CCCR_REQUIRED|P4_CCCR_ESCR_SELECT(4)|P4_CCCR_ENABLE) \ D87 1 I87 1 * missing bits. Right now Intel P6/P4 and AMD K7 only. D91 1 I91 1 (boot_cpu_data.x86 == 6 || boot_cpu_data.x86 == 15)) D121 1 I121 9 switch (boot_cpu_data.x86) { case 6: wrmsr(MSR_P6_EVNTSEL0, 0, 0); break; case 15: wrmsr(MSR_P4_IQ_CCCR0, 0, 0); wrmsr(MSR_P4_CRU_ESCR0, 0, 0); break; } I159 8 static void __pminit clear_msr_range(unsigned int base, unsigned int n) { unsigned int i; \ for(i = 0; i < n; ++i) wrmsr(base+i, 0, 0); } \ D162 1 D167 4 I170 2 clear_msr_range(MSR_K7_EVNTSEL0, 4); clear_msr_range(MSR_K7_PERFCTR0, 4); D187 1 D190 1 I190 1 nmi_perfctr_msr = MSR_P6_PERFCTR0; D192 4 I195 2 clear_msr_range(MSR_P6_EVNTSEL0, 2); clear_msr_range(MSR_P6_PERFCTR0, 2); D202 3 I204 3 wrmsr(MSR_P6_EVNTSEL0, evntsel, 0); Dprintk("setting P6_PERFCTR0 to %08lx\n", -(cpu_khz/nmi_hz*1000)); wrmsr(MSR_P6_PERFCTR0, -(cpu_khz/nmi_hz*1000), 0); D207 1 I207 31 wrmsr(MSR_P6_EVNTSEL0, evntsel, 0); } \ static int __pminit setup_p4_watchdog(void) { unsigned int misc_enable, dummy; \ rdmsr(MSR_P4_MISC_ENABLE, misc_enable, dummy); if (!(misc_enable & MSR_P4_MISC_ENABLE_PERF_AVAIL)) return 0; \ nmi_perfctr_msr = MSR_P4_IQ_COUNTER0; \ if (!(misc_enable & MSR_P4_MISC_ENABLE_PEBS_UNAVAIL)) clear_msr_range(0x3F1, 2); /* MSR 0x3F0 seems to have a default value of 0xFC00, but current docs doesn't fully define it, so leave it alone for now. */ clear_msr_range(0x3A0, 31); clear_msr_range(0x3C0, 6); clear_msr_range(0x3C8, 6); clear_msr_range(0x3E0, 2); clear_msr_range(MSR_P4_CCCR0, 18); clear_msr_range(MSR_P4_PERFCTR0, 18); \ wrmsr(MSR_P4_CRU_ESCR0, P4_NMI_CRU_ESCR0, 0); wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0 & ~P4_CCCR_ENABLE, 0); Dprintk("setting P4_IQ_COUNTER0 to 0x%08lx\n", -(cpu_khz/nmi_hz*1000)); wrmsr(MSR_P4_IQ_COUNTER0, -(cpu_khz/nmi_hz*1000), -1); apic_write(APIC_LVTPC, APIC_DM_NMI); wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0); return 1; D219 1 I219 9 switch (boot_cpu_data.x86) { case 6: setup_p6_watchdog(); break; case 15: if (!setup_p4_watchdog()) return; break; default: D221 1 I221 1 } D286 1 I286 1 printk("NMI Watchdog detected LOCKUP on CPU%d, eip %08lx, registers:\n", cpu, regs->eip); D298 1 I298 12 if (nmi_perfctr_msr) { if (nmi_perfctr_msr == MSR_P4_IQ_COUNTER0) { /* * P4 quirks: * - An overflown perfctr will assert its interrupt * until the OVF flag in its CCCR is cleared. * - LVTPC is masked on interrupt and must be * unmasked by the LVTPC handler. */ wrmsr(MSR_P4_IQ_CCCR0, P4_NMI_IQ_CCCR0, 0); apic_write(APIC_LVTPC, APIC_DM_NMI); } I299 1 } == arch/s390x/Makefile == patch@athlon.transmeta.com|arch/s390x/Makefile|20020205175910|09389|b16005281d76ed5d patch@athlon.transmeta.com|arch/s390x/Makefile|20020205223623|05670 D 1.5 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 8367 O -rw-rw-r-- P arch/s390x/Makefile ------------------------------------------------ I62 1 $(MAKE) -C arch/$(ARCH)/kernel clean == arch/s390x/config.in == patch@athlon.transmeta.com|arch/s390x/config.in|20020205175910|09952|8009325d76fd859a patch@athlon.transmeta.com|arch/s390x/config.in|20020205223623|65406 D 1.7 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +2 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 65406 O -rw-rw-r-- P arch/s390x/config.in ------------------------------------------------ D9 2 I10 2 define_bool CONFIG_RWSEM_GENERIC_SPINLOCK n define_bool CONFIG_RWSEM_XCHGADD_ALGORITHM y == arch/s390x/defconfig == patch@athlon.transmeta.com|arch/s390x/defconfig|20020205175910|10053|cda635d23b7a288 patch@athlon.transmeta.com|arch/s390x/defconfig|20020205223623|29026 D 1.7 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +4 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 23978 O -rw-rw-r-- P arch/s390x/defconfig ------------------------------------------------ D7 2 I8 2 # CONFIG_RWSEM_GENERIC_SPINLOCK is not set CONFIG_RWSEM_XCHGADD_ALGORITHM=y D134 2 I146 1 # CONFIG_ARPD is not set D150 1 D168 1 I168 1 CONFIG_NET_FASTROUTE=y == arch/s390x/kernel/Makefile == patch@athlon.transmeta.com|arch/s390x/kernel/Makefile|20020205175910|10185|7e74b74cb40973df patch@athlon.transmeta.com|arch/s390x/kernel/Makefile|20020205202352|19776 D 1.4 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +23 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 60300 O -rw-rw-r-- P arch/s390x/kernel/Makefile ------------------------------------------------ D13 1 I13 1 all: asm-offsets.h kernel.o head.o init_task.o I34 2 .PHONY: asm-offsets.h \ I38 20 \ # # Automatic offset generation for assembler files. # asm-offsets.h: asm-offsets.c $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -S $< -o - | grep -- "->" | \ (echo "#ifndef __ASM_OFFSETS_H__"; \ echo "#define __ASM_OFFSETS_H__"; \ echo "/*"; \ echo " * DO NOT MODIFY"; \ echo " *"; \ echo " * This file was generated by arch/s390/kernel/Makefile"; \ echo " */"; \ sed -e "s:^->\([^ ]*\) \([^ ]*\) \(.*\):#define \\1 \\2 /* \\3*/:" \ -e "s:->::"; \ echo "#endif" \ ) > asm-offsets.h \ clean: rm -f asm-offsets.h == arch/s390x/kernel/entry.S == patch@athlon.transmeta.com|arch/s390x/kernel/entry.S|20020205175910|11217|10e183ae85e77718 patch@athlon.transmeta.com|arch/s390x/kernel/entry.S|20020205223623|59609 D 1.11 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +133 -121 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 62192 O -rw-rw-r-- P arch/s390x/kernel/entry.S ------------------------------------------------ I20 1 #include "asm-offsets.h" D48 35 I82 1 SP_SIZE = (SP_TRAP+4) D139 2 I140 2 * gpr2 = (task_struct *) prev * gpr3 = (task_struct *) next D146 3 I148 2 tm __THREAD_per+4(%r3),0xe8 # is the new process using per ? jz resume_noper # if not we're fine D150 1 I150 1 clc __THREAD_per(24,%r3),48(%r15) D152 1 I152 1 lctlg %c9,%c11,__THREAD_per(%r3) # Nope we didn't D155 13 I167 6 stg %r15,__THREAD_ksp(%r2) # store kernel stack to prev->tss.ksp lg %r15,__THREAD_ksp(%r3) # load kernel stack from next->tss.ksp stam %a2,%a2,__THREAD_ar2(%r2) # store kernel access reg. 2 stam %a4,%a4,__THREAD_ar4(%r2) # store kernel access reg. 4 lam %a2,%a2,__THREAD_ar2(%r3) # load kernel access reg. 2 lam %a4,%a4,__THREAD_ar4(%r3) # load kernel access reg. 4 D169 1 I169 3 aghi %r3,16384 stg %r3,__LC_KERNEL_STACK # __LC_KERNEL_STACK = new kernel stack br %r14 D198 3 D202 2 I203 1 llgh %r8,__LC_SVC_INT_CODE # get svc number from lowcore I204 2 GET_CURRENT # load pointer to task_struct to R9 stosm 48(%r15),0x03 # reenable interrupts D210 1 I210 1 tm __TASK_ptrace+7(%r9),0x02 # PT_TRACESYS D223 1 I223 1 lg %r0,__TASK_need_resched(%r9) D226 1 I226 1 icm %r0,15,__TASK_sigpending(%r9) D229 2 I243 6 # call schedule with sysc_return as return-address # sysc_reschedule: larl %r14,sysc_return jg schedule # return point is sysc_return # D247 2 I248 9 larl %r12,sysc_return \ # # call syscall_trace before and after system call # special linkage: %r12 contains the return address for trace_svc # trace_svc: lghi %r7,-ENOSYS stg %r7,SP_R2(%r15) # give sysc_trace an -ENOSYS retval D252 1 I252 1 je trace_svc_go D256 1 I256 1 jo trace_svc_noemu D258 1 I258 1 trace_svc_noemu: D260 1 I260 1 trace_svc_go: D265 1 I265 1 lgr %r14,%r12 # return point is in %r12 D269 7 D283 1 D286 3 D633 4 I636 15 .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 222 - reserved for gettid */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 223 - reserved for tkill */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 224 - reserved for setxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 225 - reserved for lsetxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 226 - reserved for fsetxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 227 - reserved for getxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 228 - reserved for lgetxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 229 - reserved for fgetxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 230 - reserved for listxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 231 - reserved for llistxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 232 - reserved for flistxattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 233 - reserved for removexattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 234 - reserved for lremovexattr */ .long SYSCALL(sys_ni_syscall,sys_ni_syscall) /* 235 - reserved for fremovexattr */ .rept 255-235 I637 2 .long SYSCALL(sys_gettid,sys_gettid) .long SYSCALL(sys_tkill,sys_tkill) D660 1 I660 16 jnz pgm_per # got per exception -> special case SAVE_ALL __LC_PGM_OLD_PSW,1 llgh %r8,__LC_PGM_INT_CODE sll %r8,3 GET_CURRENT larl %r1,pgm_check_table lg %r1,0(%r8,%r1) # load address of handler routine la %r2,SP_PTREGS(%r15) # address of register-save area lgf %r3,__LC_PGM_ILC # load program interruption code larl %r14,sysc_return br %r1 # branch to interrupt-handler \ # # handle per exception # pgm_per: D662 1 I662 1 jnz pgm_per_std # ok, normal per event from user space I667 22 \ # # Normal per exception # pgm_per_std: SAVE_ALL __LC_PGM_OLD_PSW,1 GET_CURRENT lghi %r4,0x7f lgf %r3,__LC_PGM_ILC # load program interruption code nr %r4,%r3 # clear per-event-bit and ilc je pgm_per_only # only per of per+check ? sll %r4,3 larl %r1,pgm_check_table lg %r1,0(%r4,%r1) # load address of handler routine la %r2,SP_PTREGS(%r15) # address of register-save area basr %r14,%r1 # branch to interrupt-handler pgm_per_only: la %r2,SP_PTREGS(15) # address of register-save area larl %r14,sysc_return # load adr. of system return jg handle_per_exception \ # I668 1 # D671 2 I672 17 larl %r7,sys_call_table llgh %r8,__LC_SVC_INT_CODE # get svc number from lowcore sll %r8,3 GET_CURRENT # load pointer to task_struct to R9 stosm 48(%r15),0x03 # reenable interrupts tm SP_PSW+3(%r15),0x01 # are we running in 31 bit mode ? jo pgm_svcper_noemu la %r8,4(%r8) # use 31 bit emulation system calls pgm_svcper_noemu: lgf %r8,0(%r8,%r7) # load address of system call routine tm __TASK_ptrace+7(%r9),0x02 # PT_TRACESYS jnz pgm_tracesys basr %r14,%r8 # call sys_xxxx stg %r2,SP_R2(%r15) # store return value (change R2 on stack) # ATTENTION: check sys_execve_glue before # changing anything here !! \ I673 7 icm %r0,15,__TASK_sigpending(%r9) jz pgm_svcper_nosig la %r2,SP_PTREGS(%r15) # load pt_regs sgr %r3,%r3 # clear *oldset brasl %r14,do_signal pgm_svcper_nosig: D676 26 I704 6 # # call trace before and after sys_call # pgm_tracesys: larl %r12,pgm_svcret j trace_svc D723 1 I723 1 lgf %r1,__TASK_processor(%r9) D737 1 I737 1 lg %r0,__TASK_need_resched(%r9) D740 1 I740 1 icm %r0,15,__TASK_sigpending(%r9) == arch/s390x/kernel/irq.c == patch@athlon.transmeta.com|arch/s390x/kernel/irq.c|20020205175910|12232|325cc06f32cd46e9 patch@athlon.transmeta.com|arch/s390x/kernel/irq.c|20020205191452|61315 D 1.5 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +0 -54 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 53360 O -rw-rw-r-- P arch/s390x/kernel/irq.c ------------------------------------------------ D62 54 == arch/s390x/kernel/linux32.c == patch@athlon.transmeta.com|arch/s390x/kernel/linux32.c|20020205175910|12532|21517b9d721b066f patch@athlon.transmeta.com|arch/s390x/kernel/linux32.c|20020205223623|47805 D 1.10 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +20 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 8947 O -rw-rw-r-- P arch/s390x/kernel/linux32.c ------------------------------------------------ I290 15 struct ipc64_perm_ds32 { __kernel_key_t key; __kernel_uid32_t uid; __kernel_gid32_t gid; __kernel_uid32_t cuid; __kernel_gid32_t cgid; __kernel_mode_t32 mode; unsigned short __pad1; unsigned short seq; unsigned short __pad2; unsigned int __unused1; unsigned int __unused2; }; \ D314 1 I314 1 struct ipc64_perm_ds32 sem_perm; D342 1 I342 1 struct ipc64_perm_ds32 msg_perm; D371 1 I371 1 struct ipc64_perm_ds32 shm_perm; D1393 1 I1393 1 int sec, usec; D1445 1 I1445 1 int sec = 0, usec = 0; == arch/s390x/kernel/process.c == patch@athlon.transmeta.com|arch/s390x/kernel/process.c|20020205175910|13482|2a080160ebc99523 patch@athlon.transmeta.com|arch/s390x/kernel/process.c|20020205223623|18139 D 1.8 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +25 -17 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 21976 O -rw-rw-r-- P arch/s390x/kernel/process.c ------------------------------------------------ D53 2 I56 3 psw_t wait_psw; unsigned long reg; \ D61 10 I70 12 while (1) { if (current->need_resched) { schedule(); check_pgt_cache(); continue; } \ /* * Wait for external, I/O or machine check interrupt and * switch of machine check bit after the wait has ended. */ wait_psw.mask = _WAIT_PSW_MASK; D72 3 I74 9 " larl %0,0f\n" " stg %0,8(%1)\n" " lpswe 0(%1)\n" "0: larl %0,1f\n" " stg %0,8(%1)\n" " ni 1(%1),0xf9\n" " lpswe 0(%1)\n" "1:" : "=&a" (reg) : "a" (&wait_psw) : "memory", "cc" ); D168 2 I169 1 frame->gprs[9] = (unsigned long) frame; == arch/s390x/kernel/reipl.S == patch@athlon.transmeta.com|arch/s390x/kernel/reipl.S|20020205175910|13813|b0ab507225a81311 patch@athlon.transmeta.com|arch/s390x/kernel/reipl.S|20020205191006|09616 D 1.3 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +4 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 12729 O -rw-rw-r-- P arch/s390x/kernel/reipl.S ------------------------------------------------ D24 2 I25 4 lghi %r0,5 .Lssch: ssch .Liplorb-.Lpg0(%r13) jz .L001 brct %r0,.Lssch == arch/s390x/kernel/s390_ksyms.c == patch@athlon.transmeta.com|arch/s390x/kernel/s390_ksyms.c|20020205175910|14051|4db9de8d26e23297 patch@athlon.transmeta.com|arch/s390x/kernel/s390_ksyms.c|20020205223623|63916 D 1.6 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 412 O -rw-rw-r-- P arch/s390x/kernel/s390_ksyms.c ------------------------------------------------ I9 1 #include == arch/s390x/kernel/setup.c == patch@athlon.transmeta.com|arch/s390x/kernel/setup.c|20020205175910|14438|eadb7fcf184931d2 patch@athlon.transmeta.com|arch/s390x/kernel/setup.c|20020205223623|44238 D 1.7 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +4 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 47142 O -rw-rw-r-- P arch/s390x/kernel/setup.c ------------------------------------------------ D51 1 I51 1 struct { unsigned long addr, size, type; } memory_chunk[16] = { { 0 } }; D286 2 I287 2 "We are running under VM (64 bit mode)\n" : "We are running native (64 bit mode)\n"); D488 1 I488 1 cpuinfo = &safe_get_cpu_lowcore(n)->cpu_data; == arch/s390x/kernel/signal.c == patch@athlon.transmeta.com|arch/s390x/kernel/signal.c|20020205175910|14589|c2069270bb5bcccb patch@athlon.transmeta.com|arch/s390x/kernel/signal.c|20020205202352|30832 D 1.6 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +3 -8 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 20429 O -rw-rw-r-- P arch/s390x/kernel/signal.c ------------------------------------------------ D69 1 I69 1 /* First 64bits of unions are always present. */ I70 1 err |= __put_user(from->si_uid, &to->si_uid); D72 2 D79 1 D572 4 I575 1 sig_exit(signr, exit_code, &info); == arch/s390x/kernel/signal32.c == patch@athlon.transmeta.com|arch/s390x/kernel/signal32.c|20020205175910|14758|5be1ebbda9fe046 patch@athlon.transmeta.com|arch/s390x/kernel/signal32.c|20020205202352|50040 D 1.5 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +2 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 41900 O -rw-rw-r-- P arch/s390x/kernel/signal32.c ------------------------------------------------ D33 1 I33 1 #define _USER_PSW_MASK32 0x0705C00080000000 D702 4 I705 1 sig_exit(signr, exit_code, &info); == arch/s390x/kernel/smp.c == patch@athlon.transmeta.com|arch/s390x/kernel/smp.c|20020205175910|14939|8a3989272e0d965d patch@athlon.transmeta.com|arch/s390x/kernel/smp.c|20020205223623|61663 D 1.9 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +17 -11 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 6059 O -rw-rw-r-- P arch/s390x/kernel/smp.c ------------------------------------------------ D194 1 I194 2 for (;;) enabled_wait(); D211 1 I211 2 for (;;) enabled_wait(); D228 1 I228 2 for (;;) enabled_wait(); D273 1 I273 1 set_bit(sig, &(get_cpu_lowcore(cpu)->ext_call_fast)); D293 2 I294 3 set_bit(sig, &(get_cpu_lowcore(i)->ext_call_fast)); while (signal_processor(i, sigp_external_call) == sigp_busy) udelay(10); D311 1 I311 1 get_cpu_lowcore(smp_processor_id())->panic_magic = __PANIC_MAGIC; D333 1 I333 1 low_core_addr = (unsigned long)get_cpu_lowcore(i); I434 1 cpu_online_map = 1; D461 1 I461 1 print_cpu_info(&safe_get_cpu_lowcore(smp_processor_id())->cpu_data); D517 1 I517 1 cpu_lowcore = get_cpu_lowcore(cpu); D572 1 I572 1 print_cpu_info(&safe_get_cpu_lowcore(0)->cpu_data); I629 1 EXPORT_SYMBOL(smp_call_function); == arch/s390x/kernel/time.c == patch@athlon.transmeta.com|arch/s390x/kernel/time.c|20020205175910|15272|d99bb8fc902d8f74 patch@athlon.transmeta.com|arch/s390x/kernel/time.c|20020205223718|17155 D 1.6 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +4 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 20015 O -rw-rw-r-- P arch/s390x/kernel/time.c ------------------------------------------------ D58 1 I58 1 asm ("STCK 0(%0)" : : "a" (&now) : "memory", "cc"); D176 1 I176 1 asm volatile ("STCK 0(%1)\n\t" D178 1 I178 2 "SRL %0,28" : "=r" (cc) : "a" (&init_timer_cc) : "memory", "cc"); == arch/s390x/kernel/traps.c == patch@athlon.transmeta.com|arch/s390x/kernel/traps.c|20020205175910|15410|4874de24c0af0f92 patch@athlon.transmeta.com|arch/s390x/kernel/traps.c|20020205223623|51607 D 1.6 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +93 -45 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 38217 O -rw-rw-r-- P arch/s390x/kernel/traps.c ------------------------------------------------ D55 1 I55 4 extern pgm_check_handler_t do_protection_exception; extern pgm_check_handler_t do_segment_exception; extern pgm_check_handler_t do_region_exception; extern pgm_check_handler_t do_page_exception; D273 17 D302 1 I302 1 tsk->thread.trap_no = interruption_code & 0xffff; I328 5 static inline void *get_check_address(struct pt_regs *regs) { return (void *) ADDR_BITS_REMOVE(regs->psw.addr-S390_lowcore.pgm_ilc); } \ I351 17 #define DO_ERROR(signr, str, name) \ asmlinkage void name(struct pt_regs * regs, long interruption_code) \ { \ do_trap(interruption_code, signr, str, regs, NULL); \ } \ #define DO_ERROR_INFO(signr, str, name, sicode, siaddr) \ asmlinkage void name(struct pt_regs * regs, long interruption_code) \ { \ siginfo_t info; \ info.si_signo = signr; \ info.si_errno = 0; \ info.si_code = sicode; \ info.si_addr = (void *)siaddr; \ do_trap(interruption_code, signr, str, regs, &info); \ } \ D353 8 I360 46 \ DO_ERROR_INFO(SIGBUS, "addressing exception", addressing_exception, BUS_ADRERR, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "execute exception", execute_exception, ILL_ILLOPN, get_check_address(regs)) DO_ERROR_INFO(SIGFPE, "fixpoint divide exception", divide_exception, FPE_INTDIV, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "operand exception", operand_exception, ILL_ILLOPN, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "privileged operation", privileged_op, ILL_PRVOPC, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "special operation exception", special_op_exception, ILL_ILLOPN, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "specification exception", specification_exception, ILL_ILLOPN, get_check_address(regs)) DO_ERROR_INFO(SIGILL, "translation exception", translation_exception, ILL_ILLOPN, get_check_address(regs)) \ static inline void do_fp_trap(struct pt_regs *regs, void *location, int fpc, long interruption_code) { siginfo_t si; \ si.si_signo = SIGFPE; si.si_errno = 0; si.si_addr = location; si.si_code = 0; /* FPC[2] is Data Exception Code */ if ((fpc & 0x00000300) == 0) { /* bits 6 and 7 of DXC are 0 iff IEEE exception */ if (fpc & 0x8000) /* invalid fp operation */ si.si_code = FPE_FLTINV; else if (fpc & 0x4000) /* div by 0 */ si.si_code = FPE_FLTDIV; else if (fpc & 0x2000) /* overflow */ si.si_code = FPE_FLTOVF; else if (fpc & 0x1000) /* underflow */ si.si_code = FPE_FLTUND; else if (fpc & 0x0800) /* inexact */ si.si_code = FPE_FLTRES; } current->thread.ieee_instruction_pointer = (addr_t) location; do_trap(interruption_code, SIGFPE, "floating point exception", regs, &si); } D368 1 I368 1 location = (__u16 *) get_check_address(regs); D393 1 I393 2 do_trap(interruption_code, SIGILL, "illegal operation", regs, NULL); D399 1 D401 1 I401 1 location = (__u16 *) get_check_address(regs); D412 6 I417 12 \ if (current->thread.fp_regs.fpc & FPC_DXC_MASK) do_fp_trap(regs, location, current->thread.fp_regs.fpc, interruption_code); else { siginfo_t info; info.si_signo = SIGILL; info.si_errno = 0; info.si_code = ILL_ILLOPN; info.si_addr = location; do_trap(interruption_code, SIGILL, "data exception", regs, &info); D419 4 I437 1 pgm_check_table[4] = &do_protection_exception; D445 3 I447 2 pgm_check_table[0x10] = &do_segment_exception; pgm_check_table[0x11] = &do_page_exception; D450 1 I450 1 pgm_check_table[0x3B] = &do_region_exception; == arch/s390x/mm/fault.c == patch@athlon.transmeta.com|arch/s390x/mm/fault.c|20020205175910|16891|47cff616d1f00062 patch@athlon.transmeta.com|arch/s390x/mm/fault.c|20020205203239|08016 D 1.9 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +111 -100 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 60025 O -rw-rw-r-- P arch/s390x/mm/fault.c ------------------------------------------------ D38 1 I67 71 * Check which address space is addressed by the access * register in S390_lowcore.exc_access_id. * Returns 1 for user space and 0 for kernel space. */ static int __check_access_register(struct pt_regs *regs, int error_code) { int areg = S390_lowcore.exc_access_id; \ if (areg == 0) /* Access via access register 0 -> kernel address */ return 0; if (regs && areg < NUM_ACRS && regs->acrs[areg] <= 1) /* * access register contains 0 -> kernel address, * access register contains 1 -> user space address */ return regs->acrs[areg]; \ /* Something unhealthy was done with the access registers... */ die("page fault via unknown access register", regs, error_code); do_exit(SIGKILL); return 0; } \ /* * Check which address space the address belongs to. * Returns 1 for user space and 0 for kernel space. */ static inline int check_user_space(struct pt_regs *regs, int error_code) { /* * The lowest two bits of S390_lowcore.trans_exc_code indicate * which paging table was used: * 0: Primary Segment Table Descriptor * 1: STD determined via access register * 2: Secondary Segment Table Descriptor * 3: Home Segment Table Descriptor */ int descriptor = S390_lowcore.trans_exc_code & 3; if (descriptor == 1) return __check_access_register(regs, error_code); return descriptor >> 1; } /* * Send SIGSEGV to task. This is an external routine * to keep the stack usage of do_page_fault small. */ static void force_sigsegv(struct pt_regs *regs, unsigned long error_code, int si_code, unsigned long address) { struct siginfo si; \ #if defined(CONFIG_SYSCTL) || defined(CONFIG_PROCESS_DEBUG) #if defined(CONFIG_SYSCTL) if (sysctl_userprocess_debug) #endif { printk("User process fault: interruption code 0x%lX\n", error_code); printk("failing address: %lX\n", address); show_regs(regs); } #endif si.si_signo = SIGSEGV; si.si_code = si_code; si.si_addr = (void *) address; force_sig_info(SIGSEGV, &si, current); } \ /* D73 4 I76 4 * 04 Protection -> Write-Protection (suprression) * 10 Segment translation -> Not present (nullification) * 11 Page translation -> Not present (nullification) * 3b Region third trans. -> Not present (nullification) D78 1 I78 1 extern inline void do_exception(struct pt_regs *regs, unsigned long error_code) I83 1 int user_address; D85 1 D87 1 D97 1 I97 1 if (error_code == 4 && !(S390_lowcore.trans_exc_code & 4)) { D103 1 I103 1 user_address = 0; D117 41 I157 2 address = S390_lowcore.trans_exc_code & -4096L; user_address = check_user_space(regs, error_code); D160 1 I160 3 * Verify that the fault happened in user space, that * we are not in an interrupt and that there is a * user context. D162 1 I162 1 if (user_address == 0 || in_interrupt() || !mm) D170 1 D189 1 I190 5 if (error_code != 4) { /* page not present, check vm flags */ if (!(vma->vm_flags & (VM_READ | VM_EXEC | VM_WRITE))) goto bad_area; } D192 16 I207 1 survive: D213 1 I213 1 switch (handle_mm_fault(mm, vma, address, error_code == 4)) { D240 16 I255 1 force_sigsegv(regs, error_code, si_code, address); D270 2 I271 1 if (user_address == 0) D315 5 I319 1 void do_protection_exception(struct pt_regs *regs, unsigned long error_code) D321 5 I325 2 regs->psw.addr -= (error_code >> 16); do_exception(regs, 4); I327 14 void do_segment_exception(struct pt_regs *regs, unsigned long error_code) { do_exception(regs, 0x10); } \ void do_page_exception(struct pt_regs *regs, unsigned long error_code) { do_exception(regs, 0x11); } \ void do_region_exception(struct pt_regs *regs, unsigned long error_code) { do_exception(regs, 0x3b); } == drivers/acorn/char/mouse_ps2.c == patch@athlon.transmeta.com|drivers/acorn/char/mouse_ps2.c|20020205184819|34049|7f5d21bceef8aa3a patch@athlon.transmeta.com|drivers/acorn/char/mouse_ps2.c|20020205200940|37238 D 1.3 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +2 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 38784 O -rw-rw-r-- P drivers/acorn/char/mouse_ps2.c ------------------------------------------------ D276 1 I276 2 if (misc_register(&psaux_mouse)) return -ENODEV; == drivers/bluetooth/hci_vhci.c == patch@athlon.transmeta.com|drivers/bluetooth/hci_emu.c|20020205183534|15573|e8b06ba8f3a89ee3 patch@athlon.transmeta.com|drivers/bluetooth/hci_vhci.c|20020205201335|04449 D 1.4 02/03/11 11:13:27-03:00 patch@plucky.distro.conectiva +1 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 60086 O -rw-rw-r-- P drivers/bluetooth/hci_vhci.c ------------------------------------------------ D224 5 D299 1 I299 1 llseek: no_llseek, == drivers/ide/amd74xx.c == patch@athlon.transmeta.com|drivers/ide/amd74xx.c|20020205201019|55401|d5454c986c8a6a4f patch@athlon.transmeta.com|drivers/ide/amd74xx.c|20020205201020|63825 D 1.2 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +54 -26 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206860 K 51036 O -rw-rw-r-- P drivers/ide/amd74xx.c ------------------------------------------------ D78 1 I78 2 if ((dev->device == PCI_DEVICE_ID_AMD_VIPER_7411) || (dev->device == PCI_DEVICE_ID_AMD_VIPER_7441)) D125 2 I126 2 printk("%s:%d: Speed 0x%02x UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x\n", drive->name, drive->dn, speed, ultra_timing, dma_pio_timing, pio_timing); D134 2 I135 2 printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x\n", drive->name, ultra_timing, dma_pio_timing, pio_timing); I139 3 case XFER_UDMA_7: case XFER_UDMA_6: speed = XFER_UDMA_5; D141 2 D146 4 D167 1 I167 1 ultra_timing |= 0x42; D225 2 I226 2 printk("%s: UDMA 0x%02x DMAPIO 0x%02x PIO 0x%02x\n", drive->name, ultra_timing, dma_pio_timing, pio_timing); D306 1 I306 2 byte udma_100 = ((dev->device==PCI_DEVICE_ID_AMD_VIPER_7411)|| (dev->device==PCI_DEVICE_ID_AMD_VIPER_7441)) ? 1 : 0; D310 1 I310 4 if (udma_100) udma_66 = eighty_ninty_three(drive); \ if ((id->dma_ultra & 0x0020) && (udma_66) && (udma_100)) { D334 1 I334 1 rval = (int)( ((id->dma_ultra >> 11) & 7) ? ide_dma_on : D355 1 I355 1 if (id->dma_ultra & 0x003F) { I444 32 struct pci_dev *dev = hwif->pci_dev; byte cable_80_pin[2] = { 0, 0 }; byte ata66 = 0; byte tmpbyte; \ /* * Ultra66 cable detection (from Host View) * 7411, 7441, 0x42, bit0: primary, bit2: secondary 80 pin */ pci_read_config_byte(dev, 0x42, &tmpbyte); \ /* * 0x42, bit0 is 1 => primary channel * has 80-pin (from host view) */ if (tmpbyte & 0x01) cable_80_pin[0] = 1; \ /* * 0x42, bit2 is 1 => secondary channel * has 80-pin (from host view) */ if (tmpbyte & 0x04) cable_80_pin[1] = 1; \ switch(dev->device) { case PCI_DEVICE_ID_AMD_VIPER_7441: case PCI_DEVICE_ID_AMD_VIPER_7411: ata66 = (hwif->channel) ? cable_80_pin[1] : cable_80_pin[0]; default: break; } D446 1 I446 1 return(1); D448 1 I448 1 return (unsigned int) ata66; D450 6 == drivers/ide/qd65xx.h == patch@athlon.transmeta.com|drivers/ide/qd65xx.h|20020205201335|40861|d447ed4c205a5355 patch@athlon.transmeta.com|drivers/ide/qd65xx.h|20020205201336|07738 D 1.2 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +2 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 12572 O -rw-rw-r-- P drivers/ide/qd65xx.h ------------------------------------------------ D32 1 I32 1 #define QD_ID3 ((config & QD_CONFIG_ID3)!=0) I41 1 #define QD6580_DEF_DATA2 ((QD_TIM2_PORT<<8) | (QD_ID3 ? 0x0a : 0x00)) == drivers/ide/serverworks.c == patch@athlon.transmeta.com|drivers/ide/serverworks.c|20020205201019|55930|2bd53d5ad6a4717 patch@athlon.transmeta.com|drivers/ide/serverworks.c|20020205201719|00035 D 1.3 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +146 -73 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 36034 O -rw-rw-r-- P drivers/ide/serverworks.c ------------------------------------------------ D2 1 I2 1 * linux/drivers/ide/serverworks.c Version 0.3 26 Oct 2001 D4 2 I5 1 * May be copied or modified under the terms of the GNU General Public License D7 3 I9 4 * Copyright (C) 1998-2000 Michel Aubry * Copyright (C) 1998-2000 Andrzej Krzysztofowicz * Copyright (C) 1998-2000 Andre Hedrick * Portions copyright (c) 2001 Sun Microsystems D11 1 D13 1 I13 12 * RCC/ServerWorks IDE driver for Linux * * OSB4: `Open South Bridge' IDE Interface (fn 1) * supports UDMA mode 2 (33 MB/s) * * CSB5: `Champion South Bridge' IDE Interface (fn 1) * all revisions support UDMA mode 4 (66 MB/s) * revision A2.0 and up support UDMA mode 5 (100 MB/s) * * *** The CSB5 does not provide ANY register *** * *** to detect 80-conductor cable presence. *** * D86 3 I88 2 #define DISPLAY_SVWKS_TIMINGS 1 #undef SVWKS_DEBUG_DRIVE_INFO I94 1 static byte svwks_revision = 0; D106 1 I106 1 u8 reg54, c0=0, c1=0; D123 1 I123 3 p += sprintf(p, "\n " "ServerWorks CSB5 Chipset (rev %02x)\n", svwks_revision); D125 2 I126 4 case PCI_DEVICE_ID_SERVERWORKS_OSB4IDE: p += sprintf(p, "\n " "ServerWorks OSB4 Chipset (rev %02x)\n", svwks_revision); D129 1 I129 3 p += sprintf(p, "\n " "ServerWorks %04x Chipset (rev %02x)\n", bmide_dev->device, svwks_revision); D134 3 D194 5 I198 1 \ D224 1 I224 1 #define SVWKS_CSB5_REVISION_NEW 0x92 /* min PCI_REVISION_ID for UDMA5 (A2.0) */ I294 1 \ D310 3 I312 3 pio_timing |= pio_modes[pio]; csb5_pio |= (pio << (4*drive->dn)); dma_timing |= dma_modes[2]; D325 1 I325 1 #if SVWKS_DEBUG_DRIVE_INFO D327 1 I327 1 #endif /* SVWKS_DEBUG_DRIVE_INFO */ D341 1 I341 1 if (speed > XFER_PIO_4) D343 1 I343 1 else D345 1 D357 1 I357 1 byte timing, speed, pio; D364 1 I364 1 if (drive->id->eide_pio_iordy > 0) D369 1 I369 1 else D375 1 D410 6 I415 4 byte udma_66 = eighty_ninty_three(drive); int ultra66 = (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) ? 1 : 0; int ultra100 = (ultra66 && svwks_revision >= SVWKS_CSB5_REVISION_NEW) ? 1 : 0; byte speed; D461 1 I461 1 if (id->dma_ultra & 0x003F) { D502 1 I502 35 case ide_dma_end: { ide_hwif_t *hwif = HWIF(drive); unsigned long dma_base = hwif->dma_base; if(inb(dma_base+0x02)&1) { #if 0 int i; printk(KERN_ERR "Curious - OSB4 thinks the DMA is still running.\n"); for(i=0;i<10;i++) { if(!(inb(dma_base+0x02)&1)) { printk(KERN_ERR "OSB4 now finished.\n"); break; } udelay(5); } #endif printk(KERN_CRIT "Serverworks OSB4 in impossible state.\n"); printk(KERN_CRIT "Disable UDMA or if you are using Seagate then try switching disk types\n"); printk(KERN_CRIT "on this controller. Please report this event to osb4-bug@ide.cabal.tm\n"); #if 0 /* Panic might sys_sync -> death by corrupt disk */ panic("OSB4: continuing might cause disk corruption.\n"); #else printk(KERN_CRIT "OSB4: continuing might cause disk corruption.\n"); while(1) cpu_relax(); #endif } /* and drop through */ } default: D512 1 I512 2 unsigned int reg; byte btr; I513 1 /* save revision id to determine DMA capability */ D516 2 I517 2 /* force Master Latency Timer value to 64 PCICLKs */ pci_write_config_byte(dev, PCI_LATENCY_TIMER, 0x40); D519 4 I522 11 /* OSB4 : South Bridge and IDE */ if (dev->device == PCI_DEVICE_ID_SERVERWORKS_OSB4IDE) { isa_dev = pci_find_device(PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4, NULL); if (isa_dev) { pci_read_config_dword(isa_dev, 0x64, ®); reg &= ~0x00002000; /* disable 600ns interrupt mask */ reg |= 0x00004000; /* enable UDMA/33 support */ pci_write_config_dword(isa_dev, 0x64, reg); } } D524 10 I533 15 /* setup CSB5 : South Bridge and IDE */ else if (dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) { /* setup the UDMA Control register * * 1. clear bit 6 to enable DMA * 2. enable DMA modes with bits 0-1 * 00 : legacy * 01 : udma2 * 10 : udma2/udma4 * 11 : udma2/udma4/udma5 */ pci_read_config_byte(dev, 0x5A, &btr); btr &= ~0x40; btr |= (svwks_revision >= SVWKS_CSB5_REVISION_NEW) ? 0x3 : 0x2; pci_write_config_byte(dev, 0x5A, btr); D535 1 D554 1 D557 4 I560 4 struct pci_dev *dev = hwif->pci_dev; if (dev->subsystem_vendor == PCI_VENDOR_ID_DELL && dev->vendor == PCI_VENDOR_ID_SERVERWORKS && dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) D563 1 I564 1 } I565 15 /* Sun Cobalt Alpine hardware avoids the 80-pin cable * detect issue by attaching the drives directly to the board. * This check follows the Dell precedent (how scary is that?!) * * WARNING: this only works on Alpine hardware! */ static unsigned int __init ata66_svwks_cobalt (ide_hwif_t *hwif) { struct pci_dev *dev = hwif->pci_dev; if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN && dev->vendor == PCI_VENDOR_ID_SERVERWORKS && dev->device == PCI_DEVICE_ID_SERVERWORKS_CSB5IDE) return ((1 << (hwif->channel + 14)) & dev->subsystem_device) ? 1 : 0; return 0; D570 1 I570 3 struct pci_dev *dev = hwif->pci_dev; \ /* Dell PowerEdge */ D573 1 I573 5 \ /* Cobalt Alpine */ if (dev->subsystem_vendor == PCI_VENDOR_ID_SUN) return ata66_svwks_cobalt (hwif); \ D589 1 D591 1 I592 1 #ifdef CONFIG_IDEDMA_AUTO I594 1 #endif == drivers/media/video/w9966.c == patch@athlon.transmeta.com|drivers/media/video/w9966.c|20020205181626|01685|c41feffd524d7b6a patch@plucky.distro.conectiva|drivers/media/video/w9966.c|20020313233115|32404 D 1.6 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +545 -389 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 59221 O -rw-rw-r-- P drivers/media/video/w9966.c ------------------------------------------------ D22 1 I22 10 * Lifeview Flycam Supra (Philips saa7111a chip) \ * Mikrotek Eyestar2 (Sanyo lc99053 chip) Very rudimentary support, total lack of ccd-control chip settings. Only green video data and no image properties (brightness, etc..) If anyone can parse the Japanese data-sheet for the Sanyo lc99053 chip, feel free to help. Thanks to Steven Griffiths and James Murray for testing. D25 3 I27 1 * Add a working EPP mode (Is this a parport or a w9966 issue?) D30 1 I30 1 * Probe for onboard SRAM, port directions etc. (possible?) D33 1 I33 1 \ D46 1 I46 1 //#define DEBUG // Uncomment for debug output. D49 1 I49 11 # define DPRINTF(f, a...) \ do { \ printk ("%s%s, %d (DEBUG) %s(): ", \ KERN_DEBUG, __FILE__, __LINE__, __func__); \ printk (f, ##a); \ } while (0) # define DASSERT(x) \ do { \ if (!x) \ DPRINTF("Assertion failed at line %d.\n", __LINE__);\ } while (0) D51 1 I51 2 # define DPRINTF(...) do {} while(0) # define DASSERT(...) do {} while(0) D58 1 I58 1 #define W9966_DRIVERNAME "w9966cf" D60 11 I70 4 #define W9966_RBUFFER 8096 // Read buffer (must be an even number) \ #define W9966_WND_MIN_W 2 #define W9966_WND_MIN_H 1 D73 3 I75 7 #define W9966_STATE_PDEV 0x01 // pdev registered #define W9966_STATE_CLAIMED 0x02 // pdev claimed #define W9966_STATE_VDEV 0x04 // vdev registered #define W9966_STATE_BUFFER 0x08 // buffer allocated #define W9966_STATE_DETECTED 0x10 // model identified \ #define W9966_SAA7111_ID 0x24 // I2C device id D77 2 I78 2 #define W9966_I2C_UDELAY 5 #define W9966_I2C_TIMEOUT 100 I83 3 #define MAX(a, b) ((a > b) ? a : b) #define MIN(a, b) ((a > b) ? b : a) \ D85 5 I90 7 struct parport* pport; struct pardevice* pdev; int ppmode; \ u8* buffer; u8 dev_state; u8 i2c_state; I92 2 \ // Image properties D97 1 I97 9 \ // Model specific: const char* name; u32 sramsize; u8 sramid; // reg 0x0c, bank layout u8 cmask; // reg 0x01, for polarity u16 min_x, max_x; // Capture window limits u16 min_y, max_y; int (*image)(struct w9966_dev* cam); D101 1 I101 1 * Module properties D105 1 I105 1 MODULE_DESCRIPTION("Winbond w9966cf webcam driver (Flycam Supra and others)"); D109 1 I109 1 static const char* pardev[] = {[0 ... W9966_MAXCAMS-1] = "auto"}; D113 1 I113 1 auto = probe all parports for camera (default)\n\ D115 2 I116 2 none = don't use this camera\n\ You can specify all cameras this way, for example:\n\ D120 1 I120 1 static int parmode = 1; D122 1 I122 1 MODULE_PARM_DESC(parmode, "\n<0|1|2|3> transfer mode (0=auto, 1=ecp(default), 2=epp, 3=forced hw-ecp)"); D124 2 I125 9 static int video_nr[] = {[0 ... W9966_MAXCAMS-1] = -1}; MODULE_PARM(video_nr, "0-" __MODULE_STRING(W9966_MAXCAMS) "i"); MODULE_PARM_DESC(video_nr,"\n\ <-1|n[,...]> Specify V4L minor mode number.\n\ -1 = use next available (default)\n\ n = use minor number n (integer >= 0)\n\ You can specify all cameras this way, for example:\n\ video_nr=-1,2,-1 would assign minor number 2 for cam2 and use auto for cam1,\n\ cam3 and cam4"); D131 1 I131 1 static struct w9966_dev* w9966_cams; D134 1 I134 1 * Private function declarations D137 3 I139 10 static inline void w9966_flag_set(struct w9966_dev* cam, int flag) { cam->dev_state |= flag;} \ static inline void w9966_flag_clear(struct w9966_dev* cam, int flag) { cam->dev_state &= ~flag;} \ static inline int w9966_flag_test(struct w9966_dev* cam, int flag) { return (cam->dev_state & flag);} \ static inline int w9966_pdev_claim(struct w9966_dev *vdev); D142 7 I148 2 static int w9966_rreg(struct w9966_dev* cam, int reg); static int w9966_wreg(struct w9966_dev* cam, int reg, int data); D150 1 I150 1 static int w9966_init(struct w9966_dev* cam, struct parport* port, int vidnr); I151 11 static int w9966_setup(struct w9966_dev* cam); static int w9966_findlen(int near, int size, int maxlen); static int w9966_calcscale(int size, int min, int max, int* beg, int* end, u8* factor); static int w9966_window(struct w9966_dev* cam, int x1, int y1, int x2, int y2, int w, int h); \ static int w9966_saa7111_init(struct w9966_dev* cam); static int w9966_saa7111_image(struct w9966_dev* cam); static int w9966_lc99053_init(struct w9966_dev* cam); static int w9966_lc99053_image(struct w9966_dev* cam); I158 2 static int w9966_i2c_rreg(struct w9966_dev* cam, int device, int reg); static int w9966_i2c_wreg(struct w9966_dev* cam, int device, int reg, int data); D162 2 I163 4 static int w9966_v4l_ioctl(struct video_device *vdev, unsigned int cmd, void *arg); static long w9966_v4l_read(struct video_device *vdev, char *buf, unsigned long count, int noblock); D166 1 I166 1 * Private function definitions D169 13 D183 1 I183 2 // 1 on success, else 0 static inline int w9966_pdev_claim(struct w9966_dev* cam) D185 4 I188 6 if (w9966_flag_test(cam, W9966_STATE_CLAIMED)) return 1; if (parport_claim_or_block(cam->pdev) < 0) return 0; w9966_flag_set(cam, W9966_STATE_CLAIMED); return 1; D194 1 I194 1 if (!w9966_flag_test(cam, W9966_STATE_CLAIMED)) D197 1 I197 1 w9966_flag_clear(cam, W9966_STATE_CLAIMED); D199 2 I200 2 \ // Read register from w9966 interface-chip D203 1 I203 1 static int w9966_rreg(struct w9966_dev* cam, int reg) D206 10 I215 7 const u8 addr = 0x80 | (reg & 0x1f); u8 val; \ if (parport_negotiate(cam->pport, cam->ppmode | IEEE1284_ADDR) != 0 || parport_write(cam->pport, &addr, 1) != 1 || parport_negotiate(cam->pport, cam->ppmode | IEEE1284_DATA) != 0 || parport_read(cam->pport, &val, 1) != 1) D221 1 I221 1 // Write register to w9966 interface-chip D223 2 I224 2 // 1 on success, else 0 static int w9966_wreg(struct w9966_dev* cam, int reg, int data) D227 11 I237 2 const u8 addr = 0xc0 | (reg & 0x1f); const u8 val = data; D239 1 I239 7 if (parport_negotiate(cam->pport, cam->ppmode | IEEE1284_ADDR) != 0 || parport_write(cam->pport, &addr, 1) != 1 || parport_negotiate(cam->pport, cam->ppmode | IEEE1284_DATA) != 0 || parport_write(cam->pport, &val, 1) != 1) return 0; \ return 1; D245 2 I246 2 // 1 on success, else 0 static int w9966_init(struct w9966_dev* cam, struct parport* port, int vidnr) D249 2 I250 2 return 0; \ D257 1 I257 1 // Select requested transfer mode D264 2 I265 2 else if (port->modes & PARPORT_MODE_EPP) cam->ppmode = IEEE1284_MODE_EPP; D268 1 I268 1 break; I280 3 case 3: // hw-ecp cam->ppmode = IEEE1284_MODE_ECP; break; D282 3 I284 5 \ // Tell the parport driver that we exists cam->pdev = parport_register_device( port, W9966_DRIVERNAME, NULL, NULL, NULL, 0, NULL); \ D286 2 I287 2 DPRINTF("parport_register_device() failed.\n"); return 0; D289 1 I289 1 w9966_flag_set(cam, W9966_STATE_PDEV); D291 4 I294 8 // Claim parport if (!w9966_pdev_claim(cam)) { DPRINTF("w9966_pdev_claim() failed.\n"); return 0; } \ // Perform initial w9966 setup if (!w9966_setup(cam)) { D296 1 I296 1 return 0; I298 19 // Detect model if (!w9966_saa7111_init(cam)) { DPRINTF("w9966_saa7111_init() failed.\n"); return 0; } if (!w9966_lc99053_init(cam)) { DPRINTF("w9966_lc99053_init() failed.\n"); return 0; } if (!w9966_flag_test(cam, W9966_STATE_DETECTED)) { DPRINTF("Camera model not identified.\n"); return 0; } \ // Setup w9966 with a default capture mode (QCIF res.) if (!w9966_window(cam, 0, 0, 1023, 1023, 176, 144)) { DPRINTF("w9966_window() failed.\n"); return 0; } D301 1 I301 1 // Fill in the video_device struct and register us to v4l D313 7 I319 6 if (video_register_device(&cam->vdev, VFL_TYPE_GRABBER, vidnr) == -1) { DPRINTF("video_register_device() failed (minor: %d).\n", vidnr); return 0; } w9966_flag_set(cam, W9966_STATE_VDEV); \ D321 5 I325 3 printk("w9966: Found and initialized %s on %s.\n", cam->name, cam->pport->name); return 1; D328 1 D332 2 I333 2 // Delete allocated buffer if (w9966_flag_test(cam, W9966_STATE_BUFFER)) D335 2 D338 2 I339 2 // Unregister from v4l if (w9966_flag_test(cam, W9966_STATE_VDEV)) D341 2 D344 6 I349 4 // Terminate from IEEE1284 mode and unregister from parport if (w9966_flag_test(cam, W9966_STATE_PDEV)) { if (w9966_pdev_claim(cam)) parport_negotiate(cam->pport, IEEE1284_MODE_COMPAT); D351 2 I352 1 w9966_pdev_release(cam); D354 1 I355 2 \ cam->dev_state = 0x00; I357 32 // Do initial setup for the w9966 chip, init i2c bus, etc. // this is generic for all models // expects a claimed pdev // 1 on success, else 0 static int w9966_setup(struct w9966_dev* cam) { const u8 i2c = cam->i2c_state = W9966_I2C_W_DATA | W9966_I2C_W_CLOCK; const u8 regs[] = { 0x40, // 0x13 - VEE control (raw 4:2:2) 0x00, 0x00, 0x00, // 0x14 - 0x16 0x00, // 0x17 - ??? i2c, // 0x18 - Serial bus 0xff, // 0x19 - I/O port direction control 0xff, // 0x1a - I/O port data register 0x10 // 0x1b - ??? }; int i; \ DASSERT(w9966_flag_test(cam, W9966_STATE_CLAIMED)); \ // Reset (ECP-fifo & serial-bus) if (!w9966_wreg(cam, 0x00, 0x03) || !w9966_wreg(cam, 0x00, 0x00)) return 0; \ // Write regs to w9966cf chip for (i = 0x13; i < 0x1c; i++) if (!w9966_wreg(cam, i, regs[i-0x13])) return 0; \ return 1; } D368 1 I368 1 for(len = size+1; len < maxlen; len++) D379 1 I379 1 \ D387 1 I387 1 // Modify capture window (if necessary) D389 2 I390 2 // 1 on success, else 0 static int w9966_calcscale(int size, int min, int max, int* beg, int* end, u8* factor) D392 4 I395 4 const int maxlen = max - min; const int len = *end - *beg + 1; const int newlen = w9966_findlen(len, size, maxlen); const int err = newlen - len; D399 1 I399 1 return 0; D422 1 I422 1 return 1; D425 4 I428 4 // Setup the w9966 capture window and also set SRAM settings // expects a claimed pdev and detected camera model // 1 on success, else 0 static int w9966_window(struct w9966_dev* cam, int x1, int y1, int x2, int y2, int w, int h) D430 1 D433 14 I446 2 u8 regs[0x13]; int i; I447 5 // Modify width and height to match capture window and SRAM w = MAX(W9966_WND_MIN_W, w); h = MAX(W9966_WND_MIN_H, h); w = MIN(cam->max_x - cam->min_x, w); h = MIN(cam->max_y - cam->min_y, h); D449 4 I452 2 if (w*h*2 > cam->sramsize) h = cam->sramsize / (w*2); D457 1 I457 1 enh_s = 0; D459 13 I471 10 \ // Calculate downscaling if (!w9966_calcscale(w, cam->min_x, cam->max_x, &x1, &x2, &scale_x) || !w9966_calcscale(h, cam->min_y, cam->max_y, &y1, &y2, &scale_y)) return 0; \ DPRINTF("%dx%d, x: %d<->%d, y: %d<->%d, sx: %d/64, sy: %d/64.\n", w, h, x1, x2, y1, y2, scale_x&~0x80, scale_y&~0x80); \ // Setup registers D473 1 I473 1 regs[0x01] = cam->cmask; // Capture mode D476 2 I477 2 \ // Capture window D486 2 I487 2 regs[0x0c] = cam->sramid; // SRAM layout \ D496 13 I508 25 // Write regs to w9966cf chip for (i = 0x01; i < 0x13; i++) if (!w9966_wreg(cam, i, regs[i])) return 0; \ return 1; } \ // Detect and initialize saa7111 ccd-controller chip. // expects a claimed parport // expected to always return 1 unless error is _fatal_ // 1 on success, else 0 static int w9966_saa7111_init(struct w9966_dev* cam) { // saa7111 regs 0x00 trough 0x12 const u8 regs[] = { 0x00, // not written 0x00, 0xd8, 0x23, 0x00, 0x80, 0x80, 0x00, 0x88, 0x10, cam->brightness, // 0x0a cam->contrast, // 0x0b cam->color, // 0x0c cam->hue, // 0x0d 0x01, 0x00, 0x48, 0x0c, 0x00, }; int i; D510 3 I512 2 if (w9966_flag_test(cam, W9966_STATE_DETECTED)) return 1; D514 4 I517 38 // Write regs to saa7111 chip for (i = 1; i < 0x13; i++) if (!w9966_i2c_wreg(cam, W9966_SAA7111_ID, i, regs[i])) return 1; \ // Read back regs for (i = 1; i < 0x13; i++) if (w9966_i2c_rreg(cam, W9966_SAA7111_ID, i) != regs[i]) return 1; \ // Fill in model specific data cam->name = "Lifeview Flycam Supra"; cam->sramsize = 128 << 10; // 128 kib cam->sramid = 0x02; // see w9966.pdf \ cam->cmask = 0x18; // normal polarity cam->min_x = 16; // empirically determined cam->max_x = 705; cam->min_y = 14; cam->max_y = 253; cam->image = &w9966_saa7111_image; \ DPRINTF("Found and initialized a saa7111 chip.\n"); w9966_flag_set(cam, W9966_STATE_DETECTED); \ return 1; } \ // Setup image properties (brightness, hue, etc.) for the saa7111 chip // expects a claimed parport // 1 on success, else 0 static int w9966_saa7111_image(struct w9966_dev* cam) { if (!w9966_i2c_wreg(cam, W9966_SAA7111_ID, 0x0a, cam->brightness) || !w9966_i2c_wreg(cam, W9966_SAA7111_ID, 0x0b, cam->contrast) || !w9966_i2c_wreg(cam, W9966_SAA7111_ID, 0x0c, cam->color) || !w9966_i2c_wreg(cam, W9966_SAA7111_ID, 0x0d, cam->hue)) return 0; D519 4 I522 2 return 1; } D524 1 I524 33 // Detect and initialize lc99053 ccd-controller chip. // expects a claimed parport // this is currently a hack, no detection is done, we just assume an Eyestar2 // 1 on success, else 0 static int w9966_lc99053_init(struct w9966_dev* cam) { if (w9966_flag_test(cam, W9966_STATE_DETECTED)) return 1; \ // Fill in model specific data cam->name = "Microtek Eyestar2"; cam->sramsize = 128 << 10; // 128 kib cam->sramid = 0x02; // w9966cf.pdf \ cam->cmask = 0x10; // reverse polarity cam->min_x = 16; // empirically determined cam->max_x = 705; cam->min_y = 14; cam->max_y = 253; cam->image = &w9966_lc99053_image; \ DPRINTF("Found and initialized a lc99053 chip.\n"); w9966_flag_set(cam, W9966_STATE_DETECTED); \ return 1; } \ // Setup image properties (brightness, hue, etc.) for the lc99053 chip // expects a claimed parport // 1 on success, else 0 static int w9966_lc99053_image(struct w9966_dev* cam) { return 1; D539 3 I541 3 \ w9966_wreg(cam, 0x18, cam->i2c_state); udelay(W9966_I2C_UDELAY); D545 1 I545 2 // Expects a claimed pdev. // 1 on success, else 0 D548 1 D554 4 I557 4 w9966_wreg(cam, 0x18, cam->i2c_state); udelay(W9966_I2C_UDELAY); \ // when we go to high, we also expect the peripheral to ack. D559 1 I559 1 const int timeout = jiffies + W9966_I2C_TIMEOUT; D562 1 I562 1 return 0; D565 1 I565 1 return 1; D572 2 I573 2 const u8 pins = w9966_rreg(cam, 0x18); return ((pins & W9966_I2C_R_DATA) > 0); D580 2 I581 2 const u8 pins = w9966_rreg(cam, 0x18); return ((pins & W9966_I2C_R_CLOCK) > 0); D585 1 I585 2 // Expects a claimed pdev. // 1 on success, else 0 D589 2 I590 1 for (i = 7; i >= 0; i--) { D593 3 I595 3 if (!w9966_i2c_setscl(cam, 1) || !w9966_i2c_setscl(cam, 0)) return 0; D597 1 D599 6 I604 6 \ if (!w9966_i2c_setscl(cam, 1) || !w9966_i2c_setscl(cam, 0)) return 0; \ return 1; D611 3 I613 3 u8 data = 0x00; int i; \ D618 1 I618 1 if (!w9966_i2c_setscl(cam, 1)) D623 1 I623 1 \ D631 1 I631 1 static int w9966_i2c_rreg(struct w9966_dev* cam, int device, int reg) D638 4 I641 2 if (!w9966_i2c_wbyte(cam, device << 1) || !w9966_i2c_wbyte(cam, reg)) D645 1 I645 1 if (!w9966_i2c_setscl(cam, 1)) I646 1 \ D650 4 I653 2 if (!w9966_i2c_wbyte(cam, (device << 1) | 1) || (data = w9966_i2c_rbyte(cam)) == -1) D657 2 I658 2 \ if (!w9966_i2c_setscl(cam, 1)) I659 1 \ D661 1 I661 1 \ D665 1 D667 2 I668 3 // Expects claimed pdev. // 1 on success, else 0 static int w9966_i2c_wreg(struct w9966_dev* cam, int device, int reg, int data) D673 6 I678 4 if (!w9966_i2c_wbyte(cam, device << 1) || !w9966_i2c_wbyte(cam, reg) || !w9966_i2c_wbyte(cam, data)) return 0; D681 3 I683 3 if (!w9966_i2c_setscl(cam, 1)) return 0; \ D686 1 I686 1 return 1; D690 1 I690 1 * Video4linux interface D696 3 I698 4 \ // Claim parport if (!w9966_pdev_claim(cam)) { DPRINTF("Unable to claim parport"); I699 9 } \ // Allocate read buffer cam->buffer = (u8*)kmalloc(W9966_RBUFFER, GFP_KERNEL); if (cam->buffer == NULL) { w9966_pdev_release(cam); return -ENOMEM; } w9966_flag_set(cam, W9966_STATE_BUFFER); D707 2 I708 3 \ // Free read buffer if (w9966_flag_test(cam, W9966_STATE_BUFFER)) { D710 1 I710 1 w9966_flag_clear(cam, W9966_STATE_BUFFER); I711 3 \ // release parport w9966_pdev_release(cam); I713 1 // expects a claimed parport D717 1 I717 1 \ D726 3 I728 4 cam->max_x - cam->min_x, cam->max_y - cam->min_y, W9966_WND_MIN_W, W9966_WND_MIN_H D750 1 I750 1 \ D753 1 I753 1 \ D761 1 I761 1 \ D764 1 I764 1 \ D772 1 I772 1 \ D775 1 I775 1 \ D782 1 I782 1 \ D785 1 I785 1 \ D793 1 I793 1 \ D796 1 I796 1 \ D799 1 I799 1 \ D823 1 I823 1 \ D826 1 I826 1 \ D832 9 I840 1 if (!cam->image(cam)) D842 3 I844 1 \ D849 1 D851 1 I851 1 \ D853 4 I856 4 return -EFAULT; if ( vwin.flags != 0 || vwin.clipcount != 0) D858 3 I860 5 \ if (vwin.width > cam->max_x - cam->min_x || vwin.height > cam->max_y - cam->min_y || vwin.width < W9966_WND_MIN_W || vwin.height < W9966_WND_MIN_H) D864 6 I869 1 if (!w9966_window(cam, 0, 0, 1023, 1023, vwin.width, vwin.height)) D871 2 I872 1 \ D879 1 I879 1 \ D882 1 I882 1 \ D885 1 I885 1 \ D889 1 I889 1 case VIDIOCCAPTURE: I904 1 // expects a claimed parport and allocated read buffer D908 2 I909 2 const u8 addr = 0xa0; // ECP, read, CCD-transfer, 00000 u8* dest = (u8*)buf; D911 1 I911 1 \ D915 13 I927 10 \ w9966_wreg(cam, 0x00, 0x02); // Reset ECP-FIFO buffer w9966_wreg(cam, 0x00, 0x00); // Return to normal operation w9966_wreg(cam, 0x01, cam->cmask | 0x80); // Enable capture \ // write special capture-addr and negotiate into data transfer if (parport_negotiate(cam->pport, cam->ppmode|IEEE1284_ADDR) != 0 || parport_write(cam->pport, &addr, 1) != 1 || parport_negotiate(cam->pport, cam->ppmode|IEEE1284_DATA) != 0) { DPRINTF("Unable to write capture-addr.\n"); D930 1 I930 1 \ D933 4 I936 3 const size_t tsize = (dleft > W9966_RBUFFER) ? W9966_RBUFFER : dleft; \ if (parport_read(cam->pport, cam->buffer, tsize) < tsize) D938 3 I940 2 \ if (copy_to_user(dest, cam->buffer, tsize) != 0) D942 1 I942 1 \ D946 3 I948 2 \ w9966_wreg(cam, 0x01, cam->cmask); // Disable capture D953 1 D958 6 I963 4 \ for (i = 0; i < W9966_MAXCAMS; i++) { if (strcmp(pardev[i], "none") == 0 || // Skip if 'none' or if w9966_cams[i].dev_state != 0) // cam already assigned I964 1 \ D967 1 I967 1 if (!w9966_init(&w9966_cams[i], port, video_nr[i])) D994 1 I994 8 int i, err; \ w9966_cams = kmalloc( sizeof(struct w9966_dev) * W9966_MAXCAMS, GFP_KERNEL); \ if (!w9966_cams) return -ENOMEM; \ D998 1 I998 8 // Register parport driver if ((err = parport_register_driver(&w9966_ppd)) != 0) { kfree(w9966_cams); w9966_cams = 0; return err; } \ return 0; I1003 3 if (w9966_cams) kfree(w9966_cams); \ == drivers/mtd/chips/sharp.c == patch@athlon.transmeta.com|drivers/mtd/chips/sharp.c|20020205183855|59041|55f2ecd47a1c9533 patch@athlon.transmeta.com|drivers/mtd/chips/sharp.c|20020205202056|10505 D 1.3 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 11755 O -rw-rw-r-- P drivers/mtd/chips/sharp.c ------------------------------------------------ D443 1 I443 1 while(time_before(jiffies, timeo)){ == drivers/net/8139cp.c == patch@athlon.transmeta.com|drivers/net/8139cp.c|20020205202444|25227|2810dcfe9fc63266 patch@athlon.transmeta.com|drivers/net/8139cp.c|20020205223650|54170 D 1.6 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -16 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 26868 O -rw-rw-r-- P drivers/net/8139cp.c ------------------------------------------------ I57 1 #include D709 16 == drivers/net/au1000_eth.c == patch@athlon.transmeta.com|drivers/net/au1000_eth.c|20020205191031|43292|202840abd01a5764 patch@plucky.distro.conectiva|drivers/net/au1000_eth.c|20020313233115|48620 D 1.6 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -17 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206861 K 20979 O -rw-rw-r-- P drivers/net/au1000_eth.c ------------------------------------------------ I49 1 #include D1243 17 == drivers/net/dl2k.c == patch@athlon.transmeta.com|drivers/net/dl2k.c|20020205191047|64064|17c7d48fd15e052 patch@athlon.transmeta.com|drivers/net/dl2k.c|20020205223654|01986 D 1.10 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +2 -20 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 41418 O -rw-rw-r-- P drivers/net/dl2k.c ------------------------------------------------ D89 1 D344 1 I344 1 crc = ~ether_crc_le(256-4, sromdata); D996 17 D1042 1 I1042 1 crc = ether_crc_le (ETH_ALEN, mclist->dmi_addr); == drivers/net/dl2k.h == patch@athlon.transmeta.com|drivers/net/dl2k.h|20020205191047|64289|38e433430e66f8 patch@athlon.transmeta.com|drivers/net/dl2k.h|20020205223654|20728 D 1.7 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 22837 O -rw-rw-r-- P drivers/net/dl2k.h ------------------------------------------------ I28 1 #include == drivers/net/fealnx.c == patch@athlon.transmeta.com|drivers/net/fealnx.c|20020205181618|10095|3919f1cd979f5944 patch@athlon.transmeta.com|drivers/net/fealnx.c|20020205223650|50039 D 1.12 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -21 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 16254 O -rw-rw-r-- P drivers/net/fealnx.c ------------------------------------------------ I86 1 #include D442 1 D1728 20 == drivers/net/irda/ali-ircc.c == patch@athlon.transmeta.com|drivers/net/irda/ali-ircc.c|20020205191006|33736|d804cfa2819f8e4a patch@athlon.transmeta.com|drivers/net/irda/ali-ircc.c|20020205223718|55189 D 1.6 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 49499 O -rw-rw-r-- P drivers/net/irda/ali-ircc.c ------------------------------------------------ D294 2 I295 1 if (!request_region(self->io.fir_base, self->io.fir_ext, driver_name)) { D302 1 == drivers/net/irda/irda-usb.c == patch@athlon.transmeta.com|drivers/net/irda/irda-usb.c|20020205181400|55514|cefdeaf478a984c6 patch@plucky.distro.conectiva|drivers/net/irda/irda-usb.c|20020313233115|03158 D 1.11 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +20 -9 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 44534 O -rw-rw-r-- P drivers/net/irda/irda-usb.c ------------------------------------------------ D381 4 I384 11 /* Make sure there is room for IrDA-USB header. The actual * allocation will be done lower in skb_push(). * Also, we don't use directly skb_cow(), because it require * headroom >= 16, which force unnecessary copies - Jean II */ if (skb_headroom(skb) < USB_IRDA_HEADER) { IRDA_DEBUG(0, __FUNCTION__ "(), Insuficient skb headroom.\n"); if (skb_cow(skb, USB_IRDA_HEADER)) { WARNING(__FUNCTION__ "(), failed skb_cow() !!!\n"); dev_kfree_skb(skb); return 0; } D435 1 I435 1 diff += IU_USB_MIN_RTT; D851 1 I852 1 self->idle_rx_urb = purb; I954 7 /* We submit all the Rx URB except for one that we keep idle. * Need to be initialised before submitting other USBs, because * in some cases as soon as we submit the URBs the USB layer * will trigger a dummy receive - Jean II */ self->idle_rx_urb = &(self->rx_urb[IU_MAX_ACTIVE_RX_URBS]); self->idle_rx_urb->context = NULL; \ D959 3 == drivers/net/pci-skeleton.c == patch@athlon.transmeta.com|drivers/net/pci-skeleton.c|20020205175910|18737|dcf8cca64f0ef32d patch@athlon.transmeta.com|drivers/net/pci-skeleton.c|20020205223508|09694 D 1.15 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -22 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 39479 O -rw-rw-r-- P drivers/net/pci-skeleton.c ------------------------------------------------ I98 1 #include D512 1 D1855 21 == drivers/net/sungem.c == patch@athlon.transmeta.com|drivers/net/sungem.c|20020205180614|25467|6af2a0e0fcdb12e9 patch@plucky.distro.conectiva|drivers/net/sungem.c|20020313010047|03816 D 1.20 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +4 -15 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 51315 O -rw-rw-r-- P drivers/net/sungem.c ------------------------------------------------ I39 1 #include D1732 2 D1749 1 I1749 1 u32 crc; D1751 1 I1751 1 int i; D1764 11 I1774 1 crc = ether_crc_le(6, addrs); == drivers/s390/net/netiucv.c == patch@athlon.transmeta.com|drivers/s390/net/netiucv.c|20020205175910|24626|9f8420d26ec18362 patch@athlon.transmeta.com|drivers/s390/net/netiucv.c|20020205223624|30694 D 1.11 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +4 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 30483 O -rw-rw-r-- P drivers/s390/net/netiucv.c ------------------------------------------------ D2 1 I2 1 * $Id: netiucv.c,v 1.17 2002/02/12 21:52:20 felfert Exp $ D31 1 I31 1 * RELEASE-TAG: IUCV network driver $Revision: 1.17 $ D73 1 I73 1 "iucv=userid0:userid1:...:useridN"); D2008 1 I2008 1 char vbuf[] = "$Revision: 1.17 $"; == drivers/sound/nec_vrc5477.c == patch@athlon.transmeta.com|drivers/sound/nec_vrc5477.c|20020205201335|44777|c274a0de38ba2dce patch@plucky.distro.conectiva|drivers/sound/nec_vrc5477.c|20020313233117|06251 D 1.5 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +2 -8 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 61550 O -rw-rw-r-- P drivers/sound/nec_vrc5477.c ------------------------------------------------ D821 6 D868 1 I868 1 llseek: no_llseek, D1634 1 I1634 1 llseek: no_llseek, == drivers/usb/hpusbscsi.c == patch@athlon.transmeta.com|drivers/usb/hpusbscsi.c|20020205202100|00911|b365c31f2ad86af1 patch@athlon.transmeta.com|drivers/usb/hpusbscsi.c|20020205202126|20473 D 1.3 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +43 -14 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 6210 O -rw-rw-r-- P drivers/usb/hpusbscsi.c ------------------------------------------------ D188 1 I188 2 if(scsi_unregister_module(MODULE_SCSI_HA,&o->ctempl)<0) printk(KERN_CRIT"Deregistering failed!\n"); D273 1 I273 7 if (srb->cmnd[0] == REQUEST_SENSE){ /* the usual buffer is not used, needs a special case */ hpusbscsi->current_data_pipe = usb_rcvbulkpipe(hpusbscsi->dev, hpusbscsi->ep_in); usb_callback = request_sense_callback; } else { usb_callback = simple_command_callback; } D335 2 I336 2 //usb_reset_device(hpusbscsi->dev); //printk(KERN_DEBUG"SCSI reset completed.\n"); D345 1 I345 1 printk(KERN_DEBUG"Request is canceled.\n"); D348 1 D376 1 I376 1 hpusbscsi->srb->result |= hpusbscsi->scsi_state_byte; D456 1 I456 1 handle_usb_error(hpusbscsi); D472 1 I472 1 handle_usb_error(hpusbscsi); D512 5 I518 28 \ static void request_sense_callback (struct urb *u) { struct hpusbscsi * hpusbscsi = (struct hpusbscsi *)u->context; \ if (u->status<0) { handle_usb_error(hpusbscsi); return; } \ FILL_BULK_URB( u, hpusbscsi->dev, hpusbscsi->current_data_pipe, hpusbscsi->srb->sense_buffer, SCSI_SENSE_BUFFERSIZE, simple_done, hpusbscsi ); \ if (0 > usb_submit_urb(u)) { handle_usb_error(hpusbscsi); return; } if (hpusbscsi->state != HP_STATE_PREMATURE) hpusbscsi->state = HP_STATE_WORKING; } \ == drivers/usb/hpusbscsi.h == patch@athlon.transmeta.com|drivers/usb/hpusbscsi.h|20020205202100|01449|d532117e5fee2a33 patch@athlon.transmeta.com|drivers/usb/hpusbscsi.h|20020205202101|24735 D 1.2 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +2 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 29582 O -rw-rw-r-- P drivers/usb/hpusbscsi.h ------------------------------------------------ D54 1 I54 2 static void control_interrupt_callback (struct urb *u); static void request_sense_callback (struct urb *u); == drivers/usb/kaweth.c == patch@athlon.transmeta.com|drivers/usb/kaweth.c|20020205201000|18923|be9a440fb4ddc042 patch@athlon.transmeta.com|drivers/usb/kaweth.c|20020205203346|12514 D 1.8 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +6 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 15169 O -rw-rw-r-- P drivers/usb/kaweth.c ------------------------------------------------ D241 2 I242 1 dr = kmalloc(sizeof(devrequest), GFP_ATOMIC); D590 2 D596 2 I724 1 kaweth->tx_urb->transfer_flags |= USB_ASYNC_UNLINK; I827 1 kfree(kaweth); I928 3 \ usb_unlink_urb(kaweth->rx_urb); usb_unlink_urb(kaweth->tx_urb); == drivers/usb/serial/cyberjack.c == patch@athlon.transmeta.com|drivers/usb/serial/cyberjack.c|20020205184819|00074|dbb7626b604961a0 patch@athlon.transmeta.com|drivers/usb/serial/cyberjack.c|20020205223434|15569 D 1.7 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +4 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 18590 O -rw-rw-r-- P drivers/usb/serial/cyberjack.c ------------------------------------------------ I240 1 up (&port->sem); D246 1 I246 2 if (copy_from_user(priv->wrbuf+priv->wrfilled, buf, count)) { up (&port->sem); I247 1 } == drivers/usb/serial/ipaq.c == patch@athlon.transmeta.com|drivers/usb/serial/ipaq.c|20020205223622|62133|bc36e4bd893e3bb6 patch@athlon.transmeta.com|drivers/usb/serial/ipaq.c|20020205223623|38363 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +11 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 59505 O -rw-rw-r-- P drivers/usb/serial/ipaq.c ------------------------------------------------ D4 1 I4 1 * Copyright (C) 2001 - 2002 I11 3 * (25/2/2002) ganesh * Added support for the HP Jornada 548 and 568. Completely untested. * Thanks to info from Heath Robinson and Arieh Davidoff. D42 1 I42 1 #define DRIVER_VERSION "v0.2" D44 1 I44 1 #define DRIVER_DESC "USB Compaq iPAQ, HP Jornada driver" D64 1 I64 3 { USB_DEVICE(COMPAQ_VENDOR_ID, COMPAQ_IPAQ_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_JORNADA_548_ID) }, { USB_DEVICE(HP_VENDOR_ID, HP_JORNADA_568_ID) }, D74 1 I74 1 needs_interrupt_in: DONT_CARE, D77 1 I77 1 num_interrupt_in: NUM_DONT_CARE, == drivers/usb/serial/ipaq.h == patch@athlon.transmeta.com|drivers/usb/serial/ipaq.h|20020205223622|62289|aaec04d07a8d00d0 patch@athlon.transmeta.com|drivers/usb/serial/ipaq.h|20020205223623|12726 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +7 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 19793 O -rw-rw-r-- P drivers/usb/serial/ipaq.h ------------------------------------------------ D4 1 I4 1 * Copyright (C) 2001 - 2002 D19 2 I20 6 #define COMPAQ_VENDOR_ID 0x049f #define COMPAQ_IPAQ_ID 0x0003 \ #define HP_VENDOR_ID 0x003f #define HP_JORNADA_548_ID 0x1016 #define HP_JORNADA_568_ID 0x1116 == drivers/usb/storage/datafab.c == patch@athlon.transmeta.com|drivers/usb/storage/datafab.c|20020205191457|54551|f91d75b7a0e9dd8f patch@athlon.transmeta.com|drivers/usb/storage/datafab.c|20020205223631|50927 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +28 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 40969 O -rw-rw-r-- P drivers/usb/storage/datafab.c ------------------------------------------------ I2 2 * $Id: datafab.c,v 1.7 2002/02/25 00:40:13 mdharm Exp $ * D9 1 I9 2 * * Many thanks to Robert Baruch for the SanDisk SmartMedia reader driver I10 1 * I13 5 * Fix for media change by Joerg Schneider (js@joergschneider.com) * * Other contributors: * (c) 2002 Alan Stern * D105 1 I105 1 usb_stor_clear_halt(us, pipe); I802 17 \ if (srb->cmnd[0] == START_STOP) { /* this is used by sd.c'check_scsidisk_media_change to detect media change */ US_DEBUGP("datafab_transport: START_STOP.\n"); /* the first datafab_id_device after a media change returns an error (determined experimentally) */ rc = datafab_id_device(us, info); if (rc == USB_STOR_TRANSPORT_GOOD) { info->sense_key = NO_SENSE; srb->result = SUCCESS; } else { info->sense_key = UNIT_ATTENTION; srb->result = CHECK_CONDITION; } return rc; } == drivers/usb/storage/isd200.c == patch@athlon.transmeta.com|drivers/usb/storage/isd200.c|20020205191457|56022|57920ea4db9d3e9 patch@plucky.distro.conectiva|drivers/usb/storage/isd200.c|20020313233118|17561 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +172 -188 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 57513 O -rw-rw-r-- P drivers/usb/storage/isd200.c ------------------------------------------------ D3 1 I3 1 * $Id: isd200.c,v 1.14 2002/02/25 00:40:13 mdharm Exp $ D5 2 I6 8 * Current development and maintenance: * (C) 2001-2002 Björn Stenberg (bjorn@haxx.se) * * Developed with the assistance of: * (C) 2002 Alan Stern * * Initial work: * (C) 2000 In-System Design, Inc. (support@in-system.com) I29 4 * 2002-01-16: Fixed endianness bug so it works on the ppc arch. * (Luc Saillard ) * 2002-01-17: All bitfields removed. * (bjorn@haxx.se) D48 9 I90 13 /* Register Select bits */ #define REG_ALTERNATE_STATUS 0x01 #define REG_DEVICE_CONTROL 0x01 #define REG_ERROR 0x02 #define REG_FEATURES 0x02 #define REG_SECTOR_COUNT 0x04 #define REG_SECTOR_NUMBER 0x08 #define REG_CYLINDER_LOW 0x10 #define REG_CYLINDER_HIGH 0x20 #define REG_DEVICE_HEAD 0x40 #define REG_STATUS 0x80 #define REG_COMMAND 0x80 \ D155 14 I168 2 unsigned char ActionSelect; unsigned char RegisterSelect; D184 14 I197 2 unsigned char ActionSelect; unsigned char RegisterSelect; I220 6 /* * DeviceType field */ #define DIRECT_ACCESS_DEVICE 0x00 /* disks */ #define DEVICE_REMOVABLE 0x80 \ D222 4 I225 2 unsigned char DeviceType; unsigned char DeviceTypeModifier; D227 5 I231 1 unsigned char Format; D234 8 I241 1 unsigned char Capability; I259 14 #define ATACFG_TIMING 0x0f #define ATACFG_ATAPI_RESET 0x10 #define ATACFG_MASTER 0x20 #define ATACFG_BLOCKSIZE 0xa0 \ #define ATACFGE_LAST_LUN 0x07 #define ATACFGE_DESC_OVERRIDE 0x08 #define ATACFGE_STATE_SUSPEND 0x10 #define ATACFGE_SKIP_BOOT 0x20 #define ATACFGE_CONF_DESC2 0x40 #define ATACFGE_INIT_STATUS 0x80 \ #define CFG_CAPABILITY_SRST 0x01 \ D264 4 I267 1 unsigned char ATAConfig; D270 9 I278 3 unsigned char ATAExtraConfig; unsigned char Capability; }__attribute__ ((packed)); I323 6 #define SENSE_ERRCODE 0x7f #define SENSE_ERRCODE_VALID 0x80 #define SENSE_FLAG_SENSE_KEY 0x0f #define SENSE_FLAG_BAD_LENGTH 0x20 #define SENSE_FLAG_END_OF_MEDIA 0x40 #define SENSE_FLAG_FILE_MARK 0x80 D325 8 I332 3 unsigned char ErrorCode; unsigned char SegmentNumber; unsigned char Flags; D352 1 D369 2 I370 1 buf->ErrorCode = 0x70 | SENSE_ERRCODE_VALID; D372 1 I372 1 buf->Flags = UNIT_ATTENTION; D376 2 I377 1 buf->ErrorCode = 0x70 | SENSE_ERRCODE_VALID; D379 1 I379 1 buf->Flags = UNIT_ATTENTION; D383 2 I384 1 buf->ErrorCode = 0x70 | SENSE_ERRCODE_VALID; D386 1 I386 1 buf->Flags = NOT_READY; D390 2 I391 1 buf->ErrorCode = 0x70 | SENSE_ERRCODE_VALID; D393 1 I393 1 buf->Flags = DATA_PROTECT; D398 1 D400 1 I400 1 buf->Flags = 0; D445 1 I445 1 usb_stor_clear_halt(us, pipe); D596 1 I596 1 le32_to_cpu(bcb.DataTransferLength), bcb.Flags, bcb.Length); D606 1 I606 1 usb_stor_clear_halt(us, pipe); D636 1 I636 1 usb_stor_clear_halt(us, pipe); D650 1 I650 1 usb_stor_clear_halt(us, pipe); D719 4 I722 3 ata.generic.RegisterSelect = REG_CYLINDER_LOW | REG_CYLINDER_HIGH | REG_STATUS | REG_ERROR; D733 1 I733 1 ata.generic.RegisterSelect = REG_DEVICE_HEAD; D742 1 I742 1 ata.generic.RegisterSelect = REG_DEVICE_CONTROL; D751 1 I751 1 ata.generic.RegisterSelect = REG_DEVICE_CONTROL; D759 1 I759 1 ata.generic.RegisterSelect = REG_DEVICE_HEAD | REG_COMMAND; D761 1 D768 1 I768 1 ata.generic.RegisterSelect = REG_COMMAND; I888 37 #ifdef CONFIG_USB_STORAGE_DEBUG static void isd200_log_config( struct isd200_info* info ) { US_DEBUGP(" Event Notification: 0x%x\n", info->ConfigData.EventNotification); US_DEBUGP(" External Clock: 0x%x\n", info->ConfigData.ExternalClock); US_DEBUGP(" ATA Init Timeout: 0x%x\n", info->ConfigData.ATAInitTimeout); US_DEBUGP(" ATAPI Command Block Size: 0x%x\n", (info->ConfigData.ATAConfig & ATACFG_BLOCKSIZE) >> 6); US_DEBUGP(" Master/Slave Selection: 0x%x\n", info->ConfigData.ATAConfig & ATACFG_MASTER); US_DEBUGP(" ATAPI Reset: 0x%x\n", info->ConfigData.ATAConfig & ATACFG_ATAPI_RESET); US_DEBUGP(" ATA Timing: 0x%x\n", info->ConfigData.ATAConfig & ATACFG_TIMING); US_DEBUGP(" ATA Major Command: 0x%x\n", info->ConfigData.ATAMajorCommand); US_DEBUGP(" ATA Minor Command: 0x%x\n", info->ConfigData.ATAMinorCommand); US_DEBUGP(" Init Status: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_INIT_STATUS); US_DEBUGP(" Config Descriptor 2: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_CONF_DESC2); US_DEBUGP(" Skip Device Boot: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_SKIP_BOOT); US_DEBUGP(" ATA 3 State Supsend: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_STATE_SUSPEND); US_DEBUGP(" Descriptor Override: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_DESC_OVERRIDE); US_DEBUGP(" Last LUN Identifier: 0x%x\n", info->ConfigData.ATAExtraConfig & ATACFGE_LAST_LUN); US_DEBUGP(" SRST Enable: 0x%x\n", info->ConfigData.ATAExtraConfig & CFG_CAPABILITY_SRST); } #endif D904 1 I904 1 #ifdef CONFIG_USB_STORAGE_DEBUG D906 1 D908 16 I923 2 isd200_log_config(info); #endif D944 2 I945 2 result = usb_stor_clear_halt(us, usb_sndctrlpipe(us->pusb_dev, 0)); D989 16 I1004 3 #ifdef CONFIG_USB_STORAGE_DEBUG isd200_log_config(info); #endif D1011 2 I1012 2 result = usb_stor_clear_halt(us, usb_sndctrlpipe(us->pusb_dev, 0)); D1178 1 I1178 2 US_DEBUGP(" Not ATA, not ATAPI. Weird.\n"); break; D1182 1 I1182 1 if (time_after_eq(jiffies, endTime)) { D1226 1 I1226 1 if (!(info->ConfigData.ATAConfig & ATACFG_MASTER)) { D1228 1 I1228 2 info->ConfigData.ATAConfig &= 0x3f; info->ConfigData.ATAConfig |= (isslave<<6); I1274 2 __u16 *src, *dest; ide_fix_driveid(&info->drive); D1320 1 I1320 1 info->InquiryData.DeviceTypeModifier = DEVICE_REMOVABLE; D1325 20 I1344 14 src = (__u16*)info->drive.model; dest = (__u16*)info->InquiryData.VendorId; for (i=0;i<4;i++) dest[i] = be16_to_cpu(src[i]); \ src = (__u16*)(info->drive.model+8); dest = (__u16*)info->InquiryData.ProductId; for (i=0;i<8;i++) dest[i] = be16_to_cpu(src[i]); \ src = (__u16*)info->drive.fw_rev; dest = (__u16*)info->InquiryData.ProductRevisionLevel; for (i=0;i<2;i++) dest[i] = be16_to_cpu(src[i]); D1486 1 I1486 1 ataCdb->generic.RegisterSelect = REG_COMMAND; D1507 1 I1507 1 ataCdb->generic.RegisterSelect = REG_COMMAND; D1564 1 I1564 4 ataCdb->generic.RegisterSelect = REG_SECTOR_COUNT | REG_SECTOR_NUMBER | REG_CYLINDER_LOW | REG_CYLINDER_HIGH | REG_DEVICE_HEAD | REG_COMMAND; D1566 1 D1568 1 D1570 1 D1572 1 D1574 1 D1597 1 I1597 4 ataCdb->generic.RegisterSelect = REG_SECTOR_COUNT | REG_SECTOR_NUMBER | REG_CYLINDER_LOW | REG_CYLINDER_HIGH | REG_DEVICE_HEAD | REG_COMMAND; D1599 1 D1601 1 D1603 1 D1605 1 D1607 1 D1620 1 I1620 1 ataCdb->generic.RegisterSelect = REG_COMMAND; D1643 1 I1643 1 ataCdb->generic.RegisterSelect = REG_COMMAND; D1650 1 I1650 1 ataCdb->generic.RegisterSelect = REG_COMMAND; == drivers/usb/storage/jumpshot.c == patch@athlon.transmeta.com|drivers/usb/storage/jumpshot.c|20020205191457|57420|54bd9d20b0bad16c patch@athlon.transmeta.com|drivers/usb/storage/jumpshot.c|20020205223631|06769 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +31 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 64503 O -rw-rw-r-- P drivers/usb/storage/jumpshot.c ------------------------------------------------ I2 2 * $Id: jumpshot.c,v 1.7 2002/02/25 00:40:13 mdharm Exp $ * D9 1 I9 2 * * Many thanks to Robert Baruch for the SanDisk SmartMedia reader driver I10 1 * I13 6 * Fix for media change by Joerg Schneider (js@joergschneider.com) * * Developed with the assistance of: * * (C) 2002 Alan Stern * D131 2 I132 2 result = usb_stor_clear_halt(us, pipe); US_DEBUGP("jumpshot_send_control: -- usb_stor_clear_halt() returns %d\n", result); D164 1 I164 1 usb_stor_clear_halt(us, pipe); I800 17 if (srb->cmnd[0] == START_STOP) { /* this is used by sd.c'check_scsidisk_media_change to detect media change */ US_DEBUGP("jumpshot_transport: START_STOP.\n"); /* the first jumpshot_id_device after a media change returns an error (determined experimentally) */ rc = jumpshot_id_device(us, info); if (rc == USB_STOR_TRANSPORT_GOOD) { info->sense_key = NO_SENSE; srb->result = SUCCESS; } else { info->sense_key = UNIT_ATTENTION; srb->result = CHECK_CONDITION; } return rc; } == drivers/usb/storage/unusual_devs.h == patch@athlon.transmeta.com|drivers/usb/storage/unusual_devs.h|20020205175037|02097|15a91f301f4a405 patch@athlon.transmeta.com|drivers/usb/storage/unusual_devs.h|20020205223654|48134 D 1.9 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +42 -11 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 52975 O -rw-rw-r-- P drivers/usb/storage/unusual_devs.h ------------------------------------------------ D4 1 I4 1 * $Id: unusual_devs.h,v 1.32 2002/02/25 02:41:24 mdharm Exp $ D7 1 I7 1 * (c) 2000-2002 Matthew Dharm (mdharm-usb@one-eyed-alien.net) D201 1 I201 1 "DSC-S30/S70/S75/505V/F505/F707", D292 1 I292 1 US_FL_MODE_XLATE ), I294 21 /* Reported by Carlos Villegas * This device needs an INQUIRY of exactly 36-bytes to function. * That is the only reason this entry is needed. */ UNUSUAL_DEV( 0x05e3, 0x0700, 0x0000, 0xffff, "SIIG", "CompactFlash Card Reader", US_SC_SCSI, US_PR_BULK, NULL, US_FL_FIX_INQUIRY ), \ /* Reported by Peter Marks * Like the SIIG unit above, this unit needs an INQUIRY to ask for exactly * 36 bytes of data. No more, no less. That is the only reason this entry * is needed. */ UNUSUAL_DEV( 0x05e3, 0x0702, 0x0000, 0xffff, "EagleTec", "External Hard Disk", US_SC_SCSI, US_PR_BULK, NULL, US_FL_FIX_INQUIRY ), \ I307 8 /* Submitted by kedar@centillium * Needed for START_STOP flag, but that is unconfirmed */ UNUSUAL_DEV( 0x0686, 0x4006, 0x0001, 0x0001, "Minolta", "Dimage S304", US_SC_SCSI, US_PR_BULK, NULL, US_FL_START_STOP ), \ D384 1 I384 1 US_FL_MODE_XLATE ), D401 1 I401 1 US_FL_MODE_XLATE ), D407 1 I407 1 US_FL_MODE_XLATE ), D413 1 I413 1 US_FL_MODE_XLATE ), D419 1 I419 1 US_FL_MODE_XLATE ), D425 1 I425 1 US_FL_MODE_XLATE ), D432 1 I432 1 US_FL_MODE_XLATE ), I471 2 * Also reported by Brian Hall , again for flags. * I also suspect this device may have a broken serial number. == drivers/usb/stv680.c == patch@athlon.transmeta.com|drivers/usb/stv680.c|20020205223622|62865|4538fdd17323e497 patch@athlon.transmeta.com|drivers/usb/stv680.c|20020205223719|06223 D 1.3 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +16 -7 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 44611 O -rw-rw-r-- P drivers/usb/stv680.c ------------------------------------------------ I52 6 * * ver 0.25 Jan, 2002 (kjs) * Fixed a bug in which the driver sometimes attempted * to set to a non-supported size. This allowed * gnomemeeting to work. * Fixed proc entry removal bug. D90 1 I90 1 #define DRIVER_VERSION "v0.25" D662 1 I662 1 remove_proc_entry ("stv680", video_proc_entry); D865 1 I865 1 } else if ((width >= 158) && (width <= 166) && (stv680->QVGA == 1)) { D868 1 I868 1 } else if ((width >= 172) && (width <= 180) && (stv680->CIF == 1)) { D871 1 I871 1 } else if ((width >= 318) && (width <= 350) && (stv680->QVGA == 1)) { D874 1 I874 1 } else if ((width >= 350) && (width <= 358) && (stv680->CIF == 1)) { I876 3 } else { PDEBUG (1, "STV(e): request for non-supported size: request: v.width = %i, v.height = %i actual: stv.width = %i, stv.height = %i", width, height, stv680->vwidth, stv680->vheight); return 1; D878 1 I878 1 == drivers/usb/usb-skeleton.c == patch@athlon.transmeta.com|drivers/usb/usb-skeleton.c|20020205191031|43847|e738d031e56e3181 patch@athlon.transmeta.com|drivers/usb/usb-skeleton.c|20020205223631|47131 D 1.7 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +5 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 63658 O -rw-rw-r-- P drivers/usb/usb-skeleton.c ------------------------------------------------ D2 1 I2 1 * USB Skeleton driver - 0.7 I24 3 * 2002_02_12 - 0.7 - zero out dev in probe function for devices that do * not have both a bulk in and bulk out endpoint. * Thanks to Holger Waechtler for the fix. I542 1 memset (dev, 0x00, sizeof (*dev)); == drivers/usb/vicam.c == patch@athlon.transmeta.com|drivers/usb/vicam.c|20020205223622|63269|6c0bb81e390c6b79 patch@athlon.transmeta.com|drivers/usb/vicam.c|20020205223623|12549 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +12 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 31373 O -rw-rw-r-- P drivers/usb/vicam.c ------------------------------------------------ D82 1 I82 1 static volatile int change_pending = 0; I332 1 DECLARE_WAITQUEUE(wait, current); D334 1 I334 6 set_current_state(TASK_INTERRUPTIBLE); add_wait_queue(&vicam->wait, &wait); if (change_pending) schedule(); remove_wait_queue(&vicam->wait, &wait); set_current_state(TASK_RUNNING); D893 1 I893 2 if (vicam_init(vicam)) { kfree(vicam); I894 1 } I899 1 kfree(vicam); == drivers/video/sstfb.c == patch@athlon.transmeta.com|drivers/video/sstfb.c|20020205201335|46359|a84a09c31f4b5b1a patch@athlon.transmeta.com|drivers/video/sstfb.c|20020205203346|22249 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +34 -8 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 24580 O -rw-rw-r-- P drivers/video/sstfb.c ------------------------------------------------ I7 4 * NOTE: I have been unable to reach Ghozlane through the eMail-address * given above for more than 3 months, same with another address of him * which I found on the web. - Urs * D12 2 I13 2 * 05/2001 Urs Ganse * (initial work on voodoo2 port, added interlace support) I61 2 -FIXME: Some uninitialized variable causes sporadic crashes when setting a video mode for the first time. D211 1 I211 1 /* Interface to the world */ D602 3 I604 2 if((var->vmode & FB_VMODE_MASK) && !sst_info->is_voodoo2 ){ eprintk ("Interlace modes not supported on Voodoo 1 hardware.\n"); D618 1 I618 11 par->flags = 0; if (var->vmode & FB_VMODE_INTERLACED) { // printk(KERN_DEBUG "sstfb: This is an interlace mode.\n"); par->flags|=FB_VMODE_INTERLACED; } if(var->vmode & FB_VMODE_DOUBLE) { // printk(KERN_DEBUG "sstfb: This is a doublescan mode.\n"); par->flags|=FB_VMODE_DOUBLE; } D688 1 I688 1 var->vmode = par->flags; I1377 11 /* Interlace or Doublescan */ if(par->flags & FB_VMODE_INTERLACED) sst_set_bits(FBIINIT5,1>>26); else sst_unset_bits(FBIINIT5,1>>26); if(par->flags & FB_VMODE_DOUBLE) sst_set_bits(FBIINIT5,1>>20); else sst_unset_bits(FBIINIT5,1>>20); == drivers/video/sstfb.h == patch@athlon.transmeta.com|drivers/video/sstfb.h|20020205201335|46650|f6f7159ac4375436 patch@athlon.transmeta.com|drivers/video/sstfb.h|20020205201336|57960 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 62483 O -rw-rw-r-- P drivers/video/sstfb.h ------------------------------------------------ I319 1 unsigned int flags; /* Doublescan, Interlace etc. */ == fs/reiserfs/bitmap.c == patch@athlon.transmeta.com|fs/reiserfs/bitmap.c|20020205175032|30486|f4879a953de9cf5a patch@athlon.transmeta.com|fs/reiserfs/bitmap.c|20020205223443|39432 D 1.12 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +2 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 37860 O -rw-rw-r-- P fs/reiserfs/bitmap.c ------------------------------------------------ D142 4 I145 2 RFALSE(!th->t_super, "vs-4060: trying to free block on nonexistent device"); RFALSE(is_reusable (th->t_super, block, 1) == 0, "vs-4070: can not free such block"); == fs/reiserfs/dir.c == patch@athlon.transmeta.com|fs/reiserfs/dir.c|20020205175032|30915|5669974bbd93f61f patch@athlon.transmeta.com|fs/reiserfs/dir.c|20020205223443|36430 D 1.11 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +7 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 51490 O -rw-rw-r-- P fs/reiserfs/dir.c ------------------------------------------------ I22 1 ioctl: reiserfs_ioctl, D79 1 I79 1 "vs-9000: found item %h does not match to dir we readdir %K", D118 1 I118 1 local_buf = reiserfs_kmalloc(d_reclen, GFP_NOFS, inode->i_sb) ; D124 1 I124 1 reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ; D136 1 I136 1 reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ; D141 1 I141 1 reiserfs_kfree(local_buf, d_reclen, inode->i_sb) ; I182 1 UPDATE_ATIME(inode) ; == fs/reiserfs/fix_node.c == patch@athlon.transmeta.com|fs/reiserfs/fix_node.c|20020205175032|31677|3421e51857803570 patch@athlon.transmeta.com|fs/reiserfs/fix_node.c|20020205223659|63965 D 1.14 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +3 -7 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 56499 O -rw-rw-r-- P fs/reiserfs/fix_node.c ------------------------------------------------ D1982 1 I1982 1 #ifdef CONFIG_REISERFS_CHECK I2009 1 #endif D2359 1 D2368 1 D2376 1 D2381 1 D2385 2 I2386 1 goto repeat; /* No disk space, or schedule occurred and == fs/reiserfs/inode.c == patch@athlon.transmeta.com|fs/reiserfs/inode.c|20020205175032|32598|dde399c4d9dcf14b patch@plucky.distro.conectiva|fs/reiserfs/inode.c|20020313220814|32806 D 1.32 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +112 -15 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 13381 O -rw-rw-r-- P fs/reiserfs/inode.c ------------------------------------------------ I447 18 static int reiserfs_get_block_direct_io (struct inode * inode, long block, struct buffer_head * bh_result, int create) { int ret ; \ ret = reiserfs_get_block(inode, block, bh_result, create) ; \ /* don't allow direct io onto tail pages */ if (ret == 0 && buffer_mapped(bh_result) && bh_result->b_blocknr == 0) { /* make sure future calls to the direct io funcs for this offset ** in the file fail by unmapping the buffer */ reiserfs_unmap_buffer(bh_result); ret = -EINVAL ; } return ret ; } \ \ D751 2 I752 5 if ( retval != -ENOSPC ) printk("clm-6004: convert tail failed inode %lu, error %d\n", inode->i_ino, retval) ; if (allocated_block_nr) { /* the bitmap, the super, and the stat data == 3 */ journal_begin(&th, inode->i_sb, 3) ; I753 2 transaction_started = 1 ; } I758 5 if (retval) { reiserfs_unmap_buffer(unbh); reiserfs_free_block (&th, allocated_block_nr); goto failure; } D768 4 I771 1 \ D917 1 I917 1 blocks = _ROUND_UP (blocks, inode->i_sb->s_blocksize >> 9); I928 3 /* nopack is initially zero for v1 objects. For v2 objects, nopack is initialised from sd_attrs */ inode->u.reiserfs_i.i_flags &= ~i_nopack_mask; I954 4 /* read persistent inode attributes from sd and initalise generic inode flags from them */ inode -> u.reiserfs_i.i_attrs = sd_v2_attrs( sd ); sd_attrs_to_i_attrs( sd_v2_attrs( sd ), inode ); D957 2 I981 1 __u16 flags; D992 1 I992 1 if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode)) D994 1 D996 1 D998 1 I998 3 flags = inode -> u.reiserfs_i.i_attrs; i_attrs_to_sd_attrs( inode, &flags ); set_sd_v2_attrs( sd_v2, flags ); D1496 1 I1496 3 inode -> u.reiserfs_i.i_attrs = dir -> u.reiserfs_i.i_attrs & REISERFS_INHERIT_MASK; sd_attrs_to_i_attrs( inode -> u.reiserfs_i.i_attrs, inode ); I1554 4 /* symlink cannot be immutable or append only, right? */ if( S_ISLNK( inode -> i_mode ) ) inode -> i_flags &= ~ ( S_IMMUTABLE | S_APPEND ); \ I1900 4 \ /* lock them all first so the end_io handler doesn't unlock the page ** too early */ I1904 2 } for(i = 0 ; i < nr ; i++) { I1908 1 bh = bhp[i] ; I2075 52 void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode ) { if( reiserfs_attrs( inode -> i_sb ) ) { if( sd_attrs & REISERFS_SYNC_FL ) inode -> i_flags |= S_SYNC; else inode -> i_flags &= ~S_SYNC; if( sd_attrs & REISERFS_IMMUTABLE_FL ) inode -> i_flags |= S_IMMUTABLE; else inode -> i_flags &= ~S_IMMUTABLE; if( sd_attrs & REISERFS_NOATIME_FL ) inode -> i_flags |= S_NOATIME; else inode -> i_flags &= ~S_NOATIME; if( sd_attrs & REISERFS_NOTAIL_FL ) inode->u.reiserfs_i.i_flags |= i_nopack_mask; else inode->u.reiserfs_i.i_flags &= ~i_nopack_mask; } } \ void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs ) { if( reiserfs_attrs( inode -> i_sb ) ) { if( inode -> i_flags & S_IMMUTABLE ) *sd_attrs |= REISERFS_IMMUTABLE_FL; else *sd_attrs &= ~REISERFS_IMMUTABLE_FL; if( inode -> i_flags & S_SYNC ) *sd_attrs |= REISERFS_SYNC_FL; else *sd_attrs &= ~REISERFS_SYNC_FL; if( inode -> i_flags & S_NOATIME ) *sd_attrs |= REISERFS_NOATIME_FL; else *sd_attrs &= ~REISERFS_NOATIME_FL; if( inode->u.reiserfs_i.i_flags & i_nopack_mask ) *sd_attrs |= REISERFS_NOTAIL_FL; else *sd_attrs &= ~REISERFS_NOTAIL_FL; } } \ static int reiserfs_direct_io(int rw, struct inode *inode, struct kiobuf *iobuf, unsigned long blocknr, int blocksize) { return generic_direct_IO(rw, inode, iobuf, blocknr, blocksize, reiserfs_get_block_direct_io) ; } \ D2082 1 I2082 2 bmap: reiserfs_aop_bmap, direct_IO: reiserfs_direct_io, == fs/reiserfs/ioctl.c == patch@athlon.transmeta.com|fs/reiserfs/ioctl.c|20020205175032|32925|2c80c1e42e37f95b patch@athlon.transmeta.com|fs/reiserfs/ioctl.c|20020205223443|65394 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +57 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 47766 O -rw-rw-r-- P fs/reiserfs/ioctl.c ------------------------------------------------ D17 1 I17 2 ** 2) REISERFS_IOC_[GS]ETFLAGS, REISERFS_IOC_[GS]ETVERSION ** 3) That's all for a while ... I21 2 unsigned int flags; \ I23 1 if( S_ISREG( inode -> i_mode ) ) { I25 23 else return 0; } else return -ENOTTY; /* following two cases are taken from fs/ext2/ioctl.c by Remy Card (card@masi.ibp.fr) */ case REISERFS_IOC_GETFLAGS: flags = inode -> u.reiserfs_i.i_attrs; i_attrs_to_sd_attrs( inode, ( __u16 * ) &flags ); return put_user(flags, (int *) arg); case REISERFS_IOC_SETFLAGS: { if (IS_RDONLY(inode)) return -EROFS; \ if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER)) return -EPERM; \ if (get_user(flags, (int *) arg)) return -EFAULT; \ if ( ( flags & REISERFS_IMMUTABLE_FL ) && !capable( CAP_LINUX_IMMUTABLE ) ) return -EPERM; D27 1 I27 27 if( ( flags & REISERFS_NOTAIL_FL ) && S_ISREG( inode -> i_mode ) ) { int result; \ result = reiserfs_unpack( inode, filp ); if( result ) return result; } sd_attrs_to_i_attrs( flags, inode ); inode -> u.reiserfs_i.i_attrs = flags; inode->i_ctime = CURRENT_TIME; mark_inode_dirty(inode); return 0; } case REISERFS_IOC_GETVERSION: return put_user(inode->i_generation, (int *) arg); case REISERFS_IOC_SETVERSION: if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER)) return -EPERM; if (IS_RDONLY(inode)) return -EROFS; if (get_user(inode->i_generation, (int *) arg)) return -EFAULT; inode->i_ctime = CURRENT_TIME; mark_inode_dirty(inode); return 0; default: D46 1 I46 2 inode->u.reiserfs_i.i_flags |= i_nopack_mask; return 0 ; == fs/reiserfs/item_ops.c == patch@athlon.transmeta.com|fs/reiserfs/item_ops.c|20020205175032|33118|4f5d04ec5c09df9 patch@athlon.transmeta.com|fs/reiserfs/item_ops.c|20020205202358|09263 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +95 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 42233 O -rw-rw-r-- P fs/reiserfs/item_ops.c ------------------------------------------------ I687 91 // Error catching functions to catch errors caused by incorrect item types. // static int errcatch_bytes_number (struct item_head * ih, int block_size) { reiserfs_warning ("green-16001: Invalid item type observed, run fsck ASAP\n"); return 0; } \ static void errcatch_decrement_key (struct cpu_key * key) { reiserfs_warning ("green-16002: Invalid item type observed, run fsck ASAP\n"); } \ \ static int errcatch_is_left_mergeable (struct key * key, unsigned long bsize) { reiserfs_warning ("green-16003: Invalid item type observed, run fsck ASAP\n"); return 0; } \ \ static void errcatch_print_item (struct item_head * ih, char * item) { reiserfs_warning ("green-16004: Invalid item type observed, run fsck ASAP\n"); } \ \ static void errcatch_check_item (struct item_head * ih, char * item) { reiserfs_warning ("green-16005: Invalid item type observed, run fsck ASAP\n"); } \ static int errcatch_create_vi (struct virtual_node * vn, struct virtual_item * vi, int is_affected, int insert_size) { reiserfs_warning ("green-16006: Invalid item type observed, run fsck ASAP\n"); return 0; // We might return -1 here as well, but it won't help as create_virtual_node() from where // this operation is called from is of return type void. } \ static int errcatch_check_left (struct virtual_item * vi, int free, int start_skip, int end_skip) { reiserfs_warning ("green-16007: Invalid item type observed, run fsck ASAP\n"); return -1; } \ \ static int errcatch_check_right (struct virtual_item * vi, int free) { reiserfs_warning ("green-16008: Invalid item type observed, run fsck ASAP\n"); return -1; } \ static int errcatch_part_size (struct virtual_item * vi, int first, int count) { reiserfs_warning ("green-16009: Invalid item type observed, run fsck ASAP\n"); return 0; } \ static int errcatch_unit_num (struct virtual_item * vi) { reiserfs_warning ("green-16010: Invalid item type observed, run fsck ASAP\n"); return 0; } \ static void errcatch_print_vi (struct virtual_item * vi) { reiserfs_warning ("green-16011: Invalid item type observed, run fsck ASAP\n"); } \ struct item_operations errcatch_ops = { errcatch_bytes_number, errcatch_decrement_key, errcatch_is_left_mergeable, errcatch_print_item, errcatch_check_item, \ errcatch_create_vi, errcatch_check_left, errcatch_check_right, errcatch_part_size, errcatch_unit_num, errcatch_print_vi }; \ \ \ ////////////////////////////////////////////////////////////////////////////// D694 1 I694 1 struct item_operations * item_ops [TYPE_ANY + 1] = { D698 1 I698 3 &direntry_ops, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &errcatch_ops /* This is to catch errors with invalid type (15th entry for TYPE_ANY) */ == fs/reiserfs/journal.c == patch@athlon.transmeta.com|fs/reiserfs/journal.c|20020205175032|33379|c978f60ec0ca7b52 patch@plucky.distro.conectiva|fs/reiserfs/journal.c|20020313220407|41726 D 1.21 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +61 -23 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 18288 O -rw-rw-r-- P fs/reiserfs/journal.c ------------------------------------------------ D74 1 I74 3 #define JOURNAL_TRANS_HALF 1018 /* must be correct to keep the desc and commit structs at 4k */ #define BUFNR 64 /*read ahead */ D120 1 I120 1 bn = reiserfs_kmalloc(sizeof(struct reiserfs_bitmap_node), GFP_NOFS, p_s_sb) ; D124 1 I124 1 bn->data = reiserfs_kmalloc(p_s_sb->s_blocksize, GFP_NOFS, p_s_sb) ; D126 1 I126 1 reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb) ; D162 2 I163 2 reiserfs_kfree(bn->data, p_s_sb->s_blocksize, p_s_sb) ; reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb) ; D231 2 I232 2 reiserfs_kfree(bn->data, p_s_sb->s_blocksize, p_s_sb) ; reiserfs_kfree(bn, sizeof(struct reiserfs_bitmap_node), p_s_sb) ; D1503 2 I1504 2 log_blocks = reiserfs_kmalloc(le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), GFP_NOFS, p_s_sb) ; real_blocks = reiserfs_kmalloc(le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), GFP_NOFS, p_s_sb) ; D1508 2 I1509 2 reiserfs_kfree(log_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; reiserfs_kfree(real_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; D1528 2 I1529 2 reiserfs_kfree(log_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; reiserfs_kfree(real_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; D1543 2 I1544 2 reiserfs_kfree(log_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; reiserfs_kfree(real_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; D1563 2 I1564 2 reiserfs_kfree(log_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; reiserfs_kfree(real_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; D1580 2 I1581 2 reiserfs_kfree(log_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; reiserfs_kfree(real_blocks, le32_to_cpu(desc->j_len) * sizeof(struct buffer_head *), p_s_sb) ; I1593 35 struct buffer_head * reiserfs_breada (kdev_t dev, int block, int bufsize, unsigned int max_block) { struct buffer_head * bhlist[BUFNR]; unsigned int blocks = BUFNR; struct buffer_head * bh; int i, j; bh = getblk (dev, block, bufsize); if (buffer_uptodate (bh)) return (bh); if (block + BUFNR > max_block) { blocks = max_block - block; } bhlist[0] = bh; j = 1; for (i = 1; i < blocks; i++) { bh = getblk (dev, block + i, bufsize); if (buffer_uptodate (bh)) { brelse (bh); break; } else bhlist[j++] = bh; } ll_rw_block (READ, j, bhlist); for(i = 1; i < j; i++) brelse (bhlist[i]); bh = bhlist[0]; wait_on_buffer (bh); if (buffer_uptodate (bh)) return bh; brelse (bh); return NULL; } D1663 1 I1663 2 d_bh = reiserfs_breada(p_s_sb->s_dev, cur_dblock, p_s_sb->s_blocksize, reiserfs_get_journal_block(p_s_sb) + JOURNAL_BLOCK_COUNT) ; D1780 1 I1780 1 reiserfs_kfree(ct->self, sizeof(struct reiserfs_journal_commit_task), ct->p_s_sb) ; D1804 1 I1804 1 ct = reiserfs_kmalloc(sizeof(struct reiserfs_journal_commit_task), GFP_NOFS, p_s_sb) ; == fs/reiserfs/namei.c == patch@athlon.transmeta.com|fs/reiserfs/namei.c|20020205175032|34164|1b238378806a7202 patch@athlon.transmeta.com|fs/reiserfs/namei.c|20020205223719|63044 D 1.19 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +25 -7 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 40160 O -rw-rw-r-- P fs/reiserfs/namei.c ------------------------------------------------ D343 1 I343 1 struct inode * inode = NULL; I360 3 if ( retval == IO_ERROR ) { return ERR_PTR(-EIO); } I445 4 if ( retval == IO_ERROR ) { return -EIO; } \ D473 1 I473 1 "entry with this key (%K) already exists\n", &entry_key); D718 1 I718 1 if ( (retval = reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de)) == NAME_NOT_FOUND) { I720 3 } else if ( retval == IO_ERROR) { retval = -EIO; goto end_rmdir; I721 1 \ D803 1 I803 1 if ( (retval = reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de)) == NAME_NOT_FOUND) { I805 3 } else if (retval == IO_ERROR) { retval = -EIO; goto end_unlink; D884 1 I884 1 name = reiserfs_kmalloc (item_len, GFP_NOFS, dir->i_sb); D897 1 I897 1 reiserfs_kfree (name, item_len, dir->i_sb); I1067 3 if (retval == IO_ERROR) return -EIO; \ D1069 1 I1140 2 // reiserfs_add_entry should not return IO_ERROR, because it is called with essentially same parameters from // reiserfs_add_entry above, and we'll catch any i/o errors before we get here. == fs/reiserfs/objectid.c == patch@athlon.transmeta.com|fs/reiserfs/objectid.c|20020205175032|34443|3c629917be42063b patch@athlon.transmeta.com|fs/reiserfs/objectid.c|20020205223443|02253 D 1.10 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +5 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 17454 O -rw-rw-r-- P fs/reiserfs/objectid.c ------------------------------------------------ I7 1 #include I197 4 \ /* Zero out label and generate random UUID */ memset(disk_sb->s_label, 0, sizeof(disk_sb->s_label)) ; generate_random_uuid(disk_sb->s_uuid); == fs/reiserfs/prints.c == patch@athlon.transmeta.com|fs/reiserfs/prints.c|20020205175032|00174|c3be0bb295bc9a7a patch@athlon.transmeta.com|fs/reiserfs/prints.c|20020205223443|40366 D 1.11 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +12 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 45584 O -rw-rw-r-- P fs/reiserfs/prints.c ------------------------------------------------ I479 11 char * reiserfs_hashname(int code) { if ( code == YURA_HASH) return "rupasov"; if ( code == TEA_HASH) return "tea"; if ( code == R5_HASH) return "r5"; \ return "unknown"; } D522 2 I523 1 reiserfs_hashname(sb_hash_function_code(rs))); == fs/reiserfs/procfs.c == patch@athlon.transmeta.com|fs/reiserfs/procfs.c|20020205203238|10812|e7e35251ff800ac3 patch@plucky.distro.conectiva|fs/reiserfs/procfs.c|20020313220407|55475 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +21 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 31638 O -rw-rw-r-- P fs/reiserfs/procfs.c ------------------------------------------------ I174 6 "insert_item_restarted: \t%lu\n" "paste_into_item_restarted: \t%lu\n" "cut_from_item_restarted: \t%lu\n" "delete_solid_item_restarted: \t%lu\n" "delete_item_restarted: \t%lu\n" \ I210 7 \ SFP( insert_item_restarted ), SFP( paste_into_item_restarted ), SFP( cut_from_item_restarted ), SFP( delete_solid_item_restarted ), SFP( delete_item_restarted ), \ I343 1 __u32 flags; I351 1 flags = DFL( s_flags ); D365 1 I365 2 "version: \t%i\n" "flags: \t%x[%s]\n", D381 1 I381 4 DF( s_version ), flags, ( flags & reiserfs_attrs_cleared ) ? "attrs_cleared" : "" ); == fs/reiserfs/stree.c == patch@athlon.transmeta.com|fs/reiserfs/stree.c|20020205175033|00641|21879a298ebfbd9f patch@plucky.distro.conectiva|fs/reiserfs/stree.c|20020313220407|53571 D 1.18 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +20 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 45609 O -rw-rw-r-- P fs/reiserfs/stree.c ------------------------------------------------ D169 1 I169 1 reiserfs_warning ("comp_cpu_keys: type are compared for %K and %K\n", I526 4 if ( le_ih_k_type(ih) == TYPE_ANY) { reiserfs_warning ("is_leaf: wrong item type for item %h\n",ih); return 0; } I1244 2 PROC_INFO_INC( p_s_sb, delete_item_restarted ); \ D1342 2 I1343 4 // No need for a warning, if there is just no free space to insert '..' item into the newly-created subdir if ( !( (unsigned long long) GET_HASH_VALUE (le_key_k_offset (le_key_version (key), key)) == 0 && \ GET_GENERATION_NUMBER (le_key_k_offset (le_key_version (key), key)) == 1 ) ) reiserfs_warning ("vs-5355: reiserfs_delete_solid_item: %k not found", key); D1353 1 I1353 2 if (retval == REPEAT_SEARCH) { PROC_INFO_INC( th -> t_super, delete_solid_item_restarted ); I1354 1 } D1526 1 I1526 1 reiserfs_panic(p_s_sb, "PAP-5580: reiserfs_cut_from_item: item to convert does not exist (%K)", p_s_item_key); I1540 2 PROC_INFO_INC( p_s_sb, cut_from_item_restarted ); \ D1719 1 I1719 1 "PAP-5670: reiserfs_truncate_file returns too big number: deleted %d, file_size %lu, item_key %K", I1807 1 PROC_INFO_INC( th -> t_super, paste_into_item_restarted ); I1857 1 PROC_INFO_INC( th -> t_super, insert_item_restarted ); == fs/reiserfs/super.c == patch@athlon.transmeta.com|fs/reiserfs/super.c|20020205175033|01005|5b68d38545a870fb patch@plucky.distro.conectiva|fs/reiserfs/super.c|20020313220407|14578 D 1.18 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +107 -42 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 14413 O -rw-rw-r-- P fs/reiserfs/super.c ------------------------------------------------ D210 1 I210 1 printk ("done\n"); D272 1 I272 2 if ( retval != -ENOSPC ) reiserfs_warning ("vs-2100: add_save_link:" D283 2 I284 3 if (retval) { if (retval != -ENOSPC) reiserfs_warning ("vs-2120: add_save_link: insert_item returned %d\n", D286 1 I286 1 } else { I490 2 } else if (!strcmp (this_char, "attrs")) { set_bit (REISERFS_ATTRS, mount_options); I504 18 static void handle_attrs( struct super_block *s ) { struct reiserfs_super_block * rs; \ if( reiserfs_attrs( s ) ) { rs = SB_DISK_SUPER_BLOCK (s); if( old_format_only(s) ) { reiserfs_warning( "reiserfs: cannot support attributes on 3.5.x disk format\n" ); s -> u.reiserfs_sb.s_mount_opt &= ~ ( 1 << REISERFS_ATTRS ); return; } if( !( le32_to_cpu( rs -> s_flags ) & reiserfs_attrs_cleared ) ) { reiserfs_warning( "reiserfs: cannot support attributes until flag is set in super-block\n" ); s -> u.reiserfs_sb.s_mount_opt &= ~ ( 1 << REISERFS_ATTRS ); } } } \ D517 1 I517 1 unsigned long mount_options = 0; I523 15 #define SET_OPT( opt, bits, super ) \ if( ( bits ) & ( 1 << ( opt ) ) ) \ ( super ) -> u.reiserfs_sb.s_mount_opt |= ( 1 << ( opt ) ) \ /* set options in the super-block bitmask */ SET_OPT( NOTAIL, mount_options, s ); SET_OPT( REISERFS_NO_BORDER, mount_options, s ); SET_OPT( REISERFS_NO_UNHASHED_RELOCATION, mount_options, s ); SET_OPT( REISERFS_HASHED_RELOCATION, mount_options, s ); SET_OPT( REISERFS_TEST4, mount_options, s ); SET_OPT( REISERFS_ATTRS, mount_options, s ); #undef SET_OPT \ handle_attrs( s ); \ D575 2 I576 1 int i, bmp; D578 1 I578 1 SB_AP_BITMAP (s) = reiserfs_kmalloc (sizeof (struct buffer_head *) * SB_BMAP_NR(s), GFP_NOFS, s); I579 17 return 1; for (i = 0, bmp = REISERFS_DISK_OFFSET_IN_BYTES / s->s_blocksize + 1; i < SB_BMAP_NR(s); i++, bmp = s->s_blocksize * 8 * i) { SB_AP_BITMAP (s)[i] = getblk (s->s_dev, bmp, s->s_blocksize); if (!buffer_uptodate(SB_AP_BITMAP(s)[i])) ll_rw_block(READ, 1, SB_AP_BITMAP(s) + i); } for (i = 0; i < SB_BMAP_NR(s); i++) { wait_on_buffer(SB_AP_BITMAP (s)[i]); if (!buffer_uptodate(SB_AP_BITMAP(s)[i])) { reiserfs_warning("sh-2029: reiserfs read_bitmaps: " "bitmap block (#%lu) reading failed\n", SB_AP_BITMAP(s)[i]->b_blocknr); for (i = 0; i < SB_BMAP_NR(s); i++) brelse(SB_AP_BITMAP(s)[i]); reiserfs_kfree(SB_AP_BITMAP(s), sizeof(struct buffer_head *) * SB_BMAP_NR(s), s); SB_AP_BITMAP(s) = NULL; D581 16 I596 2 } } I706 9 \ if ( rs->s_root_block == -1 ) { brelse(bh) ; printk("dev %s: Unfinished reiserfsck --rebuild-tree run detected. Please run\n" "reiserfsck --rebuild-tree and wait for a completion. If that fails\n" "get newer reiserfsprogs package\n", kdevname (s->s_dev)); return 1; } \ I708 1 \ D763 1 I763 3 do { // Some serious "goto"-hater was there ;) u32 teahash, r5hash, yurahash; \ D782 5 I786 10 r5hash=GET_HASH_VALUE (r5_hash (de.de_name, de.de_namelen)); teahash=GET_HASH_VALUE (keyed_hash (de.de_name, de.de_namelen)); yurahash=GET_HASH_VALUE (yura_hash (de.de_name, de.de_namelen)); if ( ( (teahash == r5hash) && (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num]))) == r5hash) ) || ( (teahash == yurahash) && (yurahash == GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])))) ) || ( (r5hash == yurahash) && (yurahash == GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])))) ) ) { reiserfs_warning("reiserfs: Unable to automatically detect hash" "function for device %s\n" "please mount with -o hash={tea,rupasov,r5}\n", kdevname (s->s_dev)); hash = UNSET_HASH; D789 2 I790 1 if (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])) ) == yurahash) D792 1 I792 1 else if (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])) ) == teahash) D794 2 I795 8 else if (GET_HASH_VALUE( deh_offset(&(de.de_deh[de.de_entry_num])) ) == r5hash) hash = R5_HASH; else { reiserfs_warning("reiserfs: Unrecognised hash function for " "device %s\n", kdevname (s->s_dev)); hash = UNSET_HASH; } } while (0); D820 2 I821 2 printk("REISERFS: Error, %s hash detected, " "unable to force rupasov hash\n", reiserfs_hashname(code)) ; D824 2 I825 2 printk("REISERFS: Error, %s hash detected, " "unable to force tea hash\n", reiserfs_hashname(code)) ; D828 2 I829 2 printk("REISERFS: Error, %s hash detected, " "unable to force r5 hash\n", reiserfs_hashname(code)) ; I936 2 rs = SB_DISK_SUPER_BLOCK (s); \ I1035 2 \ handle_attrs( s ); == fs/reiserfs/tail_conversion.c == patch@athlon.transmeta.com|fs/reiserfs/tail_conversion.c|20020205175033|01249|330b08139ddc224 patch@athlon.transmeta.com|fs/reiserfs/tail_conversion.c|20020205223443|31707 D 1.11 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +10 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 37693 O -rw-rw-r-- P fs/reiserfs/tail_conversion.c ------------------------------------------------ D52 3 I54 7 if ( search_for_position_by_key (sb, &end_key, path) == POSITION_FOUND ) { reiserfs_warning ("PAP-14030: direct2indirect: " "pasted or inserted byte exists in the tree %K. " "Use fsck to repair.\n", &end_key); pathrelse(path); return -EIO; } D93 1 I93 1 "direct item (%K) not found", &end_key); D96 1 I96 1 "vs-14055: direct item expected(%K), found %h", D230 1 I230 1 "item to be converted %K does not exist", p_s_item_key); == include/asm-cris/ide.h == patch@athlon.transmeta.com|include/asm-cris/ide.h|20020205175643|19518|10e385ebf27e214 patch@athlon.transmeta.com|include/asm-cris/ide.h|20020205175914|62895 D 1.3 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +13 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 22473 O -rw-rw-r-- P include/asm-cris/ide.h ------------------------------------------------ D100 1 I100 13 } select_t; \ typedef union { unsigned all : 8; /* all of the bits together */ struct { unsigned bit0 : 1; unsigned nIEN : 1; /* device INTRQ to host */ unsigned SRST : 1; /* host soft reset bit */ unsigned bit3 : 1; /* ATA-2 thingy */ unsigned reserved456 : 3; unsigned HOB : 1; /* 48-bit address ordering */ } b; } control_t; == include/asm-cris/pgtable.h == patch@athlon.transmeta.com|include/asm-cris/pgtable.h|20020205175643|22323|349e9f7910e6f4bf patch@plucky.distro.conectiva|include/asm-cris/pgtable.h|20020313233119|28364 D 1.7 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 34112 O -rw-rw-r-- P include/asm-cris/pgtable.h ------------------------------------------------ I127 1 #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) == include/asm-cris/siginfo.h == patch@athlon.transmeta.com|include/asm-cris/siginfo.h|20020205175643|24851|8f886cabcdb7a778 patch@athlon.transmeta.com|include/asm-cris/siginfo.h|20020205175644|62006 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 591 O -rw-rw-r-- P include/asm-cris/siginfo.h ------------------------------------------------ I109 1 #define SI_TKILL -6 /* sent by tkill system call */ == include/asm-cris/unistd.h == patch@athlon.transmeta.com|include/asm-cris/unistd.h|20020205175643|29680|feaa5c12fcd33a37 patch@athlon.transmeta.com|include/asm-cris/unistd.h|20020205223631|22004 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 24291 O -rw-rw-r-- P include/asm-cris/unistd.h ------------------------------------------------ I232 1 #define __NR_tkill 226 == include/asm-s390/debug.h == patch@athlon.transmeta.com|include/asm-s390/debug.h|20020205175910|25210|d5734a8893f92282 patch@athlon.transmeta.com|include/asm-s390/debug.h|20020205202353|31033 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 31985 O -rw-rw-r-- P include/asm-s390/debug.h ------------------------------------------------ D57 1 I57 1 #define STCK(x) asm volatile ("STCK 0(%0)" : : "a" (&(x)) : "memory", "cc") == include/asm-s390x/atomic.h == patch@athlon.transmeta.com|include/asm-s390x/atomic.h|20020205175910|26183|6780ab838adbded8 patch@athlon.transmeta.com|include/asm-s390x/atomic.h|20020205203242|36848 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +2 -15 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 16665 O -rw-rw-r-- P include/asm-s390x/atomic.h ------------------------------------------------ D37 15 I51 2 #define atomic_read(v) ((v)->counter) #define atomic_set(v,i) (((v)->counter) = (i)) == include/asm-s390x/bitops.h == patch@athlon.transmeta.com|include/asm-s390x/bitops.h|20020205175910|26375|39a0c461d76b3419 patch@athlon.transmeta.com|include/asm-s390x/bitops.h|20020205191007|43622 D 1.3 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +183 -183 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 8014 O -rw-rw-r-- P include/asm-s390x/bitops.h ------------------------------------------------ D82 1 I82 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : D113 1 I113 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : D143 1 I143 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : D175 1 I175 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : D208 1 I208 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : D241 1 I241 1 : "+a" (nr), "+a" (addr), "=&a" (bits), "=&d" (mask) : I251 1 unsigned long reg1, reg2; D253 10 I262 10 " lghi %1,56\n" " lghi %0,7\n" " xgr %1,%2\n" " nr %0,%2\n" " srlg %1,%1,3\n" " la %1,0(%1,%3)\n" " la %0,0(%0,%4)\n" " oc 0(1,%1),0(%0)" : "=&a" (reg1), "=&a" (reg2) : "a" (nr), "a" (addr), "a" (&_oi_bitmap) : "cc", "memory" ); I330 1 unsigned long reg1, reg2; D332 10 I341 10 " lghi %1,56\n" " lghi %0,7\n" " xgr %1,%2\n" " nr %0,%2\n" " srlg %1,%1,3\n" " la %1,0(%1,%3)\n" " la %0,0(%0,%4)\n" " nc 0(1,%1),0(%0)" : "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr), "a" (&_ni_bitmap) : "cc", "memory" ); I408 1 unsigned long reg1, reg2; D410 10 I419 10 " lghi %1,56\n" " lghi %0,7\n" " xgr %1,%2\n" " nr %0,%2\n" " srlg %1,%1,3\n" " la %1,0(%1,%3)\n" " la %0,0(%0,%4)\n" " xc 0(1,%1),0(%0)" : "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr), "a" (&_oi_bitmap) : "cc", "memory" ); I487 1 unsigned long reg1, reg2; D490 12 I501 12 " lghi %1,56\n" " lghi %2,7\n" " xgr %1,%3\n" " nr %2,%3\n" " srlg %1,%1,3\n" " la %1,0(%1,%4)\n" " ic %0,0(%1)\n" " srl %0,0(%2)\n" " la %2,0(%2,%5)\n" " oc 0(1,%1),0(%2)" : "=&d" (oldbit), "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr), "a" (&_oi_bitmap) : "cc", "memory" ); I511 1 unsigned long reg1, reg2; D515 12 I526 12 " lghi %1,56\n" " lghi %2,7\n" " xgr %1,%3\n" " nr %2,%3\n" " srlg %1,%1,3\n" " la %1,0(%1,%4)\n" " ic %0,0(%1)\n" " srl %0,0(%2)\n" " la %2,0(%2,%5)\n" " nc 0(1,%1),0(%2)" : "=&d" (oldbit), "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr), "a" (&_ni_bitmap) : "cc", "memory" ); I536 1 unsigned long reg1, reg2; D540 12 I551 12 " lghi %1,56\n" " lghi %2,7\n" " xgr %1,%3\n" " nr %2,%3\n" " srlg %1,%1,3\n" " la %1,0(%1,%4)\n" " ic %0,0(%1)\n" " srl %0,0(%2)\n" " la %2,0(%2,%5)\n" " xc 0(1,%1),0(%2)" : "=&d" (oldbit), "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr), "a" (&_oi_bitmap) : "cc", "memory" ); I578 1 unsigned long reg1, reg2; D582 9 I590 9 " lghi %2,56\n" " lghi %1,7\n" " xgr %2,%3\n" " nr %1,%3\n" " srlg %2,%2,3\n" " ic %0,0(%2,%4)\n" " srl %0,0(%1)\n" : "=&d" (oldbit), "=&a" (reg1), "=&a" (reg2) : "d" (nr), "a" (addr) : "cc" ); D610 1 I610 1 unsigned long res, cmp, count; D614 2 I615 2 __asm__(" lghi %1,-1\n" " lgr %2,%3\n" D617 3 I619 3 " aghi %2,63\n" " srlg %2,%2,6\n" "0: cg %1,0(%0,%4)\n" D622 2 I623 2 " brct %2,0b\n" " lgr %0,%3\n" D625 1 I625 1 "1: lg %2,0(%0,%4)\n" D627 1 I627 1 " clr %2,%1\n" D630 3 I632 3 " srlg %2,%2,32\n" "2: lghi %1,0xff\n" " tmll %2,0xffff\n" D635 2 I636 2 " srl %2,16\n" "3: tmll %2,0x00ff\n" D639 4 I642 4 " srl %2,8\n" "4: ngr %2,%1\n" " ic %2,0(%2,%5)\n" " algr %0,%2\n" D644 2 I645 2 : "=&a" (res), "=&d" (cmp), "=&a" (count) : "a" (size), "a" (addr), "a" (&_zb_findmap) : "cc" ); D653 1 I653 1 unsigned long bitvec, reg; D661 2 I662 1 __asm__(" lhi %2,-1\n" D664 1 I664 1 " clr %1,%2\n" D667 3 I669 3 " srlg %1,%1,32\n" "0: lghi %2,0xff\n" " tmll %1,0xffff\n" D672 2 I673 2 " srlg %1,%1,16\n" "1: tmll %1,0x00ff\n" D676 7 I682 6 " srlg %1,%1,8\n" "2: ngr %1,%2\n" " ic %1,0(%1,%3)\n" " algr %0,%1" : "=&d" (set), "+a" (bitvec), "=&d" (reg) : "a" (&_zb_findmap) : "cc" ); I700 1 unsigned long reg; D703 2 I704 1 __asm__(" lhi %2,-1\n" D706 1 I706 1 " clr %1,%2\n" D709 3 I711 3 " srlg %1,%1,32\n" "0: lghi %2,0xff\n" " tmll %1,0xffff\n" D714 2 I715 2 " srlg %1,%1,16\n" "1: tmll %1,0x00ff\n" D718 8 I725 6 " srlg %1,%1,8\n" "2: ngr %1,%2\n" " ic %1,0(%1,%3)\n" " algr %0,%1" : "=&d" (result), "+a" (word), "=&d" (reg) : "a" (&_zb_findmap) : "cc" ); D741 3 I743 2 __asm__(" slr %0,%0\n" " tml %1,0xffff\n" D746 2 I747 2 " srl %1,16\n" "0: tml %1,0x00ff\n" D750 2 I751 2 " srl %1,8\n" "1: tml %1,0x000f\n" D754 2 I755 2 " srl %1,4\n" "2: tml %1,0x0003\n" D758 2 I759 2 " srl %1,2\n" "3: tml %1,0x0001\n" D763 1 I763 1 : "=&d" (r), "+d" (x) : : "cc" ); D795 1 I795 1 unsigned long res, cmp, count; D799 4 I802 4 __asm__(" lghi %1,-1\n" " lgr %2,%3\n" " aghi %2,63\n" " srlg %2,%2,6\n" D804 1 I804 1 "0: clg %1,0(%0,%4)\n" D807 2 I808 2 " brct %2,0b\n" " lgr %0,%3\n" D810 1 I810 1 "1: cl %1,0(%0,%4)\n" D813 1 I813 1 "2: l %2,0(%0,%4)\n" D816 2 I817 2 " lghi %1,0xff\n" " tmlh %2,0xffff\n" D820 2 I821 2 " srl %2,16\n" "3: tmll %2,0xff00\n" D824 4 I827 4 " srl %2,8\n" "4: ngr %2,%1\n" " ic %2,0(%2,%5)\n" " algr %0,%2\n" D829 2 I830 2 : "=&a" (res), "=&d" (cmp), "=&a" (count) : "a" (size), "a" (vaddr), "a" (&_zb_findmap) : "cc" ); D839 1 I839 1 unsigned long word, reg; D851 3 I853 2 __asm__(" lghi %2,0xff\n" " tmll %1,0xffff\n" D856 2 I857 2 " srlg %1,%1,16\n" "0: tmll %1,0xffff\n" D860 2 I861 2 " srlg %1,%1,16\n" "1: tmll %1,0xffff\n" D864 2 I865 2 " srl %1,16\n" "2: tmll %1,0x00ff\n" D868 7 I874 6 " srl %1,8\n" "3: ngr %1,%2\n" " ic %1,0(%1,%3)\n" " alr %0,%1" : "+&d" (res), "+a" (word), "=&d" (reg) : "a" (&_zb_findmap) : "cc" ); == include/asm-s390x/debug.h == patch@athlon.transmeta.com|include/asm-s390x/debug.h|20020205175910|28027|dbde306ec711b6 patch@athlon.transmeta.com|include/asm-s390x/debug.h|20020205202353|31033 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 31985 O -rw-rw-r-- P include/asm-s390x/debug.h ------------------------------------------------ D57 1 I57 1 #define STCK(x) asm volatile ("STCK 0(%0)" : : "a" (&(x)) : "memory", "cc") == include/asm-s390x/ebcdic.h == patch@athlon.transmeta.com|include/asm-s390x/ebcdic.h|20020205175910|28713|5843f6e3b9f8106f patch@athlon.transmeta.com|include/asm-s390x/ebcdic.h|20020205191007|50748 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +2 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 50744 O -rw-rw-r-- P include/asm-s390x/ebcdic.h ------------------------------------------------ D27 1 I27 1 if (nr-- <= 0) D37 1 I37 1 : "+&a" (addr), "+&a" (nr) == include/asm-s390x/ide.h == patch@athlon.transmeta.com|include/asm-s390x/ide.h|20020205175910|30166|9ccc64d78f5b2ee patch@athlon.transmeta.com|include/asm-s390x/ide.h|20020205175911|41545 D 1.2 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +13 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 1123 O -rw-rw-r-- P include/asm-s390x/ide.h ------------------------------------------------ D29 1 I29 13 } select_t; \ typedef union { unsigned all : 8; /* all of the bits together */ struct { unsigned bit0 : 1; unsigned nIEN : 1; /* device INTRQ to host */ unsigned SRST : 1; /* host soft reset bit */ unsigned bit3 : 1; /* ATA-2 thingy */ unsigned reserved456 : 3; unsigned HOB : 1; /* 48-bit address ordering */ } b; } control_t; == include/asm-s390x/irq.h == patch@athlon.transmeta.com|include/asm-s390x/irq.h|20020205175910|31437|912d8420d0188c17 patch@athlon.transmeta.com|include/asm-s390x/irq.h|20020205203242|51276 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +0 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 44372 O -rw-rw-r-- P include/asm-s390x/irq.h ------------------------------------------------ D633 5 == include/asm-s390x/lowcore.h == patch@athlon.transmeta.com|include/asm-s390x/lowcore.h|20020205175910|31901|47bd98f3de92023c patch@athlon.transmeta.com|include/asm-s390x/lowcore.h|20020205223624|36940 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +5 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 37392 O -rw-rw-r-- P include/asm-s390x/lowcore.h ------------------------------------------------ D65 1 I65 1 #define _USER_PSW_MASK 0x0705C00180000000 D203 2 I204 2 #define get_cpu_lowcore(cpu) (&S390_lowcore) #define safe_get_cpu_lowcore(cpu) (&S390_lowcore) D206 1 I206 1 #define get_cpu_lowcore(cpu) (lowcore_ptr[(cpu)]) D208 1 I208 1 ((cpu) == smp_processor_id() ? &S390_lowcore : lowcore_ptr[(cpu)]) == include/asm-s390x/pgtable.h == patch@athlon.transmeta.com|include/asm-s390x/pgtable.h|20020205175910|34414|d2bd9bf2a4d35e55 patch@plucky.distro.conectiva|include/asm-s390x/pgtable.h|20020313233123|34522 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 40270 O -rw-rw-r-- P include/asm-s390x/pgtable.h ------------------------------------------------ I40 1 #define flush_icache_user_range(vma,pg,adr,len) do { } while (0) == include/asm-s390x/processor.h == patch@athlon.transmeta.com|include/asm-s390x/processor.h|20020205175910|00582|eba1ddaa80d8b54b patch@athlon.transmeta.com|include/asm-s390x/processor.h|20020205223624|24870 D 1.6 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +39 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 13634 O -rw-rw-r-- P include/asm-s390x/processor.h ------------------------------------------------ D152 2 I153 2 #define __KSTK_PTREGS(tsk) ((struct pt_regs *) \ (((unsigned long) tsk + THREAD_SIZE - sizeof(struct pt_regs)) & -8L)) I182 37 \ /* * Set PSW mask to specified value, while leaving the * PSW addr pointing to the next instruction. */ \ static inline void __load_psw_mask (unsigned long mask) { unsigned long addr; \ psw_t psw; psw.mask = mask; \ asm volatile ( " larl %0,1f\n" " stg %0,8(%1)\n" " lpswe 0(%1)\n" "1:" : "=&d" (addr) : "a" (&psw) : "memory", "cc" ); } \ /* * Function to stop a processor until an interruption occured */ static inline void enabled_wait(void) { unsigned long reg; psw_t wait_psw; \ wait_psw.mask = 0x0706000180000000; asm volatile ( " larl %0,0f\n" " stg %0,8(%1)\n" " lpswe 0(%1)\n" "0:" : "=&a" (reg) : "a" (&wait_psw) : "memory", "cc" ); } == include/asm-s390x/ptrace.h == patch@athlon.transmeta.com|include/asm-s390x/ptrace.h|20020205175911|00812|68970fdc43a61ef patch@athlon.transmeta.com|include/asm-s390x/ptrace.h|20020205223624|04798 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 3554 O -rw-rw-r-- P include/asm-s390x/ptrace.h ------------------------------------------------ D157 1 == include/asm-s390x/siginfo.h == patch@athlon.transmeta.com|include/asm-s390x/siginfo.h|20020205175911|04557|792fe067ea9063c2 patch@athlon.transmeta.com|include/asm-s390x/siginfo.h|20020205223624|07117 D 1.3 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 11229 O -rw-rw-r-- P include/asm-s390x/siginfo.h ------------------------------------------------ I117 1 #define SI_TKILL -6 /* sent by tkill system call */ == include/asm-s390x/sigp.h == patch@athlon.transmeta.com|include/asm-s390x/sigp.h|20020205175911|05007|37a8f284521230d5 patch@athlon.transmeta.com|include/asm-s390x/sigp.h|20020205202353|30956 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 31198 O -rw-rw-r-- P include/asm-s390x/sigp.h ------------------------------------------------ D133 1 I133 1 #endif /* __SIGP__ */ == include/asm-s390x/spinlock.h == patch@athlon.transmeta.com|include/asm-s390x/spinlock.h|20020205175911|06294|d767987c3ccbee25 patch@athlon.transmeta.com|include/asm-s390x/spinlock.h|20020205203242|61522 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +11 -9 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 1529 O -rw-rw-r-- P include/asm-s390x/spinlock.h ------------------------------------------------ D32 1 I32 2 unsigned long reg1, reg2; __asm__ __volatile(" bras %1,1f\n" D34 2 I35 2 "1: slr %0,%0\n" " cs %0,%1,0(%2)\n" D37 1 I37 2 : "=&d" (reg1), "=&d" (reg2) : "a" (&lp->lock) : "cc", "memory" ); D42 1 I42 1 unsigned int result, reg; D44 4 I47 4 " basr %1,0\n" "0: cs %0,%1,0(%2)" : "=&d" (result), "=&d" (reg) : "a" (&lp->lock) : "cc", "memory" ); == include/asm-s390x/system.h == patch@athlon.transmeta.com|include/asm-s390x/system.h|20020205175911|07171|b7f27bfadeeb63f patch@athlon.transmeta.com|include/asm-s390x/system.h|20020205191453|11714 D 1.4 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +7 -8 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 9404 O -rw-rw-r-- P include/asm-s390x/system.h ------------------------------------------------ I14 1 #include D26 1 I26 1 last = resume(prev,next); \ D113 2 D147 1 I147 1 "stosm 0(%0),0x03" : : "a" (&dummy) : "memory"); \ D153 1 I153 1 "stnsm 0(%0),0xFC" : : "a" (&flags) : "memory"); \ D158 1 I158 1 __asm__ __volatile__("stosm 0(%0),0" : : "a" (&x) : "memory") D161 1 I161 1 __asm__ __volatile__("ssm 0(%0)" : : "a" (&x) : "memory") D164 1 I164 1 __asm__ __volatile__("lpswe 0(%0)" : : "a" (&psw) : "cc" ); == include/asm-s390x/timex.h == patch@athlon.transmeta.com|include/asm-s390x/timex.h|20020205175911|07902|1ac5b9d7a670341 patch@athlon.transmeta.com|include/asm-s390x/timex.h|20020205223624|59630 D 1.3 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +9 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 7672 O -rw-rw-r-- P include/asm-s390x/timex.h ------------------------------------------------ D28 1 I28 1 __asm__("stck 0(%0)" : : "a" (&(cycles)) : "memory", "cc"); I29 8 } \ static inline unsigned long long get_clock (void) { unsigned long long clock; \ __asm__("stck 0(%0)" : : "a" (&(clock)) : "memory", "cc"); return clock; == include/asm-s390x/unistd.h == patch@athlon.transmeta.com|include/asm-s390x/unistd.h|20020205175911|09322|e11686f6c1dd62a5 patch@athlon.transmeta.com|include/asm-s390x/unistd.h|20020205202353|54442 D 1.5 02/03/11 11:13:30-03:00 patch@plucky.distro.conectiva +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206864 K 58533 O -rw-rw-r-- P include/asm-s390x/unistd.h ------------------------------------------------ I183 2 #define __NR_gettid 226 #define __NR_tkill 227 == include/linux/reiserfs_fs.h == patch@athlon.transmeta.com|include/linux/reiserfs_fs.h|20020205175033|01657|b34c33bb40399685 patch@plucky.distro.conectiva|include/linux/reiserfs_fs.h|20020313220407|27820 D 1.16 02/03/11 11:13:31-03:00 patch@plucky.distro.conectiva +60 -13 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 55878 O -rw-rw-r-- P include/linux/reiserfs_fs.h ------------------------------------------------ D207 1 I207 9 // // there are 5 item types currently // #define TYPE_STAT_DATA 0 #define TYPE_INDIRECT 1 #define TYPE_DIRECT 2 #define TYPE_DIRENTRY 3 #define TYPE_MAXTYPE 3 #define TYPE_ANY 15 // FIXME: comment is required D243 1 I243 1 return (tmp.offset_v2.k_type <= TYPE_MAXTYPE)?tmp.offset_v2.k_type:TYPE_ANY; D393 9 I720 30 #include \ /* inode flags stored in sd_attrs (nee sd_reserved) */ \ /* we want common flags to have the same values as in ext2, so chattr(1) will work without problems */ #define REISERFS_IMMUTABLE_FL EXT2_IMMUTABLE_FL #define REISERFS_SYNC_FL EXT2_SYNC_FL #define REISERFS_NOATIME_FL EXT2_NOATIME_FL #define REISERFS_NODUMP_FL EXT2_NODUMP_FL #define REISERFS_SECRM_FL EXT2_SECRM_FL #define REISERFS_UNRM_FL EXT2_UNRM_FL #define REISERFS_COMPR_FL EXT2_COMPR_FL /* persistent flag to disable tails on per-file basic. Note, that is inheritable: mark directory with this and all new files inside will not have tails. \ Teodore Tso allocated EXT2_NODUMP_FL (0x00008000) for this. Change numeric constant to ext2 macro when available. */ #define REISERFS_NOTAIL_FL (0x00008000) /* EXT2_NOTAIL_FL */ \ /* persistent flags that file inherits from the parent directory */ #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ REISERFS_SYNC_FL | \ REISERFS_NOATIME_FL | \ REISERFS_NODUMP_FL | \ REISERFS_SECRM_FL | \ REISERFS_COMPR_FL | \ REISERFS_NOTAIL_FL ) \ D725 1 I725 1 __u16 sd_attrs; /* persistent inode flags */ I777 2 #define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs)) #define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v)) D1368 1 I1368 1 extern struct item_operations * item_ops [TYPE_ANY + 1]; I1703 3 void sd_attrs_to_i_attrs( __u16 sd_attrs, struct inode *inode ); void i_attrs_to_sd_attrs( struct inode *inode, __u16 *sd_attrs ); \ I1794 1 #ifdef CONFIG_REISERFS_CHECK I1796 5 #else #define reiserfs_kmalloc(x, y, z) kmalloc(x, y) #define reiserfs_kfree(x, y, z) kfree(x) #endif \ I1826 1 char * reiserfs_hashname(int code); I1920 6 /* define following flags to be the same as in ext2, so that chattr(1), lsattr(1) will work with us. */ #define REISERFS_IOC_GETFLAGS EXT2_IOC_GETFLAGS #define REISERFS_IOC_SETFLAGS EXT2_IOC_SETFLAGS #define REISERFS_IOC_GETVERSION EXT2_IOC_GETVERSION #define REISERFS_IOC_SETVERSION EXT2_IOC_SETVERSION == include/linux/reiserfs_fs_i.h == patch@athlon.transmeta.com|include/linux/reiserfs_fs_i.h|20020205175033|02042|f1f0dcbd1fe52d99 patch@athlon.transmeta.com|include/linux/reiserfs_fs_i.h|20020205223443|12708 D 1.6 02/03/11 11:13:31-03:00 patch@plucky.distro.conectiva +3 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 19292 O -rw-rw-r-- P include/linux/reiserfs_fs_i.h ------------------------------------------------ I35 3 /* copy of persistent inode flags read from sd_attrs. */ __u32 i_attrs; \ == include/linux/reiserfs_fs_sb.h == patch@athlon.transmeta.com|include/linux/reiserfs_fs_sb.h|20020205175033|02238|f7bb33c694e42a8d patch@plucky.distro.conectiva|include/linux/reiserfs_fs_sb.h|20020313220408|24209 D 1.10 02/03/11 11:13:31-03:00 patch@plucky.distro.conectiva +20 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 24664 O -rw-rw-r-- P include/linux/reiserfs_fs_sb.h ------------------------------------------------ D64 1 I64 7 __u32 s_flags; /* Right now used only by inode-attributes, if enabled */ unsigned char s_uuid[16]; /* filesystem unique identifier */ unsigned char s_label[16]; /* filesystem volume label */ char s_unused[88] ; /* zero filled by mkreiserfs and * reiserfs_convert_objectid_map_v1() * so any additions must be updated * there as well. */ I66 4 typedef enum { reiserfs_attrs_cleared = 0x00000001, } reiserfs_super_block_flags; \ I332 6 stat_cnt_t insert_item_restarted; stat_cnt_t paste_into_item_restarted; stat_cnt_t cut_from_item_restarted; stat_cnt_t delete_solid_item_restarted; stat_cnt_t delete_item_restarted; \ I474 2 #define REISERFS_ATTRS (15) \ I486 1 #define reiserfs_attrs(s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_ATTRS)) == Documentation/networking/3c359.txt == New file: Documentation/networking/3c359.txt V 4 patch@plucky.distro.conectiva|Documentation/networking/3c359.txt|20020313234105|06686|2e17002288c4a2f D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/Documentation/networking/3c359.txt K 6686 P Documentation/networking/3c359.txt R 2e17002288c4a2f X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|Documentation/networking/3c359.txt|20020313234105|06686|2e17002288c4a2f D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +58 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 18384 O -rw-rw-r-- P Documentation/networking/3c359.txt ------------------------------------------------ I0 58 \ 3COM PCI TOKEN LINK VELOCITY XL TOKEN RING CARDS README \ Release 0.9.0 - Release Jul 17th 2000 Mike Phillips \ 1.2.0 - Final Feb 17th 2002 Mike Phillips Updated for submission to the 2.4.x kernel. \ Thanks: Terry Murphy from 3Com for tech docs and support, Adam D. Ligas for testing the driver. Note: This driver will NOT work with the 3C339 Token Ring cards, you need to use the tms380 driver instead. \ 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 open at the same speed as its last opening. This can be hazardous if this speed does not match the speed you want the ring to operate at. \ 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 debuging messages on, that must be done by modified the source code. \ 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. \ 2/17/02 Mike Phillips \ == Documentation/networking/ppp_generic.txt == New file: Documentation/networking/ppp_generic.txt V 4 patch@plucky.distro.conectiva|Documentation/networking/ppp_generic.txt|20020313234105|07478|9bc9c97ffbc4a153 D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/Documentation/networking/ppp_generic.txt K 7478 P Documentation/networking/ppp_generic.txt R 9bc9c97ffbc4a153 X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|Documentation/networking/ppp_generic.txt|20020313234105|07478|9bc9c97ffbc4a153 D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +432 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 25960 O -rw-rw-r-- P Documentation/networking/ppp_generic.txt ------------------------------------------------ I0 432 PPP Generic Driver and Channel Interface ---------------------------------------- \ Paul Mackerras paulus@samba.org 7 Feb 2002 \ The generic PPP driver in linux-2.4 provides an implementation of the functionality which is of use in any PPP implementation, including: \ * the network interface unit (ppp0 etc.) * the interface to the networking code * PPP multilink: splitting datagrams between multiple links, and ordering and combining received fragments * the interface to pppd, via a /dev/ppp character device * packet compression and decompression * TCP/IP header compression and decompression * detecting network traffic for demand dialling and for idle timeouts * simple packet filtering \ For sending and receiving PPP frames, the generic PPP driver calls on the services of PPP `channels'. A PPP channel encapsulates a mechanism for transporting PPP frames from one machine to another. A PPP channel implementation can be arbitrarily complex internally but has a very simple interface with the generic PPP code: it merely has to be able to send PPP frames, receive PPP frames, and optionally handle ioctl requests. Currently there are PPP channel implementations for asynchronous serial ports, synchronous serial ports, and for PPP over ethernet. \ This architecture makes it possible to implement PPP multilink in a natural and straightforward way, by allowing more than one channel to be linked to each ppp network interface unit. The generic layer is responsible for splitting datagrams on transmit and recombining them on receive. \ \ PPP channel API --------------- \ See include/linux/ppp_channel.h for the declaration of the types and functions used to communicate between the generic PPP layer and PPP channels. \ Each channel has to provide two functions to the generic PPP layer, via the ppp_channel.ops pointer: \ * start_xmit() is called by the generic layer when it has a frame to send. The channel has the option of rejecting the frame for flow-control reasons. In this case, start_xmit() should return 0 and the channel should call the ppp_output_wakeup() function at a later time when it can accept frames again, and the generic layer will then attempt to retransmit the rejected frame(s). If the frame is accepted, the start_xmit() function should return 1. \ * ioctl() provides an interface which can be used by a user-space program to control aspects of the channel's behaviour. This procedure will be called when a user-space program does an ioctl system call on an instance of /dev/ppp which is bound to the channel. (Usually it would only be pppd which would do this.) \ The generic PPP layer provides seven functions to channels: \ * ppp_register_channel() is called when a channel has been created, to notify the PPP generic layer of its presence. For example, setting a serial port to the PPPDISC line discipline causes the ppp_async channel code to call this function. \ * ppp_unregister_channel() is called when a channel is to be destroyed. For example, the ppp_async channel code calls this when a hangup is detected on the serial port. \ * ppp_output_wakeup() is called by a channel when it has previously rejected a call to its start_xmit function, and can now accept more packets. \ * ppp_input() is called by a channel when it has received a complete PPP frame. \ * ppp_input_error() is called by a channel when it has detected that a frame has been lost or dropped (for example, because of a FCS (frame check sequence) error). \ * ppp_channel_index() returns the channel index assigned by the PPP generic layer to this channel. The channel should provide some way (e.g. an ioctl) to transmit this back to user-space, as user-space will need it to attach an instance of /dev/ppp to this channel. \ * ppp_unit_number() returns the unit number of the ppp network interface to which this channel is connected, or -1 if the channel is not connected. \ Connecting a channel to the ppp generic layer is initiated from the channel code, rather than from the generic layer. The channel is expected to have some way for a user-level process to control it independently of the ppp generic layer. For example, with the ppp_async channel, this is provided by the file descriptor to the serial port. \ Generally a user-level process will initialize the underlying communications medium and prepare it to do PPP. For example, with an async tty, this can involve setting the tty speed and modes, issuing modem commands, and then going through some sort of dialog with the remote system to invoke PPP service there. We refer to this process as `discovery'. Then the user-level process tells the medium to become a PPP channel and register itself with the generic PPP layer. The channel then has to report the channel number assigned to it back to the user-level process. From that point, the PPP negotiation code in the PPP daemon (pppd) can take over and perform the PPP negotiation, accessing the channel through the /dev/ppp interface. \ At the interface to the PPP generic layer, PPP frames are stored in skbuff structures and start with the two-byte PPP protocol number. The frame does *not* include the 0xff `address' byte or the 0x03 `control' byte that are optionally used in async PPP. Nor is there any escaping of control characters, nor are there any FCS or framing characters included. That is all the responsibility of the channel code, if it is needed for the particular medium. That is, the skbuffs presented to the start_xmit() function contain only the 2-byte protocol number and the data, and the skbuffs presented to ppp_input() must be in the same format. \ The channel must provide an instance of a ppp_channel struct to represent the channel. The channel is free to use the `private' field however it wishes. The channel should initialize the `mtu' and `hdrlen' fields before calling ppp_register_channel() and not change them until after ppp_unregister_channel() returns. The `mtu' field represents the maximum size of the data part of the PPP frames, that is, it does not include the 2-byte protocol number. \ If the channel needs some headroom in the skbuffs presented to it for transmission (i.e., some space free in the skbuff data area before the start of the PPP frame), it should set the `hdrlen' field of the ppp_channel struct to the amount of headroom required. The generic PPP layer will attempt to provide that much headroom but the channel should still check if there is sufficient headroom and copy the skbuff if there isn't. \ On the input side, channels should ideally provide at least 2 bytes of headroom in the skbuffs presented to ppp_input(). The generic PPP code does not require this but will be more efficient if this is done. \ \ Buffering and flow control -------------------------- \ The generic PPP layer has been designed to minimize the amount of data that it buffers in the transmit direction. It maintains a queue of transmit packets for the PPP unit (network interface device) plus a queue of transmit packets for each attached channel. Normally the transmit queue for the unit will contain at most one packet; the exceptions are when pppd sends packets by writing to /dev/ppp, and when the core networking code calls the generic layer's start_xmit() function with the queue stopped, i.e. when the generic layer has called netif_stop_queue(), which only happens on a transmit timeout. The start_xmit function always accepts and queues the packet which it is asked to transmit. \ Transmit packets are dequeued from the PPP unit transmit queue and then subjected to TCP/IP header compression and packet compression (Deflate or BSD-Compress compression), as appropriate. After this point the packets can no longer be reordered, as the decompression algorithms rely on receiving compressed packets in the same order that they were generated. \ If multilink is not in use, this packet is then passed to the attached channel's start_xmit() function. If the channel refuses to take the packet, the generic layer saves it for later transmission. The generic layer will call the channel's start_xmit() function again when the channel calls ppp_output_wakeup() or when the core networking code calls the generic layer's start_xmit() function again. The generic layer contains no timeout and retransmission logic; it relies on the core networking code for that. \ If multilink is in use, the generic layer divides the packet into one or more fragments and puts a multilink header on each fragment. It decides how many fragments to use based on the length of the packet and the number of channels which are potentially able to accept a fragment at the moment. A channel is potentially able to accept a fragment if it doesn't have any fragments currently queued up for it to transmit. The channel may still refuse a fragment; in this case the fragment is queued up for the channel to transmit later. This scheme has the effect that more fragments are given to higher- bandwidth channels. It also means that under light load, the generic layer will tend to fragment large packets across all the channels, thus reducing latency, while under heavy load, packets will tend to be transmitted as single fragments, thus reducing the overhead of fragmentation. \ \ SMP safety ---------- \ The PPP generic layer has been designed to be SMP-safe. Locks are used around accesses to the internal data structures where necessary to ensure their integrity. As part of this, the generic layer requires that the channels adhere to certain requirements and in turn provides certain guarantees to the channels. Essentially the channels are required to provide the appropriate locking on the ppp_channel structures that form the basis of the communication between the channel and the generic layer. This is because the channel provides the storage for the ppp_channel structure, and so the channel is required to provide the guarantee that this storage exists and is valid at the appropriate times. \ The generic layer requires these guarantees from the channel: \ * The ppp_channel object must exist from the time that ppp_register_channel() is called until after the call to ppp_unregister_channel() returns. \ * No thread may be in a call to any of ppp_input(), ppp_input_error(), ppp_output_wakeup(), ppp_channel_index() or ppp_unit_number() for a channel at the time that ppp_unregister_channel() is called for that channel. \ * ppp_register_channel() and ppp_unregister_channel() must be called from process context, not interrupt or softirq/BH context. \ * The remaining generic layer functions may be called at softirq/BH level but must not be called from a hardware interrupt handler. \ * The generic layer may call the channel start_xmit() function at softirq/BH level but will not call it at interrupt level. Thus the start_xmit() function may not block. \ * The generic layer will only call the channel ioctl() function in process context. \ The generic layer provides these guarantees to the channels: \ * The generic layer will not call the start_xmit() function for a channel while any thread is already executing in that function for that channel. \ * The generic layer will not call the ioctl() function for a channel while any thread is already executing in that function for that channel. \ * By the time a call to ppp_unregister_channel() returns, no thread will be executing in a call from the generic layer to that channel's start_xmit() or ioctl() function, and the generic layer will not call either of those functions subsequently. \ \ Interface to pppd ----------------- \ The PPP generic layer exports a character device interface called /dev/ppp. This is used by pppd to control PPP interface units and channels. Although there is only one /dev/ppp, each open instance of /dev/ppp acts independently and can be attached either to a PPP unit or a PPP channel. This is achieved using the file->private_data field to point to a separate object for each open instance of /dev/ppp. In this way an effect similar to Solaris' clone open is obtained, allowing us to control an arbitrary number of PPP interfaces and channels without having to fill up /dev with hundreds of device names. \ When /dev/ppp is opened, a new instance is created which is initially unattached. Using an ioctl call, it can then be attached to an existing unit, attached to a newly-created unit, or attached to an existing channel. An instance attached to a unit can be used to send and receive PPP control frames, using the read() and write() system calls, along with poll() if necessary. Similarly, an instance attached to a channel can be used to send and receive PPP frames on that channel. \ In multilink terms, the unit represents the bundle, while the channels represent the individual physical links. Thus, a PPP frame sent by a write to the unit (i.e., to an instance of /dev/ppp attached to the unit) will be subject to bundle-level compression and to fragmentation across the individual links (if multilink is in use). In contrast, a PPP frame sent by a write to the channel will be sent as-is on that channel, without any multilink header. \ A channel is not initially attached to any unit. In this state it can be used for PPP negotiation but not for the transfer of data packets. It can then be connected to a PPP unit with an ioctl call, which makes it available to send and receive data packets for that unit. \ The ioctl calls which are available on an instance of /dev/ppp depend on whether it is unattached, attached to a PPP interface, or attached to a PPP channel. The ioctl calls which are available on an unattached instance are: \ * PPPIOCNEWUNIT creates a new PPP interface and makes this /dev/ppp instance the "owner" of the interface. The argument should point to an int which is the desired unit number if >= 0, or -1 to assign the lowest unused unit number. Being the owner of the interface means that the interface will be shut down if this instance of /dev/ppp is closed. \ * PPPIOCATTACH attaches this instance to an existing PPP interface. The argument should point to an int containing the unit number. This does not make this instance the owner of the PPP interface. \ * PPPIOCATTCHAN attaches this instance to an existing PPP channel. The argument should point to an int containing the channel number. \ The ioctl calls available on an instance of /dev/ppp attached to a channel are: \ * PPPIOCDETACH detaches the instance from the channel. This ioctl is deprecated since the same effect can be achieved by closing the instance. In order to prevent possible races this ioctl will fail with an EINVAL error if more than one file descriptor refers to this instance (i.e. as a result of dup(), dup2() or fork()). \ * PPPIOCCONNECT connects this channel to a PPP interface. The argument should point to an int containing the interface unit number. It will return an EINVAL error if the channel is already connected to an interface, or ENXIO if the requested interface does not exist. \ * PPPIOCDISCONN disconnects this channel from the PPP interface that it is connected to. It will return an EINVAL error if the channel is not connected to an interface. \ * All other ioctl commands are passed to the channel ioctl() function. \ The ioctl calls that are available on an instance that is attached to an interface unit are: \ * PPPIOCSMRU sets the MRU (maximum receive unit) for the interface. The argument should point to an int containing the new MRU value. \ * PPPIOCSFLAGS sets flags which control the operation of the interface. The argument should be a pointer to an int containing the new flags value. The bits in the flags value that can be set are: SC_COMP_TCP enable transmit TCP header compression SC_NO_TCP_CCID disable connection-id compression for TCP header compression SC_REJ_COMP_TCP disable receive TCP header decompression SC_CCP_OPEN Compression Control Protocol (CCP) is open, so inspect CCP packets SC_CCP_UP CCP is up, may (de)compress packets SC_LOOP_TRAFFIC send IP traffic to pppd SC_MULTILINK enable PPP multilink fragmentation on transmitted packets SC_MP_SHORTSEQ expect short multilink sequence numbers on received multilink fragments SC_MP_XSHORTSEQ transmit short multilink sequence nos. \ The values of these flags are defined in . Note that the values of the SC_MULTILINK, SC_MP_SHORTSEQ and SC_MP_XSHORTSEQ bits are ignored if the CONFIG_PPP_MULTILINK option is not selected. \ * PPPIOCGFLAGS returns the value of the status/control flags for the interface unit. The argument should point to an int where the ioctl will store the flags value. As well as the values listed above for PPPIOCSFLAGS, the following bits may be set in the returned value: SC_COMP_RUN CCP compressor is running SC_DECOMP_RUN CCP decompressor is running SC_DC_ERROR CCP decompressor detected non-fatal error SC_DC_FERROR CCP decompressor detected fatal error \ * PPPIOCSCOMPRESS sets the parameters for packet compression or decompression. The argument should point to a ppp_option_data structure (defined in ), which contains a pointer/length pair which should describe a block of memory containing a CCP option specifying a compression method and its parameters. The ppp_option_data struct also contains a `transmit' field. If this is 0, the ioctl will affect the receive path, otherwise the transmit path. \ * PPPIOCGUNIT returns, in the int pointed to by the argument, the unit number of this interface unit. \ * PPPIOCSDEBUG sets the debug flags for the interface to the value in the int pointed to by the argument. Only the least significant bit is used; if this is 1 the generic layer will print some debug messages during its operation. This is only intended for debugging the generic PPP layer code; it is generally not helpful for working out why a PPP connection is failing. \ * PPPIOCGDEBUG returns the debug flags for the interface in the int pointed to by the argument. \ * PPPIOCGIDLE returns the time, in seconds, since the last data packets were sent and received. The argument should point to a ppp_idle structure (defined in ). If the CONFIG_PPP_FILTER option is enabled, the set of packets which reset the transmit and receive idle timers is restricted to those which pass the `active' packet filter. \ * PPPIOCSMAXCID sets the maximum connection-ID parameter (and thus the number of connection slots) for the TCP header compressor and decompressor. The lower 16 bits of the int pointed to by the argument specify the maximum connection-ID for the compressor. If the upper 16 bits of that int are non-zero, they specify the maximum connection-ID for the decompressor, otherwise the decompressor's maximum connection-ID is set to 15. \ * PPPIOCSNPMODE sets the network-protocol mode for a given network protocol. The argument should point to an npioctl struct (defined in ). The `protocol' field gives the PPP protocol number for the protocol to be affected, and the `mode' field specifies what to do with packets for that protocol: \ NPMODE_PASS normal operation, transmit and receive packets NPMODE_DROP silently drop packets for this protocol NPMODE_ERROR drop packets and return an error on transmit NPMODE_QUEUE queue up packets for transmit, drop received packets \ At present NPMODE_ERROR and NPMODE_QUEUE have the same effect as NPMODE_DROP. \ * PPPIOCGNPMODE returns the network-protocol mode for a given protocol. The argument should point to an npioctl struct with the `protocol' field set to the PPP protocol number for the protocol of interest. On return the `mode' field will be set to the network- protocol mode for that protocol. \ * PPPIOCSPASS and PPPIOCSACTIVE set the `pass' and `active' packet filters. These ioctls are only available if the CONFIG_PPP_FILTER option is selected. The argument should point to a sock_fprog structure (defined in ) containing the compiled BPF instructions for the filter. Packets are dropped if they fail the `pass' filter; otherwise, if they fail the `active' filter they are passed but they do not reset the transmit or receive idle timer. \ * PPPIOCSMRRU enables or disables multilink processing for received packets and sets the multilink MRRU (maximum reconstructed receive unit). The argument should point to an int containing the new MRRU value. If the MRRU value is 0, processing of received multilink fragments is disabled. This ioctl is only available if the CONFIG_PPP_MULTILINK option is selected. \ Last modified: 7-feb-2002 == Documentation/usb/auerswald.txt == New file: Documentation/usb/auerswald.txt V 4 patch@plucky.distro.conectiva|Documentation/usb/auerswald.txt|20020313234105|07778|3462da5c642ce3f7 D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/Documentation/usb/auerswald.txt K 7778 P Documentation/usb/auerswald.txt R 3462da5c642ce3f7 X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|Documentation/usb/auerswald.txt|20020313234105|07778|3462da5c642ce3f7 D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +30 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 12944 O -rw-rw-r-- P Documentation/usb/auerswald.txt ------------------------------------------------ I0 30 Auerswald USB kernel driver =========================== \ What is it? What can I do with it? ================================== The auerswald USB kernel driver connects your linux 2.4.x system to the auerswald usb-enabled devices. \ There are two types of auerswald usb devices: a) small PBX systems (ISDN) b) COMfort system telephones (ISDN) \ The driver installation creates the devices /dev/usb/auer0..15. These devices carry a vendor- specific protocol. You may run all auerswald java software on it. The java software needs a native library "libAuerUsbJNINative.so" installed on your system. This library is available from auerswald and shipped as part of the java software. \ You may create the devices with: mknod -m 666 /dev/usb/auer0 c 180 112 ... mknod -m 666 /dev/usb/auer15 c 180 127 \ Future plans ============ - Connection to ISDN4LINUX (the hisax interface) \ The maintainer of this driver is wmues@nexgo.de == Documentation/watchdog-api.txt == patch@plucky.distro.conectiva|Documentation/watchdog-api.txt|20020313233106|12165|bd2bb6f5d72aa80f patch@plucky.distro.conectiva|Documentation/watchdog-api.txt|20020313233107|43175 D 1.2 02/03/11 11:13:25-03:00 patch@plucky.distro.conectiva +48 -23 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 16401 O -rw-rw-r-- P Documentation/watchdog-api.txt ------------------------------------------------ D72 3 I74 1 All conforming drivers also support an ioctl API. D114 1 I114 1 All watchdog drivers are required return more information about the system, D116 1 I116 1 the reason for the last reboot of the system. The GETSUPPORT ioctl is I132 4 \ The machine was last rebooted by the watchdog because the thermal limit was exceeded \ I133 3 \ A system fan monitored by the watchdog card has failed \ I134 5 \ External monitoring relay/source 1 was triggered. Controllers intended for real world applications include external monitoring pins that will trigger a reset. \ I135 3 \ External monitoring relay/source 2 was triggered \ I136 3 \ The machine is showing an undervoltage status \ I137 3 \ The last reboot was caused by the watchdog card \ I138 5 \ The machine is showing an overvoltage status. Note that if one level is under and one over both bits will be set - this may seem odd but makes sense. \ I139 3 \ The watchdog saw a keepalive ping since it was last queried. \ D142 2 D222 1 I222 1 Also has support for a lot of other i8x0 stuff, but the I294 12 scx200.c -- National SCx200 CPUs \ Not in the kernel yet. \ The timeout is set using a module parameter "margin" which defaults to 60 seconds. The timeout can also be set using SETTIMEOUT and read using GETTIMEOUT. \ Supports a module parameter "nowayout" that is initialized with the value of CONFIG_WATCHDOG_NOWAYOUT. Also supports the magic character 'V' handling. \ D332 4 I335 3 GETSUPPORT returns with bits set depending on the actual card. The WDT501 supports a lot of external monitoring, the WDT500 much less. D355 11 == arch/s390/boot/install.sh == New file: arch/s390/boot/install.sh V 4 patch@plucky.distro.conectiva|arch/s390/boot/install.sh|20020313234105|07902|50f3f186416ca37a D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/arch/s390/boot/install.sh K 7902 P arch/s390/boot/install.sh R 50f3f186416ca37a X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|arch/s390/boot/install.sh|20020313234105|07902|50f3f186416ca37a D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +38 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 8854 O -rw-rw-r-- P arch/s390/boot/install.sh ------------------------------------------------ I0 38 #!/bin/sh # # arch/s390x/boot/install.sh # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. # # Copyright (C) 1995 by Linus Torvalds # # Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin # # "make install" script for s390 architecture # # Arguments: # $1 - kernel version # $2 - kernel image file # $3 - kernel map file # $4 - default install path (blank if root directory) # \ # User may have a custom install script \ if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi if [ -x /sbin/installkernel ]; then exec /sbin/installkernel "$@"; fi \ # Default install - same as make zlilo \ if [ -f $4/vmlinuz ]; then mv $4/vmlinuz $4/vmlinuz.old fi \ if [ -f $4/System.map ]; then mv $4/System.map $4/System.old fi \ cat $2 > $4/vmlinuz cp $3 $4/System.map == arch/s390/kernel/asm-offsets.c == New file: arch/s390/kernel/asm-offsets.c V 4 patch@plucky.distro.conectiva|arch/s390/kernel/asm-offsets.c|20020313234105|08033|289aad19b8b7eb51 D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/arch/s390/kernel/asm-offsets.c K 8033 P arch/s390/kernel/asm-offsets.c R 289aad19b8b7eb51 X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|arch/s390/kernel/asm-offsets.c|20020313234105|08033|289aad19b8b7eb51 D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +32 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 26148 O -rw-rw-r-- P arch/s390/kernel/asm-offsets.c ------------------------------------------------ I0 32 /* * Generate definitions needed by assembly language modules. * This code generates raw asm output which is post-processed to extract * and format the required data. */ \ #include #include \ /* Use marker if you need to separate the values later */ \ #define DEFINE(sym, val, marker) \ asm volatile("\n->" #sym " %0 " #val " " #marker : : "i" (val)) \ #define BLANK() asm volatile("\n->" : : ) \ int main(void) { DEFINE(__THREAD_ar2, offsetof(struct task_struct, thread.ar2),); DEFINE(__THREAD_ar4, offsetof(struct task_struct, thread.ar4),); DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),); DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),); BLANK(); DEFINE(__TASK_state, offsetof(struct task_struct, state),); DEFINE(__TASK_sigpending, offsetof(struct task_struct, sigpending),); DEFINE(__TASK_need_resched, offsetof(struct task_struct, need_resched),); DEFINE(__TASK_ptrace, offsetof(struct task_struct, ptrace),); DEFINE(__TASK_processor, offsetof(struct task_struct, processor),); \ return 0; } == arch/s390x/boot/install.sh == New file: arch/s390x/boot/install.sh V 4 patch@plucky.distro.conectiva|arch/s390x/boot/install.sh|20020313234105|08159|58c27cf331013d3d D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/arch/s390x/boot/install.sh K 8159 P arch/s390x/boot/install.sh R 58c27cf331013d3d X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|arch/s390x/boot/install.sh|20020313234105|08159|58c27cf331013d3d D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +38 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 8854 O -rw-rw-r-- P arch/s390x/boot/install.sh ------------------------------------------------ I0 38 #!/bin/sh # # arch/s390x/boot/install.sh # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. # # Copyright (C) 1995 by Linus Torvalds # # Adapted from code in arch/i386/boot/Makefile by H. Peter Anvin # # "make install" script for s390 architecture # # Arguments: # $1 - kernel version # $2 - kernel image file # $3 - kernel map file # $4 - default install path (blank if root directory) # \ # User may have a custom install script \ if [ -x ~/bin/installkernel ]; then exec ~/bin/installkernel "$@"; fi if [ -x /sbin/installkernel ]; then exec /sbin/installkernel "$@"; fi \ # Default install - same as make zlilo \ if [ -f $4/vmlinuz ]; then mv $4/vmlinuz $4/vmlinuz.old fi \ if [ -f $4/System.map ]; then mv $4/System.map $4/System.old fi \ cat $2 > $4/vmlinuz cp $3 $4/System.map == arch/s390x/kernel/asm-offsets.c == New file: arch/s390x/kernel/asm-offsets.c V 4 patch@plucky.distro.conectiva|arch/s390x/kernel/asm-offsets.c|20020313234105|08294|ac2e5406e9d341ba D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/arch/s390x/kernel/asm-offsets.c K 8294 P arch/s390x/kernel/asm-offsets.c R ac2e5406e9d341ba X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|arch/s390x/kernel/asm-offsets.c|20020313234105|08294|ac2e5406e9d341ba D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +32 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 26148 O -rw-rw-r-- P arch/s390x/kernel/asm-offsets.c ------------------------------------------------ I0 32 /* * Generate definitions needed by assembly language modules. * This code generates raw asm output which is post-processed to extract * and format the required data. */ \ #include #include \ /* Use marker if you need to separate the values later */ \ #define DEFINE(sym, val, marker) \ asm volatile("\n->" #sym " %0 " #val " " #marker : : "i" (val)) \ #define BLANK() asm volatile("\n->" : : ) \ int main(void) { DEFINE(__THREAD_ar2, offsetof(struct task_struct, thread.ar2),); DEFINE(__THREAD_ar4, offsetof(struct task_struct, thread.ar4),); DEFINE(__THREAD_ksp, offsetof(struct task_struct, thread.ksp),); DEFINE(__THREAD_per, offsetof(struct task_struct, thread.per_info),); BLANK(); DEFINE(__TASK_state, offsetof(struct task_struct, state),); DEFINE(__TASK_sigpending, offsetof(struct task_struct, sigpending),); DEFINE(__TASK_need_resched, offsetof(struct task_struct, need_resched),); DEFINE(__TASK_ptrace, offsetof(struct task_struct, ptrace),); DEFINE(__TASK_processor, offsetof(struct task_struct, processor),); \ return 0; } == drivers/char/serial_txx927.c == patch@plucky.distro.conectiva|drivers/char/serial_txx927.c|20020313233104|05131|f7535fe4e02ee368 patch@plucky.distro.conectiva|drivers/char/serial_txx927.c|20020313233105|64043 D 1.2 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206860 K 63829 O -rw-rw-r-- P drivers/char/serial_txx927.c ------------------------------------------------ D81 1 I81 1 #include == drivers/ide/ide-taskfile.c == New file: drivers/ide/ide-taskfile.c V 4 patch@plucky.distro.conectiva|drivers/ide/ide-taskfile.c|20020313234105|08494|9ffea63beb4fa376 D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/drivers/ide/ide-taskfile.c K 8494 P drivers/ide/ide-taskfile.c R 9ffea63beb4fa376 X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|drivers/ide/ide-taskfile.c|20020313234105|08494|9ffea63beb4fa376 D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +1723 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 18986 O -rw-rw-r-- P drivers/ide/ide-taskfile.c ------------------------------------------------ I0 1723 /* * linux/drivers/ide/ide-taskfile.c Version 0.20 Oct 11, 2000 * * Copyright (C) 2000 Michael Cornwell * Copyright (C) 2000 Andre Hedrick * * May be copied or modified under the terms of the GNU General Public License * * IDE_DEBUG(__LINE__); */ \ #include #define __NO_VERSION__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include \ #include #include #include #include #include \ #ifdef CONFIG_IDE_TASKFILE_IO # define __TASKFILE__IO #else /* CONFIG_IDE_TASKFILE_IO */ # undef __TASKFILE__IO #endif /* CONFIG_IDE_TASKFILE_IO */ \ #define DEBUG_TASKFILE 0 /* unset when fixed */ \ #if DEBUG_TASKFILE #define DTF(x...) printk(##x) #else #define DTF(x...) #endif \ inline u32 task_read_24 (ide_drive_t *drive) { return (IN_BYTE(IDE_HCYL_REG)<<16) | (IN_BYTE(IDE_LCYL_REG)<<8) | IN_BYTE(IDE_SECTOR_REG); } \ static void ata_bswap_data (void *buffer, int wcount) { u16 *p = buffer; \ while (wcount--) { *p = *p << 8 | *p >> 8; p++; *p = *p << 8 | *p >> 8; p++; } } \ #if SUPPORT_VLB_SYNC /* * Some localbus EIDE interfaces require a special access sequence * when using 32-bit I/O instructions to transfer data. We call this * the "vlb_sync" sequence, which consists of three successive reads * of the sector count register location, with interrupts disabled * to ensure that the reads all happen together. */ static inline void task_vlb_sync (ide_ioreg_t port) { (void) inb (port); (void) inb (port); (void) inb (port); } #endif /* SUPPORT_VLB_SYNC */ \ /* * This is used for most PIO data transfers *from* the IDE interface */ void ata_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { byte io_32bit = drive->io_32bit; \ if (io_32bit) { #if SUPPORT_VLB_SYNC if (io_32bit & 2) { unsigned long flags; __save_flags(flags); /* local CPU only */ __cli(); /* local CPU only */ task_vlb_sync(IDE_NSECTOR_REG); insl(IDE_DATA_REG, buffer, wcount); __restore_flags(flags); /* local CPU only */ } else #endif /* SUPPORT_VLB_SYNC */ insl(IDE_DATA_REG, buffer, wcount); } else { #if SUPPORT_SLOW_DATA_PORTS if (drive->slow) { unsigned short *ptr = (unsigned short *) buffer; while (wcount--) { *ptr++ = inw_p(IDE_DATA_REG); *ptr++ = inw_p(IDE_DATA_REG); } } else #endif /* SUPPORT_SLOW_DATA_PORTS */ insw(IDE_DATA_REG, buffer, wcount<<1); } } \ /* * This is used for most PIO data transfers *to* the IDE interface */ void ata_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { byte io_32bit = drive->io_32bit; \ if (io_32bit) { #if SUPPORT_VLB_SYNC if (io_32bit & 2) { unsigned long flags; __save_flags(flags); /* local CPU only */ __cli(); /* local CPU only */ task_vlb_sync(IDE_NSECTOR_REG); outsl(IDE_DATA_REG, buffer, wcount); __restore_flags(flags); /* local CPU only */ } else #endif /* SUPPORT_VLB_SYNC */ outsl(IDE_DATA_REG, buffer, wcount); } else { #if SUPPORT_SLOW_DATA_PORTS if (drive->slow) { unsigned short *ptr = (unsigned short *) buffer; while (wcount--) { outw_p(*ptr++, IDE_DATA_REG); outw_p(*ptr++, IDE_DATA_REG); } } else #endif /* SUPPORT_SLOW_DATA_PORTS */ outsw(IDE_DATA_REG, buffer, wcount<<1); } } \ \ static inline void taskfile_input_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { ata_input_data(drive, buffer, wcount); if (drive->bswap) ata_bswap_data(buffer, wcount); } \ static inline void taskfile_output_data (ide_drive_t *drive, void *buffer, unsigned int wcount) { if (drive->bswap) { ata_bswap_data(buffer, wcount); ata_output_data(drive, buffer, wcount); ata_bswap_data(buffer, wcount); } else { ata_output_data(drive, buffer, wcount); } } \ ide_startstop_t do_rw_taskfile (ide_drive_t *drive, ide_task_t *task) { task_struct_t *taskfile = (task_struct_t *) task->tfRegister; hob_struct_t *hobfile = (hob_struct_t *) task->hobRegister; struct hd_driveid *id = drive->id; byte HIHI = (drive->addressing) ? 0xE0 : 0xEF; \ /* (ks/hs): Moved to start, do not use for multiple out commands */ if (task->handler != task_mulout_intr) { if (IDE_CONTROL_REG) OUT_BYTE(drive->ctl, IDE_CONTROL_REG); /* clear nIEN */ SELECT_MASK(HWIF(drive), drive, 0); } \ if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { OUT_BYTE(hobfile->feature, IDE_FEATURE_REG); OUT_BYTE(hobfile->sector_count, IDE_NSECTOR_REG); OUT_BYTE(hobfile->sector_number, IDE_SECTOR_REG); OUT_BYTE(hobfile->low_cylinder, IDE_LCYL_REG); OUT_BYTE(hobfile->high_cylinder, IDE_HCYL_REG); } \ OUT_BYTE(taskfile->feature, IDE_FEATURE_REG); OUT_BYTE(taskfile->sector_count, IDE_NSECTOR_REG); /* refers to number of sectors to transfer */ OUT_BYTE(taskfile->sector_number, IDE_SECTOR_REG); /* refers to sector offset or start sector */ OUT_BYTE(taskfile->low_cylinder, IDE_LCYL_REG); OUT_BYTE(taskfile->high_cylinder, IDE_HCYL_REG); \ OUT_BYTE((taskfile->device_head & HIHI) | drive->select.all, IDE_SELECT_REG); if (task->handler != NULL) { #if 0 ide_set_handler (drive, task->handler, WAIT_CMD, NULL); OUT_BYTE(taskfile->command, IDE_COMMAND_REG); /* * warning check for race between handler and prehandler for * writing first block of data. however since we are well * inside the boundaries of the seek, we should be okay. */ if (task->prehandler != NULL) { return task->prehandler(drive, task->rq); } #else ide_startstop_t startstop; \ ide_set_handler (drive, task->handler, WAIT_CMD, NULL); OUT_BYTE(taskfile->command, IDE_COMMAND_REG); \ if (ide_wait_stat(&startstop, drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) { printk(KERN_ERR "%s: no DRQ after issuing %s\n", drive->name, drive->mult_count ? "MULTWRITE" : "WRITE"); return startstop; } /* (ks/hs): Fixed Multi Write */ if ((taskfile->command != WIN_MULTWRITE) && (taskfile->command != WIN_MULTWRITE_EXT)) { struct request *rq = HWGROUP(drive)->rq; /* For Write_sectors we need to stuff the first sector */ taskfile_output_data(drive, rq->buffer, SECTOR_WORDS); rq->current_nr_sectors--; } else { /* Stuff first sector(s) by implicitly calling the handler */ if (!(drive_is_ready(drive))) { /* FIXME: Replace hard-coded 100, error handling? */ int i; for (i=0; i<100; i++) { if (drive_is_ready(drive)) break; } } return task->handler(drive); } #endif } else { /* for dma commands we down set the handler */ if (drive->using_dma && !(HWIF(drive)->dmaproc(((taskfile->command == WIN_WRITEDMA) || (taskfile->command == WIN_WRITEDMA_EXT)) ? ide_dma_write : ide_dma_read, drive))); } \ return ide_started; } \ void do_taskfile (ide_drive_t *drive, struct hd_drive_task_hdr *taskfile, struct hd_drive_hob_hdr *hobfile, ide_handler_t *handler) { struct hd_driveid *id = drive->id; byte HIHI = (drive->addressing) ? 0xE0 : 0xEF; \ /* (ks/hs): Moved to start, do not use for multiple out commands */ if (*handler != task_mulout_intr) { if (IDE_CONTROL_REG) OUT_BYTE(drive->ctl, IDE_CONTROL_REG); /* clear nIEN */ SELECT_MASK(HWIF(drive), drive, 0); } \ if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { OUT_BYTE(hobfile->feature, IDE_FEATURE_REG); OUT_BYTE(hobfile->sector_count, IDE_NSECTOR_REG); OUT_BYTE(hobfile->sector_number, IDE_SECTOR_REG); OUT_BYTE(hobfile->low_cylinder, IDE_LCYL_REG); OUT_BYTE(hobfile->high_cylinder, IDE_HCYL_REG); } \ OUT_BYTE(taskfile->feature, IDE_FEATURE_REG); OUT_BYTE(taskfile->sector_count, IDE_NSECTOR_REG); /* refers to number of sectors to transfer */ OUT_BYTE(taskfile->sector_number, IDE_SECTOR_REG); /* refers to sector offset or start sector */ OUT_BYTE(taskfile->low_cylinder, IDE_LCYL_REG); OUT_BYTE(taskfile->high_cylinder, IDE_HCYL_REG); \ OUT_BYTE((taskfile->device_head & HIHI) | drive->select.all, IDE_SELECT_REG); if (handler != NULL) { ide_set_handler (drive, handler, WAIT_CMD, NULL); OUT_BYTE(taskfile->command, IDE_COMMAND_REG); } else { /* for dma commands we down set the handler */ if (drive->using_dma && !(HWIF(drive)->dmaproc(((taskfile->command == WIN_WRITEDMA) || (taskfile->command == WIN_WRITEDMA_EXT)) ? ide_dma_write : ide_dma_read, drive))); } } \ #if 0 ide_startstop_t flagged_taskfile (ide_drive_t *drive, ide_task_t *task) { task_struct_t *taskfile = (task_struct_t *) task->tfRegister; hob_struct_t *hobfile = (hob_struct_t *) task->hobRegister; struct hd_driveid *id = drive->id; \ /* * (KS) Check taskfile in/out flags. * If set, then execute as it is defined. * If not set, then define default settings. * The default values are: * write and read all taskfile registers (except data) * write and read the hob registers (sector,nsector,lcyl,hcyl) */ if (task->tf_out_flags.all == 0) { task->tf_out_flags.all = IDE_TASKFILE_STD_OUT_FLAGS; if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { task->tf_out_flags.all != (IDE_HOB_STD_OUT_FLAGS << 8); } } \ if (task->tf_in_flags.all == 0) { task->tf_in_flags.all = IDE_TASKFILE_STD_IN_FLAGS; if ((id->command_set_2 & 0x0400) && (id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { task->tf_in_flags.all != (IDE_HOB_STD_IN_FLAGS << 8); } } \ if (IDE_CONTROL_REG) OUT_BYTE(drive->ctl, IDE_CONTROL_REG); /* clear nIEN */ SELECT_MASK(HWIF(drive), drive, 0); \ if (task->tf_out_flags.b.data) { unsigned short data = taskfile->data + (hobfile->data << 8); OUT_WORD (data, IDE_DATA_REG); } \ /* (KS) send hob registers first */ if (task->tf_out_flags.b.nsector_hob) OUT_BYTE(hobfile->sector_count, IDE_NSECTOR_REG); if (task->tf_out_flags.b.sector_hob) OUT_BYTE(hobfile->sector_number, IDE_SECTOR_REG); if (task->tf_out_flags.b.lcyl_hob) OUT_BYTE(hobfile->low_cylinder, IDE_LCYL_REG); if (task->tf_out_flags.b.hcyl_hob) OUT_BYTE(hobfile->high_cylinder, IDE_HCYL_REG); \ \ /* (KS) Send now the standard registers */ if (task->tf_out_flags.b.error_feature) OUT_BYTE(taskfile->feature, IDE_FEATURE_REG); /* refers to number of sectors to transfer */ if (task->tf_out_flags.b.nsector) OUT_BYTE(taskfile->sector_count, IDE_NSECTOR_REG); /* refers to sector offset or start sector */ if (task->tf_out_flags.b.sector) OUT_BYTE(taskfile->sector_number, IDE_SECTOR_REG); if (task->tf_out_flags.b.lcyl) OUT_BYTE(taskfile->low_cylinder, IDE_LCYL_REG); if (task->tf_out_flags.b.hcyl) OUT_BYTE(taskfile->high_cylinder, IDE_HCYL_REG); \ /* * (KS) Do not modify the specified taskfile. We want to have a * universal pass through, so we must execute ALL specified values. * * (KS) The drive head register is mandatory. * Don't care about the out flags ! */ OUT_BYTE(taskfile->device_head | drive->select.all, IDE_SELECT_REG); if (task->handler != NULL) { #if 0 ide_set_handler (drive, task->handler, WAIT_CMD, NULL); OUT_BYTE(taskfile->command, IDE_COMMAND_REG); /* * warning check for race between handler and prehandler for * writing first block of data. however since we are well * inside the boundaries of the seek, we should be okay. */ if (task->prehandler != NULL) { return task->prehandler(drive, task->rq); } #else ide_startstop_t startstop; \ ide_set_handler (drive, task->handler, WAIT_CMD, NULL); \ /* * (KS) The drive command register is also mandatory. * Don't care about the out flags ! */ OUT_BYTE(taskfile->command, IDE_COMMAND_REG); \ if (ide_wait_stat(&startstop, drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) { printk(KERN_ERR "%s: no DRQ after issuing %s\n", drive->name, drive->mult_count ? "MULTWRITE" : "WRITE"); return startstop; } /* (ks/hs): Fixed Multi Write */ if ((taskfile->command != WIN_MULTWRITE) && (taskfile->command != WIN_MULTWRITE_EXT)) { struct request *rq = HWGROUP(drive)->rq; /* For Write_sectors we need to stuff the first sector */ taskfile_output_data(drive, rq->buffer, SECTOR_WORDS); rq->current_nr_sectors--; } else { /* Stuff first sector(s) by implicitly calling the handler */ if (!(drive_is_ready(drive))) { /* FIXME: Replace hard-coded 100, error handling? */ int i; for (i=0; i<100; i++) { if (drive_is_ready(drive)) break; } } return task->handler(drive); } #endif } else { /* for dma commands we down set the handler */ if (drive->using_dma && !(HWIF(drive)->dmaproc(((taskfile->command == WIN_WRITEDMA) || (taskfile->command == WIN_WRITEDMA_EXT)) ? ide_dma_write : ide_dma_read, drive))); } \ return ide_started; } #endif \ #if 0 /* * Error reporting, in human readable form (luxurious, but a memory hog). */ byte taskfile_dump_status (ide_drive_t *drive, const char *msg, byte stat) { unsigned long flags; byte err = 0; \ __save_flags (flags); /* local CPU only */ ide__sti(); /* local CPU only */ printk("%s: %s: status=0x%02x", drive->name, msg, stat); #if FANCY_STATUS_DUMPS printk(" { "); if (stat & BUSY_STAT) printk("Busy "); else { if (stat & READY_STAT) printk("DriveReady "); if (stat & WRERR_STAT) printk("DeviceFault "); if (stat & SEEK_STAT) printk("SeekComplete "); if (stat & DRQ_STAT) printk("DataRequest "); if (stat & ECC_STAT) printk("CorrectedError "); if (stat & INDEX_STAT) printk("Index "); if (stat & ERR_STAT) printk("Error "); } printk("}"); #endif /* FANCY_STATUS_DUMPS */ printk("\n"); if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) { err = GET_ERR(); printk("%s: %s: error=0x%02x", drive->name, msg, err); #if FANCY_STATUS_DUMPS if (drive->media == ide_disk) { printk(" { "); if (err & ABRT_ERR) printk("DriveStatusError "); if (err & ICRC_ERR) printk("%s", (err & ABRT_ERR) ? "BadCRC " : "BadSector "); if (err & ECC_ERR) printk("UncorrectableError "); if (err & ID_ERR) printk("SectorIdNotFound "); if (err & TRK0_ERR) printk("TrackZeroNotFound "); if (err & MARK_ERR) printk("AddrMarkNotFound "); printk("}"); if ((err & (BBD_ERR | ABRT_ERR)) == BBD_ERR || (err & (ECC_ERR|ID_ERR|MARK_ERR))) { if ((drive->id->command_set_2 & 0x0400) && (drive->id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { __u64 sectors = 0; u32 low = 0, high = 0; low = task_read_24(drive); OUT_BYTE(0x80, IDE_CONTROL_REG); high = task_read_24(drive); sectors = ((__u64)high << 24) | low; printk(", LBAsect=%lld", sectors); } else { byte cur = IN_BYTE(IDE_SELECT_REG); if (cur & 0x40) { /* using LBA? */ printk(", LBAsect=%ld", (unsigned long) ((cur&0xf)<<24) |(IN_BYTE(IDE_HCYL_REG)<<16) |(IN_BYTE(IDE_LCYL_REG)<<8) | IN_BYTE(IDE_SECTOR_REG)); } else { printk(", CHS=%d/%d/%d", (IN_BYTE(IDE_HCYL_REG)<<8) + IN_BYTE(IDE_LCYL_REG), cur & 0xf, IN_BYTE(IDE_SECTOR_REG)); } } if (HWGROUP(drive)->rq) printk(", sector=%llu", (__u64) HWGROUP(drive)->rq->sector); } } #endif /* FANCY_STATUS_DUMPS */ printk("\n"); } __restore_flags (flags); /* local CPU only */ return err; } \ /* * Clean up after success/failure of an explicit taskfile operation. */ void ide_end_taskfile (ide_drive_t *drive, byte stat, byte err) { unsigned long flags; struct request *rq; ide_task_t *args; task_ioreg_t command; \ spin_lock_irqsave(&io_request_lock, flags); rq = HWGROUP(drive)->rq; spin_unlock_irqrestore(&io_request_lock, flags); args = (ide_task_t *) rq->special; \ command = args->tfRegister[IDE_COMMAND_OFFSET]; \ rq->errors = !OK_STAT(stat,READY_STAT,BAD_STAT); \ args->tfRegister[IDE_ERROR_OFFSET] = err; args->tfRegister[IDE_NSECTOR_OFFSET] = IN_BYTE(IDE_NSECTOR_REG); args->tfRegister[IDE_SECTOR_OFFSET] = IN_BYTE(IDE_SECTOR_REG); args->tfRegister[IDE_LCYL_OFFSET] = IN_BYTE(IDE_LCYL_REG); args->tfRegister[IDE_HCYL_OFFSET] = IN_BYTE(IDE_HCYL_REG); args->tfRegister[IDE_SELECT_OFFSET] = IN_BYTE(IDE_SELECT_REG); args->tfRegister[IDE_STATUS_OFFSET] = stat; if ((drive->id->command_set_2 & 0x0400) && (drive->id->cfs_enable_2 & 0x0400) && (drive->addressing == 1)) { OUT_BYTE(drive->ctl|0x80, IDE_CONTROL_REG_HOB); args->hobRegister[IDE_FEATURE_OFFSET_HOB] = IN_BYTE(IDE_FEATURE_REG); args->hobRegister[IDE_NSECTOR_OFFSET_HOB] = IN_BYTE(IDE_NSECTOR_REG); args->hobRegister[IDE_SECTOR_OFFSET_HOB] = IN_BYTE(IDE_SECTOR_REG); args->hobRegister[IDE_LCYL_OFFSET_HOB] = IN_BYTE(IDE_LCYL_REG); args->hobRegister[IDE_HCYL_OFFSET_HOB] = IN_BYTE(IDE_HCYL_REG); } \ /* taskfile_settings_update(drive, args, command); */ \ spin_lock_irqsave(&io_request_lock, flags); blkdev_dequeue_request(rq); HWGROUP(drive)->rq = NULL; end_that_request_last(rq); spin_unlock_irqrestore(&io_request_lock, flags); } \ /* * try_to_flush_leftover_data() is invoked in response to a drive * unexpectedly having its DRQ_STAT bit set. As an alternative to * resetting the drive, this routine tries to clear the condition * by read a sector's worth of data from the drive. Of course, * this may not help if the drive is *waiting* for data from *us*. */ void task_try_to_flush_leftover_data (ide_drive_t *drive) { int i = (drive->mult_count ? drive->mult_count : 1) * SECTOR_WORDS; \ if (drive->media != ide_disk) return; while (i > 0) { u32 buffer[16]; unsigned int wcount = (i > 16) ? 16 : i; i -= wcount; taskfile_input_data (drive, buffer, wcount); } } \ /* * taskfile_error() takes action based on the error returned by the drive. */ ide_startstop_t taskfile_error (ide_drive_t *drive, const char *msg, byte stat) { struct request *rq; byte err; \ err = taskfile_dump_status(drive, msg, stat); if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL) return ide_stopped; /* retry only "normal" I/O: */ if (rq->cmd == IDE_DRIVE_TASKFILE) { rq->errors = 1; ide_end_taskfile(drive, stat, err); return ide_stopped; } if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) { /* other bits are useless when BUSY */ rq->errors |= ERROR_RESET; } else { if (drive->media == ide_disk && (stat & ERR_STAT)) { /* err has different meaning on cdrom and tape */ if (err == ABRT_ERR) { if (drive->select.b.lba && IN_BYTE(IDE_COMMAND_REG) == WIN_SPECIFY) return ide_stopped; /* some newer drives don't support WIN_SPECIFY */ } else if ((err & (ABRT_ERR | ICRC_ERR)) == (ABRT_ERR | ICRC_ERR)) { drive->crc_count++; /* UDMA crc error -- just retry the operation */ } else if (err & (BBD_ERR | ECC_ERR)) /* retries won't help these */ rq->errors = ERROR_MAX; else if (err & TRK0_ERR) /* help it find track zero */ rq->errors |= ERROR_RECAL; } if ((stat & DRQ_STAT) && rq->cmd != WRITE) task_try_to_flush_leftover_data(drive); } if (GET_STAT() & (BUSY_STAT|DRQ_STAT)) OUT_BYTE(WIN_IDLEIMMEDIATE,IDE_COMMAND_REG); /* force an abort */ \ if (rq->errors >= ERROR_MAX) { if (drive->driver != NULL) DRIVER(drive)->end_request(0, HWGROUP(drive)); else ide_end_request(0, HWGROUP(drive)); } else { if ((rq->errors & ERROR_RESET) == ERROR_RESET) { ++rq->errors; return ide_do_reset(drive); } if ((rq->errors & ERROR_RECAL) == ERROR_RECAL) drive->special.b.recalibrate = 1; ++rq->errors; } return ide_stopped; } #endif \ /* * Handler for special commands without a data phase from ide-disk */ \ /* * set_multmode_intr() is invoked on completion of a WIN_SETMULT cmd. */ ide_startstop_t set_multmode_intr (ide_drive_t *drive) { byte stat; \ if (OK_STAT(stat=GET_STAT(),READY_STAT,BAD_STAT)) { drive->mult_count = drive->mult_req; } else { drive->mult_req = drive->mult_count = 0; drive->special.b.recalibrate = 1; (void) ide_dump_status(drive, "set_multmode", stat); } return ide_stopped; } \ /* * set_geometry_intr() is invoked on completion of a WIN_SPECIFY cmd. */ ide_startstop_t set_geometry_intr (ide_drive_t *drive) { byte stat; \ if (OK_STAT(stat=GET_STAT(),READY_STAT,BAD_STAT)) return ide_stopped; \ if (stat & (ERR_STAT|DRQ_STAT)) return ide_error(drive, "set_geometry_intr", stat); \ ide_set_handler(drive, &set_geometry_intr, WAIT_CMD, NULL); return ide_started; } \ /* * recal_intr() is invoked on completion of a WIN_RESTORE (recalibrate) cmd. */ ide_startstop_t recal_intr (ide_drive_t *drive) { byte stat = GET_STAT(); \ if (!OK_STAT(stat,READY_STAT,BAD_STAT)) return ide_error(drive, "recal_intr", stat); return ide_stopped; } \ /* * Handler for commands without a data phase */ ide_startstop_t task_no_data_intr (ide_drive_t *drive) { ide_task_t *args = HWGROUP(drive)->rq->special; byte stat = GET_STAT(); \ ide__sti(); /* local CPU only */ \ if (!OK_STAT(stat, READY_STAT, BAD_STAT)) return ide_error(drive, "task_no_data_intr", stat); /* calls ide_end_drive_cmd */ \ if (args) ide_end_drive_cmd (drive, stat, GET_ERR()); \ return ide_stopped; } \ /* * Handler for command with PIO data-in phase */ ide_startstop_t task_in_intr (ide_drive_t *drive) { byte stat = GET_STAT(); byte io_32bit = drive->io_32bit; struct request *rq = HWGROUP(drive)->rq; char *pBuf = NULL; \ if (!OK_STAT(stat,DATA_READY,BAD_R_STAT)) { if (stat & (ERR_STAT|DRQ_STAT)) { return ide_error(drive, "task_in_intr", stat); } if (!(stat & BUSY_STAT)) { DTF("task_in_intr to Soon wait for next interrupt\n"); ide_set_handler(drive, &task_in_intr, WAIT_CMD, NULL); return ide_started; } } DTF("stat: %02x\n", stat); pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); DTF("Read: %p, rq->current_nr_sectors: %d\n", pBuf, (int) rq->current_nr_sectors); \ drive->io_32bit = 0; taskfile_input_data(drive, pBuf, SECTOR_WORDS); drive->io_32bit = io_32bit; \ if (--rq->current_nr_sectors <= 0) { /* (hs): swapped next 2 lines */ DTF("Request Ended stat: %02x\n", GET_STAT()); ide_end_request(1, HWGROUP(drive)); } else { ide_set_handler(drive, &task_in_intr, WAIT_CMD, NULL); return ide_started; } return ide_stopped; } \ #undef ALTSTAT_SCREW_UP \ #ifdef ALTSTAT_SCREW_UP /* * (ks/hs): Poll Alternate Status Register to ensure * that drive is not busy. */ byte altstat_multi_busy (ide_drive_t *drive, byte stat, const char *msg) { int i; \ DTF("multi%s: ASR = %x\n", msg, stat); if (stat & BUSY_STAT) { /* (ks/hs): FIXME: Replace hard-coded 100, error handling? */ for (i=0; i<100; i++) { stat = GET_ALTSTAT(); if ((stat & BUSY_STAT) == 0) break; } } /* * (ks/hs): Read Status AFTER Alternate Status Register */ return(GET_STAT()); } \ /* * (ks/hs): Poll Alternate status register to wait for drive * to become ready for next transfer */ byte altstat_multi_poll (ide_drive_t *drive, byte stat, const char *msg) { /* (ks/hs): FIXME: Error handling, time-out? */ while (stat & BUSY_STAT) stat = GET_ALTSTAT(); DTF("multi%s: nsect=1, ASR = %x\n", msg, stat); return(GET_STAT()); /* (ks/hs): Clear pending IRQ */ } #endif /* ALTSTAT_SCREW_UP */ \ /* * Handler for command with Read Multiple */ ide_startstop_t task_mulin_intr (ide_drive_t *drive) { unsigned int msect, nsect; \ #ifdef ALTSTAT_SCREW_UP byte stat = altstat_multi_busy(drive, GET_ALTSTAT(), "read"); #else byte stat = GET_STAT(); #endif /* ALTSTAT_SCREW_UP */ \ byte io_32bit = drive->io_32bit; struct request *rq = HWGROUP(drive)->rq; char *pBuf = NULL; \ if (!OK_STAT(stat,DATA_READY,BAD_R_STAT)) { if (stat & (ERR_STAT|DRQ_STAT)) { return ide_error(drive, "task_mulin_intr", stat); } /* no data yet, so wait for another interrupt */ ide_set_handler(drive, &task_mulin_intr, WAIT_CMD, NULL); return ide_started; } \ /* (ks/hs): Fixed Multi-Sector transfer */ msect = drive->mult_count; \ #ifdef ALTSTAT_SCREW_UP /* * Screw the request we do not support bad data-phase setups! * Either read and learn the ATA standard or crash yourself! */ if (!msect) { /* * (ks/hs): Drive supports multi-sector transfer, * drive->mult_count was not set */ nsect = 1; while (rq->current_nr_sectors) { pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); DTF("Multiread: %p, nsect: %d, rq->current_nr_sectors: %ld\n", pBuf, nsect, rq->current_nr_sectors); drive->io_32bit = 0; taskfile_input_data(drive, pBuf, nsect * SECTOR_WORDS); drive->io_32bit = io_32bit; rq->errors = 0; rq->current_nr_sectors -= nsect; stat = altstat_multi_poll(drive, GET_ALTSTAT(), "read"); } ide_end_request(1, HWGROUP(drive)); return ide_stopped; } #endif /* ALTSTAT_SCREW_UP */ \ nsect = (rq->current_nr_sectors > msect) ? msect : rq->current_nr_sectors; pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); \ DTF("Multiread: %p, nsect: %d , rq->current_nr_sectors: %ld\n", pBuf, nsect, rq->current_nr_sectors); drive->io_32bit = 0; taskfile_input_data(drive, pBuf, nsect * SECTOR_WORDS); drive->io_32bit = io_32bit; rq->errors = 0; rq->current_nr_sectors -= nsect; if (rq->current_nr_sectors != 0) { ide_set_handler(drive, &task_mulin_intr, WAIT_CMD, NULL); return ide_started; } ide_end_request(1, HWGROUP(drive)); return ide_stopped; } \ ide_startstop_t pre_task_out_intr (ide_drive_t *drive, struct request *rq) { ide_task_t *args = rq->special; ide_startstop_t startstop; \ if (ide_wait_stat(&startstop, drive, DATA_READY, drive->bad_wstat, WAIT_DRQ)) { printk(KERN_ERR "%s: no DRQ after issuing %s\n", drive->name, drive->mult_count ? "MULTWRITE" : "WRITE"); return startstop; } \ /* (ks/hs): Fixed Multi Write */ if ((args->tfRegister[IDE_COMMAND_OFFSET] != WIN_MULTWRITE) && (args->tfRegister[IDE_COMMAND_OFFSET] != WIN_MULTWRITE_EXT)) { /* For Write_sectors we need to stuff the first sector */ taskfile_output_data(drive, rq->buffer, SECTOR_WORDS); rq->current_nr_sectors--; return ide_started; } else { /* * (ks/hs): Stuff the first sector(s) * by implicitly calling the handler */ if (!(drive_is_ready(drive))) { int i; /* * (ks/hs): FIXME: Replace hard-coded * 100, error handling? */ for (i=0; i<100; i++) { if (drive_is_ready(drive)) break; } } return args->handler(drive); } return ide_started; } \ /* * Handler for command with PIO data-out phase */ ide_startstop_t task_out_intr (ide_drive_t *drive) { byte stat = GET_STAT(); byte io_32bit = drive->io_32bit; struct request *rq = HWGROUP(drive)->rq; char *pBuf = NULL; \ if (!rq->current_nr_sectors) { ide_end_request(1, HWGROUP(drive)); return ide_stopped; } \ if (!OK_STAT(stat,DRIVE_READY,drive->bad_wstat)) { return ide_error(drive, "task_out_intr", stat); } if ((rq->current_nr_sectors==1) ^ (stat & DRQ_STAT)) { rq = HWGROUP(drive)->rq; pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); DTF("write: %p, rq->current_nr_sectors: %d\n", pBuf, (int) rq->current_nr_sectors); drive->io_32bit = 0; taskfile_output_data(drive, pBuf, SECTOR_WORDS); drive->io_32bit = io_32bit; rq->errors = 0; rq->current_nr_sectors--; } \ if (rq->current_nr_sectors <= 0) { ide_end_request(1, HWGROUP(drive)); } else { ide_set_handler(drive, &task_out_intr, WAIT_CMD, NULL); return ide_started; } return ide_stopped; } \ /* * Handler for command write multiple * Called directly from execute_drive_cmd for the first bunch of sectors, * afterwards only by the ISR */ ide_startstop_t task_mulout_intr (ide_drive_t *drive) { unsigned int msect, nsect; \ #ifdef ALTSTAT_SCREW_UP byte stat = altstat_multi_busy(drive, GET_ALTSTAT(), "write"); #else byte stat = GET_STAT(); #endif /* ALTSTAT_SCREW_UP */ \ byte io_32bit = drive->io_32bit; struct request *rq = HWGROUP(drive)->rq; ide_hwgroup_t *hwgroup = HWGROUP(drive); char *pBuf = NULL; \ /* * (ks/hs): Handle last IRQ on multi-sector transfer, * occurs after all data was sent */ if (rq->current_nr_sectors == 0) { if (stat & (ERR_STAT|DRQ_STAT)) return ide_error(drive, "task_mulout_intr", stat); ide_end_request(1, HWGROUP(drive)); return ide_stopped; } \ if (!OK_STAT(stat,DATA_READY,BAD_R_STAT)) { if (stat & (ERR_STAT|DRQ_STAT)) { return ide_error(drive, "task_mulout_intr", stat); } /* no data yet, so wait for another interrupt */ if (hwgroup->handler == NULL) ide_set_handler(drive, &task_mulout_intr, WAIT_CMD, NULL); return ide_started; } \ /* (ks/hs): See task_mulin_intr */ msect = drive->mult_count; \ #ifdef ALTSTAT_SCREW_UP /* * Screw the request we do not support bad data-phase setups! * Either read and learn the ATA standard or crash yourself! */ if (!msect) { nsect = 1; while (rq->current_nr_sectors) { pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); DTF("Multiwrite: %p, nsect: %d, rq->current_nr_sectors: %ld\n", pBuf, nsect, rq->current_nr_sectors); drive->io_32bit = 0; taskfile_output_data(drive, pBuf, nsect * SECTOR_WORDS); drive->io_32bit = io_32bit; rq->errors = 0; rq->current_nr_sectors -= nsect; stat = altstat_multi_poll(drive, GET_ALTSTAT(), "write"); } ide_end_request(1, HWGROUP(drive)); return ide_stopped; } #endif /* ALTSTAT_SCREW_UP */ \ nsect = (rq->current_nr_sectors > msect) ? msect : rq->current_nr_sectors; pBuf = rq->buffer + ((rq->nr_sectors - rq->current_nr_sectors) * SECTOR_SIZE); DTF("Multiwrite: %p, nsect: %d , rq->current_nr_sectors: %ld\n", pBuf, nsect, rq->current_nr_sectors); drive->io_32bit = 0; taskfile_output_data(drive, pBuf, nsect * SECTOR_WORDS); drive->io_32bit = io_32bit; rq->errors = 0; rq->current_nr_sectors -= nsect; if (hwgroup->handler == NULL) ide_set_handler(drive, &task_mulout_intr, WAIT_CMD, NULL); return ide_started; } \ /* Called by internal to feature out type of command being called */ ide_pre_handler_t * ide_pre_handler_parser (struct hd_drive_task_hdr *taskfile, struct hd_drive_hob_hdr *hobfile) { switch(taskfile->command) { /* IDE_DRIVE_TASK_RAW_WRITE */ case CFA_WRITE_MULTI_WO_ERASE: case WIN_MULTWRITE: case WIN_MULTWRITE_EXT: // case WIN_WRITEDMA: // case WIN_WRITEDMA_QUEUED: // case WIN_WRITEDMA_EXT: // case WIN_WRITEDMA_QUEUED_EXT: /* IDE_DRIVE_TASK_OUT */ case WIN_WRITE: case WIN_WRITE_VERIFY: case WIN_WRITE_BUFFER: case CFA_WRITE_SECT_WO_ERASE: case WIN_DOWNLOAD_MICROCODE: return &pre_task_out_intr; /* IDE_DRIVE_TASK_OUT */ case WIN_SMART: if (taskfile->feature == SMART_WRITE_LOG_SECTOR) return &pre_task_out_intr; default: break; } return(NULL); } \ /* Called by internal to feature out type of command being called */ ide_handler_t * ide_handler_parser (struct hd_drive_task_hdr *taskfile, struct hd_drive_hob_hdr *hobfile) { switch(taskfile->command) { case WIN_IDENTIFY: case WIN_PIDENTIFY: case CFA_TRANSLATE_SECTOR: case WIN_READ_BUFFER: case WIN_READ: case WIN_READ_EXT: return &task_in_intr; case WIN_SECURITY_DISABLE: case WIN_SECURITY_ERASE_UNIT: case WIN_SECURITY_SET_PASS: case WIN_SECURITY_UNLOCK: case WIN_DOWNLOAD_MICROCODE: case CFA_WRITE_SECT_WO_ERASE: case WIN_WRITE_BUFFER: case WIN_WRITE_VERIFY: case WIN_WRITE: case WIN_WRITE_EXT: return &task_out_intr; case WIN_MULTREAD: case WIN_MULTREAD_EXT: return &task_mulin_intr; case CFA_WRITE_MULTI_WO_ERASE: case WIN_MULTWRITE: case WIN_MULTWRITE_EXT: return &task_mulout_intr; case WIN_SMART: switch(taskfile->feature) { case SMART_READ_VALUES: case SMART_READ_THRESHOLDS: case SMART_READ_LOG_SECTOR: return &task_in_intr; case SMART_WRITE_LOG_SECTOR: return &task_out_intr; default: return &task_no_data_intr; } case CFA_REQ_EXT_ERROR_CODE: case CFA_ERASE_SECTORS: case WIN_VERIFY: case WIN_VERIFY_EXT: case WIN_SEEK: return &task_no_data_intr; case WIN_SPECIFY: return &set_geometry_intr; case WIN_RESTORE: return &recal_intr; case WIN_DIAGNOSE: case WIN_FLUSH_CACHE: case WIN_FLUSH_CACHE_EXT: case WIN_STANDBYNOW1: case WIN_STANDBYNOW2: case WIN_SLEEPNOW1: case WIN_SLEEPNOW2: case WIN_SETIDLE1: case WIN_CHECKPOWERMODE1: case WIN_CHECKPOWERMODE2: case WIN_GETMEDIASTATUS: case WIN_MEDIAEJECT: return &task_no_data_intr; case WIN_SETMULT: return &set_multmode_intr; case WIN_READ_NATIVE_MAX: case WIN_SET_MAX: case WIN_READ_NATIVE_MAX_EXT: case WIN_SET_MAX_EXT: case WIN_SECURITY_ERASE_PREPARE: case WIN_SECURITY_FREEZE_LOCK: case WIN_DOORLOCK: case WIN_DOORUNLOCK: case WIN_SETFEATURES: return &task_no_data_intr; case DISABLE_SEAGATE: case EXABYTE_ENABLE_NEST: return &task_no_data_intr; #ifdef CONFIG_BLK_DEV_IDEDMA case WIN_READDMA: case WIN_IDENTIFY_DMA: case WIN_READDMA_QUEUED: case WIN_READDMA_EXT: case WIN_READDMA_QUEUED_EXT: case WIN_WRITEDMA: case WIN_WRITEDMA_QUEUED: case WIN_WRITEDMA_EXT: case WIN_WRITEDMA_QUEUED_EXT: #endif case WIN_FORMAT: case WIN_INIT: case WIN_DEVICE_RESET: case WIN_QUEUED_SERVICE: case WIN_PACKETCMD: default: return(NULL); } } \ /* Called by ioctl to feature out type of command being called */ int ide_cmd_type_parser (ide_task_t *args) { struct hd_drive_task_hdr *taskfile = (struct hd_drive_task_hdr *) args->tfRegister; struct hd_drive_hob_hdr *hobfile = (struct hd_drive_hob_hdr *) args->hobRegister; \ args->prehandler = ide_pre_handler_parser(taskfile, hobfile); args->handler = ide_handler_parser(taskfile, hobfile); \ switch(args->tfRegister[IDE_COMMAND_OFFSET]) { case WIN_IDENTIFY: case WIN_PIDENTIFY: return IDE_DRIVE_TASK_IN; case CFA_TRANSLATE_SECTOR: case WIN_READ: case WIN_READ_BUFFER: return IDE_DRIVE_TASK_IN; case WIN_WRITE: case WIN_WRITE_VERIFY: case WIN_WRITE_BUFFER: case CFA_WRITE_SECT_WO_ERASE: case WIN_DOWNLOAD_MICROCODE: return IDE_DRIVE_TASK_RAW_WRITE; case WIN_MULTREAD: return IDE_DRIVE_TASK_IN; case CFA_WRITE_MULTI_WO_ERASE: case WIN_MULTWRITE: return IDE_DRIVE_TASK_RAW_WRITE; case WIN_SECURITY_DISABLE: case WIN_SECURITY_ERASE_UNIT: case WIN_SECURITY_SET_PASS: case WIN_SECURITY_UNLOCK: return IDE_DRIVE_TASK_OUT; case WIN_SMART: args->tfRegister[IDE_LCYL_OFFSET] = SMART_LCYL_PASS; args->tfRegister[IDE_HCYL_OFFSET] = SMART_HCYL_PASS; switch(args->tfRegister[IDE_FEATURE_OFFSET]) { case SMART_READ_VALUES: case SMART_READ_THRESHOLDS: case SMART_READ_LOG_SECTOR: return IDE_DRIVE_TASK_IN; case SMART_WRITE_LOG_SECTOR: return IDE_DRIVE_TASK_OUT; default: return IDE_DRIVE_TASK_NO_DATA; } #ifdef CONFIG_BLK_DEV_IDEDMA case WIN_READDMA: case WIN_IDENTIFY_DMA: case WIN_READDMA_QUEUED: case WIN_READDMA_EXT: case WIN_READDMA_QUEUED_EXT: return IDE_DRIVE_TASK_IN; case WIN_WRITEDMA: case WIN_WRITEDMA_QUEUED: case WIN_WRITEDMA_EXT: case WIN_WRITEDMA_QUEUED_EXT: return IDE_DRIVE_TASK_RAW_WRITE; #endif case WIN_SETFEATURES: switch(args->tfRegister[IDE_FEATURE_OFFSET]) { case SETFEATURES_XFER: return IDE_DRIVE_TASK_SET_XFER; case SETFEATURES_DIS_DEFECT: case SETFEATURES_EN_APM: case SETFEATURES_DIS_MSN: case SETFEATURES_EN_RI: case SETFEATURES_EN_SI: case SETFEATURES_DIS_RPOD: case SETFEATURES_DIS_WCACHE: case SETFEATURES_EN_DEFECT: case SETFEATURES_DIS_APM: case SETFEATURES_EN_MSN: case SETFEATURES_EN_RLA: case SETFEATURES_PREFETCH: case SETFEATURES_EN_RPOD: case SETFEATURES_DIS_RI: case SETFEATURES_DIS_SI: default: return IDE_DRIVE_TASK_NO_DATA; } case WIN_NOP: case CFA_REQ_EXT_ERROR_CODE: case CFA_ERASE_SECTORS: case WIN_VERIFY: case WIN_VERIFY_EXT: case WIN_SEEK: case WIN_SPECIFY: case WIN_RESTORE: case WIN_DIAGNOSE: case WIN_FLUSH_CACHE: case WIN_FLUSH_CACHE_EXT: case WIN_STANDBYNOW1: case WIN_STANDBYNOW2: case WIN_SLEEPNOW1: case WIN_SLEEPNOW2: case WIN_SETIDLE1: case DISABLE_SEAGATE: case WIN_CHECKPOWERMODE1: case WIN_CHECKPOWERMODE2: case WIN_GETMEDIASTATUS: case WIN_MEDIAEJECT: case WIN_SETMULT: case WIN_READ_NATIVE_MAX: case WIN_SET_MAX: case WIN_READ_NATIVE_MAX_EXT: case WIN_SET_MAX_EXT: case WIN_SECURITY_ERASE_PREPARE: case WIN_SECURITY_FREEZE_LOCK: case EXABYTE_ENABLE_NEST: case WIN_DOORLOCK: case WIN_DOORUNLOCK: return IDE_DRIVE_TASK_NO_DATA; case WIN_FORMAT: case WIN_INIT: case WIN_DEVICE_RESET: case WIN_QUEUED_SERVICE: case WIN_PACKETCMD: default: return IDE_DRIVE_TASK_INVALID; } } \ /* * This function is intended to be used prior to invoking ide_do_drive_cmd(). */ void ide_init_drive_taskfile (struct request *rq) { memset(rq, 0, sizeof(*rq)); rq->cmd = IDE_DRIVE_TASK_NO_DATA; } \ /* * This is kept for internal use only !!! * This is an internal call and nobody in user-space has a damn * reason to call this taskfile. * * ide_raw_taskfile is the one that user-space executes. */ int ide_wait_taskfile (ide_drive_t *drive, struct hd_drive_task_hdr *taskfile, struct hd_drive_hob_hdr *hobfile, byte *buf) { struct request rq; ide_task_t args; \ memset(&args, 0, sizeof(ide_task_t)); \ args.tfRegister[IDE_DATA_OFFSET] = taskfile->data; args.tfRegister[IDE_FEATURE_OFFSET] = taskfile->feature; args.tfRegister[IDE_NSECTOR_OFFSET] = taskfile->sector_count; args.tfRegister[IDE_SECTOR_OFFSET] = taskfile->sector_number; args.tfRegister[IDE_LCYL_OFFSET] = taskfile->low_cylinder; args.tfRegister[IDE_HCYL_OFFSET] = taskfile->high_cylinder; args.tfRegister[IDE_SELECT_OFFSET] = taskfile->device_head; args.tfRegister[IDE_COMMAND_OFFSET] = taskfile->command; \ args.hobRegister[IDE_DATA_OFFSET_HOB] = hobfile->data; args.hobRegister[IDE_FEATURE_OFFSET_HOB] = hobfile->feature; args.hobRegister[IDE_NSECTOR_OFFSET_HOB] = hobfile->sector_count; args.hobRegister[IDE_SECTOR_OFFSET_HOB] = hobfile->sector_number; args.hobRegister[IDE_LCYL_OFFSET_HOB] = hobfile->low_cylinder; args.hobRegister[IDE_HCYL_OFFSET_HOB] = hobfile->high_cylinder; args.hobRegister[IDE_SELECT_OFFSET_HOB] = hobfile->device_head; args.hobRegister[IDE_CONTROL_OFFSET_HOB] = hobfile->control; \ ide_init_drive_taskfile(&rq); /* This is kept for internal use only !!! */ args.command_type = ide_cmd_type_parser (&args); if (args.command_type != IDE_DRIVE_TASK_NO_DATA) rq.current_nr_sectors = rq.nr_sectors = (hobfile->sector_count << 8) | taskfile->sector_count; \ rq.cmd = IDE_DRIVE_TASKFILE; rq.buffer = buf; rq.special = &args; return ide_do_drive_cmd(drive, &rq, ide_wait); } \ int ide_raw_taskfile (ide_drive_t *drive, ide_task_t *args, byte *buf) { struct request rq; ide_init_drive_taskfile(&rq); rq.cmd = IDE_DRIVE_TASKFILE; rq.buffer = buf; \ if (args->command_type != IDE_DRIVE_TASK_NO_DATA) rq.current_nr_sectors = rq.nr_sectors = (args->hobRegister[IDE_NSECTOR_OFFSET_HOB] << 8) | args->tfRegister[IDE_NSECTOR_OFFSET]; \ rq.special = args; return ide_do_drive_cmd(drive, &rq, ide_wait); } \ \ #ifdef CONFIG_IDE_TASK_IOCTL_DEBUG char * ide_ioctl_verbose (unsigned int cmd) { return("unknown"); } \ char * ide_task_cmd_verbose (byte task) { return("unknown"); } #endif /* CONFIG_IDE_TASK_IOCTL_DEBUG */ \ /* * The taskfile glue table * * reqtask.data_phase reqtask.req_cmd * args.command_type args.handler * * TASKFILE_P_OUT_DMAQ ?? ?? * TASKFILE_P_IN_DMAQ ?? ?? * TASKFILE_P_OUT_DMA ?? ?? * TASKFILE_P_IN_DMA ?? ?? * TASKFILE_P_OUT ?? ?? * TASKFILE_P_IN ?? ?? * * TASKFILE_OUT_DMAQ IDE_DRIVE_TASK_RAW_WRITE NULL * TASKFILE_IN_DMAQ IDE_DRIVE_TASK_IN NULL * * TASKFILE_OUT_DMA IDE_DRIVE_TASK_RAW_WRITE NULL * TASKFILE_IN_DMA IDE_DRIVE_TASK_IN NULL * * TASKFILE_IN_OUT ?? ?? * * TASKFILE_MULTI_OUT IDE_DRIVE_TASK_RAW_WRITE task_mulout_intr * TASKFILE_MULTI_IN IDE_DRIVE_TASK_IN task_mulin_intr * * TASKFILE_OUT IDE_DRIVE_TASK_RAW_WRITE task_out_intr * TASKFILE_OUT IDE_DRIVE_TASK_OUT task_out_intr * * TASKFILE_IN IDE_DRIVE_TASK_IN task_in_intr * TASKFILE_NO_DATA IDE_DRIVE_TASK_NO_DATA task_no_data_intr * * IDE_DRIVE_TASK_SET_XFER task_no_data_intr * IDE_DRIVE_TASK_INVALID * */ \ #define MAX_DMA (256*SECTOR_WORDS) \ int ide_taskfile_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { ide_task_request_t *req_task; ide_task_t args; \ byte *outbuf = NULL; byte *inbuf = NULL; task_ioreg_t *argsptr = args.tfRegister; task_ioreg_t *hobsptr = args.hobRegister; int err = 0; int tasksize = sizeof(struct ide_task_request_s); int taskin = 0; int taskout = 0; \ req_task = kmalloc(tasksize, GFP_KERNEL); if (req_task == NULL) return -ENOMEM; memset(req_task, 0, tasksize); if (copy_from_user(req_task, (void *) arg, tasksize)) { kfree(req_task); return -EFAULT; } \ taskout = (int) req_task->out_size; taskin = (int) req_task->in_size; \ if (taskout) { int outtotal = tasksize; outbuf = kmalloc(taskout, GFP_KERNEL); if (outbuf == NULL) { err = -ENOMEM; goto abort; } memset(outbuf, 0, taskout); if (copy_from_user(outbuf, (void *)arg + outtotal, taskout)) { err = -EFAULT; goto abort; } } \ if (taskin) { int intotal = tasksize + taskout; inbuf = kmalloc(taskin, GFP_KERNEL); if (inbuf == NULL) { err = -ENOMEM; goto abort; } memset(inbuf, 0, taskin); if (copy_from_user(inbuf, (void *)arg + intotal , taskin)) { err = -EFAULT; goto abort; } } \ memset(argsptr, 0, HDIO_DRIVE_TASK_HDR_SIZE); memset(hobsptr, 0, HDIO_DRIVE_HOB_HDR_SIZE); memcpy(argsptr, req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE); memcpy(hobsptr, req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE); \ args.tf_in_flags = req_task->in_flags; args.tf_out_flags = req_task->out_flags; args.data_phase = req_task->data_phase; args.command_type = req_task->req_cmd; \ #ifdef CONFIG_IDE_TASK_IOCTL_DEBUG DTF("%s: ide_ioctl_cmd %s: ide_task_cmd %s\n", drive->name, ide_ioctl_verbose(cmd), ide_task_cmd_verbose(args.tfRegister[IDE_COMMAND_OFFSET])); #endif /* CONFIG_IDE_TASK_IOCTL_DEBUG */ \ switch(req_task->data_phase) { case TASKFILE_OUT_DMAQ: case TASKFILE_OUT_DMA: args.prehandler = NULL; args.handler = NULL; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, outbuf); break; case TASKFILE_IN_DMAQ: case TASKFILE_IN_DMA: args.prehandler = NULL; args.handler = NULL; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, inbuf); break; case TASKFILE_IN_OUT: #if 0 args.prehandler = &pre_task_out_intr; args.handler = &task_out_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, outbuf); args.prehandler = NULL; args.handler = &task_in_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, inbuf); break; #else err = -EFAULT; goto abort; #endif case TASKFILE_MULTI_OUT: if (drive->mult_count) { args.prehandler = &pre_task_out_intr; args.handler = &task_mulout_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, outbuf); } else { /* (hs): give up if multcount is not set */ printk("%s: %s Multimode Write " \ "multcount is not set\n", drive->name, __FUNCTION__); err = -EPERM; goto abort; } break; case TASKFILE_OUT: args.prehandler = &pre_task_out_intr; args.handler = &task_out_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, outbuf); break; case TASKFILE_MULTI_IN: if (drive->mult_count) { args.prehandler = NULL; args.handler = &task_mulin_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, inbuf); } else { /* (hs): give up if multcount is not set */ printk("%s: %s Multimode Read failure " \ "multcount is not set\n", drive->name, __FUNCTION__); err = -EPERM; goto abort; } break; case TASKFILE_IN: args.prehandler = NULL; args.handler = &task_in_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, inbuf); break; case TASKFILE_NO_DATA: args.prehandler = NULL; args.handler = &task_no_data_intr; args.posthandler = NULL; err = ide_raw_taskfile(drive, &args, NULL); break; default: args.prehandler = NULL; args.handler = NULL; args.posthandler = NULL; err = -EFAULT; goto abort; } \ memcpy(req_task->io_ports, &(args.tfRegister), HDIO_DRIVE_TASK_HDR_SIZE); memcpy(req_task->hob_ports, &(args.hobRegister), HDIO_DRIVE_HOB_HDR_SIZE); req_task->in_flags = args.tf_in_flags; req_task->out_flags = args.tf_out_flags; \ if (copy_to_user((void *)arg, req_task, tasksize)) { err = -EFAULT; goto abort; } if (taskout) { int outtotal = tasksize; if (copy_to_user((void *)arg+outtotal, outbuf, taskout)) { err = -EFAULT; goto abort; } } if (taskin) { int intotal = tasksize + taskout; if (copy_to_user((void *)arg+intotal, inbuf, taskin)) { err = -EFAULT; goto abort; } } abort: kfree(req_task); if (outbuf != NULL) kfree(outbuf); if (inbuf != NULL) kfree(inbuf); return err; } \ EXPORT_SYMBOL(task_read_24); EXPORT_SYMBOL(do_rw_taskfile); EXPORT_SYMBOL(do_taskfile); // EXPORT_SYMBOL(flagged_taskfile); \ //EXPORT_SYMBOL(ide_end_taskfile); \ EXPORT_SYMBOL(set_multmode_intr); EXPORT_SYMBOL(set_geometry_intr); EXPORT_SYMBOL(recal_intr); \ EXPORT_SYMBOL(task_no_data_intr); EXPORT_SYMBOL(task_in_intr); EXPORT_SYMBOL(task_mulin_intr); EXPORT_SYMBOL(pre_task_out_intr); EXPORT_SYMBOL(task_out_intr); EXPORT_SYMBOL(task_mulout_intr); \ EXPORT_SYMBOL(ide_init_drive_taskfile); EXPORT_SYMBOL(ide_wait_taskfile); EXPORT_SYMBOL(ide_raw_taskfile); EXPORT_SYMBOL(ide_pre_handler_parser); EXPORT_SYMBOL(ide_handler_parser); EXPORT_SYMBOL(ide_cmd_type_parser); EXPORT_SYMBOL(ide_taskfile_ioctl); \ #ifdef CONFIG_PKT_TASK_IOCTL \ #if 0 { \ { /* start cdrom */ \ struct cdrom_info *info = drive->driver_data; \ if (info->dma) { if (info->cmd == READ) { info->dma = !HWIF(drive)->dmaproc(ide_dma_read, drive); } else if (info->cmd == WRITE) { info->dma = !HWIF(drive)->dmaproc(ide_dma_write, drive); } else { printk("ide-cd: DMA set, but not allowed\n"); } } \ /* Set up the controller registers. */ OUT_BYTE (info->dma, IDE_FEATURE_REG); OUT_BYTE (0, IDE_NSECTOR_REG); OUT_BYTE (0, IDE_SECTOR_REG); \ OUT_BYTE (xferlen & 0xff, IDE_LCYL_REG); OUT_BYTE (xferlen >> 8 , IDE_HCYL_REG); if (IDE_CONTROL_REG) OUT_BYTE (drive->ctl, IDE_CONTROL_REG); \ if (info->dma) (void) (HWIF(drive)->dmaproc(ide_dma_begin, drive)); \ if (CDROM_CONFIG_FLAGS (drive)->drq_interrupt) { ide_set_handler (drive, handler, WAIT_CMD, cdrom_timer_expiry); OUT_BYTE (WIN_PACKETCMD, IDE_COMMAND_REG); /* packet command */ return ide_started; } else { OUT_BYTE (WIN_PACKETCMD, IDE_COMMAND_REG); /* packet command */ return (*handler) (drive); } \ } /* end cdrom */ \ { /* start floppy */ \ idefloppy_floppy_t *floppy = drive->driver_data; idefloppy_bcount_reg_t bcount; int dma_ok = 0; \ floppy->pc=pc; /* Set the current packet command */ \ pc->retries++; pc->actually_transferred=0; /* We haven't transferred any data yet */ pc->current_position=pc->buffer; bcount.all = IDE_MIN(pc->request_transfer, 63 * 1024); \ #ifdef CONFIG_BLK_DEV_IDEDMA if (test_and_clear_bit (PC_DMA_ERROR, &pc->flags)) { (void) HWIF(drive)->dmaproc(ide_dma_off, drive); } if (test_bit (PC_DMA_RECOMMENDED, &pc->flags) && drive->using_dma) dma_ok=!HWIF(drive)->dmaproc(test_bit (PC_WRITING, &pc->flags) ? ide_dma_write : ide_dma_read, drive); #endif /* CONFIG_BLK_DEV_IDEDMA */ \ if (IDE_CONTROL_REG) OUT_BYTE (drive->ctl,IDE_CONTROL_REG); OUT_BYTE (dma_ok ? 1:0,IDE_FEATURE_REG); /* Use PIO/DMA */ OUT_BYTE (bcount.b.high,IDE_BCOUNTH_REG); OUT_BYTE (bcount.b.low,IDE_BCOUNTL_REG); OUT_BYTE (drive->select.all,IDE_SELECT_REG); \ #ifdef CONFIG_BLK_DEV_IDEDMA if (dma_ok) { /* Begin DMA, if necessary */ set_bit (PC_DMA_IN_PROGRESS, &pc->flags); (void) (HWIF(drive)->dmaproc(ide_dma_begin, drive)); } #endif /* CONFIG_BLK_DEV_IDEDMA */ \ } /* end floppy */ \ { /* start tape */ \ idetape_tape_t *tape = drive->driver_data; \ #ifdef CONFIG_BLK_DEV_IDEDMA if (test_and_clear_bit (PC_DMA_ERROR, &pc->flags)) { printk (KERN_WARNING "ide-tape: DMA disabled, reverting to PIO\n"); (void) HWIF(drive)->dmaproc(ide_dma_off, drive); } if (test_bit (PC_DMA_RECOMMENDED, &pc->flags) && drive->using_dma) dma_ok=!HWIF(drive)->dmaproc(test_bit (PC_WRITING, &pc->flags) ? ide_dma_write : ide_dma_read, drive); #endif /* CONFIG_BLK_DEV_IDEDMA */ \ if (IDE_CONTROL_REG) OUT_BYTE (drive->ctl,IDE_CONTROL_REG); OUT_BYTE (dma_ok ? 1:0,IDE_FEATURE_REG); /* Use PIO/DMA */ OUT_BYTE (bcount.b.high,IDE_BCOUNTH_REG); OUT_BYTE (bcount.b.low,IDE_BCOUNTL_REG); OUT_BYTE (drive->select.all,IDE_SELECT_REG); #ifdef CONFIG_BLK_DEV_IDEDMA if (dma_ok) { /* Begin DMA, if necessary */ set_bit (PC_DMA_IN_PROGRESS, &pc->flags); (void) (HWIF(drive)->dmaproc(ide_dma_begin, drive)); } #endif /* CONFIG_BLK_DEV_IDEDMA */ if (test_bit(IDETAPE_DRQ_INTERRUPT, &tape->flags)) { ide_set_handler(drive, &idetape_transfer_pc, IDETAPE_WAIT_CMD, NULL); OUT_BYTE(WIN_PACKETCMD, IDE_COMMAND_REG); return ide_started; } else { OUT_BYTE(WIN_PACKETCMD, IDE_COMMAND_REG); return idetape_transfer_pc(drive); } \ } /* end tape */ \ } #endif \ int pkt_taskfile_ioctl (ide_drive_t *drive, struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { #if 0 switch(req_task->data_phase) { case TASKFILE_P_OUT_DMAQ: case TASKFILE_P_IN_DMAQ: case TASKFILE_P_OUT_DMA: case TASKFILE_P_IN_DMA: case TASKFILE_P_OUT: case TASKFILE_P_IN: } #endif return -ENOMSG; } \ EXPORT_SYMBOL(pkt_taskfile_ioctl); \ #endif /* CONFIG_PKT_TASK_IOCTL */ == BitKeeper/deleted/.del-meth.c~e0b45fc91fecee61 == patch@plucky.distro.conectiva|drivers/net/meth.c|20020313233104|16294|e0b45fc91fecee61 patch@plucky.distro.conectiva|drivers/net/meth.c|20020313233105|16147 D 1.2 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Delete: drivers/net/meth.c K 6220 O -rw-rw-r-- P BitKeeper/deleted/.del-meth.c~e0b45fc91fecee61 ------------------------------------------------ == drivers/net/tc35815.c == patch@plucky.distro.conectiva|drivers/net/tc35815.c|20020313233104|18317|35520c4bdf218f4 patch@plucky.distro.conectiva|drivers/net/tc35815.c|20020313233105|10507 D 1.2 02/03/11 11:13:28-03:00 patch@plucky.distro.conectiva +34 -48 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206862 K 37982 O -rw-rw-r-- P drivers/net/tc35815.c ------------------------------------------------ I9 3 * Cleaned up various non portable stuff (save_and_cli etc) and made it * build on x86 platforms -- Alan Cox 20020302 * I28 3 * * TODO: * Switch to spin_lock not lock_kernel for scalability. D32 1 I32 1 "tc35815.c:v0.00-ac 26/07/2000 by Toshiba Corporation\n"; D44 1 I44 1 #include I401 2 #if defined(__mips__) /* MIPS weirdness */ I403 4 #else #define tc_readl readl #define tc_writel writel #endif D468 1 D499 1 I499 1 unsigned long pci_memaddr; D563 1 I563 1 cpu_relax(); D568 1 I568 1 cpu_relax(); I833 1 #if 0 I849 1 #endif D910 1 I910 2 save_flags(flags); cli(); D966 1 I966 2 save_flags(flags); cli(); D1416 1 I1416 2 save_flags(flags); cli(); D1524 1 I1524 2 save_flags(flags); cli(); D1527 1 I1527 1 cpu_relax(); D1536 1 I1536 2 save_flags(flags); cli(); D1540 1 I1540 1 cpu_relax(); D1628 1 I1628 1 cpu_relax(); D1665 1 I1665 2 save_flags(flags); cli(); D1699 33 == drivers/usb/auerswald.c == New file: drivers/usb/auerswald.c V 4 patch@plucky.distro.conectiva|drivers/usb/auerswald.c|20020313234105|08951|f59d6f50a2bac764 D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/drivers/usb/auerswald.c K 8951 P drivers/usb/auerswald.c R f59d6f50a2bac764 X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|drivers/usb/auerswald.c|20020313234105|08951|f59d6f50a2bac764 D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +2196 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 37534 O -rw-rw-r-- P drivers/usb/auerswald.c ------------------------------------------------ I0 2196 /*****************************************************************************/ /* * auerswald.c -- Auerswald PBX/System Telephone usb driver. * * Copyright (C) 2001 Wolfgang Mües (wmues@nexgo.de) * * Very much code of this driver is borrowed from dabusb.c (Deti Fliegl) * and from the USB Skeleton driver (Greg Kroah-Hartman). Thank you. * * 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. */ /*****************************************************************************/ \ /* Standard Linux module include files */ #include #include #include #include #include #undef DEBUG /* include debug macros until it's done */ #include \ /*-------------------------------------------------------------------*/ /* Debug support */ #ifdef DEBUG #define dump( adr, len) \ do { \ unsigned int u; \ printk (KERN_DEBUG); \ for (u = 0; u < len; u++) \ printk (" %02X", adr[u] & 0xFF); \ printk ("\n"); \ } while (0) #else #define dump( adr, len) #endif \ /*-------------------------------------------------------------------*/ /* Version Information */ #define DRIVER_VERSION "0.9.11" #define DRIVER_AUTHOR "Wolfgang Mües " #define DRIVER_DESC "Auerswald PBX/System Telephone usb driver" \ /*-------------------------------------------------------------------*/ /* Private declarations for Auerswald USB driver */ \ /* Auerswald Vendor ID */ #define ID_AUERSWALD 0x09BF \ #ifndef AUER_MINOR_BASE /* allow external override */ #define AUER_MINOR_BASE 112 /* auerswald driver minor number */ #endif \ /* we can have up to this number of device plugged in at once */ #define AUER_MAX_DEVICES 16 \ /* prefix for the device descriptors in /dev/usb */ #define AU_PREFIX "auer" \ /* Number of read buffers for each device */ #define AU_RBUFFERS 10 \ /* Number of chain elements for each control chain */ #define AUCH_ELEMENTS 20 \ /* Number of retries in communication */ #define AU_RETRIES 10 \ /*-------------------------------------------------------------------*/ /* vendor specific protocol */ /* Header Byte */ #define AUH_INDIRMASK 0x80 /* mask for direct/indirect bit */ #define AUH_DIRECT 0x00 /* data is for USB device */ #define AUH_INDIRECT 0x80 /* USB device is relay */ \ #define AUH_SPLITMASK 0x40 /* mask for split bit */ #define AUH_UNSPLIT 0x00 /* data block is full-size */ #define AUH_SPLIT 0x40 /* data block is part of a larger one, split-byte follows */ \ #define AUH_TYPEMASK 0x3F /* mask for type of data transfer */ #define AUH_TYPESIZE 0x40 /* different types */ #define AUH_DCHANNEL 0x00 /* D channel data */ #define AUH_B1CHANNEL 0x01 /* B1 channel transparent */ #define AUH_B2CHANNEL 0x02 /* B2 channel transparent */ /* 0x03..0x0F reserved for driver internal use */ #define AUH_COMMAND 0x10 /* Command channel */ #define AUH_BPROT 0x11 /* Configuration block protocol */ #define AUH_DPROTANA 0x12 /* D channel protocol analyzer */ #define AUH_TAPI 0x13 /* telephone api data (ATD) */ /* 0x14..0x3F reserved for other protocols */ #define AUH_UNASSIGNED 0xFF /* if char device has no assigned service */ #define AUH_FIRSTUSERCH 0x11 /* first channel which is available for driver users */ \ #define AUH_SIZE 1 /* Size of Header Byte */ \ /* Split Byte. Only present if split bit in header byte set.*/ #define AUS_STARTMASK 0x80 /* mask for first block of splitted frame */ #define AUS_FIRST 0x80 /* first block */ #define AUS_FOLLOW 0x00 /* following block */ \ #define AUS_ENDMASK 0x40 /* mask for last block of splitted frame */ #define AUS_END 0x40 /* last block */ #define AUS_NOEND 0x00 /* not the last block */ \ #define AUS_LENMASK 0x3F /* mask for block length information */ \ /* Request types */ #define AUT_RREQ (USB_DIR_IN | USB_TYPE_VENDOR | USB_RECIP_OTHER) /* Read Request */ #define AUT_WREQ (USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_OTHER) /* Write Request */ \ /* Vendor Requests */ #define AUV_GETINFO 0x00 /* GetDeviceInfo */ #define AUV_WBLOCK 0x01 /* Write Block */ #define AUV_RBLOCK 0x02 /* Read Block */ #define AUV_CHANNELCTL 0x03 /* Channel Control */ #define AUV_DUMMY 0x04 /* Dummy Out for retry */ \ /* Device Info Types */ #define AUDI_NUMBCH 0x0000 /* Number of supported B channels */ #define AUDI_OUTFSIZE 0x0001 /* Size of OUT B channel fifos */ #define AUDI_MBCTRANS 0x0002 /* max. Blocklength of control transfer */ \ /* Interrupt endpoint definitions */ #define AU_IRQENDP 1 /* Endpoint number */ #define AU_IRQCMDID 16 /* Command-block ID */ #define AU_BLOCKRDY 0 /* Command: Block data ready on ctl endpoint */ #define AU_IRQMINSIZE 5 /* Nr. of bytes decoded in this driver */ \ /* Device String Descriptors */ #define AUSI_VENDOR 1 /* "Auerswald GmbH & Co. KG" */ #define AUSI_DEVICE 2 /* Name of the Device */ #define AUSI_SERIALNR 3 /* Serial Number */ #define AUSI_MSN 4 /* "MSN ..." (first) Multiple Subscriber Number */ \ #define AUSI_DLEN 100 /* Max. Length of Device Description */ \ #define AUV_RETRY 0x101 /* First Firmware version which can do control retries */ \ /*-------------------------------------------------------------------*/ /* External data structures / Interface */ typedef struct { char *buf; /* return buffer for string contents */ unsigned int bsize; /* size of return buffer */ } audevinfo_t,*paudevinfo_t; \ /* IO controls */ #define IOCTL_AU_SLEN _IOR( 'U', 0xF0, int) /* return the max. string descriptor length */ #define IOCTL_AU_DEVINFO _IOWR('U', 0xF1, audevinfo_t) /* get name of a specific device */ #define IOCTL_AU_SERVREQ _IOW( 'U', 0xF2, int) /* request a service channel */ #define IOCTL_AU_BUFLEN _IOR( 'U', 0xF3, int) /* return the max. buffer length for the device */ #define IOCTL_AU_RXAVAIL _IOR( 'U', 0xF4, int) /* return != 0 if Receive Data available */ #define IOCTL_AU_CONNECT _IOR( 'U', 0xF5, int) /* return != 0 if connected to a service channel */ #define IOCTL_AU_TXREADY _IOR( 'U', 0xF6, int) /* return != 0 if Transmitt channel ready to send */ /* 'U' 0xF7..0xFF reseved */ \ /*-------------------------------------------------------------------*/ /* Internal data structures */ \ /* ..................................................................*/ /* urb chain element */ struct auerchain; /* forward for circular reference */ typedef struct { struct auerchain *chain; /* pointer to the chain to which this element belongs */ urb_t * urbp; /* pointer to attached urb */ void *context; /* saved URB context */ usb_complete_t complete; /* saved URB completion function */ struct list_head list; /* to include element into a list */ } auerchainelement_t,*pauerchainelement_t; \ /* urb chain */ typedef struct auerchain { pauerchainelement_t active; /* element which is submitted to urb */ spinlock_t lock; /* protection agains interrupts */ struct list_head waiting_list; /* list of waiting elements */ struct list_head free_list; /* list of available elements */ } auerchain_t,*pauerchain_t; \ /* urb blocking completion helper struct */ typedef struct { wait_queue_head_t wqh; /* wait for completion */ unsigned int done; /* completion flag */ } auerchain_chs_t,*pauerchain_chs_t; \ /* ...................................................................*/ /* buffer element */ struct auerbufctl; /* forward */ typedef struct { char *bufp; /* reference to allocated data buffer */ unsigned int len; /* number of characters in data buffer */ unsigned int retries; /* for urb retries */ devrequest *dr; /* for setup data in control messages */ urb_t * urbp; /* USB urb */ struct auerbufctl *list; /* pointer to list */ struct list_head buff_list; /* reference to next buffer in list */ } auerbuf_t,*pauerbuf_t; \ /* buffer list control block */ typedef struct auerbufctl { spinlock_t lock; /* protection in interrupt */ struct list_head free_buff_list;/* free buffers */ struct list_head rec_buff_list; /* buffers with receive data */ } auerbufctl_t,*pauerbufctl_t; \ /* ...................................................................*/ /* service context */ struct auerscon; /* forward */ typedef void (*auer_dispatch_t)(struct auerscon*, pauerbuf_t); typedef void (*auer_disconn_t) (struct auerscon*); typedef struct auerscon { unsigned int id; /* protocol service id AUH_xxxx */ auer_dispatch_t dispatch; /* dispatch read buffer */ auer_disconn_t disconnect; /* disconnect from device, wake up all char readers */ } auerscon_t,*pauerscon_t; \ /* ...................................................................*/ /* USB device context */ typedef struct { struct semaphore mutex; /* protection in user context */ char name[16]; /* name of the /dev/usb entry */ unsigned int dtindex; /* index in the device table */ devfs_handle_t devfs; /* devfs device node */ struct usb_device * usbdev; /* USB device handle */ int open_count; /* count the number of open character channels */ char dev_desc[AUSI_DLEN];/* for storing a textual description */ unsigned int maxControlLength; /* max. Length of control paket (without header) */ urb_t * inturbp; /* interrupt urb */ char * intbufp; /* data buffer for interrupt urb */ unsigned int irqsize; /* size of interrupt endpoint 1 */ struct auerchain controlchain; /* for chaining of control messages */ auerbufctl_t bufctl; /* Buffer control for control transfers */ pauerscon_t services[AUH_TYPESIZE];/* context pointers for each service */ unsigned int version; /* Version of the device */ wait_queue_head_t bufferwait; /* wait for a control buffer */ } auerswald_t,*pauerswald_t; \ /* the global usb devfs handle */ extern devfs_handle_t usb_devfs_handle; \ /* array of pointers to our devices that are currently connected */ static pauerswald_t dev_table[AUER_MAX_DEVICES]; \ /* lock to protect the dev_table structure */ static struct semaphore dev_table_mutex; \ /* ................................................................... */ /* character device context */ typedef struct { struct semaphore mutex; /* protection in user context */ pauerswald_t auerdev; /* context pointer of assigned device */ auerbufctl_t bufctl; /* controls the buffer chain */ auerscon_t scontext; /* service context */ wait_queue_head_t readwait; /* for synchronous reading */ struct semaphore readmutex; /* protection against multiple reads */ pauerbuf_t readbuf; /* buffer held for partial reading */ unsigned int readoffset; /* current offset in readbuf */ unsigned int removed; /* is != 0 if device is removed */ } auerchar_t,*pauerchar_t; \ \ /*-------------------------------------------------------------------*/ /* Forwards */ static void auerswald_ctrlread_complete (urb_t * urb); static void auerswald_removeservice (pauerswald_t cp, pauerscon_t scp); \ \ /*-------------------------------------------------------------------*/ /* USB chain helper functions */ /* -------------------------- */ \ /* completion function for chained urbs */ static void auerchain_complete (urb_t * urb) { unsigned long flags; int result; \ /* get pointer to element and to chain */ pauerchainelement_t acep = (pauerchainelement_t) urb->context; pauerchain_t acp = acep->chain; \ /* restore original entries in urb */ urb->context = acep->context; urb->complete = acep->complete; \ dbg ("auerchain_complete called"); \ /* call original completion function NOTE: this function may lead to more urbs submitted into the chain. (no chain lock at calling complete()!) acp->active != NULL is protecting us against recursion.*/ urb->complete (urb); \ /* detach element from chain data structure */ spin_lock_irqsave (&acp->lock, flags); if (acp->active != acep) /* paranoia debug check */ dbg ("auerchain_complete: completion on non-active element called!"); else acp->active = NULL; \ /* add the used chain element to the list of free elements */ list_add_tail (&acep->list, &acp->free_list); acep = NULL; \ /* is there a new element waiting in the chain? */ if (!acp->active && !list_empty (&acp->waiting_list)) { /* yes: get the entry */ struct list_head *tmp = acp->waiting_list.next; list_del (tmp); acep = list_entry (tmp, auerchainelement_t, list); acp->active = acep; } spin_unlock_irqrestore (&acp->lock, flags); \ /* submit the new urb */ if (acep) { urb = acep->urbp; dbg ("auerchain_complete: submitting next urb from chain"); urb->status = 0; /* needed! */ result = usb_submit_urb( urb); \ /* check for submit errors */ if (result) { urb->status = result; dbg("auerchain_complete: usb_submit_urb with error code %d", result); /* and do error handling via *this* completion function (recursive) */ auerchain_complete( urb); } } else { /* simple return without submitting a new urb. The empty chain is detected with acp->active == NULL. */ }; } \ \ /* submit function for chained urbs this function may be called from completion context or from user space! early = 1 -> submit in front of chain */ static int auerchain_submit_urb_list (pauerchain_t acp, urb_t * urb, int early) { int result; unsigned long flags; pauerchainelement_t acep = NULL; \ dbg ("auerchain_submit_urb called"); \ /* try to get a chain element */ spin_lock_irqsave (&acp->lock, flags); if (!list_empty (&acp->free_list)) { /* yes: get the entry */ struct list_head *tmp = acp->free_list.next; list_del (tmp); acep = list_entry (tmp, auerchainelement_t, list); } spin_unlock_irqrestore (&acp->lock, flags); \ /* if no chain element available: return with error */ if (!acep) { return -ENOMEM; } \ /* fill in the new chain element values */ acep->chain = acp; acep->context = urb->context; acep->complete = urb->complete; acep->urbp = urb; INIT_LIST_HEAD (&acep->list); \ /* modify urb */ urb->context = acep; urb->complete = auerchain_complete; urb->status = -EINPROGRESS; /* usb_submit_urb does this, too */ \ /* add element to chain - or start it immediately */ spin_lock_irqsave (&acp->lock, flags); if (acp->active) { /* there is traffic in the chain, simple add element to chain */ if (early) { dbg ("adding new urb to head of chain"); list_add (&acep->list, &acp->waiting_list); } else { dbg ("adding new urb to end of chain"); list_add_tail (&acep->list, &acp->waiting_list); } acep = NULL; } else { /* the chain is empty. Prepare restart */ acp->active = acep; } /* Spin has to be removed before usb_submit_urb! */ spin_unlock_irqrestore (&acp->lock, flags); \ /* Submit urb if immediate restart */ if (acep) { dbg("submitting urb immediate"); urb->status = 0; /* needed! */ result = usb_submit_urb( urb); /* check for submit errors */ if (result) { urb->status = result; dbg("auerchain_submit_urb: usb_submit_urb with error code %d", result); /* and do error handling via completion function */ auerchain_complete( urb); } } \ return 0; } \ /* submit function for chained urbs this function may be called from completion context or from user space! */ static int auerchain_submit_urb (pauerchain_t acp, urb_t * urb) { return auerchain_submit_urb_list (acp, urb, 0); } \ /* cancel an urb which is submitted to the chain the result is 0 if the urb is cancelled, or -EINPROGRESS if USB_ASYNC_UNLINK is set and the function is successfully started. */ static int auerchain_unlink_urb (pauerchain_t acp, urb_t * urb) { unsigned long flags; urb_t * urbp; pauerchainelement_t acep; struct list_head *tmp; \ dbg ("auerchain_unlink_urb called"); \ /* search the chain of waiting elements */ spin_lock_irqsave (&acp->lock, flags); list_for_each (tmp, &acp->waiting_list) { acep = list_entry (tmp, auerchainelement_t, list); if (acep->urbp == urb) { list_del (tmp); urb->context = acep->context; urb->complete = acep->complete; list_add_tail (&acep->list, &acp->free_list); spin_unlock_irqrestore (&acp->lock, flags); dbg ("unlink waiting urb"); urb->status = -ENOENT; urb->complete (urb); return 0; } } /* not found. */ spin_unlock_irqrestore (&acp->lock, flags); \ /* get the active urb */ acep = acp->active; if (acep) { urbp = acep->urbp; \ /* check if we have to cancel the active urb */ if (urbp == urb) { /* note that there is a race condition between the check above and the unlink() call because of no lock. This race is harmless, because the usb module will detect the unlink() after completion. We can't use the acp->lock here because the completion function wants to grab it. */ dbg ("unlink active urb"); return usb_unlink_urb (urbp); } } \ /* not found anyway ... is some kind of success */ dbg ("urb to unlink not found in chain"); return 0; } \ /* cancel all urbs which are in the chain. this function must not be called from interrupt or completion handler. */ static void auerchain_unlink_all (pauerchain_t acp) { unsigned long flags; urb_t * urbp; pauerchainelement_t acep; \ dbg ("auerchain_unlink_all called"); \ /* clear the chain of waiting elements */ spin_lock_irqsave (&acp->lock, flags); while (!list_empty (&acp->waiting_list)) { /* get the next entry */ struct list_head *tmp = acp->waiting_list.next; list_del (tmp); acep = list_entry (tmp, auerchainelement_t, list); urbp = acep->urbp; urbp->context = acep->context; urbp->complete = acep->complete; list_add_tail (&acep->list, &acp->free_list); spin_unlock_irqrestore (&acp->lock, flags); dbg ("unlink waiting urb"); urbp->status = -ENOENT; urbp->complete (urbp); spin_lock_irqsave (&acp->lock, flags); } spin_unlock_irqrestore (&acp->lock, flags); \ /* clear the active urb */ acep = acp->active; if (acep) { urbp = acep->urbp; urbp->transfer_flags &= ~USB_ASYNC_UNLINK; dbg ("unlink active urb"); usb_unlink_urb (urbp); } } \ \ /* free the chain. this function must not be called from interrupt or completion handler. */ static void auerchain_free (pauerchain_t acp) { unsigned long flags; pauerchainelement_t acep; \ dbg ("auerchain_free called"); \ /* first, cancel all pending urbs */ auerchain_unlink_all (acp); \ /* free the elements */ spin_lock_irqsave (&acp->lock, flags); while (!list_empty (&acp->free_list)) { /* get the next entry */ struct list_head *tmp = acp->free_list.next; list_del (tmp); spin_unlock_irqrestore (&acp->lock, flags); acep = list_entry (tmp, auerchainelement_t, list); kfree (acep); spin_lock_irqsave (&acp->lock, flags); } spin_unlock_irqrestore (&acp->lock, flags); } \ \ /* Init the chain control structure */ static void auerchain_init (pauerchain_t acp) { /* init the chain data structure */ acp->active = NULL; spin_lock_init (&acp->lock); INIT_LIST_HEAD (&acp->waiting_list); INIT_LIST_HEAD (&acp->free_list); } \ /* setup a chain. It is assumed that there is no concurrency while setting up the chain requirement: auerchain_init() */ static int auerchain_setup (pauerchain_t acp, unsigned int numElements) { pauerchainelement_t acep; \ dbg ("auerchain_setup called with %d elements", numElements); \ /* fill the list of free elements */ for (;numElements; numElements--) { acep = (pauerchainelement_t) kmalloc (sizeof (auerchainelement_t), GFP_KERNEL); if (!acep) goto ac_fail; memset (acep, 0, sizeof (auerchainelement_t)); INIT_LIST_HEAD (&acep->list); list_add_tail (&acep->list, &acp->free_list); } return 0; \ ac_fail:/* free the elements */ while (!list_empty (&acp->free_list)) { /* get the next entry */ struct list_head *tmp = acp->free_list.next; list_del (tmp); acep = list_entry (tmp, auerchainelement_t, list); kfree (acep); } return -ENOMEM; } \ \ /* completion handler for synchronous chained URBs */ static void auerchain_blocking_completion (urb_t *urb) { pauerchain_chs_t pchs = (pauerchain_chs_t)urb->context; pchs->done = 1; wmb(); wake_up (&pchs->wqh); } \ \ /* Starts chained urb and waits for completion or timeout */ static int auerchain_start_wait_urb (pauerchain_t acp, urb_t *urb, int timeout, int* actual_length) { DECLARE_WAITQUEUE (wait, current); auerchain_chs_t chs; int status; \ dbg ("auerchain_start_wait_urb called"); init_waitqueue_head (&chs.wqh); chs.done = 0; \ set_current_state (TASK_UNINTERRUPTIBLE); add_wait_queue (&chs.wqh, &wait); urb->context = &chs; status = auerchain_submit_urb (acp, urb); if (status) { /* something went wrong */ set_current_state (TASK_RUNNING); remove_wait_queue (&chs.wqh, &wait); return status; } \ while (timeout && !chs.done) { timeout = schedule_timeout (timeout); set_current_state(TASK_UNINTERRUPTIBLE); rmb(); } \ set_current_state (TASK_RUNNING); remove_wait_queue (&chs.wqh, &wait); \ if (!timeout && !chs.done) { if (urb->status != -EINPROGRESS) { /* No callback?!! */ dbg ("auerchain_start_wait_urb: raced timeout"); status = urb->status; } else { dbg ("auerchain_start_wait_urb: timeout"); auerchain_unlink_urb (acp, urb); /* remove urb safely */ status = -ETIMEDOUT; } } else status = urb->status; \ if (actual_length) *actual_length = urb->actual_length; \ return status; } \ \ /* auerchain_control_msg - Builds a control urb, sends it off and waits for completion acp: pointer to the auerchain dev: pointer to the usb device to send the message to pipe: endpoint "pipe" to send the message to request: USB message request value requesttype: USB message request type value value: USB message value index: USB message index value data: pointer to the data to send size: length in bytes of the data to send timeout: time to wait for the message to complete before timing out (if 0 the wait is forever) \ This function sends a simple control message to a specified endpoint and waits for the message to complete, or timeout. \ If successful, it returns the transfered length, othwise a negative error number. \ Don't use this function from within an interrupt context, like a bottom half handler. If you need a asyncronous message, or need to send a message from within interrupt context, use auerchain_submit_urb() */ static int auerchain_control_msg (pauerchain_t acp, struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout) { int ret; devrequest *dr; urb_t *urb; int length; \ dbg ("auerchain_control_msg"); dr = kmalloc (sizeof (devrequest), GFP_KERNEL); if (!dr) return -ENOMEM; urb = usb_alloc_urb (0); if (!urb) { kfree (dr); return -ENOMEM; } \ dr->requesttype = requesttype; dr->request = request; dr->value = cpu_to_le16 (value); dr->index = cpu_to_le16 (index); dr->length = cpu_to_le16 (size); \ FILL_CONTROL_URB (urb, dev, pipe, (unsigned char*)dr, data, size, /* build urb */ (usb_complete_t)auerchain_blocking_completion,0); ret = auerchain_start_wait_urb (acp, urb, timeout, &length); \ usb_free_urb (urb); kfree (dr); \ if (ret < 0) return ret; else return length; } \ \ /*-------------------------------------------------------------------*/ /* Buffer List helper functions */ \ /* free a single auerbuf */ static void auerbuf_free (pauerbuf_t bp) { if (bp->bufp) { kfree (bp->bufp); } if (bp->dr) { kfree (bp->dr); } if (bp->urbp) { usb_free_urb (bp->urbp); } kfree (bp); } \ /* free the buffers from an auerbuf list */ static void auerbuf_free_list (struct list_head *q) { struct list_head *tmp; struct list_head *p; pauerbuf_t bp; \ dbg ("auerbuf_free_list"); for (p = q->next; p != q;) { bp = list_entry (p, auerbuf_t, buff_list); tmp = p->next; list_del (p); p = tmp; auerbuf_free (bp); } } \ /* init the members of a list control block */ static void auerbuf_init (pauerbufctl_t bcp) { dbg ("auerbuf_init"); spin_lock_init (&bcp->lock); INIT_LIST_HEAD (&bcp->free_buff_list); INIT_LIST_HEAD (&bcp->rec_buff_list); } \ /* free all buffers from an auerbuf chain */ static void auerbuf_free_buffers (pauerbufctl_t bcp) { unsigned long flags; dbg ("auerbuf_free_buffers"); \ spin_lock_irqsave (&bcp->lock, flags); \ auerbuf_free_list (&bcp->free_buff_list); auerbuf_free_list (&bcp->rec_buff_list); \ spin_unlock_irqrestore (&bcp->lock, flags); } \ /* setup a list of buffers */ /* requirement: auerbuf_init() */ static int auerbuf_setup (pauerbufctl_t bcp, unsigned int numElements, unsigned int bufsize) { pauerbuf_t bep; \ dbg ("auerbuf_setup called with %d elements of %d bytes", numElements, bufsize); \ /* fill the list of free elements */ for (;numElements; numElements--) { bep = (pauerbuf_t) kmalloc (sizeof (auerbuf_t), GFP_KERNEL); if (!bep) goto bl_fail; memset (bep, 0, sizeof (auerbuf_t)); bep->list = bcp; INIT_LIST_HEAD (&bep->buff_list); bep->bufp = (char *) kmalloc (bufsize, GFP_KERNEL); if (!bep->bufp) goto bl_fail; bep->dr = (devrequest *) kmalloc (sizeof (devrequest), GFP_KERNEL); if (!bep->dr) goto bl_fail; bep->urbp = usb_alloc_urb (0); if (!bep->urbp) goto bl_fail; list_add_tail (&bep->buff_list, &bcp->free_buff_list); } return 0; \ bl_fail:/* not enought memory. Free allocated elements */ dbg ("auerbuf_setup: no more memory"); auerbuf_free_buffers (bcp); return -ENOMEM; } \ /* insert a used buffer into the free list */ static void auerbuf_releasebuf( pauerbuf_t bp) { unsigned long flags; pauerbufctl_t bcp = bp->list; bp->retries = 0; \ dbg ("auerbuf_releasebuf called"); spin_lock_irqsave (&bcp->lock, flags); list_add_tail (&bp->buff_list, &bcp->free_buff_list); spin_unlock_irqrestore (&bcp->lock, flags); } \ \ /*-------------------------------------------------------------------*/ /* Completion handlers */ \ /* Values of urb->status or results of usb_submit_urb(): 0 Initial, OK -EINPROGRESS during submission until end -ENOENT if urb is unlinked -ETIMEDOUT Transfer timed out, NAK -ENOMEM Memory Overflow -ENODEV Specified USB-device or bus doesn't exist -ENXIO URB already queued -EINVAL a) Invalid transfer type specified (or not supported) b) Invalid interrupt interval (0n256) -EAGAIN a) Specified ISO start frame too early b) (using ISO-ASAP) Too much scheduled for the future wait some time and try again. -EFBIG Too much ISO frames requested (currently uhci900) -EPIPE Specified pipe-handle/Endpoint is already stalled -EMSGSIZE Endpoint message size is zero, do interface/alternate setting -EPROTO a) Bitstuff error b) Unknown USB error -EILSEQ CRC mismatch -ENOSR Buffer error -EREMOTEIO Short packet detected -EXDEV ISO transfer only partially completed look at individual frame status for details -EINVAL ISO madness, if this happens: Log off and go home -EOVERFLOW babble */ \ /* check if a status code allows a retry */ static int auerswald_status_retry (int status) { switch (status) { case 0: case -ETIMEDOUT: case -EOVERFLOW: case -EAGAIN: case -EPIPE: case -EPROTO: case -EILSEQ: case -ENOSR: case -EREMOTEIO: return 1; /* do a retry */ } return 0; /* no retry possible */ } \ /* Completion of asynchronous write block */ static void auerchar_ctrlwrite_complete (urb_t * urb) { pauerbuf_t bp = (pauerbuf_t) urb->context; pauerswald_t cp = ((pauerswald_t)((char *)(bp->list)-(unsigned long)(&((pauerswald_t)0)->bufctl))); dbg ("auerchar_ctrlwrite_complete called"); \ /* reuse the buffer */ auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); } \ /* Completion handler for dummy retry packet */ static void auerswald_ctrlread_wretcomplete (urb_t * urb) { pauerbuf_t bp = (pauerbuf_t) urb->context; pauerswald_t cp; int ret; dbg ("auerswald_ctrlread_wretcomplete called"); dbg ("complete with status: %d", urb->status); cp = ((pauerswald_t)((char *)(bp->list)-(unsigned long)(&((pauerswald_t)0)->bufctl))); \ /* check if it is possible to advance */ if (!auerswald_status_retry (urb->status) || !cp->usbdev) { /* reuse the buffer */ err ("control dummy: transmission error %d, can not retry", urb->status); auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); return; } \ /* fill the control message */ bp->dr->requesttype = AUT_RREQ; bp->dr->request = AUV_RBLOCK; bp->dr->length = bp->dr->value; /* temporary stored */ bp->dr->value = cpu_to_le16 (1); /* Retry Flag */ /* bp->dr->index = channel id; remains */ FILL_CONTROL_URB (bp->urbp, cp->usbdev, usb_rcvctrlpipe (cp->usbdev, 0), (unsigned char*)bp->dr, bp->bufp, le16_to_cpu (bp->dr->length), (usb_complete_t)auerswald_ctrlread_complete,bp); \ /* submit the control msg as next paket */ ret = auerchain_submit_urb_list (&cp->controlchain, bp->urbp, 1); if (ret) { dbg ("auerswald_ctrlread_complete: nonzero result of auerchain_submit_urb_list %d", ret); bp->urbp->status = ret; auerswald_ctrlread_complete (bp->urbp); } } \ /* completion handler for receiving of control messages */ static void auerswald_ctrlread_complete (urb_t * urb) { unsigned int serviceid; pauerswald_t cp; pauerscon_t scp; pauerbuf_t bp = (pauerbuf_t) urb->context; int ret; dbg ("auerswald_ctrlread_complete called"); \ cp = ((pauerswald_t)((char *)(bp->list)-(unsigned long)(&((pauerswald_t)0)->bufctl))); \ /* check if there is valid data in this urb */ if (urb->status) { dbg ("complete with non-zero status: %d", urb->status); /* should we do a retry? */ if (!auerswald_status_retry (urb->status) || !cp->usbdev || (cp->version < AUV_RETRY) || (bp->retries >= AU_RETRIES)) { /* reuse the buffer */ err ("control read: transmission error %d, can not retry", urb->status); auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); return; } bp->retries++; dbg ("Retry count = %d", bp->retries); /* send a long dummy control-write-message to allow device firmware to react */ bp->dr->requesttype = AUT_WREQ; bp->dr->request = AUV_DUMMY; bp->dr->value = bp->dr->length; /* temporary storage */ // bp->dr->index channel ID remains bp->dr->length = cpu_to_le16 (32); /* >= 8 bytes */ FILL_CONTROL_URB (bp->urbp, cp->usbdev, usb_sndctrlpipe (cp->usbdev, 0), (unsigned char*)bp->dr, bp->bufp, 32, (usb_complete_t)auerswald_ctrlread_wretcomplete,bp); \ /* submit the control msg as next paket */ ret = auerchain_submit_urb_list (&cp->controlchain, bp->urbp, 1); if (ret) { dbg ("auerswald_ctrlread_complete: nonzero result of auerchain_submit_urb_list %d", ret); bp->urbp->status = ret; auerswald_ctrlread_wretcomplete (bp->urbp); } return; } \ /* get the actual bytecount (incl. headerbyte) */ bp->len = urb->actual_length; serviceid = bp->bufp[0] & AUH_TYPEMASK; dbg ("Paket with serviceid %d and %d bytes received", serviceid, bp->len); \ /* dispatch the paket */ scp = cp->services[serviceid]; if (scp) { /* look, Ma, a listener! */ scp->dispatch (scp, bp); } \ /* release the paket */ auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); } \ /*-------------------------------------------------------------------*/ /* Handling of Interrupt Endpoint */ /* This interrupt Endpoint is used to inform the host about waiting messages from the USB device. */ /* int completion handler. */ static void auerswald_int_complete (urb_t * urb) { unsigned long flags; unsigned int channelid; unsigned int bytecount; int ret; pauerbuf_t bp = NULL; pauerswald_t cp = (pauerswald_t) urb->context; \ dbg ("auerswald_int_complete called"); \ /* do not respond to an error condition */ if (urb->status != 0) { dbg ("nonzero URB status = %d", urb->status); return; } \ /* check if all needed data was received */ if (urb->actual_length < AU_IRQMINSIZE) { dbg ("invalid data length received: %d bytes", urb->actual_length); return; } \ /* check the command code */ if (cp->intbufp[0] != AU_IRQCMDID) { dbg ("invalid command received: %d", cp->intbufp[0]); return; } \ /* check the command type */ if (cp->intbufp[1] != AU_BLOCKRDY) { dbg ("invalid command type received: %d", cp->intbufp[1]); return; } \ /* now extract the information */ channelid = cp->intbufp[2]; bytecount = le16_to_cpup (&cp->intbufp[3]); \ /* check the channel id */ if (channelid >= AUH_TYPESIZE) { dbg ("invalid channel id received: %d", channelid); return; } \ /* check the byte count */ if (bytecount > (cp->maxControlLength+AUH_SIZE)) { dbg ("invalid byte count received: %d", bytecount); return; } dbg ("Service Channel = %d", channelid); dbg ("Byte Count = %d", bytecount); \ /* get a buffer for the next data paket */ spin_lock_irqsave (&cp->bufctl.lock, flags); if (!list_empty (&cp->bufctl.free_buff_list)) { /* yes: get the entry */ struct list_head *tmp = cp->bufctl.free_buff_list.next; list_del (tmp); bp = list_entry (tmp, auerbuf_t, buff_list); } spin_unlock_irqrestore (&cp->bufctl.lock, flags); \ /* if no buffer available: skip it */ if (!bp) { dbg ("auerswald_int_complete: no data buffer available"); /* can we do something more? This is a big problem: if this int packet is ignored, the device will wait forever and not signal any more data. The only real solution is: having enought buffers! Or perhaps temporary disabling the int endpoint? */ return; } \ /* fill the control message */ bp->dr->requesttype = AUT_RREQ; bp->dr->request = AUV_RBLOCK; bp->dr->value = cpu_to_le16 (0); bp->dr->index = cpu_to_le16 (channelid | AUH_DIRECT | AUH_UNSPLIT); bp->dr->length = cpu_to_le16 (bytecount); FILL_CONTROL_URB (bp->urbp, cp->usbdev, usb_rcvctrlpipe (cp->usbdev, 0), (unsigned char*)bp->dr, bp->bufp, bytecount, (usb_complete_t)auerswald_ctrlread_complete,bp); \ /* submit the control msg */ ret = auerchain_submit_urb (&cp->controlchain, bp->urbp); if (ret) { dbg ("auerswald_int_complete: nonzero result of auerchain_submit_urb %d", ret); bp->urbp->status = ret; auerswald_ctrlread_complete( bp->urbp); /* here applies the same problem as above: device locking! */ } } \ /* int memory deallocation NOTE: no mutex please! */ static void auerswald_int_free (pauerswald_t cp) { if (cp->inturbp) { usb_free_urb (cp->inturbp); cp->inturbp = NULL; } if (cp->intbufp) { kfree (cp->intbufp); cp->intbufp = NULL; } } \ /* This function is called to activate the interrupt endpoint. This function returns 0 if successfull or an error code. NOTE: no mutex please! */ static int auerswald_int_open (pauerswald_t cp) { int ret; struct usb_endpoint_descriptor *ep; int irqsize; dbg ("auerswald_int_open"); \ ep = usb_epnum_to_ep_desc (cp->usbdev, USB_DIR_IN | AU_IRQENDP); if (!ep) { ret = -EFAULT; goto intoend; } irqsize = ep->wMaxPacketSize; cp->irqsize = irqsize; \ /* allocate the urb and data buffer */ if (!cp->inturbp) { cp->inturbp = usb_alloc_urb (0); if (!cp->inturbp) { ret = -ENOMEM; goto intoend; } } if (!cp->intbufp) { cp->intbufp = (char *) kmalloc (irqsize, GFP_KERNEL); if (!cp->intbufp) { ret = -ENOMEM; goto intoend; } } /* setup urb */ FILL_INT_URB (cp->inturbp, cp->usbdev, usb_rcvintpipe (cp->usbdev,AU_IRQENDP), cp->intbufp, irqsize, auerswald_int_complete, cp, ep->bInterval); /* start the urb */ cp->inturbp->status = 0; /* needed! */ ret = usb_submit_urb (cp->inturbp); \ intoend: if (ret < 0) { /* activation of interrupt endpoint has failed. Now clean up. */ dbg ("auerswald_int_open: activation of int endpoint failed"); \ /* deallocate memory */ auerswald_int_free (cp); } return ret; } \ /* This function is called to deactivate the interrupt endpoint. This function returns 0 if successfull or an error code. NOTE: no mutex please! */ static int auerswald_int_release (pauerswald_t cp) { int ret = 0; dbg ("auerswald_int_release"); \ /* stop the int endpoint */ if (cp->inturbp) { ret = usb_unlink_urb (cp->inturbp); if (ret) dbg ("nonzero int unlink result received: %d", ret); } \ /* deallocate memory */ auerswald_int_free (cp); \ return ret; } \ /* --------------------------------------------------------------------- */ /* Helper functions */ \ /* wake up waiting readers */ static void auerchar_disconnect (pauerscon_t scp) { pauerchar_t ccp = ((pauerchar_t)((char *)(scp)-(unsigned long)(&((pauerchar_t)0)->scontext))); dbg ("auerchar_disconnect called"); ccp->removed = 1; wake_up (&ccp->readwait); } \ \ /* dispatch a read paket to a waiting character device */ static void auerchar_ctrlread_dispatch (pauerscon_t scp, pauerbuf_t bp) { unsigned long flags; pauerchar_t ccp; pauerbuf_t newbp = NULL; char * charp; dbg ("auerchar_ctrlread_dispatch called"); ccp = ((pauerchar_t)((char *)(scp)-(unsigned long)(&((pauerchar_t)0)->scontext))); \ /* get a read buffer from character device context */ spin_lock_irqsave (&ccp->bufctl.lock, flags); if (!list_empty (&ccp->bufctl.free_buff_list)) { /* yes: get the entry */ struct list_head *tmp = ccp->bufctl.free_buff_list.next; list_del (tmp); newbp = list_entry (tmp, auerbuf_t, buff_list); } spin_unlock_irqrestore (&ccp->bufctl.lock, flags); \ if (!newbp) { dbg ("No read buffer available, discard paket!"); return; /* no buffer, no dispatch */ } \ /* copy information to new buffer element (all buffers have the same length) */ charp = newbp->bufp; newbp->bufp = bp->bufp; bp->bufp = charp; newbp->len = bp->len; \ /* insert new buffer in read list */ spin_lock_irqsave (&ccp->bufctl.lock, flags); list_add_tail (&newbp->buff_list, &ccp->bufctl.rec_buff_list); spin_unlock_irqrestore (&ccp->bufctl.lock, flags); dbg ("read buffer appended to rec_list"); \ /* wake up pending synchronous reads */ wake_up (&ccp->readwait); } \ \ /* Delete an auerswald driver context */ static void auerswald_delete( pauerswald_t cp) { dbg( "auerswald_delete"); if (cp == NULL) return; \ /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); \ /* Cleaning up */ auerswald_int_release (cp); auerchain_free (&cp->controlchain); auerbuf_free_buffers (&cp->bufctl); \ /* release the memory */ kfree( cp); } \ \ /* Delete an auerswald character context */ static void auerchar_delete( pauerchar_t ccp) { dbg ("auerchar_delete"); if (ccp == NULL) return; \ /* wake up pending synchronous reads */ ccp->removed = 1; wake_up (&ccp->readwait); \ /* remove the read buffer */ if (ccp->readbuf) { auerbuf_releasebuf (ccp->readbuf); ccp->readbuf = NULL; } \ /* remove the character buffers */ auerbuf_free_buffers (&ccp->bufctl); \ /* release the memory */ kfree( ccp); } \ \ /* add a new service to the device scp->id must be set! return: 0 if OK, else error code */ static int auerswald_addservice (pauerswald_t cp, pauerscon_t scp) { int ret; \ /* is the device available? */ if (!cp->usbdev) { dbg ("usbdev == NULL"); return -EIO; /*no: can not add a service, sorry*/ } \ /* is the service available? */ if (cp->services[scp->id]) { dbg ("service is busy"); return -EBUSY; } \ /* device is available, service is free */ cp->services[scp->id] = scp; \ /* register service in device */ ret = auerchain_control_msg( &cp->controlchain, /* pointer to control chain */ cp->usbdev, /* pointer to device */ usb_sndctrlpipe (cp->usbdev, 0), /* pipe to control endpoint */ AUV_CHANNELCTL, /* USB message request value */ AUT_WREQ, /* USB message request type value */ 0x01, /* open USB message value */ scp->id, /* USB message index value */ NULL, /* pointer to the data to send */ 0, /* length in bytes of the data to send */ HZ * 2); /* time to wait for the message to complete before timing out */ if (ret < 0) { dbg ("auerswald_addservice: auerchain_control_msg returned error code %d", ret); /* undo above actions */ cp->services[scp->id] = NULL; return ret; } \ dbg ("auerswald_addservice: channel open OK"); return 0; } \ \ /* remove a service from the the device scp->id must be set! */ static void auerswald_removeservice (pauerswald_t cp, pauerscon_t scp) { dbg ("auerswald_removeservice called"); \ /* check if we have a service allocated */ if (scp->id == AUH_UNASSIGNED) return; \ /* If there is a device: close the channel */ if (cp->usbdev) { /* Close the service channel inside the device */ int ret = auerchain_control_msg( &cp->controlchain, /* pointer to control chain */ cp->usbdev, /* pointer to device */ usb_sndctrlpipe (cp->usbdev, 0), /* pipe to control endpoint */ AUV_CHANNELCTL, /* USB message request value */ AUT_WREQ, /* USB message request type value */ 0x00, // close /* USB message value */ scp->id, /* USB message index value */ NULL, /* pointer to the data to send */ 0, /* length in bytes of the data to send */ HZ * 2); /* time to wait for the message to complete before timing out */ if (ret < 0) { dbg ("auerswald_removeservice: auerchain_control_msg returned error code %d", ret); } else { dbg ("auerswald_removeservice: channel close OK"); } } \ /* remove the service from the device */ cp->services[scp->id] = NULL; scp->id = AUH_UNASSIGNED; } \ \ /* --------------------------------------------------------------------- */ /* Char device functions */ \ /* Open a new character device */ static int auerchar_open (struct inode *inode, struct file *file) { int dtindex = MINOR(inode->i_rdev) - AUER_MINOR_BASE; pauerswald_t cp = NULL; pauerchar_t ccp = NULL; int ret; \ /* minor number in range? */ if ((dtindex < 0) || (dtindex >= AUER_MAX_DEVICES)) { return -ENODEV; } /* usb device available? */ if (down_interruptible (&dev_table_mutex)) { return -ERESTARTSYS; } cp = dev_table[dtindex]; if (cp == NULL) { up (&dev_table_mutex); return -ENODEV; } if (down_interruptible (&cp->mutex)) { up (&dev_table_mutex); return -ERESTARTSYS; } up (&dev_table_mutex); \ /* we have access to the device. Now lets allocate memory */ ccp = (pauerchar_t) kmalloc(sizeof(auerchar_t), GFP_KERNEL); if (ccp == NULL) { err ("out of memory"); ret = -ENOMEM; goto ofail; } \ /* Initialize device descriptor */ memset( ccp, 0, sizeof(auerchar_t)); init_MUTEX( &ccp->mutex); init_MUTEX( &ccp->readmutex); auerbuf_init (&ccp->bufctl); ccp->scontext.id = AUH_UNASSIGNED; ccp->scontext.dispatch = auerchar_ctrlread_dispatch; ccp->scontext.disconnect = auerchar_disconnect; init_waitqueue_head (&ccp->readwait); \ ret = auerbuf_setup (&ccp->bufctl, AU_RBUFFERS, cp->maxControlLength+AUH_SIZE); if (ret) { goto ofail; } \ cp->open_count++; ccp->auerdev = cp; dbg("open %s as /dev/usb/%s", cp->dev_desc, cp->name); up (&cp->mutex); \ /* file IO stuff */ file->f_pos = 0; file->private_data = ccp; return 0; \ /* Error exit */ ofail: up (&cp->mutex); auerchar_delete (ccp); return ret; } \ \ /* IOCTL functions */ static int auerchar_ioctl (struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) { pauerchar_t ccp = (pauerchar_t) file->private_data; int ret = 0; audevinfo_t devinfo; pauerswald_t cp = NULL; unsigned int u; dbg ("ioctl"); \ /* get the mutexes */ if (down_interruptible (&ccp->mutex)) { return -ERESTARTSYS; } cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); return -ENODEV; } if (down_interruptible (&cp->mutex)) { up(&ccp->mutex); return -ERESTARTSYS; } \ /* Check for removal */ if (!cp->usbdev) { up(&cp->mutex); up(&ccp->mutex); return -ENODEV; } \ switch (cmd) { \ /* return != 0 if Transmitt channel ready to send */ case IOCTL_AU_TXREADY: dbg ("IOCTL_AU_TXREADY"); u = ccp->auerdev && (ccp->scontext.id != AUH_UNASSIGNED) && !list_empty (&cp->bufctl.free_buff_list); ret = put_user (u, (unsigned int *) arg); break; \ /* return != 0 if connected to a service channel */ case IOCTL_AU_CONNECT: dbg ("IOCTL_AU_CONNECT"); u = (ccp->scontext.id != AUH_UNASSIGNED); ret = put_user (u, (unsigned int *) arg); break; \ /* return != 0 if Receive Data available */ case IOCTL_AU_RXAVAIL: dbg ("IOCTL_AU_RXAVAIL"); if (ccp->scontext.id == AUH_UNASSIGNED) { ret = -EIO; break; } u = 0; /* no data */ if (ccp->readbuf) { int restlen = ccp->readbuf->len - ccp->readoffset; if (restlen > 0) u = 1; } if (!u) { if (!list_empty (&ccp->bufctl.rec_buff_list)) { u = 1; } } ret = put_user (u, (unsigned int *) arg); break; \ /* return the max. buffer length for the device */ case IOCTL_AU_BUFLEN: dbg ("IOCTL_AU_BUFLEN"); u = cp->maxControlLength; ret = put_user (u, (unsigned int *) arg); break; \ /* requesting a service channel */ case IOCTL_AU_SERVREQ: dbg ("IOCTL_AU_SERVREQ"); /* requesting a service means: release the previous one first */ auerswald_removeservice (cp, &ccp->scontext); /* get the channel number */ ret = get_user (u, (unsigned int *) arg); if (ret) { break; } if ((u < AUH_FIRSTUSERCH) || (u >= AUH_TYPESIZE)) { ret = -EIO; break; } dbg ("auerchar service request parameters are ok"); ccp->scontext.id = u; \ /* request the service now */ ret = auerswald_addservice (cp, &ccp->scontext); if (ret) { /* no: revert service entry */ ccp->scontext.id = AUH_UNASSIGNED; } break; \ /* get a string descriptor for the device */ case IOCTL_AU_DEVINFO: dbg ("IOCTL_AU_DEVINFO"); if (copy_from_user (&devinfo, (void *) arg, sizeof (audevinfo_t))) { ret = -EFAULT; break; } u = strlen(cp->dev_desc)+1; if (u > devinfo.bsize) { u = devinfo.bsize; } ret = copy_to_user(devinfo.buf, cp->dev_desc, u); break; \ /* get the max. string descriptor length */ case IOCTL_AU_SLEN: dbg ("IOCTL_AU_SLEN"); u = AUSI_DLEN; ret = put_user (u, (unsigned int *) arg); break; \ default: dbg ("IOCTL_AU_UNKNOWN"); ret = -ENOIOCTLCMD; break; } /* release the mutexes */ up(&cp->mutex); up(&ccp->mutex); return ret; } \ \ /* Seek is not supported */ static loff_t auerchar_llseek (struct file *file, loff_t offset, int origin) { dbg ("auerchar_seek"); return -ESPIPE; } \ \ /* Read data from the device */ static ssize_t auerchar_read (struct file *file, char *buf, size_t count, loff_t * ppos) { unsigned long flags; pauerchar_t ccp = (pauerchar_t) file->private_data; pauerbuf_t bp = NULL; wait_queue_t wait; \ dbg ("auerchar_read"); \ /* Error checking */ if (!ccp) return -EIO; if (*ppos) return -ESPIPE; if (count == 0) return 0; \ /* get the mutex */ if (down_interruptible (&ccp->mutex)) return -ERESTARTSYS; \ /* Can we expect to read something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); return -EIO; } \ /* only one reader per device allowed */ if (down_interruptible (&ccp->readmutex)) { up (&ccp->mutex); return -ERESTARTSYS; } \ /* read data from readbuf, if available */ doreadbuf: bp = ccp->readbuf; if (bp) { /* read the maximum bytes */ int restlen = bp->len - ccp->readoffset; if (restlen < 0) restlen = 0; if (count > restlen) count = restlen; if (count) { if (copy_to_user (buf, bp->bufp+ccp->readoffset, count)) { dbg ("auerswald_read: copy_to_user failed"); up (&ccp->readmutex); up (&ccp->mutex); return -EFAULT; } } /* advance the read offset */ ccp->readoffset += count; restlen -= count; // reuse the read buffer if (restlen <= 0) { auerbuf_releasebuf (bp); ccp->readbuf = NULL; } /* return with number of bytes read */ if (count) { up (&ccp->readmutex); up (&ccp->mutex); return count; } } \ /* a read buffer is not available. Try to get the next data block. */ doreadlist: /* Preparing for sleep */ init_waitqueue_entry (&wait, current); set_current_state (TASK_INTERRUPTIBLE); add_wait_queue (&ccp->readwait, &wait); \ bp = NULL; spin_lock_irqsave (&ccp->bufctl.lock, flags); if (!list_empty (&ccp->bufctl.rec_buff_list)) { /* yes: get the entry */ struct list_head *tmp = ccp->bufctl.rec_buff_list.next; list_del (tmp); bp = list_entry (tmp, auerbuf_t, buff_list); } spin_unlock_irqrestore (&ccp->bufctl.lock, flags); \ /* have we got data? */ if (bp) { ccp->readbuf = bp; ccp->readoffset = AUH_SIZE; /* for headerbyte */ set_current_state (TASK_RUNNING); remove_wait_queue (&ccp->readwait, &wait); goto doreadbuf; /* now we can read! */ } \ /* no data available. Should we wait? */ if (file->f_flags & O_NONBLOCK) { dbg ("No read buffer available, returning -EAGAIN"); set_current_state (TASK_RUNNING); remove_wait_queue (&ccp->readwait, &wait); up (&ccp->readmutex); up (&ccp->mutex); return -EAGAIN; /* nonblocking, no data available */ } \ /* yes, we should wait! */ up (&ccp->mutex); /* allow other operations while we wait */ schedule(); remove_wait_queue (&ccp->readwait, &wait); if (signal_pending (current)) { /* waked up by a signal */ up (&ccp->readmutex); return -ERESTARTSYS; } \ /* Anything left to read? */ if ((ccp->scontext.id == AUH_UNASSIGNED) || ccp->removed) { up (&ccp->readmutex); return -EIO; } \ if (down_interruptible (&ccp->mutex)) { up (&ccp->readmutex); return -ERESTARTSYS; } \ /* try to read the incomming data again */ goto doreadlist; } \ \ /* Write a data block into the right service channel of the device */ static ssize_t auerchar_write (struct file *file, const char *buf, size_t len, loff_t *ppos) { pauerchar_t ccp = (pauerchar_t) file->private_data; pauerswald_t cp = NULL; pauerbuf_t bp; unsigned long flags; int ret; wait_queue_t wait; \ dbg ("auerchar_write %d bytes", len); \ /* Error checking */ if (!ccp) return -EIO; if (*ppos) return -ESPIPE; if (len == 0) return 0; \ write_again: /* get the mutex */ if (down_interruptible (&ccp->mutex)) return -ERESTARTSYS; \ /* Can we expect to write something? */ if (ccp->scontext.id == AUH_UNASSIGNED) { up (&ccp->mutex); return -EIO; } \ cp = ccp->auerdev; if (!cp) { up (&ccp->mutex); return -ERESTARTSYS; } if (down_interruptible (&cp->mutex)) { up (&ccp->mutex); return -ERESTARTSYS; } if (!cp->usbdev) { up (&cp->mutex); up (&ccp->mutex); return -EIO; } /* Prepare for sleep */ init_waitqueue_entry (&wait, current); set_current_state (TASK_INTERRUPTIBLE); add_wait_queue (&cp->bufferwait, &wait); \ /* Try to get a buffer from the device pool. We can't use a buffer from ccp->bufctl because the write command will last beond a release() */ bp = NULL; spin_lock_irqsave (&cp->bufctl.lock, flags); if (!list_empty (&cp->bufctl.free_buff_list)) { /* yes: get the entry */ struct list_head *tmp = cp->bufctl.free_buff_list.next; list_del (tmp); bp = list_entry (tmp, auerbuf_t, buff_list); } spin_unlock_irqrestore (&cp->bufctl.lock, flags); \ /* are there any buffers left? */ if (!bp) { up (&cp->mutex); up (&ccp->mutex); \ /* NONBLOCK: don't wait */ if (file->f_flags & O_NONBLOCK) { set_current_state (TASK_RUNNING); remove_wait_queue (&cp->bufferwait, &wait); return -EAGAIN; } \ /* BLOCKING: wait */ schedule(); remove_wait_queue (&cp->bufferwait, &wait); if (signal_pending (current)) { /* waked up by a signal */ return -ERESTARTSYS; } goto write_again; } else { set_current_state (TASK_RUNNING); remove_wait_queue (&cp->bufferwait, &wait); } \ /* protect against too big write requests */ if (len > cp->maxControlLength) len = cp->maxControlLength; \ /* Fill the buffer */ if (copy_from_user ( bp->bufp+AUH_SIZE, buf, len)) { dbg ("copy_from_user failed"); auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); up (&cp->mutex); up (&ccp->mutex); return -EIO; } \ /* set the header byte */ *(bp->bufp) = ccp->scontext.id | AUH_DIRECT | AUH_UNSPLIT; \ /* Set the transfer Parameters */ bp->len = len+AUH_SIZE; bp->dr->requesttype = AUT_WREQ; bp->dr->request = AUV_WBLOCK; bp->dr->value = cpu_to_le16 (0); bp->dr->index = cpu_to_le16 (ccp->scontext.id | AUH_DIRECT | AUH_UNSPLIT); bp->dr->length = cpu_to_le16 (len+AUH_SIZE); FILL_CONTROL_URB (bp->urbp, cp->usbdev, usb_sndctrlpipe (cp->usbdev, 0), (unsigned char*)bp->dr, bp->bufp, len+AUH_SIZE, auerchar_ctrlwrite_complete, bp); /* up we go */ ret = auerchain_submit_urb (&cp->controlchain, bp->urbp); up (&cp->mutex); if (ret) { dbg ("auerchar_write: nonzero result of auerchain_submit_urb %d", ret); auerbuf_releasebuf (bp); /* Wake up all processes waiting for a buffer */ wake_up (&cp->bufferwait); up (&ccp->mutex); return -EIO; } else { dbg ("auerchar_write: Write OK"); up (&ccp->mutex); return len; } } \ \ /* Close a character device */ static int auerchar_release (struct inode *inode, struct file *file) { pauerchar_t ccp = (pauerchar_t) file->private_data; pauerswald_t cp; dbg("release"); \ /* get the mutexes */ if (down_interruptible (&ccp->mutex)) { return -ERESTARTSYS; } cp = ccp->auerdev; if (cp) { if (down_interruptible (&cp->mutex)) { up (&ccp->mutex); return -ERESTARTSYS; } /* remove an open service */ auerswald_removeservice (cp, &ccp->scontext); /* detach from device */ if ((--cp->open_count <= 0) && (cp->usbdev == NULL)) { /* usb device waits for removal */ up (&cp->mutex); auerswald_delete (cp); } else { up (&cp->mutex); } cp = NULL; ccp->auerdev = NULL; } up (&ccp->mutex); auerchar_delete (ccp); \ return 0; } \ \ /*----------------------------------------------------------------------*/ /* File operation structure */ static struct file_operations auerswald_fops = { owner: THIS_MODULE, llseek: auerchar_llseek, read: auerchar_read, write: auerchar_write, ioctl: auerchar_ioctl, open: auerchar_open, release: auerchar_release, }; \ \ /* --------------------------------------------------------------------- */ /* Special USB driver functions */ \ /* Probe if this driver wants to serve an USB device \ This entry point is called whenever a new device is attached to the bus. Then the device driver has to create a new instance of its internal data structures for the new device. \ The dev argument specifies the device context, which contains pointers to all USB descriptors. The interface argument specifies the interface number. If a USB driver wants to bind itself to a particular device and interface it has to return a pointer. This pointer normally references the device driver's context structure. \ Probing normally is done by checking the vendor and product identifications or the class and subclass definitions. If they match the interface number is compared with the ones supported by the driver. When probing is done class based it might be necessary to parse some more USB descriptors because the device properties can differ in a wide range. */ static void *auerswald_probe (struct usb_device *usbdev, unsigned int ifnum, const struct usb_device_id *id) { pauerswald_t cp = NULL; DECLARE_WAIT_QUEUE_HEAD (wqh); unsigned int dtindex; unsigned int u = 0; char *pbuf; int ret; \ dbg ("probe: vendor id 0x%x, device id 0x%x ifnum:%d", usbdev->descriptor.idVendor, usbdev->descriptor.idProduct, ifnum); \ /* See if the device offered us matches that we can accept */ if (usbdev->descriptor.idVendor != ID_AUERSWALD) return NULL; \ /* we use only the first -and only- interface */ if (ifnum != 0) return NULL; \ /* prevent module unloading while sleeping */ MOD_INC_USE_COUNT; \ /* allocate memory for our device and intialize it */ cp = kmalloc (sizeof(auerswald_t), GFP_KERNEL); if (cp == NULL) { err ("out of memory"); goto pfail; } \ /* Initialize device descriptor */ memset (cp, 0, sizeof(auerswald_t)); init_MUTEX (&cp->mutex); cp->usbdev = usbdev; auerchain_init (&cp->controlchain); auerbuf_init (&cp->bufctl); init_waitqueue_head (&cp->bufferwait); \ /* find a free slot in the device table */ down (&dev_table_mutex); for (dtindex = 0; dtindex < AUER_MAX_DEVICES; ++dtindex) { if (dev_table[dtindex] == NULL) break; } if ( dtindex >= AUER_MAX_DEVICES) { err ("more than %d devices plugged in, can not handle this device", AUER_MAX_DEVICES); up (&dev_table_mutex); goto pfail; } \ /* Give the device a name */ sprintf (cp->name, AU_PREFIX "%d", dtindex); \ /* Store the index */ cp->dtindex = dtindex; dev_table[dtindex] = cp; up (&dev_table_mutex); \ /* initialize the devfs node for this device and register it */ cp->devfs = devfs_register (usb_devfs_handle, cp->name, DEVFS_FL_DEFAULT, USB_MAJOR, AUER_MINOR_BASE + dtindex, S_IFCHR | S_IRUGO | S_IWUGO, &auerswald_fops, NULL); \ /* Get the usb version of the device */ cp->version = cp->usbdev->descriptor.bcdDevice; dbg ("Version is %X", cp->version); \ /* allow some time to settle the device */ sleep_on_timeout (&wqh, HZ / 3 ); \ /* Try to get a suitable textual description of the device */ /* Device name:*/ ret = usb_string( cp->usbdev, AUSI_DEVICE, cp->dev_desc, AUSI_DLEN-1); if (ret >= 0) { u += ret; /* Append Serial Number */ memcpy(&cp->dev_desc[u], ",Ser# ", 6); u += 6; ret = usb_string( cp->usbdev, AUSI_SERIALNR, &cp->dev_desc[u], AUSI_DLEN-u-1); if (ret >= 0) { u += ret; /* Append subscriber number */ memcpy(&cp->dev_desc[u], ", ", 2); u += 2; ret = usb_string( cp->usbdev, AUSI_MSN, &cp->dev_desc[u], AUSI_DLEN-u-1); if (ret >= 0) { u += ret; } } } cp->dev_desc[u] = '\0'; info("device is a %s", cp->dev_desc); \ /* get the maximum allowed control transfer length */ pbuf = (char *) kmalloc (2, GFP_KERNEL); /* use an allocated buffer because of urb target */ if (!pbuf) { err( "out of memory"); goto pfail; } ret = usb_control_msg(cp->usbdev, /* pointer to device */ usb_rcvctrlpipe( cp->usbdev, 0 ), /* pipe to control endpoint */ AUV_GETINFO, /* USB message request value */ AUT_RREQ, /* USB message request type value */ 0, /* USB message value */ AUDI_MBCTRANS, /* USB message index value */ pbuf, /* pointer to the receive buffer */ 2, /* length of the buffer */ HZ * 2); /* time to wait for the message to complete before timing out */ if (ret == 2) { cp->maxControlLength = le16_to_cpup(pbuf); kfree(pbuf); dbg("setup: max. allowed control transfersize is %d bytes", cp->maxControlLength); } else { kfree(pbuf); err("setup: getting max. allowed control transfer length failed with error %d", ret); goto pfail; } \ /* allocate a chain for the control messages */ if (auerchain_setup (&cp->controlchain, AUCH_ELEMENTS)) { err ("out of memory"); goto pfail; } \ /* allocate buffers for control messages */ if (auerbuf_setup (&cp->bufctl, AU_RBUFFERS, cp->maxControlLength+AUH_SIZE)) { err ("out of memory"); goto pfail; } \ /* start the interrupt endpoint */ if (auerswald_int_open (cp)) { err ("int endpoint failed"); goto pfail; } \ /* all OK */ return cp; \ /* Error exit: clean up the memory */ pfail: auerswald_delete (cp); MOD_DEC_USE_COUNT; return NULL; } \ \ /* Disconnect driver from a served device \ This function is called whenever a device which was served by this driver is disconnected. \ The argument dev specifies the device context and the driver_context returns a pointer to the previously registered driver_context of the probe function. After returning from the disconnect function the USB framework completly deallocates all data structures associated with this device. So especially the usb_device structure must not be used any longer by the usb driver. */ static void auerswald_disconnect (struct usb_device *usbdev, void *driver_context) { pauerswald_t cp = (pauerswald_t) driver_context; unsigned int u; \ down (&cp->mutex); info ("device /dev/usb/%s now disconnecting", cp->name); \ /* remove from device table */ /* Nobody can open() this device any more */ down (&dev_table_mutex); dev_table[cp->dtindex] = NULL; up (&dev_table_mutex); \ /* remove our devfs node */ /* Nobody can see this device any more */ devfs_unregister (cp->devfs); \ /* Stop the interrupt endpoint */ auerswald_int_release (cp); \ /* remove the control chain allocated in auerswald_probe This has the benefit of a) all pending (a)synchronous urbs are unlinked b) all buffers dealing with urbs are reclaimed */ auerchain_free (&cp->controlchain); \ if (cp->open_count == 0) { /* nobody is using this device. So we can clean up now */ up (&cp->mutex);/* up() is possible here because no other task can open the device (see above). I don't want to kfree() a locked mutex. */ auerswald_delete (cp); } else { /* device is used. Remove the pointer to the usb device (it's not valid any more). The last release() will do the clean up */ cp->usbdev = NULL; up (&cp->mutex); /* Terminate waiting writers */ wake_up (&cp->bufferwait); /* Inform all waiting readers */ for ( u = 0; u < AUH_TYPESIZE; u++) { pauerscon_t scp = cp->services[u]; if (scp) scp->disconnect( scp); } } \ /* The device releases this module */ MOD_DEC_USE_COUNT; } \ /* Descriptor for the devices which are served by this driver. NOTE: this struct is parsed by the usbmanager install scripts. Don't change without caution! */ static struct usb_device_id auerswald_ids [] = { { USB_DEVICE (ID_AUERSWALD, 0x00C0) }, /* COMpact 2104 USB */ { USB_DEVICE (ID_AUERSWALD, 0x00DB) }, /* COMpact 4410/2206 USB */ { USB_DEVICE (ID_AUERSWALD, 0x00F1) }, /* Comfort 2000 System Telephone */ { USB_DEVICE (ID_AUERSWALD, 0x00F2) }, /* Comfort 1200 System Telephone */ { } /* Terminating entry */ }; \ /* Standard module device table */ MODULE_DEVICE_TABLE (usb, auerswald_ids); \ /* Standard usb driver struct */ static struct usb_driver auerswald_driver = { name: "auerswald", probe: auerswald_probe, disconnect: auerswald_disconnect, fops: &auerswald_fops, minor: AUER_MINOR_BASE, id_table: auerswald_ids, }; \ \ /* --------------------------------------------------------------------- */ /* Module loading/unloading */ \ /* Driver initialisation. Called after module loading. NOTE: there is no concurrency at _init */ static int __init auerswald_init (void) { int result; dbg ("init"); \ /* initialize the device table */ memset (&dev_table, 0, sizeof(dev_table)); init_MUTEX (&dev_table_mutex); \ /* register driver at the USB subsystem */ result = usb_register (&auerswald_driver); if (result < 0) { err ("driver could not be registered"); return -1; } return 0; } \ /* Driver deinit. Called before module removal. NOTE: there is no concurrency at _cleanup */ static void __exit auerswald_cleanup (void) { dbg ("cleanup"); usb_deregister (&auerswald_driver); } \ /* --------------------------------------------------------------------- */ /* Linux device driver module description */ \ MODULE_AUTHOR (DRIVER_AUTHOR); MODULE_DESCRIPTION (DRIVER_DESC); \ module_init (auerswald_init); module_exit (auerswald_cleanup); \ /* --------------------------------------------------------------------- */ \ == drivers/usb/hcd.c == patch@plucky.distro.conectiva|drivers/usb/hcd.c|20020313233104|00357|14df4151e13d95c3 patch@plucky.distro.conectiva|drivers/usb/hcd.c|20020313233105|20822 D 1.2 02/03/11 11:13:29-03:00 patch@plucky.distro.conectiva +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Import patch patch-2.4.19-pre2-pre3 F 206863 K 21248 O -rw-rw-r-- P drivers/usb/hcd.c ------------------------------------------------ D627 1 I627 1 bufp = __irq_itoa(dev->irq); == drivers/video/neofb.c == New file: drivers/video/neofb.c V 4 patch@plucky.distro.conectiva|drivers/video/neofb.c|20020313234105|09492|9f7784deb8f3326d D 1.0 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/marcelo/bk/linux-2.4/drivers/video/neofb.c K 9492 P drivers/video/neofb.c R 9f7784deb8f3326d X 0x821 ------------------------------------------------ patch@plucky.distro.conectiva|drivers/video/neofb.c|20020313234105|09492|9f7784deb8f3326d D 1.1 02/03/13 20:41:05-03:00 patch@plucky.distro.conectiva +2423 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 56760 O -rw-rw-r-- P drivers/video/neofb.c ------------------------------------------------ I0 2423 /* * linux/drivers/video/neofb.c -- NeoMagic Framebuffer Driver * * Copyright (c) 2001 Denis Oliver Kropp * * * Card specific code is based on XFree86's neomagic driver. * Framebuffer framework code is based on code of cyber2000fb. * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this * archive for more details. * * * 0.3.2 * - got rid of all floating point (dok) * * 0.3.1 * - added module license (dok) * * 0.3 * - hardware accelerated clear and move for 2200 and above (dok) * - maximum allowed dotclock is handled now (dok) * * 0.2.1 * - correct panning after X usage (dok) * - added module and kernel parameters (dok) * - no stretching if external display is enabled (dok) * * 0.2 * - initial version (dok) * * * TODO * - ioctl for internal/external switching * - blanking * - 32bit depth support, maybe impossible * - disable pan-on-sync, need specs * * BUGS * - white margin on bootup like with tdfxfb (colormap problem?) * */ \ #include #include #include #include #include #include #include #include #include #include #include #include \ #include #include #include #include #include \ #ifdef CONFIG_MTRR #include #endif \ #include