This BitKeeper patch contains the following changesets: jejb@mulgrave.(none)|ChangeSet|20020312001709|20252 jejb@mulgrave.(none)|ChangeSet|20020311234733|20271 jejb@mulgrave.(none)|ChangeSet|20020311224513|41298 jejb@mulgrave.(none)|ChangeSet|20020311221916|41310 jejb@mulgrave.(none)|ChangeSet|20020311213008|41291 jejb@mulgrave.(none)|ChangeSet|20020311185301|41281 jejb@mulgrave.(none)|ChangeSet|20020311184444|29086 jejb@mulgrave.(none)|ChangeSet|20020311063131|29096 jejb@mulgrave.(none)|ChangeSet|20020311062143|16023 jejb@mulgrave.(none)|ChangeSet|20020311060259|02667 jejb@mulgrave.(none)|ChangeSet|20020311053436|02666 jejb@mulgrave.(none)|ChangeSet|20020311035412|41918 jejb@mulgrave.(none)|ChangeSet|20020311033237|03207 jejb@mulgrave.(none)|ChangeSet|20020311031530|23441 jejb@malley.hansenpartnership.com|ChangeSet|20020227205607|05141 jejb@mulgrave.(none)|ChangeSet|20020227154608|03079 jejb@mulgrave.(none)|ChangeSet|20020227153807|03086 jejb@mulgrave.(none)|ChangeSet|20020227153222|03091 jejb@mulgrave.(none)|ChangeSet|20020224163852|61249 jejb@mulgrave.(none)|ChangeSet|20020224163312|61235 jejb@mulgrave.(none)|ChangeSet|20020224161953|41872 jejb@mulgrave.(none)|ChangeSet|20020224161137|41852 jejb@mulgrave.(none)|ChangeSet|20020224155559|27107 jejb@mulgrave.(none)|ChangeSet|20020224154639|28501 jejb@mulgrave.(none)|ChangeSet|20020224152223|16173 jejb@mulgrave.(none)|ChangeSet|20020224151539|16175 jejb@mulgrave.(none)|ChangeSet|20020224145459|21941 jejb@mulgrave.(none)|ChangeSet|20020224144114|23329 jejb@mulgrave.(none)|ChangeSet|20020224140429|10299 # ID: torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 # User: jejb # Host: mulgrave.(none) # Root: /home/jejb/BK/voyager-2.5 # Patch vers: 1.3 # Patch type: REGULAR == ChangeSet == torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 torvalds@athlon.transmeta.com|ChangeSet|20020205235759|62270 D 1.134.1.1 02/02/24 08:04:29-06:00 jejb@mulgrave.(none) +22 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add support for the NCR Voyager architecture c c A microchannel (MCA) SMP system capable of going up to 32 CPUs and c taking anything from an i486 to a PPro as the CPUs c c Voyager architectures are machine classes: c c 3430/3360/345x/35xx/4100/51xx K 10299 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224140213|00548 > torvalds@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205173944|02324|3649a38c193ce3f jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224140213|35432 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d jejb@mulgrave.(none)|Documentation/Configure.help|20020224140212|31895 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140214|03482 > jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140214|40442 > jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140213|45547|2abd64f1ad30186d jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140214|31612 > jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140213|60867|30e452a4faa1582f jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140214|19261 > torvalds@athlon.transmeta.com|drivers/char/sysrq.c|20020205174004|19337|54afe09e7d33cfce jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224140213|40686 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224140213|53996 > torvalds@athlon.transmeta.com|include/asm-i386/smp.h|20020205173944|41674|b06e3b553054c2ec jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224140213|24171 > torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224140213|34319 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224140213|28985 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224140213|16892 > jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140213|59289|a22c1f9c53cd3c50 jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140214|33701 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140213|55199|411f897383390efd jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140214|58225 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140213|51425|4afbdd55fedc3919 jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140214|52200 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224140212|04150 > torvalds@athlon.transmeta.com|arch/i386/boot/setup.S|20020205174020|11654|60d81ba2278e7f2f jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224140213|13975 > torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224140213|52532 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020224140213|43384 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224140213|00430 > torvalds@athlon.transmeta.com|arch/i386/kernel/i386_ksyms.c|20020205174021|57868|87ffcb8a3a553b23 jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020224140213|53301 torvalds@athlon.transmeta.com|ChangeSet|20020205235917|09745 D 1.146.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Standard manual merge to contain kernel changes i jejb@mulgrave.(none)|ChangeSet|20020224140429|10299 K 23329 M jejb@mulgrave.(none)|ChangeSet|20020224140429|10299 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224144114|15586 > torvalds@athlon.transmeta.com|drivers/char/sysrq.c|20020205174004|19337|54afe09e7d33cfce jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224144114|41366 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d jejb@mulgrave.(none)|Documentation/Configure.help|20020224144114|46853 > torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224144114|57046 > torvalds@athlon.transmeta.com|arch/i386/boot/setup.S|20020205174020|11654|60d81ba2278e7f2f jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224144114|14017 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224144114|08953 jejb@mulgrave.(none)|ChangeSet|20020224144114|23329 D 1.146.1.2 02/02/24 08:54:59-06:00 jejb@mulgrave.(none) +13 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager update c c - Clean up code on feedback from Dave Jones and Rik van Riel. c - Correct timer interrupt handler imbalance that was causing c system vs user cpu timings to be off K 21941 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224145423|34057 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d jejb@mulgrave.(none)|Documentation/Configure.help|20020224145422|47097 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224145423|30520 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224145423|51479 > jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140213|45547|2abd64f1ad30186d jejb@mulgrave.(none)|Documentation/voyager.txt|20020224145423|44263 > jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224145423|04496 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224145423|41507 > torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224145423|09102 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224145423|33431 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224145423|19287 > torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224145423|57014 > torvalds@athlon.transmeta.com|include/asm-i386/irq.h|20020205173944|23037|cfa60afe4ac0a973 jejb@mulgrave.(none)|include/asm-i386/irq.h|20020224145423|18853 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224145423|41509 torvalds@athlon.transmeta.com|ChangeSet|20020206001333|03877 D 1.158.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +9 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020224144114|23329 i jejb@mulgrave.(none)|ChangeSet|20020224145459|21941 K 16175 M jejb@mulgrave.(none)|ChangeSet|20020224145459|21941 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224151538|26260 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d jejb@mulgrave.(none)|Documentation/Configure.help|20020224151538|25250 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224151539|47397 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020224151539|47403 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224151539|36762 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224151539|62780 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224151539|48361 > torvalds@athlon.transmeta.com|drivers/char/sysrq.c|20020205174004|19337|54afe09e7d33cfce jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224151539|41686 > torvalds@athlon.transmeta.com|include/asm-i386/smp.h|20020205173944|41674|b06e3b553054c2ec jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224151539|59148 jejb@mulgrave.(none)|ChangeSet|20020224151539|16175 D 1.158.1.2 02/02/24 09:22:23-06:00 jejb@mulgrave.(none) +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager architecture c c - basic upports: ignore hyperthreading and change init task setup c - add cache alignment to certain internal arrays K 16173 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224152203|65324 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224152203|49861 torvalds@athlon.transmeta.com|ChangeSet|20020206001849|15802 D 1.167.2.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +11 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020224151539|16175 i jejb@mulgrave.(none)|ChangeSet|20020224152223|16173 K 28501 M jejb@mulgrave.(none)|ChangeSet|20020224152223|16173 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224154638|26203 > torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d jejb@mulgrave.(none)|BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d|20020224154639|29225 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224154639|63027 > torvalds@athlon.transmeta.com|arch/i386/boot/setup.S|20020205174020|11654|60d81ba2278e7f2f jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224154639|26459 > torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224154639|08622 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224154639|36051 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224154639|42081 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224154639|01130 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224154639|03309 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224154639|38021 > torvalds@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205173944|02324|3649a38c193ce3f jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224154639|02606 jejb@mulgrave.(none)|ChangeSet|20020224154639|28501 D 1.167.2.2 02/02/24 09:55:59-06:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager changes c c - follow help spit c - add smp migration interrupt for new scheduler c - correct logical_cpu bug in hardirq.h (only shows when phys and c logical cpu numbers are different) K 27107 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140213|59289|a22c1f9c53cd3c50 jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224155525|42897 > torvalds@athlon.transmeta.com|include/asm-i386/hardirq.h|20020205173944|59272|15265640a13d83ce jejb@mulgrave.(none)|include/asm-i386/hardirq.h|20020224155525|54521 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224155525|29598 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224155525|17395 > patch@athlon.transmeta.com|arch/i386/Config.help|20020206001713|03723|3a650f5e40e2823a jejb@mulgrave.(none)|arch/i386/Config.help|20020224155525|04710 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224155525|26390 torvalds@home.transmeta.com|ChangeSet|20020211032403|18448 D 1.262.12.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +10 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020224154639|28501 i jejb@mulgrave.(none)|ChangeSet|20020224155559|27107 K 41852 M jejb@mulgrave.(none)|ChangeSet|20020224155559|27107 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224161137|44720 > patch@athlon.transmeta.com|arch/i386/Config.help|20020206001713|03723|3a650f5e40e2823a jejb@mulgrave.(none)|arch/i386/Config.help|20020224161137|31700 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224161137|03971 > torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224161137|56962 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224161137|01825 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224161137|03045 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224161137|23210 > torvalds@athlon.transmeta.com|include/asm-i386/hardirq.h|20020205173944|59272|15265640a13d83ce jejb@mulgrave.(none)|include/asm-i386/hardirq.h|20020224161137|58487 > torvalds@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205173944|02324|3649a38c193ce3f jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224161137|20806 > torvalds@athlon.transmeta.com|include/asm-i386/smp.h|20020205173944|41674|b06e3b553054c2ec jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224161137|60479 jejb@mulgrave.(none)|ChangeSet|20020224161137|41852 D 1.262.12.2 02/02/24 10:19:53-06:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager updates c c - Alter thread start up model (from smpboot.c) c - change CPI spinlock types to _raw to prevent pre-emption during CPI c - change kvoyagerd wait from completion to semaphore to correct c problem where kvoyagerd in D wait contributes 1 to load average. K 41872 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224161909|06979 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140213|55199|411f897383390efd jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224161909|01250 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224161909|31720 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140213|51425|4afbdd55fedc3919 jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224161909|50720 torvalds@penguin.transmeta.com|ChangeSet|20020220020710|36335 D 1.369.11.1 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020224161137|41852 i jejb@mulgrave.(none)|ChangeSet|20020224161953|41872 K 61235 M jejb@mulgrave.(none)|ChangeSet|20020224161953|41872 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020224163312|54875 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020224163312|29211 > torvalds@athlon.transmeta.com|arch/i386/kernel/i386_ksyms.c|20020205174021|57868|87ffcb8a3a553b23 jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020224163312|49625 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224163312|12661 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224163312|58026 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224163312|16847 jejb@mulgrave.(none)|ChangeSet|20020224163312|61235 D 1.369.11.2 02/02/24 10:38:52-06:00 jejb@mulgrave.(none) +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager changes c c - upport: remove unnecessary zeroing of cpuinfo c - change missed completion to semaphore K 61249 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140213|60867|30e452a4faa1582f jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224163815|19031 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224163815|25357 torvalds@penguin.transmeta.com|ChangeSet|20020227010121|41793 D 1.375.1.48 02/02/27 09:32:22-06:00 jejb@mulgrave.(none) +5 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020224163312|61235 i jejb@mulgrave.(none)|ChangeSet|20020224163852|61249 K 3091 M jejb@mulgrave.(none)|ChangeSet|20020224163852|61249 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020227153037|11438 > torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020227153222|08622 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020227153038|61178 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020227153038|40053 > torvalds@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205173944|02324|3649a38c193ce3f jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020227153038|18128 jejb@mulgrave.(none)|ChangeSet|20020227153222|03091 D 1.375.1.49 02/02/27 09:38:07-06:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Update smp interrupt abstraction c c - merge changes from 1.373 (removal of task migration IPI) K 3086 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020227153711|02761 jejb@mulgrave.(none)|ChangeSet|20020227153807|03086 D 1.375.1.50 02/02/27 09:46:08-06:00 jejb@mulgrave.(none) +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager c c remove CPIs associated with process migration as per change c set 1.373 K 3079 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140213|59289|a22c1f9c53cd3c50 jejb@mulgrave.(none)|include/asm-i386/vic.h|20020227154608|36121 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020227154608|63592 jejb@mulgrave.(none)|ChangeSet|20020227154608|03079 D 1.375.1.51 02/02/27 14:56:07-06:00 jejb@malley.hansenpartnership.com +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Fix new SMP migration thread code (introduced in change set 1.373) c c - make migration_mask a logical bitmap with correct conversions. K 5141 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|kernel/sched.c|20020205173939|47232|5bb23172c60d3e93 jejb@malley.hansenpartnership.com|kernel/sched.c|20020227205530|16801 jejb@malley.hansenpartnership.com|ChangeSet|20020227205607|05141 D 1.375.1.52 02/03/10 22:15:30-05:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge ssh://james/BK/voyager-2.5 c into mulgrave.(none):/home/jejb/BK/voyager-2.5 i jgarzik@mandrakesoft.com|ChangeSet|20020227191402|41642 i jgarzik@mandrakesoft.com|ChangeSet|20020227234828|44363 i elenstev@mesatop.com|ChangeSet|20020228000840|44502 i elenstev@mesatop.com|ChangeSet|20020228002026|43932 i fero@sztalker.hu|ChangeSet|20020228003547|42960 i torvalds@penguin.transmeta.com|ChangeSet|20020228054506|44412 i torvalds@penguin.transmeta.com|ChangeSet|20020228055049|47681 i torvalds@penguin.transmeta.com|ChangeSet|20020228201156|48000 i dalecki@evision-ventures.com|ChangeSet|20020228201512|48086 i dalecki@evision-ventures.com|ChangeSet|20020228201518|50730 i dalecki@evision-ventures.com|ChangeSet|20020228201525|54306 i dalecki@evision-ventures.com|ChangeSet|20020228201530|54317 i dalecki@evision-ventures.com|ChangeSet|20020228201537|54534 i twaugh@redhat.com|ChangeSet|20020228201919|54538 i twaugh@redhat.com|ChangeSet|20020228201924|54542 i twaugh@redhat.com|ChangeSet|20020228201929|53672 i twaugh@redhat.com|ChangeSet|20020228201934|53174 i viro@math.psu.edu|ChangeSet|20020228202333|47280 i viro@math.psu.edu|ChangeSet|20020228202339|47680 i viro@math.psu.edu|ChangeSet|20020228202344|46253 i viro@math.psu.edu|ChangeSet|20020228202349|46258 i viro@math.psu.edu|ChangeSet|20020228202355|46506 i viro@math.psu.edu|ChangeSet|20020228202400|44941 i viro@math.psu.edu|ChangeSet|20020228202405|45344 i viro@math.psu.edu|ChangeSet|20020228202415|44606 i torvalds@penguin.transmeta.com|ChangeSet|20020228202720|43135 i torvalds@penguin.transmeta.com|ChangeSet|20020228203210|42601 i kraxel@bytesex.org|ChangeSet|20020228203436|43737 i torvalds@penguin.transmeta.com|ChangeSet|20020228204511|44206 i torvalds@penguin.transmeta.com|ChangeSet|20020228210201|45998 i torvalds@penguin.transmeta.com|ChangeSet|20020228211804|36274 i shaggy@austin.ibm.com|ChangeSet|20020228212251|35469 i torvalds@penguin.transmeta.com|ChangeSet|20020301003732|35453 i torvalds@penguin.transmeta.com|ChangeSet|20020301041020|34913 i viro@math.psu.edu|ChangeSet|20020302213008|33565 i viro@math.psu.edu|ChangeSet|20020302213013|32181 i viro@math.psu.edu|ChangeSet|20020302213033|32537 i rusty@rustcorp.com.au|ChangeSet|20020302213247|31842 i rusty@rustcorp.com.au|ChangeSet|20020302213252|31092 i rusty@rustcorp.com.au|ChangeSet|20020302213258|19869 i torvalds@penguin.transmeta.com|ChangeSet|20020302213603|18139 i torvalds@penguin.transmeta.com|ChangeSet|20020302214111|53253 i jaharkes@cs.cmu.edu|ChangeSet|20020302214154|54331 i david-b@pacbell.net|ChangeSet|20020302214546|53056 i bcrl@toomuch.toronto.redhat.com|ChangeSet|20020303205259|58283 i bcrl@toomuch.toronto.redhat.com|ChangeSet|20020304162205|58279 i torvalds@penguin.transmeta.com|ChangeSet|20020305231217|61278 i adam@nmt.edu|ChangeSet|20020305231617|58432 i Andries.Brouwer@cwi.nl|ChangeSet|20020305231818|57025 i rml@tech9.net|ChangeSet|20020305231934|56098 i torvalds@penguin.transmeta.com|ChangeSet|20020305232930|56362 i viro@math.psu.edu|ChangeSet|20020306032442|56387 i torvalds@penguin.transmeta.com|ChangeSet|20020307002231|59109 i torvalds@penguin.transmeta.com|ChangeSet|20020307002530|60946 i viro@math.psu.edu|ChangeSet|20020307002720|60937 i torvalds@penguin.transmeta.com|ChangeSet|20020307004623|63450 i dalecki@evision-ventures.com|ChangeSet|20020307004905|63776 K 23441 M dalecki@evision-ventures.com|ChangeSet|20020307004905|63776 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020311031528|43299 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311031529|03419 > torvalds@athlon.transmeta.com|drivers/char/sysrq.c|20020205174004|19337|54afe09e7d33cfce jejb@mulgrave.(none)|drivers/char/sysrq.c|20020311031529|42078 > torvalds@athlon.transmeta.com|kernel/sched.c|20020205173939|47232|5bb23172c60d3e93 jejb@mulgrave.(none)|kernel/sched.c|20020311031529|23476 jejb@mulgrave.(none)|ChangeSet|20020311031530|23441 D 1.375.1.53 02/03/10 22:32:37-05:00 jejb@mulgrave.(none) +7 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge (tidy up later) i jejb@mulgrave.(none)|ChangeSet|20020310223507|42825 i jejb@mulgrave.(none)|ChangeSet|20020311001639|42829 i jejb@mulgrave.(none)|ChangeSet|20020311030012|43984 K 3207 M jejb@mulgrave.(none)|ChangeSet|20020311030012|43984 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311032744|05933 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311033237|14964 > torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020311033236|42500 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311033236|23360 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311032744|60640 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311033237|11189 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311032743|40267 jejb@mulgrave.(none)|ChangeSet|20020311033237|03207 D 1.375.1.54 02/03/10 22:54:12-05:00 jejb@mulgrave.(none) +9 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Initial plug into arch split c c - still doesn't compile K 41918 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035244|21679|dd16c088ab1a85d4 jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035245|46191 > jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 jejb@mulgrave.(none)|arch/i386/voyager/voyager_basic.c|20020311035244|06363 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140213|51425|4afbdd55fedc3919 jejb@mulgrave.(none)|arch/i386/voyager/voyager_cat.c|20020311033648|63911 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140213|55199|411f897383390efd jejb@mulgrave.(none)|arch/i386/voyager/voyager_thread.c|20020311033648|08766 > jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035244|31812|ce936728278d42d8 jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035245|15259 > jejb@mulgrave.(none)|arch/i386/voyager/setup.c|20020311035244|35869|96097e12bd022958 jejb@mulgrave.(none)|arch/i386/voyager/setup.c|20020311035245|63158 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311035244|10518 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311035243|45155 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/voyager/voyager_smp.c|20020311033648|03553 jejb@mulgrave.(none)|ChangeSet|20020311035412|41918 D 1.375.1.55 02/03/11 00:34:36-05:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020311052936|04758 K 2666 M jejb@mulgrave.(none)|ChangeSet|20020311052936|04758 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311053435|11466 jejb@mulgrave.(none)|ChangeSet|20020311053436|02666 D 1.375.1.56 02/03/11 01:02:59-05:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020311055930|04753 K 2667 M jejb@mulgrave.(none)|ChangeSet|20020311055930|04753 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311060258|02709 jejb@mulgrave.(none)|ChangeSet|20020311060259|02667 D 1.375.1.57 02/03/11 01:21:43-05:00 jejb@mulgrave.(none) +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Some setup.c modifications K 16023 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311062142|48918 > jejb@mulgrave.(none)|arch/i386/voyager/setup_arch.h|20020311062142|08270|191aa6d6ac535d24 jejb@mulgrave.(none)|arch/i386/voyager/setup_arch.h|20020311062143|17871 jejb@mulgrave.(none)|ChangeSet|20020311062143|16023 D 1.375.1.58 02/03/11 01:31:31-05:00 jejb@mulgrave.(none) +3 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Move extra export symbols to arch subdir K 29096 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035244|21679|dd16c088ab1a85d4 jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311063130|48531 > jejb@mulgrave.(none)|arch/i386/voyager/i386_ksyms.c|20020311063130|54237|f2a68d32c324cda1 jejb@mulgrave.(none)|arch/i386/voyager/i386_ksyms.c|20020311063131|08561 > torvalds@athlon.transmeta.com|arch/i386/kernel/i386_ksyms.c|20020205174021|57868|87ffcb8a3a553b23 jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020311063130|36041 jejb@mulgrave.(none)|ChangeSet|20020311063131|29096 D 1.375.1.59 02/03/11 13:44:44-05:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Voyager c c minor bug fix to remove voyager specific define K 29086 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020311184311|54418 jejb@mulgrave.(none)|ChangeSet|20020311184444|29086 D 1.375.1.60 02/03/11 13:53:01-05:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020311183328|17546 K 41281 M jejb@mulgrave.(none)|ChangeSet|20020311183328|17546 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311184702|50511 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311185301|46583 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311184702|26471 > torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020311185301|63225 jejb@mulgrave.(none)|ChangeSet|20020311185301|41281 D 1.375.1.61 02/03/11 16:30:08-05:00 jejb@mulgrave.(none) +7 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Update to get first compile with arch split K 41291 P ChangeSet ------------------------------------------------ 0a0 > jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035244|21679|dd16c088ab1a85d4 jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311212805|51219 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311212805|22473 > torvalds@athlon.transmeta.com|arch/i386/Makefile|20020205174020|18710|1b8aa1f0c40a1dbf jejb@mulgrave.(none)|arch/i386/Makefile|20020311212805|09382 > jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 jejb@mulgrave.(none)|arch/i386/voyager/voyager_basic.c|20020311212805|19884 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311212805|51171 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311212805|10973 > jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c jejb@mulgrave.(none)|arch/i386/voyager/voyager_smp.c|20020311212805|02158 jejb@mulgrave.(none)|ChangeSet|20020311213008|41291 D 1.375.1.62 02/03/11 17:19:16-05:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|ChangeSet|20020311221007|17556 K 41310 M jejb@mulgrave.(none)|ChangeSet|20020311221007|17556 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311221916|44314 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311221915|54587 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311221916|54491 > torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311221554|13032 jejb@mulgrave.(none)|ChangeSet|20020311221916|41310 D 1.375.1.63 02/03/11 17:45:13-05:00 jejb@mulgrave.(none) +2 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Final changes to pull VOYAGER completely out of kernel arch directory K 41298 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 jejb@mulgrave.(none)|arch/i386/config.in|20020311224338|58003 > jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035244|31812|ce936728278d42d8 jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311224338|36531 torvalds@penguin.transmeta.com|ChangeSet|20020308015057|44839 D 1.384.1.1 02/03/11 18:47:33-05:00 jejb@mulgrave.(none) +8 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge mulgrave.(none):/home/jejb/BK/linux-2.5 c into mulgrave.(none):/home/jejb/BK/voyager-2.5 i jejb@mulgrave.(none)|ChangeSet|20020227153222|03091 i jejb@mulgrave.(none)|ChangeSet|20020227153807|03086 i jejb@mulgrave.(none)|ChangeSet|20020227154608|03079 i jejb@malley.hansenpartnership.com|ChangeSet|20020227205607|05141 i jejb@mulgrave.(none)|ChangeSet|20020311031530|23441 i jejb@mulgrave.(none)|ChangeSet|20020311033237|03207 i jejb@mulgrave.(none)|ChangeSet|20020311035412|41918 i jejb@mulgrave.(none)|ChangeSet|20020311053436|02666 i jejb@mulgrave.(none)|ChangeSet|20020311060259|02667 i jejb@mulgrave.(none)|ChangeSet|20020311062143|16023 i jejb@mulgrave.(none)|ChangeSet|20020311063131|29096 i jejb@mulgrave.(none)|ChangeSet|20020311184444|29086 i jejb@mulgrave.(none)|ChangeSet|20020311185301|41281 i jejb@mulgrave.(none)|ChangeSet|20020311213008|41291 i jejb@mulgrave.(none)|ChangeSet|20020311221916|41310 i jejb@mulgrave.(none)|ChangeSet|20020311224513|41298 K 20271 M jejb@mulgrave.(none)|ChangeSet|20020311224513|41298 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 jejb@mulgrave.(none)|MAINTAINERS|20020311234732|43848 > torvalds@athlon.transmeta.com|arch/i386/kernel/mpparse.c|20020205174021|05759|a518369612979315 jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311234732|08258 > torvalds@athlon.transmeta.com|arch/i386/kernel/pci-pc.c|20020205174021|63770|524c79ffe499fd6b jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311234732|01926 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311234732|23093 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311234732|10129 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311234732|56833 > torvalds@athlon.transmeta.com|arch/i386/kernel/traps.c|20020205174021|43275|f01e9a814d3e2866 jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020311234732|34761 > torvalds@athlon.transmeta.com|kernel/sched.c|20020205173939|47232|5bb23172c60d3e93 jejb@mulgrave.(none)|kernel/sched.c|20020311234733|28169 jejb@mulgrave.(none)|ChangeSet|20020311231259|61287 D 1.386 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge mulgrave.(none):/home/jejb/BK/abstract-i386-2.5 c into mulgrave.(none):/home/jejb/BK/voyager-2.5 i jejb@mulgrave.(none)|ChangeSet|20020311234733|20271 K 20252 M jejb@mulgrave.(none)|ChangeSet|20020311234733|20271 P ChangeSet ------------------------------------------------ 0a0 > torvalds@athlon.transmeta.com|arch/i386/kernel/mpparse.c|20020205174021|05759|a518369612979315 jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020312001708|08258 > torvalds@athlon.transmeta.com|arch/i386/kernel/pci-pc.c|20020205174021|63770|524c79ffe499fd6b jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020312001709|01926 > torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020312001709|23093 > torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020312001709|10129 > torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020312001709|56833 > torvalds@athlon.transmeta.com|arch/i386/kernel/traps.c|20020205174021|43275|f01e9a814d3e2866 jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020312001709|34761 == Documentation/voyager.txt == New file: Documentation/voyager.txt V 4 jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140213|45547|2abd64f1ad30186d D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/Documentation/voyager.txt K 45547 P Documentation/voyager.txt R 2abd64f1ad30186d X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140213|45547|2abd64f1ad30186d D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +84 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 31612 O -rw-rw-r-- P Documentation/voyager.txt ------------------------------------------------ I0 84 Running Linux on the Voyager Architecture ========================================= \ For full details and current project status, see \ http://www.hansenpartnership.com/voyager \ The voyager architecture was designed by NCR in the mid 80s to be a fully SMP capable RAS computing architecture built around intel's 486 chip set. The voyager came in three levels of architectural sophistication: 3,4 and 5 --- 1 and 2 never made it out of prototype. The linux patches support only the Level 5 voyager architecture (any machine class 3435 and above). \ The Voyager Architecture ------------------------ \ Voyager machines consist of a Baseboard with a 386 diagnostic processor, a Power Supply Interface (PSI) a Primary and possibly Secondary Microchannel bus and between 2 and 20 voyager slots. The voyager slots can be populated with memory and cpu cards (up to 4GB memory and from 1 486 to 32 Pentium Pro processors). Internally, the voyager has a dual arbitrated system bus and a configuration and test bus (CAT). The voyager bus speed is 40MHz. Therefore (since all voyager cards are dual ported for each system bus) the maximum transfer rate is 320Mb/s but only if you have your slot configuration tuned (only memory cards can communicate with both busses at once, CPU cards utilise them one at a time). \ Voyager SMP ----------- \ Since voyager was the first intel based SMP system, it is slightly more primitive than the Intel IO-APIC approach to SMP. Voyager allows arbitrary interrupt routing (including processor affinity routing) of all 16 PC type interrupts. However it does this by using a modified 5259 master/slave chip set instead of an APIC bus. Additionally, voyager supports Cross Processor Interrupts (CPI) equivalent to the APIC IPIs. There are two routed voyager interrupt lines provided to each slot. \ Processor Cards --------------- \ These come in single, dyadic and quad configurations (the quads are problematic--see later). The maximum configuration is 8 quad cards for 32 way SMP. \ Quad Processors --------------- \ Because voyager only supplies two interrupt lines to each Processor card, the Quad processors have to be configured (and Bootstrapped) in as a pair of Master/Slave processors. \ In fact, most Quad cards only accept one VIC interrupt line, so they have one interrupt handling processor (called the VIC extended processor) and three non-interrupt handling processors. \ Current Status -------------- \ The System will boot on Mono, Dyad and Quad cards. There was originally a Quad boot problem which has been fixed by proper gdt alignment in the initial boot loader. If you still cannot get your voyager system to boot, email me at: \ \ \ The Quad cards now support using the separate Quad CPI vectors instead of going through the VIC mailbox system. \ The Level 4 architecture (3430 and 3360 Machines) seems to work, as long as you specify memory size and don't expect any of the machine specific functions (reboot, power off etc.) to work. \ A Note About Mixed CPU Systems ------------------------------ \ Linux isn't designed to handle mixed CPU systems very well. In order to get everything going you *must* make sure that your lowest capability CPU is used for booting. Also, mixing CPU classes (e.g. 486 and 586) is really not going to work very well at all. jejb@mulgrave.(none)|Documentation/voyager.txt|20020224140214|31612 D 1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +14 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added note about dump and power switches K 44263 O -rw-rw-r-- P Documentation/voyager.txt ------------------------------------------------ D74 3 I76 14 The Level 4 architecture (3430 and 3360 Machines) should also work fine. \ Dump Switch ----------- \ The voyager dump switch sends out a broadcast NMI which the voyager code intercepts and does a task dump. \ Power Switch ------------ \ The front panel power switch is intercepted by the kernel and should cause a system shutdown and power off. == arch/i386/voyager/voyager_basic.c == New file: arch/i386/kernel/voyager.c V 4 jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/kernel/voyager.c K 49808 P arch/i386/kernel/voyager.c R ac03dc9d49350595 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140213|49808|ac03dc9d49350595 D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +273 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 40442 O -rw-rw-r-- P arch/i386/kernel/voyager.c ------------------------------------------------ I0 273 /* Copyright (C) 1999,2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * linux/arch/i386/kernel/voyager.c * * This file contains all the voyager specific routines for getting * initialisation of the architecture to function. For additional * features see: * * voyager_cat.c - Voyager CAT bus interface * voyager_smp.c - Voyager SMP hal (emulates linux smp.c) */ \ #include #include #include #include #include #include #include #include #include #include #include #include \ #include \ int voyager_level = 0; \ struct voyager_SUS *voyager_SUS = NULL; \ void voyager_detect(struct voyager_bios_info *bios) { if(bios->len != 0xff) { int class = (bios->class_1 << 8) | (bios->class_2 & 0xff); \ printk("Voyager System detected.\n" " Class %x, Revision %d.%d\n", class, bios->major, bios->minor); if(class == VOYAGER_LEVEL4) voyager_level = 4; else if(class < VOYAGER_LEVEL5_AND_ABOVE) voyager_level = 3; else voyager_level = 5; printk(" Architecture Level %d\n", voyager_level); if(voyager_level < 4) printk("\n**WARNING**: Voyager HAL only supports Levels 4 and 5 Architectures at the moment\n\n"); } else { printk("\n\n**WARNING**: No Voyager Subsystem Found\n"); } } \ void voyager_system_interrupt(int cpl, void *dev_id, struct pt_regs *regs) { printk("Voyager: detected system interrupt\n"); } \ /* Routine to read information from the extended CMOS area */ __u8 voyager_extended_cmos_read(__u16 addr) { outb(addr & 0xff, 0x74); outb((addr >> 8) & 0xff, 0x75); return inb(0x76); } \ /* internal definitions for the SUS Click Map of memory */ \ #define CLICK_ENTRIES 16 #define CLICK_SIZE 4096 /* click to byte conversion for Length */ \ typedef struct ClickMap { struct Entry { __u32 Address; __u32 Length; } Entry[CLICK_ENTRIES]; } ClickMap_t; \ \ /* This routine is pretty much an awful hack to read the bios clickmap by * mapping it into page 0. There are usually three regions in the map: * Base Memory * Extended Memory * zero length marker for end of map * * Returns are 0 for failure and 1 for success on extracting region. */ int __init voyager_memory_detect(int region, __u32 *start, __u32 *length) { int i; int retval = 0; __u8 cmos[4]; ClickMap_t *map; unsigned long map_addr; unsigned long old; \ if(region >= CLICK_ENTRIES) { printk("Voyager: Illegal ClickMap region %d\n", region); return 0; } \ for(i = 0; i < sizeof(cmos); i++) cmos[i] = voyager_extended_cmos_read(VOYAGER_MEMORY_CLICKMAP + i); \ map_addr = *(unsigned long *)cmos; \ /* steal page 0 for this */ old = pg0[0]; pg0[0] = ((map_addr & PAGE_MASK) | _PAGE_RW | _PAGE_PRESENT); local_flush_tlb(); /* now clear everything out but page 0 */ map = (ClickMap_t *)(map_addr & (~PAGE_MASK)); \ /* zero length is the end of the clickmap */ if(map->Entry[region].Length != 0) { *length = map->Entry[region].Length * CLICK_SIZE; *start = map->Entry[region].Address; retval = 1; } \ /* replace the mapping */ pg0[0] = old; local_flush_tlb(); return retval; } \ void voyager_dump() { /* get here via a sysrq */ #ifdef CONFIG_SMP voyager_smp_dump(); #endif } \ /* voyager specific handling code for timer interrupts. Used to hand * off the timer tick to the SMP code, since the VIC doesn't have an * internal timer (The QIC does, but that's another story). */ void voyager_timer_interrupt(struct pt_regs *regs) { if((jiffies & 0x3ff) == 0) { \ /* There seems to be something flaky in either * hardware or software that is resetting the timer 0 * count to something much higher than it should be * This seems to occur in the boot sequence, just * before root is mounted. Therefore, every 10 * seconds or so, we sanity check the timer zero count * and kick it back to where it should be. * * FIXME: This is the most awful hack yet seen. I * should work out exactly what is interfering with * the timer count settings early in the boot sequence * and swiftly introduce it to something sharp and * pointy. */ __u16 val; extern spinlock_t i8253_lock; \ spin_lock(&i8253_lock); outb_p(0x00, 0x43); val = inb_p(0x40); val |= inb(0x40) << 8; spin_unlock(&i8253_lock); \ if(val > LATCH) { printk("\nVOYAGER: countdown timer value too high (%d), resetting\n\n", val); spin_lock(&i8253_lock); outb(0x34,0x43); outb_p(LATCH & 0xff , 0x40); /* LSB */ outb(LATCH >> 8 , 0x40); /* MSB */ spin_unlock(&i8253_lock); } } #ifdef CONFIG_SMP smp_vic_timer_interrupt(regs); #endif } \ void voyager_power_off(void) { printk("VOYAGER Power Off\n"); \ if(voyager_level == 5) { voyager_cat_power_off(); } else if(voyager_level == 4) { /* This doesn't apparently work on most L4 machines, * but the specs say to do this to get automatic power * off. Unfortunately, if it doesn't power off the * machine, it ends up doing a cold restart, which * isn't really intended, so comment out the code */ #if 0 int port; \ /* enable the voyager Configuration Space */ outb((inb(VOYAGER_MC_SETUP) & 0xf0) | 0x8, VOYAGER_MC_SETUP); /* the port for the power off flag is an offset from the floating base */ port = (inb(VOYAGER_SSPB_RELOCATION_PORT) << 8) + 0x21; /* set the power off flag */ outb(inb(port) | 0x1, port); #endif } /* and wait for it to happen */ for(;;) { __asm("cli"); __asm("hlt"); } } \ void voyager_restart(void) { printk("Voyager Warm Restart\n"); if(voyager_level == 5) { /* write magic values to the RTC to inform system that * shutdown is beginning */ outb(0x8f, 0x70); outb(0x5 , 0x71); udelay(50); outb(0xfe,0x64); /* pull reset low */ } else if(voyager_level == 4) { __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8; __u8 basebd = inb(VOYAGER_MC_SETUP); outb(basebd | 0x08, VOYAGER_MC_SETUP); outb(0x02, catbase + 0x21); } for(;;) { asm("cli"); asm("hlt"); } } \ void voyager_handle_nmi(void) { __u8 dumpval __attribute__((unused)) = inb(0xf823); __u8 swnmi __attribute__((unused)) = inb(0xf813); extern void show_stack(unsigned long *); \ /* FIXME: assume dump switch pressed */ /* check to see if the dump switch was pressed */ VDEBUG(("VOYAGER: dumpval = 0x%x, swnmi = 0x%x\n", dumpval, swnmi)); /* clear swnmi */ outb(0xff, 0xf813); /* tell SUS to ignore dump */ if(voyager_level == 5 && voyager_SUS != NULL) { if(voyager_SUS->SUS_mbox == VOYAGER_DUMP_BUTTON_NMI) { voyager_SUS->kernel_mbox = VOYAGER_NO_COMMAND; voyager_SUS->kernel_flags |= VOYAGER_OS_IN_PROGRESS; udelay(1000); voyager_SUS->kernel_mbox = VOYAGER_IGNORE_DUMP; voyager_SUS->kernel_flags &= ~VOYAGER_OS_IN_PROGRESS; } } printk(KERN_ERR "VOYAGER: Dump switch pressed, printing CPU%d tracebacks\n", smp_processor_id()); show_stack(NULL); show_state(); } jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224140214|40442 D 1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +28 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add the restart and halt functions K 4496 O -rw-rw-r-- P arch/i386/kernel/voyager.c ------------------------------------------------ I22 1 #include D27 1 I27 1 #include D53 2 I54 3 /* install the power off handler */ pm_power_off = voyager_power_off; } else { I222 11 /* copied from process.c */ static inline void kb_wait(void) { int i; \ for (i=0; i<0x10000; i++) if ((inb_p(0x64) & 0x02) == 0) break; } \ D224 1 I224 1 machine_restart(char *cmd) I226 2 kb_wait(); \ I272 9 } \ \ \ void machine_halt(void) { /* treat a halt like a power off */ machine_power_off(); jejb@mulgrave.(none)|arch/i386/kernel/voyager.c|20020224145423|04496 D 1.3 02/03/10 22:36:48-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c Rename: arch/i386/kernel/voyager.c -> arch/i386/voyager/voyager.c K 58331 O -rw-rw-r-- P arch/i386/voyager/voyager.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/voyager.c|20020311033648|58331 D 1.4 02/03/10 22:38:31-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c Rename: arch/i386/voyager/voyager.c -> arch/i386/voyager/voyager_basic.c K 35633 O -rw-rw-r-- P arch/i386/voyager/voyager_basic.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/voyager_basic.c|20020311033831|35633 D 1.5 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +2 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c A K 6363 O -rw-rw-r-- P arch/i386/voyager/voyager_basic.c ------------------------------------------------ I29 1 #include D264 1 I264 1 mca_nmi_hook(void) jejb@mulgrave.(none)|arch/i386/voyager/voyager_basic.c|20020311035244|06363 D 1.6 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +13 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add more power/reboot functions K 19884 O -rw-rw-r-- P arch/i386/voyager/voyager_basic.c ------------------------------------------------ I31 7 /* * Power off function, if any */ void (*pm_power_off)(void); \ int reboot_thru_bios; \ I297 6 } \ void machine_power_off(void) { if (pm_power_off) pm_power_off(); == arch/i386/voyager/voyager_cat.c == New file: arch/i386/kernel/voyager_cat.c V 4 jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140213|51425|4afbdd55fedc3919 D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/kernel/voyager_cat.c K 51425 P arch/i386/kernel/voyager_cat.c R 4afbdd55fedc3919 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/voyager_cat.c|20020224140213|51425|4afbdd55fedc3919 D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +1179 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 52200 O -rw-rw-r-- P arch/i386/kernel/voyager_cat.c ------------------------------------------------ I0 1179 /* -*- mode: c; c-basic-offset: 8 -*- */ \ /* Copyright (C) 1999,2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * linux/arch/i386/kernel/voyager_cat.c * * This file contains all the logic for manipulating the CAT bus * in a level 5 machine. * * The CAT bus is a serial configuration and test bus. Its primary * uses are to probe the initial configuration of the system and to * diagnose error conditions when a system interrupt occurs. The low * level interface is fairly primitive, so most of this file consists * of bit shift manipulations to send and receive packets on the * serial bus */ \ #include #include #include #include #include #include #include #include #include #include #include #include \ #ifdef VOYAGER_CAT_DEBUG #define CDEBUG(x) printk x #else #define CDEBUG(x) #endif \ /* the CAT command port */ #define CAT_CMD (sspb + 0xe) /* the CAT data port */ #define CAT_DATA (sspb + 0xd) \ /* the internal cat functions */ static void cat_pack(__u8 *msg, __u16 start_bit, __u8 *data, __u16 num_bits); static void cat_unpack(__u8 *msg, __u16 start_bit, __u8 *data, __u16 num_bits); static void cat_build_header(__u8 *header, const __u16 len, const __u16 smallest_reg_bits, const __u16 longest_reg_bits); static int cat_sendinst(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 op); static int cat_getdata(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 *value); static int cat_shiftout(__u8 *data, __u16 data_bytes, __u16 header_bytes, __u8 pad_bits); static int cat_write(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 value); static int cat_read(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 *value); static int cat_subread(voyager_module_t *modp, voyager_asic_t *asicp, __u16 offset, __u16 len, void *buf); static int cat_senddata(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 value); static int cat_disconnect(voyager_module_t *modp, voyager_asic_t *asicp); static int cat_connect(voyager_module_t *modp, voyager_asic_t *asicp); \ static inline const char * cat_module_name(int module_id) { switch(module_id) { case 0x10: return "Processor Slot 0"; case 0x11: return "Processor Slot 1"; case 0x12: return "Processor Slot 2"; case 0x13: return "Processor Slot 4"; case 0x14: return "Memory Slot 0"; case 0x15: return "Memory Slot 1"; case 0x18: return "Primary Microchannel"; case 0x19: return "Secondary Microchannel"; case 0x1a: return "Power Supply Interface"; case 0x1c: return "Processor Slot 5"; case 0x1d: return "Processor Slot 6"; case 0x1e: return "Processor Slot 7"; case 0x1f: return "Processor Slot 8"; default: return "Unknown Module"; } } \ static int sspb = 0; /* stores the super port location */ int voyager_8slot = 0; /* set to true if a 51xx monster */ \ voyager_module_t *voyager_cat_list; \ /* the I/O port assignments for the VIC and QIC */ static struct resource vic_res = { "Voyager Interrupt Controller", 0xFC00, 0xFC6F }; static struct resource qic_res = { "Quad Interrupt Controller", 0xFC70, 0xFCFF }; \ /* This function is used to pack a data bit stream inside a message. * It writes num_bits of the data buffer in msg starting at start_bit. * Note: This function assumes that any unused bit in the data stream * is set to zero so that the ors will work correctly */ #define BITS_PER_BYTE 8 static void cat_pack(__u8 *msg, const __u16 start_bit, __u8 *data, const __u16 num_bits) { /* compute initial shift needed */ const __u16 offset = start_bit % BITS_PER_BYTE; __u16 len = num_bits / BITS_PER_BYTE; __u16 byte = start_bit / BITS_PER_BYTE; __u16 residue = (num_bits % BITS_PER_BYTE) + offset; int i; \ /* adjust if we have more than a byte of residue */ if(residue >= BITS_PER_BYTE) { residue -= BITS_PER_BYTE; len++; } \ /* clear out the bits. We assume here that if len==0 then * residue >= offset. This is always true for the catbus * operations */ msg[byte] &= 0xff << (BITS_PER_BYTE - offset); msg[byte++] |= data[0] >> offset; if(len == 0) return; for(i = 1; i < len; i++) msg[byte++] = (data[i-1] << (BITS_PER_BYTE - offset)) | (data[i] >> offset); if(residue != 0) { __u8 mask = 0xff >> residue; __u8 last_byte = data[i-1] << (BITS_PER_BYTE - offset) | (data[i] >> offset); last_byte &= ~mask; msg[byte] &= mask; msg[byte] |= last_byte; } return; } /* unpack the data again (same arguments as cat_pack()). data buffer * must be zero populated. * * Function: given a message string move to start_bit and copy num_bits into * data (starting at bit 0 in data). */ static void cat_unpack(__u8 *msg, const __u16 start_bit, __u8 *data, const __u16 num_bits) { /* compute initial shift needed */ const __u16 offset = start_bit % BITS_PER_BYTE; __u16 len = num_bits / BITS_PER_BYTE; const __u8 last_bits = num_bits % BITS_PER_BYTE; __u16 byte = start_bit / BITS_PER_BYTE; int i; \ if(last_bits != 0) len++; \ /* special case: want < 8 bits from msg and we can get it from * a single byte of the msg */ if(len == 0 && BITS_PER_BYTE - offset >= num_bits) { data[0] = msg[byte] << offset; data[0] &= 0xff >> (BITS_PER_BYTE - num_bits); return; } for(i = 0; i < len; i++) { /* this annoying if has to be done just in case a read of * msg one beyond the array causes a panic */ if(offset != 0) { data[i] = msg[byte++] << offset; data[i] |= msg[byte] >> (BITS_PER_BYTE - offset); } else { data[i] = msg[byte++]; } } /* do we need to truncate the final byte */ if(last_bits != 0) { data[i-1] &= 0xff << (BITS_PER_BYTE - last_bits); } return; } \ static void cat_build_header(__u8 *header, const __u16 len, const __u16 smallest_reg_bits, const __u16 longest_reg_bits) { int i; __u16 start_bit = (smallest_reg_bits - 1) % BITS_PER_BYTE; __u8 *last_byte = &header[len - 1]; \ if(start_bit == 0) start_bit = 1; /* must have at least one bit in the hdr */ for(i=0; i < len; i++) header[i] = 0; \ for(i = start_bit; i > 0; i--) *last_byte = ((*last_byte) << 1) + 1; \ } \ static int cat_sendinst(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 op) { __u8 parity, inst, inst_buf[4] = { 0 }; __u8 iseq[VOYAGER_MAX_SCAN_PATH], hseq[VOYAGER_MAX_REG_SIZE]; __u16 ibytes, hbytes, padbits; int i; /* * Parity is the parity of the register number + 1 (READ_REGISTER * and WRITE_REGISTER always add '1' to the number of bits == 1) */ parity = (__u8)(1 + (reg & 0x01) + ((__u8)(reg & 0x02) >> 1) + ((__u8)(reg & 0x04) >> 2) + ((__u8)(reg & 0x08) >> 3)) % 2; \ inst = ((parity << 7) | (reg << 2) | op); \ outb(VOYAGER_CAT_IRCYC, CAT_CMD); if(!modp->scan_path_connected) { if(asicp->asic_id != VOYAGER_CAT_ID) { printk("**WARNING***: cat_sendinst has disconnected scan path not to CAT asic\n"); return 1; } outb(VOYAGER_CAT_HEADER, CAT_DATA); outb(inst, CAT_DATA); if(inb(CAT_DATA) != VOYAGER_CAT_HEADER) { CDEBUG(("VOYAGER CAT: cat_sendinst failed to get CAT_HEADER\n")); return 1; } return 0; } ibytes = modp->inst_bits / BITS_PER_BYTE; if((padbits = modp->inst_bits % BITS_PER_BYTE) != 0) { padbits = BITS_PER_BYTE - padbits; ibytes++; } hbytes = modp->largest_reg / BITS_PER_BYTE; if(modp->largest_reg % BITS_PER_BYTE) hbytes++; CDEBUG(("cat_sendinst: ibytes=%d, hbytes=%d\n", ibytes, hbytes)); /* initialise the instruction sequence to 0xff */ for(i=0; i < ibytes + hbytes; i++) iseq[i] = 0xff; cat_build_header(hseq, hbytes, modp->smallest_reg, modp->largest_reg); cat_pack(iseq, modp->inst_bits, hseq, hbytes * BITS_PER_BYTE); inst_buf[0] = inst; inst_buf[1] = 0xFF >> (modp->largest_reg % BITS_PER_BYTE); cat_pack(iseq, asicp->bit_location, inst_buf, asicp->ireg_length); #ifdef VOYAGER_CAT_DEBUG printk("ins = 0x%x, iseq: ", inst); for(i=0; i< ibytes + hbytes; i++) printk("0x%x ", iseq[i]); printk("\n"); #endif if(cat_shiftout(iseq, ibytes, hbytes, padbits)) { CDEBUG(("VOYAGER CAT: cat_sendinst: cat_shiftout failed\n")); return 1; } CDEBUG(("CAT SHIFTOUT DONE\n")); return 0; } \ static int cat_getdata(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 *value) { if(!modp->scan_path_connected) { if(asicp->asic_id != VOYAGER_CAT_ID) { CDEBUG(("VOYAGER CAT: ERROR: cat_getdata to CAT asic with scan path connected\n")); return 1; } if(reg > VOYAGER_SUBADDRHI) outb(VOYAGER_CAT_RUN, CAT_CMD); outb(VOYAGER_CAT_DRCYC, CAT_CMD); outb(VOYAGER_CAT_HEADER, CAT_DATA); *value = inb(CAT_DATA); outb(0xAA, CAT_DATA); if(inb(CAT_DATA) != VOYAGER_CAT_HEADER) { CDEBUG(("cat_getdata: failed to get VOYAGER_CAT_HEADER\n")); return 1; } return 0; } else { __u16 sbits = modp->num_asics -1 + asicp->ireg_length; __u16 sbytes = sbits / BITS_PER_BYTE; __u16 tbytes; __u8 string[VOYAGER_MAX_SCAN_PATH], trailer[VOYAGER_MAX_REG_SIZE]; __u8 padbits; int i; outb(VOYAGER_CAT_DRCYC, CAT_CMD); \ if((padbits = sbits % BITS_PER_BYTE) != 0) { padbits = BITS_PER_BYTE - padbits; sbytes++; } tbytes = asicp->ireg_length / BITS_PER_BYTE; if(asicp->ireg_length % BITS_PER_BYTE) tbytes++; CDEBUG(("cat_getdata: tbytes = %d, sbytes = %d, padbits = %d\n", tbytes, sbytes, padbits)); cat_build_header(trailer, tbytes, 1, asicp->ireg_length); \ for(i = tbytes - 1; i >= 0; i--) { outb(trailer[i], CAT_DATA); string[sbytes + i] = inb(CAT_DATA); } \ for(i = sbytes - 1; i >= 0; i--) { outb(0xaa, CAT_DATA); string[i] = inb(CAT_DATA); } *value = 0; cat_unpack(string, padbits + (tbytes * BITS_PER_BYTE) + asicp->asic_location, value, asicp->ireg_length); #ifdef VOYAGER_CAT_DEBUG printk("value=0x%x, string: ", *value); for(i=0; i< tbytes+sbytes; i++) printk("0x%x ", string[i]); printk("\n"); #endif /* sanity check the rest of the return */ for(i=0; i < tbytes; i++) { __u8 input = 0; \ cat_unpack(string, padbits + (i * BITS_PER_BYTE), &input, BITS_PER_BYTE); if(trailer[i] != input) { CDEBUG(("cat_getdata: failed to sanity check rest of ret(%d) 0x%x != 0x%x\n", i, input, trailer[i])); return 1; } } CDEBUG(("cat_getdata DONE\n")); return 0; } } \ static int cat_shiftout(__u8 *data, __u16 data_bytes, __u16 header_bytes, __u8 pad_bits) { int i; for(i = data_bytes + header_bytes - 1; i >= header_bytes; i--) outb(data[i], CAT_DATA); \ for(i = header_bytes - 1; i >= 0; i--) { __u8 header = 0; __u8 input; \ outb(data[i], CAT_DATA); input = inb(CAT_DATA); CDEBUG(("cat_shiftout: returned 0x%x\n", input)); cat_unpack(data, ((data_bytes + i) * BITS_PER_BYTE) - pad_bits, &header, BITS_PER_BYTE); if(input != header) { CDEBUG(("VOYAGER CAT: cat_shiftout failed to return header 0x%x != 0x%x\n", input, header)); return 1; } } return 0; } \ static int cat_senddata(voyager_module_t *modp, voyager_asic_t *asicp, __u8 reg, __u8 value) { outb(VOYAGER_CAT_DRCYC, CAT_CMD); if(!modp->scan_path_connected) { if(asicp->asic_id != VOYAGER_CAT_ID) { CDEBUG(("VOYAGER CAT: ERROR: scan path disconnected when asic != CAT\n")); return 1; } outb(VOYAGER_CAT_HEADER, CAT_DATA); outb(value, CAT_DATA); if(inb(CAT_DATA) != VOYAGER_CAT_HEADER) { CDEBUG(("cat_senddata: failed to get correct header response to sent data\n")); return 1; } if(reg > VOYAGER_SUBADDRHI) { outb(VOYAGER_CAT_RUN, CAT_CMD); outb(VOYAGER_CAT_END, CAT_CMD); outb(VOYAGER_CAT_RUN, CAT_CMD); } return 0; } else { __u16 hbytes = asicp->ireg_length / BITS_PER_BYTE; __u16 dbytes = (modp->num_asics - 1 + asicp->ireg_length)/BITS_PER_BYTE; __u8 padbits, dseq[VOYAGER_MAX_SCAN_PATH], hseq[VOYAGER_MAX_REG_SIZE]; int i; \ if((padbits = (modp->num_asics - 1 + asicp->ireg_length) % BITS_PER_BYTE) != 0) { padbits = BITS_PER_BYTE - padbits; dbytes++; } if(asicp->ireg_length % BITS_PER_BYTE) hbytes++; cat_build_header(hseq, hbytes, 1, asicp->ireg_length); for(i = 0; i < dbytes + hbytes; i++) dseq[i] = 0xff; CDEBUG(("cat_senddata: dbytes=%d, hbytes=%d, padbits=%d\n", dbytes, hbytes, padbits)); cat_pack(dseq, modp->num_asics - 1 + asicp->ireg_length, hseq, hbytes * BITS_PER_BYTE); cat_pack(dseq, asicp->asic_location, &value, asicp->ireg_length); #ifdef VOYAGER_CAT_DEBUG printk("dseq "); for(i=0; i 1) { /* set auto increment */ __u8 newval; if(cat_read(modp, asicp, VOYAGER_AUTO_INC_REG, &val)) { CDEBUG(("cat_subaddrsetup: read of VOYAGER_AUTO_INC_REG failed\n")); return 1; } CDEBUG(("cat_subaddrsetup: VOYAGER_AUTO_INC_REG = 0x%x\n", val)); newval = val | VOYAGER_AUTO_INC; if(newval != val) { if(cat_write(modp, asicp, VOYAGER_AUTO_INC_REG, val)) { CDEBUG(("cat_subaddrsetup: write to VOYAGER_AUTO_INC_REG failed\n")); return 1; } } } if(cat_write(modp, asicp, VOYAGER_SUBADDRLO, (__u8)(offset &0xff))) { CDEBUG(("cat_subaddrsetup: write to SUBADDRLO failed\n")); return 1; } if(asicp->subaddr > VOYAGER_SUBADDR_LO) { if(cat_write(modp, asicp, VOYAGER_SUBADDRHI, (__u8)(offset >> 8))) { CDEBUG(("cat_subaddrsetup: write to SUBADDRHI failed\n")); return 1; } cat_read(modp, asicp, VOYAGER_SUBADDRHI, &val); CDEBUG(("cat_subaddrsetup: offset = %d, hi = %d\n", offset, val)); } cat_read(modp, asicp, VOYAGER_SUBADDRLO, &val); CDEBUG(("cat_subaddrsetup: offset = %d, lo = %d\n", offset, val)); return 0; } static int cat_subwrite(voyager_module_t *modp, voyager_asic_t *asicp, __u16 offset, __u16 len, void *buf) { int i, retval; \ /* FIXME: need special actions for VOYAGER_CAT_ID here */ if(asicp->asic_id == VOYAGER_CAT_ID) { CDEBUG(("cat_subwrite: ATTEMPT TO WRITE TO CAT ASIC\n")); /* FIXME -- This is supposed to be handled better * There is a problem writing to the cat asic in the * PSI. The 30us delay seems to work, though */ udelay(30); } if((retval = cat_subaddrsetup(modp, asicp, offset, len)) != 0) { printk("cat_subwrite: cat_subaddrsetup FAILED\n"); return retval; } if(cat_sendinst(modp, asicp, VOYAGER_SUBADDRDATA, VOYAGER_WRITE_CONFIG)) { printk("cat_subwrite: cat_sendinst FAILED\n"); return 1; } for(i = 0; i < len; i++) { if(cat_senddata(modp, asicp, 0xFF, ((__u8 *)buf)[i])) { printk("cat_subwrite: cat_sendata element at %d FAILED\n", i); return 1; } } return 0; } static int cat_subread(voyager_module_t *modp, voyager_asic_t *asicp, __u16 offset, __u16 len, void *buf) { int i, retval; \ if((retval = cat_subaddrsetup(modp, asicp, offset, len)) != 0) { CDEBUG(("cat_subread: cat_subaddrsetup FAILED\n")); return retval; } \ if(cat_sendinst(modp, asicp, VOYAGER_SUBADDRDATA, VOYAGER_READ_CONFIG)) { CDEBUG(("cat_subread: cat_sendinst failed\n")); return 1; } for(i = 0; i < len; i++) { if(cat_getdata(modp, asicp, 0xFF, &((__u8 *)buf)[i])) { CDEBUG(("cat_subread: cat_getdata element %d failed\n", i)); return 1; } } return 0; } \ \ /* buffer for storing EPROM data read in during initialisation */ static __initdata __u8 eprom_buf[0xFFFF]; static voyager_module_t *voyager_initial_module; \ /* Initialise the cat bus components. We assume this is called by the * boot cpu *after* all memory initialisation has been done (so we can * use kmalloc) but before smp initialisation, so we can probe the SMP * configuration and pick up necessary information. */ void voyager_cat_init(void) { voyager_module_t **modpp = &voyager_initial_module; voyager_asic_t **asicpp; voyager_asic_t *qabc_asic = NULL; int i, j; unsigned long qic_addr = 0; __u8 qabc_data[0x20]; __u8 num_submodules, val; voyager_eprom_hdr_t *eprom_hdr = (voyager_eprom_hdr_t *)&eprom_buf[0]; __u8 cmos[4]; unsigned long addr; /* initiallise the SUS mailbox */ for(i=0; iSUS_version); voyager_SUS->kernel_version = VOYAGER_MAILBOX_VERSION; voyager_SUS->kernel_flags = VOYAGER_OS_HAS_SYSINT; } \ /* clear the processor counts */ voyager_extended_vic_processors = 0; voyager_quad_processors = 0; \ \ \ printk("VOYAGER: beginning CAT bus probe\n"); /* set up the SuperSet Port Block which tells us where the * CAT communication port is */ sspb = inb(VOYAGER_SSPB_RELOCATION_PORT) * 0x100; VDEBUG(("VOYAGER DEBUG: sspb = 0x%x\n", sspb)); \ /* now find out if were 8 slot or normal */ if((inb(VIC_PROC_WHO_AM_I) & EIGHT_SLOT_IDENTIFIER) == EIGHT_SLOT_IDENTIFIER) { voyager_8slot = 1; printk(KERN_NOTICE "Voyager: Eight slot 51xx configuration detected\n"); } \ for(i = VOYAGER_MIN_MODULE; i <= VOYAGER_MAX_MODULE; i++) { __u8 input; int asic; __u16 eprom_size; __u16 sp_offset; \ outb(VOYAGER_CAT_DESELECT, VOYAGER_CAT_CONFIG_PORT); outb(i, VOYAGER_CAT_CONFIG_PORT); \ /* check the presence of the module */ outb(VOYAGER_CAT_RUN, CAT_CMD); outb(VOYAGER_CAT_IRCYC, CAT_CMD); outb(VOYAGER_CAT_HEADER, CAT_DATA); /* stream series of alternating 1's and 0's to stimulate * response */ outb(0xAA, CAT_DATA); input = inb(CAT_DATA); outb(VOYAGER_CAT_END, CAT_CMD); if(input != VOYAGER_CAT_HEADER) { continue; } CDEBUG(("VOYAGER DEBUG: found module id 0x%x, %s\n", i, cat_module_name(i))); *modpp = kmalloc(sizeof(voyager_module_t), GFP_KERNEL); /*&voyager_module_storage[cat_count++];*/ if(*modpp == NULL) { printk("**WARNING** kmalloc failure in cat_init\n"); continue; } memset(*modpp, 0, sizeof(voyager_module_t)); /* need temporary asic for cat_subread. It will be * filled in correctly later */ (*modpp)->asic = kmalloc(sizeof(voyager_asic_t), GFP_KERNEL); /*&voyager_asic_storage[asic_count];*/ if((*modpp)->asic == NULL) { printk("**WARNING** kmalloc failure in cat_init\n"); continue; } memset((*modpp)->asic, 0, sizeof(voyager_asic_t)); (*modpp)->asic->asic_id = VOYAGER_CAT_ID; (*modpp)->asic->subaddr = VOYAGER_SUBADDR_HI; (*modpp)->module_addr = i; (*modpp)->scan_path_connected = 0; if(i == VOYAGER_PSI) { /* Exception leg for modules with no EEPROM */ printk("Module \"%s\"\n", cat_module_name(i)); continue; } CDEBUG(("cat_init: Reading eeprom for module 0x%x at offset %d\n", i, VOYAGER_XSUM_END_OFFSET)); outb(VOYAGER_CAT_RUN, CAT_CMD); cat_disconnect(*modpp, (*modpp)->asic); if(cat_subread(*modpp, (*modpp)->asic, VOYAGER_XSUM_END_OFFSET, sizeof(eprom_size), &eprom_size)) { printk("**WARNING**: Voyager couldn't read EPROM size for module 0x%x\n", i); outb(VOYAGER_CAT_END, CAT_CMD); continue; } if(eprom_size > sizeof(eprom_buf)) { printk("**WARNING**: Voyager insufficient size to read EPROM data, module 0x%x. Need %d\n", i, eprom_size); outb(VOYAGER_CAT_END, CAT_CMD); continue; } outb(VOYAGER_CAT_END, CAT_CMD); outb(VOYAGER_CAT_RUN, CAT_CMD); CDEBUG(("cat_init: module 0x%x, eeprom_size %d\n", i, eprom_size)); if(cat_subread(*modpp, (*modpp)->asic, 0, eprom_size, eprom_buf)) { outb(VOYAGER_CAT_END, CAT_CMD); continue; } outb(VOYAGER_CAT_END, CAT_CMD); printk("Module \"%s\", version 0x%x, tracer 0x%x, asics %d\n", cat_module_name(i), eprom_hdr->version_id, *((__u32 *)eprom_hdr->tracer), eprom_hdr->num_asics); (*modpp)->ee_size = eprom_hdr->ee_size; (*modpp)->num_asics = eprom_hdr->num_asics; asicpp = &((*modpp)->asic); sp_offset = eprom_hdr->scan_path_offset; /* All we really care about are the Quad cards. We * identify them because they are in a processor slot * and have only four asics */ if((i < 0x10 || (i>=0x14 && i < 0x1c) || i>0x1f)) { modpp = &((*modpp)->next); continue; } /* Now we know it's in a processor slot, does it have * a quad baseboard submodule */ outb(VOYAGER_CAT_RUN, CAT_CMD); cat_read(*modpp, (*modpp)->asic, VOYAGER_SUBMODPRESENT, &num_submodules); /* lowest two bits, active low */ num_submodules = ~(0xfc | num_submodules); CDEBUG(("VOYAGER CAT: %d submodules present\n", num_submodules)); if(num_submodules == 0) { /* fill in the dyadic extended processors */ __u8 cpu = i & 0x07; \ printk("Module \"%s\": Dyadic Processor Card\n", cat_module_name(i)); voyager_extended_vic_processors |= (1<asic, VOYAGER_SUBMODSELECT, &val); CDEBUG(("cat_init: SUBMODSELECT value = 0x%x\n", val)); val = (val & 0x7c) | VOYAGER_QUAD_BASEBOARD; cat_write(*modpp, (*modpp)->asic, VOYAGER_SUBMODSELECT, val); \ outb(VOYAGER_CAT_END, CAT_CMD); \ CDEBUG(("cat_init: Reading eeprom for module 0x%x at offset %d\n", i, VOYAGER_XSUM_END_OFFSET)); outb(VOYAGER_CAT_RUN, CAT_CMD); cat_disconnect(*modpp, (*modpp)->asic); if(cat_subread(*modpp, (*modpp)->asic, VOYAGER_XSUM_END_OFFSET, sizeof(eprom_size), &eprom_size)) { printk("**WARNING**: Voyager couldn't read EPROM size for module 0x%x\n", i); outb(VOYAGER_CAT_END, CAT_CMD); continue; } if(eprom_size > sizeof(eprom_buf)) { printk("**WARNING**: Voyager insufficient size to read EPROM data, module 0x%x. Need %d\n", i, eprom_size); outb(VOYAGER_CAT_END, CAT_CMD); continue; } outb(VOYAGER_CAT_END, CAT_CMD); outb(VOYAGER_CAT_RUN, CAT_CMD); CDEBUG(("cat_init: module 0x%x, eeprom_size %d\n", i, eprom_size)); if(cat_subread(*modpp, (*modpp)->asic, 0, eprom_size, eprom_buf)) { outb(VOYAGER_CAT_END, CAT_CMD); continue; } outb(VOYAGER_CAT_END, CAT_CMD); /* Now do everything for the QBB submodule 1 */ (*modpp)->ee_size = eprom_hdr->ee_size; (*modpp)->num_asics = eprom_hdr->num_asics; asicpp = &((*modpp)->asic); sp_offset = eprom_hdr->scan_path_offset; /* get rid of the dummy CAT asic and read the real one */ kfree((*modpp)->asic); for(asic=0; asic < (*modpp)->num_asics; asic++) { int j; voyager_asic_t *asicp = *asicpp = kmalloc(sizeof(voyager_asic_t), GFP_KERNEL); /*&voyager_asic_storage[asic_count++];*/ voyager_sp_table_t *sp_table; voyager_at_t *asic_table; voyager_jtt_t *jtag_table; \ if(asicp == NULL) { printk("**WARNING** kmalloc failure in cat_init\n"); continue; } memset(asicp, 0, sizeof(voyager_asic_t)); asicpp = &(asicp->next); asicp->asic_location = asic; sp_table = (voyager_sp_table_t *)(eprom_buf + sp_offset); asicp->asic_id = sp_table->asic_id; asic_table = (voyager_at_t *)(eprom_buf + sp_table->asic_data_offset); for(j=0; j<4; j++) asicp->jtag_id[j] = asic_table->jtag_id[j]; jtag_table = (voyager_jtt_t *)(eprom_buf + asic_table->jtag_offset); asicp->ireg_length = jtag_table->ireg_len; asicp->bit_location = (*modpp)->inst_bits; (*modpp)->inst_bits += asicp->ireg_length; if(asicp->ireg_length > (*modpp)->largest_reg) (*modpp)->largest_reg = asicp->ireg_length; if (asicp->ireg_length < (*modpp)->smallest_reg || (*modpp)->smallest_reg == 0) (*modpp)->smallest_reg = asicp->ireg_length; CDEBUG(("asic 0x%x, ireg_length=%d, bit_location=%d\n", asicp->asic_id, asicp->ireg_length, asicp->bit_location)); if(asicp->asic_id == VOYAGER_QUAD_QABC) { CDEBUG(("VOYAGER CAT: QABC ASIC found\n")); qabc_asic = asicp; } sp_offset += sizeof(voyager_sp_table_t); } CDEBUG(("Module inst_bits = %d, largest_reg = %d, smallest_reg=%d\n", (*modpp)->inst_bits, (*modpp)->largest_reg, (*modpp)->smallest_reg)); /* OK, now we have the QUAD ASICs set up, use them. * we need to: * * 1. Find the Memory area for the Quad CPIs. * 2. Find the Extended VIC processor * 3. Configure a second extended VIC processor (This * cannot be done for the 51xx. * */ outb(VOYAGER_CAT_RUN, CAT_CMD); cat_connect(*modpp, (*modpp)->asic); CDEBUG(("CAT CONNECTED!!\n")); cat_subread(*modpp, qabc_asic, 0, sizeof(qabc_data), qabc_data); qic_addr = qabc_data[5] << 8; qic_addr = (qic_addr | qabc_data[6]) << 8; qic_addr = (qic_addr | qabc_data[7]) << 8; printk("Module \"%s\": Quad Processor Card; CPI 0x%lx, SET=0x%x\n", cat_module_name(i), qic_addr, qabc_data[8]); #if 0 /* plumbing fails---FIXME */ if((qabc_data[8] & 0xf0) == 0) { /* FIXME: 32 way 8 CPU slot monster cannot be * plumbed this way---need to check for it */ \ printk("Plumbing second Extended Quad Processor\n"); /* second VIC line hardwired to Quad CPU 1 */ qabc_data[8] |= 0x20; cat_subwrite(*modpp, qabc_asic, 8, 1, &qabc_data[8]); #ifdef VOYAGER_CAT_DEBUG /* verify plumbing */ cat_subread(*modpp, qabc_asic, 8, 1, &qabc_data[8]); if((qabc_data[8] & 0xf0) == 0) { CDEBUG(("PLUMBING FAILED: 0x%x\n", qabc_data[8])); } #endif } #endif \ { struct resource *res = kmalloc(sizeof(struct resource),GFP_KERNEL); memset(res, 0, sizeof(struct resource)); res->name = kmalloc(128, GFP_KERNEL); sprintf((char *)res->name, "Voyager %s Quad CPI", cat_module_name(i)); res->start = qic_addr; res->end = qic_addr + 0x3ff; request_resource(&iomem_resource, res); } \ qic_addr = (unsigned long)ioremap(qic_addr, 0x400); for(j = 0; j < 4; j++) { __u8 cpu; \ if(voyager_8slot) { /* 8 slot has a different mapping, * each slot has only one vic line, so * 1 cpu in each slot must be < 8 */ cpu = (i & 0x07) + j*8; } else { cpu = (i & 0x03) + j*4; } if( (qabc_data[8] & (1<next); } *modpp = NULL; printk("CAT Bus Initialisation finished: extended procs 0x%x, quad procs 0x%x, allowed vic boot = 0x%x\n", voyager_extended_vic_processors, voyager_quad_processors, voyager_allowed_boot_processors); request_resource(&ioport_resource, &vic_res); if(voyager_quad_processors) request_resource(&ioport_resource, &qic_res); /* set up the front power switch */ } \ int voyager_cat_readb(__u8 module, __u8 asic, int reg) { return 0; } \ static int cat_disconnect(voyager_module_t *modp, voyager_asic_t *asicp) { __u8 val; int err = 0; \ if(!modp->scan_path_connected) return 0; if(asicp->asic_id != VOYAGER_CAT_ID) { CDEBUG(("cat_disconnect: ASIC is not CAT\n")); return 1; } err = cat_read(modp, asicp, VOYAGER_SCANPATH, &val); if(err) { CDEBUG(("cat_disconnect: failed to read SCANPATH\n")); return err; } val &= VOYAGER_DISCONNECT_ASIC; err = cat_write(modp, asicp, VOYAGER_SCANPATH, val); if(err) { CDEBUG(("cat_disconnect: failed to write SCANPATH\n")); return err; } outb(VOYAGER_CAT_END, CAT_CMD); outb(VOYAGER_CAT_RUN, CAT_CMD); modp->scan_path_connected = 0; \ return 0; } \ static int cat_connect(voyager_module_t *modp, voyager_asic_t *asicp) { __u8 val; int err = 0; \ if(modp->scan_path_connected) return 0; if(asicp->asic_id != VOYAGER_CAT_ID) { CDEBUG(("cat_connect: ASIC is not CAT\n")); return 1; } \ err = cat_read(modp, asicp, VOYAGER_SCANPATH, &val); if(err) { CDEBUG(("cat_connect: failed to read SCANPATH\n")); return err; } val |= VOYAGER_CONNECT_ASIC; err = cat_write(modp, asicp, VOYAGER_SCANPATH, val); if(err) { CDEBUG(("cat_connect: failed to write SCANPATH\n")); return err; } outb(VOYAGER_CAT_END, CAT_CMD); outb(VOYAGER_CAT_RUN, CAT_CMD); modp->scan_path_connected = 1; \ return 0; } \ void voyager_cat_power_off(void) { /* Power the machine off by writing to the PSI over the CAT * bus */ __u8 data; voyager_module_t psi = { 0 }; voyager_asic_t psi_asic = { 0 }; \ psi.asic = &psi_asic; psi.asic->asic_id = VOYAGER_CAT_ID; psi.asic->subaddr = VOYAGER_SUBADDR_HI; psi.module_addr = VOYAGER_PSI; psi.scan_path_connected = 0; \ outb(VOYAGER_CAT_END, CAT_CMD); /* Connect the PSI to the CAT Bus */ outb(VOYAGER_CAT_DESELECT, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_PSI, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_CAT_RUN, CAT_CMD); cat_disconnect(&psi, &psi_asic); /* Read the status */ cat_subread(&psi, &psi_asic, VOYAGER_PSI_GENERAL_REG, 1, &data); outb(VOYAGER_CAT_END, CAT_CMD); CDEBUG(("PSI STATUS 0x%x\n", data)); /* These two writes are power off prep and perform */ data = PSI_CLEAR; outb(VOYAGER_CAT_RUN, CAT_CMD); cat_subwrite(&psi, &psi_asic, VOYAGER_PSI_GENERAL_REG, 1, &data); outb(VOYAGER_CAT_END, CAT_CMD); data = PSI_POWER_DOWN; outb(VOYAGER_CAT_RUN, CAT_CMD); cat_subwrite(&psi, &psi_asic, VOYAGER_PSI_GENERAL_REG, 1, &data); outb(VOYAGER_CAT_END, CAT_CMD); } \ struct voyager_status voyager_status = { 0 }; \ void voyager_cat_psi(__u8 cmd, __u16 reg, __u8 *data) { voyager_module_t psi = { 0 }; voyager_asic_t psi_asic = { 0 }; \ psi.asic = &psi_asic; psi.asic->asic_id = VOYAGER_CAT_ID; psi.asic->subaddr = VOYAGER_SUBADDR_HI; psi.module_addr = VOYAGER_PSI; psi.scan_path_connected = 0; \ outb(VOYAGER_CAT_END, CAT_CMD); /* Connect the PSI to the CAT Bus */ outb(VOYAGER_CAT_DESELECT, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_PSI, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_CAT_RUN, CAT_CMD); cat_disconnect(&psi, &psi_asic); switch(cmd) { case VOYAGER_PSI_READ: cat_read(&psi, &psi_asic, reg, data); break; case VOYAGER_PSI_WRITE: cat_write(&psi, &psi_asic, reg, *data); break; case VOYAGER_PSI_SUBREAD: cat_subread(&psi, &psi_asic, reg, 1, data); break; case VOYAGER_PSI_SUBWRITE: cat_subwrite(&psi, &psi_asic, reg, 1, data); break; default: printk(KERN_ERR "Voyager PSI, unrecognised command %d\n", cmd); break; } outb(VOYAGER_CAT_END, CAT_CMD); } \ void voyager_cat_do_common_interrupt(void) { /* This is caused either by a memory parity error or something * in the PSI */ __u8 data; voyager_module_t psi = { 0 }; voyager_asic_t psi_asic = { 0 }; struct voyager_psi psi_reg; int i; re_read: psi.asic = &psi_asic; psi.asic->asic_id = VOYAGER_CAT_ID; psi.asic->subaddr = VOYAGER_SUBADDR_HI; psi.module_addr = VOYAGER_PSI; psi.scan_path_connected = 0; \ outb(VOYAGER_CAT_END, CAT_CMD); /* Connect the PSI to the CAT Bus */ outb(VOYAGER_CAT_DESELECT, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_PSI, VOYAGER_CAT_CONFIG_PORT); outb(VOYAGER_CAT_RUN, CAT_CMD); cat_disconnect(&psi, &psi_asic); /* Read the status. NOTE: Need to read *all* the PSI regs here * otherwise the cmn int will be reasserted */ for(i = 0; i < sizeof(psi_reg.regs); i++) { cat_read(&psi, &psi_asic, i, &((__u8 *)&psi_reg.regs)[i]); } outb(VOYAGER_CAT_END, CAT_CMD); if((psi_reg.regs.checkbit & 0x02) == 0) { psi_reg.regs.checkbit |= 0x02; cat_write(&psi, &psi_asic, 5, psi_reg.regs.checkbit); printk("VOYAGER RE-READ PSI\n"); goto re_read; } outb(VOYAGER_CAT_RUN, CAT_CMD); for(i = 0; i < sizeof(psi_reg.subregs); i++) { /* This looks strange, but the PSI doesn't do auto increment * correctly */ cat_subread(&psi, &psi_asic, VOYAGER_PSI_SUPPLY_REG + i, 1, &((__u8 *)&psi_reg.subregs)[i]); } outb(VOYAGER_CAT_END, CAT_CMD); #ifdef VOYAGER_CAT_DEBUG printk("VOYAGER PSI: "); for(i=0; i arch/i386/voyager/voyager_cat.c K 63911 O -rw-rw-r-- P arch/i386/voyager/voyager_cat.c ------------------------------------------------ == arch/i386/voyager/voyager_smp.c == New file: arch/i386/kernel/voyager_smp.c V 4 jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/kernel/voyager_smp.c K 53264 P arch/i386/kernel/voyager_smp.c R 34d3a1aeab4cdc5c X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224140213|53264|34d3a1aeab4cdc5c D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +1964 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 3482 O -rw-rw-r-- P arch/i386/kernel/voyager_smp.c ------------------------------------------------ I0 1964 /* -*- mode: c; c-basic-offset: 8 -*- */ \ /* Copyright (C) 1999,2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * linux/arch/i386/kernel/voyager_smp.c * * This file provides all the same external entries as smp.c but uses * the voyager hal to provide the functionality */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include \ #include \ /* The global kernel spinlock */ spinlock_t kernel_flag = SPIN_LOCK_UNLOCKED; \ /* variables used by voyager_thread.c */ int kvoyagerd_running = 0; DECLARE_COMPLETION(kvoyagerd_wait); \ /* TLB state -- visible externally, indexed physically */ struct tlb_state cpu_tlbstate[NR_CPUS] = {[0 ... NR_CPUS-1] = { &init_mm, 0 }}; \ /* CPU IRQ affinity -- set to all ones initially */ static unsigned long cpu_irq_affinity[NR_CPUS] = { [0 ... NR_CPUS-1] = ~0UL }; \ /* Set when the idlers are all forked - Set in main.c but not actually * used by any other parts of the kernel */ int smp_threads_ready = 0; \ /* per CPU data structure (for /proc/cpuinfo et al), visible externally * indexed physically */ struct cpuinfo_x86 cpu_data[NR_CPUS]; \ /* physical ID of the CPU used to boot the system */ unsigned char boot_cpu_id; \ /* which logical number maps to which CPU */ volatile int __cpu_logical_map[NR_CPUS]; \ /* which physical CPU maps to which logical number */ volatile int __cpu_number_map[NR_CPUS]; \ /* The memory line addresses for the Quad CPIs */ struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS]; \ /* The masks for the Extended VIC processors, filled in by cat_init */ __u32 voyager_extended_vic_processors = 0; \ /* Masks for the extended Quad processors which cannot be VIC booted */ __u32 voyager_allowed_boot_processors = 0; \ /* The mask for the Quad Processors (both extended and non-extended) */ __u32 voyager_quad_processors = 0; \ /* Total count of live CPUs, used in process.c to display * the CPU information and in irq.c for the per CPU irq * activity count. Finally exported by i386_ksyms.c */ int smp_num_cpus = 1; static int voyager_extended_cpus = 1; \ /* Have we found an SMP box - used by time.c to do the profiling interrupt for timeslicing; do not set to 1 until the per CPU timer interrupt is active */ int smp_found_config = 0; \ /* Used for the invalidate map that's also checked in the spinlock */ volatile unsigned long smp_invalidate_needed; \ /* Bitmask of currently online CPUs - used by setup.c for /proc/cpuinfo, visible externally but still physical */ unsigned long cpu_online_map = 0; \ /* Bitmask of CPUs present in the system - exported by i386_syms.c, used * by scheduler but indexed physically */ unsigned long cpu_present_map = 0; \ /* estimate of time used to flush the SMP-local cache - used in * processor affinity calculations */ cycles_t cacheflush_time = 0; \ /* The internal functions */ static void send_CPI(__u32 cpuset, __u8 cpi); static void ack_CPI(__u8 cpi); static int ack_QIC_CPI(__u8 cpi); static void ack_special_QIC_CPI(__u8 cpi); static void ack_VIC_CPI(__u8 cpi); static void send_CPI_allbutself(__u8 cpi); static void enable_vic_irq(unsigned int irq); static void disable_vic_irq(unsigned int irq); static unsigned int startup_vic_irq(unsigned int irq); static void enable_local_vic_irq(unsigned int irq); static void disable_local_vic_irq(unsigned int irq); static void before_handle_vic_irq(unsigned int irq); static void after_handle_vic_irq(unsigned int irq); static void set_vic_irq_affinity(unsigned int irq, unsigned long mask); static void ack_vic_irq(unsigned int irq); static void vic_enable_cpi(void); static void do_boot_cpu(__u8 cpuid); static void do_quad_bootstrap(void); \ int hard_smp_processor_id(void); \ /* Inline functions */ static inline void send_one_QIC_CPI(__u8 cpu, __u8 cpi) { voyager_quad_cpi_addr[cpu]->qic_cpi[cpi].cpi = (smp_processor_id() << 16) + cpi; } \ static inline void send_QIC_CPI(__u32 cpuset, __u8 cpi) { int i; \ for(i=0; i>3 &0x7 on the 32 way */ if(((cpuid >> 2) & 0x03) == i) /* don't lower our own mask! */ continue; \ /* masquerade as local Quad CPU */ outb(QIC_CPUID_ENABLE | i, QIC_PROCESSOR_ID); /* enable the startup CPI */ outb(QIC_BOOT_CPI_MASK, QIC_MASK_REGISTER1); /* restore cpu id */ outb(0, QIC_PROCESSOR_ID); } __restore_flags(flags); } } \ \ /* Set up all the basic stuff: read the SMP config and make all the * SMP information reflect only the boot cpu. All others will be * brought on-line later. */ void __init find_smp_config(void) { int i; \ boot_cpu_id = hard_smp_processor_id(); \ printk("VOYAGER SMP: Boot cpu is %d\n", boot_cpu_id); \ /* initialize the CPU structures (moved from smp_boot_cpus) */ for(i=0; ipte_quick = 0; c->pmd_quick = 0; c->pgd_quick = 0; c->pgtable_cache_sz = 0; identify_cpu(c); } \ /* set up the trampoline and return the physical address of the code */ static __u32 __init setup_trampoline(void) { /* these two are global symbols in trampoline.S */ extern __u8 trampoline_end[]; extern __u8 trampoline_data[]; \ memcpy((__u8 *)trampoline_base, trampoline_data, trampoline_end - trampoline_data); return virt_to_phys((__u8 *)trampoline_base); } \ /* Routine initially called when a non-boot CPU is brought online */ int __init start_secondary(void *unused) { __u8 cpuid = hard_smp_processor_id(); /* external functions not defined in the headers */ extern void calibrate_delay(void); extern int cpu_idle(void); \ cpu_init(); \ /* OK, we're in the routine */ ack_CPI(VIC_CPU_BOOT_CPI); \ /* setup the 8259 master slave pair belonging to this CPU --- * we won't actually receive any until the boot CPU * relinquishes it's static routing mask */ vic_setup_pic(); \ qic_setup(); \ if(is_cpu_quad() && !is_cpu_vic_boot()) { /* clear the boot CPI */ __u8 dummy; \ dummy = voyager_quad_cpi_addr[cpuid]->qic_cpi[VIC_CPU_BOOT_CPI].cpi; printk("read dummy %d\n", dummy); } \ /* lower the mask to receive CPIs */ vic_enable_cpi(); \ VDEBUG(("VOYAGER SMP: CPU%d, stack at about %p\n", cpuid, &cpuid)); \ /* enable interrupts */ sti(); \ #ifdef CONFIG_MTRR /* * Must be done before calibration delay is computed */ mtrr_init_secondary_cpu (); #endif /* get our bogomips */ calibrate_delay(); \ /* save our processor parameters */ smp_store_cpu_info(cpuid); \ /* if we're a quad, we may need to bootstrap other CPUs */ do_quad_bootstrap(); \ VDEBUG(("VOYAGER DEBUG LOGICAL CPU%d, PHYS CPU%d: set cpu_booted_map going into spin\n", __cpu_number_map[cpuid], __cpu_logical_map[cpucount])); \ /* signal that we're done */ cpu_booted_map = 1; \ while(!atomic_read(&smp_commenced)) rep_nop(); \ local_flush_tlb(); return cpu_idle(); } \ static int __init fork_by_hand(void) { struct pt_regs regs; /* don't care about the eip and regs settings since we'll * never reschedule the forked task. */ return do_fork(CLONE_VM|CLONE_PID, 0, ®s, 0); } \ \ /* Routine to kick start the given CPU and wait for it to report ready * (or timeout in startup). When this routine returns, the requested * CPU is either fully running and configured or known to be dead. * * We call this routine sequentially 1 CPU at a time, so no need for * locking */ \ static void __init do_boot_cpu(__u8 cpu) { struct task_struct *idle; int timeout; unsigned long flags; int quad_boot = (1<> 4) & 0xFFFF; \ cpucount++; if(fork_by_hand() < 0) panic("failed fork for CPU%d", cpu); \ idle = init_task.prev_task; if (!idle) panic("No idle process for CPU %d", cpu); idle->processor = cpu; __cpu_logical_map[cpucount] = cpu; __cpu_number_map[cpu] = cpucount; idle->cpus_runnable = 1 << cpu; /* we schedule the first task manually */ idle->thread.eip = (unsigned long) start_secondary; del_from_runqueue(idle); unhash_process(idle); /* init_tasks (in sched.c) is indexed logically */ init_tasks[cpucount] = idle; #if 0 // for AC kernels stack_start.esp = (THREAD_SIZE + (__u8 *)TSK_TO_KSTACK(idle)); #else stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle); #endif /* Note: Don't modify initial ss override */ VDEBUG(("VOYAGER SMP: Booting CPU%d at 0x%lx[%x:%x], stack %p\n", cpu, (unsigned long)hijack_source.val, hijack_source.idt.Segment, hijack_source.idt.Offset, stack_start.esp)); /* set the original swapper_pg_dir[0] to map 0 to 4Mb transparently * (so that the booting CPU can find start_32 */ orig_swapper_pg_dir0 = swapper_pg_dir[0]; #ifdef CONFIG_M486 if(page_table_copies == NULL) panic("No free memory for 486 page tables\n"); for(i = 0; i < PAGE_SIZE/sizeof(unsigned long); i++) page_table_copies[i] = (i * PAGE_SIZE) | _PAGE_RW | _PAGE_USER | _PAGE_PRESENT; \ ((unsigned long *)swapper_pg_dir)[0] = ((virt_to_phys(page_table_copies)) & PAGE_MASK) | _PAGE_RW | _PAGE_USER | _PAGE_PRESENT; #else ((unsigned long *)swapper_pg_dir)[0] = 0x102007; #endif \ if(quad_boot) { printk("CPU %d: non extended Quad boot\n", cpu); hijack_vector = (__u32 *)phys_to_virt((VIC_CPU_BOOT_CPI + QIC_DEFAULT_CPI_BASE)*4); *hijack_vector = hijack_source.val; } else { printk("CPU%d: extended VIC boot\n", cpu); hijack_vector = (__u32 *)phys_to_virt((VIC_CPU_BOOT_CPI + VIC_DEFAULT_CPI_BASE)*4); *hijack_vector = hijack_source.val; /* VIC errata, may also receive interrupt at this address */ hijack_vector = (__u32 *)phys_to_virt((VIC_CPU_BOOT_ERRATA_CPI + VIC_DEFAULT_CPI_BASE)*4); *hijack_vector = hijack_source.val; } /* All non-boot CPUs start with interrupts fully masked. Need * to lower the mask of the CPI we're about to send. We do * this in the VIC by masquerading as the processor we're * about to boot and lowering its interrupt mask */ __save_flags(flags); __cli(); if(quad_boot) { send_one_QIC_CPI(cpu, VIC_CPU_BOOT_CPI); } else { outb(VIC_CPU_MASQUERADE_ENABLE | cpu, VIC_PROCESSOR_ID); /* here we're altering registers belonging to `cpu' */ outb(VIC_BOOT_INTERRUPT_MASK, 0x21); /* now go back to our original identity */ outb(boot_cpu_id, VIC_PROCESSOR_ID); \ /* and boot the CPU */ \ send_CPI((1<processor = boot_cpu_id; init_idle(); /* FIXME: Need to do something about this but currently only works * on CPUs with a tsc which none of mine have. smp_tune_scheduling(); */ smp_store_cpu_info(boot_cpu_id); printk("CPU%d: ", boot_cpu_id); print_cpu_info(&cpu_data[boot_cpu_id]); \ if(is_cpu_quad()) { /* booting on a Quad CPU */ printk("VOYAGER SMP: Boot CPU is Quad\n"); qic_setup(); do_quad_bootstrap(); } \ /* enable our own CPIs */ vic_enable_cpi(); /* loop over all the extended VIC CPUs and boot them. The * Quad CPUs must be bootstrapped by their extended VIC cpu */ for(i = 0; i < NR_CPUS; i++) { if( i == boot_cpu_id || ((1<thread.esp),"r" (current->thread.eip)); } \ /* handle a Voyager SYS_INT -- If we don't, the base board will * panic the system. * * System interrupts occur because some problem was detected on the * various busses. To find out what you have to probe all the * hardware via the CAT bus. FIXME: At the moment we do nothing. */ asmlinkage void smp_vic_sys_interrupt(void) { ack_CPI(VIC_SYS_INT); printk("Voyager SYSTEM INTERRUPT\n"); } \ /* Handle a voyager CMN_INT; These interrupts occur either because of * a system status change or because a single bit memory error * occurred. FIXME: At the moment, ignore all this. */ asmlinkage void smp_vic_cmn_interrupt(void) { static __u8 in_cmn_int = 0; static spinlock_t cmn_int_lock = SPIN_LOCK_UNLOCKED; \ /* common ints are broadcast, so make sure we only do this once */ spin_lock(&cmn_int_lock); if(in_cmn_int) goto unlock_end; \ in_cmn_int++; spin_unlock(&cmn_int_lock); \ VDEBUG(("Voyager COMMON INTERRUPT\n")); \ if(voyager_level == 5) voyager_cat_do_common_interrupt(); \ spin_lock(&cmn_int_lock); in_cmn_int = 0; unlock_end: spin_unlock(&cmn_int_lock); ack_CPI(VIC_CMN_INT); } \ /* * Reschedule call back. Nothing to do, all the work is done * automatically when we return from the interrupt. */ asmlinkage void smp_reschedule_interrupt(void) { /* do nothing */ } \ static struct mm_struct * flush_mm; static unsigned long flush_va; static spinlock_t tlbstate_lock = SPIN_LOCK_UNLOCKED; #define FLUSH_ALL 0xffffffff \ /* * We cannot call mmdrop() because we are in interrupt context, * instead update mm->cpu_vm_mask. */ static void inline leave_mm (unsigned long cpu) { if (cpu_tlbstate[cpu].state == TLBSTATE_OK) BUG(); clear_bit(cpu, &cpu_tlbstate[cpu].active_mm->cpu_vm_mask); } \ \ /* * Invalidate call-back */ asmlinkage void smp_invalidate_interrupt(void) { __u8 cpu = smp_processor_id(); \ if(!test_bit(cpu, &smp_invalidate_needed)) return; /* This will flood messages. Don't uncomment unless you see * Problems with cross cpu invalidation VDEBUG(("VOYAGER SMP: CPU%d received INVALIDATE_CPI\n", smp_processor_id())); */ \ if (flush_mm == cpu_tlbstate[cpu].active_mm) { if (cpu_tlbstate[cpu].state == TLBSTATE_OK) { if (flush_va == FLUSH_ALL) local_flush_tlb(); else __flush_tlb_one(flush_va); } else leave_mm(cpu); } clear_bit(cpu, &smp_invalidate_needed); } \ /* All the new flush operations for 2.4 */ \ \ /* This routine is called with a physical cpu mask */ static void flush_tlb_others (unsigned long cpumask, struct mm_struct *mm, unsigned long va) { int stuck = 50000; \ if (!cpumask) BUG(); if ((cpumask & cpu_online_map) != cpumask) BUG(); if (cpumask & (1 << smp_processor_id())) BUG(); if (!mm) BUG(); \ spin_lock(&tlbstate_lock); flush_mm = mm; flush_va = va; atomic_set_mask(cpumask, &smp_invalidate_needed); /* * We have to send the CPI only to * CPUs affected. */ send_CPI(cpumask, VIC_INVALIDATE_CPI); \ while (smp_invalidate_needed) { if(--stuck == 0) { printk("***WARNING*** Stuck doing invalidate CPI (CPU%d)\n", smp_processor_id()); break; } } \ /* Uncomment only to debug invalidation problems VDEBUG(("VOYAGER SMP: Completed invalidate CPI (CPU%d)\n", cpu)); */ \ flush_mm = NULL; flush_va = 0; spin_unlock(&tlbstate_lock); } \ void flush_tlb_current_task(void) { struct mm_struct *mm = current->mm; unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id()); \ local_flush_tlb(); if (cpu_mask) flush_tlb_others(cpu_mask, mm, FLUSH_ALL); } \ \ void flush_tlb_mm (struct mm_struct * mm) { unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id()); \ if (current->active_mm == mm) { if (current->mm) local_flush_tlb(); else leave_mm(smp_processor_id()); } if (cpu_mask) flush_tlb_others(cpu_mask, mm, FLUSH_ALL); } \ void flush_tlb_page(struct vm_area_struct * vma, unsigned long va) { struct mm_struct *mm = vma->vm_mm; unsigned long cpu_mask = mm->cpu_vm_mask & ~(1 << smp_processor_id()); \ if (current->active_mm == mm) { if(current->mm) __flush_tlb_one(va); else leave_mm(smp_processor_id()); } \ if (cpu_mask) flush_tlb_others(cpu_mask, mm, va); } \ /* enable the requested IRQs */ asmlinkage void smp_enable_irq_interrupt(void) { __u8 irq; __u8 cpu = smp_processor_id(); \ VDEBUG(("VOYAGER SMP: CPU%d enabling irq mask 0x%x\n", cpu, vic_irq_enable_mask[cpu])); \ spin_lock(&vic_irq_lock); for(irq = 0; irq < 16; irq++) { if(vic_irq_enable_mask[cpu] & (1<func; void *info = call_data->info; /* must take copy of wait because call_data may be replaced * unless the function is waiting for us to finish */ int wait = call_data->wait; __u8 cpu = smp_processor_id(); \ /* * Notify initiating CPU that I've grabbed the data and am * about to execute the function */ if(!test_and_clear_bit(cpu, &call_data->started)) { /* If the bit wasn't set, this could be a replay */ printk(KERN_WARNING "VOYAGER SMP: CPU %d received call funtion with no call pending\n", cpu); return; } /* * At this point the info structure may be out of scope unless wait==1 */ (*func)(info); if (wait) clear_bit(cpu, &call_data->finished); } \ /* Call this function on all CPUs using the function_interrupt above The function to run. This must be fast and non-blocking. An arbitrary pointer to pass to the function. If true, keep retrying until ready. If true, wait until function has completed on other CPUs. [RETURNS] 0 on success, else a negative status code. Does not return until remote CPUs are nearly ready to execute <> or are or have executed. */ int smp_call_function (void (*func) (void *info), void *info, int retry, int wait) { struct call_data_struct data; __u32 mask = cpu_online_map; \ mask &= ~(1<= 0x93000) BUG(); } \ /* send a reschedule CPI to one CPU by physical CPU number*/ void smp_send_reschedule(int cpu) { send_one_CPI(cpu, VIC_RESCHEDULE_CPI); } \ \ int hard_smp_processor_id(void) { __u8 i; __u8 cpumask = inb(VIC_PROC_WHO_AM_I); if((cpumask & QUAD_IDENTIFIER) == QUAD_IDENTIFIER) return cpumask & 0x1F; \ for(i = 0; i < 8; i++) { if(cpumask & (1<eip); \ if (--prof_counter[cpu] <= 0) { /* * The multiplier may have changed since the last time we got * to this point as a result of the user writing to * /proc/profile. In this case we need to adjust the APIC * timer accordingly. * * Interrupts are already masked off at this point. */ prof_counter[cpu] = prof_multiplier[cpu]; if (prof_counter[cpu] != prof_old_multiplier[cpu]) { /* FIXME: need to update the vic timer tick here */ prof_old_multiplier[cpu] = prof_counter[cpu]; } \ #ifdef CONFIG_SMP update_process_times(user); #endif } irq_exit(cpu, 0); \ if (softirq_pending(cpu)) do_softirq(); \ if( ((1<1 eligible CPUs are equal lowest, the * lowest processor number gets it. * * The priority of a CPU is controlled by a special per-CPU * VIC priority register which is 3 bits wide 0 being lowest * and 7 highest priority.. * * Therefore we subtract the average number of interrupts from * the number we've fielded. If this number is negative, we * lower the activity count and if it is positive, we raise * it. * * I'm afraid this still leads to odd looking interrupt counts: * the totals are all roughly equal, but the individual ones * look rather skewed. * * FIXME: This algorithm is total crap when mixed with SMP * affinity code since we now try to even up the interrupt * counts when an affinity binding is keeping them on a * particular CPU*/ weight = (vic_intr_count[cpu]*voyager_extended_cpus - vic_intr_total) >> 4; weight += 4; if(weight > 7) weight = 7; if(weight < 0) weight = 0; outb((__u8)weight, VIC_PRIORITY_REGISTER); \ #ifdef VOYAGER_DEBUG if((vic_tick[cpu] & 0xFFF) == 0) { /* print this message roughly every 25 secs */ printk("VOYAGER SMP: vic_tick[%d] = %lu, weight = %ld\n", cpu, vic_tick[cpu], weight); } #endif } \ /* setup the profiling timer */ int setup_profiling_timer(unsigned int multiplier) { int i; \ if ( (!multiplier)) return -EINVAL; \ /* * Set the new multiplier for each CPU. CPUs don't start using the * new values until the next timer interrupt in which they do process * accounting. */ for (i = 0; i < NR_CPUS; ++i) prof_multiplier[i] = multiplier; \ return 0; } \ \ /* initialise the voyager interrupt gates * * This uses the macros in irq.h to set up assembly jump gates. The * calls are then redirected to the same routine with smp_ prefixed */ BUILD_SMP_INTERRUPT(vic_sys_interrupt, VIC_SYS_INT) BUILD_SMP_INTERRUPT(vic_cmn_interrupt, VIC_CMN_INT) BUILD_SMP_TIMER_INTERRUPT(vic_cpi_interrupt, VIC_CPI_LEVEL0); \ /* do all the QIC interrupts */ BUILD_SMP_TIMER_INTERRUPT(qic_timer_interrupt, QIC_TIMER_CPI); BUILD_SMP_INTERRUPT(qic_invalidate_interrupt, QIC_INVALIDATE_CPI); BUILD_SMP_INTERRUPT(qic_reschedule_interrupt, QIC_RESCHEDULE_CPI); BUILD_SMP_INTERRUPT(qic_enable_irq_interrupt, QIC_ENABLE_IRQ_CPI); BUILD_SMP_INTERRUPT(qic_call_function_interrupt, QIC_CALL_FUNCTION_CPI); \ /* The CPIs are handled in the per cpu 8259s, so they must be * enabled to be received: FIX: enabling the CPIs in the early * boot sequence interferes with bug checking; enable them later * on in smp_init */ #define VIC_SET_GATE(cpi, vector) \ set_intr_gate((cpi) + VIC_DEFAULT_CPI_BASE, (vector)) #define QIC_SET_GATE(cpi, vector) \ set_intr_gate((cpi) + QIC_DEFAULT_CPI_BASE, (vector)) \ void __init voyager_smp_intr_init(void) { int i; \ /* initialize the per cpu irq mask to all disabled */ for(i = 0; i < NR_CPUS; i++) vic_irq_mask[i] = 0xFFFF; \ VIC_SET_GATE(VIC_CPI_LEVEL0, vic_cpi_interrupt); \ VIC_SET_GATE(VIC_SYS_INT, vic_sys_interrupt); VIC_SET_GATE(VIC_CMN_INT, vic_cmn_interrupt); \ QIC_SET_GATE(QIC_TIMER_CPI, qic_timer_interrupt); QIC_SET_GATE(QIC_INVALIDATE_CPI, qic_invalidate_interrupt); QIC_SET_GATE(QIC_RESCHEDULE_CPI, qic_reschedule_interrupt); QIC_SET_GATE(QIC_ENABLE_IRQ_CPI, qic_enable_irq_interrupt); QIC_SET_GATE(QIC_CALL_FUNCTION_CPI, qic_call_function_interrupt); \ /* now put the VIC descriptor into the first 48 IRQs * * This is for later: first 16 correspond to PC IRQs; next 16 * are Primary MC IRQs and final 16 are Secondary MC IRQs */ for(i = 0; i < 48; i++) irq_desc[i].handler = &vic_irq_type; } \ /* send a CPI at level cpi to a set of cpus in cpuset (set 1 bit per * processor to recieve CPI */ static void send_CPI(__u32 cpuset, __u8 cpi) { int i; __u32 quad_cpuset = (cpuset & voyager_quad_processors); \ if(cpi < VIC_START_FAKE_CPI) { /* fake CPI are only used for booting, so send to the * extended quads as well---Quads must be VIC booted */ outb((__u8)(cpuset), VIC_CPI_Registers[cpi]); return; } if(quad_cpuset) send_QIC_CPI(quad_cpuset, cpi); cpuset &= ~quad_cpuset; cpuset &= 0xff; /* only first 8 CPUs vaild for VIC CPI */ if(cpuset == 0) return; for(i = 0; i < smp_num_cpus; i++) { __u8 cpu = __cpu_logical_map[i]; if(cpuset & (1<qic_cpi[cpi].cpi; } \ static void ack_special_QIC_CPI(__u8 cpi) { switch(cpi) { case VIC_CMN_INT: outb(QIC_CMN_INT, QIC_INTERRUPT_CLEAR0); break; case VIC_SYS_INT: outb(QIC_SYS_INT, QIC_INTERRUPT_CLEAR0); break; } /* also clear at the VIC, just in case (nop for non-extended proc) */ ack_VIC_CPI(cpi); } \ /* Acknowledge receipt of CPI in the VIC (essentially an EOI) */ static void ack_VIC_CPI(__u8 cpi) { #ifdef VOYAGER_DEBUG unsigned long flags; __u16 isr; __u8 cpu = smp_processor_id(); \ __save_flags(flags); __cli(); isr = vic_read_isr(); if((isr & (1<<(cpi &7))) == 0) { printk("VOYAGER SMP: CPU%d lost CPI%d\n", cpu, cpi); } #endif /* send specific EOI; the two system interrupts have * bit 4 set for a separate vector but behave as the * corresponding 3 bit intr */ outb_p(0x60|(cpi & 7),0x20); \ #ifdef VOYAGER_DEBUG if((vic_read_isr() & (1<<(cpi &7))) != 0) { printk("VOYAGER SMP: CPU%d still asserting CPI%d\n", cpu, cpi); } __restore_flags(flags); #endif } \ /* cribbed with thanks from irq.c */ #define __byte(x,y) (((unsigned char *)&(y))[x]) #define cached_21(cpu) (__byte(0,vic_irq_mask[cpu])) #define cached_A1(cpu) (__byte(1,vic_irq_mask[cpu])) \ static unsigned int startup_vic_irq(unsigned int irq) { enable_vic_irq(irq); \ return 0; } \ /* The enable and disable routines. This is where we run into * conflicting architectural philosophy. Fundamentally, the voyager * architecture does not expect to have to disable interrupts globally * (the IRQ controllers belong to each CPU). The processor masquerade * which is used to start the system shouldn't be used in a running OS * since it will cause great confusion if two separate CPUs drive to * the same IRQ controller (I know, I've tried it). * * The solution is a variant on the NCR lazy SPL design: * * 1) To disable an interrupt, do nothing (other than set the * IRQ_DISABLED flag). This dares the interrupt actually to arrive. * * 2) If the interrupt dares to come in, raise the local mask against * it (this will result in all the CPU masks being raised * eventually). * * 3) To enable the interrupt, lower the mask on the local CPU and * broadcast an Interrupt enable CPI which causes all other CPUs to * adjust their masks accordingly. */ \ static void enable_vic_irq(unsigned int irq) { int i; /* linux doesn't to processor-irq affinity, so enable on * all CPUs we know about */ __u8 cpu = smp_processor_id(); __u16 mask = (1<status |= IRQ_REPLAY | IRQ_INPROGRESS; } else if(desc->status & IRQ_DISABLED) { /* Damn, the interrupt actually arrived, do the lazy * disable thing. The interrupt routine in irq.c will * not handle a IRQ_DISABLED interrupt, so nothing more * need be done here */ VDEBUG(("VOYAGER DEBUG: lazy disable of irq %d on CPU %d\n", irq, cpu)); disable_local_vic_irq(irq); desc->status |= IRQ_REPLAY; } else { desc->status &= ~IRQ_REPLAY; } \ spin_unlock(&vic_irq_lock); } \ /* Finish the VIC interrupt: basically mask */ static void after_handle_vic_irq(unsigned int irq) { irq_desc_t *desc = irq_desc + irq; \ spin_lock(&vic_irq_lock); { unsigned int status = desc->status & ~IRQ_INPROGRESS; #ifdef VOYAGER_DEBUG __u16 isr; #endif \ desc->status = status; if ((status & IRQ_DISABLED)) disable_local_vic_irq(irq); #ifdef VOYAGER_DEBUG /* DEBUG: before we ack, check what's in progress */ isr = vic_read_isr(); if((isr & (1<status &= ~(IRQ_REPLAY | IRQ_INPROGRESS); } #ifdef VOYAGER_DEBUG isr = vic_read_isr(); if((isr & (1<= 32) /* You can only have 32 interrupts in a voyager system * (and 32 only if you have a secondary microchannel * bus) */ return; \ for(i = 0; i < smp_num_cpus; i++) { __u8 cpu = __cpu_logical_map[i]; unsigned long cpu_mask = (1<processor to ->cpu c c change idle initialisation to match smpboot.c K 49861 O -rw-rw-r-- P arch/i386/kernel/voyager_smp.c ------------------------------------------------ D31 1 I31 1 spinlock_t kernel_flag __cacheline_aligned_in_smp = SPIN_LOCK_UNLOCKED; D38 1 I38 1 struct tlb_state cpu_tlbstate[NR_CPUS] __cacheline_aligned = {[0 ... NR_CPUS-1] = { &init_mm, 0 }}; D41 1 I41 1 static unsigned long cpu_irq_affinity[NR_CPUS] __cacheline_aligned = { [0 ... NR_CPUS-1] = ~0UL }; D49 1 I49 1 struct cpuinfo_x86 cpu_data[NR_CPUS] __cacheline_aligned; D55 1 I55 1 volatile int __cpu_logical_map[NR_CPUS] __cacheline_aligned; D58 1 I58 1 volatile int __cpu_number_map[NR_CPUS] __cacheline_aligned; D61 1 I61 1 struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS] __cacheline_aligned; D239 3 I241 3 static unsigned int prof_multiplier[NR_CPUS] __cacheline_aligned = { 1, }; static unsigned int prof_old_multiplier[NR_CPUS] __cacheline_aligned = { 1, }; static unsigned int prof_counter[NR_CPUS] __cacheline_aligned = { 1, }; D251 1 I251 1 static __u16 vic_irq_mask[NR_CPUS] __cacheline_aligned; D254 1 I254 1 static __u16 vic_irq_enable_mask[NR_CPUS] __cacheline_aligned = { 0 }; D257 1 I257 1 static spinlock_t vic_irq_lock __cacheline_aligned = SPIN_LOCK_UNLOCKED; D266 2 I267 2 static long vic_intr_count[NR_CPUS] __cacheline_aligned = { 0 }; static unsigned long vic_tick[NR_CPUS] __cacheline_aligned = { 0 }; D270 1 I270 1 static __u32 vic_cpi_mailbox[NR_CPUS] __cacheline_aligned; D531 1 I531 1 init_idle(); D604 1 I604 1 idle->cpu = cpu; D607 1 I607 1 \ D609 1 D612 1 D742 2 I743 2 current->cpu = boot_cpu_id; \ jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224152203|49861 D 1.4 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +70 -17 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c - Add task migration interrupt (to VIC mailbox and as QIC CPI) c - export cache_delay_ticks for scheduler c - more changes to idle boot sequence mirroring smpboot.c c - alter locking in smp_call_function K 29598 O -rw-rw-r-- P arch/i386/kernel/voyager_smp.c ------------------------------------------------ I97 5 /* cache decay ticks for scheduler---a fairly useless quantity for the voyager system with its odd affinity and huge L3 cache */ unsigned long cache_decay_ticks = 20; \ \ D504 1 I504 1 __sti(); D531 1 I531 1 \ D604 1 I604 3 \ init_idle(idle, cpu); \ D739 1 I739 3 /* Remove the global_irq_holder setting, it triggers a BUG() on * schedule at the moment */ //global_irq_holder = boot_cpu_id; I874 16 static spinlock_t migration_lock = SPIN_LOCK_UNLOCKED; static task_t *new_task; \ /* * Task migration callback. */ asmlinkage void smp_task_migration_interrupt(void) { task_t *p; \ p = new_task; spin_unlock(&migration_lock); sched_task_migrated(p); } \ D1121 2 I1122 1 spin_lock_bh(&call_lock); D1131 1 I1131 1 spin_unlock_bh(&call_lock); D1137 2 D1157 1 I1157 1 smp_apic_timer_interrupt(struct pt_regs regs) D1159 1 I1159 1 wrapper_smp_local_timer_interrupt(®s); D1164 1 I1164 1 smp_qic_timer_interrupt(struct pt_regs regs) D1167 1 I1167 1 wrapper_smp_local_timer_interrupt(®s); I1184 7 smp_qic_task_migration_interrupt(void) { ack_QIC_CPI(QIC_MIGRATION_CPI); smp_task_migration_interrupt(); } \ asmlinkage void D1199 1 I1199 1 smp_vic_cpi_interrupt(struct pt_regs regs) D1209 1 I1209 1 wrapper_smp_local_timer_interrupt(®s); I1217 2 if(test_and_clear_bit(VIC_MIGRATION_CPI, &vic_cpi_mailbox[cpu])) smp_task_migration_interrupt(); I1245 20 /* * This function sends a 'task migration' IPI to another CPU. * Must be called from syscall contexts, with interrupts *enabled*. */ void smp_migrate_task(int cpu, task_t *p) { /* * The target CPU will unlock the migration spinlock: */ if(unlikely((cpu_online_map & (1< D33 4 D622 1 I622 1 stack_start.esp = (void *) (1024 + PAGE_SIZE + (char *)idle->thread_info); D749 1 I749 1 current_thread_info()->cpu = boot_cpu_id; D865 1 I865 1 _raw_spin_lock(&cmn_int_lock); D870 1 I870 1 _raw_spin_unlock(&cmn_int_lock); D877 1 I877 1 _raw_spin_lock(&cmn_int_lock); D880 1 I880 1 _raw_spin_unlock(&cmn_int_lock); D896 1 I896 1 _raw_spin_unlock(&migration_lock); D1054 1 I1054 1 _raw_spin_lock(&vic_irq_lock); D1060 1 I1060 1 _raw_spin_unlock(&vic_irq_lock); D1292 1 I1292 1 _raw_spin_lock(&migration_lock); D1768 1 I1768 1 _raw_spin_lock(&vic_irq_lock); D1794 1 I1794 1 _raw_spin_unlock(&vic_irq_lock); D1803 1 I1803 1 _raw_spin_lock(&vic_irq_lock); D1855 1 I1855 1 _raw_spin_unlock(&vic_irq_lock); jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224161909|31720 D 1.6 02/02/24 10:38:15-06:00 jejb@mulgrave.(none) +0 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Remove cpuinfo_x86 zeroing of fields as per smpboot.c K 25357 O -rw-rw-r-- P arch/i386/kernel/voyager_smp.c ------------------------------------------------ D451 4 jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020224163815|25357 D 1.7 02/02/27 09:46:08-06:00 jejb@mulgrave.(none) +0 -47 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c remove smp_migration_interrupt and its associated functions K 63592 O -rw-rw-r-- P arch/i386/kernel/voyager_smp.c ------------------------------------------------ D877 16 D1200 7 D1240 2 D1270 20 D1490 1 D1522 1 jejb@mulgrave.(none)|arch/i386/kernel/voyager_smp.c|20020227154608|63592 D 1.8 02/03/10 22:36:48-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Rename: arch/i386/kernel/voyager_smp.c -> arch/i386/voyager/voyager_smp.c K 3553 O -rw-rw-r-- P arch/i386/voyager/voyager_smp.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/voyager_smp.c|20020311033648|03553 D 1.9 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +3 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add some reboot specific code K 2158 O -rw-rw-r-- P arch/i386/voyager/voyager_smp.c ------------------------------------------------ I30 3 int reboot_smp = 0; static int reboot_cpu = -1; \ == arch/i386/voyager/voyager_thread.c == New file: arch/i386/kernel/voyager_thread.c V 4 jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140213|55199|411f897383390efd D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/kernel/voyager_thread.c K 55199 P arch/i386/kernel/voyager_thread.c R 411f897383390efd X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140213|55199|411f897383390efd D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +172 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 58225 O -rw-rw-r-- P arch/i386/kernel/voyager_thread.c ------------------------------------------------ I0 172 /* -*- mode: c; c-basic-offset: 8 -*- */ \ /* Copyright (C) 2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * linux/arch/i386/kernel/voyager_thread.c * * This module provides the machine status monitor thread for the * voyager architecture. This allows us to monitor the machine * environment (temp, voltage, fan function) and the front panel and * internal UPS. If a fault is detected, this thread takes corrective * action (usually just informing init) * */ \ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include \ #include \ #define THREAD_NAME "kvoyagerd" \ static int thread(void *); \ static __u8 set_timeout = 0; \ /* Start the machine monitor thread. Return 1 if OK, 0 if fail */ static int __init voyager_thread_start(void) { if(kernel_thread(thread, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL) < 0) { /* This is serious, but not fatal */ printk(KERN_ERR "Voyager: Failed to create system monitor thread!!!\n"); return 1; } return 0; } \ static int execute_helper(void *string) { int ret; \ char *envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL, }; char *argv[] = { "/bin/bash", "-c", (char *)string, NULL, }; \ if((ret = exec_usermodehelper(argv[0], argv, envp)) < 0) { printk(KERN_ERR "Voyager failed to execute \"%s\"\n", (char *)string); } return ret; } \ static void execute(char *string) { if(kernel_thread(execute_helper, (void *)string, CLONE_FS | CLONE_FILES | CLONE_SIGNAL) < 0) { printk(KERN_ERR "Voyager failed to fork before exec of \"%s\"\n", string); } } \ static void check_from_kernel(void) { if(voyager_status.switch_off) { /* FIXME: This should be configureable via proc */ execute("umask 600; echo 0 > /etc/initrunlvl; kill -HUP 1"); } else if(voyager_status.power_fail) { VDEBUG(("Voyager daemon detected AC power failure\n")); /* FIXME: This should be configureable via proc */ execute("umask 600; echo F > /etc/powerstatus; kill -PWR 1"); set_timeout = 1; } } \ static void check_continuing_condition(void) { if(voyager_status.power_fail) { __u8 data; voyager_cat_psi(VOYAGER_PSI_SUBREAD, VOYAGER_PSI_AC_FAIL_REG, &data); if((data & 0x1f) == 0) { /* all power restored */ printk(KERN_NOTICE "VOYAGER AC power restored, cancelling shutdown\n"); /* FIXME: should be user configureable */ execute("umask 600; echo O > /etc/powerstatus; kill -PWR 1"); set_timeout = 0; } } } \ static void wakeup(unsigned long unused) { complete(&kvoyagerd_wait); } \ static int thread(void *unused) { struct timer_list wakeup_timer; \ kvoyagerd_running = 1; \ daemonize(); \ set_timeout = 0; \ init_timer(&wakeup_timer); \ strcpy(current->comm, THREAD_NAME); sigfillset(¤t->blocked); current->tty = NULL; /* get rid of controlling tty */ \ printk(KERN_NOTICE "Voyager starting monitor thread\n"); \ for(;;) { wait_for_completion(&kvoyagerd_wait); VDEBUG(("Voyager Daemon awoken\n")); if(voyager_status.request_from_kernel == 0) { /* probably awoken from timeout */ check_continuing_condition(); } else { check_from_kernel(); voyager_status.request_from_kernel = 0; } if(set_timeout) { del_timer(&wakeup_timer); wakeup_timer.expires = HZ + jiffies; wakeup_timer.function = wakeup; add_timer(&wakeup_timer); } } } \ static void __exit voyager_thread_stop(void) { /* FIXME: do nothing at the moment */ } \ module_init(voyager_thread_start); //module_exit(voyager_thread_stop); jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224140214|58225 D 1.2 02/02/24 10:19:09-06:00 jejb@mulgrave.(none) +7 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Change kvoyagerd from completion to semaphore K 1250 O -rw-rw-r-- P arch/i386/kernel/voyager_thread.c ------------------------------------------------ I37 4 /* external variables */ int kvoyagerd_running = 0; DECLARE_MUTEX_LOCKED(kvoyagerd_sem); \ I50 1 reparent_to_init(); D124 1 I124 1 up(&kvoyagerd_sem); D147 1 I147 1 down_interruptible(&kvoyagerd_sem); jejb@mulgrave.(none)|arch/i386/kernel/voyager_thread.c|20020224161909|01250 D 1.3 02/03/10 22:36:48-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Rename: arch/i386/kernel/voyager_thread.c -> arch/i386/voyager/voyager_thread.c K 8766 O -rw-rw-r-- P arch/i386/voyager/voyager_thread.c ------------------------------------------------ == arch/i386/voyager/Makefile == New file: arch/i386/voyager/Makefile V 4 jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035244|21679|dd16c088ab1a85d4 D 1.0 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/voyager/Makefile K 21679 P arch/i386/voyager/Makefile R dd16c088ab1a85d4 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035244|21679|dd16c088ab1a85d4 D 1.1 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +23 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 46191 O -rw-rw-r-- P arch/i386/voyager/Makefile ------------------------------------------------ I0 23 # # Makefile for the linux kernel. # # Note! Dependencies are done automagically by 'make dep', which also # removes any old dependencies. DON'T put your own dependencies here # unless it's something special (ie not a .c file). # # Note 2! The CFLAGS definitions are now in the main makefile... \ .S.o: $(CC) $(AFLAGS) -traditional -c $< -o $*.o \ all: voyager.o \ O_TARGET := voyager.o EXTRA_CFLAGS += -I../kernel export-objs := \ obj-y := setup.o voyager_basic.o voyager_thread.o \ obj-$(CONFIG_SMP) += voyager_smp.o voyager_cat.o \ include $(TOPDIR)/Rules.make jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311035245|46191 D 1.2 02/03/11 01:31:30-05:00 jejb@mulgrave.(none) +3 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c A K 48531 O -rw-rw-r-- P arch/i386/voyager/Makefile ------------------------------------------------ D17 1 I17 1 export-objs := i386_ksyms.o D19 1 I19 2 obj-y := setup.o voyager_basic.o voyager_thread.o \ i386_ksyms.o jejb@mulgrave.(none)|arch/i386/voyager/Makefile|20020311063130|48531 D 1.3 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +3 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add vpath for trampoline and trampoline.o K 51219 O -rw-rw-r-- P arch/i386/voyager/Makefile ------------------------------------------------ I14 2 VPATH = .:../kernel \ D22 1 I22 1 obj-$(CONFIG_SMP) += voyager_smp.o voyager_cat.o trampoline.o == arch/i386/voyager/do_timer.h == New file: arch/i386/voyager/do_timer.h V 4 jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035244|31812|ce936728278d42d8 D 1.0 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/voyager/do_timer.h K 31812 P arch/i386/voyager/do_timer.h R ce936728278d42d8 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035244|31812|ce936728278d42d8 D 1.1 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +8 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 15259 O -rw-rw-r-- P arch/i386/voyager/do_timer.h ------------------------------------------------ I0 8 /* defines for inline arch setup functions */ \ static inline void do_timer_interrupt_hook(struct pt_regs *regs) { do_timer(regs); \ voyager_timer_interrupt(regs); } jejb@mulgrave.(none)|arch/i386/voyager/do_timer.h|20020311035245|15259 D 1.2 02/03/11 17:43:38-05:00 jejb@mulgrave.(none) +13 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add do_timer_overflow K 36531 O -rw-rw-r-- P arch/i386/voyager/do_timer.h ------------------------------------------------ I8 13 \ static inline int do_timer_overflow(int count) { /* can't read the ISR, just assume 1 tick overflow */ if(count > LATCH || count < 0) { printk("VOYAGER PROBLEM: count is %ld, latch is %ld\n", count, LATCH); count = LATCH; } count -= LATCH; \ return count; } == arch/i386/voyager/i386_ksyms.c == New file: arch/i386/voyager/i386_ksyms.c V 4 jejb@mulgrave.(none)|arch/i386/voyager/i386_ksyms.c|20020311063130|54237|f2a68d32c324cda1 D 1.0 02/03/11 01:31:30-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/voyager/i386_ksyms.c K 54237 P arch/i386/voyager/i386_ksyms.c R f2a68d32c324cda1 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/i386_ksyms.c|20020311063130|54237|f2a68d32c324cda1 D 1.1 02/03/11 01:31:30-05:00 jejb@mulgrave.(none) +34 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 8561 O -rw-rw-r-- P arch/i386/voyager/i386_ksyms.c ------------------------------------------------ I0 34 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include \ #include #include #include #include #include #include #include #include #include #include #include #include #include \ /* need to export the mappings from physical to logical CPU */ EXPORT_SYMBOL(__cpu_number_map); EXPORT_SYMBOL(__cpu_logical_map); == arch/i386/voyager/setup.c == New file: arch/i386/voyager/setup.c V 4 jejb@mulgrave.(none)|arch/i386/voyager/setup.c|20020311035244|35869|96097e12bd022958 D 1.0 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/voyager/setup.c K 35869 P arch/i386/voyager/setup.c R 96097e12bd022958 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/setup.c|20020311035244|35869|96097e12bd022958 D 1.1 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +44 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 63158 O -rw-rw-r-- P arch/i386/voyager/setup.c ------------------------------------------------ I0 44 /* * Machine specific setup for generic */ \ #include #include #include #include #include #include \ void __init pre_intr_init_hook(void) { init_ISA_irqs(); } \ /* * IRQ2 is cascade interrupt to second interrupt controller */ static struct irqaction irq2 = { no_action, 0, 0, "cascade", NULL, NULL}; \ void __init intr_init_hook(void) { #ifdef CONFIG_SMP smp_intr_init(); #endif \ setup_irq(2, &irq2); } \ void __init pre_setup_arch_hook(void) { } \ void __init trap_init_hook(void) { } \ static struct irqaction irq0 = { timer_interrupt, SA_INTERRUPT, 0, "timer", NULL, NULL}; \ void __init time_init_hook(void) { setup_irq(0, &irq0); } == arch/i386/voyager/setup_arch.h == New file: arch/i386/voyager/setup_arch.h V 4 jejb@mulgrave.(none)|arch/i386/voyager/setup_arch.h|20020311062142|08270|191aa6d6ac535d24 D 1.0 02/03/11 01:21:42-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/arch/i386/voyager/setup_arch.h K 8270 P arch/i386/voyager/setup_arch.h R 191aa6d6ac535d24 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/voyager/setup_arch.h|20020311062142|08270|191aa6d6ac535d24 D 1.1 02/03/11 01:21:42-05:00 jejb@mulgrave.(none) +77 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 17871 O -rw-rw-r-- P arch/i386/voyager/setup_arch.h ------------------------------------------------ I0 77 #ifndef SETUP_POST \ #include #define VOYAGER_BIOS_INFO ((struct voyager_bios_info *)(PARAM+0x40)) \ #define ARCH_SETUP voyager_detect(VOYAGER_BIOS_INFO); \ #else static inline char * __init machine_specific_memory_setup(void) { char *who; \ who = "NOT VOYAGER"; \ if(voyager_level == 5) { __u32 addr, length; int i; \ who = "Voyager-SUS"; \ e820.nr_map = 0; for(i=0; voyager_memory_detect(i, &addr, &length); i++) { add_memory_region(addr, length, E820_RAM); } return who; } else if(voyager_level == 4) { __u32 tom; __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8; /* select the DINO config space */ outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT); /* Read DINO top of memory register */ tom = ((inb(catbase + 0x4) & 0xf0) << 16) + ((inb(catbase + 0x5) & 0x7f) << 24); \ if(inb(catbase) != VOYAGER_DINO) { printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); tom = (EXT_MEM_K)<<10; } who = "Voyager-TOM"; add_memory_region(0, 0x9f000, E820_RAM); /* map from 1M to top of memory */ add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM); /* FIXME: Should check the ASICs to see if I need to * take out the 8M window. Just do it at the moment * */ add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED); return who; } \ who = "BIOS-e820"; \ /* * Try to copy the BIOS-supplied E820-map. * * Otherwise fake a memory map; one section from 0k->640k, * the next section from 1mb->appropriate_mem_k */ sanitize_e820_map(E820_MAP, &E820_MAP_NR); if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { unsigned long mem_size; \ /* compare results from other methods and take the greater */ if (ALT_MEM_K < EXT_MEM_K) { mem_size = EXT_MEM_K; who = "BIOS-88"; } else { mem_size = ALT_MEM_K; who = "BIOS-e801"; } \ e820.nr_map = 0; add_memory_region(0, LOWMEMSIZE(), E820_RAM); add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM); } return who; } #endif == include/asm-i386/vic.h == New file: include/asm-i386/vic.h V 4 jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140213|59289|a22c1f9c53cd3c50 D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/include/asm-i386/vic.h K 59289 P include/asm-i386/vic.h R a22c1f9c53cd3c50 X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140213|59289|a22c1f9c53cd3c50 D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +90 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 33701 O -rw-rw-r-- P include/asm-i386/vic.h ------------------------------------------------ I0 90 /* Copyright (C) 1999,2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * Standard include definitions for the NCR Voyager Interrupt Controller */ \ /* The eight CPI vectors. To activate a CPI, you write a bit mask * corresponding to the processor set to be interrupted into the * relevant register. That set of CPUs will then be interrupted with * the CPI */ static const int VIC_CPI_Registers[] = {0xFC00, 0xFC01, 0xFC08, 0xFC09, 0xFC10, 0xFC11, 0xFC18, 0xFC19 }; \ #define VIC_PROC_WHO_AM_I 0xfc29 # define QUAD_IDENTIFIER 0xC0 # define EIGHT_SLOT_IDENTIFIER 0xE0 #define QIC_EXTENDED_PROCESSOR_SELECT 0xFC72 #define VIC_CPI_BASE_REGISTER 0xFC41 #define VIC_PROCESSOR_ID 0xFC21 # define VIC_CPU_MASQUERADE_ENABLE 0x8 \ #define VIC_CLAIM_REGISTER_0 0xFC38 #define VIC_CLAIM_REGISTER_1 0xFC39 #define VIC_REDIRECT_REGISTER_0 0xFC60 #define VIC_REDIRECT_REGISTER_1 0xFC61 #define VIC_PRIORITY_REGISTER 0xFC20 \ #define VIC_PRIMARY_MC_BASE 0xFC48 #define VIC_SECONDARY_MC_BASE 0xFC49 \ #define QIC_PROCESSOR_ID 0xFC71 # define QIC_CPUID_ENABLE 0x08 \ #define QIC_VIC_CPI_BASE_REGISTER 0xFC79 #define QIC_CPI_BASE_REGISTER 0xFC7A \ #define QIC_MASK_REGISTER0 0xFC80 /* NOTE: these are masked high, enabled low */ # define QIC_PERF_TIMER 0x01 # define QIC_LPE 0x02 # define QIC_SYS_INT 0x04 # define QIC_CMN_INT 0x08 /* at the moment, just enable CMN_INT, disable SYS_INT */ # define QIC_DEFAULT_MASK0 (~(QIC_CMN_INT /* | VIC_SYS_INT */)) #define QIC_MASK_REGISTER1 0xFC81 # define QIC_BOOT_CPI_MASK 0xFE # define QIC_CPI_ENABLE 0xC1 \ #define QIC_INTERRUPT_CLEAR0 0xFC8A #define QIC_INTERRUPT_CLEAR1 0xFC8B \ /* this is where we place the CPI vectors */ #define VIC_DEFAULT_CPI_BASE 0xC0 /* this is where we place the QIC CPI vectors */ #define QIC_DEFAULT_CPI_BASE 0xD0 \ /* These define the CPIs we use in linux */ #define VIC_CPI_LEVEL0 0 #define VIC_CPI_LEVEL1 1 /* now the fake CPIs */ #define VIC_TIMER_CPI 2 #define VIC_INVALIDATE_CPI 3 #define VIC_RESCHEDULE_CPI 4 #define VIC_ENABLE_IRQ_CPI 5 #define VIC_CALL_FUNCTION_CPI 6 \ /* Now the QIC CPIs: Since we don't need the two initial levels, * these are 2 less than the VIC CPIs */ #define QIC_CPI_OFFSET 1 #define QIC_TIMER_CPI (VIC_TIMER_CPI - QIC_CPI_OFFSET) #define QIC_INVALIDATE_CPI (VIC_INVALIDATE_CPI - QIC_CPI_OFFSET) #define QIC_RESCHEDULE_CPI (VIC_RESCHEDULE_CPI - QIC_CPI_OFFSET) #define QIC_ENABLE_IRQ_CPI (VIC_ENABLE_IRQ_CPI - QIC_CPI_OFFSET) #define QIC_CALL_FUNCTION_CPI (VIC_CALL_FUNCTION_CPI - QIC_CPI_OFFSET) \ #define VIC_START_FAKE_CPI VIC_TIMER_CPI #define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_CPI \ /* this is the SYS_INT CPI. */ #define VIC_SYS_INT 8 #define VIC_CMN_INT 15 \ /* This is the boot CPI for alternate processors. It gets overwritten * by the above once the system has activated all available processors */ #define VIC_CPU_BOOT_CPI VIC_CPI_LEVEL0 #define VIC_CPU_BOOT_ERRATA_CPI (VIC_CPI_LEVEL0 + 8) #define VIC_BOOT_INTERRUPT_MASK 0xfe \ extern void smp_vic_timer_interrupt(struct pt_regs *regs); jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224140214|33701 D 1.2 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +5 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add definitions for smp migration interrupt. K 42897 O -rw-rw-r-- P include/asm-i386/vic.h ------------------------------------------------ D48 1 I48 2 /* Enable CPI's 1-6 inclusive */ # define QIC_CPI_ENABLE 0x81 I66 1 #define VIC_MIGRATION_CPI 7 I75 1 #define QIC_MIGRATION_CPI (VIC_MIGRATION_CPI - QIC_CPI_OFFSET) D78 1 I78 1 #define VIC_END_FAKE_CPI VIC_CALL_MIGRATION_CPI jejb@mulgrave.(none)|include/asm-i386/vic.h|20020224155525|42897 D 1.3 02/02/27 09:46:08-06:00 jejb@mulgrave.(none) +1 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c remove the VIC and QIC MIGRATION_CPI K 36121 O -rw-rw-r-- P include/asm-i386/vic.h ------------------------------------------------ D68 1 D78 1 D81 1 I81 1 #define VIC_END_FAKE_CPI VIC_CALL_FUNCTION_CPI == include/asm-i386/voyager.h == New file: include/asm-i386/voyager.h V 4 jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140213|60867|30e452a4faa1582f D 1.0 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c BitKeeper file /home/jejb/BK/voyager-2.5/include/asm-i386/voyager.h K 60867 P include/asm-i386/voyager.h R 30e452a4faa1582f X 0x821 ------------------------------------------------ jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140213|60867|30e452a4faa1582f D 1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +522 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C F 1 K 19261 O -rw-rw-r-- P include/asm-i386/voyager.h ------------------------------------------------ I0 522 /* Copyright (C) 1999,2001 * * Author: J.E.J.Bottomley@HansenPartnership.com * * Standard include definitions for the NCR Voyager system */ \ #undef VOYAGER_DEBUG #undef VOYAGER_CAT_DEBUG \ #ifdef VOYAGER_DEBUG #define VDEBUG(x) printk x #else #define VDEBUG(x) #endif \ /* There are three levels of voyager machine: 3,4 and 5. The rule is * if it's less than 3435 it's a Level 3 except for a 3360 which is * a level 4. A 3435 or above is a Level 5 */ #define VOYAGER_LEVEL5_AND_ABOVE 0x3435 #define VOYAGER_LEVEL4 0x3360 \ /* The L4 DINO ASIC */ #define VOYAGER_DINO 0x43 \ /* voyager ports in standard I/O space */ #define VOYAGER_MC_SETUP 0x96 \ \ #define VOYAGER_CAT_CONFIG_PORT 0x97 # define VOYAGER_CAT_DESELECT 0xff #define VOYAGER_SSPB_RELOCATION_PORT 0x98 \ /* Valid CAT controller commands */ /* start instruction register cycle */ #define VOYAGER_CAT_IRCYC 0x01 /* start data register cycle */ #define VOYAGER_CAT_DRCYC 0x02 /* move to execute state */ #define VOYAGER_CAT_RUN 0x0F /* end operation */ #define VOYAGER_CAT_END 0x80 /* hold in idle state */ #define VOYAGER_CAT_HOLD 0x90 /* single step an "intest" vector */ #define VOYAGER_CAT_STEP 0xE0 /* return cat controller to CLEMSON mode */ #define VOYAGER_CAT_CLEMSON 0xFF \ /* the default cat command header */ #define VOYAGER_CAT_HEADER 0x7F \ /* the range of possible CAT module ids in the system */ #define VOYAGER_MIN_MODULE 0x10 #define VOYAGER_MAX_MODULE 0x1f \ /* The voyager registers per asic */ #define VOYAGER_ASIC_ID_REG 0x00 #define VOYAGER_ASIC_TYPE_REG 0x01 /* the sub address registers can be made auto incrementing on reads */ #define VOYAGER_AUTO_INC_REG 0x02 # define VOYAGER_AUTO_INC 0x04 # define VOYAGER_NO_AUTO_INC 0xfb #define VOYAGER_SUBADDRDATA 0x03 #define VOYAGER_SCANPATH 0x05 # define VOYAGER_CONNECT_ASIC 0x01 # define VOYAGER_DISCONNECT_ASIC 0xfe #define VOYAGER_SUBADDRLO 0x06 #define VOYAGER_SUBADDRHI 0x07 #define VOYAGER_SUBMODSELECT 0x08 #define VOYAGER_SUBMODPRESENT 0x09 \ #define VOYAGER_SUBADDR_LO 0xff #define VOYAGER_SUBADDR_HI 0xffff \ /* the maximum size of a scan path -- used to form instructions */ #define VOYAGER_MAX_SCAN_PATH 0x100 /* the biggest possible register size (in bytes) */ #define VOYAGER_MAX_REG_SIZE 4 \ /* Total number of possible modules (including submodules) */ #define VOYAGER_MAX_MODULES 16 /* Largest number of asics per module */ #define VOYAGER_MAX_ASICS_PER_MODULE 7 \ /* the CAT asic of each module is always the first one */ #define VOYAGER_CAT_ID 0 #define VOYAGER_PSI 0x1a \ /* voyager instruction operations and registers */ #define VOYAGER_READ_CONFIG 0x1 #define VOYAGER_WRITE_CONFIG 0x2 #define VOYAGER_BYPASS 0xff \ typedef struct voyager_asic { __u8 asic_addr; /* ASIC address; Level 4 */ __u8 asic_type; /* ASIC type */ __u8 asic_id; /* ASIC id */ __u8 jtag_id[4]; /* JTAG id */ __u8 asic_location; /* Location within scan path; start w/ 0 */ __u8 bit_location; /* Location within bit stream; start w/ 0 */ __u8 ireg_length; /* Instruction register length */ __u16 subaddr; /* Amount of sub address space */ struct voyager_asic *next; /* Next asic in linked list */ } voyager_asic_t; \ typedef struct voyager_module { __u8 module_addr; /* Module address */ __u8 scan_path_connected; /* Scan path connected */ __u16 ee_size; /* Size of the EEPROM */ __u16 num_asics; /* Number of Asics */ __u16 inst_bits; /* Instruction bits in the scan path */ __u16 largest_reg; /* Largest register in the scan path */ __u16 smallest_reg; /* Smallest register in the scan path */ voyager_asic_t *asic; /* First ASIC in scan path (CAT_I) */ struct voyager_module *submodule; /* Submodule pointer */ struct voyager_module *next; /* Next module in linked list */ } voyager_module_t; \ typedef struct voyager_eeprom_hdr { __u8 module_id[4] __attribute__((packed)); __u8 version_id __attribute__((packed)); __u8 config_id __attribute__((packed)); __u16 boundry_id __attribute__((packed)); /* boundary scan id */ __u16 ee_size __attribute__((packed)); /* size of EEPROM */ __u8 assembly[11] __attribute__((packed)); /* assembly # */ __u8 assembly_rev __attribute__((packed)); /* assembly rev */ __u8 tracer[4] __attribute__((packed)); /* tracer number */ __u16 assembly_cksum __attribute__((packed)); /* asm checksum */ __u16 power_consump __attribute__((packed)); /* pwr requirements */ __u16 num_asics __attribute__((packed)); /* number of asics */ __u16 bist_time __attribute__((packed)); /* min. bist time */ __u16 err_log_offset __attribute__((packed)); /* error log offset */ __u16 scan_path_offset __attribute__((packed));/* scan path offset */ __u16 cct_offset __attribute__((packed)); __u16 log_length __attribute__((packed)); /* length of err log */ __u16 xsum_end __attribute__((packed)); /* offset to end of checksum */ __u8 reserved[4] __attribute__((packed)); __u8 sflag __attribute__((packed)); /* starting sentinal */ __u8 part_number[13] __attribute__((packed)); /* prom part number */ __u8 version[10] __attribute__((packed)); /* version number */ __u8 signature[8] __attribute__((packed)); __u16 eeprom_chksum __attribute__((packed)); __u32 data_stamp_offset __attribute__((packed)); __u8 eflag __attribute__((packed)); /* ending sentinal */ } voyager_eprom_hdr_t; \ \ \ #define VOYAGER_EPROM_SIZE_OFFSET ((__u16)(&(((voyager_eprom_hdr_t *)0)->ee_size))) #define VOYAGER_XSUM_END_OFFSET 0x2a \ /* the following three definitions are for internal table layouts * in the module EPROMs. We really only care about the IDs and * offsets */ typedef struct voyager_sp_table { __u8 asic_id __attribute__((packed)); __u8 bypass_flag __attribute__((packed)); __u16 asic_data_offset __attribute__((packed)); __u16 config_data_offset __attribute__((packed)); } voyager_sp_table_t; \ typedef struct voyager_jtag_table { __u8 icode[4] __attribute__((packed)); __u8 runbist[4] __attribute__((packed)); __u8 intest[4] __attribute__((packed)); __u8 samp_preld[4] __attribute__((packed)); __u8 ireg_len __attribute__((packed)); } voyager_jtt_t; \ typedef struct voyager_asic_data_table { __u8 jtag_id[4] __attribute__((packed)); __u16 length_bsr __attribute__((packed)); __u16 length_bist_reg __attribute__((packed)); __u32 bist_clk __attribute__((packed)); __u16 subaddr_bits __attribute__((packed)); __u16 seed_bits __attribute__((packed)); __u16 sig_bits __attribute__((packed)); __u16 jtag_offset __attribute__((packed)); } voyager_at_t; \ /* Voyager Interrupt Controller (VIC) registers */ \ /* Base to add to Cross Processor Interrupts (CPIs) when triggering * the CPU IRQ line */ /* register defines for the WCBICs (one per processor) */ #define VOYAGER_WCBIC0 0x41 /* bus A node P1 processor 0 */ #define VOYAGER_WCBIC1 0x49 /* bus A node P1 processor 1 */ #define VOYAGER_WCBIC2 0x51 /* bus A node P2 processor 0 */ #define VOYAGER_WCBIC3 0x59 /* bus A node P2 processor 1 */ #define VOYAGER_WCBIC4 0x61 /* bus B node P1 processor 0 */ #define VOYAGER_WCBIC5 0x69 /* bus B node P1 processor 1 */ #define VOYAGER_WCBIC6 0x71 /* bus B node P2 processor 0 */ #define VOYAGER_WCBIC7 0x79 /* bus B node P2 processor 1 */ \ \ /* top of memory registers */ #define VOYAGER_WCBIC_TOM_L 0x4 #define VOYAGER_WCBIC_TOM_H 0x5 \ /* register defines for Voyager Memory Contol (VMC) * these are present on L4 machines only */ #define VOYAGER_VMC1 0x81 #define VOYAGER_VMC2 0x91 #define VOYAGER_VMC3 0xa1 #define VOYAGER_VMC4 0xb1 \ /* VMC Ports */ #define VOYAGER_VMC_MEMORY_SETUP 0x9 # define VMC_Interleaving 0x01 # define VMC_4Way 0x02 # define VMC_EvenCacheLines 0x04 # define VMC_HighLine 0x08 # define VMC_Start0_Enable 0x20 # define VMC_Start1_Enable 0x40 # define VMC_Vremap 0x80 #define VOYAGER_VMC_BANK_DENSITY 0xa # define VMC_BANK_EMPTY 0 # define VMC_BANK_4MB 1 # define VMC_BANK_16MB 2 # define VMC_BANK_64MB 3 # define VMC_BANK0_MASK 0x03 # define VMC_BANK1_MASK 0x0C # define VMC_BANK2_MASK 0x30 # define VMC_BANK3_MASK 0xC0 \ /* Magellan Memory Controller (MMC) defines - present on L5 */ #define VOYAGER_MMC_ASIC_ID 1 /* the two memory modules corresponding to memory cards in the system */ #define VOYAGER_MMC_MEMORY0_MODULE 0x14 #define VOYAGER_MMC_MEMORY1_MODULE 0x15 /* the Magellan Memory Address (MMA) defines */ #define VOYAGER_MMA_ASIC_ID 2 \ /* Submodule number for the Quad Baseboard */ #define VOYAGER_QUAD_BASEBOARD 1 \ /* ASIC defines for the Quad Baseboard */ #define VOYAGER_QUAD_QDATA0 1 #define VOYAGER_QUAD_QDATA1 2 #define VOYAGER_QUAD_QABC 3 \ /* Useful areas in extended CMOS */ #define VOYAGER_PROCESSOR_PRESENT_MASK 0x88a #define VOYAGER_MEMORY_CLICKMAP 0xa23 #define VOYAGER_DUMP_LOCATION 0xb1a \ /* SUS In Control bit - used to tell SUS that we don't need to be * babysat anymore */ #define VOYAGER_SUS_IN_CONTROL_PORT 0x3ff # define VOYAGER_IN_CONTROL_FLAG 0x80 \ /* Voyager PSI defines */ #define VOYAGER_PSI_STATUS_REG 0x08 # define PSI_DC_FAIL 0x01 # define PSI_MON 0x02 # define PSI_FAULT 0x04 # define PSI_ALARM 0x08 # define PSI_CURRENT 0x10 # define PSI_DVM 0x20 # define PSI_PSCFAULT 0x40 # define PSI_STAT_CHG 0x80 \ #define VOYAGER_PSI_SUPPLY_REG 0x8000 /* read */ # define PSI_FAIL_DC 0x01 # define PSI_FAIL_AC 0x02 # define PSI_MON_INT 0x04 # define PSI_SWITCH_OFF 0x08 # define PSI_HX_OFF 0x10 # define PSI_SECURITY 0x20 # define PSI_CMOS_BATT_LOW 0x40 # define PSI_CMOS_BATT_FAIL 0x80 /* write */ # define PSI_CLR_SWITCH_OFF 0x13 # define PSI_CLR_HX_OFF 0x14 # define PSI_CLR_CMOS_BATT_FAIL 0x17 \ #define VOYAGER_PSI_MASK 0x8001 # define PSI_MASK_MASK 0x10 \ #define VOYAGER_PSI_AC_FAIL_REG 0x8004 #define AC_FAIL_STAT_CHANGE 0x80 \ #define VOYAGER_PSI_GENERAL_REG 0x8007 /* read */ # define PSI_SWITCH_ON 0x01 # define PSI_SWITCH_ENABLED 0x02 # define PSI_ALARM_ENABLED 0x08 # define PSI_SECURE_ENABLED 0x10 # define PSI_COLD_RESET 0x20 # define PSI_COLD_START 0x80 /* write */ # define PSI_POWER_DOWN 0x10 # define PSI_SWITCH_DISABLE 0x01 # define PSI_SWITCH_ENABLE 0x11 # define PSI_CLEAR 0x12 # define PSI_ALARM_DISABLE 0x03 # define PSI_ALARM_ENABLE 0x13 # define PSI_CLEAR_COLD_RESET 0x05 # define PSI_SET_COLD_RESET 0x15 # define PSI_CLEAR_COLD_START 0x07 # define PSI_SET_COLD_START 0x17 \ \ \ struct voyager_bios_info { __u8 len; __u8 major; __u8 minor; __u8 debug; __u8 num_classes; __u8 class_1; __u8 class_2; }; \ /* The following structures and definitions are for the Kernel/SUS * interface these are needed to find out how SUS initialised any Quad * boards in the system */ \ #define NUMBER_OF_MC_BUSSES 2 #define SLOTS_PER_MC_BUS 8 #define MAX_CPUS 16 /* 16 way CPU system */ #define MAX_PROCESSOR_BOARDS 4 /* 4 processor slot system */ #define MAX_CACHE_LEVELS 4 /* # of cache levels supported */ #define MAX_SHARED_CPUS 4 /* # of CPUs that can share a LARC */ #define NUMBER_OF_POS_REGS 8 \ typedef struct { __u8 MC_Slot __attribute__((packed)); __u8 POS_Values[NUMBER_OF_POS_REGS] __attribute__((packed)); } MC_SlotInformation_t; \ struct QuadDescription { __u8 Type __attribute__((packed)); /* for type 0 (DYADIC or MONADIC) all fields * will be zero except for slot */ __u8 StructureVersion __attribute__((packed)); __u32 CPI_BaseAddress __attribute__((packed)); __u32 LARC_BankSize __attribute__((packed)); __u32 LocalMemoryStateBits __attribute__((packed)); __u8 Slot __attribute__((packed)); /* Processor slots 1 - 4 */ }; \ struct ProcBoardInfo { __u8 Type __attribute__((packed)); __u8 StructureVersion __attribute__((packed)); __u8 NumberOfBoards __attribute__((packed)); struct QuadDescription QuadData[MAX_PROCESSOR_BOARDS] __attribute__((packed)); }; \ struct CacheDescription { __u8 Level __attribute__((packed)); __u32 TotalSize __attribute__((packed)); __u16 LineSize __attribute__((packed)); __u8 Associativity __attribute__((packed)); __u8 CacheType __attribute__((packed)); __u8 WriteType __attribute__((packed)); __u8 Number_CPUs_SharedBy __attribute__((packed)); __u8 Shared_CPUs_Hardware_IDs[MAX_SHARED_CPUS] __attribute__((packed)); \ }; \ struct CPU_Description { __u8 CPU_HardwareId __attribute__((packed)); char *FRU_String __attribute__((packed)); __u8 NumberOfCacheLevels __attribute__((packed)); struct CacheDescription CacheLevelData[MAX_CACHE_LEVELS] __attribute__((packed)); }; \ struct CPU_Info { __u8 Type __attribute__((packed)); __u8 StructureVersion __attribute__((packed)); __u8 NumberOf_CPUs __attribute__((packed)); struct CPU_Description CPU_Data[MAX_CPUS] __attribute__((packed)); }; \ \ /* * This structure will be used by SUS and the OS. * The assumption about this structure is that no blank space is * packed in it by our friend the compiler. */ typedef struct { __u8 Mailbox_SUS; /* Written to by SUS to give commands/response to the OS */ __u8 Mailbox_OS; /* Written to by the OS to give commands/response to SUS */ __u8 SUS_MailboxVersion; /* Tells the OS which iteration of the interface SUS supports */ __u8 OS_MailboxVersion; /* Tells SUS which iteration of the interface the OS supports */ __u32 OS_Flags; /* Flags set by the OS as info for SUS */ __u32 SUS_Flags; /* Flags set by SUS as info for the OS */ __u32 WatchDogPeriod; /* Watchdog period (in seconds) which the DP uses to see if the OS is dead */ __u32 WatchDogCount; /* Updated by the OS on every tic. */ __u32 MemoryFor_SUS_ErrorLog; /* Flat 32 bit address which tells SUS where to stuff the SUS error log on a dump */ MC_SlotInformation_t MC_SlotInfo[NUMBER_OF_MC_BUSSES*SLOTS_PER_MC_BUS]; /* Storage for MCA POS data */ /* All new SECOND_PASS_INTERFACE fields added from this point */ struct ProcBoardInfo *BoardData; struct CPU_Info *CPU_Data; /* All new fields must be added from this point */ } Voyager_KernelSUS_Mbox_t; \ /* structure for finding the right memory address to send a QIC CPI to */ struct voyager_qic_cpi { /* Each cache line (32 bytes) can trigger a cpi. The cpi * read/write may occur anywhere in the cache line---pick the * middle to be safe */ struct { __u32 pad1[3]; __u32 cpi; __u32 pad2[4]; } qic_cpi[8]; }; \ struct voyager_status { __u32 power_fail:1; __u32 switch_off:1; __u32 request_from_kernel:1; }; \ struct voyager_psi_regs { __u8 cat_id; __u8 cat_dev; __u8 cat_control; __u8 subaddr; __u8 dummy4; __u8 checkbit; __u8 subaddr_low; __u8 subaddr_high; __u8 intstatus; __u8 stat1; __u8 stat3; __u8 fault; __u8 tms; __u8 gen; __u8 sysconf; __u8 dummy15; }; \ struct voyager_psi_subregs { __u8 supply; __u8 mask; __u8 present; __u8 DCfail; __u8 ACfail; __u8 fail; __u8 UPSfail; __u8 genstatus; }; \ struct voyager_psi { struct voyager_psi_regs regs; struct voyager_psi_subregs subregs; }; \ struct voyager_SUS { #define VOYAGER_DUMP_BUTTON_NMI 0x1 #define VOYAGER_SUS_VALID 0x2 #define VOYAGER_SYSINT_COMPLETE 0x3 __u8 SUS_mbox; #define VOYAGER_NO_COMMAND 0x0 #define VOYAGER_IGNORE_DUMP 0x1 #define VOYAGER_DO_DUMP 0x2 #define VOYAGER_SYSINT_HANDSHAKE 0x3 #define VOYAGER_DO_MEM_DUMP 0x4 #define VOYAGER_SYSINT_WAS_RECOVERED 0x5 __u8 kernel_mbox; #define VOYAGER_MAILBOX_VERSION 0x10 __u8 SUS_version; __u8 kernel_version; #define VOYAGER_OS_HAS_SYSINT 0x1 #define VOYAGER_OS_IN_PROGRESS 0x2 #define VOYAGER_UPDATING_WDPERIOD 0x4 __u32 kernel_flags; #define VOYAGER_SUS_BOOTING 0x1 #define VOYAGER_SUS_IN_PROGRESS 0x2 __u32 SUS_flags; __u32 watchdog_period; __u32 watchdog_count; __u32 SUS_errorlog; /* lots of system configuration stuff under here */ }; /* Variables exported by voyager_smp */ extern __u32 voyager_extended_vic_processors; extern __u32 voyager_allowed_boot_processors; extern __u32 voyager_quad_processors; extern struct voyager_qic_cpi *voyager_quad_cpi_addr[NR_CPUS]; extern struct voyager_SUS *voyager_SUS; \ /* variables exported always */ extern int voyager_level; extern int kvoyagerd_running; extern struct completion kvoyagerd_wait; extern struct voyager_status voyager_status; \ \ \ /* functions exported by the voyager and voyager_smp modules */ \ extern int voyager_cat_readb(__u8 module, __u8 asic, int reg); extern void voyager_cat_init(void); extern void voyager_detect(struct voyager_bios_info *); extern void voyager_trap_init(void); extern void voyager_setup_irqs(void); extern int voyager_memory_detect(int region, __u32 *addr, __u32 *length); extern void voyager_smp_intr_init(void); extern __u8 voyager_extended_cmos_read(__u16 cmos_address); extern void voyager_dump(void); extern void voyager_smp_dump(void); extern void voyager_timer_interrupt(struct pt_regs *regs); extern void smp_local_timer_interrupt(struct pt_regs * regs); extern void voyager_power_off(void); extern void smp_voyager_power_off(void *dummy); extern void voyager_restart(void); extern void voyager_cat_power_off(void); extern void voyager_cat_do_common_interrupt(void); extern void voyager_handle_nmi(void); /* Commands for the following are */ #define VOYAGER_PSI_READ 0 #define VOYAGER_PSI_WRITE 1 #define VOYAGER_PSI_SUBREAD 2 #define VOYAGER_PSI_SUBWRITE 3 extern void voyager_cat_psi(__u8, __u16, __u8 *); jejb@mulgrave.(none)|include/asm-i386/voyager.h|20020224140214|19261 D 1.2 02/02/24 10:38:15-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Complete missed change from completion to semaphore K 19031 O -rw-rw-r-- P include/asm-i386/voyager.h ------------------------------------------------ D492 1 I492 1 extern struct semaphore kvoyagerd_sem; == arch/i386/Config.help == patch@athlon.transmeta.com|arch/i386/Config.help|20020206001713|03723|3a650f5e40e2823a patch@athlon.transmeta.com|arch/i386/Config.help|20020206001755|44407 D 1.2.1.1 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +9 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Moved help to arch specific file K 4710 O -rw-rw-r-- P arch/i386/Config.help ------------------------------------------------ I223 9 CONFIG_VOYAGER Voyager is a MCA based 32 way capable SMP architecture proprietary to NCR Corp. Machine classes 345x/35xx/4100/51xx are voyager based. *** WARNING *** \ If you do not specifically know you have a Voyager based machine, say N here otherwise the kernel you build will not be bootable. \ kai@vaio.(none)|arch/i386/Config.help|20020210143652|05861 D 1.6 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/Config.help|20020224155525|04710 K 31700 M jejb@mulgrave.(none)|arch/i386/Config.help|20020224155525|04710 O -rw-rw-r-- P arch/i386/Config.help ------------------------------------------------ == BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d == torvalds@athlon.transmeta.com|Documentation/Configure.help|20020205174036|10200|b2e6fcb151e0e36d patch@athlon.transmeta.com|Documentation/Configure.help|20020205203355|02506 D 1.63.1.1 02/02/24 08:02:12-06:00 jejb@mulgrave.(none) +10 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added help for CONFIG_VOYAGER K 31895 O -rw-rw-r-- P Documentation/Configure.help ------------------------------------------------ I3357 10 Support for the NCR Voyager Architecture CONFIG_VOYAGER Voyager is a MCA based 32 way capable SMP architecture proprietary to NCR Corp. Machine classes 345x/35xx/51xx are voyager based. *** WARNING *** \ If you do not specifically know you have a Voyager based machine, say N here otherwise the kernel you build will not be bootable. \ patch@athlon.transmeta.com|Documentation/Configure.help|20020205235816|17464 D 1.66.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|Documentation/Configure.help|20020224140212|31895 K 46853 M jejb@mulgrave.(none)|Documentation/Configure.help|20020224140212|31895 O -rw-rw-r-- P Documentation/Configure.help ------------------------------------------------ jejb@mulgrave.(none)|Documentation/Configure.help|20020224144114|46853 D 1.66.1.2 02/02/24 08:54:22-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added 4100 to voyager list K 47097 O -rw-rw-r-- P Documentation/Configure.help ------------------------------------------------ D3375 1 I3375 1 to NCR Corp. Machine classes 345x/35xx/4100/51xx are voyager based. patch@athlon.transmeta.com|Documentation/Configure.help|20020206001330|61153 D 1.69.1.1 02/02/24 09:15:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|Documentation/Configure.help|20020224144114|46853 i jejb@mulgrave.(none)|Documentation/Configure.help|20020224145422|47097 K 25250 M jejb@mulgrave.(none)|Documentation/Configure.help|20020224145422|47097 O -rw-rw-r-- P Documentation/Configure.help ------------------------------------------------ jejb@mulgrave.(none)|Documentation/Configure.help|20020224151538|25250 D 1.69.1.2 02/02/24 09:44:27-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c Merge rename: Documentation/Configure.help -> BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d K 33082 O -rw-rw-r-- P BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d ------------------------------------------------ patch@athlon.transmeta.com|BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d|20020206001713|01544 D 1.74 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|Documentation/Configure.help|20020224151538|25250 i jejb@mulgrave.(none)|BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d|20020224154427|33082 K 29225 M jejb@mulgrave.(none)|BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d|20020224154427|33082 O -rw-rw-r-- P BitKeeper/deleted/.del-Configure.help~b2e6fcb151e0e36d ------------------------------------------------ == MAINTAINERS == torvalds@athlon.transmeta.com|MAINTAINERS|20020205174000|01929|3683b871be7fc6b8 patch@athlon.transmeta.com|MAINTAINERS|20020205203348|57498 D 1.44.1.1 02/02/24 08:02:12-06:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added me as maintainer of the Voyager architecture K 4150 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ I893 6 LINUX FOR NCR VOYAGER P: James Bottomley M: J.E.J.Bottomley@HansenPartnership.com W: http://www.hansenpartnership.com/voyager S: Maintained \ patch@athlon.transmeta.com|MAINTAINERS|20020205235847|62301 D 1.48.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|MAINTAINERS|20020224140212|04150 K 8953 M jejb@mulgrave.(none)|MAINTAINERS|20020224140212|04150 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ patch@athlon.transmeta.com|MAINTAINERS|20020206001256|14072 D 1.51.1.1 02/02/24 09:15:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|MAINTAINERS|20020224144114|08953 K 26260 M jejb@mulgrave.(none)|MAINTAINERS|20020224144114|08953 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ patch@athlon.transmeta.com|MAINTAINERS|20020206001847|14015 D 1.54.1.1 02/02/24 09:46:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|MAINTAINERS|20020224151538|26260 K 26203 M jejb@mulgrave.(none)|MAINTAINERS|20020224151538|26260 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ jejb@mulgrave.(none)|MAINTAINERS|20020224154638|26203 D 1.54.1.2 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Alter email address (Hansen Partnership now uses first.last) K 26390 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ D903 1 I903 1 M: James.Bottomley@HansenPartnership.com rml@tech9.net|MAINTAINERS|20020210205930|32345 D 1.56.2.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|MAINTAINERS|20020224154638|26203 i jejb@mulgrave.(none)|MAINTAINERS|20020224155525|26390 K 44720 M jejb@mulgrave.(none)|MAINTAINERS|20020224155525|26390 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ ak@muc.de|MAINTAINERS|20020213201738|42500 D 1.60.1.1 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|MAINTAINERS|20020224161137|44720 K 54875 M jejb@mulgrave.(none)|MAINTAINERS|20020224161137|44720 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ davej@suse.de|MAINTAINERS|20020226193523|64599 D 1.62.1.2 02/02/27 09:30:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|MAINTAINERS|20020224163312|54875 K 11438 M jejb@mulgrave.(none)|MAINTAINERS|20020224163312|54875 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ david-b@pacbell.net|MAINTAINERS|20020302214544|30924 D 1.65.1.1 02/03/10 22:15:28-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|MAINTAINERS|20020227153037|11438 K 43299 M jejb@mulgrave.(none)|MAINTAINERS|20020227153037|11438 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ greg@kroah.com|MAINTAINERS|20020308004240|31473 D 1.67 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|MAINTAINERS|20020311031528|43299 K 43848 M jejb@mulgrave.(none)|MAINTAINERS|20020311031528|43299 O -rw-rw-r-- P MAINTAINERS ------------------------------------------------ == arch/i386/Makefile == torvalds@athlon.transmeta.com|arch/i386/Makefile|20020205174020|18710|1b8aa1f0c40a1dbf jejb@mulgrave.(none)|arch/i386/Makefile|20020310223325|05334 D 1.5 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added voyager as machine type K 9382 O -rw-rw-r-- P arch/i386/Makefile ------------------------------------------------ I91 3 ifdef CONFIG_VOYAGER MACHINE := voyager else I92 1 endif == arch/i386/boot/setup.S == torvalds@athlon.transmeta.com|arch/i386/boot/setup.S|20020205174020|11654|60d81ba2278e7f2f patch@athlon.transmeta.com|arch/i386/boot/setup.S|20020205203239|26338 D 1.6.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +34 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added voyager sections for setup. c c - Get voyager BIOS information (use APM area since voyager has c no APM) c - Ignore some spurious a20 gate mechanisms for voyager c - align the GTD on an 8 byte boundary (required for the voyager c quad CPU cards) K 13975 O -rw-rw-r-- P arch/i386/boot/setup.S ------------------------------------------------ I465 18 #ifdef CONFIG_VOYAGER movb $0xff, 0x40 # flag on config found movb $0xc0, %al mov $0xff, %ah int $0x15 # put voyager config info at es:di jc no_voyager movw $0x40, %si # place voyager info in apm table cld movw $7, %cx voyager_rep: movb %es:(%di), %al movb %al,(%si) incw %di incw %si decw %cx jnz voyager_rep no_voyager: #endif I654 1 #ifndef CONFIG_VOYAGER I672 1 #endif /* CONFIG_VOYAGER */ I675 1 #ifndef CONFIG_VOYAGER I677 1 #endif I686 1 #ifndef CONFIG_VOYAGER I733 1 #endif /* CONFIG_VOYAGER */ I899 1 #ifndef CONFIG_VOYAGER I929 2 #endif /* CONFIG_VOYAGER */ \ I988 7 \ ## # NOTE: On some CPUs, the GDT must be 8 byte aligned. This is # true for the Voyager Quad CPU card which will not boot without # This directive. ## .align 8 patch@athlon.transmeta.com|arch/i386/boot/setup.S|20020205235810|26380 D 1.7.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224140213|13975 K 14017 M jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224140213|13975 O -rw-rw-r-- P arch/i386/boot/setup.S ------------------------------------------------ patch@athlon.transmeta.com|arch/i386/boot/setup.S|20020206001714|38822 D 1.9 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224144114|14017 K 26459 M jejb@mulgrave.(none)|arch/i386/boot/setup.S|20020224144114|14017 O -rw-rw-r-- P arch/i386/boot/setup.S ------------------------------------------------ == arch/i386/config.in == torvalds@athlon.transmeta.com|arch/i386/config.in|20020205174020|19554|3014fe999baf20a0 patch@athlon.transmeta.com|arch/i386/config.in|20020205203345|07020 D 1.19.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +11 -7 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add voyager config (CONFIG_VOYAGER) when MCA K 16892 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ I198 10 \ if [ "$CONFIG_VISWS" != "y" ]; then bool 'MCA support' CONFIG_MCA if [ "$CONFIG_MCA" = "y" ]; then bool ' Support for the NCR Voyager Architecture' CONFIG_VOYAGER fi else define_bool CONFIG_MCA n fi \ D204 1 I204 1 if [ "$CONFIG_SMP" = "y" -a "$CONFIG_VOYAGER" != "y" ]; then D226 6 jejb@mulgrave.(none)|arch/i386/config.in|20020224140213|16892 D 1.19.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Disable TSC for voyager K 19287 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ I203 1 define_bool CONFIG_X86_TSC n patch@athlon.transmeta.com|arch/i386/config.in|20020206001331|35130 D 1.21.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/config.in|20020224140213|16892 i jejb@mulgrave.(none)|arch/i386/config.in|20020224145423|19287 K 47397 M jejb@mulgrave.(none)|arch/i386/config.in|20020224145423|19287 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ patch@athlon.transmeta.com|arch/i386/config.in|20020206001715|50760 D 1.23.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/config.in|20020224151539|47397 K 63027 M jejb@mulgrave.(none)|arch/i386/config.in|20020224151539|47397 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ rml@tech9.net|arch/i386/config.in|20020209191132|57240 D 1.24.1.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/config.in|20020224154639|63027 K 3971 M jejb@mulgrave.(none)|arch/i386/config.in|20020224154639|63027 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/config.in|20020224161137|03971 D 1.24.1.2 02/02/24 10:19:09-06:00 jejb@mulgrave.(none) +7 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Alter configuration flow to separate voyager from VISW and make c it more obvious what the requirements and conflicts are K 6979 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ D201 4 I206 7 fi \ if [ "$CONFIG_MCA" = "y" ]; then bool ' Support for the NCR Voyager Architecture' CONFIG_VOYAGER if [ "$CONFIG_VOYAGER" = "y" ]; then define_bool CONFIG_X86_TSC n fi mingo@elte.hu|arch/i386/config.in|20020219152738|13936 D 1.28 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/config.in|20020224161137|03971 i jejb@mulgrave.(none)|arch/i386/config.in|20020224161909|06979 K 29211 M jejb@mulgrave.(none)|arch/i386/config.in|20020224161909|06979 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/config.in|20020224163312|29211 D 1.29 02/03/10 22:27:43-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/config.in|20020310223325|24982 i jejb@mulgrave.(none)|arch/i386/config.in|20020311001639|24992 K 40267 M jejb@mulgrave.(none)|arch/i386/config.in|20020311001639|24992 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/config.in|20020311032743|40267 D 1.30 02/03/10 22:52:43-05:00 jejb@mulgrave.(none) +2 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Added extras for voyager K 45155 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ I219 1 define_bool CONFIG_X86_EXTRA_IRQS y D436 1 I436 1 if [ "$CONFIG_SMP" = "y" -a "$CONFIG_VOYAGER" != "y" ]; then jejb@mulgrave.(none)|arch/i386/config.in|20020311035243|45155 D 1.31 02/03/11 13:47:02-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/config.in|20020311183147|30348 K 50511 M jejb@mulgrave.(none)|arch/i386/config.in|20020311183147|30348 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/config.in|20020311184702|50511 D 1.32 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +11 -10 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c More voyager restructuring K 51171 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ D229 4 D430 1 I430 1 define_bool CONFIG_X86_EXTRA_IRQS y D437 3 I439 10 if [ "$CONFIG_VOYAGER" = "y" ]; then define_bool CONFIG_X86_EXTRA_IRQS y define_bool CONFIG_X86_IO_APIC n define_bool CONFIG_X86_LOCAL_APIC n else if [ "$CONFIG_SMP" = "y" ]; then define_bool CONFIG_X86_SMP y define_bool CONFIG_X86_HT y fi define_bool CONFIG_X86_BIOS_REBOOT y D441 2 jejb@mulgrave.(none)|arch/i386/config.in|20020311212805|51171 D 1.33 02/03/11 17:19:15-05:00 jejb@mulgrave.(none) +0 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/config.in|20020311220844|34025 K 54587 M jejb@mulgrave.(none)|arch/i386/config.in|20020311220844|34025 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ D428 1 D435 2 jejb@mulgrave.(none)|arch/i386/config.in|20020311221915|54587 D 1.34 02/03/11 17:43:38-05:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add FIND_SMP_CONFIG for voyager K 58003 O -rw-rw-r-- P arch/i386/config.in ------------------------------------------------ I437 1 define_bool CONFIG_X86_FIND_SMP_CONFIG y == arch/i386/kernel/Makefile == torvalds@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205174021|44365|51bedff053cda0cd patch@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205203239|31077 D 1.3.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +5 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add voyager components (replaces SMP subsystem) K 43384 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ I33 1 obj-$(CONFIG_VOYAGER) += voyager.o voyager_cat.o I38 3 ifdef CONFIG_VOYAGER obj-$(CONFIG_SMP) += voyager_smp.o trampoline.o voyager_thread.o else I39 1 endif patch@athlon.transmeta.com|arch/i386/kernel/Makefile|20020205235942|35096 D 1.5 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020224140213|43384 K 47403 M jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020224140213|43384 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020224151539|47403 D 1.6 02/03/10 22:32:36-05:00 jejb@mulgrave.(none) +0 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge (tidy up later) i jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020310223325|19362 K 23360 M jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020310223325|19362 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ D32 3 jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311033236|23360 D 1.7 02/03/11 13:47:02-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311183147|22473 K 26471 M jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311183147|22473 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311184702|26471 D 1.8 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c remove erroneous voyager line K 22473 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ D26 1 jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311212805|22473 D 1.9 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i torvalds@penguin.transmeta.com|arch/i386/kernel/Makefile|20020308003450|35716 K 23093 M torvalds@penguin.transmeta.com|arch/i386/kernel/Makefile|20020308003450|35716 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311234732|23093 D 1.10 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311231257|23093 K 23093 M jejb@mulgrave.(none)|arch/i386/kernel/Makefile|20020311231257|23093 O -rw-rw-r-- P arch/i386/kernel/Makefile ------------------------------------------------ == arch/i386/kernel/i386_ksyms.c == torvalds@athlon.transmeta.com|arch/i386/kernel/i386_ksyms.c|20020205174021|57868|87ffcb8a3a553b23 patch@athlon.transmeta.com|arch/i386/kernel/i386_ksyms.c|20020205203345|39717 D 1.16.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +6 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c export the cpu logical and number maps because voyager addresses c all CPUs physically (rather than logically as the IO-APIC SMP c architecture does). K 53301 O -rw-rw-r-- P arch/i386/kernel/i386_ksyms.c ------------------------------------------------ I175 6 \ #ifdef CONFIG_VOYAGER /* need to export the mappings from physical to logical CPU */ EXPORT_SYMBOL(__cpu_number_map); EXPORT_SYMBOL(__cpu_logical_map); #endif akpm@zip.com.au|arch/i386/kernel/i386_ksyms.c|20020218164435|36041 D 1.19 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020224140213|53301 K 49625 M jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020224140213|53301 O -rw-rw-r-- P arch/i386/kernel/i386_ksyms.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/i386_ksyms.c|20020224163312|49625 D 1.20 02/03/11 01:31:30-05:00 jejb@mulgrave.(none) +0 -6 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Move symbols to voyager specific subdir K 36041 O -rw-rw-r-- P arch/i386/kernel/i386_ksyms.c ------------------------------------------------ D173 6 == arch/i386/kernel/i8259.c == torvalds@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205174021|59798|fc99768517501f14 patch@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020205201857|12410 D 1.4.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +12 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Build the SMP IRQ gates for voyager. Also call the voyager c interrupt initialisation hook K 34319 O -rw-rw-r-- P arch/i386/kernel/i8259.c ------------------------------------------------ I23 3 #ifdef CONFIG_VOYAGER #include #endif D55 1 I55 1 #if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_VOYAGER) D81 1 I81 1 #if defined(CONFIG_SMP) && !defined(CONFIG_VOYAGER) D112 1 I112 1 #if defined(CONFIG_X86_IO_APIC) || defined(CONFIG_VOYAGER) I463 5 #ifdef CONFIG_VOYAGER \ /* set up voyager SMP interrupts */ voyager_smp_intr_init(); #else I489 1 #endif /* CONFIG_VOYAGER */ jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224140213|34319 D 1.4.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +1 -37 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Remove all voyager specific elements and instead introduce a global c smp_intr_init() call to hook arch specific interrupt gate c initialisations from K 9102 O -rw-rw-r-- P arch/i386/kernel/i8259.c ------------------------------------------------ D24 3 D80 11 D467 22 I488 1 smp_intr_init(); D498 1 patch@athlon.transmeta.com|arch/i386/kernel/i8259.c|20020206001714|26016 D 1.6.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224140213|34319 i jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224145423|09102 K 8622 M jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224145423|09102 O -rw-rw-r-- P arch/i386/kernel/i8259.c ------------------------------------------------ mingo@elte.hu|arch/i386/kernel/i8259.c|20020221161007|11930 D 1.8 02/02/27 09:32:22-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224154639|08622 K 8622 M jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020224154639|08622 O -rw-rw-r-- P arch/i386/kernel/i8259.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020227153222|08622 D 1.9 02/03/10 22:32:36-05:00 jejb@mulgrave.(none) +0 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge (tidy up later) i jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020310223325|42500 K 42500 M jejb@mulgrave.(none)|arch/i386/kernel/i8259.c|20020310223325|42500 O -rw-rw-r-- P arch/i386/kernel/i8259.c ------------------------------------------------ D57 1 D90 1 == arch/i386/kernel/irq.c == torvalds@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205174021|53161|b0f85cd930bb690b patch@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205202949|48005 D 1.6.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +2 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Print IRQs physically rather than logically K 52532 O -rw-rw-r-- P arch/i386/kernel/irq.c ------------------------------------------------ D142 1 I142 1 p += sprintf(p, "CPU%d ", cpu_logical_map(j)); D169 1 I169 1 #if defined(CONFIG_X86_LOCAL_APIC) && !defined(CONFIG_VOYAGER) patch@athlon.transmeta.com|arch/i386/kernel/irq.c|20020205235810|52519 D 1.7.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +1 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224140213|52532 K 57046 M jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224140213|52532 O -rw-rw-r-- P arch/i386/kernel/irq.c ------------------------------------------------ D142 2 I143 1 seq_printf(p, "CPU%d ", cpu_logical_map(j)); jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224144114|57046 D 1.7.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c correct whitespace K 57014 O -rw-rw-r-- P arch/i386/kernel/irq.c ------------------------------------------------ D142 1 I142 1 seq_printf(p, "CPU%d ",cpu_logical_map(j)); dhowells@redhat.com|arch/i386/kernel/irq.c|20020207225621|52467 D 1.9 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224144114|57046 i jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224145423|57014 K 56962 M jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224145423|57014 O -rw-rw-r-- P arch/i386/kernel/irq.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/irq.c|20020224161137|56962 D 1.10 02/03/11 13:43:11-05:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Remove CONFIG_VOYAGER from local APIC K 54418 O -rw-rw-r-- P arch/i386/kernel/irq.c ------------------------------------------------ D168 1 I168 1 #ifdef CONFIG_X86_LOCAL_APIC == arch/i386/kernel/mca.c == torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174021|58816|d911d404e1d0ea6 torvalds@athlon.transmeta.com|arch/i386/kernel/mca.c|20020205174022|24233 D 1.1.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add a hook for the voyager NMI K 28985 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ I376 3 #ifdef CONFIG_VOYAGER voyager_handle_nmi(); #else I377 1 #endif jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224140213|28985 D 1.1.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +3 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c include asm/voyager.h to get the definition of voyager_handle_nmi() K 33431 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ I54 3 #ifdef CONFIG_VOYAGER #include #endif patch@athlon.transmeta.com|arch/i386/kernel/mca.c|20020206001644|26853 D 1.5 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224140213|28985 i jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224145423|33431 K 36051 M jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224145423|33431 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020224154639|36051 D 1.6 02/03/10 22:32:37-05:00 jejb@mulgrave.(none) +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge (tidy up later) i jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311030012|10518 K 14964 M jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311030012|10518 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ D378 1 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311033237|14964 D 1.7 02/03/10 22:52:44-05:00 jejb@mulgrave.(none) +0 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c remove voyager specific stuff K 10518 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ D55 3 jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311035244|10518 D 1.8 02/03/11 17:15:54-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311220844|13032 K 13032 M jejb@mulgrave.(none)|arch/i386/kernel/mca.c|20020311220844|13032 O -rw-rw-r-- P arch/i386/kernel/mca.c ------------------------------------------------ == arch/i386/generic/mpparse.c == torvalds@athlon.transmeta.com|arch/i386/kernel/mpparse.c|20020205174021|05759|a518369612979315 Martin.Bligh@us.ibm.com|arch/i386/kernel/mpparse.c|20020308005401|61398 D 1.7.1.1 02/03/11 18:47:31-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c Merge rename: arch/i386/kernel/mpparse.c -> arch/i386/generic/mpparse.c K 27591 O -rw-rw-r-- P arch/i386/generic/mpparse.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311234731|27591 D 1.7.1.2 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020310202131|26674 i jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020310223325|54934 K 8258 M jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020310223325|54934 O -rw-rw-r-- P arch/i386/generic/mpparse.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311231258|08258 D 1.10 02/03/11 19:17:08-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311234731|27591 i jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311234732|08258 K 8258 M jejb@mulgrave.(none)|arch/i386/generic/mpparse.c|20020311234732|08258 O -rw-rw-r-- P arch/i386/generic/mpparse.c ------------------------------------------------ == arch/i386/generic/pci-pc.c == torvalds@athlon.transmeta.com|arch/i386/kernel/pci-pc.c|20020205174021|63770|524c79ffe499fd6b Martin.Bligh@us.ibm.com|arch/i386/kernel/pci-pc.c|20020308005401|01926 D 1.19.1.1 02/03/11 18:47:31-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 c Merge rename: arch/i386/kernel/pci-pc.c -> arch/i386/generic/pci-pc.c K 32683 O -rw-rw-r-- P arch/i386/generic/pci-pc.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311234731|32683 D 1.19.1.2 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020310152345|09047 K 1926 M jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020310152345|09047 O -rw-rw-r-- P arch/i386/generic/pci-pc.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311231258|01926 D 1.22 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311234731|32683 i jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311234732|01926 K 1926 M jejb@mulgrave.(none)|arch/i386/generic/pci-pc.c|20020311234732|01926 O -rw-rw-r-- P arch/i386/generic/pci-pc.c ------------------------------------------------ == arch/i386/kernel/process.c == torvalds@athlon.transmeta.com|arch/i386/kernel/process.c|20020205174021|49308|2ad581b9d9a74cc6 patch@athlon.transmeta.com|arch/i386/kernel/process.c|20020205202056|30330 D 1.8.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +24 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c add hooks for the power off and restart functions of the voyager K 430 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ I35 3 #ifdef CONFIG_VOYAGER #include #endif I152 1 #ifndef CONFIG_VOYAGER I153 1 #endif I202 1 #ifndef CONFIG_VOYAGER I262 1 #endif /* CONFIG VOYAGER */ I279 4 #ifdef CONFIG_VOYAGER kb_wait(); voyager_restart(); #else I362 1 #endif /* CONFIG_VOYAGER */ I366 3 #ifdef CONFIG_VOYAGER machine_real_restart(NULL, 0); #else I421 1 #endif /* CONFIG_VOYAGER */ I425 4 #ifdef CONFIG_VOYAGER /* treat a halt like a power off */ machine_power_off(); #endif I429 3 #ifdef CONFIG_VOYAGER voyager_power_off(); #else I431 1 #endif jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224140213|00430 D 1.8.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +5 -23 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Remove the voyager specific hooks and instead don't define the restart c functions if CONFIG_VOYAGER is set c c FIXME: This would be more generic if keyed off a more neutral c variable (e.g. CONFIG_ARCH_HANDLES_RESTART) K 41509 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ D36 3 D208 1 I208 2 #ifndef CONFIG_VOYAGER /* voyager supplies its own restart functions*/ \ D269 1 D285 1 I285 1 static void machine_real_restart(unsigned char *code, int length) D287 4 D374 1 D379 3 D437 1 D442 4 I447 2 #endif /* CONFIG_VOYAGER */ \ D450 3 D455 1 patch@athlon.transmeta.com|arch/i386/kernel/process.c|20020206001257|25583 D 1.10.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224140213|00430 i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224145423|41509 K 36762 M jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224145423|41509 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ patch@athlon.transmeta.com|arch/i386/kernel/process.c|20020206001847|30902 D 1.13.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224151539|36762 K 42081 M jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224151539|36762 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ davej@suse.de|arch/i386/kernel/process.c|20020209214653|56182 D 1.16.2.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224154639|42081 K 1825 M jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224154639|42081 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ mingo@elte.hu|arch/i386/kernel/process.c|20020219152738|01482 D 1.20 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224161137|01825 K 12661 M jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224161137|01825 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020224163312|12661 D 1.21 02/03/11 13:53:01-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020311183147|63225 K 63225 M jejb@mulgrave.(none)|arch/i386/kernel/process.c|20020311183147|63225 O -rw-rw-r-- P arch/i386/kernel/process.c ------------------------------------------------ == arch/i386/kernel/setup.c == torvalds@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205174021|47310|a1041e741f1cc275 patch@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205203350|27470 D 1.30.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +52 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c - Add the voyager memory setup c - pull they voyager info from setup.S K 548 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ I95 3 #ifdef CONFIG_VOYAGER #include #endif I174 3 #ifdef CONFIG_VOYAGER #define VOYAGER_BIOS_INFO ((struct voyager_bios_info *)(PARAM+0x40)) #else I175 1 #endif D669 1 I677 36 #ifdef CONFIG_VOYAGER char *who = "NOT VOYAGER"; \ if(voyager_level == 5) { __u32 addr, length; int i; \ who = "Voyager-SUS"; \ e820.nr_map = 0; for(i=0; voyager_memory_detect(i, &addr, &length); i++) { add_memory_region(addr, length, E820_RAM); } } else if(voyager_level == 4) { __u32 tom; __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8; /* select the DINO config space */ outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT); /* Read DINO top of memory register */ tom = ((inb(catbase + 0x4) & 0xf0) << 16) + ((inb(catbase + 0x5) & 0x7f) << 24); \ if(inb(catbase) != VOYAGER_DINO) { printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); tom = (EXT_MEM_K)<<10; } who = "Voyager-TOM"; add_memory_region(0, 0x9f000, E820_RAM); /* map from 1M to top of memory */ add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM); /* FIXME: Should check the ASICs to see if I need to * take out the 8M window. Just do it at the moment * */ add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED); } else { #endif I702 3 #ifdef CONFIG_VOYAGER } #endif D795 1 I808 5 #ifdef CONFIG_VOYAGER voyager_detect(VOYAGER_BIOS_INFO); #else apm_info.bios = APM_BIOS_INFO; #endif /* CONFIG_VOYAGER */ D810 1 D956 1 I956 1 #if defined(CONFIG_X86_LOCAL_APIC) || defined(CONFIG_VOYAGER) patch@athlon.transmeta.com|arch/i386/kernel/setup.c|20020205235804|42508 D 1.31.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224140213|00548 K 15586 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224140213|00548 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224144114|15586 D 1.31.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +74 -63 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Place voyager memory initialisation in clearly identifiable c static function (suggestion from Dave Jones and Rik Van Riel) K 34057 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ I121 1 static inline char * __init machine_specific_memory_setup(void); I676 1 \ D685 21 I705 1 char *who = machine_specific_memory_setup(); D707 42 I2977 71 } \ static inline char * __init machine_specific_memory_setup(void) { char *who; \ #ifdef CONFIG_VOYAGER who = "NOT VOYAGER"; \ if(voyager_level == 5) { __u32 addr, length; int i; \ who = "Voyager-SUS"; \ e820.nr_map = 0; for(i=0; voyager_memory_detect(i, &addr, &length); i++) { add_memory_region(addr, length, E820_RAM); } return who; } else if(voyager_level == 4) { __u32 tom; __u16 catbase = inb(VOYAGER_SSPB_RELOCATION_PORT)<<8; /* select the DINO config space */ outb(VOYAGER_DINO, VOYAGER_CAT_CONFIG_PORT); /* Read DINO top of memory register */ tom = ((inb(catbase + 0x4) & 0xf0) << 16) + ((inb(catbase + 0x5) & 0x7f) << 24); \ if(inb(catbase) != VOYAGER_DINO) { printk(KERN_ERR "Voyager: Failed to get DINO for L4, setting tom to EXT_MEM_K\n"); tom = (EXT_MEM_K)<<10; } who = "Voyager-TOM"; add_memory_region(0, 0x9f000, E820_RAM); /* map from 1M to top of memory */ add_memory_region(1*1024*1024, tom - 1*1024*1024, E820_RAM); /* FIXME: Should check the ASICs to see if I need to * take out the 8M window. Just do it at the moment * */ add_memory_region(8*1024*1024, 8*1024*1024, E820_RESERVED); return who; } #endif /* CONFIG_VOYAGER */ \ who = "BIOS-e820"; \ /* * Try to copy the BIOS-supplied E820-map. * * Otherwise fake a memory map; one section from 0k->640k, * the next section from 1mb->appropriate_mem_k */ sanitize_e820_map(E820_MAP, &E820_MAP_NR); if (copy_e820_map(E820_MAP, E820_MAP_NR) < 0) { unsigned long mem_size; \ /* compare results from other methods and take the greater */ if (ALT_MEM_K < EXT_MEM_K) { mem_size = EXT_MEM_K; who = "BIOS-88"; } else { mem_size = ALT_MEM_K; who = "BIOS-e801"; } \ e820.nr_map = 0; add_memory_region(0, LOWMEMSIZE(), E820_RAM); add_memory_region(HIGH_MEMORY, mem_size << 10, E820_RAM); } return who; patch@athlon.transmeta.com|arch/i386/kernel/setup.c|20020206001331|05695 D 1.34.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224144114|15586 i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224145423|34057 K 62780 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224145423|34057 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224151539|62780 D 1.34.1.2 02/02/24 09:22:03-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c remove hyperthreading check from voyager CPUs K 65324 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D2085 1 I2085 1 #if defined(CONFIG_SMP) && !defined(CONFIG_VOYAGER) patch@athlon.transmeta.com|arch/i386/kernel/setup.c|20020206001755|07037 D 1.36.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224151539|62780 i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224152203|65324 K 1130 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224152203|65324 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ davej@suse.de|arch/i386/kernel/setup.c|20020209014314|08952 D 1.39.1.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224154639|01130 K 3045 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224154639|01130 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ mingo@elte.hu|arch/i386/kernel/setup.c|20020218192132|63933 D 1.41 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224161137|03045 K 58026 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224161137|03045 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020224163312|58026 D 1.42 02/02/27 09:30:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i davej@suse.de|arch/i386/kernel/setup.c|20020226193546|01549 K 61178 M davej@suse.de|arch/i386/kernel/setup.c|20020226193546|01549 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020227153038|61178 D 1.43 02/03/10 22:27:44-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020310223325|01011 K 60640 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020310223325|01011 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311032744|60640 D 1.44 02/03/11 00:34:35-05:00 jejb@mulgrave.(none) +1 -2 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311052758|36713 K 11466 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311052758|36713 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D574 1 I672 1 apm_info.bios = APM_BIOS_INFO; D2976 1 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311053435|11466 D 1.45 02/03/11 01:02:58-05:00 jejb@mulgrave.(none) +0 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311055930|37514 K 2709 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311055930|37514 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D688 5 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311060258|02709 D 1.46 02/03/11 01:21:42-05:00 jejb@mulgrave.(none) +0 -77 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c R K 48918 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D96 3 D190 3 D194 1 D2902 70 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311062142|48918 D 1.47 02/03/11 13:53:01-05:00 jejb@mulgrave.(none) +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311183147|37723 K 46583 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311183147|37723 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D2119 1 jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311185301|46583 D 1.48 02/03/11 17:19:16-05:00 jejb@mulgrave.(none) +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311220844|38137 K 44314 M jejb@mulgrave.(none)|arch/i386/kernel/setup.c|20020311220844|38137 O -rw-rw-r-- P arch/i386/kernel/setup.c ------------------------------------------------ D856 1 == arch/i386/kernel/smpboot.c == torvalds@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205174021|01101|c1d3f8ed92734a56 patch@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020205203354|34750 D 1.7.1.1 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +33 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add smp_intr_init() hook for ordinary x86 arch K 51479 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ I48 1 #include I1186 32 } \ extern void (*interrupt[NR_IRQS])(void); \ /* * The following vectors are part of the Linux architecture, there * is no hardware IRQ pin equivalent for them, they are triggered * through the ICC by us (IPIs) */ BUILD_SMP_INTERRUPT(reschedule_interrupt,RESCHEDULE_VECTOR) BUILD_SMP_INTERRUPT(invalidate_interrupt,INVALIDATE_TLB_VECTOR) BUILD_SMP_INTERRUPT(call_function_interrupt,CALL_FUNCTION_VECTOR) \ void __init smp_intr_init() { /* * IRQ0 must be given a fixed assignment and initialized, * because it's used before the IO-APIC is set up. */ set_intr_gate(FIRST_DEVICE_VECTOR, interrupt[0]); \ /* * The reschedule interrupt is a CPU-to-CPU reschedule-helper * IPI, driven by wakeup. */ set_intr_gate(RESCHEDULE_VECTOR, reschedule_interrupt); \ /* IPI for invalidation */ set_intr_gate(INVALIDATE_TLB_VECTOR, invalidate_interrupt); \ /* IPI for generic function call */ set_intr_gate(CALL_FUNCTION_VECTOR, call_function_interrupt); patch@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020206001257|31632 D 1.9.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224145423|51479 K 48361 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224145423|51479 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ patch@athlon.transmeta.com|arch/i386/kernel/smpboot.c|20020206001755|52116 D 1.12.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224151539|48361 K 3309 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224151539|48361 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224154639|03309 D 1.12.1.2 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +4 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add migration interrupt to smp_init_intr() hook K 17395 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ I1233 1 BUILD_SMP_INTERRUPT(task_migration_interrupt,TASK_MIGRATION_VECTOR) I1250 3 \ /* IPI for task migration */ set_intr_gate(TASK_MIGRATION_VECTOR, task_migration_interrupt); davej@suse.de|arch/i386/kernel/smpboot.c|20020209014314|57931 D 1.14.1.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224154639|03309 i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224155525|17395 K 23210 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224155525|17395 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ mingo@elte.hu|arch/i386/kernel/smpboot.c|20020219152738|51568 D 1.16 02/02/24 10:33:12-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224161137|23210 K 16847 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224161137|23210 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020224163312|16847 D 1.17 02/02/27 09:37:11-06:00 jejb@mulgrave.(none) +0 -4 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Remove task_migration_interrupt definitions c c from change set 1.373 by mingo@elte.hu K 2761 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ D1261 1 D1279 3 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020227153711|02761 D 1.18 02/03/10 22:15:29-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i rusty@rustcorp.com.au|arch/i386/kernel/smpboot.c|20020302213249|52226 K 3419 M rusty@rustcorp.com.au|arch/i386/kernel/smpboot.c|20020302213249|52226 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311031529|03419 D 1.19 02/03/10 22:27:44-05:00 jejb@mulgrave.(none) +0 -33 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020310223325|05933 K 5933 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020310223325|05933 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ D53 1 D1254 32 jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311032744|05933 D 1.20 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i Martin.Bligh@us.ibm.com|arch/i386/kernel/smpboot.c|20020308005401|56422 K 10129 M Martin.Bligh@us.ibm.com|arch/i386/kernel/smpboot.c|20020308005401|56422 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311234732|10129 D 1.21 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311231257|10129 K 10129 M jejb@mulgrave.(none)|arch/i386/kernel/smpboot.c|20020311231257|10129 O -rw-rw-r-- P arch/i386/kernel/smpboot.c ------------------------------------------------ == arch/i386/kernel/time.c == torvalds@athlon.transmeta.com|arch/i386/kernel/time.c|20020205174021|55064|21a3bd924f02077 patch@athlon.transmeta.com|arch/i386/kernel/time.c|20020205203314|02344 D 1.4.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +24 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c - Don't do TSC synchronisation for voyager - the CPUs can be driven c at different speeds by different clocks. c - check for latch count overflow K 53996 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ I60 4 #ifdef CONFIG_VOYAGER #include #endif \ D208 1 I208 10 #if defined(CONFIG_VOYAGER) && defined(CONFIG_SMP) /* can't read the ISR, just assume 1 tick overflow */ if(count > LATCH || count < 0) { printk("VOYAGER PROBLEM: count is %ld, latch is %ld\n", count, LATCH); count = LATCH; } count -= LATCH; #else I241 1 #endif /* CONFIG_VOYAGER && CONFIG_SMP */ I420 3 #ifdef CONFIG_VOYAGER voyager_timer_interrupt(regs); #else I427 1 #endif I657 4 #ifndef CONFIG_VOYAGER /* For voyager, even if some of our CPUs have a TSC, they can * be driven by different clocks, so the TSCs will drift out * of sync. It is much safer to use the slow gettimeoffset */ I698 1 #endif jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224140213|53996 D 1.4.1.2 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +4 -5 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c switch to using CONFIG_X86_TSC as indicator of whether TSC is c available K 41507 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ I589 1 #ifdef CONFIG_X86_TSC I653 1 #endif D676 4 I679 1 #ifdef CONFIG_X86_TSC D721 1 I721 1 #endif /* CONFIG_X86_TSC */ patch@athlon.transmeta.com|arch/i386/kernel/time.c|20020206001644|64394 D 1.6 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224140213|53996 i jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224145423|41507 K 38021 M jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224145423|41507 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020224154639|38021 D 1.7 02/02/27 09:30:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i vojtech@suse.cz|arch/i386/kernel/time.c|20020226212601|00890 K 40053 M vojtech@suse.cz|arch/i386/kernel/time.c|20020226212601|00890 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020227153038|40053 D 1.8 02/03/10 22:32:37-05:00 jejb@mulgrave.(none) +0 -9 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge (tidy up later) i jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020310223325|53563 K 11189 M jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020310223325|53563 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ D61 4 D427 1 D571 1 D637 1 D661 1 D702 1 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311033237|11189 D 1.9 02/03/11 16:28:05-05:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Correct printk variables K 10973 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ D213 1 I213 1 printk("VOYAGER PROBLEM: count is %d, latch is %d\n", count, LATCH); jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311212805|10973 D 1.10 02/03/11 17:19:16-05:00 jejb@mulgrave.(none) +0 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Merge i jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311220844|54491 K 54491 M jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311220844|54491 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ D208 1 jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311221916|54491 D 1.11 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i torvalds@penguin.transmeta.com|arch/i386/kernel/time.c|20020308003450|03232 K 56833 M torvalds@penguin.transmeta.com|arch/i386/kernel/time.c|20020308003450|03232 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311234732|56833 D 1.12 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311231258|56833 K 56833 M jejb@mulgrave.(none)|arch/i386/kernel/time.c|20020311231258|56833 O -rw-rw-r-- P arch/i386/kernel/time.c ------------------------------------------------ == arch/i386/kernel/traps.c == torvalds@athlon.transmeta.com|arch/i386/kernel/traps.c|20020205174021|43275|f01e9a814d3e2866 torvalds@penguin.transmeta.com|arch/i386/kernel/traps.c|20020308003603|62155 D 1.19.1.1 02/03/11 18:47:32-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020310223325|31734 K 34761 M jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020310223325|31734 O -rw-rw-r-- P arch/i386/kernel/traps.c ------------------------------------------------ jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020311231258|34761 D 1.21 02/03/11 19:17:09-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020311234732|34761 K 34761 M jejb@mulgrave.(none)|arch/i386/kernel/traps.c|20020311234732|34761 O -rw-rw-r-- P arch/i386/kernel/traps.c ------------------------------------------------ == drivers/char/sysrq.c == torvalds@athlon.transmeta.com|drivers/char/sysrq.c|20020205174004|19337|54afe09e7d33cfce patch@athlon.transmeta.com|drivers/char/sysrq.c|20020205202018|15787 D 1.7.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +16 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add voyager config dump K 40686 O -rw-rw-r-- P drivers/char/sysrq.c ------------------------------------------------ I34 4 #ifdef CONFIG_VOYAGER #include #endif \ I312 8 #ifdef CONFIG_VOYAGER static struct sysrq_key_op sysrq_voyager_dump_op = { handler: voyager_dump, help_msg: "voyager", action_msg: "Dump Voyager Status\n", }; #endif \ I355 3 #ifdef CONFIG_VOYAGER /* c */ &sysrq_voyager_dump_op, #else I356 1 #endif patch@athlon.transmeta.com|drivers/char/sysrq.c|20020205235847|16467 D 1.8.1.1 02/02/24 08:41:14-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c manual merge i jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224140213|40686 K 41366 M jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224140213|40686 O -rw-rw-r-- P drivers/char/sysrq.c ------------------------------------------------ patch@athlon.transmeta.com|drivers/char/sysrq.c|20020205235950|16787 D 1.10 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224144114|41366 K 41686 M jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224144114|41366 O -rw-rw-r-- P drivers/char/sysrq.c ------------------------------------------------ jejb@mulgrave.(none)|drivers/char/sysrq.c|20020224151539|41686 D 1.11 02/03/10 22:15:29-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i viro@math.psu.edu|drivers/char/sysrq.c|20020228202330|17179 K 42078 M viro@math.psu.edu|drivers/char/sysrq.c|20020228202330|17179 O -rw-rw-r-- P drivers/char/sysrq.c ------------------------------------------------ == include/asm-i386/hardirq.h == torvalds@athlon.transmeta.com|include/asm-i386/hardirq.h|20020205173944|59272|15265640a13d83ce patch@athlon.transmeta.com|include/asm-i386/hardirq.h|20020205203241|52873 D 1.4.1.1 02/02/24 09:55:25-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Make local_irq_count use cpu_logical_map() K 54521 O -rw-rw-r-- P include/asm-i386/hardirq.h ------------------------------------------------ D52 1 I52 1 if (local_irq_count(cpu_logical_map(i))) rml@tech9.net|include/asm-i386/hardirq.h|20020209191132|56839 D 1.6 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|include/asm-i386/hardirq.h|20020224155525|54521 K 58487 M jejb@mulgrave.(none)|include/asm-i386/hardirq.h|20020224155525|54521 O -rw-rw-r-- P include/asm-i386/hardirq.h ------------------------------------------------ == include/asm-i386/hw_irq.h == torvalds@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205173944|02324|3649a38c193ce3f patch@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020205201854|32888 D 1.4.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +1 -1 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Don't define hw_resend_irq for voyager K 35432 O -rw-rw-r-- P include/asm-i386/hw_irq.h ------------------------------------------------ D216 1 I216 1 #if defined(CONFIG_SMP) && !defined(CONFIG_VOYAGER) /*more of this file should probably be ifdefed SMP */ patch@athlon.transmeta.com|include/asm-i386/hw_irq.h|20020206001714|00062 D 1.6.1.1 02/02/24 09:46:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224140213|35432 K 2606 M jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224140213|35432 O -rw-rw-r-- P include/asm-i386/hw_irq.h ------------------------------------------------ rml@tech9.net|include/asm-i386/hw_irq.h|20020209191132|18262 D 1.8.1.1 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224154639|02606 K 20806 M jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224154639|02606 O -rw-rw-r-- P include/asm-i386/hw_irq.h ------------------------------------------------ mingo@elte.hu|include/asm-i386/hw_irq.h|20020221161007|15584 D 1.10 02/02/27 09:30:38-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224161137|20806 K 18128 M jejb@mulgrave.(none)|include/asm-i386/hw_irq.h|20020224161137|20806 O -rw-rw-r-- P include/asm-i386/hw_irq.h ------------------------------------------------ == include/asm-i386/irq.h == torvalds@athlon.transmeta.com|include/asm-i386/irq.h|20020205173944|23037|cfa60afe4ac0a973 patch@athlon.transmeta.com|include/asm-i386/irq.h|20020205201858|15702 D 1.4 02/02/24 08:54:23-06:00 jejb@mulgrave.(none) +1 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add definition of smp_intr_init() hook K 18853 O -rw-rw-r-- P include/asm-i386/irq.h ------------------------------------------------ I35 1 extern void smp_intr_init(void); == include/asm-i386/smp.h == torvalds@athlon.transmeta.com|include/asm-i386/smp.h|20020205173944|41674|b06e3b553054c2ec patch@athlon.transmeta.com|include/asm-i386/smp.h|20020205202359|43498 D 1.6.1.1 02/02/24 08:02:13-06:00 jejb@mulgrave.(none) +20 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Add and export the cpu_logical/physical map functions for voyager K 24171 O -rw-rw-r-- P include/asm-i386/smp.h ------------------------------------------------ I8 1 #include I66 16 #ifdef CONFIG_VOYAGER /* * On voyager, all CPU's are labelled by their VIC ID which is not * usually sequential, so we need to map from the contiguous (logical) * list used in the scheduler to the physical list */ extern volatile int __cpu_logical_map[NR_CPUS], __cpu_number_map[NR_CPUS]; \ extern inline int cpu_logical_map(int cpu) { return __cpu_logical_map[cpu]; } extern inline int cpu_number_map(int cpu) { return __cpu_number_map[cpu]; } #else I79 1 #endif I105 1 #ifdef CONFIG_X86_LOCAL_APIC I117 1 #endif patch@athlon.transmeta.com|include/asm-i386/smp.h|20020206001257|12939 D 1.8.1.1 02/02/24 09:15:39-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224140213|24171 K 59148 M jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224140213|24171 O -rw-rw-r-- P include/asm-i386/smp.h ------------------------------------------------ dhowells@redhat.com|include/asm-i386/smp.h|20020207225621|14270 D 1.10 02/02/24 10:11:37-06:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c SCCS merged i jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224151539|59148 K 60479 M jejb@mulgrave.(none)|include/asm-i386/smp.h|20020224151539|59148 O -rw-rw-r-- P include/asm-i386/smp.h ------------------------------------------------ == kernel/sched.c == torvalds@athlon.transmeta.com|kernel/sched.c|20020205173939|47232|5bb23172c60d3e93 mingo@elte.hu|kernel/sched.c|20020225220319|08594 D 1.52 02/02/27 14:55:30-06:00 jejb@malley.hansenpartnership.com +5 -3 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c currently migration_mask is phrased as a logical cpu bitmap. However c smp_processor_id() is physical. Need to fix up the setting and clearing c of migration_mask so that the bits represent logical cpus. K 16801 O -rw-rw-r-- P kernel/sched.c ------------------------------------------------ D1558 1 I1558 2 /* NOTE: migration_mask is a bitmap of logical CPUs */ static volatile unsigned long migration_mask = 0; D1588 1 I1588 2 if (test_and_clear_bit(cpu_number_map(smp_processor_id()), &migration_mask)) D1659 1 I1659 1 while (!cpu_rq(cpu_logical_map(cpu))->migration_thread) jejb@malley.hansenpartnership.com|kernel/sched.c|20020227205530|16801 D 1.53 02/03/10 22:15:29-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i rml@tech9.net|kernel/sched.c|20020305225904|09980 i rml@tech9.net|kernel/sched.c|20020305231932|13427 i torvalds@penguin.transmeta.com|kernel/sched.c|20020307002530|15269 K 23476 M torvalds@penguin.transmeta.com|kernel/sched.c|20020307002530|15269 O -rw-rw-r-- P kernel/sched.c ------------------------------------------------ jejb@mulgrave.(none)|kernel/sched.c|20020311031529|23476 D 1.54 02/03/11 18:47:33-05:00 jejb@mulgrave.(none) +0 -0 B torvalds@athlon.transmeta.com|ChangeSet|20020205173056|16047|c1d11a41ed024864 C c Auto merged i torvalds@home.transmeta.com|kernel/sched.c|20020307064132|19962 K 28169 M torvalds@home.transmeta.com|kernel/sched.c|20020307064132|19962 O -rw-rw-r-- P kernel/sched.c ------------------------------------------------ # Patch checksum=6a6b6a18