# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet v2.5.67 -> 1.1099 # drivers/video/fbmem.c 1.64.1.2 -> 1.72 # drivers/i2c/chips/w83781d.c 1.2 -> 1.4 # fs/xfs/linux/xfs_lrw.c 1.18 -> 1.19 # arch/i386/kernel/process.c 1.48 -> 1.49 # net/ipv4/netfilter/ip_conntrack_proto_udp.c 1.5 -> 1.6 # include/asm-s390x/module.h 1.4 -> (deleted) # drivers/s390/cio/device_id.c 1.2 -> 1.4 # include/asm-s390x/param.h 1.3 -> (deleted) # include/asm-s390x/bugs.h 1.1 -> (deleted) # drivers/i2c/i2c-frodo.c 1.6 -> 1.7 # include/asm-s390x/errno.h 1.2 -> (deleted) # drivers/char/ipmi/ipmi_kcs_intf.c 1.5 -> 1.6 # net/ipv4/netfilter/ip_conntrack_core.c 1.22 -> 1.25 # drivers/char/drm/drm_agpsupport.h 1.16 -> 1.17 # drivers/char/drm/drm_context.h 1.10 -> 1.11 # arch/m68k/vmlinux-sun3.lds 1.13 -> 1.14 # include/asm-s390/module.h 1.4 -> 1.5 # include/asm-s390/posix_types.h 1.2 -> 1.4 # drivers/mtd/maps/Makefile 1.7 -> 1.8 # arch/ia64/lib/io.c 1.2 -> 1.3 # drivers/net/3c59x.c 1.32 -> 1.33 # net/bridge/netfilter/ebtable_broute.c 1.4 -> 1.5 # Documentation/DocBook/kernel-api.tmpl 1.24 -> 1.25 # include/linux/file.h 1.8 -> 1.9 # arch/ia64/kernel/fsys.S 1.9 -> 1.10 # include/asm-s390x/div64.h 1.1 -> (deleted) # arch/sparc64/kernel/signal32.c 1.28 -> 1.29 # fs/xfs/xfs_mount.h 1.11 -> 1.12 # include/asm-alpha/pci.h 1.12 -> 1.13 # include/linux/kernel.h 1.34 -> 1.35 # drivers/scsi/aic7xxx/aic79xx_core.c 1.10.1.2 -> 1.17 # include/asm-s390/fcntl.h 1.3 -> 1.4 # arch/s390x/defconfig 1.19 -> (deleted) # drivers/media/dvb/av7110/av7110.c 1.5 -> (deleted) # include/net/route.h 1.19 -> 1.20 # arch/s390x/kernel/exec32.c 1.8 -> (deleted) # drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped 1.4 -> 1.8 # sound/oss/opl3sa2.c 1.19 -> 1.20 # sound/core/seq/oss/seq_oss_midi.c 1.7 -> 1.8 # drivers/s390/block/dasd_eckd.c 1.17 -> 1.19 # sound/oss/cs46xx.c 1.24 -> 1.25 # arch/s390/kernel/smp.c 1.22 -> 1.23 # arch/ia64/sn/tools/make_textsym 1.3 -> 1.4 arch/ia64/sn/fakeprom/make_textsym (moved) # sound/oss/dmasound/dmasound_paula.c 1.6 -> 1.7 # include/asm-i386/system.h 1.25 -> 1.26 # drivers/scsi/scsi_error.c 1.44 -> 1.46 # sound/pci/cs46xx/dsp_spos.h 1.7 -> 1.8 # arch/arm/kernel/head.S 1.15 -> 1.16 # drivers/usb/input/kbtab.c 1.1 -> 1.2 # include/asm-mips64/page.h 1.3 -> 1.4 # drivers/usb/misc/uss720.c 1.12 -> 1.13 # sound/oss/dmasound/dmasound_q40.c 1.8 -> 1.9 # sound/oss/sb_midi.c 1.3 -> 1.4 # drivers/base/hotplug.c 1.10 -> 1.11 # arch/s390/kernel/time.c 1.12 -> 1.14 # include/sound/initval.h 1.7 -> 1.8 # sound/i2c/cs8427.c 1.5 -> 1.6 # drivers/media/dvb/frontends/Makefile 1.3 -> 1.4 # include/asm-v850/teg.h 1.1 -> 1.2 # sound/pci/emu10k1/emupcm.c 1.13 -> 1.14 # arch/ia64/kernel/palinfo.c 1.12 -> 1.13 # fs/nfs/nfs4state.c 1.1 -> 1.3 # include/asm-s390x/shmparam.h 1.1 -> (deleted) # drivers/ieee1394/raw1394.c 1.20 -> 1.21 # include/asm-parisc/bitops.h 1.3 -> 1.4 # drivers/scsi/aic7xxx/aic7xxx_proc.c 1.6 -> 1.7 # include/asm-s390/checksum.h 1.8 -> 1.9 # include/asm-sh/bitops.h 1.2 -> 1.3 # kernel/ksyms.c 1.188 -> 1.189 # sound/pci/korg1212/korg1212.c 1.18 -> 1.19 # net/ipv4/netfilter/ip_conntrack_proto_icmp.c 1.4 -> 1.5 # sound/pci/ac97/ac97_patch.h 1.5 -> 1.6 # drivers/i2c/Makefile 1.9 -> 1.10 # mm/fremap.c 1.8 -> 1.9 # drivers/usb/serial/ipaq.h 1.7 -> 1.8 # arch/arm/kernel/signal.c 1.21 -> 1.22 # net/ipv4/proc.c 1.10 -> 1.11 # drivers/s390/cio/cio.h 1.3 -> 1.4 # include/asm-s390x/ccwgroup.h 1.2 -> (deleted) # include/asm-cris/pgtable.h 1.12 -> 1.13 # drivers/net/wan/cosa.c 1.18 -> 1.19 # drivers/s390/block/dasd_diag.c 1.11 -> 1.13 # arch/ia64/ia32/ia32_signal.c 1.15 -> 1.17 # include/asm-s390/bitops.h 1.10 -> 1.12 # fs/xfs/support/atomic.h 1.2 -> (deleted) # fs/select.c 1.17 -> 1.19 # include/asm-arm/bitops.h 1.10 -> 1.11 # include/asm-s390x/hardirq.h 1.5 -> (deleted) # arch/alpha/kernel/core_t2.c 1.6 -> 1.7 # include/asm-ia64/machvec_init.h 1.3 -> 1.4 # arch/arm/lib/uaccess.S 1.3 -> 1.4 # include/asm-s390x/todclk.h 1.2 -> (deleted) # drivers/usb/class/usb-midi.c 1.13 -> 1.14 # drivers/char/Kconfig 1.11 -> 1.12 # drivers/pnp/pnpbios/core.c 1.28 -> 1.29 # include/linux/kobject.h 1.18 -> 1.19 # net/ipv4/xfrm4_state.c 1.1 -> 1.2 # arch/ia64/Makefile 1.39 -> 1.42 # include/asm-i386/processor.h 1.45 -> 1.46 # net/ipv6/exthdrs.c 1.7 -> 1.8 # include/linux/mm.h 1.114 -> 1.116 # fs/file_table.c 1.22 -> 1.23 # arch/i386/kernel/cpu/common.c 1.20 -> 1.21 # drivers/char/agp/sis-agp.c 1.14 -> 1.15 # arch/i386/kernel/apm.c 1.48 -> 1.49 # include/sound/memalloc.h 1.1 -> 1.3 # arch/x86_64/vmlinux.lds.S 1.14 -> 1.15 # drivers/scsi/hosts.c 1.54 -> 1.56 # fs/open.c 1.36 -> 1.38 # lib/Makefile 1.20 -> 1.21 # include/asm-s390x/mmu_context.h 1.2 -> (deleted) # net/bridge/br_notify.c 1.1 -> 1.2 # arch/i386/mach-visws/visws_apic.c 1.7 -> 1.8 # include/asm-ia64/io.h 1.7 -> 1.9 # net/ipv6/ip6_output.c 1.15 -> 1.18 # drivers/ide/pci/serverworks.c 1.16 -> 1.17 # drivers/base/core.c 1.63 -> 1.64 # drivers/scsi/aic7xxx/aic7xxx_pci.c 1.9 -> 1.12 # include/asm-ppc64/cacheflush.h 1.2 -> 1.3 # fs/xfs/linux/xfs_lrw.h 1.10 -> 1.11 # drivers/usb/serial/io_edgeport.c 1.40 -> 1.42 # include/asm-s390x/uaccess.h 1.6 -> (deleted) # drivers/scsi/aic7xxx/aiclib.h 1.5 -> 1.6 # sound/oss/vidc.c 1.7 -> 1.8 # arch/i386/oprofile/op_model_p4.c 1.4 -> 1.5 # arch/s390/lib/Makefile 1.8 -> 1.9 # include/asm-arm/assembler.h 1.2 -> 1.3 # drivers/scsi/aic7xxx/aic7xxx_osm.c 1.19.1.3 -> 1.27 # mm/page_alloc.c 1.150 -> 1.153 # arch/alpha/kernel/pci.c 1.29 -> 1.31 # drivers/i2c/busses/Makefile 1.6 -> 1.7 # mm/readahead.c 1.29 -> 1.30 # include/linux/irda.h 1.5 -> 1.6 # arch/s390x/lib/memset.S 1.1 -> (deleted) # net/ipv6/ipv6_sockglue.c 1.16 -> 1.18 # sound/pci/cs46xx/cs46xx_lib.c 1.29 -> 1.30 # arch/sparc/vmlinux.lds.S 1.15 -> 1.16 # include/asm-ia64/spinlock.h 1.7 -> 1.9 # drivers/video/vesafb.c 1.29 -> 1.30 # include/asm-mips/bitops.h 1.4 -> 1.5 # arch/sparc/kernel/sparc_ksyms.c 1.15 -> 1.16 # drivers/char/drm/i830_dma.c 1.13 -> 1.14 # drivers/usb/host/ohci-hcd.c 1.40 -> 1.42 # include/asm-s390/idals.h 1.6 -> 1.7 # arch/alpha/kernel/sys_sable.c 1.7 -> 1.8 # drivers/input/serio/i8042.c 1.24 -> 1.25 # drivers/s390/net/iucv.c 1.15 -> 1.16 # arch/s390/kernel/setup.c 1.19 -> 1.21 # arch/v850/kernel/rte_cb.c 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dvb_net.h 1.2 -> 1.3 # net/ipv6/datagram.c 1.6 -> 1.7 # include/linux/compatmac.h 1.3 -> (deleted) # include/asm-ia64/sn/io.h 1.3 -> 1.4 # fs/file.c 1.6 -> 1.7 # net/sched/cls_rsvp.h 1.2 -> 1.3 # drivers/char/drm/drm_proc.h 1.9 -> 1.10 # sound/oss/emu10k1/audio.c 1.14 -> 1.15 # include/linux/init_task.h 1.23 -> 1.24 # include/asm-i386/mach-visws/irq_vectors.h 1.4 -> 1.5 # drivers/char/agp/i7x05-agp.c 1.8 -> (deleted) # drivers/scsi/lasi700.c 1.6 -> 1.7 # include/linux/sched.h 1.138 -> 1.140 # sound/isa/als100.c 1.12 -> 1.13 # kernel/fork.c 1.115 -> 1.116 # include/asm-ia64/machvec_hpzx1.h 1.5 -> 1.6 # arch/s390x/kernel/ptrace.c 1.13 -> (deleted) # drivers/video/i810/i810_accel.c 1.4 -> 1.6 # arch/i386/kernel/vm86.c 1.23 -> 1.24 # include/linux/netfilter_ipv4/ip_conntrack_amanda.h 1.1 -> 1.2 # kernel/sysctl.c 1.39 -> 1.41 # kernel/sys.c 1.42 -> 1.43 # sound/oss/wf_midi.c 1.6 -> 1.7 # include/linux/dvb/net.h 1.1 -> 1.2 # sound/core/seq/seq_memory.c 1.6 -> 1.7 # include/asm-s390x/sockios.h 1.1 -> (deleted) # drivers/i2c/chips/via686a.c 1.3 -> 1.5 # drivers/usb/serial/keyspan.c 1.44 -> 1.45 # fs/xfs/xfs_rw.h 1.4 -> 1.5 # arch/arm/boot/Makefile 1.20 -> 1.22 # include/sound/opl3.h 1.5 -> 1.6 # include/asm-m68knommu/bitops.h 1.1 -> 1.2 # net/ipv4/xfrm4_input.c 1.4 -> 1.5 # include/net/tcp.h 1.33 -> 1.34 # net/rxrpc/krxtimod.c 1.4 -> 1.5 # arch/s390/kernel/debug.c 1.11 -> 1.12 # arch/s390x/kernel/debug.c 1.11 -> (deleted) # drivers/media/dvb/frontends/alps_bsrv2.c 1.3 -> 1.4 # arch/arm/mach-sa1100/badge4.c 1.11 -> 1.12 # drivers/s390/net/lcs.c 1.12 -> 1.13 # drivers/ieee1394/ohci1394.h 1.14 -> 1.15 # sound/isa/cs423x/cs4236.c 1.13 -> 1.14 # arch/s390x/lib/Makefile 1.7 -> (deleted) # arch/s390x/kernel/head.S 1.10 -> (deleted) # include/asm-s390x/semaphore.h 1.3 -> (deleted) # fs/dcache.c 1.47 -> 1.49 # drivers/ieee1394/sbp2.c 1.24 -> 1.26 # net/bridge/br_ioctl.c 1.2 -> 1.4 # sound/oss/esssolo1.c 1.21 -> 1.23 # arch/i386/kernel/cpu/mcheck/mce.h 1.1 -> 1.2 # include/linux/dvb/video.h 1.1 -> 1.2 # include/asm-s390x/cache.h 1.4 -> (deleted) # arch/arm/kernel/asm-offsets.c 1.1 -> 1.2 # arch/arm/lib/lib1funcs.S 1.1 -> 1.2 # net/ipv4/af_inet.c 1.42 -> 1.43 # mm/vmscan.c 1.151 -> 1.152 # sound/oss/ac97_codec.c 1.13 -> 1.14 # drivers/s390/block/dasd_erp.c 1.2 -> 1.3 # drivers/media/dvb/frontends/grundig_29504-401.c 1.2 -> 1.3 # drivers/s390/char/sclp_tty.c 1.6 -> 1.7 # fs/proc/proc_misc.c 1.71 -> 1.74 # sound/isa/cmi8330.c 1.13 -> 1.14 # drivers/media/dvb/av7110/saa7146.c 1.3 -> (deleted) # drivers/char/agp/frontend.c 1.28 -> 1.31 # drivers/scsi/NCR_D700.c 1.6 -> 1.7 # drivers/s390/cio/css.c 1.2 -> 1.3 # include/asm-s390x/pgalloc.h 1.8 -> (deleted) # sound/drivers/opl3/opl3_synth.c 1.2 -> 1.3 # include/asm-s390x/topology.h 1.1 -> (deleted) # arch/sparc/Makefile 1.22 -> 1.23 # arch/i386/kernel/cpu/mcheck/non-fatal.c 1.4 -> 1.5 # arch/ia64/sn/kernel/Makefile 1.10 -> 1.11 # fs/proc/task_mmu.c 1.1 -> 1.2 # arch/sparc/kernel/process.c 1.22 -> 1.23 # arch/s390/mm/ioremap.c 1.6 -> 1.7 # sound/pci/cs46xx/cs46xx_lib.h 1.8 -> 1.9 # drivers/char/agp/generic-3.0.c 1.7 -> 1.9 # arch/ia64/hp/common/sba_iommu.c 1.10 -> 1.11 # include/linux/netfilter_ipv4/ip_conntrack_helper.h 1.2 -> 1.3 # net/ipv4/netfilter/ip_nat_core.c 1.21 -> 1.22 # include/asm-i386/uaccess.h 1.22 -> 1.23 # drivers/ieee1394/video1394.c 1.28 -> 1.29 # drivers/block/floppy.c 1.71 -> 1.72 # arch/i386/Kconfig 1.49 -> 1.50 # sound/oss/dmasound/dmasound_core.c 1.8 -> 1.9 # drivers/media/dvb/frontends/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-visws/smpboot_hooks.h 1.2 -> 1.3 # include/sound/snd_wavefront.h 1.2 -> 1.3 # sound/oss/ics2101.c 1.3 -> 1.4 # arch/arm/lib/io-acorn.S 1.6 -> 1.7 # sound/core/control.c 1.19 -> 1.20 # arch/arm/lib/backtrace.S 1.7 -> 1.8 # net/bridge/br.c 1.9 -> 1.10 # drivers/s390/char/sclp.h 1.2 -> 1.3 # include/asm-sparc64/bitops.h 1.12 -> 1.13 # include/asm-s390x/spinlock.h 1.8 -> (deleted) # include/asm-sparc/pgtsun4c.h 1.1 -> 1.3 # net/ipv4/udp.c 1.34 -> 1.35 # sound/isa/opti9xx/opti92x-ad1848.c 1.12 -> 1.13 # drivers/media/dvb/dvb-core/dvb_demux.c 1.3 -> 1.4 # arch/arm/mach-iop310/mm.c 1.4 -> 1.6 arch/arm/mach-iop3xx/mm.c (moved) # arch/v850/kernel/process.c 1.4 -> 1.5 # include/asm-i386/signal.h 1.7 -> 1.8 # arch/arm/mach-iop310/iq80310-irq.c 1.6 -> 1.8 arch/arm/mach-iop3xx/iq80310-irq.c (moved) # include/asm-s390/page.h 1.8 -> 1.9 # drivers/ieee1394/ieee1394_core.h 1.12 -> 1.13 # include/asm-v850/rte_ma1_cb.h 1.1 -> 1.2 # arch/arm/def-configs/iq80310 1.12 -> 1.15 # net/sched/sch_dsmark.c 1.7 -> 1.8 # include/asm-s390x/atomic.h 1.6 -> (deleted) # init/main.c 1.96 -> 1.97 # fs/devfs/base.c 1.80 -> 1.81 # arch/i386/kernel/traps.c 1.48 -> 1.50 # sound/oss/sb_mixer.c 1.4 -> 1.5 # drivers/pcmcia/sa1100_badge4.c 1.9 -> 1.10 # include/linux/i2c.h 1.21 -> 1.23 # sound/core/wrappers.c 1.6 -> 1.7 # fs/nfsd/nfsctl.c 1.31 -> 1.32 # arch/alpha/kernel/setup.c 1.30 -> 1.33 # drivers/video/clps711xfb.c 1.19 -> 1.20 # include/asm-arm/arch-iop310/hardware.h 1.1 -> 1.3 include/asm-arm/arch-iop3xx/hardware.h (moved) # include/asm-arm/arch-iop310/iq80310.h 1.1 -> 1.2 include/asm-arm/arch-iop3xx/iq80310.h (moved) # arch/s390/kernel/entry.S 1.25 -> 1.29 # fs/stat.c 1.17 -> 1.18 # Documentation/scsi/st.txt 1.9 -> 1.11 # include/asm-s390x/io.h 1.4 -> (deleted) # drivers/ieee1394/sbp2.h 1.14 -> 1.16 # include/asm-s390/qdio.h 1.4 -> 1.5 # include/asm-arm/proc-armo/cache.h 1.5 -> 1.6 # sound/oss/midi_synth.h 1.2 -> 1.3 # include/asm-s390x/termbits.h 1.1 -> (deleted) # arch/s390/Makefile 1.24 -> 1.25 # drivers/ieee1394/hosts.h 1.12 -> 1.13 # include/asm-ia64/atomic.h 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvb_net.c 1.2 -> 1.3 # include/asm-x86_64/cacheflush.h 1.3 -> 1.4 # include/asm-x86_64/fixmap.h 1.2 -> 1.3 # fs/xfs/xfs_vfsops.c 1.27 -> 1.28 # arch/i386/vmlinux.lds.S 1.26 -> 1.27 # include/asm-s390/uaccess.h 1.9 -> 1.10 # fs/nfs/Makefile 1.7 -> 1.8 # arch/arm/kernel/sys_arm.c 1.9 -> 1.10 # sound/oss/ite8172.c 1.10 -> 1.12 # sound/oss/v_midi.c 1.4 -> 1.5 # include/asm-ia64/cacheflush.h 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dvbdev.c 1.5 -> 1.7 # mm/swapfile.c 1.69 -> 1.73 # arch/parisc/vmlinux.lds.S 1.12 -> 1.13 # drivers/s390/cio/qdio.h 1.3 -> 1.4 # drivers/s390/block/dasd_proc.c 1.9 -> 1.11 # sound/drivers/opl3/opl3_lib.c 1.7 -> 1.8 # include/asm-s390x/ptrace.h 1.5 -> (deleted) # fs/xfs/xfs.h 1.4 -> 1.5 # drivers/video/controlfb.c 1.24 -> 1.25 # drivers/media/dvb/frontends/alps_tdmb7.c 1.2 -> 1.3 # drivers/i2c/Kconfig 1.7 -> 1.8 # arch/ia64/kernel/time.c 1.16 -> 1.19 # arch/alpha/kernel/proto.h 1.13 -> 1.14 # drivers/media/dvb/dvb-core/dvb_i2c.h 1.2 -> 1.3 # include/asm-ia64/mca.h 1.5 -> 1.6 # drivers/ieee1394/csr.c 1.7 -> 1.8 # drivers/media/dvb/dvb-core/dvb_filter.h 1.2 -> 1.3 # include/linux/dvb/audio.h 1.1 -> 1.2 # include/asm-s390x/timex.h 1.2 -> (deleted) # arch/s390x/kernel/ebcdic.c 1.2 -> (deleted) # include/asm-s390x/delay.h 1.2 -> (deleted) # drivers/char/drm/drm_bufs.h 1.10 -> 1.12 # drivers/block/Kconfig 1.3 -> 1.4 # net/ipv6/xfrm6_policy.c 1.1 -> 1.3 # include/net/ip6_route.h 1.5 -> 1.6 # drivers/net/fc/iph5526.c 1.19 -> 1.20 # drivers/i2c/i2c-adap-ite.c 1.10 -> 1.11 # lib/radix-tree.c 1.14 -> 1.15 # kernel/time.c 1.10 -> 1.11 # include/asm-i386/mach-voyager/irq_vectors.h 1.2 -> 1.3 # include/linux/udp.h 1.5 -> 1.6 # arch/i386/kernel/microcode.c 1.17 -> 1.18 # drivers/input/mouse/psmouse.c 1.21 -> 1.22 # drivers/media/dvb/dvb-core/dvb_frontend.c 1.3 -> 1.4 # include/asm-arm/arch-iop310/io.h 1.1 -> 1.3 include/asm-arm/arch-iop3xx/io.h (moved) # drivers/char/drm/drm_ioctl.h 1.9 -> 1.10 # drivers/ieee1394/ieee1394_core.c 1.25 -> 1.26 # sound/isa/ad1816a/ad1816a.c 1.7 -> 1.8 # drivers/net/pcmcia/3c574_cs.c 1.13 -> 1.14 # sound/oss/pas2_pcm.c 1.4 -> 1.5 # sound/oss/btaudio.c 1.11 -> 1.12 # include/asm-ppc64/compat.h 1.11 -> 1.12 # drivers/usb/core/message.c 1.24 -> 1.25 # net/ipv4/netfilter/ip_tables.c 1.13 -> 1.14 # drivers/base/bus.c 1.42 -> 1.43 # fs/mpage.c 1.40 -> 1.41 # fs/xfs/xfs_fs.h 1.5 -> 1.7 # kernel/softirq.c 1.36 -> 1.39 # net/ipv4/Makefile 1.16 -> 1.18 # arch/ia64/kernel/smpboot.c 1.27 -> 1.28 # arch/s390x/kernel/entry.S 1.30 -> (deleted) # arch/ia64/sn/io/Makefile 1.10 -> 1.11 # drivers/mtd/maps/sa1100-flash.c 1.7 -> 1.9 # drivers/media/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-default/irq_vectors.h 1.5 -> 1.6 # sound/oss/gus_wave.c 1.7 -> 1.8 # drivers/media/dvb/frontends/alps_tdlb7.c 1.2 -> 1.3 # arch/i386/boot/video.S 1.5 -> 1.7 # include/asm-s390x/socket.h 1.3 -> (deleted) # drivers/scsi/scsi.h 1.69 -> 1.71 # arch/v850/kernel/rte_mb_a_pci.c 1.5 -> 1.6 # include/linux/i2c-dev.h 1.7 -> 1.8 # include/asm-sparc64/signal.h 1.7 -> 1.8 # include/asm-s390x/mman.h 1.3 -> (deleted) # include/linux/icmpv6.h 1.2 -> 1.3 # arch/s390x/lib/strncpy.S 1.1 -> (deleted) # include/linux/fs.h 1.226 -> 1.232 # drivers/usb/storage/usb.c 1.58 -> 1.60 # drivers/video/sis/sis_main.h 1.9 -> 1.10 # arch/ia64/kernel/entry.S 1.36 -> 1.39 # arch/ia64/sn/kernel/setup.c 1.10 -> 1.11 # kernel/futex.c 1.24 -> 1.25 # include/sound/emu10k1.h 1.12 -> 1.13 # include/asm-v850/processor.h 1.4 -> 1.5 # drivers/video/vga16fb.c 1.30 -> 1.32 # include/asm-i386/sigcontext.h 1.2 -> 1.3 # arch/s390x/boot/ipleckd.S 1.1 -> (deleted) # drivers/pcmcia/cardbus.c 1.25 -> 1.26 # drivers/video/tdfxfb.c 1.40 -> 1.41 # include/linux/linux_logo.h 1.3 -> 1.4 # drivers/usb/image/scanner.c 1.55 -> 1.56 # drivers/md/dm-ioctl.c 1.15 -> 1.16 # arch/alpha/kernel/sys_cabriolet.c 1.8 -> 1.9 # include/asm-s390/termios.h 1.4 -> 1.5 # drivers/scsi/aic7xxx/aic79xx_osm_pci.c 1.6 -> 1.7 # include/linux/radix-tree.h 1.4 -> 1.5 # include/asm-s390x/rwsem.h 1.4 -> (deleted) # drivers/net/lp486e.c 1.9 -> 1.10 # Documentation/filesystems/proc.txt 1.13 -> 1.14 # include/asm-i386/i8259.h 1.1 -> 1.2 # include/asm-s390x/dasd.h 1.9 -> (deleted) # include/asm-mips/pgtable.h 1.10 -> 1.11 # arch/arm/boot/compressed/head-xscale.S 1.2 -> 1.3 # net/sched/cls_u32.c 1.5 -> 1.6 # include/linux/ip.h 1.7 -> 1.8 # sound/oss/via82cxxx_audio.c 1.24 -> 1.25 # sound/oss/dmasound/dmasound_atari.c 1.7 -> 1.8 # drivers/scsi/aic7xxx/aic7xxx_osm_pci.c 1.7 -> 1.8 # include/asm-generic/siginfo.h 1.5 -> 1.8 # drivers/ieee1394/ieee1394.h 1.4 -> 1.5 # drivers/net/appletalk/ltpc.c 1.8 -> 1.9 # net/ipv4/ip_sockglue.c 1.12 -> 1.13 # net/ipv6/icmp.c 1.20 -> 1.22 # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 1.7 -> 1.8 # drivers/block/paride/pseudo.h 1.7 -> 1.8 # include/linux/fb.h 1.46 -> 1.51 # include/asm-ia64/pgtable.h 1.17 -> 1.18 # arch/v850/kernel/nb85e_intc.c 1.2 -> 1.3 # include/asm-s390x/user.h 1.1 -> (deleted) # net/ipv4/netfilter/ip_nat_tftp.c 1.1 -> 1.2 # drivers/char/upd4990a.c 1.1 -> 1.2 # mm/bootmem.c 1.14 -> 1.15 # drivers/media/dvb/Kconfig 1.1 -> 1.2 # arch/arm/kernel/entry-armv.S 1.28 -> 1.29 # net/ipv6/reassembly.c 1.10 -> 1.11 # arch/i386/kernel/mpparse.c 1.37 -> 1.38 # arch/s390x/mm/extable.c 1.6 -> (deleted) # include/asm-i386/mach-default/smpboot_hooks.h 1.2 -> 1.3 # drivers/media/dvb/dvb-core/dvbdev.h 1.2 -> 1.3 # net/bridge/br_forward.c 1.6 -> 1.7 # drivers/char/pty.c 1.10 -> 1.11 # drivers/scsi/hosts.h 1.57 -> 1.58 # arch/s390x/vmlinux.lds.S 1.10 -> (deleted) # arch/v850/kernel/rte_cb_multi.c 1.4 -> 1.5 # drivers/char/agp/Makefile 1.17 -> 1.19 # include/sound/cs46xx.h 1.11 -> 1.12 # include/asm-v850/nb85e_timer_d.h 1.1 -> 1.2 # arch/arm/lib/ecard.S 1.2 -> 1.3 # net/ipv4/netfilter/ip_conntrack_tftp.c 1.1 -> 1.2 # drivers/video/i810/i810_main.c 1.5 -> 1.8 # arch/s390x/mm/init.c 1.13 -> (deleted) # include/asm-s390x/ioctls.h 1.2 -> (deleted) # kernel/extable.c 1.6 -> 1.7 # drivers/ieee1394/ieee1394_transactions.c 1.10 -> 1.11 # include/linux/namei.h 1.4 -> 1.5 # include/asm-ia64/module.h 1.9 -> 1.11 # arch/arm/mach-iop310/iq80310-pci.c 1.4 -> 1.6 arch/arm/mach-iop3xx/iq80310-pci.c (moved) # arch/i386/kernel/io_apic.c 1.60 -> 1.62 # drivers/usb/core/hcd.h 1.25 -> 1.27 # drivers/ieee1394/highlevel.h 1.5 -> 1.6 # include/asm-sparc/cacheflush.h 1.2 -> 1.3 # arch/arm/kernel/debug.S 1.9 -> 1.11 # arch/sparc64/defconfig 1.79 -> 1.80 # arch/parisc/kernel/sys_parisc32.c 1.11 -> 1.14 # sound/pci/rme9652/hdsp.c 1.15 -> 1.16 # sound/core/pcm_native.c 1.29 -> 1.30 # sound/pci/ice1712/ice1712.c 1.9 -> 1.10 # drivers/net/sunhme.c 1.30 -> 1.31 # include/asm-sparc/pgtsrmmu.h 1.4 -> 1.6 # mm/filemap.c 1.188 -> 1.190 # drivers/char/drm/i810_dma.c 1.21 -> 1.22 # drivers/scsi/aic7xxx/Kconfig.aic7xxx 1.9 -> 1.10 # arch/i386/kernel/edd.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/demux.h 1.1 -> 1.2 # sound/oss/waveartist.c 1.5 -> 1.6 # fs/namei.c 1.69 -> 1.71 # net/bridge/netfilter/ebtables.c 1.6 -> 1.7 # arch/s390/kernel/traps.c 1.15 -> 1.17 # sound/oss/dmasound/dmasound_awacs.c 1.10 -> 1.11 # arch/s390x/mm/fault.c 1.14 -> (deleted) # include/asm-v850/cacheflush.h 1.1 -> 1.2 # net/ipv4/netfilter/ip_conntrack_proto_generic.c 1.4 -> 1.5 # fs/xfs/xfs_mount.c 1.23 -> 1.24 # arch/arm/kernel/armksyms.c 1.21 -> 1.22 # arch/arm/vmlinux-armv.lds.in 1.22 -> 1.23 # drivers/char/agp/generic.c 1.19 -> 1.25 # arch/s390/math-emu/math.c 1.5 -> 1.6 # net/socket.c 1.48 -> 1.49 # drivers/ieee1394/pcilynx.c 1.26 -> 1.28 # include/asm-ia64/processor.h 1.32 -> 1.34 # include/asm-s390x/dma.h 1.2 -> (deleted) # sound/oss/sb_ess.c 1.5 -> 1.6 # Documentation/cachetlb.txt 1.7 -> 1.8 # arch/sparc/kernel/sys_sparc.c 1.9 -> 1.11 # arch/s390/vmlinux.lds.S 1.10 -> 1.12 # arch/s390x/kernel/init_task.c 1.7 -> (deleted) # sound/pci/rme96.c 1.15 -> 1.16 # sound/oss/pas2_mixer.c 1.3 -> 1.4 # include/linux/nfs_fs.h 1.43 -> 1.45 # drivers/input/keyboard/98kbd.c 1.1 -> 1.2 # drivers/net/macmace.c 1.8 -> 1.10 # net/ipv4/netfilter/iptable_filter.c 1.6 -> 1.7 # drivers/scsi/aic7xxx/aic7xxx_osm.h 1.28.1.1 -> 1.34 # drivers/media/video/Makefile 1.17 -> 1.18 # include/asm-mips/page.h 1.3 -> 1.4 # sound/pci/rme9652/multiface_firmware.dat 1.2 -> (deleted) # include/asm-arm/arch-iop310/irqs.h 1.2 -> 1.5 include/asm-arm/arch-iop3xx/irqs.h (moved) # include/asm-s390x/unaligned.h 1.1 -> (deleted) # net/xfrm/xfrm_algo.c 1.8 -> 1.9 # drivers/s390/net/ctcmain.c 1.18 -> 1.19 # sound/isa/cs423x/pc98.c 1.1 -> 1.2 # sound/pci/ac97/ac97_codec.c 1.33 -> 1.35 # drivers/net/e1000/e1000_main.c 1.61 -> 1.62 # arch/arm/Makefile 1.36 -> 1.38 # arch/ia64/sn/io/sn2/l1_command.c 1.1 -> 1.2 # drivers/base/base.h 1.23 -> 1.24 # arch/i386/kernel/dmi_scan.c 1.31 -> 1.32 # fs/nfsd/Makefile 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvb_demux.h 1.2 -> 1.3 # include/linux/netfilter_ipv4/ip_conntrack_irc.h 1.3 -> 1.4 # drivers/mtd/mtdblock.c 1.40 -> 1.41 # fs/exec.c 1.74 -> 1.80 # fs/xfs/linux/xfs_globals.h 1.4 -> 1.5 # include/sound/driver.h 1.5 -> 1.6 # fs/ext2/balloc.c 1.28 -> 1.29 # include/asm-ia64/machvec_sn2.h 1.4 -> 1.7 # include/sound/ymfpci.h 1.4 -> 1.5 # drivers/usb/storage/transport.c 1.66 -> 1.68 # drivers/video/platinumfb.c 1.18 -> 1.19 # net/ipv4/netfilter/ip_fw_compat.c 1.13 -> 1.14 # arch/ia64/sn/fakeprom/fpmem.c 1.6 -> 1.7 # arch/s390x/kernel/setup.c 1.17 -> (deleted) # mm/msync.c 1.11 -> 1.12 # fs/nfsd/vfs.c 1.59 -> 1.60 # fs/eventpoll.c 1.17 -> 1.18 # Documentation/devices.txt 1.9 -> 1.10 # arch/s390x/kernel/Makefile 1.16 -> (deleted) # net/ipv6/netfilter/ip6table_mangle.c 1.6 -> 1.7 # drivers/media/dvb/av7110/av7110_firm.h 1.1 -> (deleted) # arch/s390/kernel/sys_s390.c 1.4 -> 1.5 # include/asm-s390x/xor.h 1.1 -> (deleted) # mm/fadvise.c 1.3 -> 1.4 # net/ipv6/raw.c 1.20 -> 1.22 # arch/s390/Kconfig 1.8 -> 1.9 # drivers/ieee1394/hosts.c 1.15 -> 1.16 # arch/arm/mach-iop310/iop310-pci.c 1.9 -> 1.11 arch/arm/mach-iop3xx/iop310-pci.c (moved) # kernel/signal.c 1.79 -> 1.80 # drivers/usb/storage/transport.h 1.20 -> 1.21 # drivers/s390/block/dasd_eckd.h 1.7 -> 1.8 # sound/isa/dt019x.c 1.12 -> 1.13 # include/linux/net.h 1.11 -> 1.12 # sound/oss/awe_wave.c 1.11 -> 1.12 # include/asm-s390x/mmu.h 1.1 -> (deleted) # net/netsyms.c 1.61 -> 1.63 # net/ipv6/xfrm6_state.c 1.1 -> 1.2 # drivers/char/sx.c 1.21 -> 1.24 # include/asm-s390x/types.h 1.4 -> (deleted) # include/asm-s390x/kmap_types.h 1.2 -> (deleted) # include/asm-x86_64/bitops.h 1.8 -> 1.9 # drivers/s390/block/dasd_diag.h 1.4 -> 1.5 # net/sched/sch_prio.c 1.6 -> 1.7 # fs/xfs/support/ktrace.c 1.1 -> 1.2 # include/linux/pci_ids.h 1.87.1.1 -> 1.91 # drivers/media/video/saa7111.c 1.9 -> 1.10 # sound/core/pcm_lib.c 1.18 -> 1.19 # drivers/usb/serial/usb-serial.c 1.74 -> 1.75 # include/asm-sparc64/uaccess.h 1.6 -> 1.7 # sound/pci/ymfpci/ymfpci.c 1.10 -> 1.11 # include/asm-s390x/msgbuf.h 1.1 -> (deleted) # arch/m68knommu/vmlinux.lds.S 1.6 -> 1.7 # include/asm-ia64/system.h 1.32 -> 1.34 # include/asm-alpha/unistd.h 1.17 -> 1.18 # arch/arm/kernel/semaphore.c 1.6 -> 1.7 # include/net/protocol.h 1.8 -> 1.9 # arch/arm/kernel/traps.c 1.25 -> 1.26 # sound/usb/usbquirks.h 1.12 -> 1.13 # sound/isa/es18xx.c 1.14 -> 1.16 # include/asm-s390x/pgtable.h 1.17 -> (deleted) # include/asm-parisc/rtc.h 1.1 -> 1.2 # kernel/itimer.c 1.3 -> 1.4 # mm/shmem.c 1.116 -> 1.117 # arch/alpha/kernel/Makefile 1.26 -> 1.27 # drivers/char/agp/agp.h 1.44 -> 1.49 # arch/ia64/mm/init.c 1.32 -> 1.33 # drivers/scsi/aic7xxx/Kconfig.aic79xx 1.7 -> 1.8 # include/asm-s390/ebcdic.h 1.6 -> 1.7 # arch/sparc64/kernel/process.c 1.40 -> 1.41 # arch/x86_64/ia32/sys_ia32.c 1.27 -> 1.29 # arch/sparc64/kernel/systbls.S 1.34 -> 1.36 # arch/arm/kernel/entry-header.S 1.7 -> 1.8 # include/asm-s390x/sigp.h 1.4 -> (deleted) # include/asm-i386/mach-summit/mach_mpparse.h 1.4 -> 1.5 # arch/s390x/kernel/ptrace32.h 1.1 -> (deleted) # mm/swap_state.c 1.58 -> 1.59 # drivers/media/radio/radio-cadet.c 1.12 -> 1.13 # sound/oss/nm256_audio.c 1.9 -> 1.11 # drivers/net/wan/pc300_tty.c 1.7 -> 1.8 # include/asm-generic/rtc.h 1.3 -> 1.4 # include/asm-v850/rte_cb.h 1.1 -> 1.2 # arch/x86_64/ia32/ia32entry.S 1.16 -> 1.18 # net/ipv4/netfilter/ip_conntrack_standalone.c 1.16 -> 1.18 # fs/super.c 1.99 -> 1.100 # sound/pci/rme9652/rme9652.c 1.16 -> 1.17 # arch/ia64/pci/pci.c 1.25 -> 1.26 # sound/oss/sonicvibes.c 1.16 -> 1.18 # drivers/net/tun.c 1.14 -> 1.15 # include/linux/hdreg.h 1.24 -> 1.25 # fs/binfmt_elf.c 1.42 -> 1.43 # mm/memory.c 1.117 -> 1.120 # arch/i386/kernel/signal.c 1.28 -> 1.29 # include/asm-s390/mmu_context.h 1.3 -> 1.4 # include/asm-arm/proc-armv/cache.h 1.12 -> 1.13 # drivers/s390/block/dasd.c 1.53 -> 1.55 # arch/v850/Kconfig 1.8 -> 1.9 # drivers/scsi/aic7xxx/aic7xxx_core.c 1.21.1.2 -> 1.27 # arch/s390x/kernel/signal32.c 1.15 -> (deleted) # arch/ia64/kernel/ia64_ksyms.c 1.19 -> 1.21 # include/asm-s390/ipcbuf.h 1.1 -> 1.2 # drivers/s390/char/sclp_rw.c 1.4 -> 1.5 # arch/s390/kernel/cpcmd.c 1.3 -> 1.4 # drivers/usb/core/hub.c 1.61 -> 1.62 # include/linux/compat.h 1.10 -> 1.11 # sound/oss/emu10k1/passthrough.c 1.6 -> 1.7 # net/core/netfilter.c 1.12 -> 1.13 # drivers/net/acenic.c 1.27 -> 1.28 # drivers/s390/cio/device_status.c 1.2 -> 1.3 # drivers/video/modedb.c 1.9 -> 1.10 # drivers/net/8139cp.c 1.34 -> 1.35 # drivers/block/genhd.c 1.78 -> 1.79 # drivers/net/e100/e100_main.c 1.59 -> 1.60 # arch/ia64/kernel/mca.c 1.18 -> 1.22 # include/asm-s390/rwsem.h 1.4 -> 1.5 # drivers/scsi/aic7xxx/aic79xx_pci.c 1.5 -> 1.9 # drivers/scsi/aic7xxx/aic79xx_inline.h 1.5 -> 1.7 # include/asm-arm/arch-iop310/iop310.h 1.1 -> 1.3 include/asm-arm/arch-iop3xx/iop310.h (moved) # fs/readdir.c 1.19 -> 1.20 # include/linux/tcp.h 1.9 -> 1.10 # arch/i386/kernel/setup.c 1.72 -> 1.74 # include/asm-s390/processor.h 1.11 -> 1.13 # arch/ia64/kernel/process.c 1.26 -> 1.30 # drivers/i2c/scx200_i2c.c 1.2 -> 1.3 # include/linux/dvb/frontend.h 1.1 -> 1.2 # arch/i386/kernel/smpboot.c 1.55 -> 1.57 # drivers/video/aty/aty128fb.c 1.35 -> 1.36 # include/linux/nfs4.h 1.4 -> 1.7 # include/asm-s390/lowcore.h 1.10 -> 1.11 # sound/oss/sys_timer.c 1.4 -> 1.5 # arch/s390x/kernel/semaphore.c 1.3 -> (deleted) # include/sound/cs46xx_dsp_scb_types.h 1.2 -> 1.3 # arch/x86_64/kernel/suspend.c 1.4 -> 1.5 # fs/nfs/dir.c 1.52 -> 1.54 # arch/ia64/kernel/acpi.c 1.34 -> 1.36 # drivers/video/imsttfb.c 1.24 -> 1.26 # drivers/char/agp/intel-agp.c 1.24 -> 1.26 # include/asm-s390x/qdio.h 1.4 -> (deleted) # drivers/s390/net/fsm.c 1.5 -> 1.6 # include/asm-s390x/smp.h 1.5 -> (deleted) # include/asm-ia64/smp.h 1.8 -> 1.9 # arch/s390x/mm/ioremap.c 1.5 -> (deleted) # include/asm-s390x/byteorder.h 1.3 -> (deleted) # include/asm-s390x/sigcontext.h 1.2 -> (deleted) # sound/isa/sb/es968.c 1.11 -> 1.12 # arch/i386/kernel/time.c 1.29 -> 1.30 # include/asm-v850/nb85e_cache.h 1.1 -> 1.3 # include/asm-arm/arch-iop310/ide.h 1.1 -> 1.3 include/asm-arm/arch-iop3xx/ide.h (moved) # include/asm-s390x/compat.h 1.10 -> (deleted) # drivers/net/wan/sdla_chdlc.c 1.20 -> 1.21 # drivers/scsi/scsi_syms.c 1.29 -> 1.30 # sound/core/seq/instr/ainstr_iw.c 1.3 -> 1.4 # sound/oss/soundcard.c 1.14 -> 1.15 # include/asm-ppc/bitops.h 1.12 -> 1.13 # include/linux/if_bridge.h 1.2 -> 1.3 # drivers/scsi/scsi_lib.c 1.78 -> 1.82 # drivers/usb/storage/scsiglue.c 1.40 -> 1.42 # sound/core/ioctl32/rawmidi32.c 1.9 -> 1.11 # include/asm-arm/mach/pci.h 1.8 -> 1.9 # include/asm-alpha/bitops.h 1.9 -> 1.10 # sound/i2c/l3/uda1341.c 1.7 -> 1.8 # include/asm-alpha/core_t2.h 1.4 -> 1.5 # include/asm-s390x/cacheflush.h 1.1 -> (deleted) # include/asm-s390x/sembuf.h 1.1 -> (deleted) # drivers/net/appletalk/cops.c 1.14 -> 1.15 # include/asm-s390/smp.h 1.7 -> 1.8 # fs/xfs/xfs_bmap_btree.h 1.5 -> 1.6 # drivers/video/tridentfb.c 1.6 -> 1.7 # include/asm-s390x/cio.h 1.3 -> (deleted) # arch/s390x/boot/iplfba.S 1.1 -> (deleted) # net/xfrm/xfrm_policy.c 1.23 -> 1.24 # net/core/dev.c 1.60 -> 1.62 # arch/s390x/boot/Makefile 1.13 -> (deleted) # drivers/s390/char/sclp_con.c 1.4 -> 1.5 # kernel/compat.c 1.9 -> 1.11 # include/asm-alpha/mmu_context.h 1.7 -> 1.8 # include/sound/control.h 1.2 -> 1.3 # include/linux/igmp.h 1.4 -> 1.5 # drivers/scsi/scsi.c 1.100 -> 1.102 # drivers/usb/core/usb.c 1.117 -> 1.121 # fs/ext2/ialloc.c 1.31 -> 1.34 # arch/s390x/Makefile 1.24 -> (deleted) # include/asm-s390/types.h 1.5 -> 1.6 # drivers/media/dvb/frontends/ves1820.c 1.3 -> 1.4 # include/asm-s390/sigp.h 1.5 -> 1.6 # kernel/posix-timers.c 1.10 -> 1.13 # drivers/s390/cio/device_fsm.c 1.3 -> 1.4 # arch/alpha/kernel/time.c 1.15 -> 1.16 # arch/alpha/kernel/semaphore.c 1.4 -> 1.5 # include/asm-arm/arch-iop310/uncompress.h 1.2 -> 1.4 include/asm-arm/arch-iop3xx/uncompress.h (moved) # drivers/video/softcursor.c 1.34 -> 1.44 # arch/sparc/kernel/traps.c 1.4 -> 1.5 # arch/s390x/Kconfig 1.9 -> (deleted) # arch/s390x/kernel/smp.c 1.20 -> (deleted) # drivers/usb/host/ohci-sa1111.c 1.13 -> 1.14 # drivers/s390/block/dasd_devmap.c 1.4 -> 1.6 # sound/ppc/awacs.c 1.9 -> 1.10 # arch/arm/lib/copy_page.S 1.2 -> 1.3 # include/asm-s390x/tlb.h 1.4 -> (deleted) # include/asm-arm/arch-iop310/param.h 1.2 -> 1.3 include/asm-arm/arch-iop3xx/param.h (moved) # include/asm-i386/cacheflush.h 1.2 -> 1.3 # include/asm-s390x/ipc.h 1.1 -> (deleted) # arch/alpha/vmlinux.lds.S 1.20 -> 1.21 # sound/pci/emu10k1/emufx.c 1.17 -> 1.18 # Documentation/sysctl/kernel.txt 1.6 -> 1.7 # drivers/s390/char/sclp_cpi.c 1.2 -> 1.3 # sound/pci/rme9652/digiface_firmware.dat 1.2 -> (deleted) # include/asm-arm/arch-iop310/time.h 1.1 -> 1.2 include/asm-arm/arch-iop3xx/time.h (moved) # fs/xfs/linux/xfs_file.c 1.11 -> 1.12 # include/asm-s390x/elf.h 1.5 -> (deleted) # include/linux/binfmts.h 1.7 -> 1.8 # include/asm-s390/sembuf.h 1.1 -> 1.2 # drivers/scsi/aic7xxx/aic7xxx_reg_print.c_shipped 1.4 -> 1.5 # drivers/scsi/aic7xxx/aiclib.c 1.3 -> 1.4 # sound/oss/aci.c 1.7 -> 1.8 # include/linux/interrupt.h 1.20 -> 1.21 # include/sound/ac97_codec.h 1.17 -> 1.18 # sound/oss/cmpci.c 1.17 -> 1.18 # arch/arm/Kconfig 1.13 -> 1.15 # drivers/scsi/aic7xxx/aic7xxx.h 1.8.1.1 -> 1.12 # arch/arm/mm/extable.c 1.4 -> 1.5 # kernel/uid16.c 1.4 -> 1.5 # drivers/md/raid1.c 1.60 -> 1.61 # drivers/video/cfbimgblt.c 1.25 -> 1.26 # sound/isa/gus/interwave.c 1.11 -> 1.12 # drivers/usb/net/usbnet.c 1.47 -> 1.48 # include/asm-ia64/intrinsics.h 1.4 -> 1.5 # include/asm-ia64/machvec.h 1.10 -> 1.13 # drivers/base/firmware.c 1.5 -> 1.6 # arch/arm/kernel/setup.c 1.28 -> 1.29 # include/asm-arm/arch-iop310/timex.h 1.2 -> 1.6 include/asm-arm/arch-iop3xx/timex.h (moved) # arch/i386/kernel/nmi.c 1.17 -> 1.18 # sound/oss/opl3.c 1.3 -> 1.4 # drivers/input/input.c 1.26 -> 1.27 # drivers/pnp/isapnp/core.c 1.33 -> 1.34 # drivers/s390/cio/device_pgid.c 1.2 -> 1.4 # drivers/video/i810/i810_gtf.c 1.1 -> 1.2 # include/asm-s390x/debug.h 1.8 -> (deleted) # include/asm-ia64/fcntl.h 1.1 -> 1.2 # drivers/i2c/chips/Kconfig 1.8 -> 1.9 # drivers/s390/cio/chsc.c 1.9 -> 1.10 # include/linux/sysctl.h 1.40 -> 1.42 # include/asm-s390x/page.h 1.7 -> (deleted) # include/asm-s390/msgbuf.h 1.1 -> 1.2 # sound/core/ioctl32/timer32.c 1.9 -> 1.11 # drivers/net/tg3.c 1.64 -> 1.65 # arch/ia64/ia32/ia32_entry.S 1.20 -> 1.22 # arch/sparc64/kernel/sys_sparc.c 1.17 -> 1.19 # drivers/ieee1394/nodemgr.h 1.9 -> 1.10 # arch/s390x/mm/Makefile 1.4 -> (deleted) # drivers/s390/net/ctctty.c 1.7 -> 1.8 # arch/i386/boot/setup.S 1.20 -> 1.21 # drivers/scsi/aic7xxx/aic79xx_osm.c 1.22.1.1 -> 1.29 # include/asm-v850/bitops.h 1.1 -> 1.2 # include/asm-s390x/rmap.h 1.1 -> (deleted) # arch/s390x/lib/strcmp.S 1.1 -> (deleted) # drivers/char/ipmi/ipmi_msghandler.c 1.3 -> 1.4 # net/ipv6/af_inet6.c 1.26 -> 1.29 # net/ipv6/tcp_ipv6.c 1.45 -> 1.47 # sound/pci/ice1712/ak4524.c 1.8 -> 1.9 # sound/oss/wavfront.c 1.13 -> 1.14 # drivers/usb/serial/kl5kusb105.c 1.20 -> 1.21 # include/asm-sparc/pgtable.h 1.13 -> 1.15 # drivers/s390/net/netiucv.c 1.18 -> 1.19 # fs/ext3/xattr.c 1.13 -> 1.14 # arch/sparc64/solaris/ioctl.c 1.6 -> 1.7 # arch/arm/mach-iop310/arch.c 1.5 -> 1.8 arch/arm/mach-iop3xx/arch.c (moved) # arch/s390x/boot/ipldump.S 1.1 -> (deleted) # net/sched/sch_csz.c 1.6 -> 1.7 # drivers/ide/pci/hpt366.c 1.16 -> 1.17 # fs/xfs/xfs_ialloc.c 1.4 -> 1.5 # arch/sparc64/kernel/signal.c 1.27 -> 1.28 # drivers/net/tokenring/tms380tr.c 1.10 -> 1.11 # fs/buffer.c 1.192 -> 1.194 # arch/ia64/kernel/signal.c 1.21 -> 1.22 # drivers/char/agp/Kconfig 1.11 -> 1.15 # arch/sparc/mm/srmmu.c 1.28 -> 1.31 # drivers/s390/block/dasd_ioctl.c 1.13 -> 1.15 # arch/i386/kernel/cpu/mcheck/k7.c 1.2 -> 1.3 # include/asm-s390x/ipcbuf.h 1.1 -> (deleted) # drivers/video/logo/logo.c 1.1.1.1 -> 1.4 # fs/nfsd/export.c 1.78 -> 1.79 # net/ipv4/esp.c 1.24 -> 1.26 # drivers/ide/ide-probe.c 1.36 -> 1.38 # drivers/usb/core/hcd.c 1.55 -> 1.59 # drivers/usb/input/hid-core.c 1.52 -> 1.53 # include/sound/trident.h 1.6 -> 1.7 # arch/ia64/boot/Makefile 1.11 -> 1.12 # drivers/media/dvb/Makefile 1.2 -> 1.3 # sound/oss/cs4232.c 1.10 -> 1.11 # drivers/char/epca.c 1.18 -> 1.19 # arch/alpha/kernel/core_cia.c 1.13 -> 1.14 # arch/arm/mm/fault-common.c 1.15 -> 1.16 # net/ipv6/netfilter/Makefile 1.11 -> 1.12 # fs/afs/kafstimod.c 1.4 -> 1.5 # sound/oss/sound_timer.c 1.3 -> 1.4 # drivers/char/tty_io.c 1.72 -> 1.77 # drivers/net/tulip/tulip_core.c 1.40 -> 1.41 # include/sound/cs46xx_dsp_spos.h 1.9 -> 1.10 # include/asm-sparc/signal.h 1.4 -> 1.5 # drivers/char/agp/i460-agp.c 1.14 -> 1.16 # arch/i386/boot/compressed/misc.c 1.10 -> 1.11 # sound/pci/maestro3.c 1.17 -> 1.18 # net/ipv6/ndisc.c 1.26 -> 1.29 # drivers/usb/core/urb.c 1.15 -> 1.16 # include/asm-s390x/pci.h 1.2 -> (deleted) # net/sctp/ipv6.c 1.29 -> 1.31 # MAINTAINERS 1.132 -> 1.133 # drivers/usb/net/rtl8150.c 1.21 -> 1.22 # sound/pci/intel8x0.c 1.30 -> 1.31 # include/asm-v850/page.h 1.2 -> 1.3 # drivers/scsi/st_options.h 1.4 -> 1.5 # drivers/s390/cio/qdio.c 1.4 -> 1.5 # drivers/acpi/bus.c 1.30 -> 1.32 # arch/arm/mach-iop310/xs80200-irq.c 1.6 -> 1.8 arch/arm/mach-iop3xx/xs80200-irq.c (moved) # drivers/s390/block/dasd_3370_erp.c 1.4 -> 1.5 # include/asm-s390x/suspend.h 1.1 -> (deleted) # arch/s390x/kernel/bitmap.S 1.2 -> (deleted) # arch/s390x/lib/delay.c 1.2 -> (deleted) # drivers/char/rio/rio_linux.c 1.16 -> 1.17 # net/irda/irlap_event.c 1.18 -> 1.19 # arch/ia64/ia32/sys_ia32.c 1.46 -> 1.49 # sound/core/ioctl32/pcm32.c 1.11 -> 1.13 # net/core/datagram.c 1.8 -> 1.9 # drivers/ieee1394/nodemgr.c 1.21 -> 1.24 # include/asm-s390/pgalloc.h 1.9 -> 1.10 # include/asm-s390/sigcontext.h 1.3 -> 1.4 # sound/oss/ad1848.c 1.18 -> 1.19 # drivers/scsi/aic7xxx/aic79xx_osm.h 1.16.1.1 -> 1.22 # include/asm-s390x/signal.h 1.7 -> (deleted) # drivers/scsi/aic7xxx/aic7xxx_reg.h_shipped 1.10 -> 1.11 # include/asm-s390x/setup.h 1.7 -> (deleted) # sound/oss/msnd_pinnacle.c 1.9 -> 1.10 # fs/proc/base.c 1.41 -> 1.42 # arch/s390/kernel/s390_ksyms.c 1.10 -> 1.11 # arch/mips64/kernel/linux32.c 1.12 -> 1.13 # drivers/video/i810/i810_main.h 1.4 -> 1.5 # sound/oss/ymfpci.c 1.30 -> 1.31 # include/asm-sparc64/compat.h 1.12 -> 1.13 # fs/xfs/linux/xfs_globals.c 1.10 -> 1.11 # fs/ext2/xattr.c 1.11 -> 1.12 # sound/drivers/opl3/opl3_seq.c 1.10 -> 1.11 # arch/s390x/kernel/signal.c 1.19 -> (deleted) # sound/oss/uart6850.c 1.6 -> 1.7 # drivers/s390/char/sclp.c 1.5 -> 1.7 # include/linux/time.h 1.10 -> 1.11 # net/sched/sch_htb.c 1.7 -> 1.8 # fs/read_write.c 1.28 -> 1.30 # arch/i386/kernel/cpu/mcheck/p4.c 1.2 -> 1.3 # fs/coda/psdev.c 1.15 -> 1.16 # arch/arm/lib/csumpartialcopyuser.S 1.3 -> 1.4 # net/ipv6/esp6.c 1.10 -> 1.13 # drivers/char/drm/drm_dma.h 1.11 -> 1.12 # arch/sparc64/kernel/sys_sparc32.c 1.68 -> 1.72 # arch/v850/vmlinux.lds.S 1.7 -> 1.8 # drivers/net/typhoon.c 1.1 -> 1.2 # include/asm-arm/uaccess.h 1.9 -> 1.10 # arch/arm/lib/uaccess-armo.S 1.3 -> (deleted) # sound/pci/trident/trident_main.c 1.15 -> 1.16 # include/linux/compiler.h 1.13 -> 1.15 # include/asm-s390x/tape390.h 1.1 -> (deleted) # drivers/block/z2ram.c 1.23 -> 1.24 # drivers/scsi/st.c 1.55 -> 1.58 # include/asm-i386/bitops.h 1.15 -> 1.16 # sound/isa/sb/sb8.c 1.8 -> 1.9 # sound/core/oss/mixer_oss.c 1.15 -> 1.16 # arch/ia64/sn/kernel/sn2/iomv.c 1.2 -> 1.3 # sound/ppc/pmac.h 1.3 -> 1.4 # include/asm-m68k/cacheflush.h 1.2 -> 1.3 # include/asm-arm/arch-iop310/pmon.h 1.1 -> 1.2 include/asm-arm/arch-iop3xx/pmon.h (moved) # include/asm-s390/div64.h 1.3 -> 1.4 # fs/namespace.c 1.37 -> 1.38 # include/asm-s390x/idals.h 1.6 -> (deleted) # drivers/char/agp/ali-agp.c 1.14 -> 1.15 # include/asm-i386/setup.h 1.4 -> 1.5 # fs/ext2/super.c 1.47 -> 1.49 # include/sound/asound.h 1.14 -> 1.15 # drivers/usb/host/ehci-hcd.c 1.46 -> 1.47 # fs/nfs/file.c 1.26 -> 1.27 # arch/arm/lib/Makefile 1.15 -> 1.16 # drivers/s390/block/dasd_fba.c 1.11 -> 1.13 # drivers/scsi/aic7xxx/aic7770_osm.c 1.2 -> 1.3 # include/asm-arm/arch-iop310/vmalloc.h 1.2 -> 1.4 include/asm-arm/arch-iop3xx/vmalloc.h (moved) # Makefile 1.401 -> 1.403 # fs/fcntl.c 1.24 -> 1.25 # net/ipv4/netfilter/ip_conntrack_amanda.c 1.1 -> 1.2 # sound/pci/cmipci.c 1.19 -> 1.20 # include/asm-s390x/dma-mapping.h 1.1 -> (deleted) # include/linux/inetdevice.h 1.5 -> 1.6 # include/linux/uio.h 1.3 -> 1.5 # include/asm-ia64/machvec_sn1.h 1.6 -> 1.8 # arch/ia64/kernel/head.S 1.8 -> 1.9 # drivers/media/dvb/av7110/saa7146_defs.h 1.1 -> (deleted) # include/asm-s390/io.h 1.5 -> 1.6 # drivers/scsi/sym53c8xx.c 1.31 -> 1.32 # drivers/scsi/aic7xxx/aic79xx.h 1.4.1.2 -> 1.10 # drivers/char/agp/amd-k8-agp.c 1.24 -> 1.30 # include/asm-s390/gdb-stub.h 1.3 -> (deleted) # arch/i386/kernel/timers/timer_tsc.c 1.16 -> 1.17 # drivers/block/paride/pf.c 1.38 -> 1.39 # include/asm-s390/thread_info.h 1.3 -> 1.4 # include/asm-s390x/statfs.h 1.1 -> (deleted) # net/sunrpc/xprt.c 1.52 -> 1.53 # sound/core/sound.c 1.23 -> 1.24 # mm/page-writeback.c 1.59 -> 1.61 # fs/dquot.c 1.58 -> 1.59 # include/asm-s390x/a.out.h 1.1 -> (deleted) # net/ipv6/ah6.c 1.10 -> 1.13 # drivers/acpi/processor.c 1.37 -> 1.38 # sound/core/sgbuf.c 1.1 -> 1.3 # net/ipv4/tcp_output.c 1.25 -> 1.26 # include/asm-i386/elf.h 1.6 -> 1.7 # drivers/usb/serial/keyspan.h 1.16 -> 1.17 # include/net/ip.h 1.15 -> 1.16 # drivers/net/arcnet/arcnet.c 1.8 -> 1.9 # include/linux/scc.h 1.2 -> 1.3 # sound/pci/es1938.c 1.15 -> 1.16 # include/asm-alpha/cacheflush.h 1.1 -> 1.2 # arch/mips/kernel/irixioctl.c 1.1 -> 1.2 # drivers/s390/char/con3215.c 1.14 -> 1.15 # drivers/video/console/fbcon.c 1.91 -> 1.99 # sound/oss/pas2_midi.c 1.4 -> 1.5 # include/linux/dvb/osd.h 1.2 -> 1.3 # include/asm-s390x/ioctl.h 1.1 -> (deleted) # sound/core/Makefile 1.25 -> 1.26 # drivers/video/aty/atyfb_base.c 1.53 -> 1.54 # drivers/char/agp/backend.c 1.71 -> 1.72 # include/linux/page-flags.h 1.37 -> 1.39 # include/asm-s390x/unistd.h 1.15 -> (deleted) # arch/ppc64/kernel/sys_ppc32.c 1.53 -> 1.57 # include/asm-s390x/tlbflush.h 1.4 -> (deleted) # include/asm-sparc/system.h 1.16 -> 1.17 # arch/sparc/kernel/signal.c 1.20 -> 1.21 # CREDITS 1.80 -> 1.81 # drivers/net/e1000/e1000_param.c 1.20 -> 1.21 # sound/oss/emu10k1/mixer.c 1.6 -> 1.7 # drivers/video/tgafb.c 1.22 -> 1.23 # drivers/video/riva/fbdev.c 1.40 -> 1.44 # drivers/net/wireless/strip.c 1.9 -> 1.10 # include/asm-s390/ptrace.h 1.7 -> 1.8 # fs/seq_file.c 1.8 -> 1.9 # include/asm-s390x/thread_info.h 1.4 -> (deleted) # drivers/s390/cio/requestirq.c 1.5 -> 1.7 # include/asm-s390x/resource.h 1.1 -> (deleted) # include/asm-x86_64/compat.h 1.10 -> 1.11 # drivers/video/console/fbcon.h 1.29 -> 1.30 # arch/s390x/kernel/s390_ext.c 1.4 -> (deleted) # drivers/usb/host/ohci-pci.c 1.11 -> 1.12 # drivers/s390/block/dasd_int.h 1.13 -> 1.15 # drivers/media/dvb/av7110/saa7146_core.h 1.2 -> (deleted) # drivers/media/dvb/dvb-core/compat.h 1.1 -> (deleted) # kernel/module.c 1.76 -> 1.78 # net/xfrm/xfrm_state.c 1.21 -> 1.23 # net/core/skbuff.c 1.23 -> 1.24 # arch/s390x/kernel/linux32.c 1.42 -> (deleted) # arch/s390x/kernel/process.c 1.15 -> (deleted) # arch/s390/mm/init.c 1.14 -> 1.15 # drivers/s390/block/dasd_9336_erp.c 1.4 -> 1.5 # include/net/sock.h 1.34 -> 1.35 # fs/xfs/xfs_inode.h 1.12 -> 1.13 # drivers/ieee1394/dv1394.c 1.23 -> 1.25 # include/asm-s390/signal.h 1.6 -> 1.8 # include/linux/quota.h 1.21 -> 1.22 # include/asm-x86_64/byteorder.h 1.1 -> 1.2 # arch/ia64/lib/swiotlb.c 1.13 -> 1.14 # arch/arm/mach-iop310/iq80310-time.c 1.7 -> 1.9 arch/arm/mach-iop3xx/iq80310-time.c (moved) # drivers/char/drm/drmP.h 1.18 -> 1.19 # include/linux/devfs_fs_kernel.h 1.35 -> 1.36 # drivers/ide/pci/pdc202xx_new.c 1.14 -> 1.15 # arch/s390x/kernel/traps.c 1.13 -> (deleted) # drivers/ieee1394/ieee1394_types.h 1.14 -> 1.15 # include/asm-sparc/pci.h 1.8 -> 1.9 # include/asm-s390x/namei.h 1.1 -> (deleted) # net/ipv6/ip6_input.c 1.9 -> 1.11 # fs/nfs/write.c 1.38 -> 1.39 # net/ipv4/ip_gre.c 1.20 -> 1.22 # sound/oss/nec_vrc5477.c 1.9 -> 1.11 # drivers/s390/cio/device.c 1.4 -> 1.5 # drivers/s390/cio/device_ops.c 1.2 -> 1.3 # drivers/net/hamradio/yam.c 1.13 -> 1.14 # include/net/ip6_fib.h 1.2 -> 1.3 # fs/nfs/nfs4proc.c 1.13 -> 1.20 # net/ipv6/route.c 1.22 -> 1.24 # sound/oss/es1371.c 1.21 -> 1.23 # drivers/media/dvb/av7110/saa7146_core.c 1.6 -> (deleted) # sound/isa/wavefront/wavefront.c 1.10 -> 1.11 # include/asm-s390x/init.h 1.3 -> (deleted) # include/linux/highmem.h 1.24 -> 1.25 # sound/oss/mad16.c 1.10 -> 1.11 # net/ipv4/xfrm4_policy.c 1.1 -> 1.3 # drivers/scsi/sd.c 1.106 -> 1.107 # include/asm-arm/arch-iop310/dma.h 1.2 -> 1.3 include/asm-arm/arch-iop3xx/dma.h (moved) # drivers/media/dvb/dvb-core/dvb_i2c.c 1.3 -> 1.4 # include/asm-ppc/cacheflush.h 1.4 -> 1.5 # include/asm-i386/i387.h 1.10 -> 1.11 # arch/ppc64/vmlinux.lds.S 1.13 -> 1.14 # arch/sparc/mm/sun4c.c 1.26 -> 1.28 # include/asm-v850/system.h 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dmxdev.c 1.2 -> 1.3 # include/linux/workqueue.h 1.4 -> 1.5 # include/asm-i386/math_emu.h 1.2 -> 1.3 # sound/oss/i810_audio.c 1.33 -> 1.34 # sound/oss/trident.c 1.36 -> 1.37 # include/asm-s390x/lowcore.h 1.9 -> (deleted) # arch/ia64/sn/fakeprom/fprom.lds 1.3 -> 1.4 # fs/xfs/linux/xfs_ioctl.c 1.12 -> 1.13 # net/ipv4/Kconfig 1.5 -> 1.6 # arch/arm/kernel/ecard.c 1.22 -> 1.23 # arch/m68k/kernel/Makefile 1.9 -> 1.10 # arch/alpha/Kconfig 1.11 -> 1.12 # drivers/s390/block/dasd_genhd.c 1.22 -> 1.24 # include/asm-x86_64/rwsem.h 1.6 -> 1.7 # drivers/scsi/aic7xxx/aic79xx_proc.c 1.3 -> 1.6 # drivers/s390/cio/airq.c 1.3 -> 1.4 # drivers/media/dvb/av7110/saa7146_v4l.h 1.1 -> (deleted) # arch/s390x/kernel/cpcmd.c 1.3 -> (deleted) # drivers/i2c/i2c-dev.c 1.26 -> 1.27 # net/ipv4/netfilter/ip_conntrack_irc.c 1.7 -> 1.8 # drivers/usb/storage/unusual_devs.h 1.26 -> 1.29 # arch/s390/kernel/process.c 1.16 -> 1.17 # mm/slab.c 1.73 -> 1.75 # net/ipv4/netfilter/arp_tables.c 1.5 -> 1.6 # fs/nfs/inode.c 1.73 -> 1.76 # net/ipv4/netfilter/ip_conntrack_ftp.c 1.9 -> 1.10 # arch/i386/kernel/suspend.c 1.13 -> 1.14 # arch/s390/mm/fault.c 1.13 -> 1.15 # include/asm-alpha/uaccess.h 1.4 -> 1.5 # net/core/wireless.c 1.6 -> 1.7 # arch/s390x/lib/uaccess.S 1.3 -> (deleted) # net/sched/sch_ingress.c 1.7 -> 1.8 # include/asm-ppc64/bitops.h 1.4 -> 1.5 # arch/arm/nwfpe/fpmodule.h 1.1 -> 1.2 # net/ipv4/netfilter/ip_nat_standalone.c 1.20 -> 1.21 # include/net/addrconf.h 1.8 -> 1.9 # arch/s390/kernel/signal.c 1.19 -> 1.21 # drivers/ide/legacy/gayle.c 1.4 -> 1.5 # include/asm-v850/nb85e_intc.h 1.1 -> 1.2 # drivers/scsi/scsi_scan.c 1.66.1.1 -> 1.73 # include/asm-s390/pgtable.h 1.15 -> 1.17 # fs/filesystems.c 1.12 -> 1.13 # sound/pci/fm801.c 1.13 -> 1.14 # drivers/video/i810/i810_dvt.c 1.2 -> 1.3 # drivers/s390/cio/device.h 1.1 -> 1.2 # arch/v850/kernel/simcons.c 1.2 -> 1.3 # kernel/sched.c 1.176 -> 1.178 # include/linux/agp_backend.h 1.26 -> 1.27 # drivers/net/rcpci45.c 1.17 -> 1.18 # net/ipv4/netfilter/ip_fw_compat_masq.c 1.5 -> 1.6 # include/asm-s390x/queue.h 1.3 -> (deleted) # sound/isa/sb/sb16.c 1.14 -> 1.15 # net/ipv6/netfilter/ip6t_owner.c 1.3 -> 1.4 # net/8021q/vlan.c 1.11 -> 1.13 # drivers/char/agp/hp-agp.c 1.14 -> 1.16 # drivers/s390/cio/airq.h 1.2 -> 1.3 # include/asm-v850/rte_nb85e_cb.h 1.1 -> 1.2 # drivers/usb/host/ehci-q.c 1.44 -> 1.45 # net/ipv6/ip6_fib.c 1.9 -> 1.10 # include/linux/jbd.h 1.20 -> 1.21 # drivers/s390/cio/chsc.h 1.5 -> 1.6 # drivers/block/Makefile 1.14 -> 1.15 # arch/ia64/scripts/check-gas 1.1 -> 1.2 # arch/v850/kernel/rte_ma1_cb.c 1.2 -> 1.3 # drivers/ieee1394/iso.c 1.2 -> 1.3 # sound/oss/sb_audio.c 1.6 -> 1.7 # drivers/scsi/st.h 1.11 -> 1.12 # include/asm-s390x/processor.h 1.11 -> (deleted) # sound/pci/ens1370.c 1.26 -> 1.27 # sound/core/rtctimer.c 1.13 -> 1.14 # drivers/media/dvb/frontends/grundig_29504-491.c 1.2 -> 1.3 # include/asm-s390x/poll.h 1.2 -> (deleted) # include/sound/cs46xx_dsp_task_types.h 1.1 -> 1.2 # include/asm-s390x/termios.h 1.4 -> (deleted) # arch/s390x/kernel/s390_ksyms.c 1.9 -> (deleted) # net/ipv6/udp.c 1.23 -> 1.26 # drivers/hotplug/pci_hotplug_core.c 1.36 -> 1.37 # drivers/usb/serial/ipaq.c 1.27 -> 1.28 # arch/s390x/kernel/asm-offsets.c 1.1 -> (deleted) # include/asm-x86_64/system.h 1.13 -> 1.14 # arch/s390x/kernel/time.c 1.11 -> (deleted) # include/linux/nfs_xdr.h 1.26 -> 1.33 # include/net/xfrm.h 1.27 -> 1.31 # fs/nfsd/nfs4xdr.c 1.13 -> 1.14 # kernel/timer.c 1.49 -> 1.51 # sound/pci/via82xx.c 1.28 -> 1.29 # sound/core/memory_wrapper.c 1.1 -> (deleted) # include/net/icmp.h 1.5 -> 1.6 # sound/core/seq/seq_midi.c 1.10 -> 1.11 # sound/pci/cs46xx/dsp_spos.c 1.13 -> 1.14 # drivers/video/fbcmap.c 1.8 -> 1.9 # drivers/char/agp/via-agp.c 1.28 -> 1.33 # arch/arm/kernel/fiq.c 1.8 -> 1.9 # include/asm-s390x/string.h 1.2 -> (deleted) # arch/s390x/kernel/gdb-stub.c 1.1 -> (deleted) # drivers/char/ipmi/ipmi_devintf.c 1.5 -> 1.6 # drivers/block/paride/pg.c 1.14 -> 1.15 # drivers/s390/block/dasd_3990_erp.c 1.12 -> 1.13 # include/asm-s390x/ccwdev.h 1.2 -> (deleted) # drivers/media/dvb/av7110/Makefile 1.3 -> (deleted) # arch/i386/kernel/timers/timer_pit.c 1.10 -> 1.11 # include/linux/mtd/compatmac.h 1.4 -> 1.5 # arch/ia64/vmlinux.lds.S 1.28 -> 1.29 # include/asm-x86_64/mmzone.h 1.1 -> 1.2 # drivers/scsi/aic7xxx/aic79xx.seq 1.4 -> 1.8 # include/asm-i386/mach-default/mach_mpparse.h 1.2 -> 1.3 # include/asm-arm/arch-iop310/memory.h 1.5 -> 1.8 include/asm-arm/arch-iop3xx/memory.h (moved) # scripts/per-cpu-check.awk 1.4 -> (deleted) # drivers/ieee1394/ohci1394.c 1.24 -> 1.26 # arch/s390/defconfig 1.19 -> 1.21 # drivers/ieee1394/highlevel.c 1.9 -> 1.10 # arch/arm/mm/proc-xscale.S 1.16 -> 1.17 # drivers/media/dvb/av7110/av7110.h 1.3 -> (deleted) # drivers/net/hamradio/scc.c 1.20 -> 1.21 # arch/arm/mm/copypage-xscale.S 1.6 -> 1.7 # arch/alpha/lib/strrchr.S 1.2 -> 1.3 # drivers/i2c/busses/Kconfig 1.9 -> 1.10 # arch/sparc64/vmlinux.lds.S 1.17 -> 1.18 # drivers/scsi/aic7xxx/aicasm/Makefile 1.8.1.1 -> 1.11 # include/linux/netlink.h 1.9 -> 1.10 # sound/oss/uart401.c 1.6 -> 1.7 # sound/pci/emu10k1/emumixer.c 1.7 -> 1.8 # sound/isa/Kconfig 1.2 -> 1.3 # sound/core/oss/pcm_oss.c 1.21 -> 1.22 # include/asm-s390/ccwdev.h 1.2 -> 1.3 # net/ipv6/mcast.c 1.14 -> 1.15 # include/asm-mips64/bitops.h 1.3 -> 1.4 # drivers/usb/serial/kobil_sct.c 1.6 -> 1.7 # drivers/video/retz3fb.c 1.18 -> 1.19 # drivers/s390/Kconfig 1.10 -> 1.11 # sound/pci/ymfpci/ymfpci_main.c 1.15 -> 1.16 # include/linux/bootmem.h 1.3 -> 1.4 # arch/arm/lib/memcpy.S 1.3 -> 1.4 # include/asm-s390x/ucontext.h 1.2 -> (deleted) # net/ipv4/netfilter/iptable_mangle.c 1.11 -> 1.12 # arch/ppc64/kernel/misc.S 1.52 -> 1.54 # include/asm-s390x/fcntl.h 1.3 -> (deleted) # include/asm-s390x/percpu.h 1.1 -> (deleted) # net/ipv4/ah.c 1.19 -> 1.21 # sound/oss/maestro.c 1.24 -> 1.25 # include/asm-ia64/acpi.h 1.6 -> 1.7 # arch/s390x/kernel/ieee.h 1.1 -> (deleted) # drivers/video/fbmon.c 1.7 -> 1.8 # include/net/flow.h 1.2 -> 1.3 # arch/i386/kernel/cpu/proc.c 1.10 -> 1.11 # net/ipv6/netfilter/ip6_tables.c 1.16 -> 1.17 # drivers/usb/host/uhci-hcd.c 1.31 -> 1.32 # arch/m68k/vmlinux-std.lds 1.15 -> 1.16 # arch/s390x/kernel/sys_s390.c 1.6 -> (deleted) # arch/s390/kernel/module.c 1.6 -> 1.7 # arch/ia64/sn/fakeprom/Makefile 1.11 -> 1.12 # include/linux/ext2_fs_sb.h 1.5 -> 1.7 # include/linux/dvb/dmx.h 1.1 -> 1.2 # include/asm-sparc/uaccess.h 1.6 -> 1.10 # drivers/s390/net/Kconfig 1.1 -> 1.2 # arch/arm/mach-iop310/iop310-irq.c 1.6 -> 1.8 arch/arm/mach-iop3xx/iop310-irq.c (moved) # include/asm-sparc/bitops.h 1.9 -> 1.10 # include/asm-s390x/checksum.h 1.6 -> (deleted) # arch/sparc64/kernel/ioctl32.c 1.54 -> 1.55 # arch/s390/kernel/ptrace.c 1.14 -> 1.16 # include/asm-s390x/segment.h 1.1 -> (deleted) # fs/ext3/super.c 1.57 -> 1.58 # fs/xfs/linux/xfs_aops.c 1.28 -> 1.30 # arch/arm/kernel/Makefile 1.17 -> 1.18 # sound/oss/ad1816.c 1.9 -> 1.10 # include/asm-arm/arch-iop310/serial.h 1.3 -> 1.6 include/asm-arm/arch-iop3xx/serial.h (moved) # include/asm-ia64/bitops.h 1.10 -> 1.12 # include/asm-s390/setup.h 1.8 -> 1.9 # include/asm-s390x/siginfo.h 1.4 -> (deleted) # sound/drivers/dummy.c 1.14 -> 1.15 # include/asm-s390/elf.h 1.4 -> 1.5 # arch/arm/kernel/process.c 1.25 -> 1.26 # include/asm-alpha/mmzone.h 1.7 -> 1.8 # net/irda/irlmp.c 1.22 -> 1.23 # net/8021q/vlan_dev.c 1.8 -> 1.9 # arch/ia64/sn/io/sn2/pcibr/Makefile 1.1 -> 1.2 # lib/kobject.c 1.17 -> 1.19 # fs/partitions/check.c 1.102 -> 1.103 # drivers/char/drm/drm_os_linux.h 1.8 -> 1.9 # arch/arm/common/sa1111.c 1.23 -> 1.24 # drivers/input/keyboard/amikbd.c 1.11 -> 1.12 # drivers/media/Makefile 1.6 -> 1.7 # fs/xfs/linux/xfs_super.c 1.33 -> 1.34 # include/asm-ia64/pci.h 1.13 -> 1.14 # arch/v850/kernel/entry.S 1.6 -> 1.7 # drivers/video/i810/i810.h 1.4 -> 1.6 # drivers/char/drm/gamma_dma.c 1.9 -> 1.10 # drivers/char/genrtc.c 1.7 -> 1.8 # sound/pci/ac97/ac97_patch.c 1.9 -> 1.10 # sound/pci/cs46xx/dsp_spos_scb_lib.c 1.15 -> 1.16 # sound/core/seq/seq_midi_emul.c 1.7 -> 1.8 # drivers/scsi/aic7xxx/aic79xx.reg 1.5 -> 1.8 # Documentation/Changes 1.32 -> 1.33 # mm/rmap.c 1.23 -> 1.28 # include/net/dst.h 1.13 -> 1.14 # sound/oss/mpu401.c 1.10 -> 1.11 # net/ipv6/sit.c 1.21 -> 1.23 # include/asm-m68knommu/cacheflush.h 1.2 -> 1.3 # arch/i386/kernel/i8259.c 1.20 -> 1.21 # drivers/media/video/Kconfig 1.5 -> 1.6 # arch/arm/mach-iop310/Makefile 1.5 -> 1.8 arch/arm/mach-iop3xx/Makefile (moved) # include/asm-s390x/scatterlist.h 1.3 -> (deleted) # include/asm-ia64/unaligned.h 1.2 -> 1.3 # drivers/usb/host/ehci-mem.c 1.13 -> 1.14 # arch/s390x/kernel/ioctl32.c 1.11 -> (deleted) # net/sched/sch_sfq.c 1.7 -> 1.8 # include/asm-cris/bitops.h 1.5 -> 1.6 # net/ipv6/addrconf.c 1.34 -> 1.35 # net/ipv4/netfilter/ipt_owner.c 1.5 -> 1.6 # drivers/usb/host/ohci-q.c 1.39 -> 1.40 # arch/ia64/kernel/perfmon.c 1.38 -> 1.39 # sound/pci/ali5451/ali5451.c 1.22 -> 1.23 # drivers/usb/input/usbmouse.c 1.23 -> 1.24 # include/asm-s390x/irq.h 1.9 -> (deleted) # drivers/char/applicom.c 1.7 -> 1.8 # include/asm-ia64/compat.h 1.8 -> 1.11 # include/asm-s390x/bug.h 1.1 -> (deleted) # sound/isa/azt2320.c 1.9 -> 1.10 # include/asm-s390x/ebcdic.h 1.5 -> (deleted) # include/asm-s390x/bitops.h 1.8 -> (deleted) # arch/s390x/kernel/linux32.h 1.8 -> (deleted) # arch/ia64/Kconfig 1.18 -> 1.19 # include/asm-s390x/system.h 1.13 -> (deleted) # drivers/media/dvb/av7110/av7110_ir.c 1.2 -> (deleted) # include/linux/netfilter_ipv4/ip_conntrack_protocol.h 1.4 -> 1.5 # drivers/pcmcia/sa1111_generic.h 1.6 -> 1.7 # include/asm-ia64/sal.h 1.14 -> 1.15 # sound/pci/cs4281.c 1.22 -> 1.23 # mm/truncate.c 1.8 -> 1.9 # kernel/panic.c 1.9 -> 1.10 # drivers/media/dvb/dvb-core/dvb_frontend.h 1.2 -> 1.3 # arch/v850/kernel/rte_nb85e_cb.c 1.1 -> 1.2 # include/asm-s390x/s390_ext.h 1.2 -> (deleted) # include/asm-s390/stat.h 1.4 -> 1.5 # fs/xfs/xfs_dmapi.h 1.7 -> 1.8 # arch/s390x/kernel/reipl.S 1.3 -> (deleted) # sound/core/info.c 1.23 -> 1.24 # drivers/usb/input/usbkbd.c 1.26 -> 1.27 # arch/ia64/kernel/traps.c 1.27 -> 1.28 # drivers/serial/68360serial.c 1.7 -> 1.8 # drivers/net/sungem.c 1.32 -> 1.33 # drivers/usb/misc/Kconfig 1.5 -> 1.6 # include/linux/dvb/ca.h 1.2 -> 1.3 # arch/arm/vmlinux-armo.lds.in 1.14 -> 1.15 # net/bridge/br_netfilter.c 1.4 -> 1.5 # include/asm-ia64/fpu.h 1.2 -> 1.3 # include/net/if_inet6.h 1.3 -> 1.4 # include/asm-parisc/cacheflush.h 1.3 -> 1.4 # arch/s390/kernel/Makefile 1.17 -> 1.18 # arch/ia64/mm/fault.c 1.12 -> 1.13 # arch/alpha/kernel/pci_iommu.c 1.15 -> 1.16 # sound/pci/ac97/ac97_id.h 1.6 -> 1.7 # drivers/video/radeonfb.c 1.20 -> 1.25 # fs/xfs/xfs_inode.c 1.17 -> 1.18 # fs/xfs/xfs_iget.c 1.11 -> 1.12 # sound/oss/emu10k1/main.c 1.13 -> 1.14 # sound/pci/emu10k1/emu10k1_main.c 1.12 -> 1.13 # include/asm-v850/unistd.h 1.5 -> 1.6 # drivers/mtd/maps/Kconfig 1.3 -> 1.4 # include/linux/nfsd/nfsd.h 1.14 -> 1.16 # arch/arm/mach-iop310/Kconfig 1.1 -> 1.5 arch/arm/mach-iop3xx/Kconfig (moved) # drivers/usb/class/audio.c 1.33 -> 1.34 # sound/core/memalloc.c 1.2 -> 1.4 # sound/isa/opl3sa2.c 1.15 -> 1.16 # drivers/usb/net/pegasus.h 1.23 -> 1.24 # kernel/kallsyms.c 1.8 -> 1.9 # include/asm-sparc64/cacheflush.h 1.1 -> 1.2 # include/asm-s390/ipc.h 1.1 -> 1.2 # arch/s390x/kernel/wrapper32.S 1.19 -> (deleted) # drivers/char/ipmi/ipmi_watchdog.c 1.1 -> 1.2 # drivers/media/dvb/dvb-core/dvb_ksyms.c 1.2 -> 1.3 # include/linux/poll.h 1.9 -> 1.10 # include/asm-arm/hardware/sa1111.h 1.9 -> 1.10 # include/asm-arm/arch-iop310/system.h 1.2 -> 1.3 include/asm-arm/arch-iop3xx/system.h (moved) # net/ipv4/ip_output.c 1.30 -> 1.31 # include/linux/pnp.h 1.19 -> 1.20 # drivers/usb/net/pegasus.c 1.42 -> 1.45 # net/ipv4/igmp.c 1.16 -> 1.20 # include/asm-mips64/pgtable.h 1.12 -> 1.13 # drivers/s390/cio/cio.c 1.12 -> 1.13 # drivers/scsi/aic7xxx/aic79xx_seq.h_shipped 1.4 -> 1.8 # include/asm-s390x/posix_types.h 1.2 -> (deleted) # sound/pci/cs46xx/cs46xx.c 1.13 -> 1.14 # include/asm-s390x/linkage.h 1.1 -> (deleted) # drivers/ieee1394/ieee1394_hotplug.h 1.2 -> 1.4 # include/asm-s390/statfs.h 1.1 -> 1.2 # arch/ia64/sn/kernel/sn2/Makefile 1.9 -> 1.10 # include/asm-s390/tlbflush.h 1.4 -> 1.5 # kernel/workqueue.c 1.6 -> 1.7 # arch/alpha/math-emu/math.c 1.4 -> 1.5 # fs/inode.c 1.90 -> 1.91 # include/asm-ia64/ia32.h 1.17.1.1 -> 1.20 # net/ipv4/netfilter/ip_conntrack_proto_tcp.c 1.8 -> 1.9 # drivers/s390/s390mach.c 1.12 -> 1.13 # net/bridge/br_if.c 1.6 -> 1.7 # scripts/kallsyms.c 1.7 -> 1.8 # include/asm-s390x/vtoc.h 1.4 -> (deleted) # arch/s390x/kernel/exec_domain32.c 1.1 -> (deleted) # arch/s390/kernel/gdb-stub.c 1.2 -> (deleted) # include/linux/nfsd/syscall.h 1.4 -> 1.6 # net/ipv4/route.c 1.44 -> 1.45 # sound/oss/gus_midi.c 1.5 -> 1.6 # drivers/base/class.c 1.24 -> 1.25 # sound/pci/rme32.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/Makefile 1.3 -> 1.4 # drivers/scsi/aic7xxx/aic79xx_reg.h_shipped 1.4 -> 1.8 # drivers/scsi/aic7xxx/aic7xxx.reg 1.8 -> 1.9 # drivers/scsi/aic7xxx/aic7770.c 1.8 -> 1.9 # sound/oss/cs4281/cs4281m.c 1.17 -> 1.18 # include/asm-s390/byteorder.h 1.3 -> 1.4 # arch/i386/kernel/i386_ksyms.c 1.50 -> 1.51 # arch/ia64/kernel/Makefile 1.15 -> 1.16 # sound/oss/es1370.c 1.19 -> 1.21 # include/asm-alpha/irq.h 1.5 -> 1.6 # arch/v850/kernel/gbus_int.c 1.4 -> 1.5 # arch/i386/kernel/sysenter.c 1.11 -> 1.12 # include/asm-s390/system.h 1.14 -> 1.16 # fs/nfs/nfs4xdr.c 1.14 -> 1.21 # arch/parisc/kernel/syscall.S 1.9 -> 1.11 # fs/nfsctl.c 1.6 -> 1.7 # include/asm-s390x/current.h 1.5 -> (deleted) # arch/s390x/kernel/binfmt_elf32.c 1.8 -> (deleted) # fs/nfsd/nfs4proc.c 1.8 -> 1.9 # kernel/printk.c 1.23 -> 1.24 # include/asm-s390/cacheflush.h 1.1 -> 1.2 # arch/s390x/boot/install.sh 1.1 -> (deleted) # include/asm-s390x/gdb-stub.h 1.1 -> (deleted) # include/asm-s390x/shmbuf.h 1.1 -> (deleted) # drivers/s390/block/dasd_fba.h 1.4 -> 1.5 # include/linux/netfilter_ipv4/ip_conntrack_core.h 1.5 -> 1.6 # include/asm-s390/hardirq.h 1.6 -> 1.7 # include/asm-s390/shmbuf.h 1.1 -> 1.2 # arch/i386/kernel/apic.c 1.35 -> 1.36 # drivers/usb/misc/speedtch.c 1.74 -> 1.77 # sound/oss/emu10k1/midi.c 1.10 -> 1.11 # drivers/char/drm/drm_vm.h 1.22 -> 1.23 # Documentation/DocBook/usb.tmpl 1.1 -> 1.3 # sound/ppc/powermac.c 1.8 -> 1.9 # drivers/scsi/aic7xxx/aic7xxx_inline.h 1.7 -> 1.8 # drivers/net/3c505.c 1.20 -> 1.21 # arch/ia64/sn/fakeprom/README 1.4 -> 1.5 # drivers/media/dvb/av7110/saa7146_v4l.c 1.2 -> (deleted) # include/linux/fdreg.h 1.1 -> 1.2 # net/ipv6/xfrm6_input.c 1.6 -> 1.8 # include/asm-m68k/page.h 1.9 -> 1.10 # arch/v850/kernel/Makefile 1.6 -> 1.7 # arch/ia64/sn/io/sn2/Makefile 1.1 -> 1.2 # arch/s390x/kernel/module.c 1.6 -> (deleted) # drivers/media/dvb/dvb-core/dmxdev.h 1.2 -> 1.3 # include/asm-v850/ptrace.h 1.1 -> 1.2 # kernel/ptrace.c 1.28 -> 1.30 # arch/i386/kernel/i387.c 1.14 -> 1.16 # drivers/video/pm2fb.c 1.17 -> 1.18 # drivers/media/dvb/av7110/Kconfig 1.1 -> (deleted) # fs/fs-writeback.c 1.33 -> 1.34 # sound/ppc/pmac.c 1.11 -> 1.12 # include/linux/in.h 1.5 -> 1.7 # arch/s390/boot/Makefile 1.15 -> 1.16 # drivers/char/agp/amd-k7-agp.c 1.18 -> 1.19 # drivers/s390/block/dasd_9343_erp.c 1.4 -> 1.5 # sound/oss/pss.c 1.8 -> 1.9 # drivers/net/slip.c 1.10 -> 1.11 # drivers/media/dvb/dvb-core/dvb_filter.c 1.2 -> 1.3 # include/asm-v850/posix_types.h 1.1 -> 1.2 # net/ipv4/ipip.c 1.23 -> 1.27 # include/asm-sh/pgtable.h 1.16 -> 1.17 # include/asm-s390/unistd.h 1.14 -> 1.16 # drivers/media/dvb/frontends/alps_bsru6.c 1.3 -> (deleted) # include/linux/nfs_fs_sb.h 1.8 -> 1.9 # include/asm-s390x/cpcmd.h 1.2 -> (deleted) # include/asm-s390/string.h 1.2 -> 1.3 # arch/ia64/kernel/unwind.c 1.16 -> 1.19 # include/asm-s390/spinlock.h 1.7 -> 1.9 # include/asm-s390x/stat.h 1.2 -> (deleted) # include/asm-parisc/compat.h 1.8 -> 1.9 # arch/ppc/vmlinux.lds.S 1.18 -> 1.19 # sound/isa/sgalaxy.c 1.11 -> 1.12 # drivers/scsi/aic7xxx/aic7xxx_seq.h_shipped 1.10 -> 1.11 # drivers/s390/cio/css.h 1.1 -> 1.2 # include/asm-m68k/bitops.h 1.7 -> 1.8 # (new) -> 1.1 arch/ia64/module.lds # (new) -> 1.1 Documentation/io_ordering.txt # (new) -> 1.1 include/asm-h8300/flat.h # (new) -> 1.1 arch/h8300/platform/h8300h/h8max/Makefile # (new) -> 1.1 include/asm-h8300/mmu_context.h # (new) -> 1.1 include/asm-h8300/bug.h # (new) -> 1.1 include/asm-h8300/div64.h # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.h # (new) -> 1.1 arch/h8300/kernel/process.c # (new) -> 1.1 arch/h8300/lib/memcpy.S # (new) -> 1.1 include/asm-h8300/mmu.h # (new) -> 1.1 include/asm-h8300/posix_types.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_firm.h # (new) -> 1.1 drivers/media/common/saa7146_vbi.c # (new) -> 1.1 include/asm-h8300/cachectl.h # (new) -> 1.1 arch/h8300/platform/h8300h/generic/crt0_rom.S # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.h # (new) -> 1.1 include/asm-h8300/byteorder.h # (new) -> 1.1 lib/percpu_counter.c # (new) -> 1.1 include/media/saa7146.h # (new) -> 1.1 arch/h8300/kernel/asm-offsets.c # (new) -> 1.1 include/asm-i386/mach-pc9800/irq_vectors.h # (new) -> 1.1 include/asm-h8300/h8max/ne.h # (new) -> 1.1 include/linux/nfsd/state.h # (new) -> 1.1 arch/h8300/kernel/traps.c # (new) -> 1.1 include/asm-h8300/resource.h # (new) -> 1.1 include/asm-ia64/acpi-ext.h # (new) -> 1.1 arch/h8300/lib/checksum.c # (new) -> 1.1 drivers/media/video/mxb.c # (new) -> 1.1 drivers/media/dvb/dvb-core/Makefile.lib # (new) -> 1.1 include/asm-h8300/sembuf.h # (new) -> 1.1 include/media/saa7146_vv.h # (new) -> 1.1 drivers/media/video/tea6415c.h # (new) -> 1.1 arch/s390/kernel/syscalls.S # (new) -> 1.1 arch/h8300/platform/h8300h/generic/rom.ld # (new) -> 1.1 arch/h8300/platform/h8300h/h8max/timer.c # (new) -> 1.1 include/asm-h8300/hw_irq.h # (new) -> 1.2 net/ipv4/xfrm4_tunnel.c # (new) -> 1.1 include/asm-h8300/a.out.h # (new) -> 1.1 include/asm-h8300/percpu.h # (new) -> 1.1 arch/s390/kernel/reipl64.S # (new) -> 1.1 drivers/media/dvb/ttpci/budget-ci.c # (new) -> 1.1 arch/h8300/kernel/setup.c # (new) -> 1.1 arch/h8300/mm/fault.c # (new) -> 1.1 include/asm-h8300/ide.h # (new) -> 1.1 arch/s390/kernel/compat_exec_domain.c # (new) -> 1.1 drivers/media/dvb/ttpci/Kconfig # (new) -> 1.1 drivers/media/dvb/ttpci/Makefile # (new) -> 1.1 drivers/media/dvb/ttpci/budget-patch.c # (new) -> 1.1 include/asm-h8300/processor.h # (new) -> 1.1 arch/h8300/Makefile # (new) -> 1.1 arch/h8300/platform/h8300h/aki3068net/timer.c # (new) -> 1.1 arch/h8300/platform/h8300h/h8max/crt0_ram.S # (new) -> 1.2 include/asm-s390/compat.h # (new) -> 1.1 arch/h8300/platform/h8300h/generic/Makefile # (new) -> 1.1 arch/h8300/defconfig # (new) -> 1.1 arch/h8300/platform/h8300h/generic/ram.ld # (new) -> 1.1 include/asm-i386/mach-default/apm.h # (new) -> 1.1 include/asm-h8300/module.h # (new) -> 1.1 include/linux/blockgroup_lock.h # (new) -> 1.1 include/asm-h8300/irq.h # (new) -> 1.1 include/asm-h8300/statfs.h # (new) -> 1.1 arch/s390/kernel/entry64.S # (new) -> 1.1 include/asm-h8300/current.h # (new) -> 1.1 include/asm-h8300/init.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ir.c # (new) -> 1.1 arch/s390/lib/strncpy64.S # (new) -> 1.1 include/asm-h8300/pgalloc.h # (new) -> 1.1 include/asm-h8300/sigcontext.h # (new) -> 1.1 include/video/edid.h # (new) -> 1.1 arch/h8300/kernel/init_task.c # (new) -> 1.1 fs/nfs/idmap.c # (new) -> 1.2 arch/arm/def-configs/iq80321 # (new) -> 1.1 include/asm-h8300/dbg.h # (new) -> 1.1 include/asm-h8300/tlbflush.h # (new) -> 1.1 include/asm-h8300/unaligned.h # (new) -> 1.1 arch/h8300/platform/h8300h/ints.c # (new) -> 1.1 drivers/media/dvb/frontends/dvb_dummy_fe.c # (new) -> 1.1 include/asm-h8300/delay.h # (new) -> 1.1 arch/h8300/kernel/syscalls.S # (new) -> 1.1 include/asm-h8300/shm.h # (new) -> 1.1 arch/h8300/kernel/ptrace.c # (new) -> 1.1 include/asm-h8300/hdreg.h # (new) -> 1.1 include/asm-h8300/dma.h # (new) -> 1.1 arch/h8300/kernel/time.c # (new) -> 1.1 include/asm-h8300/uaccess.h # (new) -> 1.1 include/asm-h8300/ipcbuf.h # (new) -> 1.1 arch/s390/kernel/head64.S # (new) -> 1.1 drivers/media/dvb/ttpci/budget-core.c # (new) -> 1.1 include/asm-h8300/h8300_ne.h # (new) -> 1.1 include/asm-h8300/regs306x.h # (new) -> 1.1 include/asm-h8300/thread_info.h # (new) -> 1.1 drivers/video/edid.h # (new) -> 1.1 include/asm-i386/mach-default/mach_time.h # (new) -> 1.1 arch/h8300/lib/Makefile # (new) -> 1.1 include/linux/nfs_idmap.h # (new) -> 1.1 include/asm-h8300/signal.h # (new) -> 1.1 arch/s390/kernel/compat_ptrace.h # (new) -> 1.1 include/asm-h8300/atomic.h # (new) -> 1.1 arch/h8300/platform/h8300h/entry.S # (new) -> 1.1 include/asm-h8300/segment.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_wakecpu.h # (new) -> 1.1 drivers/block/floppy98.c # (new) -> 1.1 include/asm-h8300/bitops.h # (new) -> 1.1 include/asm-h8300/param.h # (new) -> 1.1 include/asm-h8300/ipc.h # (new) -> 1.1 include/asm-h8300/cacheflush.h # (new) -> 1.1 arch/h8300/platform/h8300h/generic/timer.c # (new) -> 1.1 include/asm-h8300/bugs.h # (new) -> 1.1 include/asm-h8300/sockios.h # (new) -> 1.1 include/asm-h8300/namei.h # (new) -> 1.1 include/asm-h8300/pgtable.h # (new) -> 1.1 include/asm-i386/mach-pc9800/apm.h # (new) -> 1.1 drivers/media/video/dpc7146.c # (new) -> 1.1 arch/h8300/mm/extable.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.c # (new) -> 1.1 include/asm-h8300/stat.h # (new) -> 1.1 include/asm-arm/arch-iop3xx/iop321-irqs.h # (new) -> 1.1 include/asm-arm/arch-iop3xx/iq80321.h # (new) -> 1.4 arch/ia64/kernel/module.c # (new) -> 1.1 include/asm-h8300/h8max/ide.h # (new) -> 1.1 arch/h8300/platform/h8300h/aki3068net/Makefile # (new) -> 1.1 include/asm-h8300/cache.h # (new) -> 1.1 include/asm-h8300/gpio.h # (new) -> 1.1 arch/h8300/kernel/gpio.c # (new) -> 1.1 include/asm-h8300/system.h # (new) -> 1.1 arch/m68k/kernel/module.c # (new) -> 1.1 include/asm-ia64/sn/sn2/io.h # (new) -> 1.1 include/asm-h8300/msgbuf.h # (new) -> 1.1 include/asm-h8300/semaphore.h # (new) -> 1.1 include/asm-h8300/page_offset.h # (new) -> 1.1 include/asm-h8300/ioctls.h # (new) -> 1.1 include/asm-h8300/timex.h # (new) -> 1.1 include/asm-h8300/unistd.h # (new) -> 1.1 drivers/media/video/tea6420.c # (new) -> 1.1 arch/h8300/kernel/signal.c # (new) -> 1.1 arch/arm/mach-iop3xx/mm-321.c # (new) -> 1.1 arch/h8300/mm/memory.c # (new) -> 1.1 drivers/media/common/saa7146_fops.c # (new) -> 1.1 include/asm-h8300/ioctl.h # (new) -> 1.1 arch/h8300/mm/init.c # (new) -> 1.1 include/asm-h8300/topology.h # (new) -> 1.1 include/asm-h8300/pci.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_time.h # (new) -> 1.1 arch/h8300/lib/memset.S # (new) -> 1.1 include/asm-h8300/target_time.h # (new) -> 1.1 include/asm-h8300/ucontext.h # (new) -> 1.1 include/asm-h8300/elf.h # (new) -> 1.1 include/asm-h8300/hardirq.h # (new) -> 1.1 include/asm-i386/mach-default/mach_traps.h # (new) -> 1.1 include/linux/percpu_counter.h # (new) -> 1.1 include/asm-i386/pc9800.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.c # (new) -> 1.1 arch/h8300/kernel/Makefile # (new) -> 1.1 arch/h8300/kernel/semaphore.c # (new) -> 1.1 include/asm-h8300/mman.h # (new) -> 1.1 include/asm-h8300/linux_logo.h # (new) -> 1.1 drivers/mtd/maps/iq80321.c # (new) -> 1.1 include/asm-h8300/siginfo.h # (new) -> 1.1 include/asm-h8300/io.h # (new) -> 1.1 arch/h8300/vmlinux.lds.S # (new) -> 1.1 include/asm-h8300/kmap_types.h # (new) -> 1.1 include/asm-h8300/socket.h # (new) -> 1.1 include/asm-i386/mach-default/mach_resources.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.h # (new) -> 1.1 drivers/media/common/saa7146_hlp.c # (new) -> 1.1 arch/v850/rte_nb85e_cb.ld # (new) -> 1.1 include/asm-h8300/types.h # (new) -> 1.1 include/asm-h8300/softirq.h # (new) -> 1.1 include/asm-h8300/termios.h # (new) -> 1.1 arch/s390/lib/memset64.S # (new) -> 1.1 include/asm-h8300/semaphore-helper.h # (new) -> 1.1 drivers/media/common/saa7146_video.c # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_timer.h # (new) -> 1.1 include/asm-h8300/smp.h # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.c # (new) -> 1.1 include/asm-h8300/checksum.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.c # (new) -> 1.1 arch/s390/kernel/compat_ioctl.c # (new) -> 1.1 arch/v850/kernel/teg.c # (new) -> 1.1 arch/s390/kernel/compat_linux.h # (new) -> 1.1 drivers/i2c/i2c-keywest.c # (new) -> 1.1 include/asm-h8300/errno.h # (new) -> 1.1 drivers/media/video/tda9840.c # (new) -> 1.1 arch/v850/kernel/nb85e_cache.c # (new) -> 1.1 arch/h8300/README # (new) -> 1.1 fs/nfsd/nfs4state.c # (new) -> 1.1 include/asm-i386/mach-pc9800/do_timer.h # (new) -> 1.1 drivers/media/video/tea6420.h # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.c # (new) -> 1.1 drivers/media/common/saa7146_core.c # (new) -> 1.1 arch/h8300/platform/h8300h/aki3068net/ram.ld # (new) -> 1.1 drivers/i2c/busses/i2c-viapro.c # (new) -> 1.1 arch/v850/rte_nb85e_cb-multi.ld # (new) -> 1.1 arch/s390/lib/strcmp64.S # (new) -> 1.1 drivers/media/video/tea6415c.c # (new) -> 1.1 include/asm-h8300/tlb.h # (new) -> 1.1 include/asm-h8300/fpu.h # (new) -> 1.1 include/asm-h8300/shmbuf.h # (new) -> 1.1 include/asm-h8300/spinlock.h # (new) -> 1.1 arch/h8300/platform/h8300h/Makefile # (new) -> 1.1 include/asm-i386/mach-pc9800/io_ports.h # (new) -> 1.1 arch/h8300/Kconfig # (new) -> 1.1 arch/h8300/platform/h8300h/Rules.make # (new) -> 1.1 include/asm-i386/mach-pc9800/smpboot_hooks.h # (new) -> 1.1 arch/arm/mach-iop3xx/iop321-pci.c # (new) -> 1.1 drivers/media/dvb/ttpci/budget-av.c # (new) -> 1.2 arch/s390/kernel/compat_linux.c # (new) -> 1.1 arch/h8300/platform/h8300h/aki3068net/crt0_ram.S # (new) -> 1.1 include/asm-h8300/virtconvert.h # (new) -> 1.1 include/asm-h8300/fcntl.h # (new) -> 1.1 include/asm-h8300/user.h # (new) -> 1.1 arch/s390/lib/uaccess64.S # (new) -> 1.1 arch/h8300/kernel/sys_h8300.c # (new) -> 1.1 drivers/media/common/Makefile # (new) -> 1.1 arch/ia64/sn/Makefile # (new) -> 1.1 include/asm-h8300/sh_bios.h # (new) -> 1.1 include/asm-h8300/poll.h # (new) -> 1.1 include/asm-h8300/md.h # (new) -> 1.1 include/asm-h8300/page.h # (new) -> 1.1 drivers/media/video/mxb.h # (new) -> 1.1 drivers/media/dvb/frontends/at76c651.c # (new) -> 1.2 net/ipv4/ipcomp.c # (new) -> 1.1 arch/arm/mach-iop3xx/iop321-time.c # (new) -> 1.1 arch/s390/kernel/compat_exec.c # (new) -> 1.1 include/sound/hdsp.h # (new) -> 1.1 drivers/i2c/i2c-keywest.h # (new) -> 1.1 arch/ia64/sn/kernel/sn2/io.c # (new) -> 1.1 arch/s390/kernel/binfmt_elf32.c # (new) -> 1.1 include/asm-h8300/ptrace.h # (new) -> 1.1 include/asm-h8300/smplock.h # (new) -> 1.1 arch/h8300/kernel/h8300_ksyms.c # (new) -> 1.1 include/asm-h8300/generic/timer_rate.h # (new) -> 1.1 arch/s390/kernel/compat_signal.c # (new) -> 1.1 arch/h8300/lib/abs.S # (new) -> 1.1 Documentation/arm/Porting # (new) -> 1.1 arch/arm/mach-iop3xx/iop321-irq.c # (new) -> 1.1 arch/h8300/lib/ashrdi3.c # (new) -> 1.1 include/asm-h8300/bootinfo.h # (new) -> 1.1 include/asm-i386/mach-default/bios_ebda.h # (new) -> 1.1 include/asm-h8300/string.h # (new) -> 1.1 include/asm-h8300/aki3068net/ne.h # (new) -> 1.1 include/asm-h8300/setup.h # (new) -> 1.1 arch/arm/mach-iop3xx/iq80321-pci.c # (new) -> 1.1 drivers/media/video/tda9840.h # (new) -> 1.1 drivers/media/common/saa7146_i2c.c # (new) -> 1.1 arch/h8300/mm/Makefile # (new) -> 1.1 include/asm-h8300/mc146818rtc.h # (new) -> 1.1 include/asm-h8300/traps.h # (new) -> 1.1 include/asm-h8300/linkage.h # (new) -> 1.1 include/asm-i386/mach-default/io_ports.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_resources.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_traps.h # (new) -> 1.1 drivers/media/common/Kconfig # (new) -> 1.1 arch/h8300/platform/h8300h/h8max/ram.ld # (new) -> 1.1 arch/h8300/mm/kmap.c # (new) -> 1.1 include/asm-h8300/termbits.h # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.h # (new) -> 1.1 include/asm-h8300/keyboard.h # (new) -> 1.1 drivers/media/dvb/frontends/stv0299.c # (new) -> 1.1 include/asm-h8300/shmparam.h # (new) -> 1.1 include/asm-arm/arch-iop3xx/iop321.h # (new) -> 1.2 arch/s390/kernel/compat_wrapper.S # (new) -> 1.1 include/asm-i386/mach-pc9800/bios_ebda.h # (new) -> 1.1 arch/ia64/kernel/acpi-ext.c # (new) -> 1.1 include/asm-i386/mach-default/mach_timer.h # (new) -> 1.1 include/asm-h8300/scatterlist.h # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.971.75.10 # Linux 2.5.67 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.971.77.1 # [XFS] remove busy inode check in the umount path - Linux checked it for us before calling into the filesystem. We're beyond the point of no return for umount anyway # # SGI Modid: 2.5.x-xfs:slinx:142731a # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.971.69.16 # [PATCH] usb-storage: fix CB/CBI # # When we fixed the error handling, we accidentally made a mistake. A STALL # on a control endpoint isn't necessarily a fatal thing -- it can be used to # indicate a command failure. # # This fixes bugzilla bug #510. # # - A control endpoint stall when sending the command to a CB/CBI device is # legal. Our error handling was just a little too agressive. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.971.69.17 # [PATCH] usb-storage: variable renames # # This patch changes the struct us_data 'ss' to 'us' to be consistent with # the rest of the code. The old name was a legacy artifact. # # There are no functional changes here. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.971.69.18 # [PATCH] usb-storage: remove BUG/BUG_ON # # This patch changes BUG and BUG_ON to print error messages. It is done to # be (a) a little more robust, and (b) complies with Linus' idea of no BUGs # unless absolutely necessary. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.971.69.19 # [PATCH] usb-storage: add info to /proc interface # # This patch adds some information about the quirks of the device to the # /proc interface. # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.971.77.2 # [XFS] Fix definition of setresblks - nothing uses it yet, but DMF will (so fix now). # # SGI Modid: 2.5.x-xfs:slinx:142797a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.971.77.3 # [XFS] Fix a pagebuf leak with the pagebufs used to coordinate IO completion # for unwritten extent writes. # # SGI Modid: 2.5.x-xfs:slinx:143052a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.971.77.4 # [XFS] Fix up some minor namespace pollution problems. # # SGI Modid: 2.5.x-xfs:slinx:143053a # -------------------------------------------- # 03/04/07 greg@kroah.com 1.971.78.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.971.77.5 # [XFS] remove atomicIncWithWrap # # SGI Modid: 2.5.x-xfs:slinx:143647a # -------------------------------------------- # 03/04/07 alborchers@steinerpoint.com 1.971.78.2 # [PATCH] USB: patch for oops in io_edgeport.c # # I tracked down a problem that caused an oops in io_edgeport.c. # # The oops is reliably reproduced by using an EdgePort USB serial # port in dosemu and then exiting dosemu. When dosemu closed # the port the oops would occur. (Tested in RH 7.3 2.4.18-10.) # # The problem was that a USB cmd callback would come in after the # close with the tty struct freed, and the edge_bulk_out_cmd_callback # function would do a wakeup on the tty->write_wait queue. The # tty struct was gone (I checked that tty->magic was bad) and the # wakeup would oops. # # As you did in other places in io_edgeport.c, I added a check that # edge_port->open was true before using the edge_port->port->tty # struct. # # I added a similar check in edge_bulk_out_data_callback, though # I never actually saw the problem here. # # I notice that in 2.4.20 a check has been added to be sure that # edge_port->port->tty is not null--however, this is not enough # because the tty pointer is not set to null when the port is # closed. An alternate solution in 2.4.20 would be to set the # usb_serial_port->tty pointer to null in usbserial.c serial_close(). # This seems like a good thing to do in general, since the tty # struct should not be used after a close which frees it. If # you would like I investigate this a bit more--it could affect # other usb serial drivers and reveal some hidden bugs. # -------------------------------------------- # 03/04/07 hch@sgi.com 1.971.77.6 # [XFS] merge over some lost changes from the XFS tree # -------------------------------------------- # 03/04/07 hch@hera.kernel.org 1.971.75.11 # Merge # -------------------------------------------- # 03/04/07 greg@kroah.com 1.971.78.3 # USB: set port->tty to NULL after we have closed the port # # This lets any of the many checks for this contition actually have a # chance of working :) # -------------------------------------------- # 03/04/07 davidm@wailua.hpl.hp.com 1.889.310.54 # ia64: Fix inconsistency in sys32_execve(). Reported by # Chandra Kapate). # -------------------------------------------- # 03/04/07 greg@kroah.com 1.971.79.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 greg@kroah.com 1.971.80.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.12 # Fix a series of NFS read/readdir/readlink errors. # # Tightens consistency checks on the process of reading the reply skb in # the SunRPC client. Reject a reply if we didn't succeed in reading the # entire skb. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.13 # Remove bogus check on the size of NFSv4 'readdir' cookies. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.14 # Prepare for the introduction of NFSv4 state code. # # Split out the open() method for regular files from that of # directories. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.15 # Implement stateful open() for NFSv4 as per RFC3010-bis. # The resulting state is saved in the NFS-specific part of the # struct inode. # # Initially we just start with 3 possible states: # - open for read # - open for write # - open for read/write # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.16 # Setup code to tear down the NFSv4 state once we're done with a file. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.17 # Make NFSv4 'setattr()' method use the cached stateid if the file is # already open. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.18 # Make NFSv4 'read' code use the cached stateid if it exists. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.971.75.19 # Make the NFSv4 write code use the stateid if it exists. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.971.1.68 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.971.72.3 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.971.75.20 # Add support for mapping NFSv4 remote user/group names into local # unix-style uid/gids. # # Note that this makes use of the RPC client upcall mechanism # (rpc_pipefs) to notify a userland daemon that does the actual mapping. # The results are then cached in the kernel. # The userland daemon can be downloaded from the CITI NFSv4 page at # # http://www.citi.umich.edu/projects/nfsv4/ # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.971.75.21 # Add hooks into the NFSv4 XDR code to make use of the new uid/gid # mapper upcall mechanism. # -------------------------------------------- # 03/04/07 greg@kroah.com 1.971.80.2 # i2c: fix up compile error in scx200_i2c driver. # -------------------------------------------- # 03/04/07 alan@lxorguk.ukuu.org.uk 1.971.1.69 # [SPARC64]: syscalls returning long # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.971.1.70 # [SPARC]: Fix sys_ipc to return ENOSYS instead of EINVAL as appropriate. # -------------------------------------------- # 03/04/07 zwane@linuxpower.ca 1.971.81.1 # [PATCH] SET_MODULE_OWNER for tulip_core # # Tested with a pcmcia tulip # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.2 # [PATCH] Unreachable code in drivers_net_fc_iph5526.c # # From: Scott Russell # # - Rearranged unreachable printk code reported at kbugs.org # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.3 # [PATCH] Remove naked GFP_DMA from drivers_net_macmace.c # # From: Matthew Wilcox # # # Can use GFP_KERNEL since this is a netdevice ->open routine. # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.4 # [PATCH] Clear up GFP confusion in rcpci45.c # # [ Jeff, Pete: looks correct. Please check. --RR ] # # From: Matthew Wilcox # # # - Move PCI ID definitions to pci_ids.h # - The GFP_DMA in rcpci45_init_one should be GFP_KERNEL because it's a # pci_driver ->probe method, so it can sleep. # - The GFP_DMA in RC_allocate_and_post_buffers should be GFP_ATOMIC # because it's called from a timer function, so it must not sleep. # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.5 # [PATCH] [PATCH 2.5.63] net_wan_sdla_chdlc tty_driver add .owner field remove MOD_INC_DEC_USE_COUNT # # From: Hanna Linder # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.6 # [PATCH] [PATCH 2.5.63] net_wan_pc300_tty tty_driver add .owner field remove MOD_INC_DEC_USE_COUNT # # From: Hanna Linder # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.7 # [PATCH] [2.5 patch] fix the compilation of drivers_net_tokenring_tms380tr.c # # [ Guys, assume this is OK? ] # # From: Adrian Bunk # # Since 2.5.61 compilation of drivers/net/tokenring/tms380tr.c fails with # the following error: # # <-- snip --> # # ... # gcc -Wp,-MD,drivers/net/tokenring/.tms380tr.o.d -D__KERNEL__ -Iinclude # -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing # -fno-common -pipe -mpreferred-stack-boundary=2 -march=k6 # -Iinclude/asm-i386/mach-default -nostdinc -iwithprefix include # -DKBUILD_BASENAME=tms380tr -DKBUILD_MODNAME=tms380tr -c -o # drivers/net/tokenring/tms380tr.o drivers/net/tokenring/tms380tr.c # drivers/net/tokenring/tms380tr.c: In function `tms380tr_open': # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c:260: invalid type argument of `->' # drivers/net/tokenring/tms380tr.c: In function `tms380tr_init_adapter': # drivers/net/tokenring/tms380tr.c:1461: warning: long unsigned int format, different type arg (arg3) # make[3]: *** [drivers/net/tokenring/tms380tr.o] Error 1 # # <-- snip --> # # # The following patch by Jochen Friedrich fixes both the compile error and # the warning: # -------------------------------------------- # 03/04/07 scott.feldman@intel.com 1.971.81.8 # [E1000] Revert NAPI back to interrupt disable/enable mode # # * Undo botched attempt to run NAPI without # disabling/enabling interrupts. # [Robert.Olssen@data.slu.se] # -------------------------------------------- # 03/04/07 rusty@rustcorp.com.au 1.971.81.9 # [PATCH] [PATCH 2.5.63] epca tty_driver add .owner field remove MOD_INC_DEC_USE_COUNT # # [ Arjan: you touched it last AFAICT. Seems trivial. --RR ] # # From: Hanna Linder # -------------------------------------------- # 03/04/07 cramerj@intel.com 1.971.81.10 # [E1000] Fixed syntax error for C99 initializers # # * Fixed syntax error for C99 initializers # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.971.1.71 # Merge http://nfsclient.bkbits.net/linux-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.971.72.4 # [IPSEC]: AH/ESP forget to free private structs. # -------------------------------------------- # 03/04/07 niv@us.ibm.com 1.971.72.5 # [TCP]: Missing SNMP stats. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.971.72.6 # Merge bk://kernel.bkbits.net/acme/net-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.971.72.7 # [IPSEC]: Really move type destructor out of spinlock. # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.971.1.72 # Avoid using pointers to anonymous structure initializers. It's a # gcc'ism, and even gcc can apparently get confused by it. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.971.1.73 # [PATCH] no blk_queue_empty # # The single missing bit, please add that as well. Was missed because this # driver actually used elv_queue_empty, not blk_queue_empty. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.971.1.74 # [PATCH] move q->queuedata assign after queue init # # I want to make blk_init_queue() zero the queue, so we don't get anymore # nasty bugs with uninitialized variables. IDE is setting queuedata before # init though. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.75 # Make it more explicit that jiffies are "unsigned long", but # that we for the initial value ctually want to check only # wrap-around in an "unsigned int". # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.76 # [PATCH] alpha typos part 1 # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.77 # [PATCH] alpha typos part 2 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.78 # [PATCH] fix the mode for bios call in x86-32 as well as -64 # # (Andi Kleen) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.79 # [PATCH] Config.in typos # # (Steve Cole and co) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.80 # [PATCH] read extended cpu revision data # # (Dave Jones) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.81 # [PATCH] fix i387 fxsr conversion # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.82 # [PATCH] parisc - syscalls return long purity ... # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.83 # [PATCH] ppc64 syscalls return long purity # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.84 # [PATCH] v850 updates # # (Miles Bader) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.85 # [PATCH] compatmac not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.86 # [PATCH] compatmac not needed uaccess.h is # # Fixes unknown symbol copy_.. in some builds # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.87 # [PATCH] PC9800 floppy driver # # (Osamu Tomita) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.88 # [PATCH] config for PC98xx floppy # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.89 # [PATCH] MOD_* can go for floppy # # (Bob Miller) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.90 # [PATCH] makefile for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.91 # [PATCH] unversion.h and compatmac applicom.c # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.92 # [PATCH] update char Kconfig for PC9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.93 # [PATCH] exterminate compatmac in sx # # (compatmac cleanup is all Adrian Bunk) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.94 # [PATCH] error handling for upd4990a # # (Stephan Maciej) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.95 # [PATCH] clean up pci interrupt line whacking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.96 # [PATCH] fix our handling of BIOS forced PIO serverworks OSB4 # # (Robert Hentosh & me) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.97 # [PATCH] fix up capslock on pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.98 # [PATCH] add drivers/media/common for mixed dvb/analog device stuff # # (Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.99 # [PATCH] update the dvb core # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.100 # [PATCH] update the dvb front end chips # # (Again all DVB is Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.101 # [PATCH] kill off a load of stuff now in common dvb # # (These changes are big because they are the result of Martin Hunold # resolving a *huge* long term fork in the DVB code base). We now have # one DVB codebase so the changes while big are very good news # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.102 # [PATCH] fix radio-cadet build # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.103 # [PATCH] bring core media/video up to date with dvb changes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.104 # [PATCH] remaining dvb bits # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.105 # [PATCH] fix error in cops port to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.106 # [PATCH] port ltpc to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.107 # [PATCH] fix arcnet locking for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.108 # [PATCH] first cut at scc.c for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.109 # [PATCH] fix up yam for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.110 # [PATCH] Update lp486e for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.111 # [PATCH] fix macmace get_free_pages parameters # # (Matthew Wilcox) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.112 # [PATCH] first cut at 3c574_cs for SMP safety etc # # The old code was totally hosed for SMP, the windowing makes this # stuff tricky so it may need more work # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.113 # [PATCH] update slip to new tty module locks # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.114 # [PATCH] fix cosa verify_area # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.115 # [PATCH] first pass at fixing strip for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.116 # [PATCH] junk header removal # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.117 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.118 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.119 # [PATCH] asm-alpha typo fixe # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.120 # [PATCH] add but do not yet use mach specific definitions for ports etc on PC # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.121 # [PATCH] add the same mach specific headers for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.122 # [PATCH] and visws # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.123 # [PATCH] and voyager # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.124 # [PATCH] header for pc9800 type detection # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.125 # [PATCH] x86-64 typo fixes # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.126 # [PATCH] goodbye compatmac.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.127 # [PATCH] update dvb headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.128 # [PATCH] possible way to clean up fdreg.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.129 # [PATCH] hdreg.h typo fix # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.130 # [PATCH] continued compatmac exterminations # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.131 # [PATCH] lock for scc drivers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.132 # [PATCH] shared multimedia includes for saa71xx # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.133 # [PATCH] remove version crap # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.134 # [PATCH] wireless uses __init # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.135 # [PATCH] irda typo fixes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.136 # [PATCH] remove version.h's # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.137 # [PATCH] small pc98xx fix for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.138 # [PATCH] more audiov ersion scrubbing # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.139 # [PATCH] cs4232 should be devexit # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.140 # [PATCH] C99 for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.141 # [PATCH] lots more version and C99 for audio # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.142 # [PATCH] fix modular gus shared lock # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.143 # [PATCH] another C99 and version casd # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.144 # [PATCH] ics2101 needs to match the gus_lock name too # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.145 # [PATCH] fix ; in mad16 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.146 # [PATCH] ite C99 and version/h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.147 # [PATCH] yet more sound version/c99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.148 # [PATCH] sync opl3sa2 with 2.4 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.149 # [PATCH] last batch of audio C99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.150 # [PATCH] suspend doesnt need compatmac either # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.151 # [PATCH] use mach io_ports definitions in io_apic # # Allows for the non standard cascade # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.152 # [PATCH] make vm86 machine independant using new headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.971.1.153 # [PATCH] make APM machine independant using mach headers # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.154 # Fix up merge with Alan. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.155 # More left-over fixups from the merge with Alan. # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.889.310.55 # ia64: Sync sys32_ipc() with x86 counter-part. # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.971.1.156 # [PATCH] paride fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.971.1.157 # [PATCH] krxtimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.971.1.158 # [PATCH] kafstimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.971.1.159 # [PATCH] tty_io.c: make redirect static # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.971.82.1 # Merge # -------------------------------------------- # 03/04/08 miles@lsi.nec.co.jp 1.971.1.160 # [PATCH] On the v850/nb85e, acknowledge interrupts immediately after handling them # # Previously, it was done automatically by the `reti' isntruction upon # returning from the kernel, but that doesn't do the correct thing in # various cases, for instance if there's a context switch, or a softirq. # -------------------------------------------- # 03/04/08 akpm@digeo.com 1.971.1.161 # [PATCH] Fix futexes in hugetlb pages # # There is a stunning bug. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.162 # Fix mtdblock.c compile. From Adrian Bunk. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.971.82.2 # [PATCH] ia64: compat_sys_fcntl{,64} # # Here is the ia64 part of the patch. Pleas apply after Linus has applied # the generic part. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.971.82.3 # [PATCH] ia64: compat_uptr_t and compat_ptr # # Here is the ia64 part of the patch. It depends on my previous COMPAT # patches. This is safe to apply even before Linus applies the generic # part. # -------------------------------------------- # 03/04/08 jmorris@intercode.com.au 1.971.72.8 # [IPSEC]: Support for optional policies on input got lost. # -------------------------------------------- # 03/04/08 shemminger@osdl.org 1.971.72.9 # [VLAN]: Update to new module semantics, use synchronize_net. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.163 # Add __user/__kernel address space modifiers. When not # checking, these end up being no-ops, but they get enabled # by the type checker as special address_space attributes. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.164 # Add the proper sprinkling of __user attributes to the # user space access functions. This allows the type checker # to check proper usage. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.165 # Add __user attributes to user pointers in kernel/signal.c. This # was the first file tested with my type checker with the anal # pointer attribute checking turned on. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.166 # Make __SI_MASK explicitly unsigned, instead of depending on # magic C promotion to silently do so for us. # -------------------------------------------- # 03/04/08 rusty@rustcorp.com.au 1.971.72.10 # [IPSEC]: Avoid using SET_MODULE_OWNER. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.167 # Annotate scheduler system calls as taking user pointers. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.971.1.168 # Annotate i386/signal.c with address space type annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.169 # Add user pointer attributes to kernel/module.c # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.170 # Annotate fs/exec.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.171 # Annotate fs/namei.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.971.1.172 # Annotate x87 user space access functions with proper type attributes. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.971.83.1 # Merge kroah.com:/home/linux/linux/BK/bleed-2.5 # into kroah.com:/home/linux/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 kraxel@bytesex.org 1.971.83.2 # [PATCH] i2c: add i2c_clientname() # # This patch just adds a #define and a inline function to hide the # "i2c_client->name" => "i2c_client->dev.name" move introduced by # the recent i2c updates. That makes it easier to build i2c drivers # on both 2.4 and 2.5 kernels. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.971.83.3 # [PATCH] i2c: Fix w83781d sensor to use Milli-Volt for in_* in sysfs # # I did the w83781d sysfs update as per the old spec, which was not # milli-volt. This patch should fix it. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.971.83.4 # [PATCH] i2c: remove compiler warning in w83781d sensor driver # # On Wed, 2003-04-09 at 00:04, Greg KH wrote: # # > Oh, I'm getting the following warning when building the driver, want to # > look into this? # > # > drivers/i2c/chips/w83781d.c: In function `store_fan_div_reg': # > drivers/i2c/chips/w83781d.c:715: warning: `old3' might be used uninitialized in this function # > # # It is because old3 is only referenced if: # # ((data->type != w83781d) && data->type != as99127f) # # as those two chips don't have extended divisor bits ... # # It is however set in the first occurrence: # # /* w83781d and as99127f don't have extended divisor bits */ # if ((data->type != w83781d) && data->type != as99127f) { # old3 = w83781d_read_value(client, W83781D_REG_VBAT); # } # # and thus is rather gcc being brain dead for not being able to figure # old3 is only used within a if block like that. # # I was not sure about style policy in a case like this, so I left it as # is, it should however be possible to 'fix' it with: # -------------------------------------------- # 03/04/09 jejb@raven.il.steeleye.com 1.971.84.1 # Automerge # -------------------------------------------- # 03/04/09 jejb@raven.il.steeleye.com 1.971.85.1 # Merge patmans/axboe # -------------------------------------------- # 03/04/09 mort@wildopensource.com 1.971.82.4 # [PATCH] ia64: Fix up "extern inline" # # Here is a trivial patch to processor.h to change "extern" to "static". # -------------------------------------------- # 03/04/09 schlicht@uni-mannheim.de 1.971.83.5 # [PATCH] i2c: fix compilation error for various i2c-devices # # Changed the i2c_adapter name definition to match the current interface. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.1.173 # User pointers are not just in another address space, they also # must never be dereferenced directly. Make that clear in the # attribute. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.1.174 # Add user pointer attributes to kernel/sys.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.1.175 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.176 # [PATCH] fix wait_on_buffer() debug code # # The wait_on_buffer() debug code is generating false warnings when called from # __block_prepare_write(). It is legal to wait on a zero-ref buffer when its # page is locked. The page lock keeps try_to_free_buffers() away. # # This debug code hasn't found any bugs yet. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.177 # [PATCH] Enforce gcc-2.95 as the minimum compiler requirement # # Now that sparc64 is using gcc-3.x we can disallow gcc-2.91, etc. # # Documentation/Changes already says 2.95.3, which is working fine for me. # # With this change, we no longer require that per-cpu data definitions be # initialised. That was a workaround for a bug in older gccs. So remove the # build infrastructure which was checking for that. # # Also, mention that nfs-utils-1.0.3 is required. It isn't required yet, but # will be once we enable larger dev_t: there is an interface for exportfs which # passes dev_t's into the kernel which breaks with larger dev_t. That # interface is old, deprecated and is not used in nfs-utils-1.0.3. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.178 # [PATCH] null-terminate the kmalloc tables # # From: David Mosberger # # The cache_sizes array needs to be NULL terminated, otherwise an oversized # kmalloc request runs off the end of the table. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.179 # [PATCH] remove nr_reverse_maps VM accounting # # Maintaining the `nr_reverse_maps' provides makes a small but # measurable decrease in page_add_rmap() overhead. # # I don't think it's a very useful metric, and it can be sort-of inferred from # slabinfo. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.180 # [PATCH] speed up rmap searching # # several functions in rmap.c are searching the ptes[] array fo find the first # non-null entry. # # Despite the fact tha the whole lot is in L1 cache, it is expensive, # especially on 128-byte cacheline machines. # # We can encode the index of the first non-null pte entry inside the # pte_chain's `next' field and remove those searches altogether. # # This reduces the rmap CPU tax by about 25% on a P4. For a total runtime # reduction of around 5% in the bash-script intensive test which I use. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.181 # [PATCH] misc rmap speedups # # Even a BUG_ON() makes a measurable difference. So remove some gratuitous # ones which will just trigger a null pointer deref anyway. # # Also remove some debug code which isn't really being maintained any more. # # Also replace (effectively): # # test_bit(N, foo); # set_bit(N, foo); # # with # # set_bit(N, foo); # test_bit(N, foo); # # In the first case we'll go onto the bus twice: once for the cache miss and # once to get exclusive write access. In the second case we only go on the bus # once. I think. Certainly this trick chaved 40% off the cost of # shrink_list() when I did it there... # # This patch is worth 1% or so on the bash script testing. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.182 # [PATCH] Replace the radix-tree rwlock with a spinlock # # Spinlocks don't have a buslocked unlock and are faster. # # On a P4, time to write a 4M file with 4M one-byte-write()s: # # Before: # 0.72s user 5.47s system 99% cpu 6.227 total # 0.76s user 5.40s system 100% cpu 6.154 total # 0.77s user 5.38s system 100% cpu 6.146 total # # After: # 1.09s user 4.92s system 99% cpu 6.014 total # 0.74s user 5.28s system 99% cpu 6.023 total # 1.03s user 4.97s system 100% cpu 5.991 total # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.183 # [PATCH] rmap comments # # From: Hugh Dickins # # Update a few locking comments in rmap.c. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.184 # [PATCH] fix unuse_pmd fixme # # From: Hugh Dickins # # try_to_unuse drop mmlist_lock across unuse_process (with pretty dance # of atomic_incs and mmputs of various mmlist markers, and a polite new # cond_resched there), so unuse_process can pte_chain_alloc(GFP_KERNEL) # and pass that down and down and down and down to unuse_pte: which # cannot succeed more than once on a given mm (make that explicit by # returning back up once succeeded). Preliminary checks moved up from # unuse_pte to unuse_pmd, and done more efficiently (avoid that extra # pte_file test added recently), swapoff spends far too long in here. # Updated locking comments and references to try_to_swap_out. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.185 # [PATCH] JBD pasting warning fix # # From: "Hua Zhong" # # Fix a token-pasting warning from recent gcc's # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.186 # [PATCH] task_vsize() speedup # # From: William Lee Irwin III # # task_vsize() mysteriously appeared on my profiles. This should remove it # from them by using the already in-use elsewhere for rlimit checks # mm->total_vm for the benefit of O(1) cachelines touched. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.187 # [PATCH] Allow panics and reboots at oops time. # # From: Russell Miller # # A BUG or an oops will often leave a machine in a useless state. There is no # way to remotely recover the machine from that state. # # The patch adds a /proc/sys/kernel/panic_on_oops sysctl which, when set, will # cause the x86 kernel to call panic() at the end of the oops handler. If the # user has also set /proc/sys/kernel/panic then a reboot will occur. # # The implementation will try to sleep for a while before panicing so the oops # info has a chance of hitting the logs. # # The implementation is designed so that other architectures can easily do this # in their oops handlers. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.188 # [PATCH] epoll cross-thread deletion fix # # From: Davide Libenzi # # # This fixes a bug that might happen having a thread doing epoll_wait() with # another thread doing epoll_ctl(EPOLL_CTL_DEL) and close(). The fast check # inside eventpoll_release() is good to not effect performace of code not # using epoll, but it requires get_file() to be called ( that can be avoided # by dropping the fast check ). I opted to keep the fast check and to have # epoll to call get_file() before the event send loop. I tested it on UP and # 2SMP with a bug-exploiting program provided by @pivia.com ( thx to them ) # and it looks fine. I also update the 2.4.20 epoll patch with this fix : # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.189 # [PATCH] Missing brelse() in ext2/ext3 extended attribute code # # From: Andreas Gruenbacher # # Missing brelse() in ext2/ext3 extended attribute code # # The ext2 and ext3 EA implementations fail to release a buffer_head if # the inode that is being accessed is sharing EAs with another inode, and # an attribute is set to the same value that it has already, like so: # # $ touch f g # $ setfattr -n user.test -v test f g # # (Now, both f and g refer to the same EA block.) # $ setfattr -n user.test -v test f # # With the bug, an "invalidate: busy buffer" or "invalidate: dirty # buffer" message will be logged when the file system is unmounted. This # patch fixes the problem. # # At the implementation level: # # The code was assuming that ext3_xattr_cache_find cannot return the same # block the inode already is associated with, so testing for (old_bh != # new_bh) would determine whether the old block is resued or an additional # bh is held. This is wrong if the EA block is used by multiple inodes (in # which case it stays in the cache), and the block isn't actually # modified. Instead of testing for (old_bh != new_bh), the code now does # a get_bh() in the branch that keeps the old block, which assures that # new_bh now is either NULL or a handle that must be released at the end # of ext3_xattr_set_handle2(). # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.190 # [PATCH] Make msync(MS_ASYNC) no longer start the I/O # # MS_ASYNC will currently wait on previously-submitted I/O, then start new I/O # and not wait on it. This can cause undesirable blocking if msync is called # rapidly against the same memory. # # So instead, change msync(MS_ASYNC) to not start any IO at all. Just flush # the pte dirty bits into the pageframe and leave it at that. # # The IO _will_ happen within a kupdate period. And the application can use # fsync() or fadvise(FADV_DONTNEED) if it actually wants to schedule the IO # immediately. # # (This has triggered an ext3 bug - the page's buffers get dirtied so fast # that kjournald keeps writing the buffers over and over for 10-20 seconds # before deciding to give up for some reason) # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.191 # [PATCH] struct address_space comments # # From: "Martin J. Bligh" # # Fix the commentary around the address_space fields. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.192 # [PATCH] task_lock commentary fixes # # From: Manfred Spraul # # Update and clarify the incorrect commentary around task_lock() # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.193 # [PATCH] 3c59x EISA tidyup # # From: Marc Zyngier # # The included patch helps 3c59x to display the correct identification # string (3c592 and 3c597 were displayed as 3c590). It also gets rid of # the EISA_bus reference, which is not needed anymore since the driver # has been ported to the EISA probing API. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.971.1.194 # [PATCH] fix file leak in fadvise() # # It can miss an fput() if passed the fd of a file which has no ->mapping. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.1.195 # Tag more user-supplied path strings as being user pointers for # type evaluation. This tags the system call interfaces in # fs/open.c, fs/dcache.c and mm/swapfile.c - and tags the path # walking helper functions. # -------------------------------------------- # 03/04/09 davidm@tiger.hpl.hp.com 1.971.82.5 # ia64: Initial sync with 2.5.67. # -------------------------------------------- # 03/04/09 torvalds@penguin.transmeta.com 1.971.1.196 # Merge http://lia64.bkbits.net/to-linus-2.5 # into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux # -------------------------------------------- # 03/04/09 greg@kroah.com 1.971.83.6 # i2c: clean up i2c-dev.c's formatting, DEBUG, and ioctl mess # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.1 # [SPARC]: Cleanup uaccess headers and add __user attributes. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.2 # [SPARC]: Make SA_ signal mask values explicitly unsigned. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.971.1.197 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.3 # [SPARC64]: Fix copy_in_user args in process.c # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.4 # [SPARC64]: Use __user in ioctl32.c # -------------------------------------------- # 03/04/09 greg@kroah.com 1.971.79.2 # [PATCH] USB: fix uss720 driver to work properly with recent parport changes. # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.971.74.3 # [AGPGART] Fold Intel i7x05 GART into intel-agp driver. # Also includes various other fixes from Matt Tolentino # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.971.74.4 # [AGPGART] ia64 related AGP fixes from David Mosberger. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.74.5 # [AGPGART] Missing C99 struct initialiser for x86-64 GART # -------------------------------------------- # 03/04/10 davej@tetrachloride.(none) 1.971.87.1 # Merge tetrachloride.(none):/mnt/raid/src/kernel/2.5/bk-linus # into tetrachloride.(none):/mnt/raid/src/kernel/2.5/agpgart # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.971.79.3 # [PATCH] USB speedtouch Kconfig fix; CREDITS entry out of order # # Follow the style of other entries in Kconfig. # # CREDITS | 8 ++++---- # drivers/usb/misc/Kconfig | 2 +- # 2 files changed, 5 insertions(+), 5 deletions(-) # -------------------------------------------- # 03/04/09 legoll@free.fr 1.971.79.4 # [PATCH] USB: New USB serial device ID: Asus A600 PDA cradle # # Just managed to get usb-serial connection up and running # with my Asus PDA, great work ! # # If you want to integrate the patches into the kernel tree, # please do so. # -------------------------------------------- # 03/04/09 oliver@neukum.org 1.971.79.5 # [PATCH] USB: remove unnecessary setting of configuration from audio # # audio should not mess with configurations. # -------------------------------------------- # 03/04/09 jcdutton@users.sourceforge.net 1.971.79.6 # [PATCH] USB: Add support for Pentax Still Camera to linux kernel. # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.971.79.7 # [PATCH] USB speedtouch: don't open a connection if no firmware # # How about this one instead. MOD_INC_USE_COUNT is placed before I call # any functions that can sleep. Let's just hope that the call to me doesn't # come after some sleeping in the higher layers... # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.87.2 # [AGPGART] Kconfig cleanups. (Remove no longer needed E7x05 entries) # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.87.3 # [AGPGART] Remove CONFIG_AGP3. # This optioned saved just a handful of bytes, and uglied up the code # quite a lot. Saving less than a page of memory is not as important as # maintainable code. # -------------------------------------------- # 03/04/09 paulus@samba.org 1.971.1.198 # [PATCH] i2c: Add driver for powermac keywest i2c interface # # Here is a patch that adds an i2c bus driver for the i2c interface # found in the "KeyWest" and later combo-I/O chips used in powermacs. # The patch is against Linus' current BK tree. # -------------------------------------------- # 03/04/09 shemminger@osdl.org 1.971.88.1 # [VLAN]: More device registry error handling fixes. # -------------------------------------------- # 03/04/09 yoshfuji@linux-ipv6.org 1.971.88.2 # [IPV{4,6}]: Convert from MOD_{INC,DEC}_USE_COUNT. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.87.4 # [AGPGART] x86-64 Kconfig fixes. # Offering the K7 GARTs on 64bit kernels causes sillyness, like reports of # "unrecognised device, try unsupported". We don't want people to even try # that, so don't offer it in the first place. # # There's really no good reason for offering any of the IA32 era GARTs on a # x86-64 64bit kernel. If Intel (or whoever) ever do an x86-64 clone, a new # gart driver will be started anyways, as has been done for amd-k8-agp. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.87.5 # [AGPGART] Print banner on detecting AMD64 GART. # All the other GART drivers display what they've found, so make this # one follow suit. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.87.6 # [AGPGART] update stale comment in x86-64 GART driver. # -------------------------------------------- # 03/04/09 jsimmons@maxwell.earthlink.net 1.1001 # Merge # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.1 # Annotate sysct with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.2 # Annotate kernel/time.c with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.3 # Annotate uid16 with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.4 # Annotate kernel/ptrace.c with user pointer information # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.5 # [SPARC]: __user tagging in sys_sparc.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.5 # Annotate kernel/printk.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.6 # Fix bad prototypes in kernel/softirq.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.89.7 # Fix kernel/posix-timers.c: # - bad preprocessor test always tested true, even when it shouldn't. # - annotate user pointers with proper annotations. # # Both found by my automatic type checker tool. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.7 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.8 # Merge from DRI CVS: Use the list_entry() macro instead of depending # on the list-head being at the top of the DRI data structures and # using hard casts. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.86.6 # [SPARC]: __user attributes in signal handling. # -------------------------------------------- # 03/04/09 rusty@rustcorp.com.au 1.971.88.3 # [NETFILTER]: Push skb linearization deeper inside of implementation. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.9 # Annotate fs/stat.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.10 # Annotate kernel/futex.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.11 # Annotate kernel/itimer.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.971.87.12 # Annotate read/write paths with user pointer annotations # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.90.1 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.91.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.90.2 # [sparc]: Fix typo in uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.90.3 # [sparc]: Add missing const qualifiers to uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.90.4 # [sparc]: Make sure -m32 gets added to AFLAGS when needed. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.90.5 # [SIGINFO]: asm-generic/siginfo.h needs linux/compiler.h # -------------------------------------------- # 03/04/09 davem@kernel.bkbits.net 1.971.87.13 # Merge davem@nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # into kernel.bkbits.net:/home/davem/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.91.2 # [IPV4]: Do proper netdev module refcounting in tunnel drivers. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.971.91.3 # [IPV6]: Apply ipv4 tunnel module fixes to SIT driver. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.971.91.4 # [IPV6]: Typo, try_get_module --> try_module_get. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.971.92.1 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/10 shemminger@osdl.org 1.971.91.5 # [BRIDGE]: Fix several locking bugs, plus cleanups. # -------------------------------------------- # 03/04/10 perex@suse.cz 1.971.93.1 # ALSA update # - documentation # - control API - added multi-elements to reduce memory usage # - improved preallocation of DMA buffers # - CS46xx driver - added support for secondary codec # - HDSP driver - big update # - firmware is loaded with hdsptool now # - pmac driver updates (fixed oops and beep stuff) # - VIA82xx driver updated # - ymfpci driver updated # - drivers updated to new PnP layer # - wavefront, ad1816a, cs423x, es18xx, interwave, opl3sa2, cmi8330 # # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.94.1 # [AGPGART] Fix up AMD64 references. # Spotted by Andi Kleen. AMD64 is the architecture, not the CPU. # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.999.1.2 # Merge kozmo.(none):/usr/src/linus-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/10 perex@suse.cz 1.971.93.2 # ALSA and PnP update # - compilation fixes # - enhanced linux/pnp.h: # pnp_device_is_isapnp(dev) # pnp_device_is_pnpbios(dev) # isapnp_card_number(dev) # isapnp_csn_number(dev) # -------------------------------------------- # 03/04/10 jsimmons@maxwell.earthlink.net 1.1002 # Merge maxwell.earthlink.net:/usr/src/linus-2.5 # into maxwell.earthlink.net:/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/10 jsimmons@maxwell.earthlink.net 1.1003 # [FBDEV] Made the upper layer code always use the cursor mask of struct fb_cursor inside struct fb_info. This moved memory management of the mask and image data to the upper layers. # # [RADEON FBDEV] Updates for the Radeon 9100. # -------------------------------------------- # 03/04/10 jsimmons@maxwell.earthlink.net 1.1004 # [FBDEV] Made the upper layer code always use the cursor mask of struct fb_cursor inside struct fb_info. This moved memory management of the mask and image data to the upper layers. # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.1005 # Merge bk://fbdev.bkbits.net/fbdev-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.95.1 # Clean up types and remove unnecessary casts from fs/readdir.c. # # Add user pointer annotations. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.95.2 # Add user pointer annotations to fs/seq_file.c # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.95.3 # Add user pointer annotations to fs/super.c # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.971.94.2 # [AGPGART] Remove unnecessary AGP printk's in DRM. # If we build >1 DRM driver into the kernel, we get this lovely output.. # # [drm] Initialized tdfx 1.0.0 20010216 on minor 0 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized r128 2.3.0 20021029 on minor 1 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized radeon 1.8.0 20020828 on minor 2 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized mga 3.1.0 20021029 on minor 3 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i810 1.2.1 20020211 on minor 4 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i830 1.3.2 20021108 on minor 5 # # agpgart already outputs the info about the aperture address & size # before drm initialises, so its just repetition for no purpose. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.95.4 # Merge http://linux-sound.bkbits.net/linux-sound # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.92.2 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.87.14 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.1006 # [FBDEV] EDID support from OpenFirmware on PPC platoforms and from the BIOS on intel platforms. # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.1007 # [RADEON FBDEV] Detect 8 Megs of RAM not 8 Kilobytes. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.971.87.15 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.1008 # Merge kozmo.(none):/usr/src/linus-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.971.87.16 # Add user pointer annotations to fs/select.c # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.971.87.17 # Add a user pointer annotation to sysinfo() # -------------------------------------------- # 03/04/10 jsimmons@kozmo.(none) 1.1009 # [RADEON FBDEV] Compile fixes. # -------------------------------------------- # 03/04/10 pbadari@us.ibm.com 1.971.96.1 # Isn't sd_major() broken ? # # I am little confused about the correctness of sd_major() in drivers/scsi/sd.c. # # static int sd_major(int major_idx) # { # switch (major_idx) { # case 0: # return SCSI_DISK0_MAJOR; # case 1 ... 7: # return SCSI_DISK1_MAJOR + major_idx - 1; # case 8 ... 15: # return SCSI_DISK8_MAJOR + major_idx; # default: # BUG(); # return 0; /* shut up gcc */ # } # } # # So, if major_idx = 8, It returns 143. # But according to major.h, scsi has 128-135 reserved # majors. But it is registering 136 - 143 as its majors. # # #define SCSI_DISK8_MAJOR 128 # #define SCSI_DISK9_MAJOR 129 # #define SCSI_DISK10_MAJOR 130 # #define SCSI_DISK11_MAJOR 131 # #define SCSI_DISK12_MAJOR 132 # #define SCSI_DISK13_MAJOR 133 # #define SCSI_DISK14_MAJOR 134 # #define SCSI_DISK15_MAJOR 135 # -------------------------------------------- # 03/04/10 gandalf@netfilter.org 1.971.91.6 # [NETFILTER]: Fix modify-after-free bug in ip_conntrack. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.971.97.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.971.98.1 # [ALSA]: Recent merge undid all of my build fixes, put them back in. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.971.97.2 # [SCHED]: Some schedulers forget to flush filter list at destroy. # -------------------------------------------- # 03/04/10 jef@linuxbe.org 1.971.97.3 # [IPSEC]: Check xfrm state expiration on input after replay check. # -------------------------------------------- # 03/04/10 jmorris@intercode.com.au 1.971.97.4 # [IPSEC]: Add initial IPCOMP support. # -------------------------------------------- # 03/04/10 ehabkost@conectiva.com.br 1.971.98.2 # [SPARC]: Export phys_base on sparc32. # -------------------------------------------- # 03/04/10 dlstevens@us.ibm.com 1.971.97.5 # [IPV4]: IGMPv3 support, with help from Vinay Kulkarni # -------------------------------------------- # 03/04/10 mrr@nexthop.com 1.971.97.6 # [IPV6]: Allow protocol to percolate up into rt6 routing operations. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.971.97.7 # [IPV4]: Fix IGMP build with CONFIG_IP_MULTICAST disabled. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.971.97.8 # [PKTSCHED]: Fix double-define of __inline__ et al. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.971.87.18 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/11 jsimmons@maxwell.earthlink.net 1.1010 # Merge maxwell.earthlink.net:/usr/src/linus-2.5 # into maxwell.earthlink.net:/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.971.99.1 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.971.87.19 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 rmk@flint.arm.linux.org.uk 1.971.100.1 # [ARM] Manual merge with Linus. # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.971.87.20 # Make sure to kunmap() the right address in fs/nfs/dir.c. # # Found by Rik van Riel: # # "There's a serious bug in the handling of the pointer returned # by kmap_atomic() in nfs/dir.c. The pointer (part of desc) is # passed into find_dirent_name and from there into dir_decode, # which modifies the pointer. # # That means you end up passing a wrong address to kunmap_atomic()." # -------------------------------------------- # 03/04/11 jsimmons@kozmo.(none) 1.1009.1.1 # Merge kozmo.(none):/usr/src/linus-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.971.79.8 # [PATCH] USB: remove configuration change from rtl8150 # # there's no reason this driver should mess with configurations. # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.971.79.9 # [PATCH] USB: remove configuration change from pegasus.c # # the driver should not mess with configurations here. # -------------------------------------------- # 03/04/11 rmk@flint.arm.linux.org.uk 1.971.100.2 # [ARM] Make sys_ipc return ENOSYS for unrecognised IPC calls. # -------------------------------------------- # 03/04/11 kronos@kronoz.cjb.net 1.971.1.199 # [PATCH] i2c: Add i2c-viapro.c driver # -------------------------------------------- # 03/04/11 greg@kroah.com 1.971.1.200 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/11 greg@kroah.com 1.971.87.21 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.971.1.201 # Merge bk://kernel.bkbits.net/gregkh/linux/linus-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 bcollins@debian.org 1.971.1.202 # [PATCH] IEEE-1394/Firewire updates # # - Convert nodemgr to new driver model. # - Convert to new module_param() calls. # - Merged fixes for devfs mkdir and some sleep-in-atomic fixes from # mainline 2.5-bk # - Fix possible memory corruption on highlevel local read/write. # - Fix bitmap usage for some bitops. # - Fix bug in closing ISO stream. # - Fixes for nodemgr probing in the event of a reset storm. # - Workaround for nForce2 firewire chipset. This is preliminary. # - Conversion of SBP-2 to use new driver model in nodemgr, including # providing a driver for firewire unit directories and registering # proper callbacks. # -------------------------------------------- # 03/04/11 george@mvista.com 1.971.1.203 # [PATCH] too much timer simplification... # # Noted by David Mosberger: # # "If someone happens to arm a periodic timer at exactly 256 jiffies (as # ohci happens to do on platforms with HZ=1024), then you end up getting # an endless loop of timer activations, causing a machine hang. # # The problem is that __run_timers updates base->timer_jiffies _before_ # running the callback routines. If a callback re-arms the timer at # exactly 256 jiffies, add_timers() will reinsert the timer into the list # that we're currently processing, which of course will cause the timer to # expire immediately again, etc., etc., ad naseum... " # # The answer here is to move the whole expired list to a local header and # to not look back. # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.971.1.204 # Annotate sys_uselib() with user pointer annotation # -------------------------------------------- # 03/04/11 jsimmons@kozmo.(none) 1.1009.1.2 # Merge kozmo.(none):/usr/src/linus-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/11 akpm@digeo.com 1.971.101.1 # [IPV4]: Fix bootup lockup when !CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.971.101.2 # [BRIDGE]: Kill excessive stack usage in br_ioctl. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.971.101.3 # [EBTABLES]: Get rid of brlock in ebtable_broute. # -------------------------------------------- # 03/04/11 rob@osinvestor.com 1.971.102.1 # [sparc]: Fix uninitialized spinlock in SRMMU code. # -------------------------------------------- # 03/04/11 wesolows@foobazco.org 1.971.102.2 # [sparc]: Attempt mul/div emulation handling on all cpus. # -------------------------------------------- # 03/04/11 jsimmons@maxwell.earthlink.net 1.1011 # [RIVA FBDEV] Cursor fixes. Almost done. At least it looks normal most of the time. # -------------------------------------------- # 03/04/11 jsimmons@maxwell.earthlink.net 1.1012 # Merge maxwell.earthlink.net:/usr/src/linus-2.5 # into maxwell.earthlink.net:/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.971.101.4 # [IPSEC]: Add ipv4 tunnel transformer. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.971.101.5 # [IGMP]: Dont dork with igmp timers on device down if not CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/12 davem@kernel.bkbits.net 1.971.1.205 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/12 patmans@us.ibm.com 1.971.28.9 # [PATCH] 1/5 scsi-locking-2.5 single_lun store scsi_device pointer # # Change single_lun code to use a struct scsi_device *, so that we do not # need an sdev (or queue_lock) while checking if a single_lun target is in # use by a particular scsi_device. # -------------------------------------------- # 03/04/12 patmans@us.ibm.com 1.971.28.10 # [PATCH] 2/5 scsi-locking-2.5 remove lock hierarchy # # Get rid of the lock hierarchy for queue_lock and host_lock (even for the # single_lun case). # -------------------------------------------- # 03/04/12 patmans@us.ibm.com 1.971.28.11 # [PATCH] 3/5 scsi-locking-2.5 prevent looping when processing # # Ensure that we cannot loop forever (however unlikely) when processing the # starved queues. # -------------------------------------------- # 03/04/12 patmans@us.ibm.com 1.971.28.12 # [PATCH] 4/5 scsi-locking-2.5 list_del starved_entry plus use # # list_del the starved_entry when sdev goes away. # # Use GFP_ATOMIC when allocating starget, since we hold a lock. # -------------------------------------------- # 03/04/12 patmans@us.ibm.com 1.971.28.13 # [PATCH] 5/5 scsi-locking-2.5 remove extra sdev2, remove extra # # Remove unneeded sdev2 variable. # # Remove extra log message. # -------------------------------------------- # 03/04/12 jejb@raven.il.steeleye.com 1.971.85.2 # More axboe/patmans conflicts # -------------------------------------------- # 03/04/12 jsimmons@kozmo.(none) 1.1013 # Merge bk://fbdev.bkbits.net/fbdev-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/12 jejb@raven.il.steeleye.com 1.971.85.3 # Merge raven.il.steeleye.com:/home/jejb/BK/scsi-locking-2.5 # into raven.il.steeleye.com:/home/jejb/BK/scsi-misc-2.5 # -------------------------------------------- # 03/04/12 jejb@raven.il.steeleye.com 1.971.84.2 # Merge raven.il.steeleye.com:/home/jejb/BK/scsi-aic7xxx-2.5 # into raven.il.steeleye.com:/home/jejb/BK/scsi-misc-2.5 # -------------------------------------------- # 03/04/12 bcollins@debian.org 1.971.1.206 # [PATCH] Fix module param decleration in pcilynx # -------------------------------------------- # 03/04/12 jmorris@intercode.com.au 1.971.1.207 # [PKTSCHED]: Kill redefinition of IPPROTO_ESP in sch_sfq.c # -------------------------------------------- # 03/04/12 jmorris@intercode.com.au 1.971.1.208 # [IPSEC]: Fix handling of uncompressable packets in tunnel mode. # -------------------------------------------- # 03/04/13 rmk@flint.arm.linux.org.uk 1.971.100.3 # [ARM] Fix exception table handling # # This fixes a build error caused by other changes in 2.5.67. # -------------------------------------------- # 03/04/12 jsimmons@kozmo.(none) 1.1014 # [FBDEV] Improved speed performance. We copy many bytes of data instead of just one at a time. # # [IMSTT FBDEV] Fixed a bug that caused the hardware to lock up when scrolling. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.971.103.1 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/13 dirk.behme@com.rmk.(none) 1.971.100.4 # [ARM PATCH] 1497/1: Cleanup of head.S # # Patch from Dirk Behme # # Please see mail thread '[patch] Cleanup of head.S?' from 25 Feb 2003. Let us remove the third part now. The mapping set by this code is done already. # # The comment of rmk was # # 'I suspect we can kill (3) without hurting stuff that's merged into the # -rmk tree, although I'm sure there's a reason it existed. I'll have # to check my mail archives, but I think there was a machine that required, # but it appears not to be merged.' # # So, let's try and see if somebody cries... # -------------------------------------------- # 03/04/13 spyro@com.rmk.(none) 1.971.100.5 # [ARM PATCH] 1456/1: removes CONFIG_CPU_{26,32} from arch/arm/lib # # Patch from Ian Molton # # see summary # -------------------------------------------- # 03/04/13 spyro@com.rmk.(none) 1.971.100.6 # [ARM PATCH] 1460/1: removes CONFIG_CPU_{26,32} from arch/arm/boot (Makefile) # # Patch from Ian Molton # # See summary # -------------------------------------------- # 03/04/13 spyro@com.rmk.(none) 1.971.100.7 # [ARM PATCH] 1458/1: finish nwfpe CONFIG_CPUnn removal # # Patch from Ian Molton # # missed a bit. apply ontop of earlier patch. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.1 # [PATCH] kobject hotplug fixes # # - allocated storage `envp' was being leaked on an error path # # - kmalloc() returns void*, no need to cast it # # - don't return 0 from a void-returning function # # Greg has acked this patch. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.2 # [PATCH] radix_tree_delete API improvement # # radix_tree_delete() currently returns 0 on success, -ENOENT if there was # nothing to delete. # # But it is more useful to return the address of the deleted item on success # and NULL if there was no matching item. It can potentially save a # lookup+delete operation. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.3 # [PATCH] Fix gen_rtc compilation error # # From: Geert Uytterhoeven # # It updates include/asm-{generic,parisc}/rtc.h for the recent changes in # drivers/char/genrtc.c and include/asm-{m68k,ppc}/rtc.h. # # get_rtc_time() now returns some RTC flags instead of a 0/-1 success/failure # indicator. These flags include: # # - RTC_BATT_BAD: RTC battery is bad (can be detected on PA-RISC) # - RTC_24H: Clock runs in 24 hour mode # # Most of these flags are the same as drivers/char/rtc.c, but RTC_BATT_BAD is a # new one. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.4 # [PATCH] remove the test for null waitqueue in __wake_up() # # I've had a warning in there for 4-5 months and it has never triggered. I # think it's safe to remove this test. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.5 # [PATCH] Remove flush_page_to_ram() # # From: Hugh Dickins # # This patch removes the long deprecated flush_page_to_ram. We have # two different schemes for doing this cache flushing stuff, the old # flush_page_to_ram way and the not so old flush_dcache_page etc. way: # see DaveM's Documentation/cachetlb.txt. Keeping flush_page_to_ram # around is confusing, and makes it harder to get this done right. # # All architectures are updated, but the only ones where it amounts # to more than deleting a line or two are m68k, mips, mips64 and v850. # # I followed a prescription from DaveM (though not to the letter), that # those arches with non-nop flush_page_to_ram need to do what it did # in their clear_user_page and copy_user_page and flush_dcache_page. # # Dave is consterned that, in the v850 nb85e case, this patch leaves its # flush_dcache_page as was, uses it in clear_user_page and copy_user_page, # instead of making them all flush icache as well. That may be wrong: # I'm just hesitant to add cruft blindly, changing a flush_dcache macro # to flush icache too; and naively hope that the necessary flush_icache # calls are already in place. Miles, please let us know which way is # right for v850 nb85e - thanks. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.6 # [PATCH] Fix deadlock with ext3+quota # # From: Jan Kara # # Fixes a deadlock-causing lock-ranking bug between dqio_sem and # journal_start(). # # It sets up the needed infrastructure so that the quota code's sync_dquot() # operation can call into ext3 and arrange for the transaction start to be # nested outside the taking of dqio_sem. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.7 # [PATCH] don't clear PG_uptodate on ENOSPC # # If get_block() returns -ENOSPC __block_write_full_page() is currently # clearing PG_uptodate. # # Tht doesn't make any sense - failure to allocate space (or an IO error) does # not make the page not uptodate. It will create pages which are dirty, mapped # into pagetables and not uptodate, which is a nonsensical state. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.8 # [PATCH] correct vm_page_prot on stack pages # # From: David Mosberger # # The patch below is needed to make it possible to map stack pages # without execution permission (as we do on ia64). # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.9 # [PATCH] convert file_lock to a spinlock # # Time to write a 2M file, one byte at a time: # # Before: # 1.09s user 4.92s system 99% cpu 6.014 total # 0.74s user 5.28s system 99% cpu 6.023 total # 1.03s user 4.97s system 100% cpu 5.991 total # # After: # 0.79s user 5.17s system 99% cpu 5.993 total # 0.79s user 5.17s system 100% cpu 5.957 total # 0.84s user 5.11s system 100% cpu 5.942 total # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.10 # [PATCH] bootmem speedup from the IA64 tree # # From: Christoph Hellwig # # This patch is from the IA64 tree, with some minor cleanups by me. # David described it as: # # This is a performance speed up and some minor indendation fixups. # # The problem is that the bootmem code is (a) hugely slow and (b) has # execution that grow quadratically with the size of the bootmap bitmap. # This causes noticable slowdowns, especially on machines with (relatively) # large holes in the physical memory map. Issue (b) is addressed by # maintaining the "last_success" cache, so that we start the next search # from the place where we last found some memory (this part of the patch # could stand additional reviewing/testing). Issue (a) is addressed by # using find_next_zero_bit() instead of the slow bit-by-bit testing. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.11 # [PATCH] architecture hooks for mem_map initialization # # From: Christoph Hellwig # # This patch is from the IA64 tree, with minor cleanups from me. # # Split out initialization of pgdat->node_mem_map into a separate function # and allow architectures to override it. This is needed for HP IA64 # machines that have a virtually mapped memory map to support big # memory holes without having to use discontigmem. # # (memmap_init_zone is non-static to allow the IA64 code to use it - # I did that instead of passing it's address into the arch hook as # it is done currently in the IA64 tree) # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.12 # [PATCH] Fix kmalloc_sizes[] indexing # # From: Brian Gerst and David Mosberger # # The previous fix to the kmalloc_sizes[] array didn't null-terminate the # correct array. # # Fix that up, and also avoid running ARRAY_SIZE() against an array which is # really a null-terminated list. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.13 # [PATCH] /proc/interrupts allocates too much memory # # From: David Mosberger # # interrupts_open() can easily try to kmalloc() more memory than # supported by kmalloc. E.g., with 16KB page size and NR_CPUS==64, it # would try to allocate 147456 bytes. # # The workaround below is to allocate 4KB per 8 CPUs. Not really a # solution, but the fundamental problem is that /proc/interrupts # shouldn't use a fixed buffer size in the first place. I suppose # another solution would be to use vmalloc() instead. It all feels like # bandaids though. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.14 # [PATCH] vmalloc stats in /proc/meminfo # # From: Matt Porter # # There was a thread a while back on lkml where Dave Hansen proposed this # simple vmalloc usage reporting patch. The thread pretty much died out as # most people seemed focused on what VM loading type bugs it could solve. I # had posted that this type of information was really valuable in debugging # embedded Linux board ports. A common example is where people do arch # specific setup that limits there vmalloc space and then they find modules # won't load. ;) Having the Vmalloc* info readily available is real useful in # helping folks to fix their kernel ports. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.15 # [PATCH] /proc/meminfo documentation # # From: Dave Hansen # # Documents the information in /proc/meminfo # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.16 # [PATCH] percpu_counters: approximate but scalable counters # # Several places in ext2 and ext3 are using filesystem-wide counters which use # global locking. Mainly for the orlov allocator's heuristics. # # To solve the contention which this causes we can trade off accuracy against # speed. # # This patch introduces a "percpu_counter" library type in which the counts are # per-cpu and are periodically spilled into a global counter. Readers only # read the global counter. # # These objects are *large*. On a 32 CPU P4, they are 4 kbytes. On a 4 way # p3, 128 bytes. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.17 # [PATCH] blockgroup_lock: hashed spinlocks for ext2 and ext3 # # ext2 and ext3 per-blockgroup metadata needs locking. An fs-wide lock is # expensive, and a per-blockgroup lock consumes too much storage (up to 32768 # blockgroups per filesystem). We need something in-between. # # blockgroup_locks are very simple hashed spinlocks which provide this # compromise. The size of the lock is scaled by NR_CPUS to implement an # additional speed/space tradeoff. # # These locks are actually fairly generic. However I presented it as something # which is specific to ext2 and ext3 so that people wouldn't go using them all # over the place. They consume a lot of storage. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.18 # [PATCH] use spinlocking in the ext2 block allocator # # From Alex Tomas and myself # # ext2 currently uses lock_super() to protect the filesystem's in-core block # allocation bitmaps. # # On big SMP machines the contention on that semaphore is causing high context # switch rates, large amounts of idle time and reduced throughput. # # The context switch rate can also worsen block allocation: if several tasks # are trying to allocate blocks inside the same blockgroup for different files, # madly rotating between those tasks will cause the files' blocks to be # intermingled. # # On SDET and dbench-style worloads (lots of tasks doing lots of allocation) # this patch (and a similar one for the inode allocator) improve throughout on # an 8-way by ~15%. On 16-way NUMAQ the speedup is 150%. # # What wedo isto remove the lock altogether and just rely on the atomic # semantics of test_and_set_bit(): if the allocator sees a block was free it # runs test_and_set_bit(). If that fails, then we raced and the allocator will # go and look for another block. # # Of course, we don't really use test_and_set_bit() because that # isn'tendian-dependent. New atomic endian-independent functions are # introduced: ext2_set_bit_atomic() and ext2_clear_bit_atomic(). We do not # need ext2_test_bit_atomic(), since even if ext2_test_bit() returns the wrong # result, that error will be detected and naturally handled in the subsequent # ext2_set_bit_atomic(). # # For little-endian machines the new atomic ops map directly onto the # test_and_set_bit(), etc. # # For big-endian machines we provide the architecture's impementation with the # address of a spinlock whcih can be taken around the nonatomic ext2_set_bit(). # The spinlocks are hashed, and the hash is scaled according to the machine # size. Architectures are free to implement optimised versions of # ext2_set_bit_atomic() and ext2_clear_bit_atomic(). # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.19 # [PATCH] use spinlocking in the ext2 inode allocator # # From Alex Tomas and myself # # It is identical in concept to the block allocator change. It uses the same # hashed spinlock. # -------------------------------------------- # 03/04/13 akpm@digeo.com 1.971.104.20 # [PATCH] Put all functions in kallsyms # # From: Rusty Russell # # Introduce _sinittext and _einittext (cf. _stext and _etext), so kallsyms # includes __init functions. # # TODO: Use huffman name compression and 16-bit offsets (see IDE # oopser patch) # -------------------------------------------- # 03/04/13 neilb@cse.unsw.edu.au 1.971.104.21 # [PATCH] kNFSd: nfsd/export.c tidyup and add missing exp_put # # There was a missing exp_put in export.c so that after a client # mounts an exported filesystem, the server would never be able to # unmount, even after trying to unexport. This is fixed by the last # chunk of this patch. # # Also assorted cleanups to the code found while hunting. # -------------------------------------------- # 03/04/13 neilb@cse.unsw.edu.au 1.971.104.22 # [PATCH] kNFSd: Return correct result for ACCESS(READ) on eXecute-only file. # # Currently, an NFSv3 ACCESS check for READ permission on an # eXecute-only file will succeed where it should fail. # # This is because nfsd_permission allows READ access to eXecute only # files so that mode 711 executables can be loaded and run, and # nfsd_access simply uses nfsd_permission. # # This patch changes nfsd_permission to only map eXecute permission to # read permission of MAY_OWNER_OVERRIDE was set. This is only set # when trying to read from a file, so ACCESS will no longer be tricked. # # This change will only affect callers of nfsd_permission that specify # MAY_READ and not MAY_OWNER_OVERRIDE, and nfsd_access is the only # routine that calls nfsd_permission (via fh_verify) that way. # -------------------------------------------- # 03/04/13 neilb@cse.unsw.edu.au 1.971.104.23 # [PATCH] kNFSd: NFSD binary compatibility breakage # # The removal of "struct nfsctl_uidmap" from "nfsctl_fdparm" broke # binary compatiblity on 64-bit platforms (strictly speaking: on all # platforms with alignof(void *) > alignof(int)). The problem is that # nfsctl_uidmap contained a "char *", which forced the alignment of the # entire union to be 64 bits. With the removal of the uidmap, the # required alignment drops to 32 bits. Since the first member is only # 32 bits in size, this breaks compatibility with user-space. Patch # below fixes the problem. # -------------------------------------------- # 03/04/13 neilb@cse.unsw.edu.au 1.971.104.24 # [PATCH] kNFSd: First step to adding state management to NFSv4 server # # A new file "nfs4state.c", and nfs4_setclientid{,_confirm} are moved there, # with lots of code. # -------------------------------------------- # 03/04/13 neilb@cse.unsw.edu.au 1.971.104.25 # [PATCH] md: Fix raid1 oops # # From: Angus Sawyer # # When the last device in a raid1 array is failed (or missing) the r1bio # structure can be released (especially on very fast devices) before # make_request has finished using it. # # This patch gets and puts an extra reference to the r1_bio around the # submission loop, and uses the status in r1_bio to maintain the request status # if the last refernce is held by make_request. # # This is also more correct for write requests, as a write should succeed # if any write succeeded, not only if the last write succceeded. # -------------------------------------------- # 03/04/13 jejb@raven.il.steeleye.com 1.971.84.3 # lasi700 add missing dma-mapping.h #include # # compile fix for PA-RISC # -------------------------------------------- # 03/04/13 jejb@raven.il.steeleye.com 1.971.84.4 # sym53c8xx driver v1: PA-RISC needs same PCI command fix as powerpc # -------------------------------------------- # 03/04/13 jsimmons@kozmo.(none) 1.1015 # Merge kozmo.(none):/usr/src/linus-2.5 # into kozmo.(none):/usr/src/fbdev-2.5 # -------------------------------------------- # 03/04/13 jejb@raven.il.steeleye.com 1.971.104.26 # Merge raven.il.steeleye.com:/home/jejb/BK/scsi-misc-2.5 # into raven.il.steeleye.com:/home/jejb/BK/scsi-for-linus-2.5 # -------------------------------------------- # 03/04/13 cmayor@ca.rmk.(none) 1.971.100.8 # [ARM PATCH] 1453/1: fix clps711x framebuffer "use SRAM?" range # # Patch from cam mayor # # when setting up the framebuffer on the clps711x platform, the code checks to see if your allocated memory area is less than 38400 bytes. If it is, a comment is sent to the kernel output suggesting it could be placed into SRAM. This patch modifies the check so that it is suggested if the allocated memory area is less than OR EQUAL TO 38400 bytes. This value is important as 38400 bytes is exactly the size of a 320 x 240 x 4bpp screen. # -------------------------------------------- # 03/04/13 davem@nuts.ninka.net 1.971.1.209 # [IPV4]: xfrm4_tunnel and ipip need to privateize some symbols. # -------------------------------------------- # 03/04/13 davem@nuts.ninka.net 1.971.103.2 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/13 davem@nuts.ninka.net 1.971.103.3 # [SPARC64]: Update defconfig. # -------------------------------------------- # 03/04/13 davem@nuts.ninka.net 1.971.103.4 # [SPARC64]: file_lock is now a spin lock. # -------------------------------------------- # 03/04/14 jgarzik@redhat.com 1.971.105.1 # Merge redhat.com:/garz/repo/linus-2.5 # into redhat.com:/garz/repo/net-drivers-2.5 # -------------------------------------------- # 03/04/13 zaitcev@redhat.com 1.971.103.5 # [sparc]: pte_file with constant number of bits. # -------------------------------------------- # 03/04/13 davem@kernel.bkbits.net 1.971.1.210 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/14 davem@nuts.ninka.net 1.971.106.1 # [TUN]: Convert from MOD_{INC,DEC}_USE_COUNT to netdev->owner. # -------------------------------------------- # 03/04/14 jejb@raven.il.steeleye.com 1.971.104.27 # fix scsi queue plugging behaviour # # Following recent changes removing blk_queue_empty(), we were # incorrectly plugging the queue some times (most often as part of # the SCSI scan process). This was causing a non-deterministic panic # in the scan code because a destroyed queue was sometimes being # unplugged and run. # -------------------------------------------- # 03/04/14 chris@wirex.com 1.971.106.2 # [PATCH] remove __sk_filter. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.971.1.211 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.971.1.212 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/14 mikpe@csd.uu.se 1.971.1.213 # [PATCH] lapic_nmi_watchdog resume fix # # I managed to add a bug to the local APIC NMI watchdog's # resume procedure in the driver model conversion for 2.5.67. # The problem is that the resume procedure simply calls the # enable procedure. If the NMI watchdog has been disabled by # another driver (like oprofile or perfctr), then the NMI # watchdog will incorrectly be re-enabled. # # I discovered this when updating the perfctr driver for 2.5.67 # and seeing unexpected NMIs after a resume from apm --suspend. # # We can fix this by unregistering the NMI watchdog from the # driver model when disabling it (like the code did before the # driver model changes), or by remembering the previous state # at suspend and checking it at resume. The patch below uses # the second, simpler, approach. Tested, please apply. # -------------------------------------------- # 03/04/14 Kai.Makisara@kolumbus.fi 1.971.1.214 # [PATCH] SCSI tape ILI and timeout fixes # # This contains the following changes: # - ILI fixed to work with really old drives # - message printed in case block larger than read() # - long timeout used when creating a tape partition # -------------------------------------------- # 03/04/14 Kai.Makisara@kolumbus.fi 1.971.1.215 # [PATCH] SCSI tape EOT write fixes # # This contains the following changes: # - EOT detection fixed when writing in fixed block mode # - asynchronous writes in fixed block mode and write threshold removed # to enable the EOT fixes (the parameter accepted for compatibility) # -------------------------------------------- # 03/04/14 Kai.Makisara@kolumbus.fi 1.971.1.216 # [PATCH] SCSI tape sysfs and module parameter additions # # This contains the following changes: # - export some driver parameters in sysfs # - use new module parameter definitions # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1016 # Merge http://fbdev.bkbits.net/fbdev-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/14 rmk@arm.linux.org.uk 1.1017 # [PATCH] flush_cache_mm in zap_page_range # # unmap_vmas() eventually calls tlb_start_vma(), where most architectures # flush caches as necessary. The flush here seems to make the # flush_cache_range() in zap_page_range() redundant, and therefore can be # removed. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1018 # Merge bk://bk.arm.linux.org.uk/linux-2.5-rmk # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1019 # [PATCH] s390: base s390 fixes. # # s390 fixes: # - Initialize timing related variables first and then enable the timer interrupt. # - Normalize nano seconds to micro seconds in do_gettimeofday. # - Add types for __kernel_timer_t and __kernel_clockid_t. # - Fix ugly bug in switch_to: set prev to the return value of resume, otherwise # prev still contains the previous process at the time resume was called and # not the previous process at the time resume returned. They differ... # - Add missing include to get the kernel compiled. # - Get a closer match with the i386 termios.h file. # - Cope with INITIAL_JIFFIES. # - Define cpu_relax to do a cpu yield on VM and LPAR. # - Don't reenable interrupts in program check handler. # - Add pte_file definitions. # - Fix PT_IEEE_IP special case in ptrace. # - Use compare and swap to release the lock in _raw_spin_unlock. # - Introduce invoke_softirq to switch to async. interrupt stack. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1020 # [PATCH] s390: syscall numbers > 255. # # Add support for system calls with numbers > 255. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1021 # [PATCH] s390: common i/o layer update. # # Common i/o layer fixes: # - Fix for path no operational condition in cio_start. # - Fix handling of user interruption parameter. # - Add code to wait for devices in init_ccw_bus_type. # - Move qdio states out of main cio state machine. # - Reworked chsc data structures. # - Add ccw_device_start_timeout. # - Handle path verification required flag. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1022 # [PATCH] s390: console changes. # # s390 console fixes for 3215 and sclp. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1023 # [PATCH] s390: uni-processor builds. # # Fixes for s390 kernel configured with CONFIG_SMP=n. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1024 # [PATCH] s390: dasd driver fixes. # # s390 dasd driver fixes: # - Take request queue lock in dasd_end_request. # - Make it work with CONFIG_DEVFS_FS=y. # - Properly wait for the root device. # - Cope with requests killed due to failed channel path. # - Improve reference counting. # - Remove devno from struct dasd_device. # - Remove unnecessary bdget/bdput calls. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1025 # [PATCH] s390: dasd driver coding style (1/2) # # s390 dasd driver: # - Coding style adaptions. Removed almost all typedefs from the dasd driver. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1026 # [PATCH] s390: dasd driver coding style (2/2) # # s390 dasd driver: # - Coding style adaptions. Removed almost all typedefs from the dasd driver. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1027 # [PATCH] s390/s390x unification (1/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1028 # [PATCH] s390/s390x unification (2/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1029 # [PATCH] s390/s390x unification (3/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 yoshfuji@linux-ipv6.org 1.971.106.3 # [IPV6]: Fixed multiple mistake extension header handling. # - double free if sending Parameter Problem message in reassembly code. # - (sometimes) broken checksum # - HbH not producing unknown header; it is only allowed at the beginning of # the exthdrs chain. # - wrong pointer value in Parameter Problem message. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1030 # [PATCH] s390/s390x unification (4/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1031 # [PATCH] s390/s390x unification (5/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1032 # [PATCH] s390/s390x unification (6/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 schwidefsky@de.ibm.com 1.1033 # [PATCH] s390/s390x unification (7/7) # # Merge s390x and s390 to one architecture. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1034 # Remove all of arch/s390x and include/asm-s390x, since the 390x # architecture is now just a 64-bit configuration option of the # basic s390 architecture. # -------------------------------------------- # 03/04/14 davem@nuts.ninka.net 1.971.106.4 # [NET]: Use time_before in dst_set_expires. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1035 # Store EDID only when CONFIG_VIDEO_SELECT is set and edid # function actually exists. # -------------------------------------------- # 03/04/14 geert@linux-m68k.org 1.1036 # [PATCH] Atari Atyfb fixes # # Atyfb fixes for Atari: # - Add missing allocation of default_par # - Kill warnings in assignments # -------------------------------------------- # 03/04/14 geert@linux-m68k.org 1.1037 # [PATCH] M68k module support # # M68k: Add module support (from Roman Zippel) # -------------------------------------------- # 03/04/14 geert@linux-m68k.org 1.1038 # [PATCH] M68k IDE irq # # IDE: Print IRQ number in decimal on m68k # -------------------------------------------- # 03/04/14 geert@linux-m68k.org 1.1039 # [PATCH] Amiga keyboard updates # # Amiga keyboard: fix default keyboard mappings: # - Map the parentheses keys on the numeric keypad to KPLEFTPAREN and # KPRIGHTPAREN (was: NUMLOCK and SCROLLLOCK) # - Map the Help key to HELP (was: F11) # - Map the Amiga keys to LEFTMETA and RIGHTMETA (was: RESERVED) # -------------------------------------------- # 03/04/14 geert@linux-m68k.org 1.1040 # [PATCH] Amiga Gayle IDE fixes # # Amiga Gayle IDE fixes: Set hwif->mmio to 2 to prevent the generic IDE core from # messing with our resources # -------------------------------------------- # 03/04/14 acme@conectiva.com.br 1.1041 # [PATCH] add include uaccess.h to drivers/char/sx.c # -------------------------------------------- # 03/04/14 bcollins@debian.org 1.1042 # [PATCH] Fix nodemgr.c compile # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1043 # [PATCH] Input: change input_init() to be a subsys initcall # # This fixes oopses when it and the hid core are compiled into the kernel. # -------------------------------------------- # 03/04/14 davem@nuts.ninka.net 1.971.106.5 # [PKT_SCHED]: Remove ugly arch ifdefs from generic code. # -------------------------------------------- # 03/04/14 davem@nuts.ninka.net 1.971.106.6 # [NETFILTER IPV6]: Fix route leak in ip6_route_me_harder. # -------------------------------------------- # 03/04/14 jgrimm2@us.ibm.com 1.971.106.7 # [IPV6]: Catch up SCTP to inet6_protocol changes. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1044 # Make the x86 flags save/restore code check the type of the # macro argument, so that portability issues will be found in # a timely manner. # -------------------------------------------- # 03/04/14 torvalds@home.transmeta.com 1.1045 # Fix incorrect 'flags' usage pointed out by stricter type checking. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1046 # [PATCH] missing file_lock conversions # # A few places were missing the rwlock->spinlock conversion. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1047 # [PATCH] Fix oprofile on hyperthreaded P4's # # From: Philippe Elie # # - oprofile is currently only profiling one sibling. Fix that with # appropriate register settings. # # - fix an oops which could occur if the userspace driver were to request a # non-existent resource. # # - in NMI handler counter_config[i].event is accessible from user space so # user can change the event during profiling by echo xxx > # /dev/oprofile/event # # - event mask was wrong, the bit field is 6 bits length not 5, events # SSE_INPUT_ASSIST and X87_SIMD_MOVES_UOP was affected by masking high bit of # event number. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1048 # [PATCH] flush_work_queue() fixes # # The workqueue code currently has a notion of a per-cpu queue being "busy". # flush_scheduled_work()'s responsibility is to wait for a queue to be not busy. # # Problem is, flush_scheduled_work() can easily hang up. # # - The workqueue is deemed "busy" when there are pending delayed # (timer-based) works. But if someone repeatedly schedules new delayed work # in the callback, the queue will never fall idle, and flush_scheduled_work() # will not terminate. # # - If someone reschedules work (not delayed work) in the work function, that # too will cause the queue to never go idle, and flush_scheduled_work() will # not terminate. # # So what this patch does is: # # - Create a new "cancel_delayed_work()" which will try to kill off any # timer-based delayed works. # # - Change flush_scheduled_work() so that it is immune to people re-adding # work in the work callout handler. # # We can do this by recognising that the caller does *not* want to wait # until the workqueue is "empty". The caller merely wants to wait until all # works which were pending at the time flush_scheduled_work() was called have # completed. # # The patch uses a couple of sequence numbers for that. # # So now, if someone wants to reliably remove delayed work they should do: # # # /* # * Make sure that my work-callback will no longer schedule new work # */ # my_driver_is_shutting_down = 1; # # /* # * Kill off any pending delayed work # */ # cancel_delayed_work(&my_work); # # /* # * OK, there will be no new works scheduled. But there may be one # * currently queued or in progress. So wait for that to complete. # */ # flush_scheduled_work(); # # # The patch also changes the flush_workqueue() sleep to be uninterruptible. # We cannot legally bale out if a signal is delivered anyway. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1049 # [PATCH] fix tty shutdown race # # use-after-free races have been seen due to the workqueue timer in the tty # structure going off after the tty was freed. # # Fix that up by using cancel_scheduled_work() and flush_scheduled_work(). # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1050 # [PATCH] genrtc: jiffies type fix # # use `unsigned long' for a jiffies-holding type. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1051 # [PATCH] export kernel_fpu_begin() to GPL modules # # drivers/md/xor.c needs kernel_fpu_begin() for the mmx checksumming functions. # So export that to GPL modules. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1052 # [PATCH] Posix timer hang fix # # From: george anzinger # # The MAJOR problem was a hang in the kernel if a user tried to delete a # repeating timer that had a signal delivery pending. I was putting the # task in a loop waiting for that same task to pick up the signal. OUCH! # # A minor issue relates to the need by the glibc folks, to specify a # particular thread to get the signal. I had this code in all along, # but somewhere in 2.5 the signal code was made POSIX compliant, i.e. # deliver to the first thread that doesn't have it masked out. # # This now uses the code from the above mentioned clean up. Most # signals go to the group delivery signal code, however, those # specifying THREAD_ID (an extension to the POSIX standard) are sent to # the specified thread. That thread MUST be in the same thread group as # the thread that creates the timer. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1053 # [PATCH] fix MCE startup ordering problems # # The MCE code is setting up a timer whose handler uses the workqueue code # before workqueue is initialised. If you boot slowly it oopses. # # Convert the MCE code to use an initcall. # -------------------------------------------- # 03/04/14 akpm@digeo.com 1.1054 # [PATCH] Resource management for NFS... # # From: Trond Myklebust # # The patch fixes some problems with NFS under heavy writeout. # # NFS pages can be in a clean but unreclaimable state. They are unreclaimable # because the server has not yet acked the write - we may need to "redirty" # them if the server crashes. # # These are referred to as "unstable" pages. We need to count them alongside # dirty and writeback pages when making flushing and throttling decisions. # Otherwise the machine can be flooded with these pages and the VM has # problems. # -------------------------------------------- # 03/04/14 david-b@pacbell.net 1.1055 # [PATCH] USB: disconnect cleanup, new HCD callback # # Here's a streamlined version: doesn't require the unlink # cleanup, and expects the *hci-hcd updates later. Smaller, # and sanity checked against all three major HCDs. # # - reverts that unlink() patch: disconnect() callbacks # can continue to act like they always have. # # - adds new "disable that endpoint" support, necessary # for safely changing configurations or altsettings # as well as physical disconnect (which is almost the # same as setting config to zero, except for ep0). # # - NEW BEHAVIOUR: usbcore cleans up after drivers that # return from disconnect() with urbs still linked, by # using the new "disable that endpoint" support. # # Because it doesn't have any *hci-hcd updates, the hardware # synch needed by EHCI and OHCI (not UHCI) still gets done # through the bus->deallocate(dev) call ... not where we've # ever needed it, but 2.3-compatible (and finally fixable). # # That gets rid of some problematic disconnect scenarios, and # other fixes can be phased in over time: the *hci-hcd updates # to relocate the hardware synch point so it always happens in # a task context, and disabling endpoints before their configs # change (invalidating all HC state). # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1056 # [PATCH] USB: fix up spin_unlock_irqrestore() issues in previous patch # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1057 # [PATCH] USB: add better check to prevent oops in hcd_unlink_urb() # -------------------------------------------- # 03/04/14 david-b@pacbell.net 1.1058 # [PATCH] disconnect cleanup, new HCD callback # # Attached, find a patch that "ought to" teach OHCI how to do that # cleanup, by implementing the new callback. (And the first half # is the patch you applied, with that irqsave tweak -- so you should # already have it.) # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1059 # [PATCH] USB: kl5kusb105 fix up errors found by smatch # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1060 # [PATCH] USB: kobil_sct fix up errors found by smatch # -------------------------------------------- # 03/04/14 david-b@pacbell.net 1.1061 # [PATCH] USB: DocBook/usb.tmpl patch # # remove duplicated word, fix an unclear implication. # -------------------------------------------- # 03/04/14 henning@meier-geinitz.de 1.1062 # [PATCH] USB scanner.c endpoint detection fix # # This patch fixes the endpoint numbers. They were numbered from 1 to n # but that assumption is not correct in all cases. # -------------------------------------------- # 03/04/14 david-b@pacbell.net 1.1063 # [PATCH] USB: EHCI disconnect cleanup # # So here's the EHCI implementation of that new callback, # morphed/simplified from the old "free_config" one (which # is now gone). It looks almost identical to the OHCI # version, except the dummy TDs work a bit differently. # # Again, drivers that clean themselves up in disconnect() # shouldn't notice this change. I didn't re-test this; # I don't have devices with the other kind of driver. You # should do so with one of yours (high speed hub and TT). # # There are still about half a dozen places in usbcore # and the HCDs that would benefit from using this new # callback, FWIW. I'd call them non-critical bugfixes # that should wait a bit, while this batch shakes out. # -------------------------------------------- # 03/04/14 arndt@lin02384n012.mc.schoenewald.de 1.1064 # [PATCH] USB: Patch against unusual_devs.h to enable Pontis SP600 # -------------------------------------------- # 03/04/14 baldrick@wanadoo.fr 1.1065 # [PATCH] USB speedtouch: discard packets for non-existant vcc's # # I broke part of the udsl_decode_rawcell logic in a previous patch, leading to # possible hangs on startup/shutdown. I've attached the 2.4 and 2.5 versions. # Thanks to Subodh Srivastava and Ted Phelps for their bug reports. Here is the # 2.5 patch included inline for reference: # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1066 # [PATCH] USB: io_edgeport: stop unlinking a urb that we don't need to unlink. # -------------------------------------------- # 03/04/14 greg@kroah.com 1.1067 # [PATCH] USB: keyspan: fixed up might_sleep() problems on device close. # -------------------------------------------- # 03/04/14 randolph@tausq.org 1.1054.1.1 # [PATCH] {get,set}affinity unification # # This one gets rid of sys32_{get,set}affinity in favor of a unified # compat implementation. # -------------------------------------------- # 03/04/15 rth@are.twiddle.net 1.1054.1.2 # Merge are.twiddle.net:/home/rth/BK/linus-2.5 # into are.twiddle.net:/home/rth/BK/axp-2.5 # -------------------------------------------- # 03/04/15 ink@jurassic.park.msu.ru 1.1054.1.3 # [PATCH] alpha: execve() fix # # The 2.5 kernels may hang on execve(). Most easily this can be reproduced # by submitting forms in mozilla, apparently because it does execve with # very long argument strings. # That's what happens in do_execve, I suppose: # bprm.mm = mm_alloc(); # ... # init_new_context(current, bprm.mm); here we update current ptbr # with new mm->pgd # ... # copy_strings; # interrupt -> do_softirq -> switch to ksoftirqd # ... # switch back to do_execve; # copy_strings - immediate page fault in copy_user that we can't # handle because the new ptbr has been activated # after context switch and current->mm is not # valid anymore. # # The fix is to not update ptbr for current task in init_new_context(), # as we do it later in activate_mm() anyway. # # With it my (UP) boxes look quite stable so far. # # Ivan. # -------------------------------------------- # 03/04/15 ink@jurassic.park.msu.ru 1.1054.1.4 # [PATCH] alpha: move_initrd fix (from Jeff Wiedemeier) # # While testing our upcoming kernel update for 7.2 alpha, I've encountered # a problem with move_initrd. It allocates a page-aligned chunk to move # the initrd into, but it doesn't allocate the entire last # page. Subsequent bootmem allocations can then be filled from the last # page used be the initrd. This then becomes a problem when the initrd # memory is released. # -------------------------------------------- # 03/04/15 ink@jurassic.park.msu.ru 1.1054.1.5 # [PATCH] alpha: lynx support # # Forward port of Jay's 2.4 patch. # Also I've cleaned up EISA configury - we only need it for # systems with EISA. # # Ivan. # -------------------------------------------- # 03/04/15 arashi@yomerashi.yi.org 1.1054.1.6 # [ALPHA] Include module.h for EXPORT_SYMBOL. # -------------------------------------------- # 03/04/15 torvalds@penguin.transmeta.com 1.1054.2.1 # Fix typo (and logic bug that the typo hid) in bit value # testing. # # Found by 'sparse', my source parser tool. # -------------------------------------------- # 03/04/15 drepper@redhat.com 1.1054.2.2 # [PATCH] unwinding for vsyscall code # # Now that the kernel provides code user programs are executing directly # (I mean the vsyscall code on x86) it is necessary to add unwind # information for that code as well. The unwind information is used not # only in C++ code. # # This patch adds a AT_SYSINFO_EH_FRAME ELF aux-table value that points to # the unwinding block description for the sysinfo frame, and makes sure # the AT_* value is passed to applications. It defines the static data # for the unwind blocks (two, one for int80 and the other for sysenter), # and finally adds code to copy the data in place. # -------------------------------------------- # 03/04/15 rth@dorothy.sfbay.redhat.com 1.1054.1.7 # [ALPHA] Elide cabriolet_init_irq for CONFIG_ALPHA_PC164. # -------------------------------------------- # 03/04/15 torvalds@penguin.transmeta.com 1.1054.1.8 # Merge bk://are.twiddle.net/axp-2.5 # into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux # -------------------------------------------- # 03/04/15 davem@nuts.ninka.net 1.1054.1.9 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/15 george@mvista.com 1.1054.3.1 # [PATCH] Cleanups for posix timer hang fix # # Clean up "pendcount" locking (or rather - lack there-of) by making it a # per-timer thing and thus automatically protected by the timer lock. # # Fix whitespace damage. # -------------------------------------------- # 03/04/15 rusty@rustcorp.com.au 1.1054.1.10 # [NETFILTER_IPV4]: De-linearization of IP Connection Tracking. # # This converts connection tracking and all the connection tracking # modules to handle non-linear skbs. Enough interfaces have been # broken in the process that old helpers won't compile. # # Interfaces which used to take a "void *data, int len" or # "struct iphdr *iph, int len" now take the skb itself (and an offset to # the data in the case of the first interface), which is not # linearized in any way (although Alexey says after ip_rcv the IP header # is always linear, so IPv4 netfilter hooks can always assume a linear # IP hdr). # # Helpers which examine data (amanda, FTP, IRC) now copy it into a buffer # and examine that. # -------------------------------------------- # 03/04/15 davidm@napali.hpl.hp.com 1.1054.3.2 # [PATCH] module symbol fix # # Fix for trivial typo. Without it, you can't insert anything on top of # agpgart.ko because the agp_register_driver() will erroneously pick up # the symbol version from agp_backend_acquire(). # -------------------------------------------- # 03/04/15 jaharkes@cs.cmu.edu 1.1054.3.3 # [PATCH] Fix coda/devfs oops # # The problem is caused by the devfs_mk_dir simplification that went in a # couple of weeks ago that didn't update one of the coda call-sites. # -------------------------------------------- # 03/04/16 dlstevens@us.ibm.com 1.1054.1.11 # [IPV6]: Add MLDv2 support. # -------------------------------------------- # 03/04/16 schwidefsky@de.ibm.com 1.1054.3.4 # [PATCH] s390 network driver fixes # # - lcs: Don't free net_device in lcs_stop_device. # - lcs: Reset card after LGW initiaited stoplan. # - lcs: Fix bug in lcs_tasklet # - ctc: Get channel structure from private pointer. Remove __NO_VERSION__. # - lcs,ctc,iucv: Remove MOD_INC_USE_COUNT/MOD_DEC_USE_COUNT. Set dev->owner. # -------------------------------------------- # 03/04/16 jgarzik@hum.(none) 1.1054.3.5 # Merge hum.(none):/garz/repo/linus-2.5 # into hum.(none):/garz/repo/net-drivers-2.5 # -------------------------------------------- # 03/04/16 yoshfuji@linux-ipv6.org 1.1054.1.12 # [IPV6]: Set noblock to 1 in NDISC sock_alloc_send_skb calls. # -------------------------------------------- # 03/04/16 gandalf@wlug.westbo.se 1.1054.1.13 # [NETFILTER IPV6]: Fix Makefile typo. # -------------------------------------------- # 03/04/16 yoshfuji@linux-ipv6.org 1.1054.1.14 # [NET]: Use fl6_{src,dst} etc. # -------------------------------------------- # 03/04/16 davidm@napali.hpl.hp.com 1.1054.4.1 # [PATCH] fix fs->lock deadlock with emulated name lookup # # The patch below is needed to avoid a deadlock on fs->lock. Without # the patch, if __emul_lookup_dentry() returns 0, we fail to reacquire # current->fs->lock and then go ahead to read_unlock() it anyhow. Bad # for your health. # # I believe the bug was introduced when the fast pathwalk was reverted # in order to introduce the RCU lockless path walking. # -------------------------------------------- # 03/04/16 torvalds@penguin.transmeta.com 1.1054.4.2 # Annotate sys_nfsservctl() with user pointer annotations # -------------------------------------------- # 03/04/16 torvalds@penguin.transmeta.com 1.1054.4.3 # Fix user pointer annotations in more places, now that 'sparse' # verifies declarations against definitions and checks argument # types. # -------------------------------------------- # 03/04/16 torvalds@penguin.transmeta.com 1.1054.4.4 # Annotate namespace system calls (mount, umount, pivot_root etc) # with user pointer annotations. # -------------------------------------------- # 03/04/16 torvalds@penguin.transmeta.com 1.1054.4.5 # Add more user pointer annotations. # -------------------------------------------- # 03/04/16 greg@kroah.com 1.1068 # Merge kroah.com:/home/linux/linux/BK/bleed-2.5 # into kroah.com:/home/linux/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/16 davem@kernel.bkbits.net 1.1054.1.15 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/16 torvalds@home.transmeta.com 1.1054.1.16 # Merge http://gkernel.bkbits.net/net-drivers-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/16 tausq@debian.org 1.1054.1.17 # [PATCH] getrlimit,setrlimit,getrusage,wait4 unification # -------------------------------------------- # 03/04/17 eli.carter@com.rmk.(none) 1.1054.5.1 # [ARM PATCH] 1501/1: fix a path name in comment # # Patch from Eli Carter # # Fixes the filename in the comment in include/asm-arm/arch/iop3xx/timex.h # # Applies cleanly to 2.5.67-rmk1 # -------------------------------------------- # 03/04/17 eli.carter@com.rmk.(none) 1.1054.5.2 # [ARM PATCH] 1502/1: rename IOP310 config vars to IOP3XX # # Patch from Eli Carter # # # Tue Apr 15 14:41:15 CDT 2003 ejc@rnd-linux-c84 # # config-rename # # # # This patch renames the IOP310 config variables to IOP3XX in preparation for # # IOP321 support. # # # # Diff'ed against 2.5.65-rmk1+1472-4 # # Applies to 2.5.67-rmk1 with an offset. # # # # arch/arm/Kconfig | 14 +++++----- # # arch/arm/Makefile | 2 - # # arch/arm/def-configs/iq80310 | 15 +++++----- # # arch/arm/kernel/debug.S | 2 - # # arch/arm/mach-iop3xx/Kconfig | 49 ++++++++++++++++++++++------------- # # arch/arm/mach-iop3xx/Makefile | 8 ++--- # # include/asm-arm/arch-iop3xx/memory.h | 2 - # # include/asm-arm/arch-iop3xx/timex.h | 2 - # # 8 files changed, 54 insertions(+), 40 deletions(-) # # # -------------------------------------------- # 03/04/17 eli.carter@com.rmk.(none) 1.1054.5.3 # [ARM PATCH] 1503/1: Adds basic support for the iq80321 board # # Patch from Eli Carter # # # Tue Apr 15 16:07:34 CDT 2003 ejc@rnd-linux-c84 # # add-iq80321 # # # # Adds basic support for the iq80321 board. # # # # Diff'ed against 2.5.65-rmk1+1472-4+1502 # # Applies to 2.5.67-rmk1+1502 with offsets # # # # arch/arm/boot/Makefile | 1 # # arch/arm/boot/compressed/head-xscale.S | 6 # # arch/arm/def-configs/iq80321 | 676 ++++++++++++++++++++++++++++++ # # arch/arm/kernel/debug.S | 10 # # arch/arm/kernel/entry-armv.S | 22 # # arch/arm/mach-iop3xx/Kconfig | 12 # # arch/arm/mach-iop3xx/Makefile | 16 # # arch/arm/mach-iop3xx/arch.c | 26 + # # arch/arm/mach-iop3xx/iop321-irq.c | 95 ++++ # # arch/arm/mach-iop3xx/iop321-pci.c | 257 +++++++++++ # # arch/arm/mach-iop3xx/iop321-time.c | 92 ++++ # # arch/arm/mach-iop3xx/iq80321-pci.c | 98 ++++ # # arch/arm/mach-iop3xx/mm-321.c | 64 ++ # # arch/arm/mm/proc-xscale.S | 19 # # include/asm-arm/arch-iop3xx/hardware.h | 17 # # include/asm-arm/arch-iop3xx/iop321-irqs.h | 83 +++ # # include/asm-arm/arch-iop3xx/iop321.h | 143 ++++++ # # include/asm-arm/arch-iop3xx/iq80321.h | 17 # # include/asm-arm/arch-iop3xx/irqs.h | 67 -- # # include/asm-arm/arch-iop3xx/memory.h | 11 # # include/asm-arm/arch-iop3xx/serial.h | 11 # # include/asm-arm/arch-iop3xx/timex.h | 6 # # include/asm-arm/arch-iop3xx/uncompress.h | 7 # # include/asm-arm/mach/pci.h | 4 # # 24 files changed, 1691 insertions(+), 69 deletions(-) # -------------------------------------------- # 03/04/17 greg@kroah.com 1.1069 # Cset exclude: arndt@lin02384n012.mc.schoenewald.de|ChangeSet|20030415031138|37565 # -------------------------------------------- # 03/04/17 akpm@digeo.com 1.1054.1.18 # [PATCH] Use WARN_ON in local_bh_enable() # # This BUG_ON is triggering via ppp's line discipline flushing, due to # brokenness in tty_io.c. # # We need to fix tty. Meanwhile, let's not gratuitously nuke people's boxes. # -------------------------------------------- # 03/04/17 akpm@digeo.com 1.1054.1.19 # [PATCH] Handle invalid pfns in page_add/remove_rmap # # My recent micro-optmisation to these functions broke the pfn_valid() # checks. Revert it. # -------------------------------------------- # 03/04/17 akpm@digeo.com 1.1054.1.20 # [PATCH] Fix orlov allocator boundary case # # In the interests of SMP scalability the ext2 free blocks and free inodes # counters are "approximate". But there is a piece of code in the Orlov # allocator which fails due to boundary conditions on really small # filesystems. # # Fix that up via a final allocation pass which simply uses first-fit for # allocation of a directory inode. # -------------------------------------------- # 03/04/17 bcollins@debian.org 1.1054.1.21 # [PATCH] IEEE-1394/Firewire updates # # - Add driver registration for dv1394/video1394/raw1394. # - Fix 3 sleep-while-atomic bugs in ohci1394 and ieee1394. # - Cleanup some bus-reset handling in ohci1394. # - Add empty config-rom handling. # - Check and handle SBP-2 logins active/available for non-exclusive # logins. # - Fix bug in SBP-2 DMA cleanup. # -------------------------------------------- # 03/04/17 hch@lst.de 1.1054.1.22 # [PATCH] fix devfs support in i386 microcode driver # # register a /dev/cpu/microcode symlink instead of a regular file # with the same name - regular file support is gone in devfs. # -------------------------------------------- # 03/04/17 hch@lst.de 1.1054.1.23 # [PATCH] bring devfs_register calls in dvb in shape # # Trying to always have a NULL first argument to simplify devfs code # big time in mid-term. (Especially in preparation of Adam's smalldevfs). # -------------------------------------------- # 03/04/17 hch@lst.de 1.1054.1.24 # [PATCH] make devpts filesystem mandatory even for CONFIG_DEVFS # # This patch rips out handling of UNIX98 ptys from devfs. We already # have a special small filesystem to handle it (devpts) that's always # compiled in anyway. This allows to get rid of all DEVFS_FL* flags and # some gunk in devfs. # -------------------------------------------- # 03/04/17 hch@lst.de 1.1054.1.25 # [PATCH] remove DEVFS_FL_* # # Okay, all flags are gone from devfs callers, time to remove the gunk # handling it. devfs_register prototype will change later. # -------------------------------------------- # 03/04/17 hch@lst.de 1.1054.1.26 # [PATCH] dm devfs fix # # Don't pass DEVFS_FL_CURRENT_OWNER to devfs_register, the uid/gid of new # nodes should always be 0. # -------------------------------------------- # 03/04/17 eli.carter@com.rmk.(none) 1.1054.5.4 # [ARM PATCH] 1506/1: Add iq80321 MTD mapping # # Patch from Eli Carter # # # Thu Apr 17 14:05:58 CDT 2003 ejc@rnd-linux-c84 # # iq80321-mtd # # # # Add the MTD mapping for the flash chip on the iq80321 board. # # The drivers/mtd/maps/iq80321.c file comes from 2.4.19-rmk4-ds2, and is # # essentially a copy of the iq80310.c file in the same directory. # # This version used C99 initializers # # # # Diff'ed against 2.5.65-rmk1+1472-4+1502-3 # # Applies cleanly to linux-2.5.67-rmk1+1502-3 # # # # arch/arm/def-configs/iq80321 | 61 ++++++++++----- # # drivers/mtd/maps/Kconfig | 8 ++ # # drivers/mtd/maps/Makefile | 1 # # drivers/mtd/maps/iq80321.c | 169 +++++++++++++++++++++++++++++++++++++++++++ # # 4 files changed, 218 insertions(+), 21 deletions(-) # # # -------------------------------------------- # 03/04/17 rmk@flint.arm.linux.org.uk 1.1054.5.5 # [ARM] Fix Kconfig breakage in arch/arm/mach-iop3xx/Kconfig # # When a "depends" statement against all configuration options of a choice, # which causes all options of that choice to be disabled, it sends Kconfig # into an infinite loop. Move the "depends" clause to the choice statement # instead. # -------------------------------------------- # 03/04/17 greg@kroah.com 1.1070 # [PATCH] USB: fix oops in usb_hotplug for root devices # -------------------------------------------- # 03/04/17 torvalds@home.transmeta.com 1.1071 # Merge bk://kernel.bkbits.net/gregkh/linux/linus-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1072 # [PATCH] H8300 support # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1073 # [PATCH] another broken APM bios # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1074 # [PATCH] new summit ID # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1075 # [PATCH] update visws to use generic mask names # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1076 # [PATCH] use the mach resources we added before # # Now hw resources can be per mach- and we dont need a pile of ugly # ifdefs for weird shite # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1077 # [PATCH] generalise mptable access # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1078 # [PATCH] use names for PIT access. Not all PIT is the same location # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1079 # [PATCH] Update proc.c for renamed fpu irq # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1080 # [PATCH] generalise PIC locations, PIT and FPU IRQ # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1081 # [PATCH] now we have the time logic in Mach_* use it # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1082 # [PATCH] generalise more PIT usage # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1083 # [PATCH] generalise PIT usage in tsc code, plus tsc sync # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1084 # [PATCH] generalise traps and nmi # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1085 # [PATCH] generalise pic mask names since the port varies # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1086 # [PATCH] generalise fpu_irq also add pc98 for x86 code # # The idea is to move more to if(pc98) so that we can attempt to get all # the ports buildable as one "generic" port in time. I don't think its p # possible for PC9800 but no need to dig holes # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1087 # [PATCH] more random C99 initializers # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1088 # [PATCH] more random C99 initializers # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1089 # [PATCH] fix a make kerneldoc glitch # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1090 # [PATCH] Fix z2ram # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1091 # [PATCH] small ipmi updates # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1092 # [PATCH] compile fix for rio_linux.c # # Missing # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1093 # [PATCH] compile fix for sx.c # # Missing # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1094 # [PATCH] input typo fixes # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1095 # [PATCH] first cut at 3c505 clean up # -------------------------------------------- # 03/04/17 alan@lxorguk.ukuu.org.uk 1.1096 # [PATCH] update intermezzo contacts # -------------------------------------------- # 03/04/17 torvalds@home.transmeta.com 1.1097 # Don't allow rmap to touch reserved or out-of-range pages # -------------------------------------------- # 03/04/18 rmk@flint.arm.linux.org.uk 1.1054.6.1 # [PCMCIA] Fix non-PCI PCMCIA bridge oops # # Only call pci_remove_behind_bridge() if we have a PCI-based bridge # controller. # -------------------------------------------- # 03/04/17 torvalds@home.transmeta.com 1.1098 # Merge bk://bk.arm.linux.org.uk/linux-2.5-rmk # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/17 torvalds@home.transmeta.com 1.1099 # Merge bk://bk.arm.linux.org.uk/linux-2.5-pcmcia # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # diff -Nru a/CREDITS b/CREDITS --- a/CREDITS Thu Apr 17 19:22:48 2003 +++ b/CREDITS Thu Apr 17 19:22:48 2003 @@ -2750,6 +2750,10 @@ E: wsalamon@nai.com D: portions of the Linux Security Module (LSM) framework and security modules +N: Robert Sanders +E: gt8134b@prism.gatech.edu +D: Dosemu + N: Duncan Sands E: duncan.sands@wanadoo.fr W: http://topo.math.u-psud.fr/~sands @@ -2757,10 +2761,6 @@ S: 69 rue Dunois S: 75013 Paris S: France - -N: Robert Sanders -E: gt8134b@prism.gatech.edu -D: Dosemu N: Hannu Savolainen E: hannu@opensound.com diff -Nru a/Documentation/Changes b/Documentation/Changes --- a/Documentation/Changes Thu Apr 17 19:22:49 2003 +++ b/Documentation/Changes Thu Apr 17 19:22:49 2003 @@ -62,6 +62,7 @@ o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version o procps 2.0.9 # ps --version o oprofile 0.5 # oprofiled --version +o nfs-utils 1.0.3 # showmount --version Kernel compilation ================== diff -Nru a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl --- a/Documentation/DocBook/kernel-api.tmpl Thu Apr 17 19:22:42 2003 +++ b/Documentation/DocBook/kernel-api.tmpl Thu Apr 17 19:22:42 2003 @@ -177,7 +177,6 @@ PCI Hotplug Support Library !Edrivers/hotplug/pci_hotplug_core.c -!Edrivers/hotplug/pci_hotplug_util.c MCA Architecture MCA Device Functions diff -Nru a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl --- a/Documentation/DocBook/usb.tmpl Thu Apr 17 19:22:50 2003 +++ b/Documentation/DocBook/usb.tmpl Thu Apr 17 19:22:50 2003 @@ -100,7 +100,8 @@ USB Host-Side API Model - Host-side drivers for USB devices talk to the "usbcore" APIs. + Within the kernel, + host-side drivers for USB devices talk to the "usbcore" APIs. There are two types of public "usbcore" APIs, targetted at two different layers of USB driver. Those are general purpose drivers, exposed through @@ -287,6 +288,686 @@ !Edrivers/usb/core/hcd.c !Edrivers/usb/core/hcd-pci.c !Edrivers/usb/core/buffer.c + + + + The USB Filesystem (usbfs) + + This chapter presents the Linux usbfs. + You may prefer to avoid writing new kernel code for your + USB driver; that's the problem that usbfs set out to solve. + User mode device drivers are usually packaged as applications + or libraries, and may use usbfs through some programming library + that wraps it. Such libraries include + libusb + for C/C++, and + jUSB for Java. + + + Unfinished + This particular documentation is incomplete, + especially with respect to the asynchronous mode. + As of kernel 2.5.66 the code and this (new) documentation + need to be cross-reviewed. + + + + Configure usbfs into Linux kernels by enabling the + USB filesystem option (CONFIG_USB_DEVICEFS), + and you get basic support for user mode USB device drivers. + Until relatively recently it was often (confusingly) called + usbdevfs although it wasn't solving what + devfs was. + Every USB device will appear in usbfs, regardless of whether or + not it has a kernel driver; but only devices with kernel drivers + show up in devfs. + + + + What files are in "usbfs"? + + Conventionally mounted at + /proc/bus/usb, usbfs + features include: + + /proc/bus/usb/devices + ... a text file + showing each of the USB devices on known to the kernel, + and their configuration descriptors. + You can also poll() this to learn about new devices. + + /proc/bus/usb/BBB/DDD + ... magic files + exposing the each device's configuration descriptors, and + supporting a series of ioctls for making device requests, + including I/O to devices. (Purely for access by programs.) + + + + + Each bus is given a number (BBB) based on when it was + enumerated; within each bus, each device is given a similar + number (DDD). + Those BBB/DDD paths are not "stable" identifiers; + expect them to change even if you always leave the devices + plugged in to the same hub port. + Don't even think of saving these in application + configuration files. + Stable identifiers are available, for user mode applications + that want to use them. HID and networking devices expose + these stable IDs, so that for example you can be sure that + you told the right UPS to power down its second server. + "usbfs" doesn't (yet) expose those IDs. + + + + + + Mounting and Access Control + + There are a number of mount options for usbfs, which will + be of most interest to you if you need to override the default + access control policy. + That policy is that only root may read or write device files + (/proc/bus/BBB/DDD) although anyone may read + the devices + or drivers files. + I/O requests to the device also need the CAP_SYS_RAWIO capability, + + + The significance of that is that by default, all user mode + device drivers need super-user privileges. + You can change modes or ownership in a driver setup + when the device hotplugs, or maye just start the + driver right then, as a privileged server (or some activity + within one). + That's the most secure approach for multi-user systems, + but for single user systems ("trusted" by that user) + it's more convenient just to grant everyone all access + (using the devmode=0666 option) + so the driver can start whenever it's needed. + + + The mount options for usbfs, usable in /etc/fstab or + in command line invocations of mount, are: + + + + busgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + busmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB + directories. (Default: 0555) + + busuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + + devgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + devmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0644) + devuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + + listgid=NNNNN + Controls the GID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + listmode=MMM + Controls the file mode used for the + /proc/bus/usb/devices and drivers files. + (Default: 0444) + listuid=NNNNN + Controls the UID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + + + + + Note that many Linux distributions hard-wire the mount options + for usbfs in their init scripts, such as + /etc/rc.d/rc.sysinit, + rather than making it easy to set this per-system + policy in /etc/fstab. + + + + + + /proc/bus/usb/devices + + This file is handy for status viewing tools in user + mode, which can scan the text format and ignore most of it. + More detailed device status (including class and vendor + status) is available from device-specific files. + For information about the current format of this file, + see the + Documentation/usb/proc_usb_info.txt + file in your Linux kernel sources. + + + Otherwise the main use for this file from programs + is to poll() it to get notifications of usb devices + as they're plugged or unplugged. + To see what changed, you'd need to read the file and + compare "before" and "after" contents, scan the filesystem, + or see its hotplug event. + + + + + + /proc/bus/usb/BBB/DDD + + Use these files in one of these basic ways: + + + They can be read, + producing first the device descriptor + (18 bytes) and then the descriptors for the current configuration. + See the USB 2.0 spec for details about those binary data formats. + You'll need to convert most multibyte values from little endian + format to your native host byte order, although a few of the + fields in the device descriptor (both of the BCD-encoded fields, + and the vendor and product IDs) will be byteswapped for you. + Note that configuration descriptors include descriptors for + interfaces, altsettings, endpoints, and maybe additional + class descriptors. + + + Perform USB operations using + ioctl() requests to make endpoint I/O + requests (synchronously or asynchronously) or manage + the device. + These requests need the CAP_SYS_RAWIO capability, + as well as filesystem access permissions. + Only one ioctl request can be made on one of these + device files at a time. + This means that if you are synchronously reading an endpoint + from one thread, you won't be able to write to a different + endpoint from another thread until the read completes. + This works for half duplex protocols, + but otherwise you'd use asynchronous i/o requests. + + + + + + + Life Cycle of User Mode Drivers + + Such a driver first needs to find a device file + for a device it knows how to handle. + Maybe it was told about it because a + /sbin/hotplug event handling agent + chose that driver to handle the new device. + Or maybe it's an application that scans all the + /proc/bus/usb device files, and ignores most devices. + In either case, it should read() all + the descriptors from the device file, + and check them against what it knows how to handle. + It might just reject everything except a particular + vendor and product ID, or need a more complex policy. + + + Never assume there will only be one such device + on the system at a time! + If your code can't handle more than one device at + a time, at least detect when there's more than one, and + have your users choose which device to use. + + + Once your user mode driver knows what device to use, + it interacts with it in either of two styles. + The simple style is to make only control requests; some + devices don't need more complex interactions than those. + (An example might be software using vendor-specific control + requests for some initialization or configuration tasks, + with a kernel driver for the rest.) + + + More likely, you need a more complex style driver: + one using non-control endpoints, reading or writing data + and claiming exclusive use of an interface. + Bulk transfers are easiest to use, + but only their sibling interrupt transfers + work with low speed devices. + Both interrupt and isochronous transfers + offer service guarantees because their bandwidth is reserved. + Such "periodic" transfers are awkward to use through usbfs, + unless you're using the asynchronous calls. However, interrupt + transfers can also be used in a synchronous "one shot" style. + + + Your user-mode driver should never need to worry + about cleaning up request state when the device is + disconnected, although it should close its open file + descriptors as soon as it starts seeing the ENODEV + errors. + + + + + The ioctl() Requests + + To use these ioctls, you need to include the following + headers in your userspace program: +#include <linux/usb.h> +#include <linux/usbdevice_fs.h> +#include <asm/byteorder.h> + The standard USB device model requests, from "Chapter 9" of + the USB 2.0 specification, are automatically included from + the <linux/usb_ch9.h> header. + + + Unless noted otherwise, the ioctl requests + described here will + update the modification time on the usbfs file to which + they are applied (unless they fail). + A return of zero indicates success; otherwise, a + standard USB error code is returned. (These are + documented in + Documentation/usb/error-codes.txt + in your kernel sources.) + + + Each of these files multiplexes access to several + I/O streams, one per endpoint. + Each device has one control endpoint (endpoint zero) + which supports a limited RPC style RPC access. + Devices are configured + by khubd (in the kernel) setting a device-wide + configuration that affects things + like power consumption and basic functionality. + The endpoints are part of USB interfaces, + which may have altsettings + affecting things like which endpoints are available. + Many devices only have a single configuration and interface, + so drivers for them will ignore configurations and altsettings. + + + + + Management/Status Requests + + A number of usbfs requests don't deal very directly + with device I/O. + They mostly relate to device management and status. + These are all synchronous requests. + + + + + USBDEVFS_CLAIMINTERFACE + This is used to force usbfs to + claim a specific interface, + which has not previously been claimed by usbfs or any other + kernel driver. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor). + + Note that if your driver doesn't claim an interface + before trying to use one of its endpoints, and no + other driver has bound to it, then the interface is + automatically claimed by usbfs. + + This claim will be released by a RELEASEINTERFACE ioctl, + or by closing the file descriptor. + File modification time is not updated by this request. + + + USBDEVFS_CONNECTINFO + Says whether the device is lowspeed. + The ioctl parameter points to a structure like this: +struct usbdevfs_connectinfo { + unsigned int devnum; + unsigned char slow; +}; + File modification time is not updated by this request. + + You can't tell whether a "not slow" + device is connected at high speed (480 MBit/sec) + or just full speed (12 MBit/sec). + You should know the devnum value already, + it's the DDD value of the device file name. + + + USBDEVFS_GETDRIVER + Returns the name of the kernel driver + bound to a given interface (a string). Parameter + is a pointer to this structure, which is modified: +struct usbdevfs_getdriver { + unsigned int interface; + char driver[USBDEVFS_MAXDRIVERNAME + 1]; +}; + File modification time is not updated by this request. + + + USBDEVFS_IOCTL + Passes a request from userspace through + to a kernel driver that has an ioctl entry in the + struct usb_driver it registered. +struct usbdevfs_ioctl { + int ifno; + int ioctl_code; + void *data; +}; + +/* user mode call looks like this. + * 'request' becomes the driver->ioctl() 'code' parameter. + * the size of 'param' is encoded in 'request', and that data + * is copied to or from the driver->ioctl() 'buf' parameter. + */ +static int +usbdev_ioctl (int fd, int ifno, unsigned request, void *param) +{ + struct usbdevfs_ioctl wrapper; + + wrapper.ifno = ifno; + wrapper.ioctl_code = request; + wrapper.data = param; + + return ioctl (fd, USBDEVFS_IOCTL, &wrapper); +} + File modification time is not updated by this request. + + This request lets kernel drivers talk to user mode code + through filesystem operations even when they don't create + a charactor or block special device. + It's also been used to do things like ask devices what + device special file should be used. + Two pre-defined ioctls are used + to disconnect and reconnect kernel drivers, so + that user mode code can completely manage binding + and configuration of devices. + + + USBDEVFS_RELEASEINTERFACE + This is used to release the claim usbfs + made on interface, either implicitly or because of a + USBDEVFS_CLAIMINTERFACE call, before the file + descriptor is closed. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor); + File modification time is not updated by this request. + + No security check is made to ensure + that the task which made the claim is the one + which is releasing it. + This means that user mode driver may interfere + other ones. + + + USBDEVFS_RESETEP + Resets the data toggle value for an endpoint + (bulk or interrupt) to DATA0. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in the endpoint descriptor), + with USB_DIR_IN added if the device's endpoint sends + data to the host. + + Avoid using this request. + It should probably be removed. + Using it typically means the device and driver will lose + toggle synchronization. If you really lost synchronization, + you likely need to completely handshake with the device, + using a request like CLEAR_HALT + or SET_INTERFACE. + + + + + + + + Synchronous I/O Support + + Synchronous requests involve the kernel blocking + until until the user mode request completes, either by + finishing successfully or by reporting an error. + In most cases this is the simplest way to use usbfs, + although as noted above it does prevent performing I/O + to more than one endpoint at a time. + + + + + USBDEVFS_BULK + Issues a bulk read or write request to the + device. + The ioctl parameter is a pointer to this structure: +struct usbdevfs_bulktransfer { + unsigned int ep; + unsigned int len; + unsigned int timeout; /* in milliseconds */ + void *data; +}; + The "ep" value identifies a + bulk endpoint number (1 to 15, as identified in an endpoint + descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + The length of the data buffer is identified by "len"; + Recent kernels support requests up to about 128KBytes. + FIXME say how read length is returned, + and how short reads are handled.. + + + USBDEVFS_CLEAR_HALT + Clears endpoint halt (stall) and + resets the endpoint toggle. This is only + meaningful for bulk or interrupt endpoints. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in an endpoint descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + + Use this on bulk or interrupt endpoints which have + stalled, returning -EPIPE status + to a data transfer request. + Do not issue the control request directly, since + that could invalidate the host's record of the + data toggle. + + + USBDEVFS_CONTROL + Issues a control request to the device. + The ioctl parameter points to a structure like this: +struct usbdevfs_ctrltransfer { + __u8 bRequestType; + __u8 bRequest; + __u16 wValue; + __u16 wIndex; + __u16 wLength; + __u32 timeout; /* in milliseconds */ + void *data; +}; + + The first eight bytes of this structure are the contents + of the SETUP packet to be sent to the device; see the + USB 2.0 specification for details. + The bRequestType value is composed by combining a + USB_TYPE_* value, a USB_DIR_* value, and a + USB_RECIP_* value (from + <linux/usb.h>). + If wLength is nonzero, it describes the length of the data + buffer, which is either written to the device + (USB_DIR_OUT) or read from the device (USB_DIR_IN). + + At this writing, you can't transfer more than 4 KBytes + of data to or from a device; usbfs has a limit, and + some host controller drivers have a limit. + (That's not usually a problem.) + Also there's no way to say it's + not OK to get a short read back from the device. + + + USBDEVFS_RESET + Does a USB level device reset. + The ioctl parameter is ignored. + After the reset, this rebinds all device interfaces. + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + USBDEVFS_SETINTERFACE + Sets the alternate setting for an + interface. The ioctl parameter is a pointer to a + structure like this: +struct usbdevfs_setinterface { + unsigned int interface; + unsigned int altsetting; +}; + File modification time is not updated by this request. + + Those struct members are from some interface descriptor + applying to the the current configuration. + The interface number is the bInterfaceNumber value, and + the altsetting number is the bAlternateSetting value. + (This resets each endpoint in the interface.) + + + USBDEVFS_SETCONFIGURATION + Issues the + usb_set_configuration call + for the device. + The parameter is an integer holding the number of + a configuration (bConfigurationValue from descriptor). + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + + + + + Asynchronous I/O Support + + As mentioned above, there are situations where it may be + important to initiate concurrent operations from user mode code. + This is particularly important for periodic transfers + (interrupt and isochronous), but it can be used for other + kinds of USB requests too. + In such cases, the asynchronous requests described here + are essential. Rather than submitting one request and having + the kernel block until it completes, the blocking is separate. + + + These requests are packaged into a structure that + resembles the URB used by kernel device drivers. + (No POSIX Async I/O support here, sorry.) + It identifies the endpoint type (USBDEVFS_URB_TYPE_*), + endpoint (number, masked with USB_DIR_IN as appropriate), + buffer and length, and a user "context" value serving to + uniquely identify each request. + (It's usually a pointer to per-request data.) + Flags can modify requests (not as many as supported for + kernel drivers). + + + Each request can specify a realtime signal number + (between SIGRTMIN and SIGRTMAX, inclusive) to request a + signal be sent when the request completes. + + + When usbfs returns these urbs, the status value + is updated, and the buffer may have been modified. + Except for isochronous transfers, the actual_length is + updated to say how many bytes were transferred; if the + USBDEVFS_URB_DISABLE_SPD flag is set + ("short packets are not OK"), if fewer bytes were read + than were requested then you get an error report. + + +struct usbdevfs_iso_packet_desc { + unsigned int length; + unsigned int actual_length; + unsigned int status; +}; + +struct usbdevfs_urb { + unsigned char type; + unsigned char endpoint; + int status; + unsigned int flags; + void *buffer; + int buffer_length; + int actual_length; + int start_frame; + int number_of_packets; + int error_count; + unsigned int signr; + void *usercontext; + struct usbdevfs_iso_packet_desc iso_frame_desc[]; +}; + + For these asynchronous requests, the file modification + time reflects when the request was initiated. + This contrasts with their use with the synchronous requests, + where it reflects when requests complete. + + + + + USBDEVFS_DISCARDURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_DISCSIGNAL + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURBNDELAY + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_SUBMITURB + + TBS + + + + + + + + diff -Nru a/Documentation/arm/Porting b/Documentation/arm/Porting --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/arm/Porting Thu Apr 17 19:22:50 2003 @@ -0,0 +1,135 @@ +Taken from list archive at http://lists.arm.linux.org.uk/pipermail/linux-arm-kernel/2001-July/004064.html + +Initial definitions +------------------- + +The following symbol definitions rely on you knowing the translation that +__virt_to_phys() does for your machine. This macro converts the passed +virtual address to a physical address. Normally, it is simply: + + phys = virt - PAGE_OFFSET + PHYS_OFFSET + + +Decompressor Symbols +-------------------- + +ZTEXTADDR + Start address of decompressor. There's no point in talking about + virtual or physical addresses here, since the MMU will be off at + the time when you call the decompressor code. You normally call + the kernel at this address to start it booting. This doesn't have + to be located in RAM, it can be in flash or other read-only or + read-write addressable medium. + +ZBSSADDR + Start address of zero-initialised work area for the decompressor. + This must be pointing at RAM. The decompressor will zero initialise + this for you. Again, the MMU will be off. + +ZRELADDR + This is the address where the decompressed kernel will be written, + and eventually executed. The following constraint must be valid: + + __virt_to_phys(TEXTADDR) == ZRELADDR + + The initial part of the kernel is carefully coded to be position + independent. + +INITRD_PHYS + Physical address to place the initial RAM disk. Only relevant if + you are using the bootpImage stuff (which only works on the old + struct param_struct). + +INITRD_VIRT + Virtual address of the initial RAM disk. The following constraint + must be valid: + + __virt_to_phys(INITRD_VIRT) == INITRD_PHYS + +PARAMS_PHYS + Physical address of the struct param_struct or tag list, giving the + kernel various parameters about its execution environment. + + +Kernel Symbols +-------------- + +PHYS_OFFSET + Physical start address of the first bank of RAM. + +PAGE_OFFSET + Virtual start address of the first bank of RAM. During the kernel + boot phase, virtual address PAGE_OFFSET will be mapped to physical + address PHYS_OFFSET, along with any other mappings you supply. + This should be the same value as TASK_SIZE. + +TASK_SIZE + The maximum size of a user process in bytes. Since user space + always starts at zero, this is the maximum address that a user + process can access+1. The user space stack grows down from this + address. + + Any virtual address below TASK_SIZE is deemed to be user process + area, and therefore managed dynamically on a process by process + basis by the kernel. I'll call this the user segment. + + Anything above TASK_SIZE is common to all processes. I'll call + this the kernel segment. + + (In other words, you can't put IO mappings below TASK_SIZE, and + hence PAGE_OFFSET). + +TEXTADDR + Virtual start address of kernel, normally PAGE_OFFSET + 0x8000. + This is where the kernel image ends up. With the latest kernels, + it must be located at 32768 bytes into a 128MB region. Previous + kernels placed a restriction of 256MB here. + +DATAADDR + Virtual address for the kernel data segment. Must not be defined + when using the decompressor. + +VMALLOC_START +VMALLOC_END + Virtual addresses bounding the vmalloc() area. There must not be + any static mappings in this area; vmalloc will overwrite them. + The addresses must also be in the kernel segment (see above). + Normally, the vmalloc() area starts VMALLOC_OFFSET bytes above the + last virtual RAM address (found using variable high_memory). + +VMALLOC_OFFSET + Offset normally incorporated into VMALLOC_START to provide a hole + between virtual RAM and the vmalloc area. We do this to allow + out of bounds memory accesses (eg, something writing off the end + of the mapped memory map) to be caught. Normally set to 8MB. + +Architecture Specific Macros +---------------------------- + +BOOT_MEM(pram,pio,vio) + `pram' specifies the physical start address of RAM. Must always + be present, and should be the same as PHYS_OFFSET. + + `pio' is the physical address of an 8MB region containing IO for + use with the debugging macros in arch/arm/kernel/debug-armv.S. + + `vio' is the virtual address of the 8MB debugging region. + + It is expected that the debugging region will be re-initialised + by the architecture specific code later in the code (via the + MAPIO function). + +BOOT_PARAMS + Same as, and see PARAMS_PHYS. + +FIXUP(func) + Machine specific fixups, run before memory subsystems have been + initialised. + +MAPIO(func) + Machine specific function to map IO areas (including the debug + region above). + +INITIRQ(func) + Machine specific function to initialise interrupts. + diff -Nru a/Documentation/cachetlb.txt b/Documentation/cachetlb.txt --- a/Documentation/cachetlb.txt Thu Apr 17 19:22:45 2003 +++ b/Documentation/cachetlb.txt Thu Apr 17 19:22:45 2003 @@ -75,7 +75,7 @@ Platform developers note that generic code will always invoke this interface with mm->page_table_lock held. -4) void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) +4) void flush_tlb_page(struct vm_area_struct *vma, unsigned long addr) This time we need to remove the PAGE_SIZE sized translation from the TLB. The 'vma' is the backing structure used by @@ -87,9 +87,9 @@ After running, this interface must make sure that any previous page table modification for address space 'vma->vm_mm' for - user virtual address 'page' will be visible to the cpu. That + user virtual address 'addr' will be visible to the cpu. That is, after running, there will be no entries in the TLB for - 'vma->vm_mm' for virtual address 'page'. + 'vma->vm_mm' for virtual address 'addr'. This is used primarily during fault processing. @@ -144,9 +144,9 @@ change_range_of_page_tables(mm, start, end); flush_tlb_range(vma, start, end); - 3) flush_cache_page(vma, page); + 3) flush_cache_page(vma, addr); set_pte(pte_pointer, new_pte_val); - flush_tlb_page(vma, page); + flush_tlb_page(vma, addr); The cache level flush will always be first, because this allows us to properly handle systems whose caches are strict and require @@ -200,7 +200,7 @@ call flush_cache_page (see below) for each entry which may be modified. -4) void flush_cache_page(struct vm_area_struct *vma, unsigned long page) +4) void flush_cache_page(struct vm_area_struct *vma, unsigned long addr) This time we need to remove a PAGE_SIZE sized range from the cache. The 'vma' is the backing structure used by @@ -211,7 +211,7 @@ "Harvard" type cache layouts). After running, there will be no entries in the cache for - 'vma->vm_mm' for virtual address 'page'. + 'vma->vm_mm' for virtual address 'addr'. This is used primarily during fault processing. @@ -235,7 +235,7 @@ NOTE: This does not fix shared mmaps, check out the sparc64 port for one way to solve this (in particular SPARC_FLAG_MMAPSHARED). -Next, you have two methods to solve the D-cache aliasing issue for all +Next, you have to solve the D-cache aliasing issue for all other cases. Please keep in mind that fact that, for a given page mapped into some user address space, there is always at least one more mapping, that of the kernel in it's linear mapping starting at @@ -244,35 +244,8 @@ aliasing problem has the potential to exist since the kernel already maps this page at its virtual address. -First, I describe the old method to deal with this problem. I am -describing it for documentation purposes, but it is deprecated and the -latter method I describe next should be used by all new ports and all -existing ports should move over to the new mechanism as well. - - flush_page_to_ram(struct page *page) - - The physical page 'page' is about to be place into the - user address space of a process. If it is possible for - stores done recently by the kernel into this physical - page, to not be visible to an arbitrary mapping in userspace, - you must flush this page from the D-cache. - - If the D-cache is writeback in nature, the dirty data (if - any) for this physical page must be written back to main - memory before the cache lines are invalidated. - -Admittedly, the author did not think very much when designing this -interface. It does not give the architecture enough information about -what exactly is going on, and there is no context to base a judgment -on about whether an alias is possible at all. The new interfaces to -deal with D-cache aliasing are meant to address this by telling the -architecture specific code exactly which is going on at the proper points -in time. - -Here is the new interface: - - void copy_user_page(void *to, void *from, unsigned long address) - void clear_user_page(void *to, unsigned long address) + void copy_user_page(void *to, void *from, unsigned long addr, struct page *page) + void clear_user_page(void *to, unsigned long addr, struct page *page) These two routines store data in user anonymous or COW pages. It allows a port to efficiently avoid D-cache alias @@ -285,8 +258,9 @@ of the same "color" as the user mapping of the page. Sparc64 for example, uses this technique. - The "address" parameter tells the virtual address where the - user will ultimately have this page mapped. + The 'addr' parameter tells the virtual address where the + user will ultimately have this page mapped, and the 'page' + parameter gives a pointer to the struct page of the target. If D-cache aliasing is not an issue, these two routines may simply call memcpy/memset directly and do nothing more. @@ -363,5 +337,5 @@ void flush_icache_page(struct vm_area_struct *vma, struct page *page) All the functionality of flush_icache_page can be implemented in - flush_dcache_page and update_mmu_cache. In 2.5 the hope is to + flush_dcache_page and update_mmu_cache. In 2.7 the hope is to remove this interface completely. diff -Nru a/Documentation/devices.txt b/Documentation/devices.txt --- a/Documentation/devices.txt Thu Apr 17 19:22:45 2003 +++ b/Documentation/devices.txt Thu Apr 17 19:22:45 2003 @@ -693,13 +693,6 @@ ... 31 = /dev/fb31 32nd frame buffer - For backwards compatibility {2.6} the following - progression is also handled by current kernels: - 0 = /dev/fb0 - 32 = /dev/fb1 - ... - 224 = /dev/fb7 - block Aztech/Orchid/Okano/Wearnes CD-ROM 0 = /dev/aztcd Aztech CD-ROM diff -Nru a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt --- a/Documentation/filesystems/proc.txt Thu Apr 17 19:22:44 2003 +++ b/Documentation/filesystems/proc.txt Thu Apr 17 19:22:44 2003 @@ -362,6 +362,93 @@ ide-cdrom version 4.53 ide-disk version 1.08 +.............................................................................. + +meminfo: + +Provides information about distribution and utilization of memory. This +varies by architecture and compile options. The following is from a +16GB PIII, which has highmem enabled. You may not have all of these fields. + +> cat /proc/meminfo + + +MemTotal: 16344972 kB +MemFree: 13634064 kB +Buffers: 3656 kB +Cached: 1195708 kB +SwapCached: 0 kB +Active: 891636 kB +Inactive: 1077224 kB +HighTotal: 15597528 kB +HighFree: 13629632 kB +LowTotal: 747444 kB +LowFree: 4432 kB +SwapTotal: 0 kB +SwapFree: 0 kB +Dirty: 968 kB +Writeback: 0 kB +Mapped: 280372 kB +Slab: 684068 kB +Committed_AS: 1576424 kB +PageTables: 24448 kB +ReverseMaps: 1080904 +VmallocTotal: 112216 kB +VmallocUsed: 428 kB +VmallocChunk: 111088 kB + + MemTotal: Total usable ram (i.e. physical ram minus a few reserved + bits and the kernel binary code) + MemFree: The sum of LowFree+HighFree + Buffers: Relatively temporary storage for raw disk blocks + shouldn't get tremendously large (20MB or so) + Cached: in-memory cache for files read from the disk (the + pagecache). Doesn't include SwapCached + SwapCached: Memory that once was swapped out, is swapped back in but + still also is in the swapfile (if memory is needed it + doesn't need to be swapped out AGAIN because it is already + in the swapfile. This saves I/O) + Active: Memory that has been used more recently and usually not + reclaimed unless absolutely necessary. + Inactive: Memory which has been less recently used. It is more + eligible to be reclaimed for other purposes + HighTotal: + HighFree: Highmem is all memory above ~860MB of physical memory + Highmem areas are for use by userspace programs, or + for the pagecache. The kernel must use tricks to access + this memory, making it slower to access than lowmem. + LowTotal: + LowFree: Lowmem is memory which can be used for everything that + highmem can be used for, but it is also availble for the + kernel's use for its own data structures. Among many + other things, it is where everything from the Slab is + allocated. Bad things happen when you're out of lowmem. + SwapTotal: total amount of swap space available + SwapFree: Memory which has been evicted from RAM, and is temporarily + on the disk + Dirty: Memory which is waiting to get written back to the disk + Writeback: Memory which is actively being written back to the disk + Mapped: files which have been mmaped, such as libraries + Slab: in-kernel data structures cache +Committed_AS: An estimate of how much RAM you would need to make a + 99.99% guarantee that there never is OOM (out of memory) + for this workload. Normally the kernel will overcommit + memory. That means, say you do a 1GB malloc, nothing + happens, really. Only when you start USING that malloc + memory you will get real memory on demand, and just as + much as you use. So you sort of take a mortgage and hope + the bank doesn't go bust. Other cases might include when + you mmap a file that's shared only when you write to it + and you get a private copy of that data. While it normally + is shared between processes. The Committed_AS is a + guesstimate of how much RAM/swap you would need + worst-case. + PageTables: amount of memory dedicated to the lowest level of page + tables. + ReverseMaps: number of reverse mappings performed +VmallocTotal: total size of vmalloc memory area + VmallocUsed: amount of vmalloc area which is used +VmallocChunk: largest contigious block of vmalloc area which is free More detailed information can be found in the controller specific subdirectories. These are named ide0, ide1 and so on. Each of these diff -Nru a/Documentation/io_ordering.txt b/Documentation/io_ordering.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/io_ordering.txt Thu Apr 17 19:22:50 2003 @@ -0,0 +1,47 @@ +On some platforms, so-called memory-mapped I/O is weakly ordered. On such +platforms, driver writers are responsible for ensuring that I/O writes to +memory-mapped addresses on their device arrive in the order intended. This is +typically done by reading a 'safe' device or bridge register, causing the I/O +chipset to flush pending writes to the device before any reads are posted. A +driver would usually use this technique immediately prior to the exit of a +critical section of code protected by spinlocks. This would ensure that +subsequent writes to I/O space arrived only after all prior writes (much like a +memory barrier op, mb(), only with respect to I/O). + +A more concrete example from a hypothetical device driver: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + ... + +In the case above, the device may receive newval2 before it receives newval, +which could cause problems. Fixing it is easy enough though: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: (void)readl(safe_register); /* maybe a config register? */ +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: (void)readl(safe_register); /* maybe a config register? */ +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + +Here, the reads from safe_register will cause the I/O chipset to flush any +pending writes before actually posting the read to the chipset, preventing +possible data corruption. diff -Nru a/Documentation/scsi/st.txt b/Documentation/scsi/st.txt --- a/Documentation/scsi/st.txt Thu Apr 17 19:22:44 2003 +++ b/Documentation/scsi/st.txt Thu Apr 17 19:22:44 2003 @@ -1,8 +1,8 @@ This file contains brief information about the SCSI tape driver. The driver is currently maintained by Kai Mäkisara (email -Kai.Makisara@metla.fi) +Kai.Makisara@kolumbus.fi) -Last modified: Sat Dec 14 14:35:30 2002 by makisara +Last modified: Sat Apr 12 20:26:37 2003 by makisara BASICS @@ -132,7 +132,7 @@ Asynchronous writing. Writing the buffer contents to the tape is started and the write call returns immediately. The status is checked at the next tape operation. Asynchronous writes are not done with -direct i/o. +direct i/o and not in fixed block mode. Buffered writes and asynchronous writes may in some rare cases cause problems in multivolume operations if there is not enough space on the @@ -143,11 +143,6 @@ this read command. Should be disabled for those drives that don't like a filemark to truncate a read request or that don't like backspacing. -The threshold for triggering asynchronous write in fixed block mode -is defined by ST_WRITE_THRESHOLD. This may be optimized for each -use pattern. The default triggers asynchronous write after three -default sized writes (10 kB) from tar. - Scatter/gather buffers (buffers that consist of chunks non-contiguous in the physical memory) are used if contiguous buffers can't be allocated. To support all SCSI adapters (including those not @@ -206,11 +201,17 @@ If the driver is compiled into the kernel, the same parameters can be also set using, e.g., the LILO command line. The preferred syntax is -to use the same keywords as when loading the driver as module. If -several parameters are set, the keyword-value pairs are separated with -a comma (no spaces allowed). A colon can be used instead of the equal -mark. The definition is prepended by the string st=. Here is an -example: +is to use the same keyword used when loading as module but prepended +with 'st.'. For instance, to set the maximum number of scatter/gather +segments, the parameter 'st.max_sg_segs=xx' should be used (xx is the +number of scatter/gather segments). + +For compatibility, the old syntax from early 2.5 and 2.4 kernel +versions is supported. The same keywords can be used as when loading +the driver as module. If several parameters are set, the keyword-value +pairs are separated with a comma (no spaces allowed). A colon can be +used instead of the equal mark. The definition is prepended by the +string st=. Here is an example: st=buffer_kbs:64,write_threhold_kbs:60 diff -Nru a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Thu Apr 17 19:22:44 2003 +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Thu Apr 17 19:22:44 2003 @@ -18,8 +18,8 @@ - Dec. 27, 2002 - 0.2 (reborn at Christmas) + Mar. 26, 2003 + 0.3 @@ -30,7 +30,7 @@ - Copyright (c) 2002 Takashi Iwai tiwai@suse.de + Copyright (c) 2002, 2003 Takashi Iwai tiwai@suse.de @@ -1425,11 +1425,11 @@
Resource Allocation - The allocation of ports and irqs are done via standard kernel + The allocation of I/O ports and irqs are done via standard kernel functions. Unlike ALSA ver.0.5.x., there are no helpers for that. And these resources must be released in the destructor - function (see below). Also, on ALSA 0.9.x, you don't need - allocate (pseudo-)DMA for PCI like 0.5.x. + function (see below). Also, on ALSA 0.9.x, you don't need to + allocate (pseudo-)DMA for PCI like ALSA 0.5.x. @@ -1461,7 +1461,7 @@ since irq 0 is valid. The port address and its resource pointer can be initialized as null by snd_magic_kcalloc() automatically, so you - don't have to take care of it. + don't have to take care of resetting them. @@ -2227,79 +2227,157 @@
-
- Operators - - OK, now let me explain the detail of each pcm callback - (ops). In general, every callback must - return 0 if successful, or a negative number with the error - number such as -EINVAL at any - error. - - - - The callback function takes at least the argument with - snd_pcm_substream_t pointer. For retrieving the - chip record from the given substream instance, you can use the - following macro. - - - - - - - - - - It's expanded with a magic-cast, so the cast-error is - automatically checked. You should define chip_t at - the beginning of the code, since this will be referred in many - places of pcm and control interfaces. - +
+ Runtime Pointer - The Chest of PCM Information + + When the PCM substream is opened, a PCM runtime instance is + allocated and assigned to the substream. This pointer is + accessible via substream->runtime. + This runtime pointer holds the various information; it holds + the copy of hw_params and sw_params configurations, the buffer + pointers, mmap records, spinlocks, etc. Almost everyhing you + need for controlling the PCM can be found there. + -
- open callback - + + The definition of runtime instance is found in + <sound/pcm.h>. Here is the + copy from the file. + - This is called when a pcm substream is opened. - + + For the operators (callbacks) of each sound driver, most of + these records are supposed to be read-only. Only the PCM + middle-layer changes / updates these info. The excpetions are + the hardware description (hw), interrupt callbacks + (transfer_ack_xxx), DMA buffer information, and the private + data. Besides, if you use the standard buffer allocation + method via snd_pcm_lib_malloc_pages(), + you don't need to set the DMA buffer information by yourself. + - - At least, here you have to initialize the runtime hardware - record. Typically, this is done by like this: + + In the sections below, important records are explained. + +
+ Hardware Description + + The hardware descriptor (snd_pcm_hardware_t) + contains the definitions of the fundamental hardware + configuration. Above all, you'll need to define this in + + the open callback. + Note that the runtime instance holds the copy of the + descriptor, not the pointer to the existing descriptor. That + is, in the open callback, you can modify the copied descriptor + (runtime->hw) as you need. For example, if the maximum + number of channels is 1 only on some chip models, you can + still use the same hardware descriptor and change the + channels_max later: runtime; - - runtime->hw = snd_mychip_playback_hw; - return 0; - } + ... + runtime->hw = snd_mychip_playback_hw; // common definition + if (chip->model == VERY_OLD_ONE) + runtime->hw.channels_max = 1; ]]> + - where snd_mychip_playback_hw is the - pre-defined hardware record. - + + Typically, you'll have a hardware descriptor like below: - The similar struct exists on ALSA 0.5.x driver, so you can - guess the values if you already wrote a driver. - - - + + The info field contains the type and capabilities of this pcm. The bit flags are defined in <sound/asound.h> as @@ -2366,6 +2441,17 @@ must handle the corresponding commands. + + When the PCM substreams can be synchronized (typically, + synchorinized start/stop of a playback and a capture streams), + you can give SNDRV_PCM_INFO_SYNC_START, + too. In this case, you'll need to check the linked-list of + PCM substreams in the trigger callback. This will be + described in the later section. + + + + formats field contains the bit-flags of supported formats (SNDRV_PCM_FMTBIT_XXX). @@ -2373,38 +2459,181 @@ bits. In the example above, the signed 16bit little-endian format is specified. + + rates field contains the bit-flags of supported rates (SNDRV_PCM_RATE_XXX). When the chip supports continuous rates, pass CONTINUOUS bit additionally. - The pre-defined rate bits are only for typical rates. If your - chip supports unconventional rates, you need to add - KNOT bit and set up the + The pre-defined rate bits are provided only for typical + rates. If your chip supports unconventional rates, you need to add + KNOT bit and set up the hardware constraint manually (explained later). + - - There have been many changes of terminology between - ALSA 0.5.x and 0.9.x. - On the ALSA 0.9.x world, period means what is - known as fragment in the OSS. It's the least - size of (a part of) the buffer to generate an interrupt. + + + rate_min and + rate_max define the minimal and + maximal sample rate. This should correspond somehow to + rates bits. + + + + + + channel_min and + channel_max + define, as you might already expected, the minimal and maximal + number of channels. + + + + + + buffer_bytes_max defines the + maximal buffer size in bytes. There is no + buffer_bytes_min field, since + it can be calculated from the minimal period size and the + minimal number of periods. + Meanwhile, period_bytes_min and + define the minimal and maximal size of the period in bytes. + periods_max and + periods_min define the maximal and + minimal number of periods in the buffer. - - Now, taking the new terminology into account, the other fields - are self-explanatory (I hope). Please note that here, both - min/max buffer and period sizes are specified in bytes. + + The period is a term, that corresponds to + fragment in the OSS world. The period defines the size at + which the PCM interrupt is generated. This size strongly + depends on the hardware. + Generally, the smaller period size will give you more + interrupts, that is, more controls. + In the case of capture, this size defines the input latency. + On the other hand, the whole buffer size defines the + output latency for the playback direction. + + + + + + There is also a field fifo_size. + This specifies the size of the hardware FIFO, but it's not + used currently in the driver nor in the alsa-lib. So, you + can ignore this field. + + + + +
+ +
+ PCM Configurations + + Ok, let's go back again to the PCM runtime records. + The most frequently referred records in the runtime instance are + the PCM configurations. + The PCM configurations are stored on runtime instance + after the application sends hw_params data via + alsa-lib. There are many fields copied from hw_params and + sw_params structs. For example, + format holds the format type + chosen by the application. This field contains the enum value + SNDRV_PCM_FORMAT_XXX. + + + + One thing to be noted is that the configured buffer and period + sizes are stored in frames in the runtime + In the ALSA world, 1 frame = channels * samples-size. + For conversion between frames and bytes, you can use the + helper functions, frames_to_bytes() and + bytes_to_frames(). + + +period_size); +]]> + + - - Some drivers allocate the private instance for each pcm - substream. It can be stored in - substream->runtime->private_data. - Since it's a void pointer, you - should use magic-kmalloc and magic-cast for such an object. + + Also, many software parameters (sw_params) are + stored in frames, too. Please check the type of the field. + snd_pcm_uframes_t is for the frames as unsigned + integer while snd_pcm_sframes_t is for the frames + as signed integer. + +
+ +
+ DMA Buffer Information + + The DMA buffer is defined by the following four fields, + dma_area, + dma_addr, + dma_bytes and + dma_private. + The dma_area holds the buffer + pointer (the logical address). You can call + memcpy from/to + this pointer. Meanwhile, dma_addr + holds the physical address of the buffer. This field is + specified only when the buffer is a linear buffer. + dma_bytes holds the size of buffer + in bytes. dma_private is used for + the ALSA DMA allocator. + + + + If you use a standard ALSA function, + snd_pcm_lib_malloc_pages(), for + allocating the buffer, these fields are set by the ALSA middle + layer, and you should not change them by + yourself. You can read them but not write them. + On the other hand, if you want to allocate the buffer by + yourself, you'll need to manage it in hw_params callback. + At least, dma_bytes is mandatory. + dma_area is necessary when the + buffer is mmapped. If your driver doesn't support mmap, this + field is not necessary. dma_addr + is also not mandatory. You can use + dma_private as you like, too. + +
+ +
+ Running Status + + The running status can be referred via runtime->status. + This is the pointer to snd_pcm_mmap_status_t + record. For example, you can get the current DMA hardware + pointer via runtime->status->hw_ptr. + + + + The DMA application pointer can be referred via + runtime->control, which points + snd_pcm_mmap_control_t record. + However, accessing directly to this value is not recommended. + +
+ +
+ Private Data + + You can allocate a record for the substream and store it in + runtime->private_data. Usually, this + done in + + the open callback. + Since it's a void pointer, you should use magic-kmalloc and + magic-cast for such an object. @@ -2423,8 +2652,110 @@ - The allocated object must be released in the close callback below. + The allocated object must be released in + + the close callback. +
+ +
+ Interrupt Callbacks + + The field transfer_ack_begin and + transfer_ack_end are called at + the beginning and the end of + snd_pcm_period_elapsed(), respectively. + +
+ +
+ +
+ Operators + + OK, now let me explain the detail of each pcm callback + (ops). In general, every callback must + return 0 if successful, or a negative number with the error + number such as -EINVAL at any + error. + + + + The callback function takes at least the argument with + snd_pcm_substream_t pointer. For retrieving the + chip record from the given substream instance, you can use the + following macro. + + + + + + + + + + It's expanded with a magic-cast, so the cast-error is + automatically checked. You should define chip_t at + the beginning of the code, since this will be referred in many + places of pcm and control interfaces. + + +
+ open callback + + + + + + + + This is called when a pcm substream is opened. + + + + At least, here you have to initialize the runtime->hw + record. Typically, this is done by like this: + + + +runtime; + + runtime->hw = snd_mychip_playback_hw; + return 0; + } +]]> + + + + where snd_mychip_playback_hw is the + pre-defined hardware description. + + + + You can allocate a private data in this callback, as described + in + Private Data section. + + + + If the hardware configuration needs more constraints, set the + hardware constraints here, too. + See + Constraints for more details. +
@@ -2622,23 +2953,6 @@ - Note that the period and the buffer sizes are stored in - frames. In the ALSA world, 1 frame = channels - * samples-size. For conversion between frames and bytes, you - can use the helper functions, - frames_to_bytes() and - bytes_to_frames(). - - - -period_size); -]]> - - - - - Be careful that this callback will be called many times at each set up, too. @@ -5115,6 +5429,217 @@ + + + + + + How To Put Your Driver Into ALSA Tree +
+ General + + So far, you've learned how to write the driver codes. + And you might have a question now: how to put my own + driver into the ALSA driver tree? + Here (finally :) the standard procedure is described briefly. + + + + Suppose that you'll create a new PCI driver for the card + xyz. The card module name would be + snd-xyz. The new driver is usually put into alsa-driver + tree. Then the driver is evaluated, audited and tested + by developers and users. After a certain time, the driver + will go to alsa-kernel tree and eventually integrated into + Linux 2.5 tree. + + + + In the following sections, the driver code is supposed + to be put into alsa-driver tree. The two cases are assumed: + a driver consisting of a single source file and one consisting + of several source files. + +
+ +
+ Driver with A Single Source File + + + + + Modify alsa-driver/pci/Makefile + + + + Suppose you have a file xyz.c. Add the following + two lines + + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + Here define the dependent modules. + + + + + + + If the driver supports PCM, snd-pcm.o, + snd-timer.o and snd-page-alloc.o + will be needed. + + + For rawmidi, snd-rawmidi.o is needed in addition. + The MIDI stuff is also related to the sequencer. + You'll need to modify alsa-driver/acore/seq/Makefile. + + + + For OPL3, snd-hwdep.o is needed, too. + It's involved with the sequencer, and as well as rawmidi, + you'll need to modify alsa-driver/acore/seq/Makefile + and acore/seq/instr/Makefile in addition. + Also, a new entry is necessary in + alsa-driver/drivers/opl3/Makefile. + + + + + + + Modify alsa-driver/utils/Modules.dep + + + + Add the module definition for configure, here. + The beginning of the line must be a vertical bar, following + the card module name (snd-xyz) and the list of its all + dependent modules. + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
+ Drivers with Several Source Files + + Suppose that the driver snd-xyz have several source files. + They are located in the new subdirectory, + pci/xyz. + + + + + Add a new directory (xyz) to extra-subdir-y list in alsa-driver/pci/Makefile + + + + + + + + + + + + Under the directory xyz, create a Makefile + + + Sample Makefile for a driver xyz + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + This procedure is as same as in the last section. + + + + + + Modify alsa-driver/utils/Modules.dep + + + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
diff -Nru a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt --- a/Documentation/sysctl/kernel.txt Thu Apr 17 19:22:46 2003 +++ b/Documentation/sysctl/kernel.txt Thu Apr 17 19:22:46 2003 @@ -204,6 +204,18 @@ ============================================================== +panic_on_oops: + +Controls the kernel's behaviour when an oops or BUG is encountered. + +0: try to continue operation + +1: delay a few seconds (to give klogd time to record the oops output) and + then panic. If the `panic' sysctl is also non-zero then the machine will + be rebooted. + +============================================================== + pid_max: PID allocation wrap value. When the kenrel's next PID value diff -Nru a/MAINTAINERS b/MAINTAINERS --- a/MAINTAINERS Thu Apr 17 19:22:47 2003 +++ b/MAINTAINERS Thu Apr 17 19:22:47 2003 @@ -931,8 +931,8 @@ S: Supported INTERMEZZO FILE SYSTEM -P: Peter J. Braam -M: braam@clusterfs.com +P: Chen Yang +M: intermezzo-devel@lists.sf.net W: http://www.inter-mezzo.org/ L: intermezzo-discuss@lists.sourceforge.net S: Maintained diff -Nru a/Makefile b/Makefile --- a/Makefile Thu Apr 17 19:22:47 2003 +++ b/Makefile Thu Apr 17 19:22:47 2003 @@ -33,7 +33,9 @@ # then ARCH is assigned, getting whatever value it gets normally, and # SUBARCH is subsequently ignored. -SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/) +SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \ + -e s/arm.*/arm/ -e s/sa110/arm/ \ + -e s/s390x/s390/ ) ARCH := $(SUBARCH) # Remove hyphens since they have special meaning in RPM filenames @@ -342,17 +344,9 @@ echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd endef -ifdef CONFIG_SMP -# Final awk script makes sure per-cpu vars are in per-cpu section, as -# old gcc (eg egcs 2.92.11) ignores section attribute if uninitialized. - -check_per_cpu = $(AWK) -f $(srctree)/scripts/per-cpu-check.awk < System.map -endif - define rule_vmlinux $(rule_vmlinux__) $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map - $(check_per_cpu) endef LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s diff -Nru a/arch/alpha/Kconfig b/arch/alpha/Kconfig --- a/arch/alpha/Kconfig Thu Apr 17 19:22:48 2003 +++ b/arch/alpha/Kconfig Thu Apr 17 19:22:48 2003 @@ -59,6 +59,7 @@ Jensen DECpc 150, DEC 2000 model 300, DEC 2000 model 500 LX164 AlphaPC164-LX + Lynx AS 2100A Miata Personal Workstation 433a, 433au, 500a, 500au, 600a, or 600au Marvel AlphaServer ES47 / ES80 / GS1280 @@ -169,6 +170,11 @@ A technical overview of this board is available at . +config ALPHA_LYNX + bool "Lynx" + help + AlphaServer 2100A-based systems. + config ALPHA_MARVEL bool "Marvel" help @@ -263,22 +269,6 @@ (MCA) or VESA. ISA is an older system, now being displaced by PCI; newer boards don't support it. If you have ISA, say Y, otherwise N. -config EISA - bool - default y - ---help--- - The Extended Industry Standard Architecture (EISA) bus was - developed as an open alternative to the IBM MicroChannel bus. - - The EISA bus provided some of the features of the IBM MicroChannel - bus while maintaining backward compatibility with cards made for - the older ISA bus. The EISA bus saw limited use between 1988 and - 1995 when it was made obsolete by the PCI bus. - - Say Y here if you are building a kernel for an EISA-based machine. - - Otherwise, say N. - config SBUS bool @@ -325,8 +315,8 @@ config ALPHA_EV4 bool - depends on ALPHA_JENSEN || ALPHA_SABLE && !ALPHA_GAMMA || ALPHA_NORITAKE && !ALPHA_PRIMO || ALPHA_MIKASA && !ALPHA_PRIMO || ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P_CH || ALPHA_XL || ALPHA_NONAME || ALPHA_EB66 || ALPHA_EB66P || ALPHA_P2K - default y + depends on ALPHA_JENSEN || (ALPHA_SABLE && !ALPHA_GAMMA) || ALPHA_LYNX || ALPHA_NORITAKE && !ALPHA_PRIMO || ALPHA_MIKASA && !ALPHA_PRIMO || ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P_CH || ALPHA_XL || ALPHA_NONAME || ALPHA_EB66 || ALPHA_EB66P || ALPHA_P2K + default y if !ALPHA_LYNX config ALPHA_LCA bool @@ -351,9 +341,12 @@ Runs from standard PC power supply. config ALPHA_EV5 + bool "EV5 CPU(s) (model 5/xxx)?" if ALPHA_LYNX + default y if ALPHA_RX164 || ALPHA_RAWHIDE || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_SABLE && ALPHA_GAMMA || ALPHA_NORITAKE && ALPHA_PRIMO || ALPHA_MIKASA && ALPHA_PRIMO || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR + +config ALPHA_EV4 bool - depends on ALPHA_RX164 || ALPHA_RAWHIDE || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_RUFFIAN || ALPHA_SABLE && ALPHA_GAMMA || ALPHA_NORITAKE && ALPHA_PRIMO || ALPHA_MIKASA && ALPHA_PRIMO || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR - default y + default y if ALPHA_LYNX && !ALPHA_EV5 config ALPHA_CIA bool @@ -384,9 +377,14 @@ help Say Y if you have an AS 2000 5/xxx or an AS 2100 5/xxx. +config ALPHA_GAMMA + bool + depends on ALPHA_LYNX + default y + config ALPHA_T2 bool - depends on ALPHA_SABLE + depends on ALPHA_SABLE || ALPHA_LYNX default y config ALPHA_PYXIS @@ -431,9 +429,23 @@ depends on ALPHA_NAUTILUS default y +config ALPHA_AVANTI + bool + depends on ALPHA_XL || ALPHA_AVANTI_CH + default y + help + Avanti AS 200, AS 205, AS 250, AS 255, AS 300, and AS 400-based + Alphas. Info at + . + +config ALPHA_BROKEN_IRQ_MASK + bool + depends on ALPHA_GENERIC || ALPHA_PC164 + default y + config ALPHA_SRM bool "Use SRM as bootloader" if ALPHA_CABRIOLET || ALPHA_AVANTI_CH || ALPHA_EB64P || ALPHA_PC164 || ALPHA_TAKARA || ALPHA_EB164 || ALPHA_ALCOR || ALPHA_MIATA || ALPHA_LX164 || ALPHA_SX164 || ALPHA_NAUTILUS || ALPHA_NONAME - default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL + default y if ALPHA_JENSEN || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_DP264 || ALPHA_RAWHIDE || ALPHA_EIGER || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_SHARK || ALPHA_MARVEL ---help--- There are two different types of booting firmware on Alphas: SRM, which is command line driven, and ARC, which uses menus and arrow @@ -459,28 +471,26 @@ depends on ALPHA_GENERIC || ALPHA_SRM default y -config ALPHA_EISA +config EISA bool - depends on ALPHA_ALCOR || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_NORITAKE || ALPHA_RAWHIDE + depends on ALPHA_GENERIC || ALPHA_JENSEN || ALPHA_ALCOR || ALPHA_MIKASA || ALPHA_SABLE || ALPHA_LYNX || ALPHA_NORITAKE || ALPHA_RAWHIDE default y + ---help--- + The Extended Industry Standard Architecture (EISA) bus was + developed as an open alternative to the IBM MicroChannel bus. -config ALPHA_AVANTI - bool - depends on ALPHA_XL || ALPHA_AVANTI_CH - default y - help - Avanti AS 200, AS 205, AS 250, AS 255, AS 300, and AS 400-based - Alphas. Info at - . + The EISA bus provided some of the features of the IBM MicroChannel + bus while maintaining backward compatibility with cards made for + the older ISA bus. The EISA bus saw limited use between 1988 and + 1995 when it was made obsolete by the PCI bus. -config ALPHA_BROKEN_IRQ_MASK - bool - depends on ALPHA_GENERIC || ALPHA_PC164 - default y + Say Y here if you are building a kernel for an EISA-based machine. + + Otherwise, say N. config SMP bool "Symmetric multi-processing support" - depends on ALPHA_SABLE || ALPHA_RAWHIDE || ALPHA_DP264 || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_GENERIC || ALPHA_SHARK || ALPHA_MARVEL + depends on ALPHA_SABLE || ALPHA_LYNX || ALPHA_RAWHIDE || ALPHA_DP264 || ALPHA_WILDFIRE || ALPHA_TITAN || ALPHA_GENERIC || ALPHA_SHARK || ALPHA_MARVEL ---help--- This enables support for systems with more than one CPU. If you have a system with only one CPU, like most personal computers, say N. If diff -Nru a/arch/alpha/kernel/Makefile b/arch/alpha/kernel/Makefile --- a/arch/alpha/kernel/Makefile Thu Apr 17 19:22:45 2003 +++ b/arch/alpha/kernel/Makefile Thu Apr 17 19:22:45 2003 @@ -83,6 +83,7 @@ obj-$(CONFIG_ALPHA_RUFFIAN) += sys_ruffian.o irq_pyxis.o irq_i8259.o obj-$(CONFIG_ALPHA_RX164) += sys_rx164.o irq_i8259.o obj-$(CONFIG_ALPHA_SABLE) += sys_sable.o +obj-$(CONFIG_ALPHA_LYNX) += sys_sable.o obj-$(CONFIG_ALPHA_BOOK1) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o obj-$(CONFIG_ALPHA_AVANTI) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o obj-$(CONFIG_ALPHA_NONAME) += sys_sio.o irq_i8259.o irq_srm.o ns87312.o diff -Nru a/arch/alpha/kernel/core_cia.c b/arch/alpha/kernel/core_cia.c --- a/arch/alpha/kernel/core_cia.c Thu Apr 17 19:22:47 2003 +++ b/arch/alpha/kernel/core_cia.c Thu Apr 17 19:22:47 2003 @@ -610,7 +610,7 @@ *(vip)CIA_IOC_CIA_CNFG = temp; } - /* Syncronize with all previous changes. */ + /* Synchronize with all previous changes. */ mb(); *(vip)CIA_IOC_CIA_REV; diff -Nru a/arch/alpha/kernel/core_t2.c b/arch/alpha/kernel/core_t2.c --- a/arch/alpha/kernel/core_t2.c Thu Apr 17 19:22:43 2003 +++ b/arch/alpha/kernel/core_t2.c Thu Apr 17 19:22:43 2003 @@ -17,6 +17,7 @@ #include #include +#include #define __EXTERN_INLINE #include @@ -26,6 +27,12 @@ #include "proto.h" #include "pci_impl.h" +/* For dumping initial DMA window settings. */ +#define DEBUG_PRINT_INITIAL_SETTINGS 0 + +/* For dumping final DMA window settings. */ +#define DEBUG_PRINT_FINAL_SETTINGS 0 + /* * By default, we direct-map starting at 2GB, in order to allow the * maximum size direct-map window (2GB) to match the maximum amount of @@ -34,11 +41,23 @@ * ISA DMA, since the maximum ISA DMA address is 2GB-1. * * For now, this seems a reasonable trade-off: even though most SABLEs - * have far less than even 1GB of memory, floppy usage/performance will - * not really be affected by forcing it to go via scatter/gather... + * have less than 1GB of memory, floppy usage/performance will not + * really be affected by forcing it to go via scatter/gather... */ #define T2_DIRECTMAP_2G 1 +#if T2_DIRECTMAP_2G +# define T2_DIRECTMAP_START 0x80000000UL +# define T2_DIRECTMAP_LENGTH 0x80000000UL +#else +# define T2_DIRECTMAP_START 0x40000000UL +# define T2_DIRECTMAP_LENGTH 0x40000000UL +#endif + +/* The ISA scatter/gather window settings. */ +#define T2_ISA_SG_START 0x00800000UL +#define T2_ISA_SG_LENGTH 0x00800000UL + /* * NOTE: Herein lie back-to-back mb instructions. They are magic. * One plausible explanation is that the i/o controller does not properly @@ -57,6 +76,24 @@ # define DBG(args) #endif +static volatile unsigned int t2_mcheck_any_expected; +static volatile unsigned int t2_mcheck_last_taken; + +/* Place to save the DMA Window registers as set up by SRM + for restoration during shutdown. */ +static struct +{ + struct { + unsigned long wbase; + unsigned long wmask; + unsigned long tbase; + } window[2]; + unsigned long hae_1; + unsigned long hae_2; + unsigned long hae_3; + unsigned long hae_4; + unsigned long hbase; +} t2_saved_config __attribute((common)); /* * Given a bus, device, and function number, compute resulting @@ -134,42 +171,34 @@ return 0; } +/* + * NOTE: both conf_read() and conf_write() may set HAE_3 when needing + * to do type1 access. This is protected by the use of spinlock IRQ + * primitives in the wrapper functions pci_{read,write}_config_*() + * defined in drivers/pci/pci.c. + */ static unsigned int conf_read(unsigned long addr, unsigned char type1) { - unsigned long flags; - unsigned int value, cpu; + unsigned int value, cpu, taken; unsigned long t2_cfg = 0; cpu = smp_processor_id(); - local_irq_save(flags); /* avoid getting hit by machine check */ - DBG(("conf_read(addr=0x%lx, type1=%d)\n", addr, type1)); -#if 0 - { - unsigned long stat0; - /* Reset status register to avoid losing errors. */ - stat0 = *(vulp)T2_IOCSR; - *(vulp)T2_IOCSR = stat0; - mb(); - DBG(("conf_read: T2 IOCSR was 0x%x\n", stat0)); - } -#endif - /* If Type1 access, must set T2 CFG. */ if (type1) { t2_cfg = *(vulp)T2_HAE_3 & ~0xc0000000UL; *(vulp)T2_HAE_3 = 0x40000000UL | t2_cfg; mb(); - DBG(("conf_read: TYPE1 access\n")); } mb(); draina(); mcheck_expected(cpu) = 1; mcheck_taken(cpu) = 0; + t2_mcheck_any_expected |= (1 << cpu); mb(); /* Access configuration space. */ @@ -177,12 +206,20 @@ mb(); mb(); /* magic */ - if (mcheck_taken(cpu)) { + /* Wait for possible mcheck. Also, this lets other CPUs clear + their mchecks as well, as they can reliably tell when + another CPU is in the midst of handling a real mcheck via + the "taken" function. */ + udelay(100); + + if ((taken = mcheck_taken(cpu))) { mcheck_taken(cpu) = 0; + t2_mcheck_last_taken |= (1 << cpu); value = 0xffffffffU; mb(); } mcheck_expected(cpu) = 0; + t2_mcheck_any_expected = 0; mb(); /* If Type1 access, must reset T2 CFG so normal IO space ops work. */ @@ -190,45 +227,30 @@ *(vulp)T2_HAE_3 = t2_cfg; mb(); } - DBG(("conf_read(): finished\n")); - local_irq_restore(flags); return value; } static void conf_write(unsigned long addr, unsigned int value, unsigned char type1) { - unsigned long flags; - unsigned int cpu; + unsigned int cpu, taken; unsigned long t2_cfg = 0; cpu = smp_processor_id(); - local_irq_save(flags); /* avoid getting hit by machine check */ - -#if 0 - { - unsigned long stat0; - /* Reset status register to avoid losing errors. */ - stat0 = *(vulp)T2_IOCSR; - *(vulp)T2_IOCSR = stat0; - mb(); - DBG(("conf_write: T2 ERR was 0x%x\n", stat0)); - } -#endif - /* If Type1 access, must set T2 CFG. */ if (type1) { t2_cfg = *(vulp)T2_HAE_3 & ~0xc0000000UL; *(vulp)T2_HAE_3 = t2_cfg | 0x40000000UL; mb(); - DBG(("conf_write: TYPE1 access\n")); } mb(); draina(); mcheck_expected(cpu) = 1; + mcheck_taken(cpu) = 0; + t2_mcheck_any_expected |= (1 << cpu); mb(); /* Access configuration space. */ @@ -236,7 +258,19 @@ mb(); mb(); /* magic */ + /* Wait for possible mcheck. Also, this lets other CPUs clear + their mchecks as well, as they can reliably tell when + this CPU is in the midst of handling a real mcheck via + the "taken" function. */ + udelay(100); + + if ((taken = mcheck_taken(cpu))) { + mcheck_taken(cpu) = 0; + t2_mcheck_last_taken |= (1 << cpu); + mb(); + } mcheck_expected(cpu) = 0; + t2_mcheck_any_expected = 0; mb(); /* If Type1 access, must reset T2 CFG so normal IO space ops work. */ @@ -244,8 +278,6 @@ *(vulp)T2_HAE_3 = t2_cfg; mb(); } - DBG(("conf_write(): finished\n")); - local_irq_restore(flags); } static int @@ -290,48 +322,121 @@ .write = t2_write_config, }; +static void __init +t2_direct_map_window1(unsigned long base, unsigned long length) +{ + unsigned long temp; + + __direct_map_base = base; + __direct_map_size = length; + + temp = (base & 0xfff00000UL) | ((base + length - 1) >> 20); + *(vulp)T2_WBASE1 = temp | 0x80000UL; /* OR in ENABLE bit */ + temp = (length - 1) & 0xfff00000UL; + *(vulp)T2_WMASK1 = temp; + *(vulp)T2_TBASE1 = 0; + +#if DEBUG_PRINT_FINAL_SETTINGS + printk("%s: setting WBASE1=0x%lx WMASK1=0x%lx TBASE1=0x%lx\n", + __FUNCTION__, + *(vulp)T2_WBASE1, + *(vulp)T2_WMASK1, + *(vulp)T2_TBASE1); +#endif +} + +static void __init +t2_sg_map_window2(struct pci_controller *hose, + unsigned long base, + unsigned long length) +{ + unsigned long temp; + + /* Note we can only do 1 SG window, as the other is for direct, so + do an ISA SG area, especially for the floppy. */ + hose->sg_isa = iommu_arena_new(hose, base, length, 0); + hose->sg_pci = NULL; + + temp = (base & 0xfff00000UL) | ((base + length - 1) >> 20); + *(vulp)T2_WBASE2 = temp | 0xc0000UL; /* OR in ENABLE/SG bits */ + temp = (length - 1) & 0xfff00000UL; + *(vulp)T2_WMASK2 = temp; + *(vulp)T2_TBASE2 = virt_to_phys(hose->sg_isa->ptes) >> 1; + mb(); + + t2_pci_tbi(hose, 0, -1); /* flush TLB all */ + +#if DEBUG_PRINT_FINAL_SETTINGS + printk("%s: setting WBASE2=0x%lx WMASK2=0x%lx TBASE2=0x%lx\n", + __FUNCTION__, + *(vulp)T2_WBASE2, + *(vulp)T2_WMASK2, + *(vulp)T2_TBASE2); +#endif +} + +static void __init +t2_save_configuration(void) +{ +#if DEBUG_PRINT_INITIAL_SETTINGS + printk("%s: HAE_1 was 0x%lx\n", __FUNCTION__, srm_hae); /* HW is 0 */ + printk("%s: HAE_2 was 0x%lx\n", __FUNCTION__, *(vulp)T2_HAE_2); + printk("%s: HAE_3 was 0x%lx\n", __FUNCTION__, *(vulp)T2_HAE_3); + printk("%s: HAE_4 was 0x%lx\n", __FUNCTION__, *(vulp)T2_HAE_4); + printk("%s: HBASE was 0x%lx\n", __FUNCTION__, *(vulp)T2_HBASE); + + printk("%s: WBASE1=0x%lx WMASK1=0x%lx TBASE1=0x%lx\n", __FUNCTION__, + *(vulp)T2_WBASE1, *(vulp)T2_WMASK1, *(vulp)T2_TBASE1); + printk("%s: WBASE2=0x%lx WMASK2=0x%lx TBASE2=0x%lx\n", __FUNCTION__, + *(vulp)T2_WBASE2, *(vulp)T2_WMASK2, *(vulp)T2_TBASE2); +#endif + + /* + * Save the DMA Window registers. + */ + t2_saved_config.window[0].wbase = *(vulp)T2_WBASE1; + t2_saved_config.window[0].wmask = *(vulp)T2_WMASK1; + t2_saved_config.window[0].tbase = *(vulp)T2_TBASE1; + t2_saved_config.window[1].wbase = *(vulp)T2_WBASE2; + t2_saved_config.window[1].wmask = *(vulp)T2_WMASK2; + t2_saved_config.window[1].tbase = *(vulp)T2_TBASE2; + + t2_saved_config.hae_1 = srm_hae; /* HW is already set to 0 */ + t2_saved_config.hae_2 = *(vulp)T2_HAE_2; + t2_saved_config.hae_3 = *(vulp)T2_HAE_3; + t2_saved_config.hae_4 = *(vulp)T2_HAE_4; + t2_saved_config.hbase = *(vulp)T2_HBASE; +} + void __init t2_init_arch(void) { struct pci_controller *hose; - unsigned long t2_iocsr; + unsigned long temp; unsigned int i; for (i = 0; i < NR_CPUS; i++) { mcheck_expected(i) = 0; mcheck_taken(i) = 0; } - -#if 0 - /* Set up error reporting. */ - t2_iocsr = *(vulp)T2_IOCSR; - *(vulp)T2_IOCSR = t2_iocsr | (0x1UL << 7); /* TLB error check */ - mb(); - *(vulp)T2_IOCSR; /* read it back to make sure */ -#endif + t2_mcheck_any_expected = 0; + t2_mcheck_last_taken = 0; /* Enable scatter/gather TLB use. */ - t2_iocsr = *(vulp)T2_IOCSR; - if (!(t2_iocsr & (0x1UL << 26))) { + temp = *(vulp)T2_IOCSR; + if (!(temp & (0x1UL << 26))) { printk("t2_init_arch: enabling SG TLB, IOCSR was 0x%lx\n", - t2_iocsr); - *(vulp)T2_IOCSR = t2_iocsr | (0x1UL << 26); + temp); + *(vulp)T2_IOCSR = temp | (0x1UL << 26); mb(); *(vulp)T2_IOCSR; /* read it back to make sure */ } -#if 0 - printk("t2_init_arch: HBASE was 0x%lx\n", *(vulp)T2_HBASE); - printk("t2_init_arch: WBASE1=0x%lx WMASK1=0x%lx TBASE1=0x%lx\n", - *(vulp)T2_WBASE1, *(vulp)T2_WMASK1, *(vulp)T2_TBASE1); - printk("t2_init_arch: WBASE2=0x%lx WMASK2=0x%lx TBASE2=0x%lx\n", - *(vulp)T2_WBASE2, *(vulp)T2_WMASK2, *(vulp)T2_TBASE2); -#endif + t2_save_configuration(); /* * Create our single hose. */ - pci_isa_hose = hose = alloc_pci_controller(); hose->io_space = &ioport_resource; hose->mem_space = &iomem_resource; @@ -342,52 +447,51 @@ hose->sparse_io_base = T2_IO - IDENT_ADDR; hose->dense_io_base = 0; - /* Note we can only do 1 SG window, as the other is for direct, so - do an ISA SG area, especially for the floppy. */ - hose->sg_isa = iommu_arena_new(hose, 0x00800000, 0x00800000, 0); - hose->sg_pci = NULL; - /* * Set up the PCI->physical memory translation windows. * - * Window 1 goes at ? GB and is ?GB large, direct mapped. - * Window 2 goes at 8 MB and is 8MB large, scatter/gather (for ISA). + * Window 1 is direct mapped. + * Window 2 is scatter/gather (for ISA). */ -#if T2_DIRECTMAP_2G - __direct_map_base = 0x80000000UL; - __direct_map_size = 0x80000000UL; + t2_direct_map_window1(T2_DIRECTMAP_START, T2_DIRECTMAP_LENGTH); - /* WARNING!! must correspond to the direct map window params!!! */ - *(vulp)T2_WBASE1 = 0x80080fffU; - *(vulp)T2_WMASK1 = 0x7ff00000U; - *(vulp)T2_TBASE1 = 0; -#else /* T2_DIRECTMAP_2G */ - __direct_map_base = 0x40000000UL; - __direct_map_size = 0x40000000UL; - - /* WARNING!! must correspond to the direct map window params!!! */ - *(vulp)T2_WBASE1 = 0x400807ffU; - *(vulp)T2_WMASK1 = 0x3ff00000U; - *(vulp)T2_TBASE1 = 0; -#endif /* T2_DIRECTMAP_2G */ + /* Always make an ISA DMA window. */ + t2_sg_map_window2(hose, T2_ISA_SG_START, T2_ISA_SG_LENGTH); - /* WARNING!! must correspond to the SG arena/window params!!! */ - *(vulp)T2_WBASE2 = 0x008c000fU; - *(vulp)T2_WMASK2 = 0x00700000U; - *(vulp)T2_TBASE2 = virt_to_phys(hose->sg_isa->ptes) >> 1; - - *(vulp)T2_HBASE = 0x0; + *(vulp)T2_HBASE = 0x0; /* Disable HOLES. */ /* Zero HAE. */ - *(vulp)T2_HAE_1 = 0; mb(); - *(vulp)T2_HAE_2 = 0; mb(); - *(vulp)T2_HAE_3 = 0; mb(); + *(vulp)T2_HAE_1 = 0; mb(); /* Sparse MEM HAE */ + *(vulp)T2_HAE_2 = 0; mb(); /* Sparse I/O HAE */ + *(vulp)T2_HAE_3 = 0; mb(); /* Config Space HAE */ #if 0 - *(vulp)T2_HAE_4 = 0; mb(); /* DO NOT TOUCH THIS!!! */ + /* !!! DO NOT EVER TOUCH THIS !!! */ + *(vulp)T2_HAE_4 = 0; mb(); /* Dense MEM HAE */ #endif +} - t2_pci_tbi(hose, 0, -1); /* flush TLB all */ +void +t2_kill_arch(int mode) +{ + /* + * Restore the DMA Window registers. + */ + *(vulp)T2_WBASE1 = t2_saved_config.window[0].wbase; + *(vulp)T2_WMASK1 = t2_saved_config.window[0].wmask; + *(vulp)T2_TBASE1 = t2_saved_config.window[0].tbase; + *(vulp)T2_WBASE2 = t2_saved_config.window[1].wbase; + *(vulp)T2_WMASK2 = t2_saved_config.window[1].wmask; + *(vulp)T2_TBASE2 = t2_saved_config.window[1].tbase; + mb(); + + *(vulp)T2_HAE_1 = srm_hae; + *(vulp)T2_HAE_2 = t2_saved_config.hae_2; + *(vulp)T2_HAE_3 = t2_saved_config.hae_3; + *(vulp)T2_HAE_4 = t2_saved_config.hae_4; + *(vulp)T2_HBASE = t2_saved_config.hbase; + mb(); + *(vulp)T2_HBASE; /* READ it back to ensure WRITE occurred. */ } void @@ -415,13 +519,7 @@ { struct sable_cpu_csr *cpu_regs; - cpu_regs = (struct sable_cpu_csr *)T2_CPU0_BASE; - if (cpu == 1) - cpu_regs = (struct sable_cpu_csr *)T2_CPU1_BASE; - if (cpu == 2) - cpu_regs = (struct sable_cpu_csr *)T2_CPU2_BASE; - if (cpu == 3) - cpu_regs = (struct sable_cpu_csr *)T2_CPU3_BASE; + cpu_regs = (struct sable_cpu_csr *)T2_CPUn_BASE(cpu); cpu_regs->sic &= ~SIC_SEIC; @@ -438,19 +536,76 @@ mb(); /* magic */ } +/* + * SABLE seems to have a "broadcast" style machine check, in that all + * CPUs receive it. And, the issuing CPU, in the case of PCI Config + * space read/write faults, will also receive a second mcheck, upon + * lowering IPL during completion processing in pci_read_config_byte() + * et al. + * + * Hence all the taken/expected/any_expected/last_taken stuff... + */ void t2_machine_check(unsigned long vector, unsigned long la_ptr, struct pt_regs * regs) { int cpu = smp_processor_id(); +#if DEBUG_MCHECK > 0 + struct el_common *mchk_header = (struct el_common *)la_ptr; +#endif /* DEBUG_MCHECK */ /* Clear the error before any reporting. */ mb(); mb(); /* magic */ draina(); t2_clear_errors(cpu); - wrmces(rdmces()|1); /* ??? */ - mb(); + + /* This should not actually be done until the logout frame is + examined, but, since we don't do that, go on and do this... */ + wrmces(0x7); + mb(); + + /* Now, do testing for the anomalous conditions. */ + if (!mcheck_expected(cpu) && t2_mcheck_any_expected) { + /* + * FUNKY: Received mcheck on a CPU and not + * expecting it, but another CPU is expecting one. + * + * Just dismiss it for now on this CPU... + */ +#if DEBUG_MCHECK > 0 + printk("t2_machine_check(cpu%d): any_expected 0x%x -" + " (assumed) spurious -" + " code 0x%x\n", cpu, t2_mcheck_any_expected, + (unsigned int)mchk_header->code); +#endif /* DEBUG_MCHECK */ + return; + } + + if (!mcheck_expected(cpu) && !t2_mcheck_any_expected) { + if (t2_mcheck_last_taken & (1 << cpu)) { +#if DEBUG_MCHECK > 0 + printk("t2_machine_check(cpu%d): last_taken 0x%x - " + "unexpected mcheck - code 0x%x\n", + cpu, t2_mcheck_last_taken, + (unsigned int)mchk_header->code); +#endif /* DEBUG_MCHECK */ + t2_mcheck_last_taken = 0; + mb(); + return; + } else { + t2_mcheck_last_taken = 0; + mb(); + } + } + +#if DEBUG_MCHECK > 0 + printk("%s t2_mcheck(cpu%d): last_taken 0x%x - " + "any_expected 0x%x - code 0x%x\n", + (mcheck_expected(cpu) ? "EX" : "UN"), cpu, + t2_mcheck_last_taken, t2_mcheck_any_expected, + (unsigned int)mchk_header->code); +#endif /* DEBUG_MCHECK */ process_mcheck_info(vector, la_ptr, regs, "T2", mcheck_expected(cpu)); } diff -Nru a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c --- a/arch/alpha/kernel/pci.c Thu Apr 17 19:22:43 2003 +++ b/arch/alpha/kernel/pci.c Thu Apr 17 19:22:43 2003 @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -230,7 +231,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus) { - /* Propogate hose info into the subordinate devices. */ + /* Propagate hose info into the subordinate devices. */ struct pci_controller *hose = bus->sysdata; struct list_head *ln; diff -Nru a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c --- a/arch/alpha/kernel/pci_iommu.c Thu Apr 17 19:22:49 2003 +++ b/arch/alpha/kernel/pci_iommu.c Thu Apr 17 19:22:49 2003 @@ -431,7 +431,7 @@ /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must be the same as what as passed into pci_alloc_consistent. - References to the memory and mappings assosciated with CPU_ADDR or + References to the memory and mappings associated with CPU_ADDR or DMA_ADDR past this call are illegal. */ void diff -Nru a/arch/alpha/kernel/proto.h b/arch/alpha/kernel/proto.h --- a/arch/alpha/kernel/proto.h Thu Apr 17 19:22:44 2003 +++ b/arch/alpha/kernel/proto.h Thu Apr 17 19:22:44 2003 @@ -76,6 +76,7 @@ /* core_t2.c */ extern struct pci_ops t2_pci_ops; extern void t2_init_arch(void); +extern void t2_kill_arch(int); extern void t2_machine_check(u64, u64, struct pt_regs *); extern void t2_pci_tbi(struct pci_controller *, dma_addr_t, dma_addr_t); diff -Nru a/arch/alpha/kernel/semaphore.c b/arch/alpha/kernel/semaphore.c --- a/arch/alpha/kernel/semaphore.c Thu Apr 17 19:22:46 2003 +++ b/arch/alpha/kernel/semaphore.c Thu Apr 17 19:22:46 2003 @@ -122,7 +122,7 @@ long tmp, tmp2, tmp3; /* We must undo the sem->count down_interruptible decrement - simultaneously and atomicly with the sem->waking + simultaneously and atomically with the sem->waking adjustment, otherwise we can race with __up. This is accomplished by doing a 64-bit ll/sc on two 32-bit words. diff -Nru a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c --- a/arch/alpha/kernel/setup.c Thu Apr 17 19:22:44 2003 +++ b/arch/alpha/kernel/setup.c Thu Apr 17 19:22:44 2003 @@ -162,6 +162,7 @@ WEAK(eiger_mv); WEAK(jensen_mv); WEAK(lx164_mv); +WEAK(lynx_mv); WEAK(marvel_ev7_mv); WEAK(miata_mv); WEAK(mikasa_mv); @@ -268,7 +269,7 @@ unsigned long size; size = initrd_end - initrd_start; - start = __alloc_bootmem(size, PAGE_SIZE, 0); + start = __alloc_bootmem(PAGE_ALIGN(size), PAGE_SIZE, 0); if (!start || __pa(start) + size > mem_limit) { initrd_start = initrd_end = 0; return NULL; @@ -486,7 +487,7 @@ notifier_chain_register(&panic_notifier_list, &alpha_panic_block); #ifdef CONFIG_ALPHA_GENERIC - /* Assume that we've booted from SRM if we havn't booted from MILO. + /* Assume that we've booted from SRM if we haven't booted from MILO. Detect the later by looking for "MILO" in the system serial nr. */ alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0; #endif @@ -569,7 +570,7 @@ #endif /* - * Indentify and reconfigure for the current system. + * Identify and reconfigure for the current system. */ cpu = (struct percpu_struct*)((char*)hwrpb + hwrpb->processor_offset); @@ -739,7 +740,7 @@ NULL, /* Turbolaser */ &avanti_mv, NULL, /* Mustang */ - &alcor_mv, /* Alcor, Bret, Maverick. */ + NULL, /* Alcor, Bret, Maverick. HWRPB inaccurate? */ NULL, /* Tradewind */ NULL, /* Mikasa -- see below. */ NULL, /* EB64 */ @@ -748,7 +749,7 @@ &alphabook1_mv, &rawhide_mv, NULL, /* K2 */ - NULL, /* Lynx */ + &lynx_mv, /* Lynx */ &xl_mv, NULL, /* EB164 -- see variation. */ NULL, /* Noritake -- see below. */ @@ -930,6 +931,7 @@ &eiger_mv, &jensen_mv, &lx164_mv, + &lynx_mv, &miata_mv, &mikasa_mv, &mikasa_primo_mv, diff -Nru a/arch/alpha/kernel/sys_cabriolet.c b/arch/alpha/kernel/sys_cabriolet.c --- a/arch/alpha/kernel/sys_cabriolet.c Thu Apr 17 19:22:44 2003 +++ b/arch/alpha/kernel/sys_cabriolet.c Thu Apr 17 19:22:44 2003 @@ -132,11 +132,13 @@ setup_irq(16+4, &isa_cascade_irqaction); } +#ifndef CONFIG_ALPHA_PC164 static void __init cabriolet_init_irq(void) { common_init_irq(srm_device_interrupt); } +#endif #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_PC164) /* In theory, the PC164 has the same interrupt hardware as the other diff -Nru a/arch/alpha/kernel/sys_sable.c b/arch/alpha/kernel/sys_sable.c --- a/arch/alpha/kernel/sys_sable.c Thu Apr 17 19:22:43 2003 +++ b/arch/alpha/kernel/sys_sable.c Thu Apr 17 19:22:43 2003 @@ -5,7 +5,7 @@ * Copyright (C) 1996 Jay A Estabrook * Copyright (C) 1998, 1999 Richard Henderson * - * Code supporting the Sable and Sable-Gamma systems. + * Code supporting the Sable, Sable-Gamma, and Lynx systems. */ #include @@ -31,8 +31,28 @@ #include "pci_impl.h" #include "machvec_impl.h" -spinlock_t sable_irq_lock = SPIN_LOCK_UNLOCKED; +spinlock_t sable_lynx_irq_lock = SPIN_LOCK_UNLOCKED; +typedef struct irq_swizzle_struct +{ + char irq_to_mask[64]; + char mask_to_irq[64]; + + /* Note mask bit is true for DISABLED irqs. */ + unsigned long shadow_mask; + + void (*update_irq_hw)(unsigned long bit, unsigned long mask); + void (*ack_irq_hw)(unsigned long bit); + +} irq_swizzle_t; + +static irq_swizzle_t *sable_lynx_irq_swizzle; + +static void sable_lynx_init_irq(int nr_irqs); + +#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SABLE) + +/***********************************************************************/ /* * For SABLE, which is really baroque, we manage 40 IRQ's, but the * hardware really only supports 24, not via normal ISA PIC, @@ -71,30 +91,7 @@ *23 IIC - */ -static struct -{ - char irq_to_mask[40]; - char mask_to_irq[40]; - - /* Note mask bit is true for DISABLED irqs. */ - unsigned long shadow_mask; -} sable_irq_swizzle = { - { - -1, 6, -1, 8, 15, 12, 7, 9, /* pseudo PIC 0-7 */ - -1, 16, 17, 18, 3, -1, 21, 22, /* pseudo PIC 8-15 */ - -1, -1, -1, -1, -1, -1, -1, -1, /* pseudo EISA 0-7 */ - -1, -1, -1, -1, -1, -1, -1, -1, /* pseudo EISA 8-15 */ - 2, 1, 0, 4, 5, -1, -1, -1, /* pseudo PCI */ - }, - { - 34, 33, 32, 12, 35, 36, 1, 6, /* mask 0-7 */ - 3, 7, -1, -1, 5, -1, -1, 4, /* mask 8-15 */ - 9, 10, 11, -1, -1, 14, 15, -1, /* mask 16-23 */ - }, - -1 -}; - -static inline void +static void sable_update_irq_hw(unsigned long bit, unsigned long mask) { int port = 0x537; @@ -110,7 +107,7 @@ outb(mask, port); } -static inline void +static void sable_ack_irq_hw(unsigned long bit) { int port, val1, val2; @@ -133,102 +130,46 @@ outb(val2, 0x534); /* ack the master */ } -static inline void -sable_enable_irq(unsigned int irq) -{ - unsigned long bit, mask; - - bit = sable_irq_swizzle.irq_to_mask[irq]; - spin_lock(&sable_irq_lock); - mask = sable_irq_swizzle.shadow_mask &= ~(1UL << bit); - sable_update_irq_hw(bit, mask); - spin_unlock(&sable_irq_lock); -} - -static void -sable_disable_irq(unsigned int irq) -{ - unsigned long bit, mask; - - bit = sable_irq_swizzle.irq_to_mask[irq]; - spin_lock(&sable_irq_lock); - mask = sable_irq_swizzle.shadow_mask |= 1UL << bit; - sable_update_irq_hw(bit, mask); - spin_unlock(&sable_irq_lock); -} - -static unsigned int -sable_startup_irq(unsigned int irq) -{ - sable_enable_irq(irq); - return 0; -} - -static void -sable_end_irq(unsigned int irq) -{ - if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) - sable_enable_irq(irq); -} - -static void -sable_mask_and_ack_irq(unsigned int irq) -{ - unsigned long bit, mask; - - bit = sable_irq_swizzle.irq_to_mask[irq]; - spin_lock(&sable_irq_lock); - mask = sable_irq_swizzle.shadow_mask |= 1UL << bit; - sable_update_irq_hw(bit, mask); - sable_ack_irq_hw(bit); - spin_unlock(&sable_irq_lock); -} - -static struct hw_interrupt_type sable_irq_type = { - .typename = "SABLE", - .startup = sable_startup_irq, - .shutdown = sable_disable_irq, - .enable = sable_enable_irq, - .disable = sable_disable_irq, - .ack = sable_mask_and_ack_irq, - .end = sable_end_irq, +static irq_swizzle_t sable_irq_swizzle = { + { + -1, 6, -1, 8, 15, 12, 7, 9, /* pseudo PIC 0-7 */ + -1, 16, 17, 18, 3, -1, 21, 22, /* pseudo PIC 8-15 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* pseudo EISA 0-7 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* pseudo EISA 8-15 */ + 2, 1, 0, 4, 5, -1, -1, -1, /* pseudo PCI */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1 /* */ + }, + { + 34, 33, 32, 12, 35, 36, 1, 6, /* mask 0-7 */ + 3, 7, -1, -1, 5, -1, -1, 4, /* mask 8-15 */ + 9, 10, 11, -1, -1, 14, 15, -1, /* mask 16-23 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1, /* */ + -1, -1, -1, -1, -1, -1, -1, -1 /* */ + }, + -1, + sable_update_irq_hw, + sable_ack_irq_hw }; -static void -sable_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) -{ - /* Note that the vector reported by the SRM PALcode corresponds - to the interrupt mask bits, but we have to manage via more - normal IRQs. */ - - int bit, irq; - - bit = (vector - 0x800) >> 4; - irq = sable_irq_swizzle.mask_to_irq[bit]; - handle_irq(irq, regs); -} - static void __init sable_init_irq(void) { - long i; - outb(-1, 0x537); /* slave 0 */ outb(-1, 0x53b); /* slave 1 */ outb(-1, 0x53d); /* slave 2 */ outb(0x44, 0x535); /* enable cascades in master */ - for (i = 0; i < 40; ++i) { - irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; - irq_desc[i].handler = &sable_irq_type; - } - - common_init_isa_dma(); + sable_lynx_irq_swizzle = &sable_irq_swizzle; + sable_lynx_init_irq(40); } - /* - * PCI Fixup configuration for ALPHA SABLE (2100) - 2100A is different ?? + * PCI Fixup configuration for ALPHA SABLE (2100). * * The device to slot mapping looks like: * @@ -256,7 +197,7 @@ static int __init sable_map_irq(struct pci_dev *dev, u8 slot, u8 pin) { - static char irq_tab[9][5] __initdata = { + static char irq_tab[9][5] __initdata = { /*INT INTA INTB INTC INTD */ { 32+0, 32+0, 32+0, 32+0, 32+0}, /* IdSel 0, TULIP */ { 32+1, 32+1, 32+1, 32+1, 32+1}, /* IdSel 1, SCSI */ @@ -266,13 +207,349 @@ { -1, -1, -1, -1, -1}, /* IdSel 5, none */ { 32+2, 32+2, 32+2, 32+2, 32+2}, /* IdSel 6, slot 0 */ { 32+3, 32+3, 32+3, 32+3, 32+3}, /* IdSel 7, slot 1 */ - { 32+4, 32+4, 32+4, 32+4, 32+4}, /* IdSel 8, slot 2 */ - }; + { 32+4, 32+4, 32+4, 32+4, 32+4} /* IdSel 8, slot 2 */ + }; long min_idsel = 0, max_idsel = 8, irqs_per_slot = 5; return COMMON_TABLE_LOOKUP; } +#endif /* defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_SABLE) */ +#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_LYNX) +/***********************************************************************/ +/* LYNX hardware specifics + */ +/* + * For LYNX, which is also baroque, we manage 64 IRQs, via a custom IC. + * + * Bit Meaning Kernel IRQ + *------------------------------------------ + * 0 + * 1 + * 2 + * 3 mouse 12 + * 4 + * 5 + * 6 keyboard 1 + * 7 floppy 6 + * 8 COM2 3 + * 9 parallel port 7 + *10 EISA irq 3 - + *11 EISA irq 4 - + *12 EISA irq 5 5 + *13 EISA irq 6 - + *14 EISA irq 7 - + *15 COM1 4 + *16 EISA irq 9 9 + *17 EISA irq 10 10 + *18 EISA irq 11 11 + *19 EISA irq 12 - + *20 + *21 EISA irq 14 14 + *22 EISA irq 15 15 + *23 IIC - + *24 VGA (builtin) - + *25 + *26 + *27 + *28 NCR810 (builtin) 28 + *29 + *30 + *31 + *32 PCI 0 slot 4 A primary bus 32 + *33 PCI 0 slot 4 B primary bus 33 + *34 PCI 0 slot 4 C primary bus 34 + *35 PCI 0 slot 4 D primary bus + *36 PCI 0 slot 5 A primary bus + *37 PCI 0 slot 5 B primary bus + *38 PCI 0 slot 5 C primary bus + *39 PCI 0 slot 5 D primary bus + *40 PCI 0 slot 6 A primary bus + *41 PCI 0 slot 6 B primary bus + *42 PCI 0 slot 6 C primary bus + *43 PCI 0 slot 6 D primary bus + *44 PCI 0 slot 7 A primary bus + *45 PCI 0 slot 7 B primary bus + *46 PCI 0 slot 7 C primary bus + *47 PCI 0 slot 7 D primary bus + *48 PCI 0 slot 0 A secondary bus + *49 PCI 0 slot 0 B secondary bus + *50 PCI 0 slot 0 C secondary bus + *51 PCI 0 slot 0 D secondary bus + *52 PCI 0 slot 1 A secondary bus + *53 PCI 0 slot 1 B secondary bus + *54 PCI 0 slot 1 C secondary bus + *55 PCI 0 slot 1 D secondary bus + *56 PCI 0 slot 2 A secondary bus + *57 PCI 0 slot 2 B secondary bus + *58 PCI 0 slot 2 C secondary bus + *59 PCI 0 slot 2 D secondary bus + *60 PCI 0 slot 3 A secondary bus + *61 PCI 0 slot 3 B secondary bus + *62 PCI 0 slot 3 C secondary bus + *63 PCI 0 slot 3 D secondary bus + */ + +static void +lynx_update_irq_hw(unsigned long bit, unsigned long mask) +{ + /* + * Write the AIR register on the T3/T4 with the + * address of the IC mask register (offset 0x40) + */ + *(vulp)T2_AIR = 0x40; + mb(); + *(vulp)T2_AIR; /* re-read to force write */ + mb(); + *(vulp)T2_DIR = mask; + mb(); + mb(); +} + +static void +lynx_ack_irq_hw(unsigned long bit) +{ + *(vulp)T2_VAR = (u_long) bit; + mb(); + mb(); +} + +static irq_swizzle_t lynx_irq_swizzle = { + { /* irq_to_mask */ + -1, 6, -1, 8, 15, 12, 7, 9, /* pseudo PIC 0-7 */ + -1, 16, 17, 18, 3, -1, 21, 22, /* pseudo PIC 8-15 */ + -1, -1, -1, -1, -1, -1, -1, -1, /* pseudo */ + -1, -1, -1, -1, 28, -1, -1, -1, /* pseudo */ + 32, 33, 34, 35, 36, 37, 38, 39, /* mask 32-39 */ + 40, 41, 42, 43, 44, 45, 46, 47, /* mask 40-47 */ + 48, 49, 50, 51, 52, 53, 54, 55, /* mask 48-55 */ + 56, 57, 58, 59, 60, 61, 62, 63 /* mask 56-63 */ + }, + { /* mask_to_irq */ + -1, -1, -1, 12, -1, -1, 1, 6, /* mask 0-7 */ + 3, 7, -1, -1, 5, -1, -1, 4, /* mask 8-15 */ + 9, 10, 11, -1, -1, 14, 15, -1, /* mask 16-23 */ + -1, -1, -1, -1, 28, -1, -1, -1, /* mask 24-31 */ + 32, 33, 34, 35, 36, 37, 38, 39, /* mask 32-39 */ + 40, 41, 42, 43, 44, 45, 46, 47, /* mask 40-47 */ + 48, 49, 50, 51, 52, 53, 54, 55, /* mask 48-55 */ + 56, 57, 58, 59, 60, 61, 62, 63 /* mask 56-63 */ + }, + -1, + lynx_update_irq_hw, + lynx_ack_irq_hw +}; + +static void __init +lynx_init_irq(void) +{ + sable_lynx_irq_swizzle = &lynx_irq_swizzle; + sable_lynx_init_irq(64); +} + +/* + * PCI Fixup configuration for ALPHA LYNX (2100A) + * + * The device to slot mapping looks like: + * + * Slot Device + * 0 none + * 1 none + * 2 PCI-EISA bridge + * 3 PCI-PCI bridge + * 4 NCR 810 (Demi-Lynx only) + * 5 none + * 6 PCI on board slot 4 + * 7 PCI on board slot 5 + * 8 PCI on board slot 6 + * 9 PCI on board slot 7 + * + * And behind the PPB we have: + * + * 11 PCI on board slot 0 + * 12 PCI on board slot 1 + * 13 PCI on board slot 2 + * 14 PCI on board slot 3 + */ +/* + * NOTE: the IRQ assignments below are arbitrary, but need to be consistent + * with the values in the irq swizzling tables above. + */ + +static int __init +lynx_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +{ + static char irq_tab[19][5] __initdata = { + /*INT INTA INTB INTC INTD */ + { -1, -1, -1, -1, -1}, /* IdSel 13, PCEB */ + { -1, -1, -1, -1, -1}, /* IdSel 14, PPB */ + { 28, 28, 28, 28, 28}, /* IdSel 15, NCR demi */ + { -1, -1, -1, -1, -1}, /* IdSel 16, none */ + { 32, 32, 33, 34, 35}, /* IdSel 17, slot 4 */ + { 36, 36, 37, 38, 39}, /* IdSel 18, slot 5 */ + { 40, 40, 41, 42, 43}, /* IdSel 19, slot 6 */ + { 44, 44, 45, 46, 47}, /* IdSel 20, slot 7 */ + { -1, -1, -1, -1, -1}, /* IdSel 22, none */ + /* The following are actually behind the PPB. */ + { -1, -1, -1, -1, -1}, /* IdSel 16 none */ + { 28, 28, 28, 28, 28}, /* IdSel 17 NCR lynx */ + { -1, -1, -1, -1, -1}, /* IdSel 18 none */ + { -1, -1, -1, -1, -1}, /* IdSel 19 none */ + { -1, -1, -1, -1, -1}, /* IdSel 20 none */ + { -1, -1, -1, -1, -1}, /* IdSel 21 none */ + { 48, 48, 49, 50, 51}, /* IdSel 22 slot 0 */ + { 52, 52, 53, 54, 55}, /* IdSel 23 slot 1 */ + { 56, 56, 57, 58, 59}, /* IdSel 24 slot 2 */ + { 60, 60, 61, 62, 63} /* IdSel 25 slot 3 */ + }; + const long min_idsel = 2, max_idsel = 20, irqs_per_slot = 5; + return COMMON_TABLE_LOOKUP; +} + +static u8 __init +lynx_swizzle(struct pci_dev *dev, u8 *pinp) +{ + int slot, pin = *pinp; + + if (dev->bus->number == 0) { + slot = PCI_SLOT(dev->devfn); + } + /* Check for the built-in bridge */ + else if (PCI_SLOT(dev->bus->self->devfn) == 3) { + slot = PCI_SLOT(dev->devfn) + 11; + } + else + { + /* Must be a card-based bridge. */ + do { + if (PCI_SLOT(dev->bus->self->devfn) == 3) { + slot = PCI_SLOT(dev->devfn) + 11; + break; + } + pin = bridge_swizzle(pin, PCI_SLOT(dev->devfn)) ; + + /* Move up the chain of bridges. */ + dev = dev->bus->self; + /* Slot of the next bridge. */ + slot = PCI_SLOT(dev->devfn); + } while (dev->bus->self); + } + *pinp = pin; + return slot; +} + +#endif /* defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_LYNX) */ + +/***********************************************************************/ +/* GENERIC irq routines */ + +static inline void +sable_lynx_enable_irq(unsigned int irq) +{ + unsigned long bit, mask; + + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; + spin_lock(&sable_lynx_irq_lock); + mask = sable_lynx_irq_swizzle->shadow_mask &= ~(1UL << bit); + sable_lynx_irq_swizzle->update_irq_hw(bit, mask); + spin_unlock(&sable_lynx_irq_lock); +#if 0 + printk("%s: mask 0x%lx bit 0x%x irq 0x%x\n", + __FUNCTION__, mask, bit, irq); +#endif +} + +static void +sable_lynx_disable_irq(unsigned int irq) +{ + unsigned long bit, mask; + + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; + spin_lock(&sable_lynx_irq_lock); + mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; + sable_lynx_irq_swizzle->update_irq_hw(bit, mask); + spin_unlock(&sable_lynx_irq_lock); +#if 0 + printk("%s: mask 0x%lx bit 0x%x irq 0x%x\n", + __FUNCTION__, mask, bit, irq); +#endif +} + +static unsigned int +sable_lynx_startup_irq(unsigned int irq) +{ + sable_lynx_enable_irq(irq); + return 0; +} + +static void +sable_lynx_end_irq(unsigned int irq) +{ + if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) + sable_lynx_enable_irq(irq); +} + +static void +sable_lynx_mask_and_ack_irq(unsigned int irq) +{ + unsigned long bit, mask; + + bit = sable_lynx_irq_swizzle->irq_to_mask[irq]; + spin_lock(&sable_lynx_irq_lock); + mask = sable_lynx_irq_swizzle->shadow_mask |= 1UL << bit; + sable_lynx_irq_swizzle->update_irq_hw(bit, mask); + sable_lynx_irq_swizzle->ack_irq_hw(bit); + spin_unlock(&sable_lynx_irq_lock); +} + +static struct hw_interrupt_type sable_lynx_irq_type = { + .typename = "SABLE/LYNX", + .startup = sable_lynx_startup_irq, + .shutdown = sable_lynx_disable_irq, + .enable = sable_lynx_enable_irq, + .disable = sable_lynx_disable_irq, + .ack = sable_lynx_mask_and_ack_irq, + .end = sable_lynx_end_irq, +}; + +static void +sable_lynx_srm_device_interrupt(unsigned long vector, struct pt_regs * regs) +{ + /* Note that the vector reported by the SRM PALcode corresponds + to the interrupt mask bits, but we have to manage via the + so-called legacy IRQs for many common devices. */ + + int bit, irq; + + bit = (vector - 0x800) >> 4; + irq = sable_lynx_irq_swizzle->mask_to_irq[bit]; +#if 0 + printk("%s: vector 0x%lx bit 0x%x irq 0x%x\n", + __FUNCTION__, vector, bit, irq); +#endif + handle_irq(irq, regs); +} + +static void __init +sable_lynx_init_irq(int nr_irqs) +{ + long i; + + for (i = 0; i < nr_irqs; ++i) { + irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; + irq_desc[i].handler = &sable_lynx_irq_type; + } + + common_init_isa_dma(); +} + +static void __init +sable_lynx_init_pci(void) +{ + common_init_pci(); +} + +/*****************************************************************/ /* * The System Vectors * @@ -280,7 +557,8 @@ * these games with GAMMA_BIAS. */ -#if defined(CONFIG_ALPHA_GENERIC) || !defined(CONFIG_ALPHA_GAMMA) +#if defined(CONFIG_ALPHA_GENERIC) || \ + (defined(CONFIG_ALPHA_SABLE) && !defined(CONFIG_ALPHA_GAMMA)) #undef GAMMA_BIAS #define GAMMA_BIAS 0 struct alpha_machine_vector sable_mv __initmv = { @@ -295,13 +573,13 @@ .min_mem_address = T2_DEFAULT_MEM_BASE, .nr_irqs = 40, - .device_interrupt = sable_srm_device_interrupt, + .device_interrupt = sable_lynx_srm_device_interrupt, .init_arch = t2_init_arch, .init_irq = sable_init_irq, .init_rtc = common_init_rtc, - .init_pci = common_init_pci, - .kill_arch = NULL, + .init_pci = sable_lynx_init_pci, + .kill_arch = t2_kill_arch, .pci_map_irq = sable_map_irq, .pci_swizzle = common_swizzle, @@ -310,9 +588,10 @@ } } }; ALIAS_MV(sable) -#endif +#endif /* GENERIC || (SABLE && !GAMMA) */ -#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_GAMMA) +#if defined(CONFIG_ALPHA_GENERIC) || \ + (defined(CONFIG_ALPHA_SABLE) && defined(CONFIG_ALPHA_GAMMA)) #undef GAMMA_BIAS #define GAMMA_BIAS _GAMMA_BIAS struct alpha_machine_vector sable_gamma_mv __initmv = { @@ -327,12 +606,13 @@ .min_mem_address = T2_DEFAULT_MEM_BASE, .nr_irqs = 40, - .device_interrupt = sable_srm_device_interrupt, + .device_interrupt = sable_lynx_srm_device_interrupt, .init_arch = t2_init_arch, .init_irq = sable_init_irq, .init_rtc = common_init_rtc, - .init_pci = common_init_pci, + .init_pci = sable_lynx_init_pci, + .kill_arch = t2_kill_arch, .pci_map_irq = sable_map_irq, .pci_swizzle = common_swizzle, @@ -341,4 +621,36 @@ } } }; ALIAS_MV(sable_gamma) -#endif +#endif /* GENERIC || (SABLE && GAMMA) */ + +#if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_LYNX) +#undef GAMMA_BIAS +#define GAMMA_BIAS _GAMMA_BIAS +struct alpha_machine_vector lynx_mv __initmv = { + .vector_name = "Lynx", + DO_EV4_MMU, + DO_DEFAULT_RTC, + DO_T2_IO, + DO_T2_BUS, + .machine_check = t2_machine_check, + .max_isa_dma_address = ALPHA_SABLE_MAX_ISA_DMA_ADDRESS, + .min_io_address = EISA_DEFAULT_IO_BASE, + .min_mem_address = T2_DEFAULT_MEM_BASE, + + .nr_irqs = 64, + .device_interrupt = sable_lynx_srm_device_interrupt, + + .init_arch = t2_init_arch, + .init_irq = lynx_init_irq, + .init_rtc = common_init_rtc, + .init_pci = sable_lynx_init_pci, + .kill_arch = t2_kill_arch, + .pci_map_irq = lynx_map_irq, + .pci_swizzle = lynx_swizzle, + + .sys = { .t2 = { + .gamma_bias = _GAMMA_BIAS + } } +}; +ALIAS_MV(lynx) +#endif /* GENERIC || LYNX */ diff -Nru a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c --- a/arch/alpha/kernel/time.c Thu Apr 17 19:22:46 2003 +++ b/arch/alpha/kernel/time.c Thu Apr 17 19:22:46 2003 @@ -331,7 +331,7 @@ /* From John Bowman : allow the values to settle, as the Update-In-Progress bit going low isn't good - enough on some hardware. 2ms is our guess; we havn't found + enough on some hardware. 2ms is our guess; we haven't found bogomips yet, but this is close on a 500Mhz box. */ __delay(1000000); diff -Nru a/arch/alpha/lib/strrchr.S b/arch/alpha/lib/strrchr.S --- a/arch/alpha/lib/strrchr.S Thu Apr 17 19:22:49 2003 +++ b/arch/alpha/lib/strrchr.S Thu Apr 17 19:22:49 2003 @@ -2,7 +2,7 @@ * arch/alpha/lib/strrchr.S * Contributed by Richard Henderson (rth@tamu.edu) * - * Return the address of the last occurrance of a given character + * Return the address of the last occurrence of a given character * within a null-terminated string, or null if it is not found. */ diff -Nru a/arch/alpha/math-emu/math.c b/arch/alpha/math-emu/math.c --- a/arch/alpha/math-emu/math.c Thu Apr 17 19:22:49 2003 +++ b/arch/alpha/math-emu/math.c Thu Apr 17 19:22:49 2003 @@ -294,7 +294,7 @@ * the appropriate signal to the translated program. * * In addition, properly track the exception state in software - * as described in the Alpha Architectre Handbook section 4.7.7.3. + * as described in the Alpha Architecture Handbook section 4.7.7.3. */ done: if (_fex) { diff -Nru a/arch/alpha/vmlinux.lds.S b/arch/alpha/vmlinux.lds.S --- a/arch/alpha/vmlinux.lds.S Thu Apr 17 19:22:46 2003 +++ b/arch/alpha/vmlinux.lds.S Thu Apr 17 19:22:46 2003 @@ -32,7 +32,11 @@ /* Will be freed after init */ . = ALIGN(8192); /* Init code and data */ __init_begin = .; - .init.text : { *(.init.text) } + .init.text : { + _sinittext = .; + *(.init.text) + _einittext = .; + } .init.data : { *(.init.data) } . = ALIGN(16); diff -Nru a/arch/arm/Kconfig b/arch/arm/Kconfig --- a/arch/arm/Kconfig Thu Apr 17 19:22:46 2003 +++ b/arch/arm/Kconfig Thu Apr 17 19:22:46 2003 @@ -138,8 +138,8 @@ config ARCH_INTEGRATOR bool "Integrator" -config ARCH_IOP310 - bool "IOP310-based" +config ARCH_IOP3XX + bool "IOP3xx-based" config ARCH_L7200 bool "LinkUp-L7200" @@ -175,7 +175,7 @@ source "arch/arm/mach-footbridge/Kconfig" -source "arch/arm/mach-iop310/Kconfig" +source "arch/arm/mach-iop3xx/Kconfig" source "arch/arm/mach-pxa/Kconfig" @@ -342,7 +342,7 @@ # XScale config CPU_XSCALE bool - depends on ARCH_IOP310 || ARCH_ADIFCC || ARCH_PXA + depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA default y # Figure out what processor architecture version we should be using. @@ -359,7 +359,7 @@ config CPU_32v5 bool - depends on ARCH_IOP310 || ARCH_ADIFCC || ARCH_PXA + depends on ARCH_IOP3XX || ARCH_ADIFCC || ARCH_PXA default y comment "Processor Features" @@ -436,8 +436,8 @@ # Now handle the bus types config PCI bool - default PCI_INTEGRATOR if !ARCH_FTVPCI && !ARCH_SHARK && !FOOTBRIDGE_HOST && !ARCH_IOP310 && ARCH_INTEGRATOR - default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP310 + default PCI_INTEGRATOR if !ARCH_FTVPCI && !ARCH_SHARK && !FOOTBRIDGE_HOST && !ARCH_IOP3XX && ARCH_INTEGRATOR + default y if ARCH_FTVPCI || ARCH_SHARK || FOOTBRIDGE_HOST || ARCH_IOP3XX help Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside @@ -451,7 +451,7 @@ config PCI_INTEGRATOR bool "PCI support" - depends on !ARCH_FTVPCI && !ARCH_SHARK && !FOOTBRIDGE_HOST && !ARCH_IOP310 && ARCH_INTEGRATOR + depends on !ARCH_FTVPCI && !ARCH_SHARK && !FOOTBRIDGE_HOST && !ARCH_IOP3XX && ARCH_INTEGRATOR help Find out whether you have a PCI motherboard. PCI is the name of a bus system, i.e. the way the CPU talks to the other stuff inside diff -Nru a/arch/arm/Makefile b/arch/arm/Makefile --- a/arch/arm/Makefile Thu Apr 17 19:22:45 2003 +++ b/arch/arm/Makefile Thu Apr 17 19:22:45 2003 @@ -105,7 +105,7 @@ machine-$(CONFIG_ARCH_CLPS711X) := clps711x textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000 machine-$(CONFIG_ARCH_ANAKIN) := anakin - machine-$(CONFIG_ARCH_IOP310) := iop310 + machine-$(CONFIG_ARCH_IOP3XX) := iop3xx machine-$(CONFIG_ARCH_ADIFCC) := adifcc MACHINE := $(machine-y) diff -Nru a/arch/arm/boot/Makefile b/arch/arm/boot/Makefile --- a/arch/arm/boot/Makefile Thu Apr 17 19:22:43 2003 +++ b/arch/arm/boot/Makefile Thu Apr 17 19:22:43 2003 @@ -13,9 +13,6 @@ # PARAMS_PHYS must be with 4MB of ZRELADDR # INITRD_PHYS must be in RAM - zreladdr-$(CONFIG_CPU_26) := 0x02080000 -params_phys-$(CONFIG_CPU_26) := 0x0207c000 -initrd_phys-$(CONFIG_CPU_26) := 0x02180000 zreladdr-$(CONFIG_ARCH_RPC) := 0x10008000 params_phys-$(CONFIG_ARCH_RPC) := 0x10000100 initrd_phys-$(CONFIG_ARCH_RPC) := 0x18000000 @@ -48,6 +45,7 @@ zreladdr-$(CONFIG_ARCH_PXA) := 0xa0008000 zreladdr-$(CONFIG_ARCH_ANAKIN) := 0x20008000 zreladdr-$(CONFIG_ARCH_IQ80310) := 0xa0008000 + zreladdr-$(CONFIG_ARCH_IQ80321) := 0xa0008000 zreladdr-$(CONFIG_ARCH_ADIFCC) := 0xc0008000 ZRELADDR := $(zreladdr-y) diff -Nru a/arch/arm/boot/compressed/head-xscale.S b/arch/arm/boot/compressed/head-xscale.S --- a/arch/arm/boot/compressed/head-xscale.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/boot/compressed/head-xscale.S Thu Apr 17 19:22:44 2003 @@ -34,6 +34,12 @@ bic r0, r0, #0x1000 @ clear Icache mcr p15, 0, r0, c1, c0, 0 +#ifdef CONFIG_ARCH_IQ80321 + orr pc, pc, #0xa0000000 + nop + mov r7, #MACH_TYPE_IQ80321 +#endif + #ifdef CONFIG_ARCH_LUBBOCK mov r7, #MACH_TYPE_LUBBOCK #endif diff -Nru a/arch/arm/common/sa1111.c b/arch/arm/common/sa1111.c --- a/arch/arm/common/sa1111.c Thu Apr 17 19:22:49 2003 +++ b/arch/arm/common/sa1111.c Thu Apr 17 19:22:49 2003 @@ -60,6 +60,7 @@ }, .skpcr_mask = SKPCR_UCLKEN, .devid = SA1111_DEVID_USB, + .dma_mask = 0xffffffffLL, .irq = { IRQ_USBPWR, IRQ_HCIM, @@ -494,6 +495,7 @@ sadev->dev.parent = sachip->dev; sadev->dev.bus = &sa1111_bus_type; + sadev->dev.dma_mask = &sadev->dma_mask; sadev->res.start = sachip->res.start + offset; sadev->res.end = sadev->res.start + 511; sadev->res.name = sadev->dev.name; diff -Nru a/arch/arm/def-configs/iq80310 b/arch/arm/def-configs/iq80310 --- a/arch/arm/def-configs/iq80310 Thu Apr 17 19:22:44 2003 +++ b/arch/arm/def-configs/iq80310 Thu Apr 17 19:22:44 2003 @@ -1,26 +1,31 @@ # -# Automatically generated by make menuconfig: don't edit +# Automatically generated make config: don't edit # CONFIG_ARM=y -# CONFIG_EISA is not set -# CONFIG_SBUS is not set -# CONFIG_MCA is not set +CONFIG_MMU=y CONFIG_UID16=y CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set -# CONFIG_GENERIC_BUST_SPINLOCK is not set -# CONFIG_GENERIC_ISA_DMA is not set # # Code maturity level options # CONFIG_EXPERIMENTAL=y -# CONFIG_OBSOLETE is not set + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 # # Loadable module support # CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y # CONFIG_MODVERSIONS is not set CONFIG_KMOD=y @@ -33,11 +38,12 @@ # CONFIG_ARCH_CLPS7500 is not set # CONFIG_ARCH_CLPS711X is not set # CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set # CONFIG_ARCH_EBSA110 is not set # CONFIG_ARCH_CAMELOT is not set # CONFIG_ARCH_FOOTBRIDGE is not set # CONFIG_ARCH_INTEGRATOR is not set -CONFIG_ARCH_IOP310=y +CONFIG_ARCH_IOP3XX=y # CONFIG_ARCH_L7200 is not set # CONFIG_ARCH_RPC is not set # CONFIG_ARCH_SA1100 is not set @@ -46,112 +52,72 @@ # # Archimedes/A5000 Implementations # -# CONFIG_ARCH_ARC is not set -# CONFIG_ARCH_A5K is not set # -# Footbridge Implementations +# Archimedes/A5000 Implementations (select only ONE) # -# CONFIG_ARCH_CATS is not set -# CONFIG_ARCH_PERSONAL_SERVER is not set -# CONFIG_ARCH_EBSA285_ADDIN is not set -# CONFIG_ARCH_EBSA285_HOST is not set -# CONFIG_ARCH_NETWINDER is not set # -# SA11x0 Implementations +# CLPS711X/EP721X Implementations # -# CONFIG_SA1100_ASSABET is not set -# CONFIG_ASSABET_NEPONSET is not set -# CONFIG_SA1100_ADSBITSY is not set -# CONFIG_SA1100_BRUTUS is not set -# CONFIG_SA1100_CERF is not set -# CONFIG_SA1100_H3600 is not set -# CONFIG_SA1100_EXTENEX1 is not set -# CONFIG_SA1100_FLEXANET is not set -# CONFIG_SA1100_FREEBIRD is not set -# CONFIG_SA1100_GRAPHICSCLIENT is not set -# CONFIG_SA1100_GRAPHICSMASTER is not set -# CONFIG_SA1100_JORNADA720 is not set -# CONFIG_SA1100_HUW_WEBPANEL is not set -# CONFIG_SA1100_ITSY is not set -# CONFIG_SA1100_LART is not set -# CONFIG_SA1100_NANOENGINE is not set -# CONFIG_SA1100_OMNIMETER is not set -# CONFIG_SA1100_PANGOLIN is not set -# CONFIG_SA1100_PLEB is not set -# CONFIG_SA1100_SHANNON is not set -# CONFIG_SA1100_SHERMAN is not set -# CONFIG_SA1100_SIMPAD is not set -# CONFIG_SA1100_PFS168 is not set -# CONFIG_SA1100_VICTOR is not set -# CONFIG_SA1100_XP860 is not set -# CONFIG_SA1100_YOPY is not set -# CONFIG_SA1100_USB is not set -# CONFIG_SA1100_USB_NETLINK is not set -# CONFIG_SA1100_USB_CHAR is not set # -# CLPS711X/EP721X Implementations +# Epxa10db # -# CONFIG_ARCH_AUTCPU12 is not set -# CONFIG_ARCH_CDB89712 is not set -# CONFIG_ARCH_CLEP7312 is not set -# CONFIG_ARCH_EDB7211 is not set -# CONFIG_ARCH_P720T is not set -# CONFIG_ARCH_EP7211 is not set -# CONFIG_ARCH_EP7212 is not set # -# IOP310 Implementation Options +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options # CONFIG_ARCH_IQ80310=y -# CONFIG_IOP310_AAU is not set -# CONFIG_IOP310_DMA is not set -# CONFIG_IOP310_MU is not set -# CONFIG_IOP310_PMON is not set -# CONFIG_ARCH_ACORN is not set -# CONFIG_FOOTBRIDGE is not set -# CONFIG_FOOTBRIDGE_HOST is not set -# CONFIG_FOOTBRIDGE_ADDIN is not set +CONFIG_ARCH_IOP310=y + +# +# IOP3xx Chipset Features +# +# CONFIG_IOP3XX_AAU is not set +# CONFIG_IOP3XX_DMA is not set +# CONFIG_IOP3XX_MU is not set +# CONFIG_IOP3XX_PMON is not set + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# CONFIG_CPU_32=y -# CONFIG_CPU_26 is not set -# CONFIG_CPU_32v3 is not set -# CONFIG_CPU_32v4 is not set -# CONFIG_CPU_ARM610 is not set -# CONFIG_CPU_ARM710 is not set -# CONFIG_CPU_ARM720T is not set -# CONFIG_CPU_ARM920T is not set -# CONFIG_CPU_ARM922T is not set -# CONFIG_CPU_ARM926T is not set -# CONFIG_CPU_ARM1020 is not set -# CONFIG_CPU_SA110 is not set -# CONFIG_CPU_SA1100 is not set -CONFIG_CPU_32v4=y CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y + +# +# Processor Features +# CONFIG_ARM_THUMB=y -# CONFIG_XSCALE_TOOLS is not set -# CONFIG_XSCALE_CACHE_WRITE_ALLOC is not set CONFIG_XSCALE_PMU=y -CONFIG_ARM_THUMB=y -# CONFIG_DISCONTIGMEM is not set # # General setup # -CONFIG_ZBOOT_ROM=y +CONFIG_PCI=y +# CONFIG_ZBOOT_ROM is not set CONFIG_ZBOOT_ROM_TEXT=0x00060000 CONFIG_ZBOOT_ROM_BSS=0xa1008000 -CONFIG_PCI=y -# CONFIG_ISA is not set -# CONFIG_ISA_DMA is not set +# CONFIG_PCI_LEGACY_PROC is not set CONFIG_PCI_NAMES=y # CONFIG_HOTPLUG is not set -# CONFIG_PCMCIA is not set -CONFIG_NET=y -CONFIG_SYSVIPC=y -# CONFIG_BSD_PROCESS_ACCT is not set -CONFIG_SYSCTL=y + +# +# At least one math emulation must be selected +# CONFIG_FPE_NWFPE=y # CONFIG_FPE_FASTFPE is not set CONFIG_KCORE_ELF=y @@ -160,6 +126,7 @@ CONFIG_BINFMT_ELF=y # CONFIG_BINFMT_MISC is not set # CONFIG_PM is not set +# CONFIG_PREEMPT is not set # CONFIG_ARTHUR is not set CONFIG_CMDLINE="console=ttyS0,115200 ip=bootp mem=32M root=/dev/nfs initrd=0xc0800000,4M" CONFIG_ALIGNMENT_TRAP=y @@ -175,9 +142,14 @@ CONFIG_MTD=y # CONFIG_MTD_DEBUG is not set CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set CONFIG_MTD_REDBOOT_PARTS=y -# CONFIG_MTD_BOOTLDR_PARTS is not set +# CONFIG_MTD_CMDLINE_PARTS is not set # CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# CONFIG_MTD_CHAR=y CONFIG_MTD_BLOCK=y # CONFIG_FTL is not set @@ -196,9 +168,6 @@ # CONFIG_MTD_ROM is not set # CONFIG_MTD_ABSENT is not set # CONFIG_MTD_OBSOLETE_CHIPS is not set -# CONFIG_MTD_AMDSTD is not set -# CONFIG_MTD_SHARP is not set -# CONFIG_MTD_JEDEC is not set # # Mapping drivers for chip access @@ -206,12 +175,10 @@ # CONFIG_MTD_PHYSMAP is not set # CONFIG_MTD_NORA is not set # CONFIG_MTD_ARM_INTEGRATOR is not set -# CONFIG_MTD_CDB89712 is not set -# CONFIG_MTD_SA1100 is not set -# CONFIG_MTD_DC21285 is not set CONFIG_MTD_IQ80310=y -# CONFIG_MTD_EPXA10DB is not set +# CONFIG_MTD_EDB7312 is not set # CONFIG_MTD_PCI is not set +# CONFIG_MTD_UCLINUX is not set # # Self-contained MTD device drivers @@ -220,10 +187,13 @@ # CONFIG_MTD_SLRAM is not set # CONFIG_MTD_MTDRAM is not set # CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# # CONFIG_MTD_DOC1000 is not set # CONFIG_MTD_DOC2000 is not set # CONFIG_MTD_DOC2001 is not set -# CONFIG_MTD_DOCPROBE is not set # # NAND Flash Device Drivers @@ -231,20 +201,18 @@ # CONFIG_MTD_NAND is not set # -# Plug and Play configuration +# Plug and Play support # # CONFIG_PNP is not set -# CONFIG_ISAPNP is not set # # Block devices # # CONFIG_BLK_DEV_FD is not set -# CONFIG_BLK_DEV_XD is not set -# CONFIG_PARIDE is not set # CONFIG_BLK_CPQ_DA is not set # CONFIG_BLK_CPQ_CISS_DA is not set # CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_UMEM is not set # CONFIG_BLK_DEV_LOOP is not set # CONFIG_BLK_DEV_NBD is not set CONFIG_BLK_DEV_RAM=y @@ -255,25 +223,22 @@ # Multi-device support (RAID and LVM) # # CONFIG_MD is not set -# CONFIG_BLK_DEV_MD is not set -# CONFIG_MD_LINEAR is not set -# CONFIG_MD_RAID0 is not set -# CONFIG_MD_RAID1 is not set -# CONFIG_MD_RAID5 is not set -# CONFIG_MD_MULTIPATH is not set -# CONFIG_BLK_DEV_LVM is not set + +# +# Networking support +# +CONFIG_NET=y # # Networking options # # CONFIG_PACKET is not set -CONFIG_NETLINK=y -CONFIG_RTNETLINK=y # CONFIG_NETLINK_DEV is not set CONFIG_NETFILTER=y # CONFIG_NETFILTER_DEBUG is not set # CONFIG_FILTER is not set CONFIG_UNIX=y +# CONFIG_NET_KEY is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set # CONFIG_IP_ADVANCED_ROUTER is not set @@ -286,26 +251,33 @@ # CONFIG_ARPD is not set # CONFIG_INET_ECN is not set # CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_XFRM_USER is not set # -# IP: Netfilter Configuration +# IP: Netfilter Configuration # # CONFIG_IP_NF_CONNTRACK is not set # CONFIG_IP_NF_QUEUE is not set # CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set # CONFIG_IP_NF_COMPAT_IPCHAINS is not set # CONFIG_IP_NF_COMPAT_IPFWADM is not set # CONFIG_IPV6 is not set -# CONFIG_KHTTPD is not set + +# +# SCTP Configuration (EXPERIMENTAL) +# +CONFIG_IPV6_SCTP__=y +# CONFIG_IP_SCTP is not set # CONFIG_ATM is not set # CONFIG_VLAN_8021Q is not set -# CONFIG_IPX is not set -# CONFIG_ATALK is not set +# CONFIG_LLC is not set # CONFIG_DECNET is not set # CONFIG_BRIDGE is not set # CONFIG_X25 is not set # CONFIG_LAPB is not set -# CONFIG_LLC is not set # CONFIG_NET_DIVERT is not set # CONFIG_ECONET is not set # CONFIG_WAN_ROUTER is not set @@ -318,8 +290,9 @@ # CONFIG_NET_SCHED is not set # -# Network device support +# Network testing # +# CONFIG_NET_PKTGEN is not set CONFIG_NETDEVICES=y # @@ -336,62 +309,50 @@ # Ethernet (10 or 100Mbit) # CONFIG_NET_ETHERNET=y -# CONFIG_ARM_AM79C961A is not set -# CONFIG_SUNLANCE is not set +CONFIG_MII=y # CONFIG_HAPPYMEAL is not set -# CONFIG_SUNBMAC is not set -# CONFIG_SUNQE is not set -# CONFIG_SUNLANCE is not set # CONFIG_SUNGEM is not set # CONFIG_NET_VENDOR_3COM is not set -# CONFIG_LANCE is not set -# CONFIG_NET_VENDOR_SMC is not set -# CONFIG_NET_VENDOR_RACAL is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set # CONFIG_HP100 is not set -# CONFIG_NET_ISA is not set CONFIG_NET_PCI=y # CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set -# CONFIG_APRICOT is not set -# CONFIG_CS89x0 is not set -# CONFIG_TULIP is not set -# CONFIG_DE4X5 is not set +# CONFIG_B44 is not set # CONFIG_DGRS is not set -# CONFIG_DM9102 is not set CONFIG_EEPRO100=y -# CONFIG_LNE390 is not set +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set # CONFIG_FEALNX is not set # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set -# CONFIG_NE3210 is not set -# CONFIG_ES3210 is not set # CONFIG_8139CP is not set # CONFIG_8139TOO is not set -# CONFIG_8139TOO_PIO is not set -# CONFIG_8139TOO_TUNE_TWISTER is not set -# CONFIG_8139TOO_8129 is not set # CONFIG_SIS900 is not set # CONFIG_EPIC100 is not set # CONFIG_SUNDANCE is not set # CONFIG_TLAN is not set # CONFIG_VIA_RHINE is not set -# CONFIG_VIA_RHINE_MMIO is not set -# CONFIG_WINBOND_840 is not set -# CONFIG_NET_POCKET is not set # # Ethernet (1000 Mbit) # # CONFIG_ACENIC is not set # CONFIG_DL2K is not set -# CONFIG_MYRI_SBUS is not set +# CONFIG_E1000 is not set # CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set +# CONFIG_R8169 is not set # CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set -# CONFIG_PLIP is not set # CONFIG_PPP is not set # CONFIG_SLIP is not set @@ -401,10 +362,8 @@ # CONFIG_NET_RADIO is not set # -# Token Ring devices +# Token Ring devices (depends on LLC=y) # -# CONFIG_TR is not set -# CONFIG_NET_FC is not set # CONFIG_RCPCI is not set # CONFIG_SHAPER is not set @@ -414,17 +373,17 @@ # CONFIG_WAN is not set # -# Amateur Radio support +# IrDA (infrared) support # -# CONFIG_HAMRADIO is not set +# CONFIG_IRDA is not set # -# IrDA (infrared) support +# Amateur Radio support # -# CONFIG_IRDA is not set +# CONFIG_HAMRADIO is not set # -# ATA/IDE/MFM/RLL support +# ATA/ATAPI/MFM/RLL support # CONFIG_IDE=y @@ -432,54 +391,22 @@ # IDE, ATA and ATAPI Block devices # CONFIG_BLK_DEV_IDE=y -# CONFIG_BLK_DEV_HD_IDE is not set + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# # CONFIG_BLK_DEV_HD is not set CONFIG_BLK_DEV_IDEDISK=y # CONFIG_IDEDISK_MULTI_MODE is not set -# CONFIG_BLK_DEV_IDECS is not set +# CONFIG_IDEDISK_STROKE is not set CONFIG_BLK_DEV_IDECD=y -# CONFIG_BLK_DEV_IDETAPE is not set # CONFIG_BLK_DEV_IDEFLOPPY is not set -# CONFIG_BLK_DEV_IDESCSI is not set -# CONFIG_BLK_DEV_CMD640 is not set -# CONFIG_BLK_DEV_CMD640_ENHANCED is not set -# CONFIG_BLK_DEV_ISAPNP is not set -# CONFIG_BLK_DEV_RZ1000 is not set -# CONFIG_IDEPCI_SHARE_IRQ is not set -CONFIG_BLK_DEV_IDEDMA_PCI=y -# CONFIG_BLK_DEV_OFFBOARD is not set -CONFIG_IDEDMA_PCI_AUTO=y -CONFIG_BLK_DEV_IDEDMA=y -# CONFIG_IDEDMA_NEW_DRIVE_LISTINGS is not set -# CONFIG_BLK_DEV_AEC62XX is not set -# CONFIG_AEC62XX_TUNING is not set -# CONFIG_BLK_DEV_ALI15X3 is not set -# CONFIG_WDC_ALI15X3 is not set -# CONFIG_BLK_DEV_AMD74XX is not set -# CONFIG_AMD74XX_OVERRIDE is not set -CONFIG_BLK_DEV_CMD64X=y -# CONFIG_BLK_DEV_CY82C693 is not set -# CONFIG_BLK_DEV_CS5530 is not set -# CONFIG_BLK_DEV_HPT34X is not set -# CONFIG_HPT34X_AUTODMA is not set -# CONFIG_BLK_DEV_HPT366 is not set -# CONFIG_BLK_DEV_NS87415 is not set -# CONFIG_BLK_DEV_OPTI621 is not set -# CONFIG_BLK_DEV_PDC202XX is not set -# CONFIG_PDC202XX_BURST is not set -# CONFIG_PDC202XX_FORCE is not set -# CONFIG_BLK_DEV_SVWKS is not set -# CONFIG_BLK_DEV_SIS5513 is not set -# CONFIG_BLK_DEV_TRM290 is not set -# CONFIG_BLK_DEV_VIA82CXXX is not set -# CONFIG_BLK_DEV_SL82C105 is not set -# CONFIG_IDE_CHIPSETS is not set -CONFIG_IDEDMA_AUTO=y -# CONFIG_IDEDMA_IVB is not set -CONFIG_BLK_DEV_IDE_MODES=y -# CONFIG_BLK_DEV_ATARAID is not set -# CONFIG_BLK_DEV_ATARAID_PDC is not set -# CONFIG_BLK_DEV_ATARAID_HPT is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +# CONFIG_BLK_DEV_IDEPCI is not set # # SCSI support @@ -495,59 +422,50 @@ # I2O device support # # CONFIG_I2O is not set -# CONFIG_I2O_PCI is not set -# CONFIG_I2O_BLOCK is not set -# CONFIG_I2O_LAN is not set -# CONFIG_I2O_SCSI is not set -# CONFIG_I2O_PROC is not set # # ISDN subsystem # -# CONFIG_ISDN is not set +# CONFIG_ISDN_BOOL is not set # -# Input core support +# Input device support # # CONFIG_INPUT is not set -# CONFIG_INPUT_KEYBDEV is not set -# CONFIG_INPUT_MOUSEDEV is not set -# CONFIG_INPUT_JOYDEV is not set -# CONFIG_INPUT_EVDEV is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# # # Character devices # -# CONFIG_VT is not set -CONFIG_SERIAL=y -CONFIG_SERIAL_CONSOLE=y -# CONFIG_SERIAL_EXTENDED is not set # CONFIG_SERIAL_NONSTANDARD is not set # # Serial drivers # -# CONFIG_SERIAL_ANAKIN is not set -# CONFIG_SERIAL_ANAKIN_CONSOLE is not set -# CONFIG_SERIAL_AMBA is not set -# CONFIG_SERIAL_AMBA_CONSOLE is not set -# CONFIG_SERIAL_CLPS711X is not set -# CONFIG_SERIAL_CLPS711X_CONSOLE is not set -# CONFIG_SERIAL_21285 is not set -# CONFIG_SERIAL_21285_OLD is not set -# CONFIG_SERIAL_21285_CONSOLE is not set -# CONFIG_SERIAL_UART00 is not set -# CONFIG_SERIAL_UART00_CONSOLE is not set -# CONFIG_SERIAL_SA1100 is not set -# CONFIG_SERIAL_SA1100_CONSOLE is not set -# CONFIG_SERIAL_8250 is not set -# CONFIG_SERIAL_8250_CONSOLE is not set +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y # CONFIG_SERIAL_8250_EXTENDED is not set -# CONFIG_SERIAL_8250_MANY_PORTS is not set -# CONFIG_SERIAL_8250_SHARE_IRQ is not set -# CONFIG_SERIAL_8250_DETECT_IRQ is not set -# CONFIG_SERIAL_8250_MULTIPORT is not set -# CONFIG_SERIAL_8250_HUB6 is not set + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_UNIX98_PTYS=y CONFIG_UNIX98_PTY_COUNT=256 @@ -557,36 +475,36 @@ # CONFIG_I2C is not set # +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# + +# # L3 serial bus support # # CONFIG_L3 is not set -# CONFIG_L3_ALGOBIT is not set -# CONFIG_L3_BIT_SA1100_GPIO is not set -# CONFIG_L3_SA1111 is not set -# CONFIG_BIT_SA1100_GPIO is not set # # Mice # # CONFIG_BUSMOUSE is not set -CONFIG_MOUSE=y -CONFIG_PSMOUSE=y -# CONFIG_82C710_MOUSE is not set -# CONFIG_PC110_PAD is not set +# CONFIG_QIC02_TAPE is not set # -# Joysticks +# IPMI # -# CONFIG_INPUT_GAMEPORT is not set -# CONFIG_QIC02_TAPE is not set +# CONFIG_IPMI_HANDLER is not set # # Watchdog Cards # # CONFIG_WATCHDOG is not set -# CONFIG_INTEL_RNG is not set # CONFIG_NVRAM is not set # CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set @@ -597,88 +515,130 @@ # CONFIG_FTAPE is not set # CONFIG_AGP is not set # CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set # # Multimedia devices # -# CONFIG_VIDEO_DEV is not set +CONFIG_VIDEO_DEV=y + +# +# Video For Linux +# +# CONFIG_VIDEO_PROC_FS is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_CPIA is not set +# CONFIG_VIDEO_STRADIS is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set + +# +# Digital Video Broadcasting Devices +# +CONFIG_DVB=y +CONFIG_DVB_CORE=y + +# +# Supported Frontend Modules +# +CONFIG_DVB_ALPS_BSRU6=y +# CONFIG_DVB_ALPS_BSRV2 is not set +# CONFIG_DVB_ALPS_TDLB7 is not set +# CONFIG_DVB_ALPS_TDMB7 is not set +# CONFIG_DVB_GRUNDIG_29504_491 is not set +# CONFIG_DVB_GRUNDIG_29504_401 is not set +# CONFIG_DVB_VES1820 is not set + +# +# Supported DVB Adapters +# +# CONFIG_DVB_AV7110 is not set # # File systems # +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set # CONFIG_QUOTA is not set # CONFIG_AUTOFS_FS is not set # CONFIG_AUTOFS4_FS is not set -# CONFIG_REISERFS_FS is not set -# CONFIG_REISERFS_CHECK is not set -# CONFIG_REISERFS_PROC_INFO is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +CONFIG_DEVPTS_FS=y +CONFIG_TMPFS=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# # CONFIG_ADFS_FS is not set -# CONFIG_ADFS_FS_RW is not set # CONFIG_AFFS_FS is not set # CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set -# CONFIG_EXT3_FS is not set -# CONFIG_JBD is not set -# CONFIG_JBD_DEBUG is not set -# CONFIG_FAT_FS is not set -# CONFIG_MSDOS_FS is not set -# CONFIG_UMSDOS_FS is not set -# CONFIG_VFAT_FS is not set # CONFIG_EFS_FS is not set # CONFIG_JFFS_FS is not set CONFIG_JFFS2_FS=y CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_JFFS2_FS_NAND is not set # CONFIG_CRAMFS is not set -CONFIG_TMPFS=y -# CONFIG_RAMFS is not set -# CONFIG_ISO9660_FS is not set -# CONFIG_JOLIET is not set -# CONFIG_ZISOFS is not set -# CONFIG_MINIX_FS is not set # CONFIG_VXFS_FS is not set -# CONFIG_NTFS_FS is not set -# CONFIG_NTFS_DEBUG is not set -# CONFIG_NTFS_RW is not set # CONFIG_HPFS_FS is not set -CONFIG_PROC_FS=y -# CONFIG_DEVFS_FS is not set -# CONFIG_DEVFS_MOUNT is not set -# CONFIG_DEVFS_DEBUG is not set -CONFIG_DEVPTS_FS=y # CONFIG_QNX4FS_FS is not set -# CONFIG_QNX4FS_RW is not set -# CONFIG_ROMFS_FS is not set -CONFIG_EXT2_FS=y # CONFIG_SYSV_FS is not set -# CONFIG_UDF_FS is not set -# CONFIG_UDF_RW is not set # CONFIG_UFS_FS is not set -# CONFIG_UFS_FS_WRITE is not set # # Network File Systems # -# CONFIG_CODA_FS is not set -# CONFIG_INTERMEZZO_FS is not set CONFIG_NFS_FS=y # CONFIG_NFS_V3 is not set -CONFIG_ROOT_NFS=y +# CONFIG_NFS_V4 is not set # CONFIG_NFSD is not set -# CONFIG_NFSD_V3 is not set -CONFIG_SUNRPC=y +CONFIG_ROOT_NFS=y CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set # CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set # CONFIG_NCP_FS is not set -# CONFIG_NCPFS_PACKET_SIGNING is not set -# CONFIG_NCPFS_IOCTL_LOCKING is not set -# CONFIG_NCPFS_STRONG is not set -# CONFIG_NCPFS_NFS_NS is not set -# CONFIG_NCPFS_OS2_NS is not set -# CONFIG_NCPFS_SMALLDOS is not set -# CONFIG_NCPFS_NLS is not set -# CONFIG_NCPFS_EXTRAS is not set -# CONFIG_ZISOFS_FS is not set -# CONFIG_ZLIB_FS_INFLATE is not set +# CONFIG_CODA_FS is not set +# CONFIG_INTERMEZZO_FS is not set +CONFIG_SUNRPC=y +# CONFIG_SUNRPC_GSS is not set +# CONFIG_AFS_FS is not set # # Partition Types @@ -698,8 +658,19 @@ # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set # CONFIG_SUN_PARTITION is not set -# CONFIG_SMB_NLS is not set -# CONFIG_NLS is not set +# CONFIG_EFI_PARTITION is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y # # Sound @@ -707,76 +678,23 @@ # CONFIG_SOUND is not set # +# Misc devices +# + +# # Multimedia Capabilities Port drivers # # CONFIG_MCP is not set -# CONFIG_MCP_SA1100 is not set -# CONFIG_MCP_UCB1200 is not set -# CONFIG_MCP_UCB1200_AUDIO is not set -# CONFIG_MCP_UCB1200_TS is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set # # USB support # # CONFIG_USB is not set -# CONFIG_USB_UHCI is not set -# CONFIG_USB_UHCI_ALT is not set -# CONFIG_USB_OHCI is not set -# CONFIG_USB_OHCI_SA1111 is not set -# CONFIG_USB_AUDIO is not set -# CONFIG_USB_BLUETOOTH is not set -# CONFIG_USB_STORAGE is not set -# CONFIG_USB_STORAGE_DEBUG is not set -# CONFIG_USB_STORAGE_DATAFAB is not set -# CONFIG_USB_STORAGE_FREECOM is not set -# CONFIG_USB_STORAGE_ISD200 is not set -# CONFIG_USB_STORAGE_DPCM is not set -# CONFIG_USB_STORAGE_HP8200e is not set -# CONFIG_USB_STORAGE_SDDR09 is not set -# CONFIG_USB_STORAGE_JUMPSHOT is not set -# CONFIG_USB_ACM is not set -# CONFIG_USB_PRINTER is not set -# CONFIG_USB_DC2XX is not set -# CONFIG_USB_MDC800 is not set -# CONFIG_USB_SCANNER is not set -# CONFIG_USB_MICROTEK is not set -# CONFIG_USB_HPUSBSCSI is not set -# CONFIG_USB_PEGASUS is not set -# CONFIG_USB_KAWETH is not set -# CONFIG_USB_CATC is not set -# CONFIG_USB_CDCETHER is not set -# CONFIG_USB_USBNET is not set -# CONFIG_USB_USS720 is not set - -# -# USB Serial Converter support -# -# CONFIG_USB_SERIAL is not set -# CONFIG_USB_SERIAL_GENERIC is not set -# CONFIG_USB_SERIAL_BELKIN is not set -# CONFIG_USB_SERIAL_WHITEHEAT is not set -# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set -# CONFIG_USB_SERIAL_EMPEG is not set -# CONFIG_USB_SERIAL_FTDI_SIO is not set -# CONFIG_USB_SERIAL_VISOR is not set -# CONFIG_USB_SERIAL_IR is not set -# CONFIG_USB_SERIAL_EDGEPORT is not set -# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set -# CONFIG_USB_SERIAL_KEYSPAN is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XA is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA28XB is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19 is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA18X is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA19W is not set -# CONFIG_USB_SERIAL_KEYSPAN_USA49W is not set -# CONFIG_USB_SERIAL_MCT_U232 is not set -# CONFIG_USB_SERIAL_PL2303 is not set -# CONFIG_USB_SERIAL_CYBERJACK is not set -# CONFIG_USB_SERIAL_XIRCOM is not set -# CONFIG_USB_SERIAL_OMNINET is not set -# CONFIG_USB_RIO500 is not set # # Bluetooth support @@ -789,7 +707,6 @@ CONFIG_FRAME_POINTER=y CONFIG_DEBUG_USER=y # CONFIG_DEBUG_INFO is not set -# CONFIG_NO_PGT_CACHE is not set CONFIG_DEBUG_KERNEL=y # CONFIG_DEBUG_SLAB is not set # CONFIG_MAGIC_SYSRQ is not set @@ -797,6 +714,22 @@ # CONFIG_DEBUG_WAITQ is not set CONFIG_DEBUG_BUGVERBOSE=y CONFIG_DEBUG_ERRORS=y +CONFIG_KALLSYMS=y CONFIG_DEBUG_LL=y -# CONFIG_DEBUG_DC21285_PORT is not set -# CONFIG_DEBUG_CLPS711X_UART2 is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/arm/def-configs/iq80321 b/arch/arm/def-configs/iq80321 --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/def-configs/iq80321 Thu Apr 17 19:22:50 2003 @@ -0,0 +1,695 @@ +# +# Automatically generated make config: don't edit +# +CONFIG_ARM=y +CONFIG_MMU=y +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y + +# +# Code maturity level options +# +# CONFIG_EXPERIMENTAL is not set + +# +# General setup +# +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +# CONFIG_BSD_PROCESS_ACCT is not set +CONFIG_SYSCTL=y +CONFIG_LOG_BUF_SHIFT=14 + +# +# Loadable module support +# +CONFIG_MODULES=y +# CONFIG_MODULE_UNLOAD is not set +CONFIG_OBSOLETE_MODPARM=y +CONFIG_KMOD=y + +# +# System Type +# +# CONFIG_ARCH_ADIFCC is not set +# CONFIG_ARCH_ANAKIN is not set +# CONFIG_ARCH_ARCA5K is not set +# CONFIG_ARCH_CLPS7500 is not set +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_CO285 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_CAMELOT is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_INTEGRATOR is not set +CONFIG_ARCH_IOP3XX=y +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_SHARK is not set + +# +# Archimedes/A5000 Implementations +# + +# +# Archimedes/A5000 Implementations (select only ONE) +# + +# +# CLPS711X/EP721X Implementations +# + +# +# Epxa10db +# + +# +# Footbridge Implementations +# + +# +# IOP3xx Implementation Options +# +# CONFIG_ARCH_IQ80310 is not set +CONFIG_ARCH_IQ80321=y +# CONFIG_ARCH_IOP310 is not set +CONFIG_ARCH_IOP321=y + +# +# IOP3xx Chipset Features +# + +# +# Intel PXA250/210 Implementations +# + +# +# SA11x0 Implementations +# + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_XSCALE=y +CONFIG_CPU_32v5=y + +# +# Processor Features +# +CONFIG_XSCALE_PMU=y + +# +# General setup +# +CONFIG_PCI=y +# CONFIG_ZBOOT_ROM is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +# CONFIG_PCI_LEGACY_PROC is not set +CONFIG_PCI_NAMES=y +# CONFIG_HOTPLUG is not set + +# +# At least one math emulation must be selected +# +CONFIG_FPE_NWFPE=y +CONFIG_KCORE_ELF=y +# CONFIG_KCORE_AOUT is not set +CONFIG_BINFMT_AOUT=y +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_MISC is not set +# CONFIG_PM is not set +# CONFIG_ARTHUR is not set +CONFIG_CMDLINE="ip=boot root=nfs console=ttyS0,115200" +CONFIG_ALIGNMENT_TRAP=y + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Memory Technology Devices (MTD) +# +CONFIG_MTD=y +# CONFIG_MTD_DEBUG is not set +CONFIG_MTD_PARTITIONS=y +# CONFIG_MTD_CONCAT is not set +CONFIG_MTD_REDBOOT_PARTS=y +# CONFIG_MTD_CMDLINE_PARTS is not set +# CONFIG_MTD_AFS_PARTS is not set + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLOCK=y +# CONFIG_FTL is not set +# CONFIG_NFTL is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# CONFIG_MTD_OBSOLETE_CHIPS is not set + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_PHYSMAP is not set +# CONFIG_MTD_NORA is not set +# CONFIG_MTD_ARM_INTEGRATOR is not set +CONFIG_MTD_IQ80321=y +# CONFIG_MTD_EDB7312 is not set +# CONFIG_MTD_PCI is not set +# CONFIG_MTD_UCLINUX is not set + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_PMC551 is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLKMTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOC1000 is not set +# CONFIG_MTD_DOC2000 is not set +# CONFIG_MTD_DOC2001 is not set + +# +# NAND Flash Device Drivers +# +# CONFIG_MTD_NAND is not set + +# +# Plug and Play support +# +# CONFIG_PNP is not set + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_CPQ_DA is not set +# CONFIG_BLK_CPQ_CISS_DA is not set +# CONFIG_BLK_DEV_DAC960 is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +# CONFIG_BLK_DEV_INITRD is not set + +# +# Multi-device support (RAID and LVM) +# +# CONFIG_MD is not set + +# +# Networking support +# +CONFIG_NET=y + +# +# Networking options +# +# CONFIG_PACKET is not set +# CONFIG_NETLINK_DEV is not set +CONFIG_NETFILTER=y +# CONFIG_NETFILTER_DEBUG is not set +# CONFIG_FILTER is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_INET_ECN is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_XFRM_USER is not set + +# +# IP: Netfilter Configuration +# +# CONFIG_IP_NF_CONNTRACK is not set +# CONFIG_IP_NF_IPTABLES is not set +# CONFIG_IP_NF_ARPTABLES is not set +# CONFIG_IP_NF_COMPAT_IPCHAINS is not set +# CONFIG_IP_NF_COMPAT_IPFWADM is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_LLC is not set +# CONFIG_DECNET is not set +# CONFIG_BRIDGE is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +CONFIG_NETDEVICES=y + +# +# ARCnet devices +# +# CONFIG_ARCNET is not set +# CONFIG_DUMMY is not set +# CONFIG_BONDING is not set +# CONFIG_EQUALIZER is not set +# CONFIG_TUN is not set + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +# CONFIG_MII is not set +# CONFIG_HAPPYMEAL is not set +# CONFIG_SUNGEM is not set +# CONFIG_NET_VENDOR_3COM is not set + +# +# Tulip family network device support +# +# CONFIG_NET_TULIP is not set +# CONFIG_HP100 is not set +CONFIG_NET_PCI=y +# CONFIG_PCNET32 is not set +# CONFIG_AMD8111_ETH is not set +# CONFIG_ADAPTEC_STARFIRE is not set +# CONFIG_DGRS is not set +CONFIG_EEPRO100=y +# CONFIG_EEPRO100_PIO is not set +# CONFIG_E100 is not set +# CONFIG_FEALNX is not set +# CONFIG_NATSEMI is not set +# CONFIG_NE2K_PCI is not set +# CONFIG_8139TOO is not set +# CONFIG_SIS900 is not set +# CONFIG_EPIC100 is not set +# CONFIG_SUNDANCE is not set +# CONFIG_TLAN is not set +# CONFIG_VIA_RHINE is not set + +# +# Ethernet (1000 Mbit) +# +# CONFIG_ACENIC is not set +# CONFIG_DL2K is not set +# CONFIG_E1000 is not set +# CONFIG_NS83820 is not set +# CONFIG_HAMACHI is not set +# CONFIG_R8169 is not set +# CONFIG_SK98LIN is not set +# CONFIG_TIGON3 is not set +# CONFIG_FDDI is not set +# CONFIG_PPP is not set +# CONFIG_SLIP is not set + +# +# Wireless LAN (non-hamradio) +# +# CONFIG_NET_RADIO is not set + +# +# Token Ring devices (depends on LLC=y) +# + +# +# Wan interfaces +# +# CONFIG_WAN is not set + +# +# IrDA (infrared) support +# +# CONFIG_IRDA is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ATA/ATAPI/MFM/RLL support +# +CONFIG_IDE=y + +# +# IDE, ATA and ATAPI Block devices +# +CONFIG_BLK_DEV_IDE=y + +# +# Please see Documentation/ide.txt for help/info on IDE drives +# +# CONFIG_BLK_DEV_HD is not set +CONFIG_BLK_DEV_IDEDISK=y +# CONFIG_IDEDISK_MULTI_MODE is not set +# CONFIG_IDEDISK_STROKE is not set +CONFIG_BLK_DEV_IDECD=y +# CONFIG_BLK_DEV_IDEFLOPPY is not set +# CONFIG_IDE_TASK_IOCTL is not set + +# +# IDE chipset support/bugfixes +# +CONFIG_BLK_DEV_IDEPCI=y +# CONFIG_BLK_DEV_GENERIC is not set +# CONFIG_IDEPCI_SHARE_IRQ is not set +CONFIG_BLK_DEV_IDEDMA_PCI=y +# CONFIG_BLK_DEV_OFFBOARD is not set +# CONFIG_BLK_DEV_IDEDMA_FORCED is not set +CONFIG_IDEDMA_PCI_AUTO=y +# CONFIG_IDEDMA_ONLYDISK is not set +CONFIG_BLK_DEV_IDEDMA=y +CONFIG_BLK_DEV_ADMA=y +# CONFIG_BLK_DEV_AEC62XX is not set +# CONFIG_BLK_DEV_ALI15X3 is not set +# CONFIG_BLK_DEV_AMD74XX is not set +CONFIG_BLK_DEV_CMD64X=y +# CONFIG_BLK_DEV_TRIFLEX is not set +# CONFIG_BLK_DEV_CY82C693 is not set +# CONFIG_BLK_DEV_HPT34X is not set +# CONFIG_BLK_DEV_HPT366 is not set +# CONFIG_BLK_DEV_SC1200 is not set +# CONFIG_BLK_DEV_PIIX is not set +# CONFIG_BLK_DEV_NS87415 is not set +# CONFIG_BLK_DEV_PDC202XX_OLD is not set +# CONFIG_BLK_DEV_PDC202XX_NEW is not set +# CONFIG_BLK_DEV_SVWKS is not set +# CONFIG_BLK_DEV_SIIMAGE is not set +# CONFIG_BLK_DEV_SLC90E66 is not set +# CONFIG_BLK_DEV_TRM290 is not set +# CONFIG_BLK_DEV_VIA82CXXX is not set +# CONFIG_BLK_DEV_SL82C105 is not set +CONFIG_IDEDMA_AUTO=y +# CONFIG_IDEDMA_IVB is not set +CONFIG_BLK_DEV_IDE_MODES=y + +# +# SCSI support +# +# CONFIG_SCSI is not set + +# +# I2O device support +# +# CONFIG_I2O is not set + +# +# ISDN subsystem +# +# CONFIG_ISDN_BOOL is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# + +# +# Character devices +# +# CONFIG_SERIAL_NONSTANDARD is not set + +# +# Serial drivers +# + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_DZ is not set +CONFIG_UNIX98_PTYS=y +CONFIG_UNIX98_PTY_COUNT=256 + +# +# I2C support +# +# CONFIG_I2C is not set + +# +# I2C Hardware Sensors Mainboard support +# + +# +# I2C Hardware Sensors Chip support +# + +# +# L3 serial bus support +# +# CONFIG_L3 is not set + +# +# Mice +# +# CONFIG_BUSMOUSE is not set +# CONFIG_QIC02_TAPE is not set + +# +# IPMI +# +# CONFIG_IPMI_HANDLER is not set + +# +# Watchdog Cards +# +# CONFIG_WATCHDOG is not set +# CONFIG_NVRAM is not set +# CONFIG_RTC is not set +# CONFIG_GEN_RTC is not set +# CONFIG_DTLK is not set +# CONFIG_R3964 is not set +# CONFIG_APPLICOM is not set + +# +# Ftape, the floppy tape device driver +# +# CONFIG_FTAPE is not set +# CONFIG_AGP is not set +# CONFIG_DRM is not set +# CONFIG_RAW_DRIVER is not set +# CONFIG_HANGCHECK_TIMER is not set + +# +# Multimedia devices +# +CONFIG_VIDEO_DEV=y + +# +# Video For Linux +# +# CONFIG_VIDEO_PROC_FS is not set + +# +# Video Adapters +# +# CONFIG_VIDEO_PMS is not set +# CONFIG_VIDEO_CPIA is not set + +# +# Radio Adapters +# +# CONFIG_RADIO_GEMTEK_PCI is not set +# CONFIG_RADIO_MAXIRADIO is not set +# CONFIG_RADIO_MAESTRO is not set + +# +# Digital Video Broadcasting Devices +# +# CONFIG_DVB is not set + +# +# File systems +# +CONFIG_EXT2_FS=y +# CONFIG_EXT2_FS_XATTR is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_ROMFS_FS is not set +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_DEVPTS_FS=y +CONFIG_TMPFS=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_JFFS_FS is not set +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Network File Systems +# +CONFIG_NFS_FS=y +# CONFIG_NFS_V3 is not set +# CONFIG_NFSD is not set +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +# CONFIG_EXPORTFS is not set +# CONFIG_SMB_FS is not set +# CONFIG_CIFS is not set +# CONFIG_NCP_FS is not set +# CONFIG_CODA_FS is not set +CONFIG_SUNRPC=y + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_EFI_PARTITION is not set + +# +# Graphics support +# +# CONFIG_FB is not set + +# +# Console display driver support +# +# CONFIG_VGA_CONSOLE is not set +# CONFIG_MDA_CONSOLE is not set +CONFIG_DUMMY_CONSOLE=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# Misc devices +# + +# +# Multimedia Capabilities Port drivers +# +# CONFIG_MCP is not set + +# +# Console Switches +# +# CONFIG_SWITCHES is not set + +# +# USB support +# +# CONFIG_USB is not set + +# +# Bluetooth support +# +# CONFIG_BT is not set + +# +# Kernel hacking +# +CONFIG_FRAME_POINTER=y +CONFIG_DEBUG_USER=y +# CONFIG_DEBUG_INFO is not set +CONFIG_DEBUG_KERNEL=y +# CONFIG_DEBUG_SLAB is not set +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_WAITQ is not set +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_ERRORS=y +# CONFIG_KALLSYMS is not set +CONFIG_DEBUG_LL=y + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y diff -Nru a/arch/arm/kernel/Makefile b/arch/arm/kernel/Makefile --- a/arch/arm/kernel/Makefile Thu Apr 17 19:22:49 2003 +++ b/arch/arm/kernel/Makefile Thu Apr 17 19:22:49 2003 @@ -27,10 +27,8 @@ obj-y += io.o endif -ifeq ($(CONFIG_CPU_32),y) head-y := head.o obj-$(CONFIG_DEBUG_LL) += debug.o -endif extra-y := $(head-y) init_task.o diff -Nru a/arch/arm/kernel/armksyms.c b/arch/arm/kernel/armksyms.c --- a/arch/arm/kernel/armksyms.c Thu Apr 17 19:22:45 2003 +++ b/arch/arm/kernel/armksyms.c Thu Apr 17 19:22:45 2003 @@ -95,11 +95,6 @@ EXPORT_SYMBOL_ALIAS(fp_printk,printk); EXPORT_SYMBOL_ALIAS(fp_send_sig,send_sig); -#ifdef CONFIG_CPU_26 -EXPORT_SYMBOL(fpundefinstr); -EXPORT_SYMBOL(ret_from_exception); -#endif - #ifdef CONFIG_VT EXPORT_SYMBOL(kd_mksound); #endif @@ -111,10 +106,8 @@ EXPORT_SYMBOL(dump_thread); EXPORT_SYMBOL(dump_fpu); EXPORT_SYMBOL(udelay); -#ifdef CONFIG_CPU_32 EXPORT_SYMBOL(__ioremap); EXPORT_SYMBOL(__iounmap); -#endif EXPORT_SYMBOL(kernel_thread); EXPORT_SYMBOL(system_rev); EXPORT_SYMBOL(system_serial_low); @@ -196,7 +189,6 @@ EXPORT_SYMBOL_NOVERS(__memzero); /* user mem (segment) */ -#if defined(CONFIG_CPU_32) EXPORT_SYMBOL(__arch_copy_from_user); EXPORT_SYMBOL(__arch_copy_to_user); EXPORT_SYMBOL(__arch_clear_user); @@ -206,11 +198,6 @@ EXPORT_SYMBOL(consistent_alloc); EXPORT_SYMBOL(consistent_free); EXPORT_SYMBOL(consistent_sync); - -#elif defined(CONFIG_CPU_26) -EXPORT_SYMBOL(uaccess_kernel); -EXPORT_SYMBOL(uaccess_user); -#endif EXPORT_SYMBOL_NOVERS(__get_user_1); EXPORT_SYMBOL_NOVERS(__get_user_2); diff -Nru a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c --- a/arch/arm/kernel/asm-offsets.c Thu Apr 17 19:22:43 2003 +++ b/arch/arm/kernel/asm-offsets.c Thu Apr 17 19:22:43 2003 @@ -21,10 +21,7 @@ /* * Make sure that the compiler and target are compatible. */ -#if defined(__APCS_32__) && defined(CONFIG_CPU_26) -#error Sorry, your compiler targets APCS-32 but this kernel requires APCS-26 -#endif -#if defined(__APCS_26__) && defined(CONFIG_CPU_32) +#if defined(__APCS_26__) #error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32 #endif #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 95) @@ -52,7 +49,6 @@ BLANK(); DEFINE(VM_EXEC, VM_EXEC); BLANK(); -#ifdef CONFIG_CPU_32 DEFINE(HPTE_TYPE_SMALL, PTE_TYPE_SMALL); DEFINE(HPTE_AP_READ, PTE_AP_READ); DEFINE(HPTE_AP_WRITE, PTE_AP_WRITE); @@ -65,15 +61,7 @@ DEFINE(LPTE_WRITE, L_PTE_WRITE); DEFINE(LPTE_EXEC, L_PTE_EXEC); DEFINE(LPTE_DIRTY, L_PTE_DIRTY); -#endif BLANK(); -#ifdef CONFIG_CPU_26 - DEFINE(PAGE_PRESENT, _PAGE_PRESENT); - DEFINE(PAGE_READONLY, _PAGE_READONLY); - DEFINE(PAGE_NOT_USER, _PAGE_NOT_USER); - DEFINE(PAGE_OLD, _PAGE_OLD); - DEFINE(PAGE_CLEAN, _PAGE_CLEAN); -#endif BLANK(); DEFINE(PAGE_SZ, PAGE_SIZE); BLANK(); diff -Nru a/arch/arm/kernel/debug.S b/arch/arm/kernel/debug.S --- a/arch/arm/kernel/debug.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/kernel/debug.S Thu Apr 17 19:22:44 2003 @@ -410,11 +410,17 @@ bne 1001b .endm -#elif defined(CONFIG_ARCH_IQ80310) +#elif defined(CONFIG_ARCH_IOP3XX) .macro addruart,rx mov \rx, #0xfe000000 @ physical - orr \rx, \rx, #0x00810000 +#ifdef CONFIG_ARCH_IQ80310 + orr \rx, \rx, #0x00810000 @ location of the UART +#elif defined(CONFIG_ARCH_IQ80321) + orr \rx, \rx, #0x00800000 @ location of the UART +#else +#error Unknown IOP3XX implementation +#endif .endm .macro senduart,rd,rx @@ -429,9 +435,11 @@ .endm .macro waituart,rd,rx +#ifndef CONFIG_ARCH_IQ80321 1001: ldrb \rd, [\rx, #0x6] tst \rd, #0x10 beq 1001b +#endif .endm #elif defined(CONFIG_ARCH_ADI_EVB) diff -Nru a/arch/arm/kernel/ecard.c b/arch/arm/kernel/ecard.c --- a/arch/arm/kernel/ecard.c Thu Apr 17 19:22:48 2003 +++ b/arch/arm/kernel/ecard.c Thu Apr 17 19:22:48 2003 @@ -220,7 +220,6 @@ } } -#ifdef CONFIG_CPU_32 #include static pid_t ecard_pid; @@ -341,13 +340,6 @@ */ wait_for_completion(&ecard_completion); } -#else -/* - * On 26-bit processors, we don't need the kcardd thread to access the - * expansion card loaders. We do it directly. - */ -#define ecard_call(req) ecard_do_request(req) -#endif /* ======================= Mid-level card control ===================== */ @@ -1026,9 +1018,7 @@ { int slot, irqhw; -#ifdef CONFIG_CPU_32 init_waitqueue_head(&ecard_wait); -#endif printk("Probing expansion cards\n"); diff -Nru a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S --- a/arch/arm/kernel/entry-armv.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/kernel/entry-armv.S Thu Apr 17 19:22:44 2003 @@ -584,6 +584,28 @@ .macro irq_prio_table .endm +#elif defined(CONFIG_ARCH_IOP321) + .macro disable_fiq + .endm + + /* + * Note: only deal with normal interrupts, not FIQ + */ + .macro get_irqnr_and_base, irqnr, irqstat, base, tmp + mov \irqnr, #0 + mrc p6, 0, \irqstat, c8, c0, 0 @ Read IINTSRC + cmp \irqstat, #0 + beq 1001f + clz \irqnr, \irqstat + mov \base, #31 + subs \irqnr,\base,\irqnr + add \irqnr,\irqnr,#IRQ_IOP321_DMA0_EOT +1001: + .endm + + .macro irq_prio_table + .endm + #elif defined(CONFIG_ARCH_PXA) .macro disable_fiq diff -Nru a/arch/arm/kernel/entry-header.S b/arch/arm/kernel/entry-header.S --- a/arch/arm/kernel/entry-header.S Thu Apr 17 19:22:45 2003 +++ b/arch/arm/kernel/entry-header.S Thu Apr 17 19:22:45 2003 @@ -41,14 +41,8 @@ @ Stack format (ensured by USER_* and SVC_*) @ #define S_FRAME_SIZE 72 -#ifdef CONFIG_CPU_32 #define S_OLD_R0 68 #define S_PSR 64 -#else -#define S_OLD_R0 64 -#define S_PSR 60 -#define S_PC 60 -#endif #define S_PC 60 #define S_LR 56 @@ -68,8 +62,6 @@ #define S_R0 0 #define S_OFF 8 -#ifdef CONFIG_CPU_32 - .macro set_cpsr_c, reg, mode #if 1 /* broken binutils */ @@ -159,58 +151,6 @@ mcr p15, 0, \rtemp, c1, c0 #endif .endm - -#else - .macro save_user_regs - str r0, [sp, #-4]! - str lr, [sp, #-4]! - sub sp, sp, #15*4 - stmia sp, {r0 - lr}^ - mov r0, r0 - .endm - - .macro restore_user_regs - ldmia sp, {r0 - lr}^ - mov r0, r0 - ldr lr, [sp, #15*4] - add sp, sp, #15*4+8 - movs pc, lr - .endm - - .macro fast_restore_user_regs - add sp, sp, #S_OFF - ldmib sp, {r1 - lr}^ - mov r0, r0 - ldr lr, [sp, #15*4] - add sp, sp, #15*4+8 - movs pc, lr - .endm - - .macro mask_pc, rd, rm - bic \rd, \rm, #PCMASK - .endm - - .macro enable_irqs, temp - teqp pc, #0x00000003 - .endm - - .macro initialise_traps_extra - .endm - - .macro get_thread_info, rd - mov \rd, sp, lsr #13 - mov \rd, \rd, lsl #13 - .endm - - /* - * Like adr, but force SVC mode (if required) - */ - .macro adrsvc, cond, reg, label - adr\cond \reg, \label - orr\cond \reg, \reg, #0x08000003 - .endm - -#endif /* diff -Nru a/arch/arm/kernel/fiq.c b/arch/arm/kernel/fiq.c --- a/arch/arm/kernel/fiq.c Thu Apr 17 19:22:49 2003 +++ b/arch/arm/kernel/fiq.c Thu Apr 17 19:22:49 2003 @@ -54,7 +54,6 @@ static unsigned long no_fiq_insn; -#ifdef CONFIG_CPU_32 static inline void unprotect_page_0(void) { modify_domain(DOMAIN_USER, DOMAIN_MANAGER); @@ -64,12 +63,6 @@ { modify_domain(DOMAIN_USER, DOMAIN_CLIENT); } -#else - -#define unprotect_page_0() -#define protect_page_0() - -#endif /* Default reacquire function * - we always relinquish FIQ control @@ -120,17 +113,6 @@ { register unsigned long tmp, tmp2; __asm__ volatile ( -#ifdef CONFIG_CPU_26 - "mov %0, pc - bic %1, %0, #0x3 - orr %1, %1, %3 - teqp %1, #0 @ select FIQ mode - mov r0, r0 - ldmia %2, {r8 - r14} - teqp %0, #0 @ return to SVC mode - mov r0, r0" -#endif -#ifdef CONFIG_CPU_32 "mrs %0, cpsr mov %1, %3 msr cpsr_c, %1 @ select FIQ mode @@ -138,7 +120,6 @@ ldmia %2, {r8 - r14} msr cpsr_c, %0 @ return to SVC mode mov r0, r0" -#endif : "=&r" (tmp), "=&r" (tmp2) : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE) /* These registers aren't modified by the above code in a way @@ -152,17 +133,6 @@ { register unsigned long tmp, tmp2; __asm__ volatile ( -#ifdef CONFIG_CPU_26 - "mov %0, pc - bic %1, %0, #0x3 - orr %1, %1, %3 - teqp %1, #0 @ select FIQ mode - mov r0, r0 - stmia %2, {r8 - r14} - teqp %0, #0 @ return to SVC mode - mov r0, r0" -#endif -#ifdef CONFIG_CPU_32 "mrs %0, cpsr mov %1, %3 msr cpsr_c, %1 @ select FIQ mode @@ -170,7 +140,6 @@ stmia %2, {r8 - r14} msr cpsr_c, %0 @ return to SVC mode mov r0, r0" -#endif : "=&r" (tmp), "=&r" (tmp2) : "r" (®s->ARM_r8), "I" (PSR_I_BIT | PSR_F_BIT | FIQ_MODE) /* These registers aren't modified by the above code in a way diff -Nru a/arch/arm/kernel/head.S b/arch/arm/kernel/head.S --- a/arch/arm/kernel/head.S Thu Apr 17 19:22:43 2003 +++ b/arch/arm/kernel/head.S Thu Apr 17 19:22:43 2003 @@ -205,18 +205,6 @@ add r3, r3, #1 << 20 str r3, [r0], #4 @ KERNEL + 3MB - /* - * Ensure that the first section of RAM is present. - * we assume that: - * 1. the RAM is aligned to a 32MB boundary - * 2. the kernel is executing in the same 32MB chunk - * as the start of RAM. - */ - bic r0, r0, #0x01f00000 >> 18 @ round down - and r2, r5, #0xfe000000 @ round down - add r3, r8, r2 @ flags + rambase - str r3, [r0] - bic r8, r8, #0x0c @ turn off cacheable @ and bufferable bits #ifdef CONFIG_DEBUG_LL diff -Nru a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c --- a/arch/arm/kernel/process.c Thu Apr 17 19:22:49 2003 +++ b/arch/arm/kernel/process.c Thu Apr 17 19:22:49 2003 @@ -188,7 +188,6 @@ processor_modes[processor_mode(regs)], thumb_mode(regs) ? " (T)" : "", get_fs() == get_ds() ? "kernel" : "user"); -#if defined(CONFIG_CPU_32) { unsigned int ctrl, transbase, dac; __asm__ ( @@ -199,7 +198,6 @@ printk("Control: %04X Table: %08X DAC: %08X\n", ctrl, transbase, dac); } -#endif } void show_fpregs(struct user_fp *regs) @@ -237,18 +235,9 @@ static unsigned long *thread_info_head; static unsigned int nr_thread_info; -#ifdef CONFIG_CPU_32 #define EXTRA_TASK_STRUCT 4 #define ll_alloc_task_struct() ((struct thread_info *) __get_free_pages(GFP_KERNEL,1)) #define ll_free_task_struct(p) free_pages((unsigned long)(p),1) -#else -extern unsigned long get_page_8k(int priority); -extern void free_page_8k(unsigned long page); - -#define EXTRA_TASK_STRUCT 0 -#define ll_alloc_task_struct() ((struct task_struct *)get_page_8k(GFP_KERNEL)) -#define ll_free_task_struct(p) free_page_8k((unsigned long)(p)) -#endif struct thread_info *alloc_thread_info(void) { diff -Nru a/arch/arm/kernel/semaphore.c b/arch/arm/kernel/semaphore.c --- a/arch/arm/kernel/semaphore.c Thu Apr 17 19:22:45 2003 +++ b/arch/arm/kernel/semaphore.c Thu Apr 17 19:22:45 2003 @@ -177,44 +177,6 @@ * registers (r0 to r3 and lr), but not ip, as we use it as a return * value in some cases.. */ -#ifdef CONFIG_CPU_26 -asm(" .align 5 \n\ - .globl __down_failed \n\ -__down_failed: \n\ - stmfd sp!, {r0 - r3, lr} \n\ - mov r0, ip \n\ - bl __down \n\ - ldmfd sp!, {r0 - r3, pc}^ \n\ - \n\ - .align 5 \n\ - .globl __down_interruptible_failed \n\ -__down_interruptible_failed: \n\ - stmfd sp!, {r0 - r3, lr} \n\ - mov r0, ip \n\ - bl __down_interruptible \n\ - mov ip, r0 \n\ - ldmfd sp!, {r0 - r3, pc}^ \n\ - \n\ - .align 5 \n\ - .globl __down_trylock_failed \n\ -__down_trylock_failed: \n\ - stmfd sp!, {r0 - r3, lr} \n\ - mov r0, ip \n\ - bl __down_trylock \n\ - mov ip, r0 \n\ - ldmfd sp!, {r0 - r3, pc}^ \n\ - \n\ - .align 5 \n\ - .globl __up_wakeup \n\ -__up_wakeup: \n\ - stmfd sp!, {r0 - r3, lr} \n\ - mov r0, ip \n\ - bl __up \n\ - ldmfd sp!, {r0 - r3, pc}^ \n\ - "); - -#else -/* 32 bit version */ asm(" .align 5 \n\ .globl __down_failed \n\ __down_failed: \n\ @@ -250,4 +212,3 @@ ldmfd sp!, {r0 - r3, pc} \n\ "); -#endif diff -Nru a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c --- a/arch/arm/kernel/setup.c Thu Apr 17 19:22:46 2003 +++ b/arch/arm/kernel/setup.c Thu Apr 17 19:22:46 2003 @@ -113,7 +113,6 @@ #define lp1 io_res[1] #define lp2 io_res[2] -#ifdef CONFIG_CPU_32 static const char *cache_types[16] = { "write-through", "write-back", @@ -231,10 +230,6 @@ } } -#else -#define dump_cpu_info() do { } while (0) -#endif - int cpu_architecture(void) { int cpu_arch; @@ -768,7 +763,6 @@ } seq_printf(m, "CPU revision\t: %d\n", processor_id & 15); -#ifdef CONFIG_CPU_32 { unsigned int cache_info; @@ -791,7 +785,6 @@ } } } -#endif seq_puts(m, "\n"); diff -Nru a/arch/arm/kernel/signal.c b/arch/arm/kernel/signal.c --- a/arch/arm/kernel/signal.c Thu Apr 17 19:22:43 2003 +++ b/arch/arm/kernel/signal.c Thu Apr 17 19:22:43 2003 @@ -174,9 +174,7 @@ __get_user_error(regs->ARM_sp, &sc->arm_sp, err); __get_user_error(regs->ARM_lr, &sc->arm_lr, err); __get_user_error(regs->ARM_pc, &sc->arm_pc, err); -#ifdef CONFIG_CPU_32 __get_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err); -#endif err |= !valid_user_regs(regs); @@ -292,9 +290,7 @@ __put_user_error(regs->ARM_sp, &sc->arm_sp, err); __put_user_error(regs->ARM_lr, &sc->arm_lr, err); __put_user_error(regs->ARM_pc, &sc->arm_pc, err); -#ifdef CONFIG_CPU_32 __put_user_error(regs->ARM_cpsr, &sc->arm_cpsr, err); -#endif __put_user_error(current->thread.trap_no, &sc->trap_no, err); __put_user_error(current->thread.error_code, &sc->error_code, err); @@ -328,7 +324,6 @@ unsigned long handler = (unsigned long)ka->sa.sa_handler; unsigned long retcode; int thumb = 0; -#ifdef CONFIG_CPU_32 unsigned long cpsr = regs->ARM_cpsr & ~PSR_f; /* @@ -351,7 +346,6 @@ cpsr &= ~PSR_T_BIT; } #endif -#endif if (ka->sa.sa_flags & SA_RESTORER) { retcode = (unsigned long)ka->sa.sa_restorer; @@ -378,10 +372,7 @@ regs->ARM_sp = (unsigned long)frame; regs->ARM_lr = retcode; regs->ARM_pc = handler; - -#ifdef CONFIG_CPU_32 regs->ARM_cpsr = cpsr; -#endif return 0; } diff -Nru a/arch/arm/kernel/sys_arm.c b/arch/arm/kernel/sys_arm.c --- a/arch/arm/kernel/sys_arm.c Thu Apr 17 19:22:44 2003 +++ b/arch/arm/kernel/sys_arm.c Thu Apr 17 19:22:44 2003 @@ -229,7 +229,7 @@ return sys_shmctl (first, second, (struct shmid_ds *) ptr); default: - return -EINVAL; + return -ENOSYS; } } diff -Nru a/arch/arm/kernel/traps.c b/arch/arm/kernel/traps.c --- a/arch/arm/kernel/traps.c Thu Apr 17 19:22:45 2003 +++ b/arch/arm/kernel/traps.c Thu Apr 17 19:22:45 2003 @@ -271,31 +271,6 @@ die_if_kernel("Oops - undefined instruction", regs, 0); } -#ifdef CONFIG_CPU_26 -asmlinkage void do_excpt(unsigned long address, struct pt_regs *regs, int mode) -{ - siginfo_t info; - -#ifdef CONFIG_DEBUG_USER - printk(KERN_INFO "%s (%d): address exception: pc=%08lx\n", - current->comm, current->pid, instruction_pointer(regs)); - dump_instr(regs); -#endif - - current->thread.error_code = 0; - current->thread.trap_no = 11; - - info.si_signo = SIGBUS; - info.si_errno = 0; - info.si_code = BUS_ADRERR; - info.si_addr = (void *)address; - - force_sig_info(SIGBUS, &info, current); - - die_if_kernel("Oops - address exception", regs, mode); -} -#endif - asmlinkage void do_unexp_fiq (struct pt_regs *regs) { #ifndef CONFIG_IGNORE_FIQ @@ -405,7 +380,6 @@ ptrace_break(current, regs); return regs->ARM_r0; -#ifdef CONFIG_CPU_32 /* * Flush a region from virtual address 'r0' to virtual address 'r1' * _inclusive_. There is no alignment requirement on either address; @@ -435,14 +409,6 @@ break; regs->ARM_cpsr |= MODE32_BIT; return regs->ARM_r0; -#else - case NR(cacheflush): - return 0; - - case NR(usr26): - case NR(usr32): - break; -#endif default: /* Calls 9f00xx..9f07ff are defined to return -ENOSYS @@ -563,7 +529,5 @@ if (base != 0) printk(KERN_DEBUG "Relocating machine vectors to 0x%08lx\n", base); -#ifdef CONFIG_CPU_32 modify_domain(DOMAIN_USER, DOMAIN_CLIENT); -#endif } diff -Nru a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile --- a/arch/arm/lib/Makefile Thu Apr 17 19:22:47 2003 +++ b/arch/arm/lib/Makefile Thu Apr 17 19:22:47 2003 @@ -39,8 +39,6 @@ obj-$(v4) += io-readsw-armv4.o io-writesw-armv4.o io-readsl-armv4.o obj-y += io-writesl.o -obj-$(CONFIG_CPU_26) += uaccess-armo.o - $(obj)/csumpartialcopy.o: $(obj)/csumpartialcopygeneric.S $(obj)/csumpartialcopyuser.o: $(obj)/csumpartialcopygeneric.S diff -Nru a/arch/arm/lib/backtrace.S b/arch/arm/lib/backtrace.S --- a/arch/arm/lib/backtrace.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/lib/backtrace.S Thu Apr 17 19:22:44 2003 @@ -6,6 +6,9 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. + * + * 27/03/03 Ian Molton Clean up CONFIG_CPU + * */ #include #include @@ -31,13 +34,9 @@ #else stmfd sp!, {r4 - r8, lr} @ Save an extra register so we have a location... -#ifdef CONFIG_CPU_32 tst r1, #0x10 @ 26 or 32-bit? moveq mask, #0xfc000003 movne mask, #0 -#else - mov mask, #0xfc000003 -#endif tst mask, r0 movne r0, #0 movs frame, r0 diff -Nru a/arch/arm/lib/copy_page.S b/arch/arm/lib/copy_page.S --- a/arch/arm/lib/copy_page.S Thu Apr 17 19:22:46 2003 +++ b/arch/arm/lib/copy_page.S Thu Apr 17 19:22:46 2003 @@ -13,6 +13,12 @@ #include #include +#ifndef PLD +#define COPY_COUNT PAGE_SZ/64 +#else +#define COPY_COUNT PAGE_SZ/64-1 +#endif + .text .align 5 /* @@ -23,9 +29,13 @@ */ ENTRY(copy_page) stmfd sp!, {r4, lr} @ 2 - mov r2, #PAGE_SZ/64 @ 1 + PLD( pld [r1, #0] ) + PLD( pld [r1, #32] ) + mov r2, #COPY_COUNT @ 1 ldmia r1!, {r3, r4, ip, lr} @ 4+1 -1: stmia r0!, {r3, r4, ip, lr} @ 4 +1: PLD( pld [r1, #64] ) + PLD( pld [r1, #96] ) +2: stmia r0!, {r3, r4, ip, lr} @ 4 ldmia r1!, {r3, r4, ip, lr} @ 4+1 stmia r0!, {r3, r4, ip, lr} @ 4 ldmia r1!, {r3, r4, ip, lr} @ 4+1 @@ -33,6 +43,8 @@ ldmia r1!, {r3, r4, ip, lr} @ 4 subs r2, r2, #1 @ 1 stmia r0!, {r3, r4, ip, lr} @ 4 - ldmneia r1!, {r3, r4, ip, lr} @ 4 - bne 1b @ 1 + ldmgtia r1!, {r3, r4, ip, lr} @ 4 + bgt 1b @ 1 + PLD( ldmeqia r1!, {r3, r4, ip, lr} ) + PLD( beq 2b ) LOADREGS(fd, sp!, {r4, pc}) @ 3 diff -Nru a/arch/arm/lib/csumpartialcopyuser.S b/arch/arm/lib/csumpartialcopyuser.S --- a/arch/arm/lib/csumpartialcopyuser.S Thu Apr 17 19:22:47 2003 +++ b/arch/arm/lib/csumpartialcopyuser.S Thu Apr 17 19:22:47 2003 @@ -6,8 +6,10 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. + * + * 27/03/03 Ian Molton Clean up CONFIG_CPU + * */ -#include #include #include #include @@ -15,8 +17,6 @@ .text -#if defined(CONFIG_CPU_32) - .macro save_regs stmfd sp!, {r1 - r2, r4 - r8, fp, ip, lr, pc} .endm @@ -72,82 +72,6 @@ .previous .endm -#elif defined(CONFIG_CPU_26) - - .macro save_regs - stmfd sp!, {r1 - r2, r4 - r9, fp, ip, lr, pc} - mov r9, sp, lsr #13 - mov r9, r9, lsl #13 - ldr r9, [r9, #TSK_ADDR_LIMIT] - mov r9, r9, lsr #24 - .endm - - .macro load_regs,flags - ldm\flags fp, {r1, r2, r4-r9, fp, sp, pc}^ - .endm - - .macro load1b, reg1 - tst r9, #0x01 -9999: ldreqbt \reg1, [r0], #1 - ldrneb \reg1, [r0], #1 - .section __ex_table, "a" - .align 3 - .long 9999b, 6001f - .previous - .endm - - .macro load2b, reg1, reg2 - tst r9, #0x01 -9999: ldreqbt \reg1, [r0], #1 - ldrneb \reg1, [r0], #1 -9998: ldreqbt \reg2, [r0], #1 - ldrneb \reg2, [r0], #1 - .section __ex_table, "a" - .long 9999b, 6001f - .long 9998b, 6001f - .previous - .endm - - .macro load1l, reg1 - tst r9, #0x01 -9999: ldreqt \reg1, [r0], #4 - ldrne \reg1, [r0], #4 - .section __ex_table, "a" - .align 3 - .long 9999b, 6001f - .previous - .endm - - .macro load2l, reg1, reg2 - tst r9, #0x01 - ldmneia r0!, {\reg1, \reg2} -9999: ldreqt \reg1, [r0], #4 -9998: ldreqt \reg2, [r0], #4 - .section __ex_table, "a" - .long 9999b, 6001f - .long 9998b, 6001f - .previous - .endm - - .macro load4l, reg1, reg2, reg3, reg4 - tst r9, #0x01 - ldmneia r0!, {\reg1, \reg2, \reg3, \reg4} -9999: ldreqt \reg1, [r0], #4 -9998: ldreqt \reg2, [r0], #4 -9997: ldreqt \reg3, [r0], #4 -9996: ldreqt \reg4, [r0], #4 - .section __ex_table, "a" - .long 9999b, 6001f - .long 9998b, 6001f - .long 9997b, 6001f - .long 9996b, 6001f - .previous - .endm - -#else -#error Unknown CPU architecture -#endif - /* * unsigned int * csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *err_ptr) @@ -165,9 +89,7 @@ * so properly, we would have to add in whatever registers were loaded before * the fault, which, with the current asm above is not predictable. */ -#if defined(CONFIG_CPU_32) .section .fixup,"ax" -#endif .align 4 6001: mov r4, #-EFAULT ldr r5, [fp, #4] @ *err_ptr @@ -179,6 +101,4 @@ strneb r0, [r1], #1 bne 6002b load_regs ea -#if defined(CONFIG_CPU_32) .previous -#endif diff -Nru a/arch/arm/lib/ecard.S b/arch/arm/lib/ecard.S --- a/arch/arm/lib/ecard.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/lib/ecard.S Thu Apr 17 19:22:44 2003 @@ -6,19 +6,17 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. + * + * 27/03/03 Ian Molton Clean up CONFIG_CPU + * */ -#include /* for CONFIG_CPU_nn */ #include #include #include -#ifdef CONFIG_CPU_26 -#define CPSR2SPSR(rt) -#else #define CPSR2SPSR(rt) \ mrs rt, cpsr; \ msr spsr, rt -#endif @ Purpose: call an expansion card loader to read bytes. @ Proto : char read_loader(int offset, char *card_base, char *loader); diff -Nru a/arch/arm/lib/io-acorn.S b/arch/arm/lib/io-acorn.S --- a/arch/arm/lib/io-acorn.S Thu Apr 17 19:22:44 2003 +++ b/arch/arm/lib/io-acorn.S Thu Apr 17 19:22:44 2003 @@ -6,8 +6,10 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. + * + * 27/03/03 Ian Molton Clean up CONFIG_CPU + * */ -#include /* for CONFIG_CPU_nn */ #include #include #include @@ -53,21 +55,3 @@ adr r0, .iosl_warning mov r1, lr b printk - -@ Purpose: write a memc register -@ Proto : void memc_write(int register, int value); -@ Returns: nothing - -#ifdef CONFIG_CPU_26 -ENTRY(memc_write) - cmp r0, #7 - RETINSTR(movgt,pc,lr) - mov r0, r0, lsl #17 - mov r1, r1, lsl #15 - mov r1, r1, lsr #17 - orr r0, r0, r1, lsl #2 - add r0, r0, #0x03600000 - strb r0, [r0] - RETINSTR(mov,pc,lr) -#endif - diff -Nru a/arch/arm/lib/lib1funcs.S b/arch/arm/lib/lib1funcs.S --- a/arch/arm/lib/lib1funcs.S Thu Apr 17 19:22:43 2003 +++ b/arch/arm/lib/lib1funcs.S Thu Apr 17 19:22:43 2003 @@ -33,23 +33,19 @@ This exception does not however invalidate any other reasons why the executable file might be covered by the GNU General Public License. */ -/* This code is derived from gcc 2.95.3 */ -/* I Molton 29/07/01 */ +/* This code is derived from gcc 2.95.3 + * 29/07/01 Adapted for linux + * 27/03/03 Ian Molton Clean up CONFIG_CPU + */ #include #include #include #include -#ifdef CONFIG_CPU_26 -#define RET movs -#define RETc(x) mov##x##s -#define RETCOND ^ -#else #define RET mov #define RETc(x) mov##x #define RETCOND -#endif dividend .req r0 divisor .req r1 diff -Nru a/arch/arm/lib/memcpy.S b/arch/arm/lib/memcpy.S --- a/arch/arm/lib/memcpy.S Thu Apr 17 19:22:49 2003 +++ b/arch/arm/lib/memcpy.S Thu Apr 17 19:22:49 2003 @@ -27,15 +27,15 @@ /* * Prototype: void memcpy(void *to,const void *from,unsigned long n); - * ARM3: cant use memcopy here!!! */ ENTRY(memcpy) ENTRY(memmove) ENTER cmp r1, r0 - bcc 19f + bcc 23f subs r2, r2, #4 blt 6f + PLD( pld [r1, #0] ) ands ip, r0, #3 bne 7f ands ip, r1, #3 @@ -43,29 +43,42 @@ 1: subs r2, r2, #8 blt 5f - subs r2, r2, #0x14 - blt 3f -2: ldmia r1!,{r3 - r9, ip} - stmia r0!,{r3 - r9, ip} + subs r2, r2, #20 + blt 4f + PLD( pld [r1, #28] ) + PLD( subs r2, r2, #64 ) + PLD( blt 3f ) +2: PLD( pld [r1, #60] ) + PLD( pld [r1, #92] ) + ldmia r1!, {r3 - r9, ip} subs r2, r2, #32 + stmgeia r0!, {r3 - r9, ip} + ldmgeia r1!, {r3 - r9, ip} + subges r2, r2, #32 + stmia r0!, {r3 - r9, ip} bge 2b - cmn r2, #16 +3: PLD( ldmia r1!, {r3 - r9, ip} ) + PLD( adds r2, r2, #32 ) + PLD( stmgeia r0!, {r3 - r9, ip} ) + PLD( ldmgeia r1!, {r3 - r9, ip} ) + PLD( subges r2, r2, #32 ) + PLD( stmia r0!, {r3 - r9, ip} ) +4: cmn r2, #16 ldmgeia r1!, {r3 - r6} + subge r2, r2, #16 stmgeia r0!, {r3 - r6} - subge r2, r2, #0x10 -3: adds r2, r2, #0x14 -4: ldmgeia r1!, {r3 - r5} + adds r2, r2, #20 + ldmgeia r1!, {r3 - r5} + subge r2, r2, #12 stmgeia r0!, {r3 - r5} - subges r2, r2, #12 - bge 4b 5: adds r2, r2, #8 blt 6f subs r2, r2, #4 ldrlt r3, [r1], #4 ldmgeia r1!, {r4, r5} + subge r2, r2, #4 strlt r3, [r0], #4 stmgeia r0!, {r4, r5} - subge r2, r2, #4 6: adds r2, r2, #4 EXITEQ @@ -94,13 +107,19 @@ 8: bic r1, r1, #3 ldr r7, [r1], #4 cmp ip, #2 - bgt 15f - beq 11f + bgt 18f + beq 13f cmp r2, #12 - blt 10f + blt 11f + PLD( pld [r1, #12] ) sub r2, r2, #12 -9: mov r3, r7, pull #8 + PLD( subs r2, r2, #32 ) + PLD( blt 10f ) + PLD( pld [r1, #28] ) +9: PLD( pld [r1, #44] ) +10: mov r3, r7, pull #8 ldmia r1!, {r4 - r7} + subs r2, r2, #16 orr r3, r3, r4, push #24 mov r4, r4, pull #8 orr r4, r4, r5, push #24 @@ -109,24 +128,32 @@ mov r6, r6, pull #8 orr r6, r6, r7, push #24 stmia r0!, {r3 - r6} - subs r2, r2, #16 bge 9b + PLD( cmn r2, #32 ) + PLD( bge 10b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 100f -10: mov r3, r7, pull #8 + blt 12f +11: mov r3, r7, pull #8 ldr r7, [r1], #4 subs r2, r2, #4 orr r3, r3, r7, push #24 str r3, [r0], #4 - bge 10b -100: sub r1, r1, #3 + bge 11b +12: sub r1, r1, #3 b 6b -11: cmp r2, #12 - blt 13f /* */ +13: cmp r2, #12 + blt 16f + PLD( pld [r1, #12] ) sub r2, r2, #12 -12: mov r3, r7, pull #16 + PLD( subs r2, r2, #32 ) + PLD( blt 15f ) + PLD( pld [r1, #28] ) +14: PLD( pld [r1, #44] ) +15: mov r3, r7, pull #16 ldmia r1!, {r4 - r7} + subs r2, r2, #16 orr r3, r3, r4, push #16 mov r4, r4, pull #16 orr r4, r4, r5, push #16 @@ -135,24 +162,32 @@ mov r6, r6, pull #16 orr r6, r6, r7, push #16 stmia r0!, {r3 - r6} - subs r2, r2, #16 - bge 12b + bge 14b + PLD( cmn r2, #32 ) + PLD( bge 15b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 14f -13: mov r3, r7, pull #16 + blt 17f +16: mov r3, r7, pull #16 ldr r7, [r1], #4 subs r2, r2, #4 orr r3, r3, r7, push #16 str r3, [r0], #4 - bge 13b -14: sub r1, r1, #2 + bge 16b +17: sub r1, r1, #2 b 6b -15: cmp r2, #12 - blt 17f +18: cmp r2, #12 + blt 21f + PLD( pld [r1, #12] ) sub r2, r2, #12 -16: mov r3, r7, pull #24 + PLD( subs r2, r2, #32 ) + PLD( blt 20f ) + PLD( pld [r1, #28] ) +19: PLD( pld [r1, #44] ) +20: mov r3, r7, pull #24 ldmia r1!, {r4 - r7} + subs r2, r2, #16 orr r3, r3, r4, push #8 mov r4, r4, pull #24 orr r4, r4, r5, push #8 @@ -161,55 +196,72 @@ mov r6, r6, pull #24 orr r6, r6, r7, push #8 stmia r0!, {r3 - r6} - subs r2, r2, #16 - bge 16b + bge 19b + PLD( cmn r2, #32 ) + PLD( bge 20b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 18f -17: mov r3, r7, pull #24 + blt 22f +21: mov r3, r7, pull #24 ldr r7, [r1], #4 subs r2, r2, #4 orr r3, r3, r7, push #8 str r3, [r0], #4 - bge 17b -18: sub r1, r1, #1 + bge 21b +22: sub r1, r1, #1 b 6b -19: add r1, r1, r2 +23: add r1, r1, r2 add r0, r0, r2 subs r2, r2, #4 - blt 24f + blt 29f + PLD( pld [r1, #-4] ) ands ip, r0, #3 - bne 25f + bne 30f ands ip, r1, #3 - bne 26f + bne 31f -20: subs r2, r2, #8 - blt 23f - subs r2, r2, #0x14 - blt 22f -21: ldmdb r1!, {r3 - r9, ip} - stmdb r0!, {r3 - r9, ip} +24: subs r2, r2, #8 + blt 28f + subs r2, r2, #20 + blt 27f + PLD( pld [r1, #-32] ) + PLD( subs r2, r2, #64 ) + PLD( blt 26f ) +25: PLD( pld [r1, #-64] ) + PLD( pld [r1, #-96] ) + ldmdb r1!, {r3 - r9, ip} subs r2, r2, #32 - bge 21b -22: cmn r2, #16 + stmgedb r0!, {r3 - r9, ip} + ldmgedb r1!, {r3 - r9, ip} + subges r2, r2, #32 + stmdb r0!, {r3 - r9, ip} + bge 25b +26: PLD( ldmdb r1!, {r3 - r9, ip} ) + PLD( adds r2, r2, #32 ) + PLD( stmgedb r0!, {r3 - r9, ip} ) + PLD( ldmgedb r1!, {r3 - r9, ip} ) + PLD( subges r2, r2, #32 ) + PLD( stmdb r0!, {r3 - r9, ip} ) +27: cmn r2, #16 ldmgedb r1!, {r3 - r6} - stmgedb r0!, {r3 - r6} subge r2, r2, #16 + stmgedb r0!, {r3 - r6} adds r2, r2, #20 ldmgedb r1!, {r3 - r5} - stmgedb r0!, {r3 - r5} subge r2, r2, #12 -23: adds r2, r2, #8 - blt 24f + stmgedb r0!, {r3 - r5} +28: adds r2, r2, #8 + blt 29f subs r2, r2, #4 ldrlt r3, [r1, #-4]! ldmgedb r1!, {r4, r5} + subge r2, r2, #4 strlt r3, [r0, #-4]! stmgedb r0!, {r4, r5} - subge r2, r2, #4 -24: adds r2, r2, #4 +29: adds r2, r2, #4 EXITEQ cmp r2, #2 ldrb r3, [r1, #-1]! @@ -220,7 +272,7 @@ strgtb r5, [r0, #-1]! EXIT -25: cmp ip, #2 +30: cmp ip, #2 ldrb r3, [r1, #-1]! ldrgeb r4, [r1, #-1]! ldrgtb r5, [r1, #-1]! @@ -228,20 +280,26 @@ strgeb r4, [r0, #-1]! strgtb r5, [r0, #-1]! subs r2, r2, ip - blt 24b + blt 29b ands ip, r1, #3 - beq 20b + beq 24b -26: bic r1, r1, #3 +31: bic r1, r1, #3 ldr r3, [r1], #0 cmp ip, #2 - blt 34f - beq 30f + blt 41f + beq 36f cmp r2, #12 - blt 28f + blt 34f + PLD( pld [r1, #-16] ) sub r2, r2, #12 -27: mov r7, r3, push #8 + PLD( subs r2, r2, #32 ) + PLD( blt 33f ) + PLD( pld [r1, #-32] ) +32: PLD( pld [r1, #-48] ) +33: mov r7, r3, push #8 ldmdb r1!, {r3, r4, r5, r6} + subs r2, r2, #16 orr r7, r7, r6, pull #24 mov r6, r6, push #8 orr r6, r6, r5, pull #24 @@ -250,24 +308,32 @@ mov r4, r4, push #8 orr r4, r4, r3, pull #24 stmdb r0!, {r4, r5, r6, r7} - subs r2, r2, #16 - bge 27b + bge 32b + PLD( cmn r2, #32 ) + PLD( bge 33b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 29f -28: mov ip, r3, push #8 + blt 35f +34: mov ip, r3, push #8 ldr r3, [r1, #-4]! subs r2, r2, #4 orr ip, ip, r3, pull #24 str ip, [r0, #-4]! - bge 28b -29: add r1, r1, #3 - b 24b - -30: cmp r2, #12 - blt 32f + bge 34b +35: add r1, r1, #3 + b 29b + +36: cmp r2, #12 + blt 39f + PLD( pld [r1, #-16] ) sub r2, r2, #12 -31: mov r7, r3, push #16 + PLD( subs r2, r2, #32 ) + PLD( blt 38f ) + PLD( pld [r1, #-32] ) +37: PLD( pld [r1, #-48] ) +38: mov r7, r3, push #16 ldmdb r1!, {r3, r4, r5, r6} + subs r2, r2, #16 orr r7, r7, r6, pull #16 mov r6, r6, push #16 orr r6, r6, r5, pull #16 @@ -276,24 +342,32 @@ mov r4, r4, push #16 orr r4, r4, r3, pull #16 stmdb r0!, {r4, r5, r6, r7} - subs r2, r2, #16 - bge 31b + bge 37b + PLD( cmn r2, #32 ) + PLD( bge 38b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 33f -32: mov ip, r3, push #16 + blt 40f +39: mov ip, r3, push #16 ldr r3, [r1, #-4]! subs r2, r2, #4 orr ip, ip, r3, pull #16 str ip, [r0, #-4]! - bge 32b -33: add r1, r1, #2 - b 24b - -34: cmp r2, #12 - blt 36f + bge 39b +40: add r1, r1, #2 + b 29b + +41: cmp r2, #12 + blt 44f + PLD( pld [r1, #-16] ) sub r2, r2, #12 -35: mov r7, r3, push #24 + PLD( subs r2, r2, #32 ) + PLD( blt 43f ) + PLD( pld [r1, #-32] ) +42: PLD( pld [r1, #-48] ) +43: mov r7, r3, push #24 ldmdb r1!, {r3, r4, r5, r6} + subs r2, r2, #16 orr r7, r7, r6, pull #8 mov r6, r6, push #24 orr r6, r6, r5, pull #8 @@ -302,17 +376,18 @@ mov r4, r4, push #24 orr r4, r4, r3, pull #8 stmdb r0!, {r4, r5, r6, r7} - subs r2, r2, #16 - bge 35b + bge 42b + PLD( cmn r2, #32 ) + PLD( bge 43b ) + PLD( add r2, r2, #32 ) adds r2, r2, #12 - blt 37f -36: mov ip, r3, push #24 + blt 45f +44: mov ip, r3, push #24 ldr r3, [r1, #-4]! subs r2, r2, #4 orr ip, ip, r3, pull #8 str ip, [r0, #-4]! - bge 36b -37: add r1, r1, #1 - b 24b + bge 44b +45: add r1, r1, #1 + b 29b - .align diff -Nru a/arch/arm/lib/uaccess-armo.S b/arch/arm/lib/uaccess-armo.S --- a/arch/arm/lib/uaccess-armo.S Thu Apr 17 19:22:47 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,231 +0,0 @@ -/* - * linux/arch/arm/lib/uaccess-armo.S - * - * Copyright (C) 1998 Russell King - * - * Note! Some code fragments found in here have a special calling - * convention - they are not APCS compliant! - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include - - .text - - .globl uaccess_user -uaccess_user: - .word uaccess_user_put_byte - .word uaccess_user_get_byte - .word uaccess_user_put_half - .word uaccess_user_get_half - .word uaccess_user_put_word - .word uaccess_user_get_word - .word __arch_copy_from_user - .word __arch_copy_to_user - .word __arch_clear_user - .word __arch_strncpy_from_user - .word __arch_strnlen_user - - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_user_put_byte: - stmfd sp!, {lr} -USER( strbt r0, [r1]) - ldmfd sp!, {pc}^ - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_user_put_half: - stmfd sp!, {lr} -USER( strbt r0, [r1], #1) - mov r0, r0, lsr #8 -USER( strbt r0, [r1]) - ldmfd sp!, {pc}^ - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_user_put_word: - stmfd sp!, {lr} -USER( strt r0, [r1]) - ldmfd sp!, {pc}^ - -9001: mov r2, #-EFAULT - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_user_get_byte: - stmfd sp!, {lr} -USER( ldrbt r0, [r0]) - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_user_get_half: - stmfd sp!, {lr} -USER( ldrt r0, [r0]) - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_user_get_word: - stmfd sp!, {lr} -USER( ldrt r0, [r0]) - ldmfd sp!, {pc}^ - -9001: mov r1, #-EFAULT - ldmfd sp!, {pc}^ - - - - .globl uaccess_kernel -uaccess_kernel: - .word uaccess_kernel_put_byte - .word uaccess_kernel_get_byte - .word uaccess_kernel_put_half - .word uaccess_kernel_get_half - .word uaccess_kernel_put_word - .word uaccess_kernel_get_word - .word uaccess_kernel_copy - .word uaccess_kernel_copy - .word uaccess_kernel_clear - .word uaccess_kernel_strncpy_from - .word uaccess_kernel_strnlen - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_kernel_put_byte: - stmfd sp!, {lr} - strb r0, [r1] - ldmfd sp!, {pc}^ - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_kernel_put_half: - stmfd sp!, {lr} - strb r0, [r1] - mov r0, r0, lsr #8 - strb r0, [r1, #1] - ldmfd sp!, {pc}^ - -@ In : r0 = x, r1 = addr, r2 = error -@ Out: r2 = error -uaccess_kernel_put_word: - stmfd sp!, {lr} - str r0, [r1] - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_kernel_get_byte: - stmfd sp!, {lr} - ldrb r0, [r0] - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_kernel_get_half: - stmfd sp!, {lr} - ldr r0, [r0] - mov r0, r0, lsl #16 - mov r0, r0, lsr #16 - ldmfd sp!, {pc}^ - -@ In : r0 = addr, r1 = error -@ Out: r0 = x, r1 = error -uaccess_kernel_get_word: - stmfd sp!, {lr} - ldr r0, [r0] - ldmfd sp!, {pc}^ - - -/* Prototype: int uaccess_kernel_copy(void *to, const char *from, size_t n) - * Purpose : copy a block to kernel memory from kernel memory - * Params : to - kernel memory - * : from - kernel memory - * : n - number of bytes to copy - * Returns : Number of bytes NOT copied. - */ -uaccess_kernel_copy: - stmfd sp!, {lr} - bl memcpy - mov r0, #0 - ldmfd sp!, {pc}^ - -/* Prototype: int uaccess_kernel_clear(void *addr, size_t sz) - * Purpose : clear some kernel memory - * Params : addr - kernel memory address to clear - * : sz - number of bytes to clear - * Returns : number of bytes NOT cleared - */ -uaccess_kernel_clear: - stmfd sp!, {lr} - mov r2, #0 - cmp r1, #4 - blt 2f - ands ip, r0, #3 - beq 1f - cmp ip, #1 - strb r2, [r0], #1 - strleb r2, [r0], #1 - strltb r2, [r0], #1 - rsb ip, ip, #4 - sub r1, r1, ip @ 7 6 5 4 3 2 1 -1: subs r1, r1, #8 @ -1 -2 -3 -4 -5 -6 -7 - bmi 2f - str r2, [r0], #4 - str r2, [r0], #4 - b 1b -2: adds r1, r1, #4 @ 3 2 1 0 -1 -2 -3 - strpl r2, [r0], #4 - tst r1, #2 @ 1x 1x 0x 0x 1x 1x 0x - strneb r2, [r0], #1 - strneb r2, [r0], #1 - tst r1, #1 @ x1 x0 x1 x0 x1 x0 x1 - strneb r2, [r0], #1 - mov r0, #0 - ldmfd sp!, {pc}^ - -/* Prototype: size_t uaccess_kernel_strncpy_from(char *dst, char *src, size_t len) - * Purpose : copy a string from kernel memory to kernel memory - * Params : dst - kernel memory destination - * : src - kernel memory source - * : len - maximum length of string - * Returns : number of characters copied - */ -uaccess_kernel_strncpy_from: - stmfd sp!, {lr} - mov ip, r2 -1: subs r2, r2, #1 - bmi 2f - ldrb r3, [r1], #1 - strb r3, [r0], #1 - teq r3, #0 - bne 1b -2: subs r0, ip, r2 - ldmfd sp!, {pc}^ - -/* Prototype: int uaccess_kernel_strlen(char *str, long n) - * Purpose : get length of a string in kernel memory - * Params : str - address of string in kernel memory - * Returns : length of string *including terminator*, - * or zero on exception, or n + 1 if too long - */ -uaccess_kernel_strnlen: - stmfd sp!, {lr} - mov r2, r0 -1: ldrb r1, [r0], #1 - teq r1, #0 - beq 2f - subs r1, r1, #1 - bne 1b - add r0, r0, #1 -2: sub r0, r0, r2 - ldmfd sp!, {pc}^ - diff -Nru a/arch/arm/lib/uaccess.S b/arch/arm/lib/uaccess.S --- a/arch/arm/lib/uaccess.S Thu Apr 17 19:22:43 2003 +++ b/arch/arm/lib/uaccess.S Thu Apr 17 19:22:43 2003 @@ -43,6 +43,8 @@ stmfd sp!, {r2, r4 - r7, lr} cmp r2, #4 blt .c2u_not_enough + PLD( pld [r1, #0] ) + PLD( pld [r0, #0] ) ands ip, r0, #3 bne .c2u_dest_not_aligned .c2u_dest_aligned: @@ -71,13 +73,26 @@ sub r2, r2, ip subs ip, ip, #32 blt .c2u_0rem8lp - -.c2u_0cpy8lp: ldmia r1!, {r3 - r6} + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + PLD( subs ip, ip, #64 ) + PLD( blt .c2u_0cpynopld ) + PLD( pld [r1, #60] ) + PLD( pld [r0, #60] ) + +.c2u_0cpy8lp: + PLD( pld [r1, #92] ) + PLD( pld [r0, #92] ) +.c2u_0cpynopld: ldmia r1!, {r3 - r6} stmia r0!, {r3 - r6} @ Shouldnt fault ldmia r1!, {r3 - r6} - stmia r0!, {r3 - r6} @ Shouldnt fault subs ip, ip, #32 + stmia r0!, {r3 - r6} @ Shouldnt fault bpl .c2u_0cpy8lp + PLD( cmn ip, #64 ) + PLD( bge .c2u_0cpynopld ) + PLD( add ip, ip, #64 ) + .c2u_0rem8lp: cmn ip, #16 ldmgeia r1!, {r3 - r6} stmgeia r0!, {r3 - r6} @ Shouldnt fault @@ -128,9 +143,19 @@ sub r2, r2, ip subs ip, ip, #16 blt .c2u_1rem8lp - -.c2u_1cpy8lp: mov r3, r7, pull #8 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .c2u_1cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.c2u_1cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.c2u_1cpynopld: mov r3, r7, pull #8 ldmia r1!, {r4 - r7} + subs ip, ip, #16 orr r3, r3, r4, push #24 mov r4, r4, pull #8 orr r4, r4, r5, push #24 @@ -139,8 +164,11 @@ mov r6, r6, pull #8 orr r6, r6, r7, push #24 stmia r0!, {r3 - r6} @ Shouldnt fault - subs ip, ip, #16 bpl .c2u_1cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .c2u_1cpynopld ) + PLD( add ip, ip, #32 ) + .c2u_1rem8lp: tst ip, #8 movne r3, r7, pull #8 ldmneia r1!, {r4, r7} @@ -182,9 +210,19 @@ sub r2, r2, ip subs ip, ip, #16 blt .c2u_2rem8lp - -.c2u_2cpy8lp: mov r3, r7, pull #16 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .c2u_2cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.c2u_2cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.c2u_2cpynopld: mov r3, r7, pull #16 ldmia r1!, {r4 - r7} + subs ip, ip, #16 orr r3, r3, r4, push #16 mov r4, r4, pull #16 orr r4, r4, r5, push #16 @@ -193,8 +231,11 @@ mov r6, r6, pull #16 orr r6, r6, r7, push #16 stmia r0!, {r3 - r6} @ Shouldnt fault - subs ip, ip, #16 bpl .c2u_2cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .c2u_2cpynopld ) + PLD( add ip, ip, #32 ) + .c2u_2rem8lp: tst ip, #8 movne r3, r7, pull #16 ldmneia r1!, {r4, r7} @@ -236,9 +277,19 @@ sub r2, r2, ip subs ip, ip, #16 blt .c2u_3rem8lp - -.c2u_3cpy8lp: mov r3, r7, pull #24 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .c2u_3cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.c2u_3cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.c2u_3cpynopld: mov r3, r7, pull #24 ldmia r1!, {r4 - r7} + subs ip, ip, #16 orr r3, r3, r4, push #8 mov r4, r4, pull #24 orr r4, r4, r5, push #8 @@ -247,8 +298,11 @@ mov r6, r6, pull #24 orr r6, r6, r7, push #8 stmia r0!, {r3 - r6} @ Shouldnt fault - subs ip, ip, #16 bpl .c2u_3cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .c2u_3cpynopld ) + PLD( add ip, ip, #32 ) + .c2u_3rem8lp: tst ip, #8 movne r3, r7, pull #24 ldmneia r1!, {r4, r7} @@ -302,6 +356,8 @@ stmfd sp!, {r0, r2, r4 - r7, lr} cmp r2, #4 blt .cfu_not_enough + PLD( pld [r1, #0] ) + PLD( pld [r0, #0] ) ands ip, r0, #3 bne .cfu_dest_not_aligned .cfu_dest_aligned: @@ -329,13 +385,26 @@ sub r2, r2, ip subs ip, ip, #32 blt .cfu_0rem8lp - -.cfu_0cpy8lp: ldmia r1!, {r3 - r6} @ Shouldnt fault + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + PLD( subs ip, ip, #64 ) + PLD( blt .cfu_0cpynopld ) + PLD( pld [r1, #60] ) + PLD( pld [r0, #60] ) + +.cfu_0cpy8lp: + PLD( pld [r1, #92] ) + PLD( pld [r0, #92] ) +.cfu_0cpynopld: ldmia r1!, {r3 - r6} @ Shouldnt fault stmia r0!, {r3 - r6} ldmia r1!, {r3 - r6} @ Shouldnt fault - stmia r0!, {r3 - r6} subs ip, ip, #32 + stmia r0!, {r3 - r6} bpl .cfu_0cpy8lp + PLD( cmn ip, #64 ) + PLD( bge .cfu_0cpynopld ) + PLD( add ip, ip, #64 ) + .cfu_0rem8lp: cmn ip, #16 ldmgeia r1!, {r3 - r6} @ Shouldnt fault stmgeia r0!, {r3 - r6} @@ -387,9 +456,19 @@ sub r2, r2, ip subs ip, ip, #16 blt .cfu_1rem8lp - -.cfu_1cpy8lp: mov r3, r7, pull #8 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .cfu_1cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.cfu_1cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.cfu_1cpynopld: mov r3, r7, pull #8 ldmia r1!, {r4 - r7} @ Shouldnt fault + subs ip, ip, #16 orr r3, r3, r4, push #24 mov r4, r4, pull #8 orr r4, r4, r5, push #24 @@ -398,8 +477,11 @@ mov r6, r6, pull #8 orr r6, r6, r7, push #24 stmia r0!, {r3 - r6} - subs ip, ip, #16 bpl .cfu_1cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .cfu_1cpynopld ) + PLD( add ip, ip, #32 ) + .cfu_1rem8lp: tst ip, #8 movne r3, r7, pull #8 ldmneia r1!, {r4, r7} @ Shouldnt fault @@ -441,9 +523,19 @@ sub r2, r2, ip subs ip, ip, #16 blt .cfu_2rem8lp - -.cfu_2cpy8lp: mov r3, r7, pull #16 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .cfu_2cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.cfu_2cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.cfu_2cpynopld: mov r3, r7, pull #16 ldmia r1!, {r4 - r7} @ Shouldnt fault + subs ip, ip, #16 orr r3, r3, r4, push #16 mov r4, r4, pull #16 orr r4, r4, r5, push #16 @@ -452,8 +544,11 @@ mov r6, r6, pull #16 orr r6, r6, r7, push #16 stmia r0!, {r3 - r6} - subs ip, ip, #16 bpl .cfu_2cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .cfu_2cpynopld ) + PLD( add ip, ip, #32 ) + .cfu_2rem8lp: tst ip, #8 movne r3, r7, pull #16 ldmneia r1!, {r4, r7} @ Shouldnt fault @@ -495,8 +590,17 @@ sub r2, r2, ip subs ip, ip, #16 blt .cfu_3rem8lp - -.cfu_3cpy8lp: mov r3, r7, pull #24 + PLD( pld [r1, #12] ) + PLD( pld [r0, #12] ) + PLD( subs ip, ip, #32 ) + PLD( blt .cfu_3cpynopld ) + PLD( pld [r1, #28] ) + PLD( pld [r0, #28] ) + +.cfu_3cpy8lp: + PLD( pld [r1, #44] ) + PLD( pld [r0, #44] ) +.cfu_3cpynopld: mov r3, r7, pull #24 ldmia r1!, {r4 - r7} @ Shouldnt fault orr r3, r3, r4, push #8 mov r4, r4, pull #24 @@ -508,6 +612,10 @@ stmia r0!, {r3 - r6} subs ip, ip, #16 bpl .cfu_3cpy8lp + PLD( cmn ip, #32 ) + PLD( bge .cfu_3cpynopld ) + PLD( add ip, ip, #32 ) + .cfu_3rem8lp: tst ip, #8 movne r3, r7, pull #24 ldmneia r1!, {r4, r7} @ Shouldnt fault diff -Nru a/arch/arm/mach-iop310/Kconfig b/arch/arm/mach-iop310/Kconfig --- a/arch/arm/mach-iop310/Kconfig Thu Apr 17 19:22:49 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,30 +0,0 @@ - -menu "IOP310 Implementation Options" - -config ARCH_IQ80310 - bool "IQ80310" - depends on ARCH_IOP310 - help - Say Y here if you want to run your kernel on the Intel IQ80310 - evaluation kit for the IOP310 chipset. - -comment "IOP310 Chipset Features" - -config IOP310_AAU - bool "Support Intel 80312 Application Accelerator Unit (EXPERIMENTAL)" - depends on ARCH_IOP310 && EXPERIMENTAL - -config IOP310_DMA - bool "Support Intel 80312 DMA (EXPERIMENTAL)" - depends on ARCH_IOP310 && EXPERIMENTAL - -config IOP310_MU - bool "Support Intel 80312 Messaging Unit (EXPERIMENTAL)" - depends on ARCH_IOP310 && EXPERIMENTAL - -config IOP310_PMON - bool "Support Intel 80312 Performance Monitor (EXPERIMENTAL)" - depends on ARCH_IOP310 && EXPERIMENTAL - -endmenu - diff -Nru a/arch/arm/mach-iop310/Makefile b/arch/arm/mach-iop310/Makefile --- a/arch/arm/mach-iop310/Makefile Thu Apr 17 19:22:49 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,22 +0,0 @@ -# -# Makefile for the linux kernel. -# - -# Object file lists. - -obj-y := arch.o mm.o xs80200-irq.o iop310-irq.o \ - iop310-pci.o -obj-m := -obj-n := -obj- := - -obj-$(CONFIG_ARCH_IQ80310) += iq80310-pci.o iq80310-irq.o - -ifneq ($(CONFIG_XSCALE_PMU_TIMER),y) -obj-y += iq80310-time.o -endif - -obj-$(CONFIG_IOP310_AAU) += aau.o -obj-$(CONFIG_IOP310_DMA) += dma.o -obj-$(CONFIG_IOP310_MU) += message.o -obj-$(CONFIG_IOP310_PMON) += pmon.o diff -Nru a/arch/arm/mach-iop310/arch.c b/arch/arm/mach-iop310/arch.c --- a/arch/arm/mach-iop310/arch.c Thu Apr 17 19:22:46 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,48 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/arch.c - * - * Author: Nicolas Pitre - * Copyright (C) 2001 MontaVista Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -#ifdef CONFIG_ARCH_IQ80310 -extern void iq80310_map_io(void); -extern void iq80310_init_irq(void); - -static void __init -fixup_iq80310(struct machine_desc *desc, struct tag *tags, - char **cmdline, struct meminfo *mi) -{ - system_rev = (*(volatile unsigned int*)0xfe830000) & 0x0f; - - if (system_rev) - system_rev = 0xF; -} - -MACHINE_START(IQ80310, "Cyclone IQ80310") - MAINTAINER("MontaVista Software Inc.") - BOOT_MEM(0xa0000000, 0xfe000000, 0xfe000000) - FIXUP(fixup_iq80310) - MAPIO(iq80310_map_io) - INITIRQ(iq80310_init_irq) -MACHINE_END - -#else -#error No machine descriptor defined for this IOP310 implementation -#endif diff -Nru a/arch/arm/mach-iop310/iop310-irq.c b/arch/arm/mach-iop310/iop310-irq.c --- a/arch/arm/mach-iop310/iop310-irq.c Thu Apr 17 19:22:49 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,113 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/iop310-irq.c - * - * Generic IOP310 IRQ handling functionality - * - * Author: Nicolas Pitre - * Copyright: (C) 2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * Added IOP310 chipset and IQ80310 board demuxing, masking code. - DS - * - */ -#include -#include -#include - -#include -#include -#include - -#include - -extern void xs80200_irq_mask(unsigned int); -extern void xs80200_irq_unmask(unsigned int); -extern void xs80200_init_irq(void); - -extern void do_IRQ(int, struct pt_regs *); - -static u32 iop310_mask /* = 0 */; - -static void iop310_irq_mask (unsigned int irq) -{ - iop310_mask ++; - - /* - * No mask bits on the 80312, so we have to - * mask everything from the outside! - */ - if (iop310_mask == 1) { - disable_irq(IRQ_XS80200_EXTIRQ); - irq_desc[IRQ_XS80200_EXTIRQ].chip->mask(IRQ_XS80200_EXTIRQ); - } -} - -static void iop310_irq_unmask (unsigned int irq) -{ - if (iop310_mask) - iop310_mask --; - - /* - * Check if all 80312 sources are unmasked now - */ - if (iop310_mask == 0) - enable_irq(IRQ_XS80200_EXTIRQ); -} - -struct irqchip ext_chip = { - .ack = iop310_irq_mask, - .mask = iop310_irq_mask, - .unmask = iop310_irq_unmask, -}; - -void -iop310_irq_demux(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) -{ - u32 fiq1isr = *((volatile u32*)IOP310_FIQ1ISR); - u32 fiq2isr = *((volatile u32*)IOP310_FIQ2ISR); - struct irqdesc *d; - unsigned int irqno = 0; - - if(fiq1isr) - { - if(fiq1isr & 0x1) - irqno = IRQ_IOP310_DMA0; - if(fiq1isr & 0x2) - irqno = IRQ_IOP310_DMA1; - if(fiq1isr & 0x4) - irqno = IRQ_IOP310_DMA2; - if(fiq1isr & 0x10) - irqno = IRQ_IOP310_PMON; - if(fiq1isr & 0x20) - irqno = IRQ_IOP310_AAU; - } - else - { - if(fiq2isr & 0x2) - irqno = IRQ_IOP310_I2C; - if(fiq2isr & 0x4) - irqno = IRQ_IOP310_MU; - } - - if (irqno) { - d = irq_desc + irqno; - d->handle(irqno, d, regs); - } -} - -void __init iop310_init_irq(void) -{ - unsigned int i; - - for(i = IOP310_IRQ_OFS; i < NR_IOP310_IRQS; i++) - { - set_irq_chip(i, &ext_chip); - set_irq_handler(i, do_level_IRQ); - set_irq_flags(i, IRQF_VALID | IRQF_PROBE); - } - - xs80200_init_irq(); -} diff -Nru a/arch/arm/mach-iop310/iop310-pci.c b/arch/arm/mach-iop310/iop310-pci.c --- a/arch/arm/mach-iop310/iop310-pci.c Thu Apr 17 19:22:45 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,434 +0,0 @@ -/* - * arch/arm/mach-iop310/iop310-pci.c - * - * PCI support for the Intel IOP310 chipset - * - * Matt Porter - * - * Copyright (C) 2001 MontaVista Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -#include - -/* - * *** Special note - why the IOP310 should NOT be used *** - * - * The PCI ATU is a brain dead implementation, only allowing 32-bit - * accesses to PCI configuration space. This is especially brain - * dead for writes to this space. A simple for-instance: - * - * You want to modify the command register *without* corrupting the - * status register. - * - * To perform this, you need to read *32* bits of data from offset 4, - * mask off the low 16, replace them with the new data, and write *32* - * bits back. - * - * Writing the status register at offset 6 with status bits set *clears* - * the status. - * - * Hello? Could we have a *SANE* implementation of a PCI ATU some day - * *PLEASE*? - */ -#undef DEBUG -#ifdef DEBUG -#define DBG(x...) printk(x) -#else -#define DBG(x...) do { } while (0) -#endif - -/* - * Calculate the address, etc from the bus, devfn and register - * offset. Note that we have two root buses, so we need some - * method to determine whether we need config type 0 or 1 cycles. - * We use a root bus number in our bus->sysdata structure for this. - */ -static u32 iop310_cfg_address(struct pci_bus *bus, int devfn, int where) -{ - struct pci_sys_data *sys = bus->sysdata; - u32 addr; - - if (sys->busnr == bus->number) - addr = 1 << (PCI_SLOT(devfn) + 16); - else - addr = bus->number << 16 | PCI_SLOT(devfn) << 11 | 1; - - addr |= PCI_FUNC(devfn) << 8 | (where & ~3); - - return addr; -} - -/* - * Primary PCI interface support. - */ -static int iop310_pri_pci_status(void) -{ - unsigned int status; - int ret = 0; - - status = *IOP310_PATUSR; - if (status & 0xf900) { - *IOP310_PATUSR = status & 0xf900; - ret = 1; - } - status = *IOP310_PATUISR; - if (status & 0x0000018f) { - *IOP310_PATUISR = status & 0x0000018f; - ret = 1; - } - status = *IOP310_PSR; - if (status & 0xf900) { - *IOP310_PSR = status & 0xf900; - ret = 1; - } - status = *IOP310_PBISR; - if (status & 0x003f) { - *IOP310_PBISR = status & 0x003f; - ret = 1; - } - return ret; -} - -/* - * Simply write the address register and read the configuration - * data. Note that the 4 nop's ensure that we are able to handle - * a delayed abort (in theory.) - */ -static inline u32 iop310_pri_read(unsigned long addr) -{ - u32 val; - - __asm__ __volatile__( - "str %1, [%2]\n\t" - "ldr %0, [%3]\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - : "=r" (val) - : "r" (addr), "r" (IOP310_POCCAR), "r" (IOP310_POCCDR)); - - return val; -} - -static int -iop310_pri_read_config(struct pci_bus *bus, unsigned int devfn, int where, - int size, u32 *value) -{ - unsigned long addr = iop310_cfg_address(bus, devfn, where); - u32 val = iop310_pri_read(addr) >> ((where & 3) * 8); - - if (iop310_pri_pci_status()) - val = 0xffffffff; - - *value = val; - - return PCIBIOS_SUCCESSFUL; -} - -static int -iop310_pri_write_config(struct pci_bus *bus, unsigned int devfn, int where, - int size, u32 value) -{ - unsigned long addr = iop310_cfg_address(bus, devfn, where); - u32 val; - - if (size != 4) { - val = iop310_pri_read(addr); - if (!iop310_pri_pci_status() == 0) - return PCIBIOS_SUCCESSFUL; - - where = (where & 3) * 8; - - if (size == 1) - val &= ~(0xff << where); - else - val &= ~(0xffff << where); - - *IOP310_POCCDR = val | value << where; - } else { - asm volatile( - "str %1, [%2]\n\t" - "str %0, [%3]\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - : - : "r" (value), "r" (addr), - "r" (IOP310_POCCAR), "r" (IOP310_POCCDR)); - } - - return PCIBIOS_SUCCESSFUL; -} - -static struct pci_ops iop310_primary_ops = { - .read = iop310_pri_read_config, - .write = iop310_pri_write_config, -}; - -/* - * Secondary PCI interface support. - */ -static int iop310_sec_pci_status(void) -{ - unsigned int usr, uisr; - int ret = 0; - - usr = *IOP310_SATUSR; - uisr = *IOP310_SATUISR; - if (usr & 0xf900) { - *IOP310_SATUSR = usr & 0xf900; - ret = 1; - } - if (uisr & 0x0000069f) { - *IOP310_SATUISR = uisr & 0x0000069f; - ret = 1; - } - if (ret) - DBG("ERROR (%08x %08x)", usr, uisr); - return ret; -} - -/* - * Simply write the address register and read the configuration - * data. Note that the 4 nop's ensure that we are able to handle - * a delayed abort (in theory.) - */ -static inline u32 iop310_sec_read(unsigned long addr) -{ - u32 val; - - __asm__ __volatile__( - "str %1, [%2]\n\t" - "ldr %0, [%3]\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - : "=r" (val) - : "r" (addr), "r" (IOP310_SOCCAR), "r" (IOP310_SOCCDR)); - - return val; -} - -static int -iop310_sec_read_config(struct pci_bus *bus, unsigned int devfn, int where, - int size, u32 *value) -{ - unsigned long addr = iop310_cfg_address(bus, devfn, where); - u32 val = iop310_sec_read(addr) >> ((where & 3) * 8); - - if (iop310_sec_pci_status()) - val = 0xffffffff; - - *value = val; - - return PCIBIOS_SUCCESSFUL; -} - -static int -iop310_sec_write_config(struct pci_bus *bus, unsigned int devfn, int where, - int size, u32 value) -{ - unsigned long addr = iop310_cfg_address(bus, devfn, where); - u32 val; - - if (size != 4) { - val = iop310_sec_read(addr); - - if (!iop310_sec_pci_status() == 0) - return PCIBIOS_SUCCESSFUL; - - where = (where & 3) * 8; - - if (size == 1) - val &= ~(0xff << where); - else - val &= ~(0xffff << where); - - *IOP310_SOCCDR = val | value << where; - } else { - asm volatile( - "str %1, [%2]\n\t" - "str %0, [%3]\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - "nop\n\t" - : - : "r" (value), "r" (addr), - "r" (IOP310_SOCCAR), "r" (IOP310_SOCCDR)); - } - - return PCIBIOS_SUCCESSFUL; -} - -static struct pci_ops iop310_secondary_ops = { - .read = iop310_sec_read_config, - .write = iop310_sec_write_config, -}; - -/* - * When a PCI device does not exist during config cycles, the 80200 gets - * an external abort instead of returning 0xffffffff. If it was an - * imprecise abort, we need to correct the return address to point after - * the instruction. Also note that the Xscale manual says: - * - * "if a stall-until-complete LD or ST instruction triggers an - * imprecise fault, then that fault will be seen by the program - * within 3 instructions." - * - * This does not appear to be the case. With 8 NOPs after the load, we - * see the imprecise abort occurring on the STM of iop310_sec_pci_status() - * which is about 10 instructions away. - * - * Always trust reality! - */ -static int -iop310_pci_abort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) -{ - DBG("PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx\n", - addr, fsr, regs->ARM_pc, regs->ARM_lr); - - /* - * If it was an imprecise abort, then we need to correct the - * return address to be _after_ the instruction. - */ - if (fsr & (1 << 10)) - regs->ARM_pc += 4; - - return 0; -} - -/* - * Scan an IOP310 PCI bus. sys->bus defines which bus we scan. - */ -struct pci_bus *iop310_scan_bus(int nr, struct pci_sys_data *sys) -{ - struct pci_ops *ops; - - if (nr) - ops = &iop310_secondary_ops; - else - ops = &iop310_primary_ops; - - return pci_scan_bus(sys->busnr, ops, sys); -} - -/* - * Setup the system data for controller 'nr'. Return 0 if none found, - * 1 if found, or negative error. - * - * We can alter: - * io_offset - offset between IO resources and PCI bus BARs - * mem_offset - offset between mem resources and PCI bus BARs - * resource[0] - parent IO resource - * resource[1] - parent non-prefetchable memory resource - * resource[2] - parent prefetchable memory resource - * swizzle - bridge swizzling function - * map_irq - irq mapping function - * - * Note that 'io_offset' and 'mem_offset' are left as zero since - * the IOP310 doesn't attempt to perform any address translation - * on accesses from the host to the bus. - */ -int iop310_setup(int nr, struct pci_sys_data *sys) -{ - struct resource *res; - - if (nr >= 2) - return 0; - - res = kmalloc(sizeof(struct resource) * 2, GFP_KERNEL); - if (!res) - panic("PCI: unable to alloc resources"); - - memset(res, 0, sizeof(struct resource) * 2); - - switch (nr) { - case 0: - res[0].start = IOP310_PCIPRI_LOWER_IO + 0x6e000000; - res[0].end = IOP310_PCIPRI_LOWER_IO + 0x6e00ffff; - res[0].name = "PCI IO Primary"; - res[0].flags = IORESOURCE_IO; - - res[1].start = IOP310_PCIPRI_LOWER_MEM; - res[1].end = IOP310_PCIPRI_LOWER_MEM + IOP310_PCI_WINDOW_SIZE; - res[1].name = "PCI Memory Primary"; - res[1].flags = IORESOURCE_MEM; - break; - - case 1: - res[0].start = IOP310_PCISEC_LOWER_IO + 0x6e000000; - res[0].end = IOP310_PCISEC_LOWER_IO + 0x6e00ffff; - res[0].name = "PCI IO Secondary"; - res[0].flags = IORESOURCE_IO; - - res[1].start = IOP310_PCISEC_LOWER_MEM; - res[1].end = IOP310_PCISEC_LOWER_MEM + IOP310_PCI_WINDOW_SIZE; - res[1].name = "PCI Memory Secondary"; - res[1].flags = IORESOURCE_MEM; - break; - } - - request_resource(&ioport_resource, &res[0]); - request_resource(&iomem_resource, &res[1]); - - sys->resource[0] = &res[0]; - sys->resource[1] = &res[1]; - sys->resource[2] = NULL; - sys->io_offset = 0x6e000000; - - return 1; -} - -void iop310_init(void) -{ - DBG("PCI: Intel 80312 PCI-to-PCI init code.\n"); - DBG(" ATU secondary: ATUCR =0x%08x\n", *IOP310_ATUCR); - DBG(" ATU secondary: SOMWVR=0x%08x SOIOWVR=0x%08x\n", - *IOP310_SOMWVR, *IOP310_SOIOWVR); - DBG(" ATU secondary: SIABAR=0x%08x SIALR =0x%08x SIATVR=%08x\n", - *IOP310_SIABAR, *IOP310_SIALR, *IOP310_SIATVR); - DBG(" ATU primary: POMWVR=0x%08x POIOWVR=0x%08x\n", - *IOP310_POMWVR, *IOP310_POIOWVR); - DBG(" ATU primary: PIABAR=0x%08x PIALR =0x%08x PIATVR=%08x\n", - *IOP310_PIABAR, *IOP310_PIALR, *IOP310_PIATVR); - DBG(" P2P: PCR=0x%04x BCR=0x%04x EBCR=0x%04x\n", - *IOP310_PCR, *IOP310_BCR, *IOP310_EBCR); - - /* - * Windows have to be carefully opened via a nice set of calls - * here or just some direct register fiddling in the board - * specific init when we want transactions to occur between the - * two PCI hoses. - * - * To do this, we will have manage RETRY assertion between the - * firmware and the kernel. This will ensure that the host - * system's enumeration code is held off until we have tweaked - * the interrupt routing and public/private IDSELs. - * - * For now we will simply default to disabling the integrated type - * 81 P2P bridge. - */ - *IOP310_PCR &= 0xfff8; - - hook_fault_code(16+6, iop310_pci_abort, SIGBUS, "imprecise external abort"); -} diff -Nru a/arch/arm/mach-iop310/iq80310-irq.c b/arch/arm/mach-iop310/iq80310-irq.c --- a/arch/arm/mach-iop310/iq80310-irq.c Thu Apr 17 19:22:44 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,141 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/iq80310-irq.c - * - * IRQ hadling/demuxing for IQ80310 board - * - * Author: Nicolas Pitre - * Copyright: (C) 2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - * 2.4.7-rmk1-iop310.1 - * Moved demux from asm to C - DS - * Fixes for various revision boards - DS - */ -#include -#include - -#include -#include -#include -#include - -#include - -extern void iop310_init_irq(void); -extern void iop310_irq_demux(unsigned int, struct irqdesc *, struct pt_regs *); - -static void iq80310_irq_mask(unsigned int irq) -{ - *(volatile char *)IQ80310_INT_MASK |= (1 << (irq - IQ80310_IRQ_OFS)); -} - -static void iq80310_irq_unmask(unsigned int irq) -{ - *(volatile char *)IQ80310_INT_MASK &= ~(1 << (irq - IQ80310_IRQ_OFS)); -} - -static struct irqchip iq80310_irq_chip = { - .ack = iq80310_irq_mask, - .mask = iq80310_irq_mask, - .unmask = iq80310_irq_unmask, -}; - -extern struct irqchip ext_chip; - -static void -iq80310_cpld_irq_handler(unsigned int irq, struct irqdesc *desc, - struct pt_regs *regs) -{ - unsigned int irq_stat = *(volatile u8*)IQ80310_INT_STAT; - unsigned int irq_mask = *(volatile u8*)IQ80310_INT_MASK; - unsigned int i, handled = 0; - struct irqdesc *d; - - desc->chip->ack(irq); - - /* - * Mask out the interrupts which aren't enabled. - */ - irq_stat &= 0x1f & ~irq_mask; - - /* - * Test each IQ80310 CPLD interrupt - */ - for (i = IRQ_IQ80310_TIMER, d = irq_desc + IRQ_IQ80310_TIMER; - irq_stat; i++, d++, irq_stat >>= 1) - if (irq_stat & 1) { - d->handle(i, d, regs); - handled++; - } - - /* - * If running on a board later than REV D.1, we can - * decode the PCI interrupt status. - */ - if (system_rev) { - irq_stat = *((volatile u8*)IQ80310_PCI_INT_STAT) & 7; - - for (i = IRQ_IQ80310_INTA, d = irq_desc + IRQ_IQ80310_INTA; - irq_stat; i++, d++, irq_stat >>= 1) - if (irq_stat & 0x1) { - d->handle(i, d, regs); - handled++; - } - } - - /* - * If on a REV D.1 or lower board, we just assumed INTA - * since PCI is not routed, and it may actually be an - * on-chip interrupt. - * - * Note that we're giving on-chip interrupts slightly - * higher priority than PCI by handling them first. - * - * On boards later than REV D.1, if we didn't read a - * CPLD interrupt, we assume it's from a device on the - * chipset itself. - */ - if (system_rev == 0 || handled == 0) - iop310_irq_demux(irq, desc, regs); - - desc->chip->unmask(irq); -} - -void __init iq80310_init_irq(void) -{ - volatile char *mask = (volatile char *)IQ80310_INT_MASK; - unsigned int i; - - iop310_init_irq(); - - /* - * Setup PIRSR to route PCI interrupts into xs80200 - */ - *IOP310_PIRSR = 0xff; - - /* - * Setup the IRQs in the FE820000/FE860000 registers - */ - for (i = IQ80310_IRQ_OFS; i <= IRQ_IQ80310_INTD; i++) { - set_irq_chip(i, &iq80310_irq_chip); - set_irq_handler(i, do_level_IRQ); - set_irq_flags(i, IRQF_VALID | IRQF_PROBE); - } - - /* - * Setup the PCI IRQs - */ - for (i = IRQ_IQ80310_INTA; i < IRQ_IQ80310_INTC; i++) { - set_irq_chip(i, &ext_chip); - set_irq_handler(i, do_level_IRQ); - set_irq_flags(i, IRQF_VALID); - } - - *mask = 0xff; /* mask all sources */ - - set_irq_chained_handler(IRQ_XS80200_EXTIRQ, - &iq80310_cpld_irq_handler); -} diff -Nru a/arch/arm/mach-iop310/iq80310-pci.c b/arch/arm/mach-iop310/iq80310-pci.c --- a/arch/arm/mach-iop310/iq80310-pci.c Thu Apr 17 19:22:44 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,164 +0,0 @@ -/* - * arch/arm/mach-iop310/iq80310-pci.c - * - * PCI support for the Intel IQ80310 reference board - * - * Matt Porter - * - * Copyright (C) 2001 MontaVista Software, Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include -#include - -#include -#include -#include -#include - -/* - * The following macro is used to lookup irqs in a standard table - * format for those systems that do not already have PCI - * interrupts properly routed. We assume 1 <= pin <= 4 - */ -#define PCI_IRQ_TABLE_LOOKUP(minid,maxid) \ -({ int _ctl_ = -1; \ - unsigned int _idsel = idsel - minid; \ - if (_idsel <= maxid) \ - _ctl_ = pci_irq_table[_idsel][pin-1]; \ - _ctl_; }) - -#define INTA IRQ_IQ80310_INTA -#define INTB IRQ_IQ80310_INTB -#define INTC IRQ_IQ80310_INTC -#define INTD IRQ_IQ80310_INTD - -#define INTE IRQ_IQ80310_I82559 - -typedef u8 irq_table[4]; - -/* - * IRQ tables for primary bus. - * - * On a Rev D.1 and older board, INT A-C are not routed, so we - * just fake it as INTA and than we take care of handling it - * correctly in the IRQ demux routine. - */ -static irq_table pci_pri_d_irq_table[] = { -/* Pin: A B C D */ - { INTA, INTD, INTA, INTA }, /* PCI Slot J3 */ - { INTD, INTA, INTA, INTA }, /* PCI Slot J4 */ -}; - -static irq_table pci_pri_f_irq_table[] = { -/* Pin: A B C D */ - { INTC, INTD, INTA, INTB }, /* PCI Slot J3 */ - { INTD, INTA, INTB, INTC }, /* PCI Slot J4 */ -}; - -static int __init -iq80310_pri_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) -{ - irq_table *pci_irq_table; - - BUG_ON(pin < 1 || pin > 4); - - if (!system_rev) { - pci_irq_table = pci_pri_d_irq_table; - } else { - pci_irq_table = pci_pri_f_irq_table; - } - - return PCI_IRQ_TABLE_LOOKUP(2, 3); -} - -/* - * IRQ tables for secondary bus. - * - * On a Rev D.1 and older board, INT A-C are not routed, so we - * just fake it as INTA and than we take care of handling it - * correctly in the IRQ demux routine. - */ -static irq_table pci_sec_d_irq_table[] = { -/* Pin: A B C D */ - { INTA, INTA, INTA, INTD }, /* PCI Slot J1 */ - { INTA, INTA, INTD, INTA }, /* PCI Slot J5 */ - { INTE, INTE, INTE, INTE }, /* P2P Bridge */ -}; - -static irq_table pci_sec_f_irq_table[] = { -/* Pin: A B C D */ - { INTA, INTB, INTC, INTD }, /* PCI Slot J1 */ - { INTB, INTC, INTD, INTA }, /* PCI Slot J5 */ - { INTE, INTE, INTE, INTE }, /* P2P Bridge */ -}; - -static int __init -iq80310_sec_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) -{ - irq_table *pci_irq_table; - - BUG_ON(pin < 1 || pin > 4); - - if (!system_rev) { - pci_irq_table = pci_sec_d_irq_table; - } else { - pci_irq_table = pci_sec_f_irq_table; - } - - return PCI_IRQ_TABLE_LOOKUP(0, 2); -} - -static int iq80310_pri_host; - -static int iq80310_setup(int nr, struct pci_sys_data *sys) -{ - switch (nr) { - case 0: - if (!iq80310_pri_host) - return 0; - - sys->map_irq = iq80310_pri_map_irq; - break; - - case 1: - sys->map_irq = iq80310_sec_map_irq; - break; - - default: - return 0; - } - - return iop310_setup(nr, sys); -} - -static void iq80310_preinit(void) -{ - iq80310_pri_host = *(volatile u32 *)IQ80310_BACKPLANE & 1; - - printk(KERN_INFO "PCI: IQ80310 is a%s\n", - iq80310_pri_host ? " system controller" : "n agent"); - - iop310_init(); -} - -static struct hw_pci iq80310_pci __initdata = { - .swizzle = pci_std_swizzle, - .nr_controllers = 2, - .setup = iq80310_setup, - .scan = iop310_scan_bus, - .preinit = iq80310_preinit, -}; - -static int __init iq80310_pci_init(void) -{ - if (machine_is_iq80310()) - pci_common_init(&iq80310_pci); - return 0; -} - -subsys_initcall(iq80310_pci_init); diff -Nru a/arch/arm/mach-iop310/iq80310-time.c b/arch/arm/mach-iop310/iq80310-time.c --- a/arch/arm/mach-iop310/iq80310-time.c Thu Apr 17 19:22:48 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,134 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/time-iq80310.c - * - * Timer functions for IQ80310 onboard timer - * - * Author: Nicolas Pitre - * Copyright: (C) 2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - * - */ -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include - -static void iq80310_write_timer (u_long val) -{ - volatile u_char *la0 = (volatile u_char *)IQ80310_TIMER_LA0; - volatile u_char *la1 = (volatile u_char *)IQ80310_TIMER_LA1; - volatile u_char *la2 = (volatile u_char *)IQ80310_TIMER_LA2; - - *la0 = val; - *la1 = val >> 8; - *la2 = (val >> 16) & 0x3f; -} - -static u_long iq80310_read_timer (void) -{ - volatile u_char *la0 = (volatile u_char *)IQ80310_TIMER_LA0; - volatile u_char *la1 = (volatile u_char *)IQ80310_TIMER_LA1; - volatile u_char *la2 = (volatile u_char *)IQ80310_TIMER_LA2; - volatile u_char *la3 = (volatile u_char *)IQ80310_TIMER_LA3; - u_long b0, b1, b2, b3, val; - - b0 = *la0; b1 = *la1; b2 = *la2; b3 = *la3; - b0 = (((b0 & 0x40) >> 1) | (b0 & 0x1f)); - b1 = (((b1 & 0x40) >> 1) | (b1 & 0x1f)); - b2 = (((b2 & 0x40) >> 1) | (b2 & 0x1f)); - b3 = (b3 & 0x0f); - val = ((b0 << 0) | (b1 << 6) | (b2 << 12) | (b3 << 18)); - return val; -} - -/* - * IRQs are disabled before entering here from do_gettimeofday(). - * Note that the counter may wrap. When it does, 'elapsed' will - * be small, but we will have a pending interrupt. - */ -static unsigned long iq80310_gettimeoffset (void) -{ - unsigned long elapsed, usec; - unsigned int stat1, stat2; - - stat1 = *(volatile u8 *)IQ80310_INT_STAT; - elapsed = iq80310_read_timer(); - stat2 = *(volatile u8 *)IQ80310_INT_STAT; - - /* - * If an interrupt was pending before we read the timer, - * we've already wrapped. Factor this into the time. - * If an interrupt was pending after we read the timer, - * it may have wrapped between checking the interrupt - * status and reading the timer. Re-read the timer to - * be sure its value is after the wrap. - */ - if (stat1 & 1) - elapsed += LATCH; - else if (stat2 & 1) - elapsed = LATCH + iq80310_read_timer(); - - /* - * Now convert them to usec. - */ - usec = (unsigned long)(elapsed * (tick_nsec / 1000))/LATCH; - - return usec; -} - - -static void iq80310_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) -{ - volatile u_char *timer_en = (volatile u_char *)IQ80310_TIMER_EN; - - /* clear timer interrupt */ - *timer_en &= ~2; - *timer_en |= 2; - - /* - * AHEM..HACK - * - * Since the timer interrupt is cascaded through the CPLD and - * the 80312 and the demux code calls do_IRQ, the irq count is - * going to be atleast 2 when we get here and this will cause the - * kernel to increment the system tick counter even if we're - * idle. This causes it to look like there's always 100% system - * time, which is not the case. To get around it, we just decrement - * the IRQ count before calling do_timer. We increment it again - * b/c otherwise it will go negative and than bad things happen. - * - * -DS - */ - do_timer(regs); -} - -extern unsigned long (*gettimeoffset)(void); - -static struct irqaction timer_irq = { - .name = "timer", - .handler = iq80310_timer_interrupt, -}; - - -void __init time_init(void) -{ - volatile u_char *timer_en = (volatile u_char *)IQ80310_TIMER_EN; - - gettimeoffset = iq80310_gettimeoffset; - setup_irq(IRQ_IQ80310_TIMER, &timer_irq); - *timer_en = 0; - iq80310_write_timer(LATCH); - *timer_en |= 2; - *timer_en |= 1; -} diff -Nru a/arch/arm/mach-iop310/mm.c b/arch/arm/mach-iop310/mm.c --- a/arch/arm/mach-iop310/mm.c Thu Apr 17 19:22:44 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,70 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/mm.c - * - * Low level memory initialization for IOP310 based systems - * - * Author: Nicolas Pitre - * - * Copyright 2000-2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - */ -#include -#include -#include -#include - -#include -#include -#include - -#include -#include - -#ifdef CONFIG_IOP310_MU -#include "message.h" -#endif - -/* - * Standard IO mapping for all IOP310 based systems - */ -static struct map_desc iop80310_std_desc[] __initdata = { - /* virtual physical length type */ - // IOP310 Memory Mapped Registers - { 0xe8001000, 0x00001000, 0x00001000, MT_DEVICE }, - // PCI I/O Space - { 0xfe000000, 0x90000000, 0x00020000, MT_DEVICE } -}; - -void __init iop310_map_io(void) -{ - iotable_init(iop80310_std_desc, ARRAY_SIZE(iop80310_std_desc)); -} - -/* - * IQ80310 specific IO mappings - */ -#ifdef CONFIG_ARCH_IQ80310 -static struct map_desc iq80310_io_desc[] __initdata = { - /* virtual physical length type */ - // IQ80310 On-Board Devices - { 0xfe800000, 0xfe800000, 0x00100000, MT_DEVICE } -}; - -void __init iq80310_map_io(void) -{ -#ifdef CONFIG_IOP310_MU - /* acquiring 1MB of memory aligned on 1MB boundary for MU */ - mu_mem = __alloc_bootmem(0x100000, 0x100000, 0); -#endif - - iop310_map_io(); - - iotable_init(iq80310_io_desc, ARRAY_SIZE(iq80310_io_desc)); -} -#endif // CONFIG_ARCH_IQ80310 - diff -Nru a/arch/arm/mach-iop310/xs80200-irq.c b/arch/arm/mach-iop310/xs80200-irq.c --- a/arch/arm/mach-iop310/xs80200-irq.c Thu Apr 17 19:22:47 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,65 +0,0 @@ -/* - * linux/arch/arm/mach-iop310/xs80200-irq.c - * - * Generic IRQ handling for the XS80200 XScale core. - * - * Author: Nicolas Pitre - * Copyright: (C) 2001 MontaVista Software Inc. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ -#include -#include - -#include -#include -#include - -#include - -static void xs80200_irq_mask (unsigned int irq) -{ - unsigned long intctl; - asm ("mrc p13, 0, %0, c0, c0, 0" : "=r" (intctl)); - switch (irq) { - case IRQ_XS80200_BCU: intctl &= ~(1<<3); break; - case IRQ_XS80200_PMU: intctl &= ~(1<<2); break; - case IRQ_XS80200_EXTIRQ: intctl &= ~(1<<1); break; - case IRQ_XS80200_EXTFIQ: intctl &= ~(1<<0); break; - } - asm ("mcr p13, 0, %0, c0, c0, 0" : : "r" (intctl)); -} - -static void xs80200_irq_unmask (unsigned int irq) -{ - unsigned long intctl; - asm ("mrc p13, 0, %0, c0, c0, 0" : "=r" (intctl)); - switch (irq) { - case IRQ_XS80200_BCU: intctl |= (1<<3); break; - case IRQ_XS80200_PMU: intctl |= (1<<2); break; - case IRQ_XS80200_EXTIRQ: intctl |= (1<<1); break; - case IRQ_XS80200_EXTFIQ: intctl |= (1<<0); break; - } - asm ("mcr p13, 0, %0, c0, c0, 0" : : "r" (intctl)); -} - -static struct irqchip xs80200_chip = { - .ack = xs80200_irq_mask, - .mask = xs80200_irq_mask, - .unmask = xs80200_irq_unmask, -}; - -void __init xs80200_init_irq(void) -{ - unsigned int i; - - asm("mcr p13, 0, %0, c0, c0, 0" : : "r" (0)); - - for (i = 0; i < NR_XS80200_IRQS; i++) { - set_irq_chip(i, &xs80200_chip); - set_irq_handler(i, do_level_IRQ); - set_irq_flags(i, IRQF_VALID); - } -} diff -Nru a/arch/arm/mach-iop3xx/Kconfig b/arch/arm/mach-iop3xx/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/Kconfig Thu Apr 17 19:22:49 2003 @@ -0,0 +1,54 @@ + +menu "IOP3xx Implementation Options" + +choice + prompt "IOP3xx System Type" + default ARCH_IQ80310 + depends on ARCH_IOP3XX + +config ARCH_IQ80310 + bool "IQ80310" + help + Say Y here if you want to run your kernel on the Intel IQ80310 + evaluation kit for the IOP310 chipset. + +config ARCH_IQ80321 + bool "IQ80321" + help + Say Y here if you want to run your kernel on the Intel IQ80321 + evaluation kit for the IOP321 chipset. +endchoice + +# Which IOP variant are we running? +config ARCH_IOP310 + bool + default ARCH_IQ80310 + help + The IQ80310 uses the IOP310 variant. + +config ARCH_IOP321 + bool + default ARCH_IQ80321 + help + The IQ80321 uses the IOP321 variant. + +comment "IOP3xx Chipset Features" + +config IOP3XX_AAU + bool "Support Intel IOP3xx Application Accelerator Unit (EXPERIMENTAL)" + depends on ARCH_IOP3XX && EXPERIMENTAL + +config IOP3XX_DMA + bool "Support Intel IOP3xx DMA (EXPERIMENTAL)" + depends on ARCH_IOP3XX && EXPERIMENTAL + +config IOP3XX_MU + bool "Support Intel IOP3xx Messaging Unit (EXPERIMENTAL)" + depends on ARCH_IOP3XX && EXPERIMENTAL + +config IOP3XX_PMON + bool "Support Intel IOP3xx Performance Monitor (EXPERIMENTAL)" + depends on ARCH_IOP3XX && EXPERIMENTAL + +endmenu + diff -Nru a/arch/arm/mach-iop3xx/Makefile b/arch/arm/mach-iop3xx/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/Makefile Thu Apr 17 19:22:49 2003 @@ -0,0 +1,30 @@ +# +# Makefile for the linux kernel. +# + +# Object file lists. + +obj-y := arch.o + +obj-m := +obj-n := +obj- := + +obj-$(CONFIG_ARCH_IOP310) += xs80200-irq.o iop310-irq.o iop310-pci.o mm.o + +obj-$(CONFIG_ARCH_IQ80310) += iq80310-pci.o iq80310-irq.o + +obj-$(CONFIG_ARCH_IOP321) += iop321-irq.o iop321-pci.o mm-321.o iop321-time.o + +obj-$(CONFIG_ARCH_IQ80321) += iq80321-pci.o + +ifeq ($(CONFIG_ARCH_IQ80310),y) + ifneq ($(CONFIG_XSCALE_PMU_TIMER),y) + obj-y += iq80310-time.o + endif +endif + +obj-$(CONFIG_IOP3XX_AAU) += aau.o +obj-$(CONFIG_IOP3XX_DMA) += dma.o +obj-$(CONFIG_IOP3XX_MU) += message.o +obj-$(CONFIG_IOP3XX_PMON) += pmon.o diff -Nru a/arch/arm/mach-iop3xx/arch.c b/arch/arm/mach-iop3xx/arch.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/arch.c Thu Apr 17 19:22:46 2003 @@ -0,0 +1,74 @@ +/* + * linux/arch/arm/mach-iop3xx/arch.c + * + * Author: Nicolas Pitre + * Copyright (C) 2001 MontaVista Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_ARCH_IQ80310 +extern void iq80310_map_io(void); +extern void iq80310_init_irq(void); +#endif + +#ifdef CONFIG_ARCH_IQ80321 +extern void iq80321_map_io(void); +extern void iop321_init_irq(void); +#endif + +#ifdef CONFIG_ARCH_IQ80310 +static void __init +fixup_iq80310(struct machine_desc *desc, struct tag *tags, + char **cmdline, struct meminfo *mi) +{ + system_rev = (*(volatile unsigned int*)0xfe830000) & 0x0f; + + if (system_rev) + system_rev = 0xF; +} +#endif + +#ifdef CONFIG_ARCH_IQ80321 +static void __init +fixup_iop321(struct machine_desc *desc, struct param_struct *params, + char **cmdline, struct meminfo *mi) +{ +} +#endif + +#ifdef CONFIG_ARCH_IQ80310 +MACHINE_START(IQ80310, "Cyclone IQ80310") + MAINTAINER("MontaVista Software Inc.") + BOOT_MEM(0xa0000000, 0xfe000000, 0xfe000000) + FIXUP(fixup_iq80310) + MAPIO(iq80310_map_io) + INITIRQ(iq80310_init_irq) +MACHINE_END + +#elif defined(CONFIG_ARCH_IQ80321) +MACHINE_START(IQ80321, "Intel IQ80321") + MAINTAINER("MontaVista Software, Inc.") + BOOT_MEM(PHYS_OFFSET, IQ80321_UART1, 0xfe800000) + FIXUP(fixup_iop321) + MAPIO(iq80321_map_io) + INITIRQ(iop321_init_irq) +MACHINE_END + +#else +#error No machine descriptor defined for this IOP310 implementation +#endif diff -Nru a/arch/arm/mach-iop3xx/iop310-irq.c b/arch/arm/mach-iop3xx/iop310-irq.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iop310-irq.c Thu Apr 17 19:22:49 2003 @@ -0,0 +1,113 @@ +/* + * linux/arch/arm/mach-iop3xx/iop310-irq.c + * + * Generic IOP310 IRQ handling functionality + * + * Author: Nicolas Pitre + * Copyright: (C) 2001 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Added IOP310 chipset and IQ80310 board demuxing, masking code. - DS + * + */ +#include +#include +#include + +#include +#include +#include + +#include + +extern void xs80200_irq_mask(unsigned int); +extern void xs80200_irq_unmask(unsigned int); +extern void xs80200_init_irq(void); + +extern void do_IRQ(int, struct pt_regs *); + +static u32 iop310_mask /* = 0 */; + +static void iop310_irq_mask (unsigned int irq) +{ + iop310_mask ++; + + /* + * No mask bits on the 80312, so we have to + * mask everything from the outside! + */ + if (iop310_mask == 1) { + disable_irq(IRQ_XS80200_EXTIRQ); + irq_desc[IRQ_XS80200_EXTIRQ].chip->mask(IRQ_XS80200_EXTIRQ); + } +} + +static void iop310_irq_unmask (unsigned int irq) +{ + if (iop310_mask) + iop310_mask --; + + /* + * Check if all 80312 sources are unmasked now + */ + if (iop310_mask == 0) + enable_irq(IRQ_XS80200_EXTIRQ); +} + +struct irqchip ext_chip = { + .ack = iop310_irq_mask, + .mask = iop310_irq_mask, + .unmask = iop310_irq_unmask, +}; + +void +iop310_irq_demux(unsigned int irq, struct irqdesc *desc, struct pt_regs *regs) +{ + u32 fiq1isr = *((volatile u32*)IOP310_FIQ1ISR); + u32 fiq2isr = *((volatile u32*)IOP310_FIQ2ISR); + struct irqdesc *d; + unsigned int irqno = 0; + + if(fiq1isr) + { + if(fiq1isr & 0x1) + irqno = IRQ_IOP310_DMA0; + if(fiq1isr & 0x2) + irqno = IRQ_IOP310_DMA1; + if(fiq1isr & 0x4) + irqno = IRQ_IOP310_DMA2; + if(fiq1isr & 0x10) + irqno = IRQ_IOP310_PMON; + if(fiq1isr & 0x20) + irqno = IRQ_IOP310_AAU; + } + else + { + if(fiq2isr & 0x2) + irqno = IRQ_IOP310_I2C; + if(fiq2isr & 0x4) + irqno = IRQ_IOP310_MU; + } + + if (irqno) { + d = irq_desc + irqno; + d->handle(irqno, d, regs); + } +} + +void __init iop310_init_irq(void) +{ + unsigned int i; + + for(i = IOP310_IRQ_OFS; i < NR_IOP310_IRQS; i++) + { + set_irq_chip(i, &ext_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID | IRQF_PROBE); + } + + xs80200_init_irq(); +} diff -Nru a/arch/arm/mach-iop3xx/iop310-pci.c b/arch/arm/mach-iop3xx/iop310-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iop310-pci.c Thu Apr 17 19:22:45 2003 @@ -0,0 +1,434 @@ +/* + * arch/arm/mach-iop3xx/iop310-pci.c + * + * PCI support for the Intel IOP310 chipset + * + * Matt Porter + * + * Copyright (C) 2001 MontaVista Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +/* + * *** Special note - why the IOP310 should NOT be used *** + * + * The PCI ATU is a brain dead implementation, only allowing 32-bit + * accesses to PCI configuration space. This is especially brain + * dead for writes to this space. A simple for-instance: + * + * You want to modify the command register *without* corrupting the + * status register. + * + * To perform this, you need to read *32* bits of data from offset 4, + * mask off the low 16, replace them with the new data, and write *32* + * bits back. + * + * Writing the status register at offset 6 with status bits set *clears* + * the status. + * + * Hello? Could we have a *SANE* implementation of a PCI ATU some day + * *PLEASE*? + */ +#undef DEBUG +#ifdef DEBUG +#define DBG(x...) printk(x) +#else +#define DBG(x...) do { } while (0) +#endif + +/* + * Calculate the address, etc from the bus, devfn and register + * offset. Note that we have two root buses, so we need some + * method to determine whether we need config type 0 or 1 cycles. + * We use a root bus number in our bus->sysdata structure for this. + */ +static u32 iop310_cfg_address(struct pci_bus *bus, int devfn, int where) +{ + struct pci_sys_data *sys = bus->sysdata; + u32 addr; + + if (sys->busnr == bus->number) + addr = 1 << (PCI_SLOT(devfn) + 16); + else + addr = bus->number << 16 | PCI_SLOT(devfn) << 11 | 1; + + addr |= PCI_FUNC(devfn) << 8 | (where & ~3); + + return addr; +} + +/* + * Primary PCI interface support. + */ +static int iop310_pri_pci_status(void) +{ + unsigned int status; + int ret = 0; + + status = *IOP310_PATUSR; + if (status & 0xf900) { + *IOP310_PATUSR = status & 0xf900; + ret = 1; + } + status = *IOP310_PATUISR; + if (status & 0x0000018f) { + *IOP310_PATUISR = status & 0x0000018f; + ret = 1; + } + status = *IOP310_PSR; + if (status & 0xf900) { + *IOP310_PSR = status & 0xf900; + ret = 1; + } + status = *IOP310_PBISR; + if (status & 0x003f) { + *IOP310_PBISR = status & 0x003f; + ret = 1; + } + return ret; +} + +/* + * Simply write the address register and read the configuration + * data. Note that the 4 nop's ensure that we are able to handle + * a delayed abort (in theory.) + */ +static inline u32 iop310_pri_read(unsigned long addr) +{ + u32 val; + + __asm__ __volatile__( + "str %1, [%2]\n\t" + "ldr %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : "=r" (val) + : "r" (addr), "r" (IOP310_POCCAR), "r" (IOP310_POCCDR)); + + return val; +} + +static int +iop310_pri_read_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 *value) +{ + unsigned long addr = iop310_cfg_address(bus, devfn, where); + u32 val = iop310_pri_read(addr) >> ((where & 3) * 8); + + if (iop310_pri_pci_status()) + val = 0xffffffff; + + *value = val; + + return PCIBIOS_SUCCESSFUL; +} + +static int +iop310_pri_write_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 value) +{ + unsigned long addr = iop310_cfg_address(bus, devfn, where); + u32 val; + + if (size != 4) { + val = iop310_pri_read(addr); + if (!iop310_pri_pci_status() == 0) + return PCIBIOS_SUCCESSFUL; + + where = (where & 3) * 8; + + if (size == 1) + val &= ~(0xff << where); + else + val &= ~(0xffff << where); + + *IOP310_POCCDR = val | value << where; + } else { + asm volatile( + "str %1, [%2]\n\t" + "str %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : + : "r" (value), "r" (addr), + "r" (IOP310_POCCAR), "r" (IOP310_POCCDR)); + } + + return PCIBIOS_SUCCESSFUL; +} + +static struct pci_ops iop310_primary_ops = { + .read = iop310_pri_read_config, + .write = iop310_pri_write_config, +}; + +/* + * Secondary PCI interface support. + */ +static int iop310_sec_pci_status(void) +{ + unsigned int usr, uisr; + int ret = 0; + + usr = *IOP310_SATUSR; + uisr = *IOP310_SATUISR; + if (usr & 0xf900) { + *IOP310_SATUSR = usr & 0xf900; + ret = 1; + } + if (uisr & 0x0000069f) { + *IOP310_SATUISR = uisr & 0x0000069f; + ret = 1; + } + if (ret) + DBG("ERROR (%08x %08x)", usr, uisr); + return ret; +} + +/* + * Simply write the address register and read the configuration + * data. Note that the 4 nop's ensure that we are able to handle + * a delayed abort (in theory.) + */ +static inline u32 iop310_sec_read(unsigned long addr) +{ + u32 val; + + __asm__ __volatile__( + "str %1, [%2]\n\t" + "ldr %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : "=r" (val) + : "r" (addr), "r" (IOP310_SOCCAR), "r" (IOP310_SOCCDR)); + + return val; +} + +static int +iop310_sec_read_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 *value) +{ + unsigned long addr = iop310_cfg_address(bus, devfn, where); + u32 val = iop310_sec_read(addr) >> ((where & 3) * 8); + + if (iop310_sec_pci_status()) + val = 0xffffffff; + + *value = val; + + return PCIBIOS_SUCCESSFUL; +} + +static int +iop310_sec_write_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 value) +{ + unsigned long addr = iop310_cfg_address(bus, devfn, where); + u32 val; + + if (size != 4) { + val = iop310_sec_read(addr); + + if (!iop310_sec_pci_status() == 0) + return PCIBIOS_SUCCESSFUL; + + where = (where & 3) * 8; + + if (size == 1) + val &= ~(0xff << where); + else + val &= ~(0xffff << where); + + *IOP310_SOCCDR = val | value << where; + } else { + asm volatile( + "str %1, [%2]\n\t" + "str %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : + : "r" (value), "r" (addr), + "r" (IOP310_SOCCAR), "r" (IOP310_SOCCDR)); + } + + return PCIBIOS_SUCCESSFUL; +} + +static struct pci_ops iop310_secondary_ops = { + .read = iop310_sec_read_config, + .write = iop310_sec_write_config, +}; + +/* + * When a PCI device does not exist during config cycles, the 80200 gets + * an external abort instead of returning 0xffffffff. If it was an + * imprecise abort, we need to correct the return address to point after + * the instruction. Also note that the Xscale manual says: + * + * "if a stall-until-complete LD or ST instruction triggers an + * imprecise fault, then that fault will be seen by the program + * within 3 instructions." + * + * This does not appear to be the case. With 8 NOPs after the load, we + * see the imprecise abort occurring on the STM of iop310_sec_pci_status() + * which is about 10 instructions away. + * + * Always trust reality! + */ +static int +iop310_pci_abort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) +{ + DBG("PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx\n", + addr, fsr, regs->ARM_pc, regs->ARM_lr); + + /* + * If it was an imprecise abort, then we need to correct the + * return address to be _after_ the instruction. + */ + if (fsr & (1 << 10)) + regs->ARM_pc += 4; + + return 0; +} + +/* + * Scan an IOP310 PCI bus. sys->bus defines which bus we scan. + */ +struct pci_bus *iop310_scan_bus(int nr, struct pci_sys_data *sys) +{ + struct pci_ops *ops; + + if (nr) + ops = &iop310_secondary_ops; + else + ops = &iop310_primary_ops; + + return pci_scan_bus(sys->busnr, ops, sys); +} + +/* + * Setup the system data for controller 'nr'. Return 0 if none found, + * 1 if found, or negative error. + * + * We can alter: + * io_offset - offset between IO resources and PCI bus BARs + * mem_offset - offset between mem resources and PCI bus BARs + * resource[0] - parent IO resource + * resource[1] - parent non-prefetchable memory resource + * resource[2] - parent prefetchable memory resource + * swizzle - bridge swizzling function + * map_irq - irq mapping function + * + * Note that 'io_offset' and 'mem_offset' are left as zero since + * the IOP310 doesn't attempt to perform any address translation + * on accesses from the host to the bus. + */ +int iop310_setup(int nr, struct pci_sys_data *sys) +{ + struct resource *res; + + if (nr >= 2) + return 0; + + res = kmalloc(sizeof(struct resource) * 2, GFP_KERNEL); + if (!res) + panic("PCI: unable to alloc resources"); + + memset(res, 0, sizeof(struct resource) * 2); + + switch (nr) { + case 0: + res[0].start = IOP310_PCIPRI_LOWER_IO + 0x6e000000; + res[0].end = IOP310_PCIPRI_LOWER_IO + 0x6e00ffff; + res[0].name = "PCI IO Primary"; + res[0].flags = IORESOURCE_IO; + + res[1].start = IOP310_PCIPRI_LOWER_MEM; + res[1].end = IOP310_PCIPRI_LOWER_MEM + IOP310_PCI_WINDOW_SIZE; + res[1].name = "PCI Memory Primary"; + res[1].flags = IORESOURCE_MEM; + break; + + case 1: + res[0].start = IOP310_PCISEC_LOWER_IO + 0x6e000000; + res[0].end = IOP310_PCISEC_LOWER_IO + 0x6e00ffff; + res[0].name = "PCI IO Secondary"; + res[0].flags = IORESOURCE_IO; + + res[1].start = IOP310_PCISEC_LOWER_MEM; + res[1].end = IOP310_PCISEC_LOWER_MEM + IOP310_PCI_WINDOW_SIZE; + res[1].name = "PCI Memory Secondary"; + res[1].flags = IORESOURCE_MEM; + break; + } + + request_resource(&ioport_resource, &res[0]); + request_resource(&iomem_resource, &res[1]); + + sys->resource[0] = &res[0]; + sys->resource[1] = &res[1]; + sys->resource[2] = NULL; + sys->io_offset = 0x6e000000; + + return 1; +} + +void iop310_init(void) +{ + DBG("PCI: Intel 80312 PCI-to-PCI init code.\n"); + DBG(" ATU secondary: ATUCR =0x%08x\n", *IOP310_ATUCR); + DBG(" ATU secondary: SOMWVR=0x%08x SOIOWVR=0x%08x\n", + *IOP310_SOMWVR, *IOP310_SOIOWVR); + DBG(" ATU secondary: SIABAR=0x%08x SIALR =0x%08x SIATVR=%08x\n", + *IOP310_SIABAR, *IOP310_SIALR, *IOP310_SIATVR); + DBG(" ATU primary: POMWVR=0x%08x POIOWVR=0x%08x\n", + *IOP310_POMWVR, *IOP310_POIOWVR); + DBG(" ATU primary: PIABAR=0x%08x PIALR =0x%08x PIATVR=%08x\n", + *IOP310_PIABAR, *IOP310_PIALR, *IOP310_PIATVR); + DBG(" P2P: PCR=0x%04x BCR=0x%04x EBCR=0x%04x\n", + *IOP310_PCR, *IOP310_BCR, *IOP310_EBCR); + + /* + * Windows have to be carefully opened via a nice set of calls + * here or just some direct register fiddling in the board + * specific init when we want transactions to occur between the + * two PCI hoses. + * + * To do this, we will have manage RETRY assertion between the + * firmware and the kernel. This will ensure that the host + * system's enumeration code is held off until we have tweaked + * the interrupt routing and public/private IDSELs. + * + * For now we will simply default to disabling the integrated type + * 81 P2P bridge. + */ + *IOP310_PCR &= 0xfff8; + + hook_fault_code(16+6, iop310_pci_abort, SIGBUS, "imprecise external abort"); +} diff -Nru a/arch/arm/mach-iop3xx/iop321-irq.c b/arch/arm/mach-iop3xx/iop321-irq.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iop321-irq.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,95 @@ +/* + * linux/arch/arm/mach-iop3xx/iop321-irq.c + * + * Generic IOP321 IRQ handling functionality + * + * Author: Rory Bolt + * Copyright (C) 2002 Rory Bolt + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * Added IOP3XX chipset and IQ80321 board masking code. + * + */ +#include +#include +#include + +#include +#include +#include + +#include + +static u32 iop321_mask /* = 0 */; + +static inline void intctl_write(u32 val) +{ + asm volatile("mcr p6,0,%0,c0,c0,0"::"r" (val)); +} + +static inline void intstr_write(u32 val) +{ + asm volatile("mcr p6,0,%0,c4,c0,0"::"r" (val)); +} + +static void +iop321_irq_mask (unsigned int irq) +{ + + iop321_mask &= ~(1 << (irq - IOP321_IRQ_OFS)); + + intctl_write(iop321_mask); +} + +static void +iop321_irq_unmask (unsigned int irq) +{ + iop321_mask |= (1 << (irq - IOP321_IRQ_OFS)); + + intctl_write(iop321_mask); +} + +struct irqchip ext_chip = { + .ack = iop321_irq_mask, + .mask = iop321_irq_mask, + .unmask = iop321_irq_unmask, +}; + +void __init iop321_init_irq(void) +{ + unsigned int i, tmp; + + /* Enable access to coprocessor 6 for dealing with IRQs. + * From RMK: + * Basically, the Intel documentation here is poor. It appears that + * you need to set the bit to be able to access the coprocessor from + * SVC mode. Whether that allows access from user space or not is + * unclear. + */ + asm volatile ( + "mrc p15, 0, %0, c15, c1, 0\n\t" + "orr %0, %0, %1\n\t" + "mcr p15, 0, %0, c15, c1, 0\n\t" + /* The action is delayed, so we have to do this: */ + "mrc p15, 0, %0, c15, c1, 0\n\t" + "mov %0, %0\n\t" + "sub pc, pc, #4" + : "=r" (tmp) : "i" (1 << 6) ); + + intctl_write(0); // disable all interrupts + intstr_write(0); // treat all as IRQ + if(machine_is_iq80321()) // all interrupts are inputs to chip + *IOP321_PCIIRSR = 0x0f; + + for(i = IOP321_IRQ_OFS; i < NR_IOP321_IRQS; i++) + { + set_irq_chip(i, &ext_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID | IRQF_PROBE); + + } +} + diff -Nru a/arch/arm/mach-iop3xx/iop321-pci.c b/arch/arm/mach-iop3xx/iop321-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iop321-pci.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,257 @@ +/* + * arch/arm/mach-iop3xx/iop321-pci.c + * + * PCI support for the Intel IOP321 chipset + * + * Author: Rory Bolt + * Copyright (C) 2002 Rory Bolt + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#include + +// #define DEBUG + +#ifdef DEBUG +#define DBG(x...) printk(x) +#else +#define DBG(x...) do { } while (0) +#endif + +/* + * This routine builds either a type0 or type1 configuration command. If the + * bus is on the 80321 then a type0 made, else a type1 is created. + */ +static u32 iop321_cfg_address(struct pci_bus *bus, int devfn, int where) +{ + struct pci_sys_data *sys = bus->sysdata; + u32 addr; + + if (sys->busnr == bus->number) + addr = 1 << (PCI_SLOT(devfn) + 16); + else + addr = bus->number << 16 | PCI_SLOT(devfn) << 11 | 1; + + addr |= PCI_FUNC(devfn) << 8 | (where & ~3); + + return addr; +} + +/* + * This routine checks the status of the last configuration cycle. If an error + * was detected it returns a 1, else it returns a 0. The errors being checked + * are parity, master abort, target abort (master and target). These types of + * errors occure during a config cycle where there is no device, like during + * the discovery stage. + */ +static int iop321_pci_status(void) +{ + unsigned int status; + int ret = 0; + + /* + * Check the status registers. + */ + status = *IOP321_ATUSR; + if (status & 0xf900) + { + DBG("\t\t\tPCI: P0 - status = 0x%08x\n", status); + *IOP321_ATUSR = status & 0xf900; + ret = 1; + } + status = *IOP321_ATUISR; + if (status & 0x679f) + { + DBG("\t\t\tPCI: P1 - status = 0x%08x\n", status); + *IOP321_ATUISR = status & 0x679f; + ret = 1; + } + return ret; +} + +/* + * Simply write the address register and read the configuration + * data. Note that the 4 nop's ensure that we are able to handle + * a delayed abort (in theory.) + */ +static inline u32 iop321_read(unsigned long addr) +{ + u32 val; + + __asm__ __volatile__( + "str %1, [%2]\n\t" + "ldr %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : "=r" (val) + : "r" (addr), "r" (IOP321_OCCAR), "r" (IOP321_OCCDR)); + + return val; +} + +/* + * The read routines must check the error status of the last configuration + * cycle. If there was an error, the routine returns all hex f's. + */ +static int +iop321_read_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 *value) +{ + unsigned long addr = iop321_cfg_address(bus, devfn, where); + u32 val = iop321_read(addr) >> ((where & 3) * 8); + + if( iop321_pci_status() ) + val = 0xffffffff; + + *value = val; + + return PCIBIOS_SUCCESSFUL; +} + +static int +iop321_write_config(struct pci_bus *bus, unsigned int devfn, int where, + int size, u32 value) +{ + unsigned long addr = iop321_cfg_address(bus, devfn, where); + u32 val; + + if (size != 4) { + val = iop321_read(addr); + if (!iop321_pci_status() == 0) + return PCIBIOS_SUCCESSFUL; + + where = (where & 3) * 8; + + if (size == 1) + val &= ~(0xff << where); + else + val &= ~(0xffff << where); + + *IOP321_OCCDR = val | value << where; + } else { + asm volatile( + "str %1, [%2]\n\t" + "str %0, [%3]\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + "nop\n\t" + : + : "r" (value), "r" (addr), + "r" (IOP321_OCCAR), "r" (IOP321_OCCDR)); + } +} + +static struct pci_ops iop321_ops = { + .read = iop321_read_config, + .write = iop321_write_config, +}; + +/* + * When a PCI device does not exist during config cycles, the 80200 gets a + * bus error instead of returning 0xffffffff. This handler simply returns. + */ +int +iop321_pci_abort(unsigned long addr, unsigned int fsr, struct pt_regs *regs) +{ + DBG("PCI abort: address = 0x%08lx fsr = 0x%03x PC = 0x%08lx LR = 0x%08lx\n", + addr, fsr, regs->ARM_pc, regs->ARM_lr); + + /* + * If it was an imprecise abort, then we need to correct the + * return address to be _after_ the instruction. + */ + if (fsr & (1 << 10)) + regs->ARM_pc += 4; + + return 0; +} + +/* + * Scan an IOP321 PCI bus. sys->bus defines which bus we scan. + */ +struct pci_bus *iop321_scan_bus(int nr, struct pci_sys_data *sys) +{ + return pci_scan_bus(sys->busnr, &iop321_ops, sys); +} + +/* + * Setup the system data for controller 'nr'. Return 0 if none found, + * 1 if found, or negative error. + */ +int iop321_setup(int nr, struct pci_sys_data *sys) +{ + struct resource *res; + + if (nr >= 1) + return 0; + + res = kmalloc(sizeof(struct resource) * 2, GFP_KERNEL); + if (!res) + panic("PCI: unable to alloc resources"); + + memset(res, 0, sizeof(struct resource) * 2); + + switch (nr) { + case 0: + res[0].start = IOP321_PCI_LOWER_IO + 0x6e000000; + res[0].end = IOP321_PCI_LOWER_IO + 0x6e00ffff; + res[0].name = "PCI IO Primary"; + res[0].flags = IORESOURCE_IO; + + res[1].start = IOP321_PCI_LOWER_MEM; + res[1].end = IOP321_PCI_LOWER_MEM + IOP321_PCI_WINDOW_SIZE; + res[1].name = "PCI Memory Primary"; + res[1].flags = IORESOURCE_MEM; + break; + } + + request_resource(&ioport_resource, &res[0]); + request_resource(&iomem_resource, &res[1]); + + sys->resource[0] = &res[0]; + sys->resource[1] = &res[1]; + sys->resource[2] = NULL; + sys->io_offset = 0x6e000000; + + return 1; +} + + + + +void iop321_init(void) +{ + DBG("PCI: Intel 80321 PCI init code.\n"); + DBG("\tATU: IOP321_ATUCMD=0x%04x\n", *IOP321_ATUCMD); + DBG("\tATU: IOP321_OMWTVR0=0x%04x, IOP321_OIOWTVR=0x%04x\n", + *IOP321_OMWTVR0, + *IOP321_OIOWTVR); + DBG("\tATU: IOP321_ATUCR=0x%08x\n", *IOP321_ATUCR); + DBG("\tATU: IOP321_IABAR0=0x%08x IOP321_IALR0=0x%08x IOP321_IATVR0=%08x\n", *IOP321_IABAR0, *IOP321_IALR0, *IOP321_IATVR0); + DBG("\tATU: IOP321_ERBAR=0x%08x IOP321_ERLR=0x%08x IOP321_ERTVR=%08x\n", *IOP321_ERBAR, *IOP321_ERLR, *IOP321_ERTVR); + DBG("\tATU: IOP321_IABAR2=0x%08x IOP321_IALR2=0x%08x IOP321_IATVR2=%08x\n", *IOP321_IABAR2, *IOP321_IALR2, *IOP321_IATVR2); + DBG("\tATU: IOP321_IABAR3=0x%08x IOP321_IALR3=0x%08x IOP321_IATVR3=%08x\n", *IOP321_IABAR3, *IOP321_IALR3, *IOP321_IATVR3); + + hook_fault_code(16+6, iop321_pci_abort, SIGBUS, "imprecise external abort"); + +} + diff -Nru a/arch/arm/mach-iop3xx/iop321-time.c b/arch/arm/mach-iop3xx/iop321-time.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iop321-time.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,92 @@ +/* + * arch/arm/mach-iop3xx/iop321-time.c + * + * Timer code for IOP321 based systems + * + * Author: Deepak Saxena + * + * Copyright 2002 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +static unsigned long iop321_gettimeoffset(void) +{ + unsigned long elapsed, usec; + + /* + * FIXME: Implement what is described in this comment. + * + * If an interrupt was pending before we read the timer, + * we've already wrapped. Factor this into the time. + * If an interrupt was pending after we read the timer, + * it may have wrapped between checking the interrupt + * status and reading the timer. Re-read the timer to + * be sure its value is after the wrap. + */ + + elapsed = *IOP321_TU_TCR0; + + /* + * Now convert them to usec. + */ + usec = (unsigned long)((LATCH - elapsed) * (tick_nsec / 1000)) / LATCH; + + return usec; +} + +static void iop321_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + u32 tisr; + + asm volatile("mrc p6, 0, %0, c6, c1, 0" : "=r" (tisr)); + + tisr |= 1; + + asm volatile("mcr p6, 0, %0, c6, c1, 0" : : "r" (tisr)); + + do_timer(regs); +} + +extern unsigned long (*gettimeoffset)(void); + +static struct irqaction timer_irq = { + .name = "timer", + .handler = iop321_timer_interrupt, +}; + +extern int setup_arm_irq(int, struct irqaction*); + +void __init time_init(void) +{ + u32 timer_ctl; + u32 latch = LATCH; + + gettimeoffset = iop321_gettimeoffset; + setup_irq(IRQ_IOP321_TIMER0, &timer_irq); + + timer_ctl = IOP321_TMR_EN | IOP321_TMR_PRIVILEGED | IOP321_TMR_RELOAD | + IOP321_TMR_RATIO_1_1; + + asm volatile("mcr p6, 0, %0, c4, c1, 0" : : "r" (LATCH)); + + asm volatile("mcr p6, 0, %0, c0, c1, 0" : : "r" (timer_ctl)); +} + + diff -Nru a/arch/arm/mach-iop3xx/iq80310-irq.c b/arch/arm/mach-iop3xx/iq80310-irq.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iq80310-irq.c Thu Apr 17 19:22:44 2003 @@ -0,0 +1,141 @@ +/* + * linux/arch/arm/mach-iop3xx/iq80310-irq.c + * + * IRQ hadling/demuxing for IQ80310 board + * + * Author: Nicolas Pitre + * Copyright: (C) 2001 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * 2.4.7-rmk1-iop310.1 + * Moved demux from asm to C - DS + * Fixes for various revision boards - DS + */ +#include +#include + +#include +#include +#include +#include + +#include + +extern void iop310_init_irq(void); +extern void iop310_irq_demux(unsigned int, struct irqdesc *, struct pt_regs *); + +static void iq80310_irq_mask(unsigned int irq) +{ + *(volatile char *)IQ80310_INT_MASK |= (1 << (irq - IQ80310_IRQ_OFS)); +} + +static void iq80310_irq_unmask(unsigned int irq) +{ + *(volatile char *)IQ80310_INT_MASK &= ~(1 << (irq - IQ80310_IRQ_OFS)); +} + +static struct irqchip iq80310_irq_chip = { + .ack = iq80310_irq_mask, + .mask = iq80310_irq_mask, + .unmask = iq80310_irq_unmask, +}; + +extern struct irqchip ext_chip; + +static void +iq80310_cpld_irq_handler(unsigned int irq, struct irqdesc *desc, + struct pt_regs *regs) +{ + unsigned int irq_stat = *(volatile u8*)IQ80310_INT_STAT; + unsigned int irq_mask = *(volatile u8*)IQ80310_INT_MASK; + unsigned int i, handled = 0; + struct irqdesc *d; + + desc->chip->ack(irq); + + /* + * Mask out the interrupts which aren't enabled. + */ + irq_stat &= 0x1f & ~irq_mask; + + /* + * Test each IQ80310 CPLD interrupt + */ + for (i = IRQ_IQ80310_TIMER, d = irq_desc + IRQ_IQ80310_TIMER; + irq_stat; i++, d++, irq_stat >>= 1) + if (irq_stat & 1) { + d->handle(i, d, regs); + handled++; + } + + /* + * If running on a board later than REV D.1, we can + * decode the PCI interrupt status. + */ + if (system_rev) { + irq_stat = *((volatile u8*)IQ80310_PCI_INT_STAT) & 7; + + for (i = IRQ_IQ80310_INTA, d = irq_desc + IRQ_IQ80310_INTA; + irq_stat; i++, d++, irq_stat >>= 1) + if (irq_stat & 0x1) { + d->handle(i, d, regs); + handled++; + } + } + + /* + * If on a REV D.1 or lower board, we just assumed INTA + * since PCI is not routed, and it may actually be an + * on-chip interrupt. + * + * Note that we're giving on-chip interrupts slightly + * higher priority than PCI by handling them first. + * + * On boards later than REV D.1, if we didn't read a + * CPLD interrupt, we assume it's from a device on the + * chipset itself. + */ + if (system_rev == 0 || handled == 0) + iop310_irq_demux(irq, desc, regs); + + desc->chip->unmask(irq); +} + +void __init iq80310_init_irq(void) +{ + volatile char *mask = (volatile char *)IQ80310_INT_MASK; + unsigned int i; + + iop310_init_irq(); + + /* + * Setup PIRSR to route PCI interrupts into xs80200 + */ + *IOP310_PIRSR = 0xff; + + /* + * Setup the IRQs in the FE820000/FE860000 registers + */ + for (i = IQ80310_IRQ_OFS; i <= IRQ_IQ80310_INTD; i++) { + set_irq_chip(i, &iq80310_irq_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID | IRQF_PROBE); + } + + /* + * Setup the PCI IRQs + */ + for (i = IRQ_IQ80310_INTA; i < IRQ_IQ80310_INTC; i++) { + set_irq_chip(i, &ext_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID); + } + + *mask = 0xff; /* mask all sources */ + + set_irq_chained_handler(IRQ_XS80200_EXTIRQ, + &iq80310_cpld_irq_handler); +} diff -Nru a/arch/arm/mach-iop3xx/iq80310-pci.c b/arch/arm/mach-iop3xx/iq80310-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iq80310-pci.c Thu Apr 17 19:22:44 2003 @@ -0,0 +1,164 @@ +/* + * arch/arm/mach-iop3xx/iq80310-pci.c + * + * PCI support for the Intel IQ80310 reference board + * + * Matt Porter + * + * Copyright (C) 2001 MontaVista Software, Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include +#include + +#include +#include +#include +#include + +/* + * The following macro is used to lookup irqs in a standard table + * format for those systems that do not already have PCI + * interrupts properly routed. We assume 1 <= pin <= 4 + */ +#define PCI_IRQ_TABLE_LOOKUP(minid,maxid) \ +({ int _ctl_ = -1; \ + unsigned int _idsel = idsel - minid; \ + if (_idsel <= maxid) \ + _ctl_ = pci_irq_table[_idsel][pin-1]; \ + _ctl_; }) + +#define INTA IRQ_IQ80310_INTA +#define INTB IRQ_IQ80310_INTB +#define INTC IRQ_IQ80310_INTC +#define INTD IRQ_IQ80310_INTD + +#define INTE IRQ_IQ80310_I82559 + +typedef u8 irq_table[4]; + +/* + * IRQ tables for primary bus. + * + * On a Rev D.1 and older board, INT A-C are not routed, so we + * just fake it as INTA and than we take care of handling it + * correctly in the IRQ demux routine. + */ +static irq_table pci_pri_d_irq_table[] = { +/* Pin: A B C D */ + { INTA, INTD, INTA, INTA }, /* PCI Slot J3 */ + { INTD, INTA, INTA, INTA }, /* PCI Slot J4 */ +}; + +static irq_table pci_pri_f_irq_table[] = { +/* Pin: A B C D */ + { INTC, INTD, INTA, INTB }, /* PCI Slot J3 */ + { INTD, INTA, INTB, INTC }, /* PCI Slot J4 */ +}; + +static int __init +iq80310_pri_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +{ + irq_table *pci_irq_table; + + BUG_ON(pin < 1 || pin > 4); + + if (!system_rev) { + pci_irq_table = pci_pri_d_irq_table; + } else { + pci_irq_table = pci_pri_f_irq_table; + } + + return PCI_IRQ_TABLE_LOOKUP(2, 3); +} + +/* + * IRQ tables for secondary bus. + * + * On a Rev D.1 and older board, INT A-C are not routed, so we + * just fake it as INTA and than we take care of handling it + * correctly in the IRQ demux routine. + */ +static irq_table pci_sec_d_irq_table[] = { +/* Pin: A B C D */ + { INTA, INTA, INTA, INTD }, /* PCI Slot J1 */ + { INTA, INTA, INTD, INTA }, /* PCI Slot J5 */ + { INTE, INTE, INTE, INTE }, /* P2P Bridge */ +}; + +static irq_table pci_sec_f_irq_table[] = { +/* Pin: A B C D */ + { INTA, INTB, INTC, INTD }, /* PCI Slot J1 */ + { INTB, INTC, INTD, INTA }, /* PCI Slot J5 */ + { INTE, INTE, INTE, INTE }, /* P2P Bridge */ +}; + +static int __init +iq80310_sec_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +{ + irq_table *pci_irq_table; + + BUG_ON(pin < 1 || pin > 4); + + if (!system_rev) { + pci_irq_table = pci_sec_d_irq_table; + } else { + pci_irq_table = pci_sec_f_irq_table; + } + + return PCI_IRQ_TABLE_LOOKUP(0, 2); +} + +static int iq80310_pri_host; + +static int iq80310_setup(int nr, struct pci_sys_data *sys) +{ + switch (nr) { + case 0: + if (!iq80310_pri_host) + return 0; + + sys->map_irq = iq80310_pri_map_irq; + break; + + case 1: + sys->map_irq = iq80310_sec_map_irq; + break; + + default: + return 0; + } + + return iop310_setup(nr, sys); +} + +static void iq80310_preinit(void) +{ + iq80310_pri_host = *(volatile u32 *)IQ80310_BACKPLANE & 1; + + printk(KERN_INFO "PCI: IQ80310 is a%s\n", + iq80310_pri_host ? " system controller" : "n agent"); + + iop310_init(); +} + +static struct hw_pci iq80310_pci __initdata = { + .swizzle = pci_std_swizzle, + .nr_controllers = 2, + .setup = iq80310_setup, + .scan = iop310_scan_bus, + .preinit = iq80310_preinit, +}; + +static int __init iq80310_pci_init(void) +{ + if (machine_is_iq80310()) + pci_common_init(&iq80310_pci); + return 0; +} + +subsys_initcall(iq80310_pci_init); diff -Nru a/arch/arm/mach-iop3xx/iq80310-time.c b/arch/arm/mach-iop3xx/iq80310-time.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iq80310-time.c Thu Apr 17 19:22:48 2003 @@ -0,0 +1,134 @@ +/* + * linux/arch/arm/mach-iop3xx/time-iq80310.c + * + * Timer functions for IQ80310 onboard timer + * + * Author: Nicolas Pitre + * Copyright: (C) 2001 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + */ +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +static void iq80310_write_timer (u_long val) +{ + volatile u_char *la0 = (volatile u_char *)IQ80310_TIMER_LA0; + volatile u_char *la1 = (volatile u_char *)IQ80310_TIMER_LA1; + volatile u_char *la2 = (volatile u_char *)IQ80310_TIMER_LA2; + + *la0 = val; + *la1 = val >> 8; + *la2 = (val >> 16) & 0x3f; +} + +static u_long iq80310_read_timer (void) +{ + volatile u_char *la0 = (volatile u_char *)IQ80310_TIMER_LA0; + volatile u_char *la1 = (volatile u_char *)IQ80310_TIMER_LA1; + volatile u_char *la2 = (volatile u_char *)IQ80310_TIMER_LA2; + volatile u_char *la3 = (volatile u_char *)IQ80310_TIMER_LA3; + u_long b0, b1, b2, b3, val; + + b0 = *la0; b1 = *la1; b2 = *la2; b3 = *la3; + b0 = (((b0 & 0x40) >> 1) | (b0 & 0x1f)); + b1 = (((b1 & 0x40) >> 1) | (b1 & 0x1f)); + b2 = (((b2 & 0x40) >> 1) | (b2 & 0x1f)); + b3 = (b3 & 0x0f); + val = ((b0 << 0) | (b1 << 6) | (b2 << 12) | (b3 << 18)); + return val; +} + +/* + * IRQs are disabled before entering here from do_gettimeofday(). + * Note that the counter may wrap. When it does, 'elapsed' will + * be small, but we will have a pending interrupt. + */ +static unsigned long iq80310_gettimeoffset (void) +{ + unsigned long elapsed, usec; + unsigned int stat1, stat2; + + stat1 = *(volatile u8 *)IQ80310_INT_STAT; + elapsed = iq80310_read_timer(); + stat2 = *(volatile u8 *)IQ80310_INT_STAT; + + /* + * If an interrupt was pending before we read the timer, + * we've already wrapped. Factor this into the time. + * If an interrupt was pending after we read the timer, + * it may have wrapped between checking the interrupt + * status and reading the timer. Re-read the timer to + * be sure its value is after the wrap. + */ + if (stat1 & 1) + elapsed += LATCH; + else if (stat2 & 1) + elapsed = LATCH + iq80310_read_timer(); + + /* + * Now convert them to usec. + */ + usec = (unsigned long)(elapsed * (tick_nsec / 1000))/LATCH; + + return usec; +} + + +static void iq80310_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs) +{ + volatile u_char *timer_en = (volatile u_char *)IQ80310_TIMER_EN; + + /* clear timer interrupt */ + *timer_en &= ~2; + *timer_en |= 2; + + /* + * AHEM..HACK + * + * Since the timer interrupt is cascaded through the CPLD and + * the 80312 and the demux code calls do_IRQ, the irq count is + * going to be atleast 2 when we get here and this will cause the + * kernel to increment the system tick counter even if we're + * idle. This causes it to look like there's always 100% system + * time, which is not the case. To get around it, we just decrement + * the IRQ count before calling do_timer. We increment it again + * b/c otherwise it will go negative and than bad things happen. + * + * -DS + */ + do_timer(regs); +} + +extern unsigned long (*gettimeoffset)(void); + +static struct irqaction timer_irq = { + .name = "timer", + .handler = iq80310_timer_interrupt, +}; + + +void __init time_init(void) +{ + volatile u_char *timer_en = (volatile u_char *)IQ80310_TIMER_EN; + + gettimeoffset = iq80310_gettimeoffset; + setup_irq(IRQ_IQ80310_TIMER, &timer_irq); + *timer_en = 0; + iq80310_write_timer(LATCH); + *timer_en |= 2; + *timer_en |= 1; +} diff -Nru a/arch/arm/mach-iop3xx/iq80321-pci.c b/arch/arm/mach-iop3xx/iq80321-pci.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/iq80321-pci.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,98 @@ +/* + * arch/arm/mach-iop3xx/iq80321-pci.c + * + * PCI support for the Intel IQ80321 reference board + * + * Author: Rory Bolt + * Copyright (C) 2002 Rory Bolt + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include +#include + +#include +#include +#include +#include + +/* + * The following macro is used to lookup irqs in a standard table + * format for those systems that do not already have PCI + * interrupts properly routed. We assume 1 <= pin <= 4 + */ +#define PCI_IRQ_TABLE_LOOKUP(minid,maxid) \ +({ int _ctl_ = -1; \ + unsigned int _idsel = idsel - minid; \ + if (_idsel <= maxid) \ + _ctl_ = pci_irq_table[_idsel][pin-1]; \ + _ctl_; }) + +#define INTA IRQ_IQ80321_INTA +#define INTB IRQ_IQ80321_INTB +#define INTC IRQ_IQ80321_INTC +#define INTD IRQ_IQ80321_INTD + +#define INTE IRQ_IQ80321_I82544 + +typedef u8 irq_table[4]; + +static irq_table pci_irq_table[] = { + /* + * PCI IDSEL/INTPIN->INTLINE + * A B C D + */ + {INTE, INTE, INTE, INTE}, /* Gig-E */ + {INTD, INTC, INTD, INTA}, /* Unused */ + {INTC, INTD, INTA, INTB}, /* PCI-X Slot */ +}; + +static inline int __init +iq80321_map_irq(struct pci_dev *dev, u8 idsel, u8 pin) +{ + BUG_ON(pin < 1 || pin > 4); + + return PCI_IRQ_TABLE_LOOKUP(2, 3); +} + +static int iq80321_setup(int nr, struct pci_sys_data *sys) +{ + switch (nr) { + case 0: + sys->map_irq = iq80321_map_irq; + break; + default: + return 0; + } + + return iop321_setup(nr, sys); +} + +static void iq80321_preinit(void) +{ + iop321_init(); +} + +static struct hw_pci iq80321_pci __initdata = { + .swizzle = pci_std_swizzle, + .nr_controllers = 1, + .setup = iq80321_setup, + .scan = iop321_scan_bus, + .preinit = iq80321_preinit, +}; + +static int __init iq80321_pci_init(void) +{ + if (machine_is_iq80321()) + pci_common_init(&iq80321_pci); + return 0; +} + +subsys_initcall(iq80321_pci_init); + + + + diff -Nru a/arch/arm/mach-iop3xx/mm-321.c b/arch/arm/mach-iop3xx/mm-321.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/mm-321.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,64 @@ +/* + * linux/arch/arm/mach-iop3xx/mm.c + * + * Low level memory intialization for IOP321 based systems + * + * Author: Rory Bolt + * Copyright (C) 2002 Rory Bolt + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ + +#include +#include + +#include +#include +#include + +#include +#include + + +/* + * Standard IO mapping for all IOP321 based systems + */ +static struct map_desc iop80321_std_desc[] __initdata = { + /* virtual physical length type */ + + /* mem mapped registers */ + { 0xfff00000, 0xffffe000, 0x00002000, MT_DEVICE }, + + /* PCI IO space */ + { 0xfe000000, 0x90000000, 0x00020000, MT_DEVICE } +}; + +void __init iop321_map_io(void) +{ + iotable_init(iop80321_std_desc, ARRAY_SIZE(iop80321_std_desc)); +} + +/* + * IQ80321 specific IO mappings + * + * We use RedBoot's setup for the onboard devices. + */ +#ifdef CONFIG_ARCH_IQ80321 +static struct map_desc iq80321_io_desc[] __initdata = { + /* virtual physical length type */ + + /* on-board devices */ + { 0xfe800000, 0xfe800000, 0x00100000, MT_DEVICE } +}; + +void __init iq80321_map_io(void) +{ + iop321_map_io(); + + iotable_init(iq80321_io_desc, ARRAY_SIZE(iq80321_io_desc)); +} +#endif // CONFIG_ARCH_IQ80321 diff -Nru a/arch/arm/mach-iop3xx/mm.c b/arch/arm/mach-iop3xx/mm.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/mm.c Thu Apr 17 19:22:44 2003 @@ -0,0 +1,70 @@ +/* + * linux/arch/arm/mach-iop3xx/mm.c + * + * Low level memory initialization for IOP310 based systems + * + * Author: Nicolas Pitre + * + * Copyright 2000-2001 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + */ +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + +#ifdef CONFIG_IOP310_MU +#include "message.h" +#endif + +/* + * Standard IO mapping for all IOP310 based systems + */ +static struct map_desc iop80310_std_desc[] __initdata = { + /* virtual physical length type */ + // IOP310 Memory Mapped Registers + { 0xe8001000, 0x00001000, 0x00001000, MT_DEVICE }, + // PCI I/O Space + { 0xfe000000, 0x90000000, 0x00020000, MT_DEVICE } +}; + +void __init iop310_map_io(void) +{ + iotable_init(iop80310_std_desc, ARRAY_SIZE(iop80310_std_desc)); +} + +/* + * IQ80310 specific IO mappings + */ +#ifdef CONFIG_ARCH_IQ80310 +static struct map_desc iq80310_io_desc[] __initdata = { + /* virtual physical length type */ + // IQ80310 On-Board Devices + { 0xfe800000, 0xfe800000, 0x00100000, MT_DEVICE } +}; + +void __init iq80310_map_io(void) +{ +#ifdef CONFIG_IOP310_MU + /* acquiring 1MB of memory aligned on 1MB boundary for MU */ + mu_mem = __alloc_bootmem(0x100000, 0x100000, 0); +#endif + + iop310_map_io(); + + iotable_init(iq80310_io_desc, ARRAY_SIZE(iq80310_io_desc)); +} +#endif // CONFIG_ARCH_IQ80310 + diff -Nru a/arch/arm/mach-iop3xx/xs80200-irq.c b/arch/arm/mach-iop3xx/xs80200-irq.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/arm/mach-iop3xx/xs80200-irq.c Thu Apr 17 19:22:47 2003 @@ -0,0 +1,65 @@ +/* + * linux/arch/arm/mach-iop3xx/xs80200-irq.c + * + * Generic IRQ handling for the XS80200 XScale core. + * + * Author: Nicolas Pitre + * Copyright: (C) 2001 MontaVista Software Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include +#include + +#include +#include +#include + +#include + +static void xs80200_irq_mask (unsigned int irq) +{ + unsigned long intctl; + asm ("mrc p13, 0, %0, c0, c0, 0" : "=r" (intctl)); + switch (irq) { + case IRQ_XS80200_BCU: intctl &= ~(1<<3); break; + case IRQ_XS80200_PMU: intctl &= ~(1<<2); break; + case IRQ_XS80200_EXTIRQ: intctl &= ~(1<<1); break; + case IRQ_XS80200_EXTFIQ: intctl &= ~(1<<0); break; + } + asm ("mcr p13, 0, %0, c0, c0, 0" : : "r" (intctl)); +} + +static void xs80200_irq_unmask (unsigned int irq) +{ + unsigned long intctl; + asm ("mrc p13, 0, %0, c0, c0, 0" : "=r" (intctl)); + switch (irq) { + case IRQ_XS80200_BCU: intctl |= (1<<3); break; + case IRQ_XS80200_PMU: intctl |= (1<<2); break; + case IRQ_XS80200_EXTIRQ: intctl |= (1<<1); break; + case IRQ_XS80200_EXTFIQ: intctl |= (1<<0); break; + } + asm ("mcr p13, 0, %0, c0, c0, 0" : : "r" (intctl)); +} + +static struct irqchip xs80200_chip = { + .ack = xs80200_irq_mask, + .mask = xs80200_irq_mask, + .unmask = xs80200_irq_unmask, +}; + +void __init xs80200_init_irq(void) +{ + unsigned int i; + + asm("mcr p13, 0, %0, c0, c0, 0" : : "r" (0)); + + for (i = 0; i < NR_XS80200_IRQS; i++) { + set_irq_chip(i, &xs80200_chip); + set_irq_handler(i, do_level_IRQ); + set_irq_flags(i, IRQF_VALID); + } +} diff -Nru a/arch/arm/mach-sa1100/badge4.c b/arch/arm/mach-sa1100/badge4.c --- a/arch/arm/mach-sa1100/badge4.c Thu Apr 17 19:22:43 2003 +++ b/arch/arm/mach-sa1100/badge4.c Thu Apr 17 19:22:43 2003 @@ -186,11 +186,26 @@ {0xf4000000, 0x48000000, 0x00100000, MT_DEVICE } /* SA-1111 */ }; +static void +badge4_uart_pm(struct uart_port *port, u_int state, u_int oldstate) +{ + if (!state) { + Ser1SDCR0 |= SDCR0_UART; + } +} + +static struct sa1100_port_fns badge4_port_fns __initdata = { + //.get_mctrl = badge4_get_mctrl, + //.set_mctrl = badge4_set_mctrl, + .pm = badge4_uart_pm, +}; + static void __init badge4_map_io(void) { sa1100_map_io(); iotable_init(badge4_io_desc, ARRAY_SIZE(badge4_io_desc)); + sa1100_register_uart_fns(&badge4_port_fns); sa1100_register_uart(0, 3); sa1100_register_uart(1, 1); } diff -Nru a/arch/arm/mm/copypage-xscale.S b/arch/arm/mm/copypage-xscale.S --- a/arch/arm/mm/copypage-xscale.S Thu Apr 17 19:22:49 2003 +++ b/arch/arm/mm/copypage-xscale.S Thu Apr 17 19:22:49 2003 @@ -39,11 +39,25 @@ mov r0, r1 bl map_page_minicache mov r1, r5 - mov lr, #PAGE_SZ/32 + mov lr, #PAGE_SZ/64-1 -1: mov ip, r1 - ldrd r2, [r0], #8 + /* + * Strangely enough, best performance is achieved + * when prefetching destination as well. (NP) + */ + pld [r0, #0] + pld [r0, #32] + pld [r1, #0] + pld [r1, #32] + +1: pld [r0, #64] + pld [r0, #96] + pld [r1, #64] + pld [r1, #96] + +2: ldrd r2, [r0], #8 ldrd r4, [r0], #8 + mov ip, r1 strd r2, [r1], #8 ldrd r2, [r0], #8 strd r4, [r1], #8 @@ -51,9 +65,21 @@ strd r2, [r1], #8 strd r4, [r1], #8 mcr p15, 0, ip, c7, c10, 1 @ clean D line + ldrd r2, [r0], #8 mcr p15, 0, ip, c7, c6, 1 @ invalidate D line + ldrd r4, [r0], #8 + mov ip, r1 + strd r2, [r1], #8 + ldrd r2, [r0], #8 + strd r4, [r1], #8 + ldrd r4, [r0], #8 + strd r2, [r1], #8 + strd r4, [r1], #8 + mcr p15, 0, ip, c7, c10, 1 @ clean D line subs lr, lr, #1 - bne 1b + mcr p15, 0, ip, c7, c6, 1 @ invalidate D line + bgt 1b + beq 2b ldmfd sp!, {r4, r5, pc} @@ -64,7 +90,6 @@ * r1 = virtual user address of ultimate destination page */ ENTRY(xscale_mc_clear_user_page) - str lr, [sp, #-4]! mov r1, #PAGE_SZ/32 mov r2, #0 mov r3, #0 @@ -74,10 +99,10 @@ strd r2, [r0], #8 strd r2, [r0], #8 mcr p15, 0, ip, c7, c10, 1 @ clean D line - mcr p15, 0, ip, c7, c6, 1 @ invalidate D line subs r1, r1, #1 + mcr p15, 0, ip, c7, c6, 1 @ invalidate D line bne 1b - ldr pc, [sp], #4 + mov pc, lr __INIT diff -Nru a/arch/arm/mm/extable.c b/arch/arm/mm/extable.c --- a/arch/arm/mm/extable.c Thu Apr 17 19:22:46 2003 +++ b/arch/arm/mm/extable.c Thu Apr 17 19:22:46 2003 @@ -1,7 +1,7 @@ /* * linux/arch/arm/mm/extable.c */ -#include +#include #include const struct exception_table_entry * @@ -23,4 +23,15 @@ last = mid-1; } return NULL; +} + +int fixup_exception(struct pt_regs *regs) +{ + const struct exception_table_entry *fixup; + + fixup = search_exception_tables(instruction_pointer(regs)); + if (fixup) + regs->ARM_pc = fixup->fixup; + + return fixup != NULL; } diff -Nru a/arch/arm/mm/fault-common.c b/arch/arm/mm/fault-common.c --- a/arch/arm/mm/fault-common.c Thu Apr 17 19:22:47 2003 +++ b/arch/arm/mm/fault-common.c Thu Apr 17 19:22:47 2003 @@ -25,6 +25,7 @@ #include #include +#include #include "fault.h" @@ -103,20 +104,11 @@ __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, struct pt_regs *regs) { - const struct exception_table_entry *fixup; - /* * Are we prepared to handle this kernel fault? */ - fixup = search_exception_tables(instruction_pointer(regs)); - if (fixup) { -#ifdef DEBUG - printk(KERN_DEBUG "%s: Exception at [<%lx>] addr=%lx (fixup: %lx)\n", - current->comm, regs->ARM_pc, addr, fixup->fixup); -#endif - regs->ARM_pc = fixup->fixup; + if (fixup_exception(regs)) return; - } /* * No handler, we'll have to terminate things with extreme prejudice. diff -Nru a/arch/arm/mm/proc-xscale.S b/arch/arm/mm/proc-xscale.S --- a/arch/arm/mm/proc-xscale.S Thu Apr 17 19:22:49 2003 +++ b/arch/arm/mm/proc-xscale.S Thu Apr 17 19:22:49 2003 @@ -654,6 +654,9 @@ cpu_80200_name: .asciz "XScale-80200" +cpu_80321_name: + .asciz "XScale-IOP80321" + cpu_pxa250_name: .asciz "XScale-PXA250" @@ -747,6 +750,22 @@ .long v4wbi_tlb_fns .long xscale_mc_user_fns .size __80200_proc_info, . - __80200_proc_info + + .type __80321_proc_info,#object +__80321_proc_info: + .long 0x69052420 + .long 0xfffffff0 + .long 0x00000c0e + b __xscale_setup + .long cpu_arch_name + .long cpu_elf_name + .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP + .long cpu_80321_name + .long xscale_processor_functions + .long v4wbi_tlb_fns + .long xscale_mc_user_fns + .long xscale_cache_fns + .size __80321_proc_info, . - __80321_proc_info .type __pxa250_proc_info,#object __pxa250_proc_info: diff -Nru a/arch/arm/nwfpe/fpmodule.h b/arch/arm/nwfpe/fpmodule.h --- a/arch/arm/nwfpe/fpmodule.h Thu Apr 17 19:22:48 2003 +++ b/arch/arm/nwfpe/fpmodule.h Thu Apr 17 19:22:48 2003 @@ -17,21 +17,15 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + 27/03/03 Ian Molton Clean up CONFIG_CPU */ #ifndef __FPMODULE_H__ #define __FPMODULE_H__ -#include - -#ifdef CONFIG_CPU_32 #define REG_ORIG_R0 17 #define REG_CPSR 16 -#else -#define REG_ORIG_R0 16 -#define REG_CPSR 15 -#endif - #define REG_PC 15 #define REG_LR 14 #define REG_SP 13 diff -Nru a/arch/arm/vmlinux-armo.lds.in b/arch/arm/vmlinux-armo.lds.in --- a/arch/arm/vmlinux-armo.lds.in Thu Apr 17 19:22:49 2003 +++ b/arch/arm/vmlinux-armo.lds.in Thu Apr 17 19:22:49 2003 @@ -14,7 +14,9 @@ .init : { /* Init code and data */ _stext = .; __init_begin = .; + _sinittext = .; *(.init.text) + _einittext = .; __proc_info_begin = .; *(.proc.info) __proc_info_end = .; diff -Nru a/arch/arm/vmlinux-armv.lds.in b/arch/arm/vmlinux-armv.lds.in --- a/arch/arm/vmlinux-armv.lds.in Thu Apr 17 19:22:45 2003 +++ b/arch/arm/vmlinux-armv.lds.in Thu Apr 17 19:22:45 2003 @@ -18,7 +18,9 @@ .init : { /* Init code and data */ _stext = .; __init_begin = .; + _sinittext = .; *(.init.text) + _einittext = .; __proc_info_begin = .; *(.proc.info) __proc_info_end = .; diff -Nru a/arch/h8300/Kconfig b/arch/h8300/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/Kconfig Thu Apr 17 19:22:50 2003 @@ -0,0 +1,427 @@ +# +# For a description of the syntax of this configuration file, +# see Documentation/kbuild/config-language.txt. +# + +mainmenu "uClinux/h8300 (w/o MMU) Kernel Configuration" + +config MMU + bool + default n + +config SWAP + bool + default n + +config FPU + bool + default n + +config UID16 + bool + default y + +config RWSEM_GENERIC_SPINLOCK + bool + default y + +config RWSEM_XCHGADD_ALGORITHM + bool + default n + + +source "init/Kconfig" + +menu "Processor type and features" + +choice + prompt "H8/300 platform" + default H8300H_GENERIC + +config H8300H_GENERIC + bool "Generic" + help + H8/300H CPU Generic Hardware Support + +config H8300H_AKI3068NET + bool "AE-3068/69" + help + AKI-H8/3068F / AKI-H8/3069F Flashmicom LAN Board Suppot + More Information. (Japanese Only) + + AE-3068/69 Evalution Board Support + More Information. + + +config H8300H_H8MAX + bool "H8MAX" + help + H8MAX Evalution Board Suooprt + More Information. (Japanese Only) + + +config H8300H_SIM + bool "H8/300H Simulator" + help + GDB Simulator Support + More Information. + arch/h8300/Doc/simulator.txt + +endchoice + +choice + prompt "CPU Selection" + +config H83002 + bool "H8/3001,3002,3003" + depends on H8300H_GENERIC + +config H83007 + bool "H8/3006,3007" + depends on (H8300H_GENERIC || H8300H_SIM) + +config H83048 + bool "H8/3044,3045,3046,3047,3048,3052" + depends on H8300H_GENERIC + +config H83068 + bool "H8/3065,3066,3067,3068,3069" + depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX) + +endchoice + +config CPU_H8300H + bool + depends on (H8300H_GENERIC || H8300H_AKI3068NET || H8300H_H8MAX || H8300H_SIM) + default y + +config CPU_CLOCK + int "CPU Clock Frequency (/1KHz)" + default "20000" if H8300H_AKI3068NET + default "25000" if H8300H_H8MAX + default "16000" if H8300H_SIM + default "16000" if H8300H_GENERIC + help + CPU Clock Frequency divide to 1000 +choice + prompt "Kernel executes from" + ---help--- + Choose the memory type that the kernel will be running in. + +config RAMKERNEL + bool "RAM" + help + The kernel will be resident in RAM when running. + +config ROMKERNEL + bool "ROM" + help + The kernel will be resident in FLASH/ROM when running. + +endchoice + +config DEFAULT_CMDLINE + bool + help + buildin kernel commandline enabled. + +config KERNEL_COMMAND + string + help + buildin kernel commandline strings. + +endmenu + +menu "Executable file formats" + +config KCORE_AOUT + bool + default y + +config KCORE_ELF + default y + +config BINFMT_FLAT + tristate "Kernel support for flat binaries" + help + Support uClinux FLAT format binaries. + +endmenu + +source "drivers/block/Kconfig" + + +menu "ATA/IDE/MFM/RLL support" + +config IDE + tristate "ATA/ATAPI/MFM/RLL device support" + ---help--- + If you say Y here, your kernel will be able to manage low cost mass + storage units such as ATA/(E)IDE and ATAPI units. The most common + cases are IDE hard drives and ATAPI CD-ROM drives. + + It only makes sense to choose this option if your board actually + has an IDE interface. If unsure, say N. + +source "drivers/ide/Kconfig" + +endmenu + +source "net/Kconfig" + + +menu "Network device support" + depends on NET + +config NETDEVICES + bool "Network device support" + ---help--- + You can say N here if you don't intend to connect your Linux box to + any other computer at all or if all your connections will be over a + telephone line with a modem either via UUCP (UUCP is a protocol to + forward mail and news between unix hosts over telephone lines; read + the UUCP-HOWTO, available from + ) or dialing up a shell + account or a BBS, even using term (term is a program which gives you + almost full Internet connectivity if you have a regular dial up + shell account on some Internet connected Unix computer. Read + ). + + You'll have to say Y if your computer contains a network card that + you want to use under Linux (make sure you know its name because you + will be asked for it and read the Ethernet-HOWTO (especially if you + plan to use more than one network card under Linux)) or if you want + to use SLIP (Serial Line Internet Protocol is the protocol used to + send Internet traffic over telephone lines or null modem cables) or + CSLIP (compressed SLIP) or PPP (Point to Point Protocol, a better + and newer replacement for SLIP) or PLIP (Parallel Line Internet + Protocol is mainly used to create a mini network by connecting the + parallel ports of two local machines) or AX.25/KISS (protocol for + sending Internet traffic over amateur radio links). + + Make sure to read the NET-3-HOWTO. Eventually, you will have to read + Olaf Kirch's excellent and free book "Network Administrator's + Guide", to be found in . If + unsure, say Y. + +endmenu + +source "net/ax25/Kconfig" + +source "net/irda/Kconfig" + +source "drivers/isdn/Kconfig" + +source "drivers/telephony/Kconfig" + +# +# input before char - char/joystick depends on it. As does USB. +# +source "drivers/input/Kconfig" + +# +# Character device configuration +# + +menu "Character devices" + +config VT + bool "Virtual terminal" + requires INPUT=y + ---help--- + If you say Y here, you will get support for terminal devices with + display and keyboard devices. These are called "virtual" because you + can run several virtual terminals (also called virtual consoles) on + one physical terminal. This is rather useful, for example one + virtual terminal can collect system messages and warnings, another + one can be used for a text-mode user session, and a third could run + an X session, all in parallel. Switching between virtual terminals + is done with certain key combinations, usually Alt-. + + The setterm command ("man setterm") can be used to change the + properties (such as colors or beeping) of a virtual terminal. The + man page console_codes(4) ("man console_codes") contains the special + character sequences that can be used to change those properties + directly. The fonts used on virtual terminals can be changed with + the setfont ("man setfont") command and the key bindings are defined + with the loadkeys ("man loadkeys") command. + + You need at least one virtual terminal device in order to make use + of your keyboard and monitor. Therefore, only people configuring an + embedded system would want to say N here in order to save some + memory; the only way to log into such a system is then via a serial + or network connection. + + If unsure, say Y, or else you won't be able to do much with your new + shiny Linux system :-) + +config VT_CONSOLE + bool "Support for console on virtual terminal" + depends on VT + ---help--- + The system console is the device which receives all kernel messages + and warnings and which allows logins in single user mode. If you + answer Y here, a virtual terminal (the device used to interact with + a physical terminal) can be used as system console. This is the most + common mode of operations, so you should say Y here unless you want + the kernel messages be output only to a serial port (in which case + you should say Y to "Console on serial port", below). + + If you do say Y here, by default the currently visible virtual + terminal (/dev/tty0) will be used as system console. You can change + that with a kernel command line option such as "console=tty3" which + would use the third virtual terminal as system console. (Try "man + bootparam" or see the documentation of your boot loader (lilo or + loadlin) about how to pass options to the kernel at boot time.) + + If unsure, say Y. + +config HW_CONSOLE + bool + depends on VT && !S390 && !UM + default y + +config SH_SCI + tristate "Serial (SCI) support" + help + Selecting this option will allow the Linux kernel to transfer data + over SCI (Serial Communication Interface) and/or SCIF (Serial + Communication Interface with FIFO) which are built into the Hitachi + SuperH processor. The option provides 1 to 3 (depending + on the CPU model) standard Linux tty devices, /dev/ttySC[012]; one + of these is normally used as the system console. + + If in doubt, press "y". + +config SERIAL_CONSOLE + bool "Support for console on serial port" + depends on SERIAL=y || SH_SCI=y + ---help--- + If you say Y here, it will be possible to use a serial port as the + system console (the system console is the device which receives all + kernel messages and warnings and which allows logins in single user + mode). This could be useful if some terminal or printer is connected + to that serial port. + + Even if you say Y here, the currently visible virtual console + (/dev/tty0) will still be used as the system console by default, but + you can alter that using a kernel command line option such as + "console=ttyS1". (Try "man bootparam" or see the documentation of + your boot loader (lilo or loadlin) about how to pass options to the + kernel at boot time.) + + If you don't have a VGA card installed and you say Y here, the + kernel will automatically use the first serial line, /dev/ttyS0, as + system console. + + If unsure, say N. + +config UNIX98_PTYS + bool "Unix98 PTY support" + ---help--- + A pseudo terminal (PTY) is a software device consisting of two + halves: a master and a slave. The slave device behaves identical to + a physical terminal; the master device is used by a process to + read data from and write data to the slave, thereby emulating a + terminal. Typical programs for the master side are telnet servers + and xterms. + + Linux has traditionally used the BSD-like names /dev/ptyxx for + masters and /dev/ttyxx for slaves of pseudo terminals. This scheme + has a number of problems. The GNU C library glibc 2.1 and later, + however, supports the Unix98 naming standard: in order to acquire a + pseudo terminal, a process opens /dev/ptmx; the number of the pseudo + terminal is then made available to the process and the pseudo + terminal slave can be accessed as /dev/pts/. What was + traditionally /dev/ttyp2 will then be /dev/pts/2, for example. + + The entries in /dev/pts/ are created on the fly by a virtual + file system; therefore, if you say Y here you should say Y to + "/dev/pts file system for Unix98 PTYs" as well. + + If you want to say Y here, you need to have the C library glibc 2.1 + or later (equal to libc-6.1, check with "ls -l /lib/libc.so.*"). + Read the instructions in pertaining to + pseudo terminals. It's safe to say N. + +config UNIX98_PTY_COUNT + int "Maximum number of Unix98 PTYs in use (0-2048)" + depends on UNIX98_PTYS + default "256" + help + The maximum number of Unix98 PTYs that can be used at any one time. + The default is 256, and should be enough for desktop systems. Server + machines which support incoming telnet/rlogin/ssh connections and/or + serve several X terminals may want to increase this: every incoming + connection and every xterm uses up one PTY. + + When not in use, each additional set of 256 PTYs occupy + approximately 8 KB of kernel memory on 32-bit architectures. + +endmenu + +#source drivers/misc/Config.in +source "drivers/media/Kconfig" + +source "fs/Kconfig" + +source "drivers/usb/Kconfig" + +source "net/bluetooth/Kconfig" + + +menu "Kernel hacking" + +config FULLDEBUG + bool "Full Symbolic/Source Debugging support" + help + Enable debugging symbols on kernel build. + +config MAGIC_SYSRQ + bool "Magic SysRq key" + help + Enables console device to interprent special characters as + commands to dump state information. + +config HIGHPROFILE + bool "Use fast second timer for profiling" + help + Use a fast secondary clock to produce profiling information. + +config NO_KERNEL_MSG + bool "Suppress Kernel BUG Messages" + help + Do not output any debug BUG messages within the kernel. + +config GDB_MAGICPRINT + bool "Message Output for GDB MagicPrint service" + depends on H8300H_SIM + help + kernel messages output useing MagicPrint service from GDB + +config SYSCALL_PRINT + bool "SystemCall trace print" + help + outout history of systemcall + +config GDB_DEBUG + bool "Use gdb stub" + depends on !H8300H_SIM + help + gdb stub exception support + +config CONFIG_SH_STANDARD_BIOS + bool "Use gdb protocol serial console" + depends on !H8300H_SIM + help + serial console output using GDB protocol. + Require eCos/RedBoot + +endmenu + +source "security/Kconfig" + +source "crypto/Kconfig" + +source "lib/Kconfig" + diff -Nru a/arch/h8300/Makefile b/arch/h8300/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,61 @@ +# +# arch/h8300/Makefile +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# (C) Copyright 2002, Yoshinori Sato +# +ifndef include-config +-include $(TOPDIR)/.config +endif + +platform-$(CONFIG_CPU_H8300H) := h8300h +PLATFORM := $(platform-y) + +board-$(CONFIG_H8300H_GENERIC) := generic +board-$(CONFIG_H8300H_AKI3068NET) := ucsimm +board-$(CONFIG_H8300H_H8MAX) := ucdimm +board-$(CONFIG_H8300H_SIM) := generic +BOARD := $(board-y) + +model-$(CONFIG_RAMKERNEL) := ram +model-$(CONFIG_ROMKERNEL) := rom +MODEL := $(model-y) + +cflags-$(CONFIG_CPU_H8300H) := -mh +ldflags-$(CONFIG_CPU_H8300H) := -mh8300helf + +CFLAGS += $(cflags-y) +CFLAGS += -mint32 -fno-builtin +CFLAGS += -O2 -g +CFLAGS += -D__linux__ +CFLAGS += -DUTS_SYSNAME=\"uClinux\" -DTARGET=$(BOARD) +AFLAGS += -DPLATFORM=$(PLATFORM) -DTARGET=$(BOARD) -DMODEL=$(MODEL) $(cflags-y) +LDFLAGS += $(ldflags-y) +LDFLAGS_BLOB := --format binary --oformat elf32-h8300 + +CROSS_COMPILE = h8300-elf- +#HEAD := arch/$(ARCH)/platform/$(platform-y)/$(board-y)/crt0_$(model-y).o +LIBGCC := $(shell $(CROSS-COMPILE)$(CC) $(CFLAGS) -print-libgcc-file-name) + +core-y += arch/$(ARCH)/kernel/ \ + arch/$(ARCH)/mm/ \ + arch/$(ARCH)/platform/$(PLATFORM)/ \ + arch/$(ARCH)/platform/$(PLATFORM)/$(BOARD)/ + +libs-y += arch/$(ARCH)/lib/ $(LIBGCC) + +export MODEL + +archmrproper: + +archclean: + $(call descend arch/$(ARCH), subdirclean) + +prepare: include/asm-$(ARCH)/asm-offsets.h + +include/asm-$(ARCH)/asm-offsets.h: arch/$(ARCH)/kernel/asm-offsets.s \ + include/asm include/linux/version.h + $(call filechk,gen-asm-offsets) diff -Nru a/arch/h8300/README b/arch/h8300/README --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/README Thu Apr 17 19:22:50 2003 @@ -0,0 +1,35 @@ +uClinux-2.4 for H8/300 README +Yoshinori Sato + +* Supported CPU +H8/300H +H8S is planning. + +* Supported Target +1.simulator of GDB + require patches. + +2.AE 3068/AE 3069 + more information + MICROTRONIQUE + Akizuki Denshi Tsusho Ltd. (Japanese Only) + +3.H8MAX + Under development + see http://www.strawbelly-linux.com (Japanese Only) + +* Toolchain Version +gcc-3.1 or higher and patch +see arch/h8300/tools_patch/README +binutils-2.12 or higher +gdb-5.2 or higher +The environment that can compile a h8300-elf binary is necessary. + +* Userland Develop environment +Tempolary used h8300-hms(h8300-coff) Toolchain. +I prepare toolchain corresponding to h8300-elf. + +* A few words of thanks +Porting to H8/300H is support of Information-technology Promotion Agency, Japan. +I thank support. +and All developer/user. diff -Nru a/arch/h8300/defconfig b/arch/h8300/defconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/defconfig Thu Apr 17 19:22:50 2003 @@ -0,0 +1,199 @@ +# +# Automatically generated make config: don't edit +# +# CONFIG_MMU is not set +# CONFIG_SWAP is not set +# CONFIG_FPU is not set +CONFIG_UID16=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y + +# +# General setup +# +# CONFIG_SYSVIPC is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_SYSCTL is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_IKCONFIG is not set + +# +# Loadable module support +# +# CONFIG_MODULES is not set + +# +# Processor type and features +# +# CONFIG_H8300H_GENERIC is not set +# CONFIG_H8300H_AKI3068NET is not set +# CONFIG_H8300H_H8MAX is not set +CONFIG_H8300H_SIM=y +# CONFIG_H83002 is not set +CONFIG_H83007=y +# CONFIG_H83048 is not set +# CONFIG_H83068 is not set +CONFIG_CPU_H8300H=y +CONFIG_CPU_CLOCK=16000 +# CONFIG_RAMKERNEL is not set +CONFIG_ROMKERNEL=y + +# +# Executable file formats +# +CONFIG_KCORE_AOUT=y +CONFIG_BINFMT_FLAT=y + +# +# Block devices +# +# CONFIG_BLK_DEV_FD is not set +# CONFIG_BLK_DEV_LOOP is not set +# CONFIG_BLK_DEV_RAM is not set + +# +# ATA/IDE/MFM/RLL support +# +# CONFIG_IDE is not set + +# +# Networking support +# +# CONFIG_NET is not set + +# +# Amateur Radio support +# +# CONFIG_HAMRADIO is not set + +# +# ISDN subsystem +# + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +# CONFIG_INPUT is not set + +# +# Userland interfaces +# + +# +# Input I/O drivers +# +# CONFIG_GAMEPORT is not set +CONFIG_SOUND_GAMEPORT=y +# CONFIG_SERIO is not set + +# +# Input Device Drivers +# + +# +# Character devices +# +CONFIG_SH_SCI=y +CONFIG_SERIAL_CONSOLE=y +# CONFIG_UNIX98_PTYS is not set + +# +# Multimedia devices +# +# CONFIG_VIDEO_DEV is not set + +# +# File systems +# +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +# CONFIG_JBD is not set +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_MINIX_FS is not set +CONFIG_ROMFS_FS=y +# CONFIG_QUOTA is not set +# CONFIG_AUTOFS_FS is not set +# CONFIG_AUTOFS4_FS is not set + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set + +# +# DOS/FAT/NT Filesystems +# +# CONFIG_FAT_FS is not set +# CONFIG_NTFS_FS is not set + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +# CONFIG_DEVFS_FS is not set +# CONFIG_TMPFS is not set +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_CRAMFS is not set +# CONFIG_VXFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# USB support +# + +# +# Kernel hacking +# +CONFIG_FULLDEBUG=y +# CONFIG_MAGIC_SYSRQ is not set +# CONFIG_HIGHPROFILE is not set +CONFIG_NO_KERNEL_MSG=y +# CONFIG_GDB_MAGICPRINT is not set +# CONFIG_SYSCALL_PRINT is not set + +# +# Security options +# +# CONFIG_SECURITY is not set + +# +# Cryptographic options +# +# CONFIG_CRYPTO is not set + +# +# Library routines +# +# CONFIG_CRC32 is not set diff -Nru a/arch/h8300/kernel/Makefile b/arch/h8300/kernel/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,13 @@ +# +# 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... + +obj-y := process.o traps.o ptrace.o \ + sys_h8300.o time.o semaphore.o signal.o \ + setup.o h8300_ksyms.o gpio.o init_task.o \ + syscalls.o diff -Nru a/arch/h8300/kernel/asm-offsets.c b/arch/h8300/kernel/asm-offsets.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/asm-offsets.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,49 @@ +/* + * This program is used to generate definitions needed by + * assembly language modules. + * + * We use the technique used in the OSF Mach kernel code: + * generate asm statements containing #defines, + * compile this file to assembler, and then extract the + * #defines from the assembly-language output. + */ + +#include +#include +#include +#include +#include +#include +#include + +#define DEFINE(sym, val) \ + asm volatile("\n->" #sym " %0 " #val : : "i" (val)) + +#define BLANK() asm volatile("\n->" : : ) + +int main(void) +{ + /* offsets into the task struct */ + DEFINE(TASK_STATE, offsetof(struct task_struct, state)); + DEFINE(TASK_FLAGS, offsetof(struct task_struct, flags)); + DEFINE(TASK_PTRACE, offsetof(struct task_struct, ptrace)); + DEFINE(TASK_BLOCKED, offsetof(struct task_struct, blocked)); + DEFINE(TASK_THREAD, offsetof(struct task_struct, thread)); + DEFINE(TASK_THREAD_INFO, offsetof(struct task_struct, thread_info)); + DEFINE(TASK_MM, offsetof(struct task_struct, mm)); + DEFINE(TASK_ACTIVE_MM, offsetof(struct task_struct, active_mm)); + + /* offsets into the irq_cpustat_t struct */ + DEFINE(CPUSTAT_SOFTIRQ_PENDING, offsetof(irq_cpustat_t, __softirq_pending)); + + /* offsets into the thread struct */ + DEFINE(THREAD_KSP, offsetof(struct thread_struct, ksp)); + DEFINE(THREAD_USP, offsetof(struct thread_struct, usp)); + DEFINE(THREAD_CCR, offsetof(struct thread_struct, ccr)); + DEFINE(THREAD_VFORK, offsetof(struct thread_struct, vfork_ret)); + + DEFINE(PT_PTRACED, PT_PTRACED); + DEFINE(PT_DTRACE, PT_DTRACE); + + return 0; +} diff -Nru a/arch/h8300/kernel/gpio.c b/arch/h8300/kernel/gpio.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/gpio.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,166 @@ +/* + * linux/arch/h8300/kernel/gpio.c + * + * Yoshinori Sato + * + */ + +/* + * H8/300H Internal I/O Port Management + */ + +#include +#include +#include +#include +#include +#include + +#if defined(CONFIG_H83007) || defined(CONFIG_H83068) +#define P1DDR (unsigned char *)0xfee000 +#define P2DDR (unsigned char *)0xfee001 +#define P3DDR (unsigned char *)0xfee002 +#define P4DDR (unsigned char *)0xfee003 +#define P5DDR (unsigned char *)0xfee004 +#define P6DDR (unsigned char *)0xfee005 +#define P8DDR (unsigned char *)0xfee007 +#define P9DDR (unsigned char *)0xfee008 +#define PADDR (unsigned char *)0xfee009 +#define PBDDR (unsigned char *)0xfee00A +#endif +#if defined(CONFIG_H83002) || defined(CONFIG_H8048) +#define P1DDR (unsigned char *)0xffffc0 +#define P2DDR (unsigned char *)0xffffc1 +#define P3DDR (unsigned char *)0xffffc4 +#define P4DDR (unsigned char *)0xffffc5 +#define P5DDR (unsigned char *)0xffffc8 +#define P6DDR (unsigned char *)0xffffc9 +#define P8DDR (unsigned char *)0xffffcd +#define P9DDR (unsigned char *)0xffffd0 +#define PADDR (unsigned char *)0xffffd1 +#define PBDDR (unsigned char *)0xffffd4 +#endif + +#if defined(P1DDR) + +#define MAX_PORT 11 + +static struct { + unsigned char used; + unsigned char ddr; +} gpio_regs[MAX_PORT]; + +static volatile unsigned char *ddrs[] = { + P1DDR,P2DDR,P3DDR,P4DDR,P5DDR,P6DDR,NULL,P8DDR,P9DDR,PADDR,PBDDR, +}; + +extern char *_platform_gpio_table(int length); + +int h8300_reserved_gpio(int port, unsigned int bits) +{ + unsigned char *used; + if (port < 0 || port >= MAX_PORT) + return -1; + used = &(gpio_regs[port].used); + if ((*used & bits) != 0) + return 0; + *used |= bits; + return 1; +} + +int h8300_free_gpio(int port, unsigned int bits) +{ + unsigned char *used; + if (port < 0 || port >= MAX_PORT) + return -1; + used = &(gpio_regs[port].used); + if ((*used & bits) != bits) + return 0; + *used &= (~bits); + return 1; +} + +int h8300_set_gpio_dir(int port_bit,int dir) +{ + const unsigned char mask[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; + int port = (port_bit >> 8) & 0xff; + int bit = port_bit & 0x07; + if (ddrs[port] == NULL) + return 0; + if (gpio_regs[port].used & mask[bit]) { + if (dir) + gpio_regs[port].ddr |= mask[bit]; + else + gpio_regs[port].ddr &= ~mask[bit]; + *ddrs[port] = gpio_regs[port].ddr; + return 1; + } else + return 0; +} + +int h8300_get_gpio_dir(int port_bit) +{ + const unsigned char mask[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; + int port = (port_bit >> 8) & 0xff; + int bit = port_bit & 0x07; + if (ddrs[port] == NULL) + return 0; + if (gpio_regs[port].used & mask[bit]) { + return (gpio_regs[port].ddr & mask[bit]) != 0; + } else + return -1; +} + +#if defined(CONFIG_PROC_FS) +static char *port_status(int portno) +{ + static char result[10]; + const static char io[2]={'I','O'}; + char *rp; + int c; + unsigned char used,ddr; + + used = gpio_regs[portno].used; + ddr = gpio_regs[portno].ddr; + result[8]='\0'; + rp = result + 7; + for (c = 8; c > 0; c--,rp--,used >>= 1, ddr >>= 1) + if (used & 0x01) + *rp = io[ ddr & 0x01]; + else + *rp = '-'; + return result; +} + +static int gpio_proc_read(char *buf, char **start, off_t offset, int len, int unused) +{ + int c,outlen; + const static char port_name[]="123456789AB"; + outlen = 0; + for (c = 0; c < MAX_PORT; c++) { + if (ddrs[c] == NULL) + continue ; + len = sprintf(buf,"P%c: %s\n",port_name[c],port_status(c)); + buf += len; + outlen += len; + } + return outlen; +} + +static const struct proc_dir_entry proc_gpio = { + 0, 4,"gpio",S_IFREG | S_IRUGO, 1, 0, 0, 0, NULL, gpio_proc_read, +}; +#endif + +int h8300_gpio_init(void) +{ + memcpy(gpio_regs,_platform_gpio_table(sizeof(gpio_regs)),sizeof(gpio_regs)); +#if 0 && defined(CONFIG_PROC_FS) + proc_register(&proc_root,&proc_gpio); +#endif + return 0; +} + +#else +#error Unsuppoted CPU Selection +#endif diff -Nru a/arch/h8300/kernel/h8300_ksyms.c b/arch/h8300/kernel/h8300_ksyms.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/h8300_ksyms.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,113 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +//asmlinkage long long __ashrdi3 (long long, int); +//asmlinkage long long __lshrdi3 (long long, int); +extern char h8300_debug_device[]; + +extern void dump_thread(struct pt_regs *, struct user *); + +/* platform dependent support */ + +EXPORT_SYMBOL(dump_thread); +EXPORT_SYMBOL(strnlen); +EXPORT_SYMBOL(strrchr); +EXPORT_SYMBOL(strstr); +EXPORT_SYMBOL(strchr); +EXPORT_SYMBOL(strcat); +EXPORT_SYMBOL(strlen); +EXPORT_SYMBOL(strcmp); +EXPORT_SYMBOL(strncmp); + +EXPORT_SYMBOL(ip_fast_csum); + +EXPORT_SYMBOL(mach_enable_irq); +EXPORT_SYMBOL(mach_disable_irq); +EXPORT_SYMBOL(kernel_thread); + +/* Networking helper routines. */ +EXPORT_SYMBOL(csum_partial_copy); + +/* The following are special because they're not called + explicitly (the C compiler generates them). Fortunately, + their interface isn't gonna change any time soon now, so + it's OK to leave it out of version control. */ +//EXPORT_SYMBOL_NOVERS(__ashrdi3); +//EXPORT_SYMBOL_NOVERS(__lshrdi3); +EXPORT_SYMBOL_NOVERS(memcpy); +EXPORT_SYMBOL_NOVERS(memset); +EXPORT_SYMBOL_NOVERS(memcmp); +EXPORT_SYMBOL_NOVERS(memscan); +EXPORT_SYMBOL_NOVERS(memmove); + +EXPORT_SYMBOL(get_wchan); + +/* + * libgcc functions - functions that are used internally by the + * compiler... (prototypes are not correct though, but that + * doesn't really matter since they're not versioned). + */ +extern void __gcc_bcmp(void); +extern void __ashldi3(void); +extern void __ashrdi3(void); +extern void __cmpdi2(void); +extern void __divdi3(void); +extern void __divsi3(void); +extern void __lshrdi3(void); +extern void __moddi3(void); +extern void __modsi3(void); +extern void __muldi3(void); +extern void __mulsi3(void); +extern void __negdi2(void); +extern void __ucmpdi2(void); +extern void __udivdi3(void); +extern void __udivmoddi4(void); +extern void __udivsi3(void); +extern void __umoddi3(void); +extern void __umodsi3(void); + + /* gcc lib functions */ +EXPORT_SYMBOL_NOVERS(__gcc_bcmp); +EXPORT_SYMBOL_NOVERS(__ashldi3); +EXPORT_SYMBOL_NOVERS(__ashrdi3); +EXPORT_SYMBOL_NOVERS(__cmpdi2); +EXPORT_SYMBOL_NOVERS(__divdi3); +EXPORT_SYMBOL_NOVERS(__divsi3); +EXPORT_SYMBOL_NOVERS(__lshrdi3); +EXPORT_SYMBOL_NOVERS(__moddi3); +EXPORT_SYMBOL_NOVERS(__modsi3); +EXPORT_SYMBOL_NOVERS(__muldi3); +EXPORT_SYMBOL_NOVERS(__mulsi3); +EXPORT_SYMBOL_NOVERS(__negdi2); +EXPORT_SYMBOL_NOVERS(__ucmpdi2); +EXPORT_SYMBOL_NOVERS(__udivdi3); +EXPORT_SYMBOL_NOVERS(__udivmoddi4); +EXPORT_SYMBOL_NOVERS(__udivsi3); +EXPORT_SYMBOL_NOVERS(__umoddi3); +EXPORT_SYMBOL_NOVERS(__umodsi3); + +EXPORT_SYMBOL_NOVERS(_current_task); + +EXPORT_SYMBOL_NOVERS(is_in_rom); + +EXPORT_SYMBOL_NOVERS(h8300_reserved_gpio) +EXPORT_SYMBOL_NOVERS(h8300_free_gpio) +EXPORT_SYMBOL_NOVERS(h8300_set_gpio_dir) diff -Nru a/arch/h8300/kernel/init_task.c b/arch/h8300/kernel/init_task.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/init_task.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,38 @@ +/* + * linux/arch/h8300/kernel/init_task.c + */ +#include +#include +#include +#include +#include + +#include +#include + +static struct fs_struct init_fs = INIT_FS; +static struct files_struct init_files = INIT_FILES; +static struct signal_struct init_signals = INIT_SIGNALS(init_signals); +static struct sighand_struct init_sighand = INIT_SIGHAND(init_sighand); +struct mm_struct init_mm = INIT_MM(init_mm); + +/* + * Initial task structure. + * + * All other task structs will be allocated on slabs in fork.c + */ +__asm__(".align 4"); +struct task_struct init_task = INIT_TASK(init_task); + + +/* + * Initial thread structure. + * + * We need to make sure that this is 8192-byte aligned due to the + * way process stacks are handled. This is done by having a special + * "init_task" linker map entry.. + */ +union thread_union init_thread_union + __attribute__((__section__(".data.init_task"))) = + { INIT_THREAD_INFO(init_task) }; + diff -Nru a/arch/h8300/kernel/process.c b/arch/h8300/kernel/process.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/process.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,317 @@ +/* + * linux/arch/h8300/kernel/process.c + * + * Yoshinori Sato + * + * Based on: + * + * linux/arch/m68knommu/kernel/process.c + * + * Copyright (C) 1998 D. Jeff Dionne , + * Kenneth Albanowski , + * The Silver Hammer Group, Ltd. + * + * linux/arch/m68k/kernel/process.c + * + * Copyright (C) 1995 Hamish Macdonald + * + * 68060 fixes by Jesper Skov + */ + +/* + * This file handles the architecture-dependent parts of process handling.. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +asmlinkage void ret_from_exception(void); + +/* + * The idle loop on an H8/300.. + */ +#if !defined(CONFIG_H8300H_SIM) +void default_idle(void) +{ + while(1) { + if (need_resched()) { + sti(); + __asm__("sleep"); + cli(); + } + schedule(); + } +} +#else +void default_idle(void) +{ + while(1) { + if (need_resched()) + schedule(); + } +} +#endif +void (*idle)(void) = default_idle; + +/* + * The idle thread. There's no useful work to be + * done, so just try to conserve power and have a + * low exit latency (ie sit in a loop waiting for + * somebody to say that they'd like to reschedule) + */ +void cpu_idle(void) +{ + idle(); +} + +void machine_restart(char * __unused) +{ + cli(); + __asm__("jmp @@0"); +} + +void machine_halt(void) +{ + cli(); + __asm__("sleep"); + for (;;); +} + +void machine_power_off(void) +{ + cli(); + __asm__("sleep"); + for (;;); +} + +void show_regs(struct pt_regs * regs) +{ + printk("\n"); + printk("PC: %08lx Status: %02x\n", + regs->pc, regs->ccr); + printk("ORIG_ER0: %08lx ER0: %08lx ER1: %08lx\n", + regs->orig_er0, regs->er0, regs->er1); + printk("ER2: %08lx ER3: %08lx\n", + regs->er2, regs->er3); + if (!(regs->ccr & 0x10)) + printk("USP: %08lx\n", rdusp()); +} + +/* + * Create a kernel thread + */ +int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags) +{ + long retval; + register long clone_arg asm("er1"); + mm_segment_t fs; + + fs = get_fs(); + set_fs (KERNEL_DS); + clone_arg = flags | CLONE_VM; + + __asm__ __volatile__ ( + "mov.l sp, er2\n\t" + "mov.l %1,er0\n\t" + "mov.l %5,er1\n\t" + "trapa #0\n\t" + "cmp.l sp, er2\n\t" + "beq 1f\n\t" + "mov.l %3, er0\n\t" + "jsr @%4\n\t" + "mov.l %2, er0\n\t" + "trapa #0\n" + "1:\n\t" + "mov.l er0,%0" + : "=r" (retval) + : "i" (__NR_clone), + "i" (__NR_exit), + "r" (arg), + "r" (fn), + "r" (clone_arg) + : "cc", "er0", "er1", "er2", "er3"); + + set_fs (fs); + return retval; +} + +void flush_thread(void) +{ +} + +/* + * "h8300_fork()".. By the time we get here, the + * non-volatile registers have also been saved on the + * stack. We do some ugly pointer stuff here.. (see + * also copy_thread) + */ + +asmlinkage int h8300_fork(struct pt_regs *regs) +{ + return -EINVAL; +} + +asmlinkage int h8300_vfork(struct pt_regs *regs) +{ + struct task_struct *p; + p = do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, rdusp(), regs, 0, NULL, NULL); + return IS_ERR(p) ? PTR_ERR(p) : p->pid; +} + +asmlinkage int h8300_clone(struct pt_regs *regs) +{ + unsigned long clone_flags; + unsigned long newsp; + struct task_struct *p; + + /* syscall2 puts clone_flags in er1 and usp in er2 */ + clone_flags = regs->er1; + newsp = regs->er2; + if (!newsp) + newsp = rdusp(); + p = do_fork(clone_flags & ~CLONE_IDLETASK, newsp, regs, 0, NULL, NULL); + return IS_ERR(p) ? PTR_ERR(p) : p->pid; + +} + +int copy_thread(int nr, unsigned long clone_flags, + unsigned long usp, unsigned long topstk, + struct task_struct * p, struct pt_regs * regs) +{ + struct pt_regs * childregs; + struct switch_stack * childstack, *stack; + unsigned long stack_offset, *retp; + + stack_offset = KTHREAD_SIZE - sizeof(struct pt_regs); + childregs = ((struct pt_regs *) (THREAD_SIZE + (unsigned long) p->thread_info)) - 1; + + *childregs = *regs; + + retp = (unsigned long *) regs-2; + stack = ((struct switch_stack *) retp) - 1; + + childstack = ((struct switch_stack *) childregs) - 1; + *childstack = *stack; + childregs->er0 = 0; + childstack->retpc = (unsigned long) ret_from_exception; + + p->thread.usp = usp; + p->thread.ksp = (unsigned long)childstack; + p->thread.vfork_ret = 0; + + return 0; +} + +/* + * fill in the user structure for a core dump.. + */ +void dump_thread(struct pt_regs * regs, struct user * dump) +{ + struct switch_stack *sw; + +/* changed the size calculations - should hopefully work better. lbt */ + dump->magic = CMAGIC; + dump->start_code = 0; + dump->start_stack = rdusp() & ~(PAGE_SIZE - 1); + dump->u_tsize = ((unsigned long) current->mm->end_code) >> PAGE_SHIFT; + dump->u_dsize = ((unsigned long) (current->mm->brk + + (PAGE_SIZE-1))) >> PAGE_SHIFT; + dump->u_dsize -= dump->u_tsize; + dump->u_ssize = 0; + + dump->u_ar0 = (struct user_regs_struct *)(((int)(&dump->regs)) -((int)(dump))); + sw = ((struct switch_stack *)regs) - 1; + dump->regs.er0 = regs->er0; + dump->regs.er1 = regs->er1; + dump->regs.er2 = regs->er2; + dump->regs.er3 = regs->er3; + dump->regs.er4 = sw->er4; + dump->regs.er5 = sw->er5; + dump->regs.er6 = sw->er6; + dump->regs.orig_er0 = regs->orig_er0; + dump->regs.ccr = regs->ccr; + dump->regs.pc = regs->pc; +} + +/* + * sys_execve() executes a new program. + */ +asmlinkage int sys_execve(char *name, char **argv, char **envp,int dummy,...) +{ + int error; + char * filename; + struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy+4); + + lock_kernel(); + filename = getname(name); + error = PTR_ERR(filename); + if (IS_ERR(filename)) + goto out; + error = do_execve(filename, argv, envp, regs); + putname(filename); +out: + unlock_kernel(); + return error; +} + +/* + * These bracket the sleeping functions.. + */ +extern void scheduling_functions_start_here(void); +extern void scheduling_functions_end_here(void); +#define first_sched ((unsigned long) scheduling_functions_start_here) +#define last_sched ((unsigned long) scheduling_functions_end_here) + +unsigned long thread_saved_pc(struct task_struct *tsk) +{ + struct switch_stack *sw = (struct switch_stack *)(tsk->thread.ksp); + + /* Check whether the thread is blocked in resume() */ + if (sw->retpc > (unsigned long)scheduling_functions_start_here && + sw->retpc < (unsigned long)scheduling_functions_end_here) + return ((unsigned long *)sw->er6)[1]; + else + return sw->retpc; +} + +unsigned long get_wchan(struct task_struct *p) +{ + unsigned long fp, pc; + unsigned long stack_page; + int count = 0; + if (!p || p == current || p->state == TASK_RUNNING) + return 0; + + stack_page = (unsigned long)p; + fp = ((struct switch_stack *)p->thread.ksp)->er6; + do { + if (fp < stack_page+sizeof(struct task_struct) || + fp >= 8184+stack_page) + return 0; + pc = ((unsigned long *)fp)[1]; + /* FIXME: This depends on the order of these functions. */ + if (pc < first_sched || pc >= last_sched) + return pc; + fp = *(unsigned long *) fp; + } while (count++ < 16); + return 0; +} diff -Nru a/arch/h8300/kernel/ptrace.c b/arch/h8300/kernel/ptrace.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/ptrace.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,470 @@ +/* + * linux/arch/h8300/kernel/ptrace.c + * + * Yoshinori Sato + * + * Based on: + * linux/arch/m68k/kernel/ptrace.c + * + * Copyright (C) 1994 by Hamish Macdonald + * Taken from linux/kernel/ptrace.c and modified for M680x0. + * linux/kernel/ptrace.c is by Ross Biro 1/23/92, edited by Linus Torvalds + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of + * this archive for more details. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +/* + * does not yet catch signals sent when the child dies. + * in exit.c or in signal.c. + */ + +/* determines which bits in the SR the user has access to. */ +/* 1 = access 0 = no access */ +#define SR_MASK 0x001f + +/* sets the trace bits. */ +#define TRACE_BITS 0x8000 + +/* Find the stack offset for a register, relative to thread.esp0. */ +#define PT_REG(reg) ((long)&((struct pt_regs *)0)->reg) +#define SW_REG(reg) ((long)&((struct switch_stack *)0)->reg \ + - sizeof(struct switch_stack)) +/* Mapping from PT_xxx to the stack offset at which the register is + saved. Notice that usp has no stack-slot and needs to be treated + specially (see get_reg/put_reg below). */ +static const int regoff[] = { + PT_REG(er1), PT_REG(er2), PT_REG(er3), SW_REG(er4), + SW_REG(er5), SW_REG(er6), PT_REG(er0), PT_REG(orig_er0), + PT_REG(ccr), PT_REG(pc) +}; + +/* + * Get contents of register REGNO in task TASK. + */ +static inline long get_reg(struct task_struct *task, int regno) +{ + unsigned long *addr; + + if (regno == PT_USP) + addr = &task->thread.usp; + else if (regno < sizeof(regoff)/sizeof(regoff[0])) + addr = (unsigned long *)(task->thread.esp0 + regoff[regno]); + else + return 0; + return *addr; +} + +/* + * Write contents of register REGNO in task TASK. + */ +static inline int put_reg(struct task_struct *task, int regno, + unsigned long data) +{ + unsigned long *addr; + + if (regno == PT_USP) + addr = &task->thread.usp; + else if (regno < sizeof(regoff)/sizeof(regoff[0])) + addr = (unsigned long *) (task->thread.esp0 + regoff[regno]); + else + return -1; + *addr = data; + return 0; +} + +/* + * Called by kernel/ptrace.c when detaching.. + * + * Make sure the single step bit is not set. + */ +int ptrace_cancel_bpt(struct task_struct *child) +{ + int i,r=0; + + for(i=0; i<4; i++) { + if (child->thread.debugreg[i]) { + if (child->thread.debugreg[i] != ~0) + put_user(child->thread.debugreg[i+4], + (unsigned short *)child->thread.debugreg[i]); + r = 1; + child->thread.debugreg[i] = 0; + } + } + return r; +} + +const static unsigned char opcode0[]={ + 0x04,0x02,0x04,0x02,0x04,0x02,0x04,0x02, /* 0x58 */ + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, /* 0x60 */ + 0x02,0x02,0x11,0x11,0x02,0x02,0x04,0x04, /* 0x68 */ + 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x02, /* 0x70 */ + 0x08,0x04,0x06,0x04,0x04,0x04,0x04,0x04}; /* 0x78 */ + +const static int table_parser01(unsigned char *pc); +const static int table_parser02(unsigned char *pc); +const static int table_parser100(unsigned char *pc); +const static int table_parser101(unsigned char *pc); + +const static int (*parsers[])(unsigned char *pc)={table_parser01,table_parser02}; + +static int insn_length(unsigned char *pc) +{ + if (*pc == 0x01) + return table_parser01(pc+1); + if (*pc < 0x58 || *pc>=0x80) + return 2; + else + if (opcode0[*pc-0x58]<0x10) + return opcode0[*pc-0x58]; + else + return (*parsers[opcode0[*pc-0x58]-0x10])(pc+1); +} + +const static int table_parser01(unsigned char *pc) +{ + const unsigned char codelen[]={0x10,0x00,0x00,0x00,0x11,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x04,0x04,0x00,0x04}; + const static int (*parsers[])(unsigned char *)={table_parser100,table_parser101}; + unsigned char second_index; + second_index = (*pc) >> 4; + if (codelen[second_index]<0x10) + return codelen[second_index]; + else + return parsers[codelen[second_index]-0x10](pc); +} + +const static int table_parser02(unsigned char *pc) +{ + return (*pc & 0x20)?0x06:0x04; +} + +const static int table_parser100(unsigned char *pc) +{ + return (*(pc+2) & 0x02)?0x08:0x06; +} + +const static int table_parser101(unsigned char *pc) +{ + return (*(pc+2) & 0x02)?0x08:0x06; +} + +#define BREAK_INST 0x5730 /* TRAPA #3 */ + +int ptrace_set_bpt(struct task_struct *child) +{ + unsigned long pc,next; + unsigned short insn; + pc = get_reg(child,PT_PC); + next = insn_length((unsigned char *)pc) + pc; + get_user(insn,(unsigned short *)pc); + if (insn == 0x5470) { + /* rts */ + unsigned long sp; + sp = get_reg(child,PT_USP); + get_user(next,(unsigned long *)sp); + } else if ((insn & 0xfb00) != 0x5800) { + /* jmp / jsr */ + int regs; + const short reg_tbl[]={PT_ER0,PT_ER1,PT_ER2,PT_ER3, + PT_ER4,PT_ER5,PT_ER6,PT_USP}; + switch(insn & 0xfb00) { + case 0x5900: + regs = (insn & 0x0070) >> 8; + next = get_reg(child,reg_tbl[regs]); + break; + case 0x5a00: + get_user(next,(unsigned long *)(pc+2)); + next &= 0x00ffffff; + break; + case 0x5b00: + /* unneccessary? */ + next = *(unsigned long *)(insn & 0xff); + break; + } + } else if (((insn & 0xf000) == 0x4000) || ((insn &0xff00) == 0x5500)) { + /* b**:8 */ + unsigned long dsp; + dsp = (long)(insn && 0xff)+pc+2; + child->thread.debugreg[1] = dsp; + get_user(child->thread.debugreg[5],(unsigned short *)dsp); + put_user(BREAK_INST,(unsigned short *)dsp); + } else if (((insn & 0xff00) == 0x5800) || ((insn &0xff00) == 0x5c00)) { + /* b**:16 */ + unsigned long dsp; + get_user(dsp,(unsigned short *)(pc+2)); + dsp = (long)dsp+pc+4; + child->thread.debugreg[1] = dsp; + get_user(child->thread.debugreg[5],(unsigned short *)dsp); + put_user(BREAK_INST,(unsigned short *)dsp); + } + child->thread.debugreg[0] = next; + get_user(child->thread.debugreg[4],(unsigned short *)next); + put_user(BREAK_INST,(unsigned short *)next); + return 0; +} + +inline +static int read_long(struct task_struct * tsk, unsigned long addr, + unsigned long * result) +{ + *result = *(unsigned long *)addr; + return 0; +} + +void ptrace_disable(struct task_struct *child) +{ + ptrace_cancel_bpt(child); +} + +asmlinkage int sys_ptrace(long request, long pid, long addr, long data) +{ + struct task_struct *child; + int ret; + + lock_kernel(); + ret = -EPERM; + if (request == PTRACE_TRACEME) { + /* are we already being traced? */ + if (current->ptrace & PT_PTRACED) + goto out; + /* set the ptrace bit in the process flags. */ + current->ptrace |= PT_PTRACED; + ret = 0; + goto out; + } + ret = -ESRCH; + read_lock(&tasklist_lock); + child = find_task_by_pid(pid); + if (child) + get_task_struct(child); + read_unlock(&tasklist_lock); + if (!child) + goto out; + + ret = -EPERM; + if (pid == 1) /* you may not mess with init */ + goto out_tsk; + + if (request == PTRACE_ATTACH) { + ret = ptrace_attach(child); + goto out_tsk; + } + ret = -ESRCH; + if (!(child->ptrace & PT_PTRACED)) + goto out_tsk; + if (child->state != TASK_STOPPED) { + if (request != PTRACE_KILL) + goto out_tsk; + } + ret = ptrace_check_attach(child, request == PTRACE_KILL); + if (ret < 0) + goto out_tsk; + + switch (request) { + case PTRACE_PEEKTEXT: /* read word at location addr. */ + case PTRACE_PEEKDATA: { + unsigned long tmp; + + ret = read_long(child, addr, &tmp); + if (ret < 0) + break ; + ret = verify_area(VERIFY_WRITE, (void *) data, sizeof(long)); + if (!ret) + put_user(tmp, (unsigned long *) data); + break ; + } + + /* read the word at location addr in the USER area. */ + case PTRACE_PEEKUSR: { + unsigned long tmp; + + if ((addr & 3) || addr < 0 || addr >= sizeof(struct user)) + ret = -EIO; + + ret = verify_area(VERIFY_WRITE, (void *) data, + sizeof(long)); + if (ret) + break ; + tmp = 0; /* Default return condition */ + addr = addr >> 2; /* temporary hack. */ + if (addr < 10) + tmp = get_reg(child, addr); + else { + ret = -EIO; + break ; + } + put_user(tmp,(unsigned long *) data); + ret = 0; + break ; + } + + /* when I and D space are separate, this will have to be fixed. */ + case PTRACE_POKETEXT: /* write the word at location addr. */ + case PTRACE_POKEDATA: + ret = 0; + if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data)) + break; + ret = -EIO; + break; + + case PTRACE_POKEUSR: /* write the word at location addr in the USER area */ + if ((addr & 3) || addr < 0 || addr >= sizeof(struct user)) { + ret = -EIO; + break ; + } + addr = addr >> 2; /* temporary hack. */ + + if (addr == PT_ORIG_ER0) { + ret = -EIO; + break ; + } + if (addr == PT_CCR) { + data &= SR_MASK; + } + if (addr < 10) { + if (put_reg(child, addr, data)) + ret = -EIO; + else + ret = 0; + break ; + } + ret = -EIO; + break ; + case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ + case PTRACE_CONT: { /* restart after signal. */ + ret = -EIO; + if ((unsigned long) data >= _NSIG) + break ; + if (request == PTRACE_SYSCALL) + set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + else + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + child->exit_code = data; + wake_up_process(child); + /* make sure the single step bit is not set. */ + ptrace_cancel_bpt(child); + ret = 0; + } + +/* + * make the child exit. Best I can do is send it a sigkill. + * perhaps it should be put in the status that it wants to + * exit. + */ + case PTRACE_KILL: { + + ret = 0; + if (child->state == TASK_ZOMBIE) /* already dead */ + break; + child->exit_code = SIGKILL; + ptrace_cancel_bpt(child); + wake_up_process(child); + break; + } + + case PTRACE_SINGLESTEP: { /* set the trap flag. */ + ret = -EIO; + if ((unsigned long) data > _NSIG) + break; + clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); + child->thread.debugreg[0]=-1; + child->exit_code = data; + wake_up_process(child); + ret = 0; + break; + } + + case PTRACE_DETACH: /* detach a process that was attached. */ + ret = ptrace_detach(child, data); + break; + + case PTRACE_GETREGS: { /* Get all gp regs from the child. */ + int i; + unsigned long tmp; + for (i = 0; i < 19; i++) { + tmp = get_reg(child, i); + if (put_user(tmp, (unsigned long *) data)) { + ret = -EFAULT; + break; + } + data += sizeof(long); + } + ret = 0; + break; + } + + case PTRACE_SETREGS: { /* Set all gp regs in the child. */ + int i; + unsigned long tmp; + for (i = 0; i < 10; i++) { + if (get_user(tmp, (unsigned long *) data)) { + ret = -EFAULT; + break; + } + put_reg(child, i, tmp); + data += sizeof(long); + } + ret = 0; + break; + } + + default: + ret = -EIO; + break; + } +out_tsk: + put_task_struct(child); +out: + unlock_kernel(); + return ret; +} + +asmlinkage void syscall_trace(void) +{ + if (!test_thread_flag(TIF_SYSCALL_TRACE)) + return; + if (!(current->ptrace & PT_PTRACED)) + return; + current->exit_code = SIGTRAP; + current->state = TASK_STOPPED; + notify_parent(current, SIGCHLD); + schedule(); + /* + * this isn't the same as continuing with a signal, but it will do + * for normal use. strace only continues with a signal if the + * stopping signal is not SIGTRAP. -brl + */ + if (current->exit_code) { + send_sig(current->exit_code, current, 1); + current->exit_code = 0; + } +} + +asmlinkage void trace_trap(unsigned long bp) +{ + if (current->thread.debugreg[0] == bp || + current->thread.debugreg[1] == bp) { + ptrace_cancel_bpt(current); + force_sig(SIGTRAP,current); + } else + force_sig(SIGILL,current); +} diff -Nru a/arch/h8300/kernel/semaphore.c b/arch/h8300/kernel/semaphore.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/semaphore.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,132 @@ +/* + * Generic semaphore code. Buyer beware. Do your own + * specific changes in + */ + +#include +#include +#include + +#ifndef CONFIG_RMW_INSNS +spinlock_t semaphore_wake_lock; +#endif + +/* + * Semaphores are implemented using a two-way counter: + * The "count" variable is decremented for each process + * that tries to sleep, while the "waking" variable is + * incremented when the "up()" code goes to wake up waiting + * processes. + * + * Notably, the inline "up()" and "down()" functions can + * efficiently test if they need to do any extra work (up + * needs to do something only if count was negative before + * the increment operation. + * + * waking_non_zero() (from asm/semaphore.h) must execute + * atomically. + * + * When __up() is called, the count was negative before + * incrementing it, and we need to wake up somebody. + * + * This routine adds one to the count of processes that need to + * wake up and exit. ALL waiting processes actually wake up but + * only the one that gets to the "waking" field first will gate + * through and acquire the semaphore. The others will go back + * to sleep. + * + * Note that these functions are only called when there is + * contention on the lock, and as such all this is the + * "non-critical" part of the whole semaphore business. The + * critical part is the inline stuff in + * where we want to avoid any extra jumps and calls. + */ +void __up(struct semaphore *sem) +{ + wake_one_more(sem); + wake_up(&sem->wait); +} + +/* + * Perform the "down" function. Return zero for semaphore acquired, + * return negative for signalled out of the function. + * + * If called from __down, the return is ignored and the wait loop is + * not interruptible. This means that a task waiting on a semaphore + * using "down()" cannot be killed until someone does an "up()" on + * the semaphore. + * + * If called from __down_interruptible, the return value gets checked + * upon return. If the return value is negative then the task continues + * with the negative value in the return register (it can be tested by + * the caller). + * + * Either form may be used in conjunction with "up()". + * + */ + + +#define DOWN_HEAD(task_state) \ + \ + \ + current->state = (task_state); \ + add_wait_queue(&sem->wait, &wait); \ + \ + /* \ + * Ok, we're set up. sem->count is known to be less than zero \ + * so we must wait. \ + * \ + * We can let go the lock for purposes of waiting. \ + * We re-acquire it after awaking so as to protect \ + * all semaphore operations. \ + * \ + * If "up()" is called before we call waking_non_zero() then \ + * we will catch it right away. If it is called later then \ + * we will have to go through a wakeup cycle to catch it. \ + * \ + * Multiple waiters contend for the semaphore lock to see \ + * who gets to gate through and who has to wait some more. \ + */ \ + for (;;) { + +#define DOWN_TAIL(task_state) \ + current->state = (task_state); \ + } \ + current->state = TASK_RUNNING; \ + remove_wait_queue(&sem->wait, &wait); + +void __down(struct semaphore * sem) +{ + DECLARE_WAITQUEUE(wait, current); + + DOWN_HEAD(TASK_UNINTERRUPTIBLE) + if (waking_non_zero(sem)) + break; + schedule(); + DOWN_TAIL(TASK_UNINTERRUPTIBLE) +} + +int __down_interruptible(struct semaphore * sem) +{ + DECLARE_WAITQUEUE(wait, current); + int ret = 0; + + DOWN_HEAD(TASK_INTERRUPTIBLE) + + ret = waking_non_zero_interruptible(sem, current); + if (ret) + { + if (ret == 1) + /* ret != 0 only if we get interrupted -arca */ + ret = 0; + break; + } + schedule(); + DOWN_TAIL(TASK_INTERRUPTIBLE) + return ret; +} + +int __down_trylock(struct semaphore * sem) +{ + return waking_non_zero_trylock(sem); +} diff -Nru a/arch/h8300/kernel/setup.c b/arch/h8300/kernel/setup.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/setup.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,231 @@ +/* + * linux/arch/h8300h/kernel/setup.c + * + * Copyleft ()) 2000 James D. Schettine {james@telos-systems.com} + * Copyright (C) 1999,2000 Greg Ungerer (gerg@snapgear.com) + * Copyright (C) 1998,1999 D. Jeff Dionne + * Copyright (C) 1998 Kenneth Albanowski + * Copyright (C) 1995 Hamish Macdonald + * Copyright (C) 2000 Lineo Inc. (www.lineo.com) + * Copyright (C) 2001 Lineo, Inc. + * + * H8/300H porting Yoshinori Sato + */ + +/* + * This file handles the architecture-dependent parts of system setup + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#ifdef CONFIG_BLK_DEV_INITRD +#include +#include +#endif + +#if defined(CONFIG_CPU_H8300H) +#define CPU "H8/300H" +#endif + +unsigned long rom_length; +unsigned long memory_start; +unsigned long memory_end; + +struct task_struct *_current_task; + +char command_line[512]; +char saved_command_line[512]; + +extern int _stext, _etext, _sdata, _edata, _sbss, _ebss, _end; +extern int _ramstart, _ramend; +extern char _target_name[]; + +#if defined(CONFIG_H8300H_SIM) && defined(CONFIG_GDB_MAGICPRINT) +/* printk with gdb service */ +static void gdb_console_output(struct console *c, char *msg, unsigned len) +{ + for (; len > 0; len--) { + asm("mov.w %0,r2\n\t" + "jsr @0xc4"::"r"(*msg++):"er2"); + } +} + +/* + * Setup initial baud/bits/parity. We do two things here: + * - construct a cflag setting for the first rs_open() + * - initialize the serial port + * Return non-zero if we didn't find a serial port. + */ +static int __init gdb_console_setup(struct console *co, char *options) +{ + return 0; +} + +static const struct console gdb_console = { + name: "gdb", + write: gdb_console_output, + device: NULL, + setup: gdb_console_setup, + flags: CON_PRINTBUFFER, + index: -1, +}; +#endif + +void setup_arch(char **cmdline_p) +{ + int bootmap_size; + + memory_start = PAGE_ALIGN((unsigned long)(&_ramstart)); + memory_end = &_ramend; /* by now the stack is part of the init task */ + + init_mm.start_code = (unsigned long) &_stext; + init_mm.end_code = (unsigned long) &_etext; + init_mm.end_data = (unsigned long) &_edata; + init_mm.brk = (unsigned long) 0; + +#if defined(CONFIG_H8300H_SIM) && defined(CONFIG_GDB_MAGICPRINT) + register_console(&gdb_console); +#endif + + printk("\x0F\r\n\nuClinux " CPU "\n"); + printk("Target Hardware: %s\n",_target_name); + printk("Flat model support (C) 1998,1999 Kenneth Albanowski, D. Jeff Dionne\n"); + printk("H8/300H support by Yoshinori Sato \n"); + +#ifdef DEBUG + printk("KERNEL -> TEXT=0x%06x-0x%06x DATA=0x%06x-0x%06x " + "BSS=0x%06x-0x%06x\n", (int) &_stext, (int) &_etext, + (int) &_sdata, (int) &_edata, + (int) &_sbss, (int) &_ebss); + printk("KERNEL -> ROMFS=0x%06x-0x%06x MEM=0x%06x-0x%06x " + "STACK=0x%06x-0x%06x\n", + (int) &_ebss, (int) memory_start, + (int) memory_start, (int) memory_end, + (int) memory_end, (int) &_ramend); +#endif + +#ifdef CONFIG_BLK_DEV_BLKMEM + ROOT_DEV = MKDEV(BLKMEM_MAJOR,0); +#endif + +#ifdef CONFIG_DEFAULT_CMDLINE + /* set from default command line */ + if (*command_line == '\0') + strcpy(command_line,CONFIG_KERNEL_COMMAND); +#endif + /* Keep a copy of command line */ + *cmdline_p = &command_line[0]; + memcpy(saved_command_line, command_line, sizeof(saved_command_line)); + saved_command_line[sizeof(saved_command_line)-1] = 0; + +#ifdef DEBUG + if (strlen(*cmdline_p)) + printk("Command line: '%s'\n", *cmdline_p); +#endif + + /* + * give all the memory to the bootmap allocator, tell it to put the + * boot mem_map at the start of memory + */ + bootmap_size = init_bootmem_node( + NODE_DATA(0), + memory_start >> PAGE_SHIFT, /* map goes here */ + PAGE_OFFSET >> PAGE_SHIFT, /* 0 on coldfire */ + memory_end >> PAGE_SHIFT); + /* + * free the usable memory, we have to make sure we do not free + * the bootmem bitmap so we then reserve it after freeing it :-) + */ + free_bootmem(memory_start, memory_end - memory_start); + reserve_bootmem(memory_start, bootmap_size); + /* + * get kmalloc into gear + */ + paging_init(); +#ifdef DEBUG + printk("Done setup_arch\n"); +#endif +} + +int get_cpuinfo(char * buffer) +{ + char *cpu; + u_long clockfreq; + + cpu = CPU; + + clockfreq = CONFIG_CPU_CLOCK; + + return(sprintf(buffer, "CPU:\t\t%s\n" + "Clock:\t%lu.%1luMHz\n" + "BogoMips:\t%lu.%02lu\n" + "Calibration:\t%lu loops\n", + cpu, + clockfreq/100,clockfreq%100, + (loops_per_jiffy*HZ)/500000,((loops_per_jiffy*HZ)/5000)%100, + (loops_per_jiffy*HZ))); + +} + +/* + * Get CPU information for use by the procfs. + */ + +static int show_cpuinfo(struct seq_file *m, void *v) +{ + char *cpu; + u_long clockfreq; + + cpu = CPU; + + clockfreq = CONFIG_CPU_CLOCK; + + seq_printf(m, "CPU:\t\t%s\n" + "Clock:\t%lu.%1luMHz\n" + "BogoMips:\t%lu.%02lu\n" + "Calibration:\t%lu loops\n", + cpu, + clockfreq/100,clockfreq%100, + (loops_per_jiffy*HZ)/500000,((loops_per_jiffy*HZ)/5000)%100, + (loops_per_jiffy*HZ)); + + return 0; +} + +static void *c_start(struct seq_file *m, loff_t *pos) +{ + return *pos < NR_CPUS ? ((void *) 0x12345678) : NULL; +} + +static void *c_next(struct seq_file *m, void *v, loff_t *pos) +{ + ++*pos; + return c_start(m, pos); +} + +static void c_stop(struct seq_file *m, void *v) +{ +} + +struct seq_operations cpuinfo_op = { + start: c_start, + next: c_next, + stop: c_stop, + show: show_cpuinfo, +}; diff -Nru a/arch/h8300/kernel/signal.c b/arch/h8300/kernel/signal.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/signal.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,642 @@ +/* + * linux/arch/h8300/kernel/signal.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + */ + +/* + * uClinux H8/300 support by Yoshinori Sato + * + * Based on + * Linux/m68k by Hamish Macdonald + */ + +/* + * ++roman (07/09/96): implemented signal stacks (specially for tosemu on + * Atari :-) Current limitation: Only one sigstack can be active at one time. + * If a second signal with SA_ONSTACK set arrives while working on a sigstack, + * SA_ONSTACK is ignored. This behaviour avoids lots of trouble with nested + * signal handlers! + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) + +asmlinkage long sys_wait4(pid_t pid, unsigned int * stat_addr, int options, + struct rusage * ru); +asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs); + +/* + * Atomically swap in the new signal mask, and wait for a signal. + */ +asmlinkage int do_sigsuspend(struct pt_regs *regs) +{ + old_sigset_t mask = regs->er3; + sigset_t saveset; + + mask &= _BLOCKABLE; + spin_lock_irq(¤t->sighand->siglock); + saveset = current->blocked; + siginitset(¤t->blocked, mask); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + + regs->er0 = -EINTR; + while (1) { + current->state = TASK_INTERRUPTIBLE; + schedule(); + if (do_signal(&saveset, regs)) + return -EINTR; + } +} + +asmlinkage int +do_rt_sigsuspend(struct pt_regs *regs) +{ + sigset_t *unewset = (sigset_t *)regs->er1; + size_t sigsetsize = (size_t)regs->er2; + sigset_t saveset, newset; + + /* XXX: Don't preclude handling different sized sigset_t's. */ + if (sigsetsize != sizeof(sigset_t)) + return -EINVAL; + + if (copy_from_user(&newset, unewset, sizeof(newset))) + return -EFAULT; + sigdelsetmask(&newset, ~_BLOCKABLE); + + spin_lock_irq(¤t->sighand->siglock); + saveset = current->blocked; + current->blocked = newset; + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + + regs->er0 = -EINTR; + while (1) { + current->state = TASK_INTERRUPTIBLE; + schedule(); + if (do_signal(&saveset, regs)) + return -EINTR; + } +} + +asmlinkage int +sys_sigaction(int sig, const struct old_sigaction *act, + struct old_sigaction *oact) +{ + struct k_sigaction new_ka, old_ka; + int ret; + + if (act) { + old_sigset_t mask; + if (verify_area(VERIFY_READ, act, sizeof(*act)) || + __get_user(new_ka.sa.sa_handler, &act->sa_handler) || + __get_user(new_ka.sa.sa_restorer, &act->sa_restorer)) + return -EFAULT; + __get_user(new_ka.sa.sa_flags, &act->sa_flags); + __get_user(mask, &act->sa_mask); + siginitset(&new_ka.sa.sa_mask, mask); + } + + ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); + + if (!ret && oact) { + if (verify_area(VERIFY_WRITE, oact, sizeof(*oact)) || + __put_user(old_ka.sa.sa_handler, &oact->sa_handler) || + __put_user(old_ka.sa.sa_restorer, &oact->sa_restorer)) + return -EFAULT; + __put_user(old_ka.sa.sa_flags, &oact->sa_flags); + __put_user(old_ka.sa.sa_mask.sig[0], &oact->sa_mask); + } + + return ret; +} + +asmlinkage int +sys_sigaltstack(const stack_t *uss, stack_t *uoss) +{ + return do_sigaltstack(uss, uoss, rdusp()); +} + + +/* + * Do a signal return; undo the signal stack. + * + * Keep the return code on the stack quadword aligned! + * That makes the cache flush below easier. + */ + +struct sigframe +{ + char *pretcode; + int sig; + int code; + struct sigcontext *psc; + char retcode[6]; + unsigned long extramask[_NSIG_WORDS-1]; + struct sigcontext sc; +}; + +struct rt_sigframe +{ + char *pretcode; + int sig; + struct siginfo *pinfo; + void *puc; + char retcode[6]; + struct siginfo info; + struct ucontext uc; +}; + + +static inline int +restore_sigcontext(struct pt_regs *regs, struct sigcontext *usc, void *fp, + int *pd0) +{ + struct sigcontext context; + int err = 0; + + /* get previous context */ + if (copy_from_user(&context, usc, sizeof(context))) + goto badframe; + + /* restore passed registers */ + regs->er1 = context.sc_er1; + regs->er2 = context.sc_er2; + regs->er3 = context.sc_er3; + regs->ccr = (regs->ccr & 0x10)|(context.sc_ccr & 0xef); + regs->pc = context.sc_pc; + regs->orig_er0 = -1; /* disable syscall checks */ + wrusp(context.sc_usp); + + *pd0 = context.sc_er0; + return err; + +badframe: + return 1; +} + +static inline int +rt_restore_ucontext(struct pt_regs *regs, struct switch_stack *sw, + struct ucontext *uc, int *pd0) +{ + int temp; + greg_t *gregs = uc->uc_mcontext.gregs; + unsigned long usp; + int err; + + err = __get_user(temp, &uc->uc_mcontext.version); + if (temp != MCONTEXT_VERSION) + goto badframe; + /* restore passed registers */ + err |= __get_user(regs->er0, &gregs[0]); + err |= __get_user(regs->er1, &gregs[1]); + err |= __get_user(regs->er2, &gregs[2]); + err |= __get_user(regs->er3, &gregs[3]); + err |= __get_user(sw->er4, &gregs[4]); + err |= __get_user(sw->er5, &gregs[5]); + err |= __get_user(sw->er6, &gregs[6]); + err |= __get_user(usp, &gregs[7]); + wrusp(usp); + err |= __get_user(regs->pc, &gregs[8]); + err |= __get_user(temp, &gregs[9]); + regs->ccr = (regs->ccr & 0x10) | (temp & 0xef); + regs->orig_er0 = -1; /* disable syscall checks */ + + if (do_sigaltstack(&uc->uc_stack, NULL, usp) == -EFAULT) + goto badframe; + + *pd0 = regs->er0; + return err; + +badframe: + return 1; +} + +asmlinkage int do_sigreturn(unsigned long __unused,...) +{ + struct switch_stack *sw = (struct switch_stack *) &__unused; + struct pt_regs *regs = (struct pt_regs *) (sw + 1); + unsigned long usp = rdusp(); + struct sigframe *frame = (struct sigframe *)(usp - 4); + sigset_t set; + int er0; + + if (verify_area(VERIFY_READ, frame, sizeof(*frame))) + goto badframe; + if (__get_user(set.sig[0], &frame->sc.sc_mask) || + (_NSIG_WORDS > 1 && + __copy_from_user(&set.sig[1], &frame->extramask, + sizeof(frame->extramask)))) + goto badframe; + + sigdelsetmask(&set, ~_BLOCKABLE); + spin_lock_irq(¤t->sighand->siglock); + current->blocked = set; + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + + if (restore_sigcontext(regs, &frame->sc, frame + 1, &er0)) + goto badframe; + return er0; + +badframe: + force_sig(SIGSEGV, current); + return 0; +} + +asmlinkage int do_rt_sigreturn(unsigned long __unused,...) +{ + struct switch_stack *sw = (struct switch_stack *) &__unused; + struct pt_regs *regs = (struct pt_regs *) (sw + 1); + unsigned long usp = rdusp(); + struct rt_sigframe *frame = (struct rt_sigframe *)(usp - 4); + sigset_t set; + int er0; + + if (verify_area(VERIFY_READ, frame, sizeof(*frame))) + goto badframe; + if (__copy_from_user(&set, &frame->uc.uc_sigmask, sizeof(set))) + goto badframe; + + sigdelsetmask(&set, ~_BLOCKABLE); + spin_unlock_irq(¤t->sighand->siglock); + current->blocked = set; + recalc_sigpending(); + spin_lock_irq(¤t->sighand->siglock); + + if (rt_restore_ucontext(regs, sw, &frame->uc, &er0)) + goto badframe; + return er0; + +badframe: + force_sig(SIGSEGV, current); + return 0; +} + +static void setup_sigcontext(struct sigcontext *sc, struct pt_regs *regs, + unsigned long mask) +{ + sc->sc_mask = mask; + sc->sc_usp = rdusp(); + sc->sc_er0 = regs->er0; + sc->sc_er1 = regs->er1; + sc->sc_er2 = regs->er2; + sc->sc_er3 = regs->er3; + sc->sc_ccr = regs->ccr; + sc->sc_pc = regs->pc; +} + +static inline int rt_setup_ucontext(struct ucontext *uc, struct pt_regs *regs) +{ + struct switch_stack *sw = (struct switch_stack *)regs - 1; + greg_t *gregs = uc->uc_mcontext.gregs; + int err = 0; + + err |= __put_user(MCONTEXT_VERSION, &uc->uc_mcontext.version); + err |= __put_user(regs->er0, &gregs[0]); + err |= __put_user(regs->er1, &gregs[1]); + err |= __put_user(regs->er2, &gregs[2]); + err |= __put_user(regs->er3, &gregs[3]); + err |= __put_user(sw->er4, &gregs[4]); + err |= __put_user(sw->er5, &gregs[5]); + err |= __put_user(sw->er6, &gregs[6]); + err |= __put_user(rdusp(), &gregs[7]); + err |= __put_user(regs->pc, &gregs[8]); + err |= __put_user(regs->ccr, &gregs[9]); + return err; +} + +static inline void * +get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size) +{ + unsigned long usp; + + /* Default to using normal stack. */ + usp = rdusp(); + + /* This is the X/Open sanctioned signal stack switching. */ + if (ka->sa.sa_flags & SA_ONSTACK) { + if (!on_sig_stack(usp)) + usp = current->sas_ss_sp + current->sas_ss_size; + } + return (void *)((usp - frame_size) & -8UL); +} + +static void setup_frame (int sig, struct k_sigaction *ka, + sigset_t *set, struct pt_regs *regs) +{ + struct sigframe *frame; + struct sigcontext context; + int err = 0; + + frame = get_sigframe(ka, regs, sizeof(*frame)); + + err |= __put_user((current_thread_info()->exec_domain + && current_thread_info()->exec_domain->signal_invmap + && sig < 32 + ? current_thread_info()->exec_domain->signal_invmap[sig] + : sig), + &frame->sig); + + err |= __put_user(&frame->sc, &frame->psc); + + if (_NSIG_WORDS > 1) + err |= copy_to_user(frame->extramask, &set->sig[1], + sizeof(frame->extramask)); + + setup_sigcontext(&context, regs, set->sig[0]); + err |= copy_to_user (&frame->sc, &context, sizeof(context)); + + /* Set up to return from userspace. */ + err |= __put_user(frame->retcode, &frame->pretcode); + + /* sub.l er0,er0; mov.b #__NR_sigreturn,r0l; trapa #0 */ + err != __put_user(0x1a80f800 + (__NR_sigreturn & 0xff), + (long *)(frame->retcode + 0)); + err |= __put_user(0x5700, (short *)(frame->retcode + 4)); + + + if (err) + goto give_sigsegv; + + /* Set up registers for signal handler */ + wrusp ((unsigned long) frame); + regs->pc = (unsigned long) ka->sa.sa_handler; + + return; + +give_sigsegv: + if (sig == SIGSEGV) + ka->sa.sa_handler = SIG_DFL; + force_sig(SIGSEGV, current); +} + +static void setup_rt_frame (int sig, struct k_sigaction *ka, siginfo_t *info, + sigset_t *set, struct pt_regs *regs) +{ + struct rt_sigframe *frame; + int err = 0; + + frame = get_sigframe(ka, regs, sizeof(*frame)); + + err |= __put_user((current_thread_info()->exec_domain + && current_thread_info()->exec_domain->signal_invmap + && sig < 32 + ? current_thread_info()->exec_domain->signal_invmap[sig] + : sig), + &frame->sig); + err |= __put_user(&frame->info, &frame->pinfo); + err |= __put_user(&frame->uc, &frame->puc); + err |= copy_siginfo_to_user(&frame->info, info); + + /* Create the ucontext. */ + err |= __put_user(0, &frame->uc.uc_flags); + err |= __put_user(0, &frame->uc.uc_link); + err |= __put_user((void *)current->sas_ss_sp, + &frame->uc.uc_stack.ss_sp); + err |= __put_user(sas_ss_flags(rdusp()), + &frame->uc.uc_stack.ss_flags); + err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); + err |= rt_setup_ucontext(&frame->uc, regs); + err |= copy_to_user (&frame->uc.uc_sigmask, set, sizeof(*set)); + + /* Set up to return from userspace. */ + err |= __put_user(frame->retcode, &frame->pretcode); + + /* moveq #,d0; notb d0; movea.l #,a5; trap #0 */ + /* sub.l er0,er0; mov.b #__NR_rt_sigreturn,r0l; trapa #0 */ + err != __put_user(0x1a80f800 + (__NR_rt_sigreturn & 0xff), + (long *)(frame->retcode + 0)); + err |= __put_user(0x5700, (short *)(frame->retcode + 4)); + + if (err) + goto give_sigsegv; + + /* Set up registers for signal handler */ + wrusp ((unsigned long) frame); + regs->pc = (unsigned long) ka->sa.sa_handler; + + return; + +give_sigsegv: + if (sig == SIGSEGV) + ka->sa.sa_handler = SIG_DFL; + force_sig(SIGSEGV, current); +} + +static inline void +handle_restart(struct pt_regs *regs, struct k_sigaction *ka, int has_handler) +{ + switch (regs->er0) { + case -ERESTARTNOHAND: + if (!has_handler) + goto do_restart; + regs->er0 = -EINTR; + break; + + case -ERESTARTSYS: + if (has_handler && !(ka->sa.sa_flags & SA_RESTART)) { + regs->er0 = -EINTR; + break; + } + /* fallthrough */ + case -ERESTARTNOINTR: + do_restart: + regs->er0 = regs->orig_er0; + regs->pc -= 2; + break; + } +} + +/* + * OK, we're invoking a handler + */ +static void +handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info, + sigset_t *oldset, struct pt_regs *regs) +{ + /* are we from a system call? */ + if (regs->orig_er0 >= 0) + /* If so, check system call restarting.. */ + handle_restart(regs, ka, 1); + + /* set up the stack frame */ + if (ka->sa.sa_flags & SA_SIGINFO) + setup_rt_frame(sig, ka, info, oldset, regs); + else + setup_frame(sig, ka, oldset, regs); + + if (ka->sa.sa_flags & SA_ONESHOT) + ka->sa.sa_handler = SIG_DFL; + + if (!(ka->sa.sa_flags & SA_NODEFER)) { + spin_lock_irq(¤t->sighand->siglock); + sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); + sigaddset(¤t->blocked,sig); + recalc_sigpending(); + spin_unlock_irq(¤t->sighand->siglock); + } +} + +/* + * Note that 'init' is a special process: it doesn't get signals it doesn't + * want to handle. Thus you cannot kill init even with a SIGKILL even by + * mistake. + * + * Note that we go through the signals twice: once to check the signals + * that the kernel can handle, and then we build all the user-level signal + * handling stack-frames in one go after that. + */ +asmlinkage int do_signal(sigset_t *oldset, struct pt_regs *regs) +{ + siginfo_t info; + struct k_sigaction *ka; + + current->thread.esp0 = (unsigned long) regs; + + if (!oldset) + oldset = ¤t->blocked; + + for (;;) { + int signr; + + signr = get_signal_to_deliver(&info, regs, NULL); + + if (!signr) + break; + + if ((current->ptrace & PT_PTRACED) && signr != SIGKILL) { + current->exit_code = signr; + current->state = TASK_STOPPED; + + /* Did we come from a system call? */ + if (regs->orig_er0 >= 0) { + /* Restart the system call the same way as + if the process were not traced. */ + struct k_sigaction *ka = + ¤t->sighand->action[signr-1]; + int has_handler = + (ka->sa.sa_handler != SIG_IGN && + ka->sa.sa_handler != SIG_DFL); + handle_restart(regs, ka, has_handler); + } + notify_parent(current, SIGCHLD); + schedule(); + + /* We're back. Did the debugger cancel the sig? */ + if (!(signr = current->exit_code)) { + discard_frame: + continue; + } + current->exit_code = 0; + + /* The debugger continued. Ignore SIGSTOP. */ + if (signr == SIGSTOP) + goto discard_frame; + + /* Update the siginfo structure. Is this good? */ + if (signr != info.si_signo) { + info.si_signo = signr; + info.si_errno = 0; + info.si_code = SI_USER; + info.si_pid = current->parent->pid; + info.si_uid = current->parent->uid; + } + + /* If the (new) signal is now blocked, requeue it. */ + if (sigismember(¤t->blocked, signr)) { + send_sig_info(signr, &info, current); + continue; + } + } + + ka = ¤t->sighand->action[signr-1]; + if (ka->sa.sa_handler == SIG_IGN) { + if (signr != SIGCHLD) + continue; + /* Check for SIGCHLD: it's special. */ + while (sys_wait4(-1, NULL, WNOHANG, NULL) > 0) + /* nothing */; + continue; + } + + if (ka->sa.sa_handler == SIG_DFL) { + int exit_code = signr; + + if (current->pid == 1) + continue; + + switch (signr) { + case SIGCONT: case SIGCHLD: + case SIGWINCH: case SIGURG: + continue; + + case SIGTSTP: case SIGTTIN: case SIGTTOU: + if (is_orphaned_pgrp(current->pgrp)) + continue; + /* FALLTHRU */ + + case SIGSTOP: { + struct sighand_struct *sig; + current->state = TASK_STOPPED; + current->exit_code = signr; + sig = current->parent->sighand; + if (sig && !(sig->action[SIGCHLD-1].sa.sa_flags +& SA_NOCLDSTOP)) + notify_parent(current, SIGCHLD); + schedule(); + continue; + } + + case SIGQUIT: case SIGILL: case SIGTRAP: + case SIGIOT: case SIGFPE: case SIGSEGV: + case SIGBUS: case SIGSYS: case SIGXCPU: case SIGXFSZ: + if (do_coredump(signr, exit_code, regs)) + exit_code |= 0x80; + /* FALLTHRU */ + + default: + sigaddset(¤t->pending.signal, signr); + recalc_sigpending(); + current->flags |= PF_SIGNALED; + do_exit(exit_code); + /* NOTREACHED */ + } + } + + /* Whee! Actually deliver the signal. */ + handle_signal(signr, ka, &info, oldset, regs); + return 1; + } + + /* Did we come from a system call? */ + if (regs->orig_er0 >= 0) + /* Restart the system call - no handlers present */ + handle_restart(regs, NULL, 0); + + return 0; +} diff -Nru a/arch/h8300/kernel/sys_h8300.c b/arch/h8300/kernel/sys_h8300.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/sys_h8300.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,289 @@ +/* + * linux/arch/h8300/kernel/sys_h8300.c + * + * This file contains various random system calls that + * have a non-standard calling sequence on the H8/300 + * platform. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * sys_pipe() is the normal C calling standard for creating + * a pipe. It's not the way unix traditionally does this, though. + */ +asmlinkage int sys_pipe(unsigned long * fildes) +{ + int fd[2]; + int error; + + error = do_pipe(fd); + if (!error) { + if (copy_to_user(fildes, fd, 2*sizeof(int))) + error = -EFAULT; + } + return error; +} + +/* common code for old and new mmaps */ +static inline long do_mmap2( + unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff) +{ + int error = -EBADF; + struct file * file = NULL; + + flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); + if (!(flags & MAP_ANONYMOUS)) { + file = fget(fd); + if (!file) + goto out; + } + + down_write(¤t->mm->mmap_sem); + error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff); + up_write(¤t->mm->mmap_sem); + + if (file) + fput(file); +out: + return error; +} + +asmlinkage long sys_mmap2(unsigned long addr, unsigned long len, + unsigned long prot, unsigned long flags, + unsigned long fd, unsigned long pgoff) +{ + return do_mmap2(addr, len, prot, flags, fd, pgoff); +} + +/* + * Perform the select(nd, in, out, ex, tv) and mmap() system + * calls. Linux/m68k cloned Linux/i386, which didn't use to be able to + * handle more than 4 system call parameters, so these system calls + * used a memory block for parameter passing.. + */ + +struct mmap_arg_struct { + unsigned long addr; + unsigned long len; + unsigned long prot; + unsigned long flags; + unsigned long fd; + unsigned long offset; +}; + +asmlinkage int old_mmap(struct mmap_arg_struct *arg) +{ + struct mmap_arg_struct a; + int error = -EFAULT; + + if (copy_from_user(&a, arg, sizeof(a))) + goto out; + + error = -EINVAL; + if (a.offset & ~PAGE_MASK) + goto out; + + a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); + + error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT); +out: + return error; +} + +#if 0 /* DAVIDM - do we want this */ +struct mmap_arg_struct64 { + __u32 addr; + __u32 len; + __u32 prot; + __u32 flags; + __u64 offset; /* 64 bits */ + __u32 fd; +}; + +asmlinkage long sys_mmap64(struct mmap_arg_struct64 *arg) +{ + int error = -EFAULT; + struct file * file = NULL; + struct mmap_arg_struct64 a; + unsigned long pgoff; + + if (copy_from_user(&a, arg, sizeof(a))) + return -EFAULT; + + if ((long)a.offset & ~PAGE_MASK) + return -EINVAL; + + pgoff = a.offset >> PAGE_SHIFT; + if ((a.offset >> PAGE_SHIFT) != pgoff) + return -EINVAL; + + if (!(a.flags & MAP_ANONYMOUS)) { + error = -EBADF; + file = fget(a.fd); + if (!file) + goto out; + } + a.flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE); + + down_write(¤t->mm->mmap_sem); + error = do_mmap_pgoff(file, a.addr, a.len, a.prot, a.flags, pgoff); + up_write(¤t->mm->mmap_sem); + if (file) + fput(file); +out: + return error; +} +#endif + +extern asmlinkage int sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); + +struct sel_arg_struct { + unsigned long n; + fd_set *inp, *outp, *exp; + struct timeval *tvp; +}; + +asmlinkage int old_select(struct sel_arg_struct *arg) +{ + struct sel_arg_struct a; + + if (copy_from_user(&a, arg, sizeof(a))) + return -EFAULT; + /* sys_select() does the appropriate kernel locking */ + return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp); +} + +/* + * sys_ipc() is the de-multiplexer for the SysV IPC calls.. + * + * This is really horribly ugly. + */ +asmlinkage int sys_ipc (uint call, int first, int second, + int third, void *ptr, long fifth) +{ + int version, ret; + + version = call >> 16; /* hack for backward compatibility */ + call &= 0xffff; + + if (call <= SEMCTL) + switch (call) { + case SEMOP: + return sys_semop (first, (struct sembuf *)ptr, second); + case SEMGET: + return sys_semget (first, second, third); + case SEMCTL: { + union semun fourth; + if (!ptr) + return -EINVAL; + if (get_user(fourth.__pad, (void **) ptr)) + return -EFAULT; + return sys_semctl (first, second, third, fourth); + } + default: + return -EINVAL; + } + if (call <= MSGCTL) + switch (call) { + case MSGSND: + return sys_msgsnd (first, (struct msgbuf *) ptr, + second, third); + case MSGRCV: + switch (version) { + case 0: { + struct ipc_kludge tmp; + if (!ptr) + return -EINVAL; + if (copy_from_user (&tmp, + (struct ipc_kludge *)ptr, + sizeof (tmp))) + return -EFAULT; + return sys_msgrcv (first, tmp.msgp, second, + tmp.msgtyp, third); + } + default: + return sys_msgrcv (first, + (struct msgbuf *) ptr, + second, fifth, third); + } + case MSGGET: + return sys_msgget ((key_t) first, second); + case MSGCTL: + return sys_msgctl (first, second, + (struct msqid_ds *) ptr); + default: + return -EINVAL; + } + if (call <= SHMCTL) + switch (call) { + case SHMAT: + switch (version) { + default: { + ulong raddr; + ret = sys_shmat (first, (char *) ptr, + second, &raddr); + if (ret) + return ret; + return put_user (raddr, (ulong *) third); + } + } + case SHMDT: + return sys_shmdt ((char *)ptr); + case SHMGET: + return sys_shmget (first, second, third); + case SHMCTL: + return sys_shmctl (first, second, + (struct shmid_ds *) ptr); + default: + return -EINVAL; + } + + return -EINVAL; +} + +asmlinkage int sys_ioperm(unsigned long from, unsigned long num, int on) +{ + return -ENOSYS; +} + +/* sys_cacheflush -- no support. */ +asmlinkage int +sys_cacheflush (unsigned long addr, int scope, int cache, unsigned long len) +{ + return -EINVAL; +} + +asmlinkage int sys_getpagesize(void) +{ + return PAGE_SIZE; +} + +#if defined(CONFIG_SYSCALL_PRINT) +asmlinkage void syscall_print(void *dummy,...) +{ + struct pt_regs *regs = (struct pt_regs *) ((unsigned char *)&dummy); + unsigned long *usp=rdusp()+8; + printk("call %06x:%d 1:%08x,2:%08x,3:%08x,ret:%08x\n", + ((*usp) & 0xffffff)-2,regs->orig_er0,regs->er1,regs->er2,regs->er3,regs->er0); +} +#endif diff -Nru a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/syscalls.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,314 @@ +/* Systemcall Entry Table */ +#include +#include +#include +#include + +.globl SYMBOL_NAME(sys_call_table) + +#if defined(CONFIG_CPU_H8300H) + .h8300h +#endif +#if defined(CONFIG_CPU_H8S) + .h8300s +#endif + .section .text + .align 2 +SYMBOL_NAME_LABEL(sys_call_table) + .long SYMBOL_NAME(sys_ni_syscall) /* 0 - old "setup()" system call*/ + .long SYMBOL_NAME(sys_exit) + .long SYMBOL_NAME(sys_fork) + .long SYMBOL_NAME(sys_read) + .long SYMBOL_NAME(sys_write) + .long SYMBOL_NAME(sys_open) /* 5 */ + .long SYMBOL_NAME(sys_close) + .long SYMBOL_NAME(sys_waitpid) + .long SYMBOL_NAME(sys_creat) + .long SYMBOL_NAME(sys_link) + .long SYMBOL_NAME(sys_unlink) /* 10 */ + .long SYMBOL_NAME(sys_execve) + .long SYMBOL_NAME(sys_chdir) + .long SYMBOL_NAME(sys_time) + .long SYMBOL_NAME(sys_mknod) + .long SYMBOL_NAME(sys_chmod) /* 15 */ + .long SYMBOL_NAME(sys_chown16) + .long SYMBOL_NAME(sys_ni_syscall) /* old break syscall holder */ + .long SYMBOL_NAME(sys_stat) + .long SYMBOL_NAME(sys_lseek) + .long SYMBOL_NAME(sys_getpid) /* 20 */ + .long SYMBOL_NAME(sys_mount) + .long SYMBOL_NAME(sys_oldumount) + .long SYMBOL_NAME(sys_setuid16) + .long SYMBOL_NAME(sys_getuid16) + .long SYMBOL_NAME(sys_stime) /* 25 */ + .long SYMBOL_NAME(sys_ptrace) + .long SYMBOL_NAME(sys_alarm) + .long SYMBOL_NAME(sys_fstat) + .long SYMBOL_NAME(sys_pause) + .long SYMBOL_NAME(sys_utime) /* 30 */ + .long SYMBOL_NAME(sys_ni_syscall) /* old stty syscall holder */ + .long SYMBOL_NAME(sys_ni_syscall) /* old gtty syscall holder */ + .long SYMBOL_NAME(sys_access) + .long SYMBOL_NAME(sys_nice) + .long SYMBOL_NAME(sys_ni_syscall) /* 35 */ /* old ftime syscall holder */ + .long SYMBOL_NAME(sys_sync) + .long SYMBOL_NAME(sys_kill) + .long SYMBOL_NAME(sys_rename) + .long SYMBOL_NAME(sys_mkdir) + .long SYMBOL_NAME(sys_rmdir) /* 40 */ + .long SYMBOL_NAME(sys_dup) + .long SYMBOL_NAME(sys_pipe) + .long SYMBOL_NAME(sys_times) + .long SYMBOL_NAME(sys_ni_syscall) /* old prof syscall holder */ + .long SYMBOL_NAME(sys_brk) /* 45 */ + .long SYMBOL_NAME(sys_setgid16) + .long SYMBOL_NAME(sys_getgid16) + .long SYMBOL_NAME(sys_signal) + .long SYMBOL_NAME(sys_geteuid16) + .long SYMBOL_NAME(sys_getegid16) /* 50 */ + .long SYMBOL_NAME(sys_acct) + .long SYMBOL_NAME(sys_umount) /* recycled never used phys() */ + .long SYMBOL_NAME(sys_ni_syscall) /* old lock syscall holder */ + .long SYMBOL_NAME(sys_ioctl) + .long SYMBOL_NAME(sys_fcntl) /* 55 */ + .long SYMBOL_NAME(sys_ni_syscall) /* old mpx syscall holder */ + .long SYMBOL_NAME(sys_setpgid) + .long SYMBOL_NAME(sys_ni_syscall) /* old ulimit syscall holder */ + .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(sys_umask) /* 60 */ + .long SYMBOL_NAME(sys_chroot) + .long SYMBOL_NAME(sys_ustat) + .long SYMBOL_NAME(sys_dup2) + .long SYMBOL_NAME(sys_getppid) + .long SYMBOL_NAME(sys_getpgrp) /* 65 */ + .long SYMBOL_NAME(sys_setsid) + .long SYMBOL_NAME(sys_sigaction) + .long SYMBOL_NAME(sys_sgetmask) + .long SYMBOL_NAME(sys_ssetmask) + .long SYMBOL_NAME(sys_setreuid16) /* 70 */ + .long SYMBOL_NAME(sys_setregid16) + .long SYMBOL_NAME(sys_sigsuspend) + .long SYMBOL_NAME(sys_sigpending) + .long SYMBOL_NAME(sys_sethostname) + .long SYMBOL_NAME(sys_setrlimit) /* 75 */ + .long SYMBOL_NAME(sys_old_getrlimit) + .long SYMBOL_NAME(sys_getrusage) + .long SYMBOL_NAME(sys_gettimeofday) + .long SYMBOL_NAME(sys_settimeofday) + .long SYMBOL_NAME(sys_getgroups16) /* 80 */ + .long SYMBOL_NAME(sys_setgroups16) + .long SYMBOL_NAME(old_select) + .long SYMBOL_NAME(sys_symlink) + .long SYMBOL_NAME(sys_lstat) + .long SYMBOL_NAME(sys_readlink) /* 85 */ + .long SYMBOL_NAME(sys_uselib) + .long SYMBOL_NAME(sys_swapon) + .long SYMBOL_NAME(sys_reboot) + .long SYMBOL_NAME(old_readdir) + .long SYMBOL_NAME(old_mmap) /* 90 */ + .long SYMBOL_NAME(sys_munmap) + .long SYMBOL_NAME(sys_truncate) + .long SYMBOL_NAME(sys_ftruncate) + .long SYMBOL_NAME(sys_fchmod) + .long SYMBOL_NAME(sys_fchown16) /* 95 */ + .long SYMBOL_NAME(sys_getpriority) + .long SYMBOL_NAME(sys_setpriority) + .long SYMBOL_NAME(sys_ni_syscall) /* old profil syscall holder */ + .long SYMBOL_NAME(sys_statfs) + .long SYMBOL_NAME(sys_fstatfs) /* 100 */ + .long SYMBOL_NAME(sys_ioperm) + .long SYMBOL_NAME(sys_socketcall) + .long SYMBOL_NAME(sys_syslog) + .long SYMBOL_NAME(sys_setitimer) + .long SYMBOL_NAME(sys_getitimer) /* 105 */ + .long SYMBOL_NAME(sys_newstat) + .long SYMBOL_NAME(sys_newlstat) + .long SYMBOL_NAME(sys_newfstat) + .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(sys_ni_syscall) /* iopl for i386 */ /* 110 */ + .long SYMBOL_NAME(sys_vhangup) + .long SYMBOL_NAME(sys_ni_syscall) /* obsolete idle() syscall */ + .long SYMBOL_NAME(sys_ni_syscall) /* vm86old for i386 */ + .long SYMBOL_NAME(sys_wait4) + .long SYMBOL_NAME(sys_swapoff) /* 115 */ + .long SYMBOL_NAME(sys_sysinfo) + .long SYMBOL_NAME(sys_ipc) + .long SYMBOL_NAME(sys_fsync) + .long SYMBOL_NAME(sys_sigreturn) + .long SYMBOL_NAME(sys_clone) /* 120 */ + .long SYMBOL_NAME(sys_setdomainname) + .long SYMBOL_NAME(sys_newuname) + .long SYMBOL_NAME(sys_cacheflush) /* modify_ldt for i386 */ + .long SYMBOL_NAME(sys_adjtimex) + .long SYMBOL_NAME(sys_ni_syscall) /* 125 sys_mprotect */ + .long SYMBOL_NAME(sys_sigprocmask) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_create_module */ + .long SYMBOL_NAME(sys_init_module) + .long SYMBOL_NAME(sys_delete_module) + .long SYMBOL_NAME(sys_ni_syscall) /* 130 sys_get_kernel_syms */ + .long SYMBOL_NAME(sys_quotactl) + .long SYMBOL_NAME(sys_getpgid) + .long SYMBOL_NAME(sys_fchdir) + .long SYMBOL_NAME(sys_bdflush) + .long SYMBOL_NAME(sys_sysfs) /* 135 */ + .long SYMBOL_NAME(sys_personality) + .long SYMBOL_NAME(sys_ni_syscall) /* for afs_syscall */ + .long SYMBOL_NAME(sys_setfsuid16) + .long SYMBOL_NAME(sys_setfsgid16) + .long SYMBOL_NAME(sys_llseek) /* 140 */ + .long SYMBOL_NAME(sys_getdents) + .long SYMBOL_NAME(sys_select) + .long SYMBOL_NAME(sys_flock) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_msync */ + .long SYMBOL_NAME(sys_readv) /* 145 */ + .long SYMBOL_NAME(sys_writev) + .long SYMBOL_NAME(sys_getsid) + .long SYMBOL_NAME(sys_fdatasync) + .long SYMBOL_NAME(sys_sysctl) + .long SYMBOL_NAME(sys_ni_syscall) /* 150 sys_mlock */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_munlock */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_mlockall */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_munlockall */ + .long SYMBOL_NAME(sys_sched_setparam) + .long SYMBOL_NAME(sys_sched_getparam) /* 155 */ + .long SYMBOL_NAME(sys_sched_setscheduler) + .long SYMBOL_NAME(sys_sched_getscheduler) + .long SYMBOL_NAME(sys_sched_yield) + .long SYMBOL_NAME(sys_sched_get_priority_max) + .long SYMBOL_NAME(sys_sched_get_priority_min) /* 160 */ + .long SYMBOL_NAME(sys_sched_rr_get_interval) + .long SYMBOL_NAME(sys_nanosleep) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_mremap */ + .long SYMBOL_NAME(sys_setresuid16) + .long SYMBOL_NAME(sys_getresuid16) /* 165 */ + .long SYMBOL_NAME(sys_ni_syscall) /* for vm86 */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_query_module */ + .long SYMBOL_NAME(sys_poll) + .long SYMBOL_NAME(sys_nfsservctl) + .long SYMBOL_NAME(sys_setresgid16) /* 170 */ + .long SYMBOL_NAME(sys_getresgid16) + .long SYMBOL_NAME(sys_prctl) + .long SYMBOL_NAME(sys_rt_sigreturn) + .long SYMBOL_NAME(sys_rt_sigaction) + .long SYMBOL_NAME(sys_rt_sigprocmask) /* 175 */ + .long SYMBOL_NAME(sys_rt_sigpending) + .long SYMBOL_NAME(sys_rt_sigtimedwait) + .long SYMBOL_NAME(sys_rt_sigqueueinfo) + .long SYMBOL_NAME(sys_rt_sigsuspend) + .long SYMBOL_NAME(sys_pread64) /* 180 */ + .long SYMBOL_NAME(sys_pwrite64) + .long SYMBOL_NAME(sys_lchown16); + .long SYMBOL_NAME(sys_getcwd) + .long SYMBOL_NAME(sys_capget) + .long SYMBOL_NAME(sys_capset) /* 185 */ + .long SYMBOL_NAME(sys_sigaltstack) + .long SYMBOL_NAME(sys_sendfile) + .long SYMBOL_NAME(sys_ni_syscall) /* streams1 */ + .long SYMBOL_NAME(sys_ni_syscall) /* streams2 */ + .long SYMBOL_NAME(sys_vfork) /* 190 */ + .long SYMBOL_NAME(sys_getrlimit) + .long SYMBOL_NAME(sys_mmap2) + .long SYMBOL_NAME(sys_truncate64) + .long SYMBOL_NAME(sys_ftruncate64) + .long SYMBOL_NAME(sys_stat64) /* 195 */ + .long SYMBOL_NAME(sys_lstat64) + .long SYMBOL_NAME(sys_fstat64) + .long SYMBOL_NAME(sys_chown) + .long SYMBOL_NAME(sys_getuid) + .long SYMBOL_NAME(sys_getgid) /* 200 */ + .long SYMBOL_NAME(sys_geteuid) + .long SYMBOL_NAME(sys_getegid) + .long SYMBOL_NAME(sys_setreuid) + .long SYMBOL_NAME(sys_setregid) + .long SYMBOL_NAME(sys_getgroups) /* 205 */ + .long SYMBOL_NAME(sys_setgroups) + .long SYMBOL_NAME(sys_fchown) + .long SYMBOL_NAME(sys_setresuid) + .long SYMBOL_NAME(sys_getresuid) + .long SYMBOL_NAME(sys_setresgid) /* 210 */ + .long SYMBOL_NAME(sys_getresgid) + .long SYMBOL_NAME(sys_lchown) + .long SYMBOL_NAME(sys_setuid) + .long SYMBOL_NAME(sys_setgid) + .long SYMBOL_NAME(sys_setfsuid) /* 215 */ + .long SYMBOL_NAME(sys_setfsgid) + .long SYMBOL_NAME(sys_pivot_root) + .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(sys_getdents64) /* 220 */ + .long SYMBOL_NAME(sys_fcntl64) + .long SYMBOL_NAME(sys_ni_syscall) /* reserved for TUX */ + .long SYMBOL_NAME(sys_ni_syscall) + .long SYMBOL_NAME(sys_gettid) + .long SYMBOL_NAME(sys_ni_syscall) /* 225 */ /* sys_readahead */ + .long SYMBOL_NAME(sys_setxattr) + .long SYMBOL_NAME(sys_lsetxattr) + .long SYMBOL_NAME(sys_fsetxattr) + .long SYMBOL_NAME(sys_getxattr) + .long SYMBOL_NAME(sys_lgetxattr) /* 230 */ + .long SYMBOL_NAME(sys_fgetxattr) + .long SYMBOL_NAME(sys_listxattr) + .long SYMBOL_NAME(sys_llistxattr) + .long SYMBOL_NAME(sys_flistxattr) + .long SYMBOL_NAME(sys_removexattr) /* 235 */ + .long SYMBOL_NAME(sys_lremovexattr) + .long SYMBOL_NAME(sys_fremovexattr) + .long SYMBOL_NAME(sys_tkill) + .long SYMBOL_NAME(sys_sendfile64) + .long SYMBOL_NAME(sys_futex) /* 240 */ + .long SYMBOL_NAME(sys_sched_setaffinity) + .long SYMBOL_NAME(sys_sched_getaffinity) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_set_thread_area */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_get_thread_area */ + .long SYMBOL_NAME(sys_io_setup) /* 245 */ + .long SYMBOL_NAME(sys_io_destroy) + .long SYMBOL_NAME(sys_io_getevents) + .long SYMBOL_NAME(sys_io_submit) + .long SYMBOL_NAME(sys_io_cancel) + .long SYMBOL_NAME(sys_ni_syscall) /* 250 */ /* sys_alloc_hugepages */ + .long SYMBOL_NAME(sys_ni_syscall) /* sys_freec_hugepages */ + .long SYMBOL_NAME(sys_exit_group) + .long SYMBOL_NAME(sys_lookup_dcookie) + .long SYMBOL_NAME(sys_epoll_create) + .long SYMBOL_NAME(sys_epoll_ctl) /* 255 */ + .long SYMBOL_NAME(sys_epoll_wait) + .long SYMBOL_NAME(sys_ni_syscall) /* sys_remap_file_pages */ + .long SYMBOL_NAME(sys_set_tid_address) + .long SYMBOL_NAME(sys_timer_create) + .long SYMBOL_NAME(sys_timer_settime) /* 260 */ + .long SYMBOL_NAME(sys_timer_gettime) + .long SYMBOL_NAME(sys_timer_getoverrun) + .long SYMBOL_NAME(sys_timer_delete) + .long SYMBOL_NAME(sys_clock_settime) + .long SYMBOL_NAME(sys_clock_gettime) /* 265 */ + .long SYMBOL_NAME(sys_clock_getres) + .long SYMBOL_NAME(sys_clock_nanosleep) + + .rept NR_syscalls-(.-SYMBOL_NAME(sys_call_table))/4 + .long SYMBOL_NAME(sys_ni_syscall) + .endr + +SYMBOL_NAME_LABEL(sys_clone) + mov.l #SYMBOL_NAME(h8300_clone),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + +SYMBOL_NAME_LABEL(sys_sigsuspend) + mov.l #SYMBOL_NAME(do_sigsuspend),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + +SYMBOL_NAME_LABEL(sys_rt_sigsuspend) + mov.l #SYMBOL_NAME(do_rt_sigsuspend),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + +SYMBOL_NAME_LABEL(sys_sigreturn) + mov.l #SYMBOL_NAME(do_sigreturn),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + +SYMBOL_NAME_LABEL(sys_rt_sigreturn) + mov.l #SYMBOL_NAME(do_rt_sigreturn),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + +SYMBOL_NAME_LABEL(sys_fork) + mov.l #SYMBOL_NAME(h8300_fork),er0 + jmp @SYMBOL_NAME(syscall_trampoline) + diff -Nru a/arch/h8300/kernel/time.c b/arch/h8300/kernel/time.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/time.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,134 @@ +/* + * linux/arch/h8300/kernel/time.c + * + * Yoshinori Sato + * + * Copied/hacked from: + * + * linux/arch/m68k/kernel/time.c + * + * Copyright (C) 1991, 1992, 1995 Linus Torvalds + * + * This file contains the m68k-specific time handling details. + * Most of the stuff is located in the machine specific files. + * + * 1997-09-10 Updated NTP code according to technical memorandum Jan '96 + * "A Kernel Model for Precision Timekeeping" by Dave Mills + */ + +#include /* CONFIG_HEARTBEAT */ +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#define TICK_SIZE (tick_nsec / 1000) + +u64 jiffies_64; + +static inline void do_profile (unsigned long pc) +{ + if (prof_buffer && current->pid) { + extern int _stext; + pc -= (unsigned long) &_stext; + pc >>= prof_shift; + if (pc < prof_len) + ++prof_buffer[pc]; + else + /* + * Don't ignore out-of-bounds PC values silently, + * put them into the last histogram slot, so if + * present, they will show up as a sharp peak. + */ + ++prof_buffer[prof_len-1]; + } +} + +/* + * timer_interrupt() needs to keep up the real-time clock, + * as well as call the "do_timer()" routine every clocktick + */ +static void timer_interrupt(int irq, void *dummy, struct pt_regs * regs) +{ + /* may need to kick the hardware timer */ + platform_timer_eoi(); + + do_timer(regs); + + if (!user_mode(regs)) + do_profile(regs->pc); + +} + +void time_init(void) +{ + unsigned int year, mon, day, hour, min, sec; + + /* FIX by dqg : Set to zero for platforms that don't have tod */ + /* without this time is undefined and can overflow time_t, causing */ + /* very stange errors */ + year = 1980; + mon = day = 1; + hour = min = sec = 0; + platform_gettod (&year, &mon, &day, &hour, &min, &sec); + + if ((year += 1900) < 1970) + year += 100; + xtime.tv_sec = mktime(year, mon, day, hour, min, sec); + xtime.tv_nsec = 0; + + platform_timer_setup(timer_interrupt); +} + +/* + * This version of gettimeofday has near microsecond resolution. + */ +void do_gettimeofday(struct timeval *tv) +{ + unsigned long flags; + unsigned long usec, sec; + + read_lock_irqsave(&xtime_lock, flags); + usec = 0; + sec = xtime.tv_sec; + usec += (xtime.tv_nsec / 1000); + read_unlock_irqrestore(&xtime_lock, flags); + + while (usec >= 1000000) { + usec -= 1000000; + sec++; + } + + tv->tv_sec = sec; + tv->tv_usec = usec; +} + +void do_settimeofday(struct timeval *tv) +{ + write_lock_irq(&xtime_lock); + /* This is revolting. We need to set the xtime.tv_usec + * correctly. However, the value in this location is + * is value at the last tick. + * Discover what correction gettimeofday + * would have done, and then undo it! + */ + while (tv->tv_usec < 0) { + tv->tv_usec += 1000000; + tv->tv_sec--; + } + + xtime.tv_sec = tv->tv_sec; + xtime.tv_nsec = (tv->tv_usec * 1000); + time_adjust = 0; /* stop active adjtime() */ + time_status |= STA_UNSYNC; + time_maxerror = NTP_PHASE_LIMIT; + time_esterror = NTP_PHASE_LIMIT; + write_unlock_irq(&xtime_lock); +} diff -Nru a/arch/h8300/kernel/traps.c b/arch/h8300/kernel/traps.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/kernel/traps.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,124 @@ +/* + * linux/arch/h8300/boot/traps.c -- general exception handling code + * H8/300 support Yoshinori Sato + * + * Cloned from Linux/m68k. + * + * No original Copyright holder listed, + * Probabily original (C) Roman Zippel (assigned DJD, 1999) + * + * Copyright 1999-2000 D. Jeff Dionne, + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +/* + * this must be called very early as the kernel might + * use some instruction that are emulated on the 060 + */ + +void __init base_trap_init(void) +{ +} + +void __init trap_init (void) +{ +} + +asmlinkage void set_esp0 (unsigned long ssp) +{ + current->thread.esp0 = ssp; +} + +/* + * Generic dumping code. Used for panic and debug. + */ + +static void dump(struct pt_regs *fp) +{ + unsigned long *sp; + unsigned char *tp; + int i; + + printk("\nCURRENT PROCESS:\n\n"); +#if 0 +{ + extern int swt_lastjiffies, swt_reference; + printk("WATCHDOG: jiffies=%d lastjiffies=%d [%d] reference=%d\n", + jiffies, swt_lastjiffies, (swt_lastjiffies - jiffies), + swt_reference); +} +#endif + printk("COMM=%s PID=%d\n", current->comm, current->pid); + if (current->mm) { + printk("TEXT=%08x-%08x DATA=%08x-%08x BSS=%08x-%08x\n", + (int) current->mm->start_code, + (int) current->mm->end_code, + (int) current->mm->start_data, + (int) current->mm->end_data, + (int) current->mm->end_data, + (int) current->mm->brk); + printk("USER-STACK=%08x KERNEL-STACK=%08x\n\n", + (int) current->mm->start_stack, + (int) PAGE_SIZE+(unsigned long)current); + } + + printk("PC: %08lx\n", (long)fp->pc); + printk("CCR: %08lx SP: %08lx\n", fp->ccr, (long) fp); + printk("ER0: %08lx ER1: %08lx ER2: %08lx ER3: %08lx\n", + fp->er0, fp->er1, fp->er2, fp->er3); + printk("\nCODE:"); + tp = ((unsigned char *) fp->pc) - 0x20; + for (sp = (unsigned long *) tp, i = 0; (i < 0x40); i += 4) { + if ((i % 0x10) == 0) + printk("\n%08x: ", (int) (tp + i)); + printk("%08x ", (int) *sp++); + } + printk("\n"); + + printk("\nKERNEL STACK:"); + tp = ((unsigned char *) fp) - 0x40; + for (sp = (unsigned long *) tp, i = 0; (i < 0xc0); i += 4) { + if ((i % 0x10) == 0) + printk("\n%08x: ", (int) (tp + i)); + printk("%08x ", (int) *sp++); + } + printk("\n"); + if (STACK_MAGIC != *(unsigned long *)((unsigned long)current+PAGE_SIZE)) + printk("(Possibly corrupted stack page??)\n"); + + printk("\n\n"); +} + +void show_trace_task(struct task_struct *tsk) +{ + /* DAVIDM: we can do better, need a proper stack dump */ + printk("STACK ksp=0x%lx, usp=0x%lx\n", tsk->thread.ksp, tsk->thread.usp); +} + +void die_if_kernel (char *str, struct pt_regs *fp, int nr) +{ + extern int console_loglevel; + + if (!(fp->ccr & PS_S)) + return; + + console_loglevel = 15; + dump(fp); + + do_exit(SIGSEGV); +} diff -Nru a/arch/h8300/lib/Makefile b/arch/h8300/lib/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,9 @@ +# +# Makefile for H8/300-specific library files.. +# + +.S.o: + $(CC) $(AFLAGS) -D__ASSEMBLY__ -c $< -o $@ + +L_TARGET = lib.a +obj-y = ashrdi3.o checksum.o memcpy.o memset.o abs.o diff -Nru a/arch/h8300/lib/abs.S b/arch/h8300/lib/abs.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/abs.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,21 @@ +;;; memcpy.S + +#include + +#if defined(__H8300H__) + .h8300h +#endif +#if defined(__H8300S__) + .h8300s +#endif + .text +.global SYMBOL_NAME(abs) + +;;; int abs(int n) +SYMBOL_NAME_LABEL(abs) + mov.l er0,er0 + bpl 1f + neg.l er0 +1: + rts + diff -Nru a/arch/h8300/lib/ashrdi3.c b/arch/h8300/lib/ashrdi3.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/ashrdi3.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,63 @@ +/* ashrdi3.c extracted from gcc-2.7.2/libgcc2.c which is: */ +/* Copyright (C) 1989, 1992, 1993, 1994, 1995 Free Software Foundation, Inc. + +This file is part of GNU CC. + +GNU CC is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU CC is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with GNU CC; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#define BITS_PER_UNIT 8 + +typedef int SItype __attribute__ ((mode (SI))); +typedef unsigned int USItype __attribute__ ((mode (SI))); +typedef int DItype __attribute__ ((mode (DI))); +typedef int word_type __attribute__ ((mode (__word__))); + +struct DIstruct {SItype high, low;}; + +typedef union +{ + struct DIstruct s; + DItype ll; +} DIunion; + +DItype +__ashrdi3 (DItype u, word_type b) +{ + DIunion w; + word_type bm; + DIunion uu; + + if (b == 0) + return u; + + uu.ll = u; + + bm = (sizeof (SItype) * BITS_PER_UNIT) - b; + if (bm <= 0) + { + /* w.s.high = 1..1 or 0..0 */ + w.s.high = uu.s.high >> (sizeof (SItype) * BITS_PER_UNIT - 1); + w.s.low = uu.s.high >> -bm; + } + else + { + USItype carries = (USItype)uu.s.high << bm; + w.s.high = uu.s.high >> b; + w.s.low = ((USItype)uu.s.low >> b) | carries; + } + + return w.ll; +} diff -Nru a/arch/h8300/lib/checksum.c b/arch/h8300/lib/checksum.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/checksum.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,156 @@ +/* + * INET An implementation of the TCP/IP protocol suite for the LINUX + * operating system. INET is implemented using the BSD Socket + * interface as the means of communication with the user level. + * + * IP/TCP/UDP checksumming routines + * + * Authors: Jorge Cwik, + * Arnt Gulbrandsen, + * Tom May, + * Andreas Schwab, + * Lots of code moved from tcp.c and ip.c; see those files + * for more names. + * + * 03/02/96 Jes Sorensen, Andreas Schwab, Roman Hodek: + * Fixed some nasty bugs, causing some horrible crashes. + * A: At some points, the sum (%0) was used as + * length-counter instead of the length counter + * (%1). Thanks to Roman Hodek for pointing this out. + * B: GCC seems to mess up if one uses too many + * data-registers to hold input values and one tries to + * specify d0 and d1 as scratch registers. Letting gcc choose these + * registers itself solves the problem. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version + * 2 of the License, or (at your option) any later version. + */ + +/* Revised by Kenneth Albanowski for m68knommu. Basic problem: unaligned access kills, so most + of the assembly has to go. */ + +#include + +static inline unsigned short from32to16(unsigned long x) +{ + /* add up 16-bit and 16-bit for 16+c bit */ + x = (x & 0xffff) + (x >> 16); + /* add up carry.. */ + x = (x & 0xffff) + (x >> 16); + return x; +} + +static unsigned long do_csum(const unsigned char * buff, int len) +{ + int odd, count; + unsigned long result = 0; + + if (len <= 0) + goto out; + odd = 1 & (unsigned long) buff; + if (odd) { + result = *buff; + len--; + buff++; + } + count = len >> 1; /* nr of 16-bit words.. */ + if (count) { + if (2 & (unsigned long) buff) { + result += *(unsigned short *) buff; + count--; + len -= 2; + buff += 2; + } + count >>= 1; /* nr of 32-bit words.. */ + if (count) { + unsigned long carry = 0; + do { + unsigned long w = *(unsigned long *) buff; + count--; + buff += 4; + result += carry; + result += w; + carry = (w > result); + } while (count); + result += carry; + result = (result & 0xffff) + (result >> 16); + } + if (len & 2) { + result += *(unsigned short *) buff; + buff += 2; + } + } + if (len & 1) + result += (*buff << 8); + result = from32to16(result); + if (odd) + result = ((result >> 8) & 0xff) | ((result & 0xff) << 8); +out: + return result; +} + +/* + * This is a version of ip_compute_csum() optimized for IP headers, + * which always checksum on 4 octet boundaries. + */ +unsigned short ip_fast_csum(unsigned char * iph, unsigned int ihl) +{ + return ~do_csum(iph,ihl*4); +} + +/* + * computes the checksum of a memory block at buff, length len, + * and adds in "sum" (32-bit) + * + * returns a 32-bit number suitable for feeding into itself + * or csum_tcpudp_magic + * + * this function must be called with even lengths, except + * for the last fragment, which may be odd + * + * it's best to have buff aligned on a 32-bit boundary + */ +unsigned int csum_partial(const unsigned char * buff, int len, unsigned int sum) +{ + unsigned int result = do_csum(buff, len); + + /* add in old sum, and carry.. */ + result += sum; + /* 16+c bits -> 16 bits */ + result = (result & 0xffff) + (result >> 16); + return result; +} + +/* + * this routine is used for miscellaneous IP-like checksums, mainly + * in icmp.c + */ +unsigned short ip_compute_csum(const unsigned char * buff, int len) +{ + return ~do_csum(buff,len); +} + +/* + * copy from fs while checksumming, otherwise like csum_partial + */ + +unsigned int +csum_partial_copy_from_user(const char *src, char *dst, int len, int sum, int *csum_err) +{ + if (csum_err) *csum_err = 0; + memcpy(dst, src, len); + return csum_partial(dst, len, sum); +} + +/* + * copy from ds while checksumming, otherwise like csum_partial + */ + +unsigned int +csum_partial_copy(const char *src, char *dst, int len, int sum) +{ + memcpy(dst, src, len); + return csum_partial(dst, len, sum); +} diff -Nru a/arch/h8300/lib/memcpy.S b/arch/h8300/lib/memcpy.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/memcpy.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,84 @@ +;;; memcpy.S + +#include + +#if defined(__H8300H__) + .h8300h +#endif +#if defined(__H8300S__) + .h8300s +#endif + + .text +.global SYMBOL_NAME(memcpy) + +;;; void *memcpy(void *to, void *from, size_t n) +SYMBOL_NAME_LABEL(memcpy) + mov.l er2,er2 + bne 1f + rts +1: + ;; address check + bld #0,r0l + bxor #0,r1l + bcs 4f + mov.l er4,@-sp + mov.l er0,@-sp + btst #0,r0l + beq 1f + ;; (aligned even) odd address + mov.b @er1,r3l + mov.b r3l,@er0 + adds #1,er1 + adds #1,er0 + dec.l #1,er2 + beq 3f +1: + ;; n < sizeof(unsigned long) check + sub.l er4,er4 + adds #4,er4 ; loop count check value + cmp.l er4,er2 + blo 2f + ;; unsigned long copy +1: + mov.l @er1,er3 + mov.l er3,@er0 + adds #4,er0 + adds #4,er1 + subs #4,er2 + cmp.l er4,er2 + bcc 1b + ;; rest +2: + mov.l er2,er2 + beq 3f +1: + mov.b @er1,r3l + mov.b r3l,@er0 + adds #1,er1 + adds #1,er0 + dec.l #1,er2 + bne 1b +3: + mov.l @sp+,er0 + mov.l @sp+,er4 + rts + + ;; odd <- even / even <- odd +4: + mov.l er4,er3 + mov.l er2,er4 + mov.l er5,er2 + mov.l er1,er5 + mov.l er6,er1 + mov.l er0,er6 +1: + eepmov.w + mov.w r4,r4 + bne 1b + dec.w #1,e4 + bpl 1b + mov.l er1,er6 + mov.l er2,er5 + mov.l er3,er4 + rts diff -Nru a/arch/h8300/lib/memset.S b/arch/h8300/lib/memset.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/lib/memset.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,61 @@ +/* memset.S */ + +#include + +#if defined(__H8300H__) + .h8300h +#endif +#if defined(__H8300S__) + .h8300s +#endif + .text + +.global SYMBOL_NAME(memset) + +;;void *memset(*ptr, int c, size_t count) +;; ptr = er0 +;; c = er1(r1l) +;; count = er2 +SYMBOL_NAME_LABEL(memset) + mov.l er2,er2 + beq 7f + mov.l er0,@-sp + btst #0,r0l + beq 2f + + ;; odd address +1: + mov.b r1l,@er0 + adds #1,er0 + dec.l #1,er2 + beq 6f + + ;; even address +2: + mov.l er2,er3 + cmp.l #4,er2 + blo 4f + ;; count>=4 -> count/4 + shlr.l er2 + shlr.l er2 + ;; byte -> long + mov.b r1l,r1h + mov.w r1,e1 +3: + mov.l er1,@er0 + adds #4,er0 + dec.l #1,er2 + bne 3b +4: + ;; count % 4 + and.b #3,r3l + beq 6f +5: + mov.b r1l,@er0 + adds #1,er0 + dec.b r3l + bne 5b +6: + mov.l @sp+,er0 +7: + rts \ No newline at end of file diff -Nru a/arch/h8300/mm/Makefile b/arch/h8300/mm/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,10 @@ +# +# Makefile for the linux m68k-specific parts of the memory manager. +# +# 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 definition is now in the main makefile... + +obj-y := init.o fault.o memory.o kmap.o extable.o diff -Nru a/arch/h8300/mm/extable.c b/arch/h8300/mm/extable.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/extable.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,30 @@ +/* + * linux/arch/h8300/mm/extable.c + */ + +#include +#include +#include +#include + +/* Simple binary search */ +const struct exception_table_entry * +search_extable(const struct exception_table_entry *first, + const struct exception_table_entry *last, + unsigned long value) +{ + while (first <= last) { + const struct exception_table_entry *mid; + long diff; + + mid = (last - first) / 2 + first; + diff = mid->insn - value; + if (diff == 0) + return mid; + else if (diff < 0) + first = mid+1; + else + last = mid-1; + } + return NULL; +} diff -Nru a/arch/h8300/mm/fault.c b/arch/h8300/mm/fault.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/fault.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,58 @@ +/* + * linux/arch/h8300/mm/fault.c + * + * Copyright (C) 1998 D. Jeff Dionne , + * Copyright (C) 2000 Lineo, Inc. (www.lineo.com) + * + * Based on: + * + * linux/arch/m68knommu/mm/fault.c + * linux/arch/m68k/mm/fault.c + * + * Copyright (C) 1995 Hamish Macdonald + */ + +#include +#include +#include +#include + +#include +#include + +extern void die_if_kernel(char *, struct pt_regs *, long); + +/* + * This routine handles page faults. It determines the problem, and + * then passes it off to one of the appropriate routines. + * + * error_code: + * bit 0 == 0 means no page found, 1 means protection fault + * bit 1 == 0 means read, 1 means write + * + * If this routine detects a bad access, it returns 1, otherwise it + * returns 0. + */ +asmlinkage int do_page_fault(struct pt_regs *regs, unsigned long address, + unsigned long error_code) +{ +#ifdef DEBUG + printk ("regs->sr=%#x, regs->pc=%#lx, address=%#lx, %ld\n", + regs->sr, regs->pc, address, error_code); +#endif + +/* + * Oops. The kernel tried to access some bad page. We'll have to + * terminate things with extreme prejudice. + */ + if ((unsigned long) address < PAGE_SIZE) { + printk(KERN_ALERT "Unable to handle kernel NULL pointer dereference"); + } else + printk(KERN_ALERT "Unable to handle kernel access"); + printk(" at virtual address %08lx\n",address); + die_if_kernel("Oops", regs, error_code); + do_exit(SIGKILL); + + return 1; +} + diff -Nru a/arch/h8300/mm/init.c b/arch/h8300/mm/init.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/init.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,235 @@ +/* + * linux/arch/h8300/mm/init.c + * + * Copyright (C) 1998 D. Jeff Dionne , + * Kenneth Albanowski , + * Copyright (C) 2000 Lineo, Inc. (www.lineo.com) + * + * Based on: + * + * linux/arch/m68knommu/mm/init.c + * linux/arch/m68k/mm/init.c + * + * Copyright (C) 1995 Hamish Macdonald + * + * JAN/1999 -- hacked to support ColdFire (gerg@snapgear.com) + * DEC/2000 -- linux 2.4 support + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_BLK_DEV_RAM +#include +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#undef DEBUG + +extern void die_if_kernel(char *,struct pt_regs *,long); +extern void free_initmem(void); + +/* + * BAD_PAGE is the page that is used for page faults when linux + * is out-of-memory. Older versions of linux just did a + * do_exit(), but using this instead means there is less risk + * for a process dying in kernel mode, possibly leaving a inode + * unused etc.. + * + * BAD_PAGETABLE is the accompanying page-table: it is initialized + * to point to BAD_PAGE entries. + * + * ZERO_PAGE is a special page that is used for zero-initialized + * data and COW. + */ +static unsigned long empty_bad_page_table; + +static unsigned long empty_bad_page; + +unsigned long empty_zero_page; + +extern unsigned long rom_length; + +void show_mem(void) +{ + unsigned long i; + int free = 0, total = 0, reserved = 0, shared = 0; + int cached = 0; + + printk("\nMem-info:\n"); + show_free_areas(); + i = max_mapnr; + while (i-- > 0) { + total++; + if (PageReserved(mem_map+i)) + reserved++; + else if (PageSwapCache(mem_map+i)) + cached++; + else if (!page_count(mem_map+i)) + free++; + else + shared += page_count(mem_map+i) - 1; + } + printk("%d pages of RAM\n",total); + printk("%d free pages\n",free); + printk("%d reserved pages\n",reserved); + printk("%d pages shared\n",shared); + printk("%d pages swap cached\n",cached); +} + +extern unsigned long memory_start; +extern unsigned long memory_end; + +/* + * paging_init() continues the virtual memory environment setup which + * was begun by the code in arch/head.S. + * The parameters are pointers to where to stick the starting and ending + * addresses of available kernel virtual memory. + */ +void paging_init(void) +{ + /* + * Make sure start_mem is page aligned, otherwise bootmem and + * page_alloc get different views og the world. + */ +#ifdef DEBUG + unsigned long start_mem = PAGE_ALIGN(memory_start); +#endif + unsigned long end_mem = memory_end & PAGE_MASK; + +#ifdef DEBUG + printk ("start_mem is %#lx\nvirtual_end is %#lx\n", + start_mem, end_mem); +#endif + + /* + * Initialize the bad page table and bad page to point + * to a couple of allocated pages. + */ + empty_bad_page_table = (unsigned long)alloc_bootmem_pages(PAGE_SIZE); + empty_bad_page = (unsigned long)alloc_bootmem_pages(PAGE_SIZE); + empty_zero_page = (unsigned long)alloc_bootmem_pages(PAGE_SIZE); + memset((void *)empty_zero_page, 0, PAGE_SIZE); + + /* + * Set up SFC/DFC registers (user data space). + */ + set_fs (USER_DS); + +#ifdef DEBUG + printk ("before free_area_init\n"); + + printk ("free_area_init -> start_mem is %#lx\nvirtual_end is %#lx\n", + start_mem, end_mem); +#endif + + { + unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0}; + + zones_size[ZONE_DMA] = 0 >> PAGE_SHIFT; + zones_size[ZONE_NORMAL] = (end_mem - PAGE_OFFSET) >> PAGE_SHIFT; +#ifdef CONFIG_HIGHMEM + zones_size[ZONE_HIGHMEM] = 0; +#endif + free_area_init(zones_size); + } +} + +void mem_init(void) +{ + int codek = 0, datak = 0, initk = 0; + /* DAVIDM look at setup memory map generically with reserved area */ + unsigned long tmp; + extern char _etext, _stext, _sdata, _ebss, __init_begin, __init_end; + extern unsigned char _ramend, _ramstart; + unsigned long len = &_ramend - &_ramstart; + unsigned long start_mem = memory_start; /* DAVIDM - these must start at end of kernel */ + unsigned long end_mem = memory_end; /* DAVIDM - this must not include kernel stack at top */ + +#ifdef DEBUG + printk("Mem_init: start=%lx, end=%lx\n", start_mem, end_mem); +#endif + + end_mem &= PAGE_MASK; + high_memory = (void *) end_mem; + + start_mem = PAGE_ALIGN(start_mem); + max_mapnr = num_physpages = MAP_NR(high_memory); + + /* this will put all memory onto the freelists */ + totalram_pages = free_all_bootmem(); + + codek = (&_etext - &_stext) >> 10; + datak = (&_ebss - &_sdata) >> 10; + initk = (&__init_begin - &__init_end) >> 10; + + tmp = nr_free_pages() << PAGE_SHIFT; + printk("Memory available: %luk/%luk RAM, %luk/%luk ROM (%dk kernel code, %dk data)\n", + tmp >> 10, + len >> 10, + (rom_length > 0) ? ((rom_length >> 10) - codek) : 0, + rom_length >> 10, + codek, + datak + ); +} + + +#ifdef CONFIG_BLK_DEV_INITRD +void free_initrd_mem(unsigned long start, unsigned long end) +{ + int pages = 0; + for (; start < end; start += PAGE_SIZE) { + ClearPageReserved(virt_to_page(start)); + set_page_count(virt_to_page(start), 1); + free_page(start); + totalram_pages++; + pages++; + } + printk ("Freeing initrd memory: %dk freed\n", pages); +} +#endif + +void +free_initmem() +{ +#ifdef CONFIG_RAMKERNEL + unsigned long addr; + extern char __init_begin, __init_end; +/* + * the following code should be cool even if these sections + * are not page aligned. + */ + addr = PAGE_ALIGN((unsigned long)(&__init_begin)); + /* next to check that the page we free is not a partial page */ + for (; addr + PAGE_SIZE < (unsigned long)(&__init_end); addr +=PAGE_SIZE) { + ClearPageReserved(virt_to_page(addr)); + set_page_count(virt_to_page(addr), 1); + free_page(addr); + totalram_pages++; + } + printk("Freeing unused kernel memory: %ldk freed (0x%x - 0x%x)\n", + (addr - PAGE_ALIGN((long) &__init_begin)) >> 10, + (int)(PAGE_ALIGN((unsigned long)(&__init_begin))), + (int)(addr - PAGE_SIZE)); +#endif +} + diff -Nru a/arch/h8300/mm/kmap.c b/arch/h8300/mm/kmap.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/kmap.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,59 @@ +/* + * linux/arch/h8300/mm/kmap.c + * + * Based on + * linux/arch/m68knommu/mm/kmap.c + * + * Copyright (C) 2000 Lineo, + * Copyright (C) 2000-2002 David McCullough + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#undef DEBUG + +/* + * Map some physical address range into the kernel address space. + */ +void *__ioremap(unsigned long physaddr, unsigned long size, int cacheflag) +{ + return (void *)physaddr; +} + +/* + * Unmap a ioremap()ed region again. + */ +void iounmap(void *addr) +{ +} + +/* + * __iounmap unmaps nearly everything, so be careful + * it doesn't free currently pointer/page tables anymore but it + * wans't used anyway and might be added later. + */ +void __iounmap(void *addr, unsigned long size) +{ +} + +/* + * Set new cache mode for some kernel address space. + * The caller must push data for that range itself, if such data may already + * be in the cache. + */ +void kernel_set_cachemode(void *addr, unsigned long size, int cmode) +{ +} diff -Nru a/arch/h8300/mm/memory.c b/arch/h8300/mm/memory.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/mm/memory.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,70 @@ +/* + * linux/arch/h8300/mm/memory.c + * + * Copyright (C) 2002 Yoshinori Sato , + * + * Based on: + * + * linux/arch/m68knommu/mm/memory.c + * + * Copyright (C) 1998 Kenneth Albanowski , + * Copyright (C) 1999-2002, Greg Ungerer (gerg@snapgear.com) + * + * Based on: + * + * linux/arch/m68k/mm/memory.c + * + * Copyright (C) 1995 Hamish Macdonald + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +void cache_clear (unsigned long paddr, int len) +{ +} + + +void cache_push (unsigned long paddr, int len) +{ +} + +void cache_push_v (unsigned long vaddr, int len) +{ +} + +/* Map some physical address range into the kernel address space. The + * code is copied and adapted from map_chunk(). + */ + +unsigned long kernel_map(unsigned long paddr, unsigned long size, + int nocacheflag, unsigned long *memavailp ) +{ + return paddr; +} + +#ifdef MAGIC_ROM_PTR + +int is_in_rom(unsigned long addr) +{ + /* Anything not in operational RAM is returned as in rom! */ + if (addr < _ramstart || addr >= _ramend) + return 1; + else + return 0; +} + +#endif + diff -Nru a/arch/h8300/platform/h8300h/Makefile b/arch/h8300/platform/h8300h/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,22 @@ +# +# Makefile for the linux kernel. +# +# Reuse any files we can from the H8/300H +# + +#VPATH := $(VPATH):$(BOARD) + +# 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). +# +.S.o: + $(CC) -D__ASSEMBLY__ $(AFLAGS) -I. -c $< -o $*.o + +obj-y := entry.o ints.o + +$(BOARD)/crt0_$(MODEL).o: $(BOARD)/crt0_$(MODEL).S + +entry.o: entry.S + +ints.o: ints.c diff -Nru a/arch/h8300/platform/h8300h/Rules.make b/arch/h8300/platform/h8300h/Rules.make --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/Rules.make Thu Apr 17 19:22:50 2003 @@ -0,0 +1,51 @@ +# +# h8300h/Makefile +# +# This file is included by the global makefile so that you can add your own +# platform-specific flags and dependencies. +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (c) 2001 Lineo, Inc, +# Copyright (c) 2000,2001 D. Jeff Dionne +# Copyright (c) 1998,1999 D. Jeff Dionne +# Copyright (C) 1998 Kenneth Albanowski +# Copyright (C) 1994 Hamish Macdonald +# +# 68VZ328 Fixes By Evan Stawnyczy +# H8/300H Modify By Yoshinori Sato + +CROSS_COMPILE = h8300-elf- + +GCC_DIR = $(shell $(CC) -v 2>&1 | grep specs | sed -e 's/.* \(.*\)specs/\1\./') + +INCGCC = $(GCC_DIR)/include +LIBGCC = $(GCC_DIR)/h8300h/int32/libgcc.a + +CFLAGS := -fno-builtin -DNO_CACHE $(CFLAGS) -pipe -DNO_MM -DNO_FPU -DNO_CACHE -mh -mint32 -malign-300 -D__ELF__ -DNO_FORGET -DUTS_SYSNAME=\"uClinux\" -D__linux__ -DTARGET=$(BOARD) +AFLAGS := $(AFLAGS) -pipe -DNO_MM -DNO_FPU -DNO_CACHE -mh -D__ELF__ -DUTS_SYSNAME=\"uClinux\" + +LINKFLAGS = -T arch/$(ARCH)/platform/$(PLATFORM)/$(BOARD)/$(MODEL).ld +LDFLAGS := $(LDFLAGS) -mh8300helf + +HEAD := arch/$(ARCH)/platform/$(PLATFORM)/$(BOARD)/crt0_$(MODEL).o + +SUBDIRS := arch/$(ARCH)/kernel arch/$(ARCH)/mm arch/$(ARCH)/lib \ + arch/$(ARCH)/platform/$(PLATFORM) \ + arch/$(ARCH)/platform/$(PLATFORM)/$(BOARD) \ + $(SUBDIRS) + +CORE_FILES := arch/$(ARCH)/kernel/kernel.o arch/$(ARCH)/mm/mm.o \ + arch/$(ARCH)/platform/$(PLATFORM)/platform.o \ + arch/$(ARCH)/platform/$(PLATFORM)/$(BOARD)/$(BOARD).o \ + $(CORE_FILES) + +LIBS += arch/$(ARCH)/lib/lib.a $(LIBGCC) + +linux.bin: linux + $(OBJCOPY) -O binary linux linux.bin + +archclean: + rm -f linux diff -Nru a/arch/h8300/platform/h8300h/aki3068net/Makefile b/arch/h8300/platform/h8300h/aki3068net/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/aki3068net/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,16 @@ +# +# 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). +# + +all: $(BOARD).o +O_TARGET := $(BOARD).o +obj-y := timer.o + +timer.o: timer.c + +clean: + rm -f *.[oa] diff -Nru a/arch/h8300/platform/h8300h/aki3068net/crt0_ram.S b/arch/h8300/platform/h8300h/aki3068net/crt0_ram.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/aki3068net/crt0_ram.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,109 @@ +/* + * linux/arch/h8300/platform/h8300h/aki3068net/crt0_ram.S + * + * Yoshinori Sato + * + * Platform depend startup for uClinux-2.4.x + * Target Archtecture: AE-3068 (aka. aki3068net) + * Memory Layout : RAM + */ + +#define ASSEMBLY + +#include +#include + + .global SYMBOL_NAME(_start) + .global SYMBOL_NAME(command_line) + .global SYMBOL_NAME(_platform_gpio_table) + .global SYMBOL_NAME(_target_name) + + .h8300h + + .section .text + .file "crt0_ram.S" + + /* CPU Reset entry */ +SYMBOL_NAME_LABEL(_start) + mov.l #__ramend,sp + ldc #0x80,ccr + + /* Peripheral Setup */ + + /* .bss clear */ + mov.l #__sbss,er5 + mov.l er5,er6 + inc.l #1,er6 + mov.l #__ebss,er4 + sub.l er5,er4 + sub.w r0,r0 + mov.b r0l,@er5 +1: + eepmov.w + dec.w #1,e4 + bpl 1b + + /* copy kernel commandline */ + mov.l #COMMAND_START,er5 + mov.l #SYMBOL_NAME(command_line),er6 + mov.w #512,r4 + eepmov.w + + /* RAM Interrupt Vector Table Setup */ +#if defined(CONFIG_GDB_DEBUG) + mov.l @SYMBOL_NAME(interrupt_redirect_table)+11*4,er0 +#endif + mov.l #SYMBOL_NAME(_vector_lma),er5 + mov.l #SYMBOL_NAME(interrupt_redirect_table),er6 + mov.w #0x100,r4 + eepmov.w +#if defined(CONFIG_GDB_DEBUG) + mov.l er0,@SYMBOL_NAME(interrupt_redirect_table)+11*4 +#endif + + /* uClinux kernel start */ + ldc #0x90,ccr /* running kernel */ + mov.l #SYMBOL_NAME(init_task_union),sp + mov.l sp,@SYMBOL_NAME(_current_task) + add.l #0x2000,sp + jsr @_start_kernel +_exit: + + jmp _exit + + rts + + /* I/O port assign information */ +__platform_gpio_table: + mov.l #gpio_table,er0 + rts + +gpio_table: + ;; P1DDR + .byte 0xff,0xff + ;; P2DDR + .byte 0xff,0xff + ;; P3DDR + .byte 0xff,0x00 + ;; P4DDR + .byte 0x00,0x00 + ;; P5DDR + .byte 0x01,0x01 + ;; P6DDR + .byte 0x00,0x00 + ;; dummy + .byte 0x00,0x00 + ;; P8DDR + .byte 0x0c,0x0c + ;; P9DDR + .byte 0x00,0x00 + ;; PADDR + .byte 0x00,0x00 + ;; PBDDR + .byte 0x30,0x30 + +__target_name: + .asciz "AE-3068" + + .section .bootvec,"ax" + jmp @SYMBOL_NAME(_start) diff -Nru a/arch/h8300/platform/h8300h/aki3068net/ram.ld b/arch/h8300/platform/h8300h/aki3068net/ram.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/aki3068net/ram.ld Thu Apr 17 19:22:50 2003 @@ -0,0 +1,90 @@ +/* AE-3068 (aka. aki3068net) RAM */ + +OUTPUT_ARCH(h8300h) +ENTRY("__start") + +MEMORY + { + ram : ORIGIN = 0x400000, LENGTH = 0x600000-0x400000-0x80000 + disk : ORIGIN = 0x600000-0x80000, LENGTH = 0x60000 + eram : ORIGIN = 0x600000, LENGTH = 0 + iram : ORIGIN = 0xffbf20, LENGTH = 0x4000 + } + +SECTIONS +{ + .bootvec : + { + *(.bootvec) + } > ram + .text : + { + __stext = . ; + *(.text) + . = ALIGN(0x4) ; + *(.text.*) + . = ALIGN(0x4) ; + *(.kstrtab) + . = ALIGN(0x4) ; + *(.rodata*) + . = ALIGN(16); /* Exception table */ + ___start___ex_table = .; + *(__ex_table) + ___stop___ex_table = .; + + ___start___ksymtab = .; /* Kernel symbol table */ + *(__ksymtab) + ___stop___ksymtab = .; + + . = ALIGN(0x4) ; + __etext = . ; + } > ram + .data : + { + __sdata = . ; + ___data_start = . ; + *(.data) + *(.data.*) + *(.exitcall.exit) + + . = ALIGN(0x2000) ; + *(.data.init_task) + . = ALIGN(0x2000) ; + ___init_begin = .; + *(.text.init) + *(.data.init) + . = ALIGN(16); + ___setup_start = .; + *(.setup.init) + ___setup_end = .; + ___initcall_start = .; + *(.initcall.init) + . = ALIGN(4) ; + ___initcall_end = .; + ___init_end = .; + __edata = . ; + . = ALIGN(0x4) ; + __sbss = . ; + *(.bss) + . = ALIGN(0x4) ; + *(COMMON) + . = ALIGN(0x4) ; + __ebss = . ; + __end = . ; + __ramstart = .; + } > ram + .blkimg : + { + __ramend = . ; + __blkimg = . ; + } > disk + .ram_vec : AT(ADDR(.data) + SIZEOF(.data)) + { + *(.int_redirect) + } > iram + __vector_lma = LOADADDR(.ram_vec); + .dummy2 : + { + COMMAND_START = . - 0x200 ; + } > eram +} diff -Nru a/arch/h8300/platform/h8300h/aki3068net/timer.c b/arch/h8300/platform/h8300h/aki3068net/timer.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/aki3068net/timer.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,46 @@ +/* + * linux/arch/h8300/platform/h8300h/aki3068net/timer.c + * + * Yoshinori Sato + * + * Platform depend Timer Handler + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#define TMR8CMA2 0x00ffff94 +#define TMR8TCSR2 0x00ffff92 +#define TMR8TCNT2 0x00ffff90 +#define CMFA 6 + +int platform_timer_setup(void (*timer_int)(int, void *, struct pt_regs *)) +{ + outb(CONFIG_CLK_FREQ*10/8192,TMR8CMA2); + outb(0x00,TMR8TCSR2); + request_irq(40,timer_int,0,"timer",0); + outb(0x40|0x08|0x03,TMR8TCNT2); +} + +void platform_timer_eoi(void) +{ + *(unsigned char *)TMR8TCSR2 &= ~(1 << CMFA); +} + +void platform_gettod(int *year, int *mon, int *day, int *hour, + int *min, int *sec) +{ + *year = *mon = *day = *hour = *min = *sec = 0; +} diff -Nru a/arch/h8300/platform/h8300h/entry.S b/arch/h8300/platform/h8300h/entry.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/entry.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,357 @@ +/* -*- mode: asm -*- + * + * linux/arch/h8300/platform/h8300h/entry.S + * + * Yoshinori Sato + * + */ + +/* + * entry.S + * include exception/interrupt gateway + * system call entry + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +ENOSYS = 38 + +LSIGTRAP = 5 + +SOFTIRQ_PENDING = 0 + +/* the following macro is used when enabling interrupts */ + +LER3 = 0 +LER2 = 4 +LER1 = 8 +LORIG = 12 +LCCR = 16 +LER0 = 18 +LVEC = 22 +LRET = 24 + + .h8300h + +/* CPU context save/restore macros. */ + + .macro SAVE_ALL + mov.l er0,@-sp + stc ccr,r0l + orc #0x10,ccr + btst #4,r0l + bne 1f + mov.l sp,@SYMBOL_NAME(sw_usp) + mov.l @sp,er0 + mov.l @SYMBOL_NAME(sw_ksp),sp + mov.l er0,@-sp + stc ccr,r0l + and #0xef,r0l + mov.w r0,@-sp + mov.l @(2:16,sp),er0 + bra 2f +1: + mov.l @sp,er0 + stc ccr,@-sp +2: + mov.l er0,@-sp + mov.l er1,@-sp + mov.l er2,@-sp + mov.l er3,@-sp + .endm + + .macro RESTORE_REGS + mov.w @(LCCR:16,sp),r0 + btst #4,r0l + bne 1f + mov.l @SYMBOL_NAME(sw_usp),er0 + mov.l @(LER0:16,sp),er1 + mov.l er1,@er0 + mov.l @sp+,er3 + mov.l @sp+,er2 + mov.l @sp+,er1 + add.l #10,sp + mov.l sp,@SYMBOL_NAME(sw_ksp) + mov.l er0,sp + bra 2f +1: + mov.l @sp+,er3 + mov.l @sp+,er2 + mov.l @sp+,er1 + adds #4,sp + adds #2,sp +2: + mov.l @sp+,er0 + adds #4,sp + .endm + + .macro RESTORE_ALL + RESTORE_REGS + rte + .endm + +#define SWITCH_STACK_SIZE (3*4+12) /* includes return address */ + + .macro SAVE_SWITCH_STACK + mov.l er4,@-sp + mov.l er5,@-sp + mov.l er6,@-sp + .endm + + .macro RESTORE_SWITCH_STACK + mov.l @sp+,er6 + mov.l @sp+,er5 + mov.l @sp+,er4 + .endm + +.globl SYMBOL_NAME(system_call) +.globl SYMBOL_NAME(ret_from_exception) +.globl SYMBOL_NAME(ret_from_signal) +.globl SYMBOL_NAME(ret_from_interrupt), SYMBOL_NAME(bad_interrupt) +.globl SYMBOL_NAME(interrupt_redirect_table) +.globl SYMBOL_NAME(sw_ksp),SYMBOL_NAME(sw_usp) +.globl SYMBOL_NAME(resume) +.globl SYMBOL_NAME(sys_vfork) +.globl SYMBOL_NAME(syscall_trampoline) + + .section .int_redirect,"ax" +SYMBOL_NAME_LABEL(interrupt_redirect_table) + .rept 7 + .long 0 + .endr + jsr @interrupt_entry /* NMI */ + jmp @SYMBOL_NAME(system_call) /* TRAPA #0 (System call) */ + .long 0 + .long 0 + jmp @SYMBOL_NAME(trace_break) /* TRAPA #3 (breakpoint) */ + .rept 64-12 + jsr @interrupt_entry + .endr + + .section .text + .align 2 +interrupt_entry: + SAVE_ALL + mov.w @(LCCR,sp),r0 + btst #4,r0l + bne 1f + mov.l @SYMBOL_NAME(sw_usp),er0 + mov.l @(4:16,er0),er0 + bra 2f +1: + mov.l @(LVEC,sp),er0 +2: + sub.l #SYMBOL_NAME(interrupt_redirect_table),er0 + shlr.l er0 + shlr.l er0 + dec.l #1,er0 + mov.l sp,er1 + jsr @SYMBOL_NAME(process_int) + mov.l @SYMBOL_NAME(irq_stat)+SOFTIRQ_PENDING,er0 + beq 1f + jsr @SYMBOL_NAME(do_softirq) +1: + jmp @SYMBOL_NAME(ret_from_exception) + +SYMBOL_NAME_LABEL(system_call) + subs #4,sp + SAVE_ALL + mov.l er0,er3 + mov.l #-ENOSYS,er0 + mov.l er0,@(LER0:16,sp) + + /* save top of frame */ + mov.l sp,er0 + mov.l er3,@-sp + jsr @SYMBOL_NAME(set_esp0) + mov.l @sp+,er3 + cmp.l #NR_syscalls,er3 + bcc SYMBOL_NAME(ret_from_exception):16 + shll.l er3 + shll.l er3 + mov.l #SYMBOL_NAME(sys_call_table),er0 + add.l er3,er0 + mov.l @er0,er0 + mov.l er0,er3 + beq SYMBOL_NAME(ret_from_exception):16 + mov.l @SYMBOL_NAME(_current_task),er2 + mov.b @((TASK_FLAGS+3-(TIF_SYSCALL_TRACE >> 3)):16,er2),r2l + btst #(TIF_SYSCALL_TRACE & 7),r2l + bne 1f + mov.l @(LER1:16,sp),er0 + mov.l @(LER2:16,sp),er1 + mov.l @(LER3:16,sp),er2 + mov.l er5,@-sp + mov.l er4,@-sp + jsr @er3 + adds #4,sp + adds #4,sp + mov.l er0,@(LER0,sp) /* save the return value */ +#if defined(CONFIG_SYSCALL_PRINT) + jsr @SYMBOL_NAME(syscall_print) +#endif + jmp @SYMBOL_NAME(ret_from_exception) +1: + SAVE_SWITCH_STACK + mov.l er3,er5 /* save syscall entry */ + jsr SYMBOL_NAME(syscall_trace) + mov.l er5,er3 + RESTORE_SWITCH_STACK + mov.l @(LER1:16,sp),er0 + mov.l @(LER2:16,sp),er1 + mov.l @(LER3:16,sp),er2 + mov.l er5,@-sp + mov.l er4,@-sp + jsr @er3 + adds #4,sp + adds #4,sp + mov.l er0,@(LER0:16,sp) /* save the return value */ + SAVE_SWITCH_STACK + jsr SYMBOL_NAME(syscall_trace) + +SYMBOL_NAME_LABEL(ret_from_signal) + RESTORE_SWITCH_STACK + +SYMBOL_NAME_LABEL(ret_from_exception) + mov.b @(LCCR+1:16,sp),r0l + btst #4,r0l /* check if returning to kernel */ + bne 3f /* if so, skip resched, signals */ + andc #0x7f,ccr + mov.l @SYMBOL_NAME(_current_task),er0 + mov.l @(TI_FLAGS:16,er2),er1 + and.l #_TIF_WORK_MASK,er1 + bne 1f + mov.l @((TASK_THREAD+THREAD_VFORK):16,er0),er1 + bne Lvfork_return +3: + RESTORE_ALL /* Does RTE */ +1: + mov.l @(TI_FLAGS:16,er2),er1 + btst #TIF_NEED_RESCHED,r1l + bne @SYMBOL_NAME(reschedule):16 + +Lsignal_return: + SAVE_SWITCH_STACK + mov.l sp,er1 + add #12,er1 + mov.l er2,er0 + jsr @SYMBOL_NAME(do_signal) + RESTORE_SWITCH_STACK + mov.l @SYMBOL_NAME(_current_task),er0 + mov.l @((TASK_THREAD+THREAD_VFORK):16,er0),er1 + bne Lvfork_return + RESTORE_ALL + +Lvfork_return: + sub.l er2,er2 + mov.l er2,@((TASK_THREAD+THREAD_VFORK):16,er0) + mov.l @SYMBOL_NAME(sw_usp),er0 + mov.l er1,@(8:16,er0) + RESTORE_ALL + +SYMBOL_NAME_LABEL(reschedule) + /* save top of frame */ + mov.l sp,er0 + jsr @SYMBOL_NAME(set_esp0) + + mov.l #SYMBOL_NAME(ret_from_exception),er0 + mov.l er0,@-sp + jmp @SYMBOL_NAME(schedule) + +SYMBOL_NAME_LABEL(resume) + /* + * Beware - when entering resume, offset of tss is in d1, + * prev (the current task) is in a0, next (the new task) + * is in a1 and d2.b is non-zero if the mm structure is + * shared between the tasks, so don't change these + * registers until their contents are no longer needed. + */ + + /* save sr */ + sub.w r3,r3 + stc ccr,r3l + mov.w r3,@(THREAD_CCR:16,er0) + SAVE_SWITCH_STACK + + /* disable interrupts */ + orc #0x80,ccr + mov.l @SYMBOL_NAME(sw_usp),er3 + mov.l er3,@(THREAD_USP:16,er0) + mov.l sp,@(THREAD_KSP:16,er0) + + /* get pointer to tss struct (a1 contains new task) */ + mov.l er1,@SYMBOL_NAME(_current_task) + + /* Skip address space switching if they are the same. */ + /* FIXME: what did we hack out of here, this does nothing! */ + + mov.l @(THREAD_USP:16,er1),er0 + mov.l er0,@SYMBOL_NAME(sw_usp) + mov.l @(THREAD_KSP:16,er1),sp + RESTORE_SWITCH_STACK + + /* restore status register */ + mov.w @(THREAD_CCR:16,er1),r3 + + ldc r3l,ccr + + rts + +/* Handler for uninitialized and spurious interrupts */ + +SYMBOL_NAME_LABEL(bad_interrupt) + mov.l @SYMBOL_NAME(num_spurious),er0 + inc.l #1,er0 + mov.l er0,@SYMBOL_NAME(num_spurious) + rts + +SYMBOL_NAME_LABEL(trace_break) + subs #4,sp + SAVE_ALL + sub.l er1,er1 + dec.l #1,er1 + mov.l er1,@(LORIG,sp) + mov.l sp,er0 + jsr @SYMBOL_NAME(set_esp0) + mov.l @SYMBOL_NAME(sw_usp),er0 + mov.l @er0,er1 + subs #2,er1 + mov.l er1,@er0 + and.w #0xff,e1 + mov.l er1,er0 + jsr @SYMBOL_NAME(trace_trap) + jmp @SYMBOL_NAME(ret_from_exception) + +SYMBOL_NAME_LABEL(sys_vfork) + SAVE_SWITCH_STACK + mov.l @SYMBOL_NAME(sw_usp),er6 + mov.l @(8:16,er6),er6 + mov.l sp,er0 + add.l #SWITCH_STACK_SIZE,er0 + jsr @SYMBOL_NAME(h8300_vfork) + mov.l @SYMBOL_NAME(_current_task),er5 + mov.l er6,@((TASK_THREAD+THREAD_VFORK):16,er5) + RESTORE_SWITCH_STACK + rts + +SYMBOL_NAME_LABEL(syscall_trampoline) + SAVE_SWITCH_STACK + mov.l er0,er6 + mov.l sp,er0 + add.l #SWITCH_STACK_SIZE,er0 + jsr @er6 + RESTORE_SWITCH_STACK + rts + + .section .bss +SYMBOL_NAME_LABEL(sw_ksp) + .space 4 +SYMBOL_NAME_LABEL(sw_usp) + .space 4 diff -Nru a/arch/h8300/platform/h8300h/generic/Makefile b/arch/h8300/platform/h8300h/generic/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/generic/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,12 @@ +# +# 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). +# + +obj-y := timer.o crt0_$(MODEL).o + +clean: + rm -f *.[oa] diff -Nru a/arch/h8300/platform/h8300h/generic/crt0_rom.S b/arch/h8300/platform/h8300h/generic/crt0_rom.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/generic/crt0_rom.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,118 @@ +/* + * linux/arch/h8300/platform/h8300h/generic/crt0_rom.S + * + * Yoshinori Sato + * + * Platform depend startup for uClinux-2.4.x + * Target Archtecture: generic + * Memory Layout : ROM + */ + +#define ASSEMBLY + +#include +#include + + .global SYMBOL_NAME(_start) + .global SYMBOL_NAME(_command_line) + .global SYMBOL_NAME(_platform_gpio_table) + .global SYMBOL_NAME(_target_name) + + .h8300h + .section .text + .file "crt0_rom.S" + + /* CPU Reset entry */ +SYMBOL_NAME_LABEL(_start) + mov.l #__ramend,sp + ldc #0x80,ccr + + /* Peripheral Setup */ + + /* .bss clear */ + mov.l #__sbss,er5 + mov.l er5,er6 + inc.l #1,er6 + mov.l #__ebss,er4 + sub.l er5,er4 + sub.w r0,r0 + mov.b r0l,@er5 +1: + eepmov.w + dec.w #1,e4 + bpl 1b + + /* copy .data */ +#if !defined(CONFIG_H8300H_SIM) + mov.l #__begin_data,er5 + mov.l #__sdata,er6 + mov.l #__edata,er4 + sub.l er6,er4 +1: + eepmov.w + dec.w #1,e4 + bpl 1b +#endif + + /* copy kernel commandline */ + mov.l #COMMAND_START,er5 + mov.l #SYMBOL_NAME(_command_line),er6 + mov.w #512,r4 + eepmov.w + + /* uClinux kernel start */ + ldc #0x90,ccr /* running kernel */ + mov.l #SYMBOL_NAME(init_thread_union),sp + mov.l sp,@SYMBOL_NAME(_current_task) + add.l #0x2000,sp + jsr @_start_kernel +_exit: + + jmp _exit + + rts + + /* I/O port assign information */ +__platform_gpio_table: + mov.l #gpio_table,er0 + rts + +gpio_table: + ;; P1DDR + .byte 0x00,0x00 + ;; P2DDR + .byte 0x00,0x00 + ;; P3DDR + .byte 0x00,0x00 + ;; P4DDR + .byte 0x00,0x00 + ;; P5DDR + .byte 0x00,0x00 + ;; P6DDR + .byte 0x00,0x00 + ;; dummy + .byte 0x00,0x00 + ;; P8DDR + .byte 0x00,0x00 + ;; P9DDR + .byte 0x00,0x00 + ;; PADDR + .byte 0x00,0x00 + ;; PBDDR + .byte 0x00,0x00 + +__target_name: + .asciz "generic" + + .section .bss +__command_line: + .space 512 + + /* interrupt vector */ + .section .vectors,"ax" + .long __start +vector = 1 + .rept 64-1 + .long _interrupt_redirect_table+vector*4 +vector = vector + 1 + .endr diff -Nru a/arch/h8300/platform/h8300h/generic/ram.ld b/arch/h8300/platform/h8300h/generic/ram.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/generic/ram.ld Thu Apr 17 19:22:50 2003 @@ -0,0 +1,76 @@ +/* AKI3068NET RAM */ + +OUTPUT_ARCH(h8300h) +ENTRY("__start") + +MEMORY + { + ram : ORIGIN = 0x400000, LENGTH = 0xA0000 +/* rdisk : ORIGIN = 0x4A0000, LENGTH = 0x70000 */ +/* uram : ORIGIN = 0x510000, LENGTH = 0xF0000 */ + uram : ORIGIN = 0x4A0000, LENGTH = 0x160000 + eram : ORIGIN = 0x600000, LENGTH = 0 + iram : ORIGIN = 0xffbf20, LENGTH = 0x4000 + } + +SECTIONS +{ + .bootvec : + { + *(.bootvec) + } > ram + .text : + { + __stext = . ; + *(.text) + __etext = . ; + } > ram + .rodata : + { + ___data_rom_start = ALIGN ( 4 ) ; + } > ram + .erom : + { + __erom = . ; + } > ram + .data : + { + __ramstart = . ; + __sdata = . ; + ___data_start = . ; + *(.data) + __edata = . ; + edata = ALIGN( 0x10 ) ; + ___data_end = ALIGN( 0x10 ) ; + } > ram + .bss : + { + __sbss = . ; + ___bss_start = . ; + *(.bss) + *(COMMON) + __ebss = . ; + ___bss_end = . ; + } > ram +/* + .rootimg : + { + __rootimage = . ; + } > rdisk +*/ + .dummy1 : + { + end = ALIGN( 0x10 ) ; + __end = ALIGN( 0x10 ) ; + } > uram + .ram_vec : AT(___bss_end) + { + __ram_vector = . ; + } > iram + __ram_vector_image = LOADADDR(.ram_vec) ; + .dummy2 : + { + _COMMAND_START = . - 0x200 ; + __ramend = . ; + } > eram +} diff -Nru a/arch/h8300/platform/h8300h/generic/rom.ld b/arch/h8300/platform/h8300h/generic/rom.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/generic/rom.ld Thu Apr 17 19:22:50 2003 @@ -0,0 +1,122 @@ +OUTPUT_ARCH(h8300h) +ENTRY("__start") + +/*INPUT(rootimage.o)*/ + +_jiffies = _jiffies_64 + 4; + +MEMORY + { + vector : ORIGIN = 0x000000, LENGTH = 0x000100 + rom : ORIGIN = 0x000100, LENGTH = 0x200000-0x000100 + erom : ORIGIN = 0x200000, LENGTH = 1 + ram : ORIGIN = 0x200000, LENGTH = 0x100000 + eram : ORIGIN = 0x2fa000, LENGTH = 1 + } + +SECTIONS +{ + .vectors : + { + __vector = . ; + *(.vectors*) + } > vector + .text : + { + *(.int_redirect) + __stext = . ; + *(.text) + . = ALIGN(0x4) ; + *(.exit.text) + *(.text.*) + . = ALIGN(0x4) ; + *(.exitcall.exit) + . = ALIGN(0x4) ; + *(.kstrtab) + . = ALIGN(0x4) ; + *(.rodata*) + . = ALIGN(16); /* Exception table */ + ___start___ex_table = .; + *(__ex_table) + ___stop___ex_table = .; + + ___start___ksymtab = .; /* Kernel symbol table */ + *(__ksymtab) + ___stop___ksymtab = .; + + . = ALIGN(0x4) ; + __etext = . ; + } > rom + .data : AT( ADDR(.text)+SIZEOF(.text)) + { + __sdata = . ; + ___data_start = . ; + + . = ALIGN(0x2000) ; + *(.data.init_task) + . = ALIGN(0x4) ; + *(.data) + . = ALIGN(0x4) ; + *(.data.*) + + . = ALIGN(0x4) ; + ___init_begin = .; + *(.init.text) + *(.init.data) + . = ALIGN(0x4) ; + ___setup_start = .; + *(.init.setup) + . = ALIGN(0x4) ; + ___setup_end = .; + ___start___param = .; + *(__param) + ___stop___param = .; + ___initcall_start = .; + *(.initcall1.init) + *(.initcall2.init) + *(.initcall3.init) + *(.initcall4.init) + *(.initcall5.init) + *(.initcall6.init) + *(.initcall7.init) + ___initcall_end = .; + ___con_initcall_start = .; + *(.con_initcall.init) + ___con_initcall_end = .; + . = ALIGN(4); + ___initramfs_start = .; + *(.init.ramfs) + ___initramfs_end = .; + . = ALIGN(0x4) ; + ___init_end = .; + + __edata = . ; + } > ram + __begin_data = LOADADDR(.data) ; + .blkimg : AT( LOADADDR(.data) + SIZEOF(.data)) + { + __blkimg = . ; + *(.rootimg*) + } > rom + .erom : + { + __erom = . ; + } > erom + .bss : + { + . = ALIGN(0x4) ; + __sbss = . ; + *(.bss) + . = ALIGN(0x4) ; + *(COMMON) + . = ALIGN(0x4) ; + __ebss = . ; + __end = . ; + __ramstart = .; + } > ram + .dummy : + { + COMMAND_START = . - 0x200 ; + __ramend = . ; + } > eram +} diff -Nru a/arch/h8300/platform/h8300h/generic/timer.c b/arch/h8300/platform/h8300h/generic/timer.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/generic/timer.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,84 @@ +/* + * linux/arch/h8300/platform/h8300h/generic/timer.c + * + * Yoshinori Sato + * + * Platform depend Timer Handler + * + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#if defined(CONFIG_H83007) || defined(CONFIG_H83068) +#define TMR8CMA2 0x00ffff94 +#define TMR8TCSR2 0x00ffff92 +#define TMR8TCNT2 0x00ffff90 + +int platform_timer_setup(void (*timer_int)(int, void *, struct pt_regs *)) +{ + outb(H8300_TIMER_COUNT_DATA,TMR8CMA2); + outb(0x00,TMR8TCSR2); + request_irq(40,timer_int,0,"timer",0); + outb(0x40|0x08|0x03,TMR8TCNT2); + return 0; +} + +void platform_timer_eoi(void) +{ + __asm__("bclr #6,@0xffff92:8"); +} +#endif + +#if defined(H8_3002) || defined(CONFIG_H83048) +#define TSTR 0x00ffff60 +#define TSNC 0x00ffff61 +#define TMDR 0x00ffff62 +#define TFCR 0x00ffff63 +#define TOER 0x00ffff90 +#define TOCR 0x00ffff91 +#define TCR 0x00ffff64 +#define TIOR 0x00ffff65 +#define TIER 0x00ffff66 +#define TSR 0x00ffff67 +#define TCNT 0x00ffff68 +#define GRA 0x00ffff6a +#define GRB 0x00ffff6c + +int platform_timer_setup(void (*timer_int)(int, void *, struct pt_regs *)) +{ + *(unsigned short *)GRA= H8300_TIMER_COUNT_DATA; + *(unsigned short *)TCNT=0; + outb(0x23,TCR); + outb(0x00,TIOR); + request_irq(26,timer_int,0,"timer",0); + outb(inb(TIER) | 0x01,TIER); + outb(inb(TSNC) & ~0x01,TSNC); + outb(inb(TMDR) & ~0x01,TMDR); + outb(inb(TSTR) | 0x01,TSTR); + return 0; +} + +void platform_timer_eoi(void) +{ + outb(inb(TSR) & ~0x01,TSR); +} +#endif + +void platform_gettod(int *year, int *mon, int *day, int *hour, + int *min, int *sec) +{ + *year = *mon = *day = *hour = *min = *sec = 0; +} diff -Nru a/arch/h8300/platform/h8300h/h8max/Makefile b/arch/h8300/platform/h8300h/h8max/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/h8max/Makefile Thu Apr 17 19:22:50 2003 @@ -0,0 +1,16 @@ +# +# 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). +# + +all: $(BOARD).o +O_TARGET := $(BOARD).o +obj-y := timer.o + +timer.o: timer.c + +clean: + rm -f *.[oa] diff -Nru a/arch/h8300/platform/h8300h/h8max/crt0_ram.S b/arch/h8300/platform/h8300h/h8max/crt0_ram.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/h8max/crt0_ram.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,109 @@ +/* + * linux/arch/h8300/platform/h8300h/h8max/crt0_ram.S + * + * Yoshinori Sato + * + * Platform depend startup for uClinux-2.4.x + * Target Archtecture: H8MAX + * Memory Layout : RAM + */ + +#define ASSEMBLY + +#include +#include + + .global SYMBOL_NAME(_start) + .global SYMBOL_NAME(command_line) + .global SYMBOL_NAME(_platform_gpio_table) + .global SYMBOL_NAME(_target_name) + + .h8300h + + .section .text + .file "crt0_ram.S" + + /* CPU Reset entry */ +SYMBOL_NAME_LABEL(_start) + mov.l #__ramend,sp + ldc #0x80,ccr + + /* Peripheral Setup */ + + /* .bss clear */ + mov.l #__sbss,er5 + mov.l er5,er6 + inc.l #1,er6 + mov.l #__ebss,er4 + sub.l er5,er4 + sub.w r0,r0 + mov.b r0l,@er5 +1: + eepmov.w + dec.w #1,e4 + bpl 1b + + /* copy kernel commandline */ + mov.l #COMMAND_START,er5 + mov.l #SYMBOL_NAME(command_line),er6 + mov.w #512,r4 + eepmov.w + + /* RAM Interrupt Vector Table Setup */ +#if defined(CONFIG_GDB_DEBUG) + mov.l @SYMBOL_NAME(interrupt_redirect_table)+11*4,er0 +#endif + mov.l #SYMBOL_NAME(_vector_lma),er5 + mov.l #SYMBOL_NAME(interrupt_redirect_table),er6 + mov.w #0x100,r4 + eepmov.w +#if defined(CONFIG_GDB_DEBUG) + mov.l er0,@SYMBOL_NAME(interrupt_redirect_table)+11*4 +#endif + + /* uClinux kernel start */ + ldc #0x90,ccr /* running kernel */ + mov.l #SYMBOL_NAME(init_task_union),sp + mov.l sp,@SYMBOL_NAME(_current_task) + add.l #0x2000,sp + jsr @_start_kernel +_exit: + + jmp _exit + + rts + + /* I/O port assign information */ +__platform_gpio_table: + mov.l #gpio_table,er0 + rts + +gpio_table: + ;; P1DDR + .byte 0xff,0xff + ;; P2DDR + .byte 0xff,0xff + ;; P3DDR + .byte 0x00,0x00 + ;; P4DDR + .byte 0x00,0x00 + ;; P5DDR + .byte 0x01,0x01 + ;; P6DDR + .byte 0xf6,0xf6 + ;; dummy + .byte 0x00,0x00 + ;; P8DDR + .byte 0xee,0xee + ;; P9DDR + .byte 0x00,0x00 + ;; PADDR + .byte 0x00,0x00 + ;; PBDDR + .byte 0x30,0x30 + +__target_name: + .asciz "H8MAX" + + .section .bootvec,"ax" + jmp @SYMBOL_NAME(_start) diff -Nru a/arch/h8300/platform/h8300h/h8max/ram.ld b/arch/h8300/platform/h8300h/h8max/ram.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/h8max/ram.ld Thu Apr 17 19:22:50 2003 @@ -0,0 +1,90 @@ +/* H8MAX RAM */ + +OUTPUT_ARCH(h8300h) +ENTRY("__start") + +MEMORY + { + ram : ORIGIN = 0x400000, LENGTH = 0x600000-0x400000-0xc000 + disk : ORIGIN = 0x600000-0xc000, LENGTH = 0xc000 + eram : ORIGIN = 0x600000, LENGTH = 0 + iram : ORIGIN = 0xfffd20, LENGTH = 0x100 + } + +SECTIONS +{ + .bootvec : + { + *(.bootvec) + } > ram + .text : + { + __stext = . ; + *(.text) + . = ALIGN(0x4) ; + *(.text.*) + . = ALIGN(0x4) ; + *(.kstrtab) + . = ALIGN(0x4) ; + *(.rodata*) + . = ALIGN(16); /* Exception table */ + ___start___ex_table = .; + *(__ex_table) + ___stop___ex_table = .; + + ___start___ksymtab = .; /* Kernel symbol table */ + *(__ksymtab) + ___stop___ksymtab = .; + + . = ALIGN(0x4) ; + __etext = . ; + } > ram + .data : + { + __sdata = . ; + ___data_start = . ; + *(.data) + *(.data.*) + *(.exitcall.exit) + + . = ALIGN(0x2000) ; + *(.data.init_task) + . = ALIGN(0x2000) ; + ___init_begin = .; + *(.text.init) + *(.data.init) + . = ALIGN(16); + ___setup_start = .; + *(.setup.init) + ___setup_end = .; + ___initcall_start = .; + *(.initcall.init) + . = ALIGN(4) ; + ___initcall_end = .; + ___init_end = .; + __edata = . ; + . = ALIGN(0x4) ; + __sbss = . ; + *(.bss) + . = ALIGN(0x4) ; + *(COMMON) + . = ALIGN(0x4) ; + __ebss = . ; + __end = . ; + __ramstart = .; + } > ram + .blkimg : + { + __ramend = . ; + __blkimg = . ; + } > disk + .ram_vec : AT(ADDR(.data) + SIZEOF(.data)) + { + *(.int_redirect) + } > iram + __vector_lma = LOADADDR(.ram_vec); + .dummy2 : + { + COMMAND_START = . - 0x200 ; + } > eram +} diff -Nru a/arch/h8300/platform/h8300h/h8max/timer.c b/arch/h8300/platform/h8300h/h8max/timer.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/h8max/timer.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,46 @@ +/* + * linux/arch/h8300/platform/h8300h/h8max/timer.c + * + * Yoshinori Sato + * + * Platform depend Timer Handler + * + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include + +#define TMR8CMA2 0x00ffff94 +#define TMR8TCSR2 0x00ffff92 +#define TMR8TCNT2 0x00ffff90 +#define CMFA 6 + +int platform_timer_setup(void (*timer_int)(int, void *, struct pt_regs *)) +{ + outb(CONFIG_CLK_FREQ*10/8192,TMR8CMA2); + outb(0x00,TMR8TCSR2); + request_irq(40,timer_int,0,"timer",0); + outb(0x40|0x08|0x03,TMR8TCNT2); +} + +void platform_timer_eoi(void) +{ + *(unsigned char *)TMR8TCSR2 &= ~(1 << CMFA); +} + +void platform_gettod(int *year, int *mon, int *day, int *hour, + int *min, int *sec) +{ + *year = *mon = *day = *hour = *min = *sec = 0; +} diff -Nru a/arch/h8300/platform/h8300h/ints.c b/arch/h8300/platform/h8300h/ints.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/platform/h8300h/ints.c Thu Apr 17 19:22:50 2003 @@ -0,0 +1,252 @@ +/* + * linux/arch/h8300/platform/h8300h/ints.c + * + * Yoshinori Sato + * + * Based on linux/arch/$(ARCH)/platform/$(PLATFORM)/ints.c + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive + * for more details. + * + * Copyright 1996 Roman Zippel + * Copyright 1999 D. Jeff Dionne + */ + +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +#define INTERNAL_IRQS (64) + +#define EXT_IRQ0 12 +#define EXT_IRQ1 13 +#define EXT_IRQ2 14 +#define EXT_IRQ3 15 +#define EXT_IRQ4 16 +#define EXT_IRQ5 17 +#define EXT_IRQ6 18 +#define EXT_IRQ7 19 + +#define WDT_IRQ 20 + +/* table for system interrupt handlers */ +static irq_handler_t irq_list[SYS_IRQS]; + +/* The number of spurious interrupts */ +volatile unsigned int num_spurious; + +/* assembler routines */ +asmlinkage void system_call(void); +asmlinkage void bad_interrupt(void); + +/* irq node variables for the 32 (potential) on chip sources */ +/*static irq_node_t *int_irq_list[INTERNAL_IRQS];*/ +static int int_irq_count[INTERNAL_IRQS]; + +#if 0 +static void int_badint(int irq, void *dev_id, struct pt_regs *fp) +{ + num_spurious += 1; +} +#endif + +void init_IRQ(void) +{ + int i; + + for (i = 0; i < SYS_IRQS; i++) { + irq_list[i].handler = NULL; + irq_list[i].flags = 0; + irq_list[i].devname = NULL; + irq_list[i].dev_id = NULL; + } + +} + +int request_irq(unsigned int irq, void (*handler)(int, void *, struct pt_regs *), + unsigned long flags, const char *devname, void *dev_id) +{ + if (irq >= EXT_IRQ0 && irq <= EXT_IRQ3) { + if (H8300_GPIO_RESERVE(H8300_GPIO_P8, 1 << (irq - EXT_IRQ0)) == 0) + return 1; + H8300_GPIO_DDR(H8300_GPIO_P8, (irq - EXT_IRQ0), 0); + } + if (irq >= EXT_IRQ4 && irq <= EXT_IRQ5) { + if (H8300_GPIO_RESERVE(H8300_GPIO_P9, 1 << (irq - EXT_IRQ0)) == 0) + return 1; + H8300_GPIO_DDR(H8300_GPIO_P9, (irq - EXT_IRQ0), 0); + } + irq_list[irq].handler = handler; + irq_list[irq].flags = flags; + irq_list[irq].devname = devname; + irq_list[irq].dev_id = dev_id; + if (irq >= EXT_IRQ0 && irq <= EXT_IRQ5) + *(volatile unsigned char *)IER |= 1 << (irq - EXT_IRQ0); + return 0; +} + +void free_irq(unsigned int irq, void *dev_id) +{ + if (irq_list[irq].dev_id != dev_id) + printk("%s: Removing probably wrong IRQ %d from %s\n", + __FUNCTION__, irq, irq_list[irq].devname); + if (irq >= EXT_IRQ0 && irq <= EXT_IRQ5) + *(volatile unsigned char *)IER &= ~(1 << (irq - EXT_IRQ0)); + irq_list[irq].handler = NULL; + irq_list[irq].flags = 0; + irq_list[irq].dev_id = NULL; + irq_list[irq].devname = NULL; +} + +/* + * Do we need these probe functions on the m68k? + */ +unsigned long probe_irq_on (void) +{ + return 0; +} + +int probe_irq_off (unsigned long irqs) +{ + return 0; +} + +struct int_regs { + unsigned long ier; + unsigned long isr; + unsigned char mask; +}; + +#define REGS_DEF(ier,isr,mask) {ier,isr,mask} + +const struct int_regs interrupt_registers[]= { + REGS_DEF(IER,ISR,0x01), + REGS_DEF(IER,ISR,0x02), + REGS_DEF(IER,ISR,0x04), + REGS_DEF(IER,ISR,0x08), + REGS_DEF(IER,ISR,0x10), + REGS_DEF(IER,ISR,0x20), + REGS_DEF(IER,ISR,0x40), + REGS_DEF(IER,ISR,0x80), + REGS_DEF(TCSR,TCSR,0x20), + REGS_DEF(RTMCSR,RTMCSR,0x40), + REGS_DEF(0,0,0), + REGS_DEF(ADCSR,ADCSR,0x40), + REGS_DEF(TISRA,TISRA,0x10), + REGS_DEF(TISRB,TISRB,0x10), + REGS_DEF(TISRC,TISRC,0x10), + REGS_DEF(0,0,0), + REGS_DEF(TISRA,TISRA,0x20), + REGS_DEF(TISRB,TISRB,0x20), + REGS_DEF(TISRC,TISRC,0x20), + REGS_DEF(0,0,0), + REGS_DEF(TISRA,TISRA,0x40), + REGS_DEF(TISRB,TISRB,0x40), + REGS_DEF(TISRC,TISRC,0x40), + REGS_DEF(0,0,0), + REGS_DEF(_8TCR0,_8TCSR0,0x40), + REGS_DEF(_8TCR0,_8TCSR0,0x80), + REGS_DEF(_8TCR1,_8TCSR1,0xC0), + REGS_DEF(_8TCR0,_8TCSR0,0x20), + REGS_DEF(_8TCR2,_8TCSR2,0x40), + REGS_DEF(_8TCR2,_8TCSR2,0x80), + REGS_DEF(_8TCR3,_8TCSR3,0xC0), + REGS_DEF(_8TCR2,_8TCSR2,0x20), + REGS_DEF(DTCR0A,DTCR0A,0x0), + REGS_DEF(DTCR0B,DTCR0B,0x0), + REGS_DEF(DTCR1A,DTCR1A,0x0), + REGS_DEF(DTCR1B,DTCR1B,0x0), + REGS_DEF(0,0,0), + REGS_DEF(0,0,0), + REGS_DEF(0,0,0), + REGS_DEF(0,0,0), + REGS_DEF(SCR0,SSR0,0x40), + REGS_DEF(SCR0,SSR0,0x40), + REGS_DEF(SCR0,SSR0,0x80), + REGS_DEF(SCR0,SSR0,0x04), + REGS_DEF(SCR1,SSR1,0x40), + REGS_DEF(SCR1,SSR1,0x40), + REGS_DEF(SCR1,SSR1,0x80), + REGS_DEF(SCR1,SSR1,0x04), + REGS_DEF(SCR2,SSR2,0x40), + REGS_DEF(SCR2,SSR2,0x40), + REGS_DEF(SCR2,SSR2,0x80), + REGS_DEF(SCR2,SSR2,0x04) +}; + +void enable_irq(unsigned int irq) +{ + unsigned char ier; + const struct int_regs *regs=&interrupt_registers[irq - 12]; + if (irq == WDT_IRQ) { + ier = ctrl_inb(TCSR); + ier |= 0x20; + ctrl_outb((0xa500 | ier),TCSR); + } else { + if ((irq > 12) && regs->ier) { + ier = ctrl_inb(regs->ier); + ier |= regs->mask; + ctrl_outb(ier, regs->ier); + } else + panic("Unknown interrupt vector"); + } +} + +void disable_irq(unsigned int irq) +{ + unsigned char ier; + const struct int_regs *regs=&interrupt_registers[irq - 12]; + if (irq == WDT_IRQ) { + ier = ctrl_inb(TCSR); + ier &= ~0x20; + ctrl_outb((0xa500 | ier),TCSR); + } else { + if ((irq > 12) && regs->ier) { + ier = ctrl_inb(regs->ier); + ier &= ~(regs->mask); + ctrl_outb(ier, regs->ier); + } else + panic("Unknown interrupt vector"); + } +} + +asmlinkage void process_int(unsigned long vec, struct pt_regs *fp) +{ + irq_enter(); + if (irq_list[vec].handler) { + irq_list[vec].handler(vec, irq_list[vec].dev_id, fp); + int_irq_count[vec]++; + } else + panic("No interrupt handler for %ld\n", vec); + if (vec >= EXT_IRQ0 && vec <= EXT_IRQ5) + *(volatile unsigned char *)ISR &= ~(1 << (vec - EXT_IRQ0)); + irq_exit(); +} + +int show_interrupts(struct seq_file *p, void *v) +{ + int i; + + for (i = 0; i < NR_IRQS; i++) { + seq_printf(p, "%3d: %10u ",i,int_irq_count[i]); + seq_printf(p, "%s\n", irq_list[i].devname); + } + + return 0; +} + +void init_irq_proc(void) +{ +} diff -Nru a/arch/h8300/vmlinux.lds.S b/arch/h8300/vmlinux.lds.S --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/h8300/vmlinux.lds.S Thu Apr 17 19:22:50 2003 @@ -0,0 +1,38 @@ +#include + +#ifdef CONFIG_H8300H_GENERIC +#ifdef CONFIG_ROMKERNEL +#include "platform/h8300h/generic/rom.ld" +#endif +#ifdef CONFIG_RAMKERNEL +#include "platform/h8300h/generic/ram.ld" +#endif +#endif + +#ifdef CONFIG_H8300H_AKI3068NET +#ifdef CONFIG_ROMKERNEL +#include "platform/h8300h/aki3068net/rom.ld" +#endif +#ifdef CONFIG_RAMKERNEL +#include "platform/h8300h/aki3068net/ram.ld" +#endif +#endif + +#ifdef CONFIG_H8300H_H8MAX +#ifdef CONFIG_ROMKERNEL +#include "platform/h8300h/h8max/rom.ld" +#endif +#ifdef CONFIG_RAMKERNEL +#include "platform/h8300h/h8max/ram.ld" +#endif +#endif + +#ifdef CONFIG_H8300H_SIM +#ifdef CONFIG_ROMKERNEL +#include "platform/h8300h/generic/rom.ld" +#endif +#ifdef CONFIG_RAMKERNEL +#include "platform/h8300h/generic/ram.ld" +#endif +#endif + diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig --- a/arch/i386/Kconfig Thu Apr 17 19:22:43 2003 +++ b/arch/i386/Kconfig Thu Apr 17 19:22:43 2003 @@ -142,7 +142,7 @@ config M486 bool "486" help - Select this for a x486 processor, ether Intel or one of the + Select this for a 486 series processor, either Intel or one of the compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. @@ -150,8 +150,8 @@ config M586 bool "586/K5/5x86/6x86/6x86MX" help - Select this for an x586 or x686 processor such as the AMD K5, the - Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not + Select this for an 586 or 686 series processor such as the AMD K5, + the Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not assume the RDTSC (Read Time Stamp Counter) instruction. config M586TSC @@ -226,28 +226,28 @@ config MCRUSOE bool "Crusoe" help - Select this for Transmeta Crusoe processor. Treats the processor + Select this for a Transmeta Crusoe processor. Treats the processor like a 586 with TSC, and sets some GCC optimization flags (like a Pentium Pro with no alignment requirements). config MWINCHIPC6 bool "Winchip-C6" help - Select this for a IDT Winchip C6 chip. Linux and GCC + Select this for an IDT Winchip C6 chip. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP2 bool "Winchip-2" help - Select this for a IDT Winchip-2. Linux and GCC + Select this for an IDT Winchip-2. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP3D bool "Winchip-2A/Winchip-3" help - Select this for a IDT Winchip-2A or 3. Linux and GCC + Select this for an IDT Winchip-2A or 3. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment reqirements. Development kernels also enable out of order memory stores for this CPU, which can increase @@ -260,15 +260,15 @@ treat this chip as a generic 586. Whilst the CPU is 686 class, it lacks the cmov extension which gcc assumes is present when generating 686 code. - Note, that Nehemiah (Model 9) and above will not boot with this - kernel due to them lacking the 3dnow instructions used in earlier + Note that Nehemiah (Model 9) and above will not boot with this + kernel due to them lacking the 3DNow! instructions used in earlier incarnations of the CPU. config MVIAC3_2 bool "VIA C3-2 (Nehemiah)" help - Select this for a VIA C3 "Nehemiah". Selecting this enables usage of SSE - and tells gcc to treat the CPU as a 686. + Select this for a VIA C3 "Nehemiah". Selecting this enables usage + of SSE and tells gcc to treat the CPU as a 686. Note, this kernel will not boot on older (pre model 9) C3s. endchoice @@ -435,7 +435,8 @@ enable and use it. If you say Y here even though your machine doesn't have a local APIC, then the kernel will still run with no slowdown at all. The local APIC supports CPU-generated self-interrupts (timer, - performance counters), and the NMI watchdog which detects hard lockups. + performance counters), and the NMI watchdog which detects hard + lockups. If you have a system with several CPUs, you do not need to say Y here: the local APIC will be used automatically. @@ -522,7 +523,7 @@ ---help--- This adds a driver to safely access the System Management Mode of the CPU on Toshiba portables with a genuine Toshiba BIOS. It does - not work on models with a Pheonix BIOS. The System Management Mode + not work on models with a Phoenix BIOS. The System Management Mode is used to set the BIOS and power saving options on Toshiba portables. For information on utilities to make use of this driver see the diff -Nru a/arch/i386/boot/compressed/misc.c b/arch/i386/boot/compressed/misc.c --- a/arch/i386/boot/compressed/misc.c Thu Apr 17 19:22:47 2003 +++ b/arch/i386/boot/compressed/misc.c Thu Apr 17 19:22:47 2003 @@ -12,6 +12,7 @@ #include #include #include +#include