]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
Merge branches 'release', 'bugzilla-9916', 'bugzilla-9982', 'bugzilla-9989', 'misc...
authorLen Brown <len.brown@intel.com>
Thu, 21 Feb 2008 07:41:58 +0000 (02:41 -0500)
committerLen Brown <len.brown@intel.com>
Thu, 21 Feb 2008 07:41:58 +0000 (02:41 -0500)
149 files changed:
Documentation/i386/IO-APIC.txt
Documentation/kernel-parameters.txt
Documentation/laptops/thinkpad-acpi.txt
arch/frv/kernel/entry.S
arch/frv/kernel/vmlinux.lds.S
arch/mips/bcm47xx/setup.c
arch/mips/bcm47xx/wgt634u.c
arch/mips/configs/bcm47xx_defconfig [new file with mode: 0644]
arch/mips/configs/ip28_defconfig [new file with mode: 0644]
arch/mips/configs/qemu_defconfig [deleted file]
arch/mips/kernel/irq-rm7000.c
arch/mips/kernel/irq-rm9000.c
arch/mips/kernel/mips-mt-fpaff.c
arch/mips/kernel/scall32-o32.S
arch/mips/kernel/scall64-64.S
arch/mips/kernel/scall64-n32.S
arch/mips/kernel/scall64-o32.S
arch/mips/kernel/sysirix.c
arch/mips/mm/c-r4k.c
arch/mips/mm/cache.c
arch/mips/mm/init.c
arch/mips/mm/pg-sb1.c
arch/mips/pci/pci.c
arch/mips/sibyte/bcm1480/smp.c
arch/mn10300/configs/asb2303_defconfig
arch/mn10300/kernel/gdb-io-ttysm.c
arch/mn10300/kernel/time.c
arch/mn10300/kernel/traps.c
arch/powerpc/Makefile
arch/x86/Kconfig.debug
arch/x86/Makefile
arch/x86/kernel/Makefile
arch/x86/kernel/cpu/bugs.c
arch/x86/kernel/efi.c
arch/x86/kernel/efi_32.c
arch/x86/kernel/entry_32.S
arch/x86/kernel/entry_64.S
arch/x86/kernel/head_32.S
arch/x86/kernel/head_64.S
arch/x86/kernel/i387.c
arch/x86/kernel/i8259_32.c
arch/x86/kernel/io_delay.c
arch/x86/kernel/kprobes.c
arch/x86/kernel/nmi_32.c
arch/x86/kernel/nmi_64.c
arch/x86/kernel/setup_32.c
arch/x86/kernel/setup_64.c
arch/x86/kernel/topology.c
arch/x86/kernel/vmlinux_32.lds.S
arch/x86/kernel/vmlinux_64.lds.S
arch/x86/lib/csum-wrappers_64.c
arch/x86/lib/io_64.c
arch/x86/mm/ioremap.c
arch/x86/mm/pageattr.c
arch/x86/mm/srat_64.c
arch/x86/pci/common.c
arch/x86/power/hibernate_asm_64.S
arch/xtensa/Makefile
arch/xtensa/boot/boot-elf/Makefile
arch/xtensa/boot/boot-elf/boot.lds.S [moved from arch/xtensa/boot/boot-elf/boot.ld with 89% similarity]
arch/xtensa/boot/boot-redboot/Makefile
arch/xtensa/boot/boot-redboot/boot.ld
arch/xtensa/kernel/asm-offsets.c
arch/xtensa/kernel/coprocessor.S
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/module.c
arch/xtensa/kernel/process.c
arch/xtensa/kernel/ptrace.c
arch/xtensa/kernel/setup.c
arch/xtensa/kernel/signal.c
arch/xtensa/kernel/traps.c
arch/xtensa/kernel/vmlinux.lds.S
arch/xtensa/mm/cache.c
arch/xtensa/mm/init.c
arch/xtensa/mm/misc.S
arch/xtensa/platforms/iss/Makefile [moved from arch/xtensa/platform-iss/Makefile with 100% similarity]
arch/xtensa/platforms/iss/console.c [moved from arch/xtensa/platform-iss/console.c with 98% similarity]
arch/xtensa/platforms/iss/io.c [moved from arch/xtensa/platform-iss/io.c with 100% similarity]
arch/xtensa/platforms/iss/network.c [moved from arch/xtensa/platform-iss/network.c with 99% similarity]
arch/xtensa/platforms/iss/setup.c [moved from arch/xtensa/platform-iss/setup.c with 100% similarity]
drivers/acpi/ec.c
drivers/acpi/executer/exregion.c
drivers/acpi/fan.c
drivers/acpi/processor_core.c
drivers/acpi/utils.c
drivers/acpi/video.c
drivers/ata/libata-core.c
drivers/ata/libata-eh.c
drivers/ata/libata-scsi.c
drivers/ata/libata.h
drivers/ata/pata_legacy.c
drivers/ata/sata_mv.c
drivers/base/power/main.c
drivers/char/agp/amd-k7-agp.c
drivers/char/agp/ati-agp.c
drivers/char/agp/generic.c
drivers/char/agp/sis-agp.c
drivers/char/agp/sworks-agp.c
drivers/char/drm/drmP.h
drivers/char/drm/drm_pciids.h
drivers/char/drm/drm_sysfs.c
drivers/char/drm/drm_vm.c
drivers/char/drm/i915_dma.c
drivers/char/drm/i915_drv.c
drivers/char/drm/i915_drv.h
drivers/char/drm/radeon_cp.c
drivers/char/drm/radeon_drv.h
drivers/infiniband/hw/mthca/mthca_mr.c
drivers/infiniband/ulp/ipoib/ipoib_cm.c
drivers/md/dm-raid1.c
drivers/misc/Kconfig
drivers/misc/acer-wmi.c
drivers/misc/intel_menlow.c
drivers/misc/thinkpad_acpi.c
drivers/pci/pci-acpi.c
drivers/thermal/thermal.c
fs/xfs/Makefile-linux-2.6 [deleted file]
include/asm-frv/unistd.h
include/asm-generic/vmlinux.lds.h
include/asm-mips/mach-ip27/dma-coherence.h
include/asm-mips/qemu.h [deleted file]
include/asm-mips/sni.h
include/asm-mips/unistd.h
include/asm-x86/desc_64.h [deleted file]
include/asm-x86/i387.h
include/asm-x86/pgtable_64.h
include/asm-x86/processor.h
include/asm-xtensa/cacheflush.h
include/asm-xtensa/coprocessor.h
include/asm-xtensa/elf.h
include/asm-xtensa/module.h
include/asm-xtensa/pgalloc.h
include/asm-xtensa/pgtable.h
include/asm-xtensa/processor.h
include/asm-xtensa/ptrace.h
include/asm-xtensa/regs.h
include/asm-xtensa/sigcontext.h
include/asm-xtensa/stat.h
include/asm-xtensa/system.h
include/asm-xtensa/thread_info.h
include/asm-xtensa/timex.h
include/asm-xtensa/uaccess.h
include/asm-xtensa/variant-fsf/tie-asm.h [new file with mode: 0644]
include/asm-xtensa/variant-fsf/tie.h
include/linux/init.h
include/linux/libata.h
include/linux/mm.h
kernel/power/snapshot.c
scripts/mod/modpost.c

index 435e69e6e9aab59933c18b144b61ce17a655ecd4..f95166645d29ffb1d97ba991355031cc41a40685 100644 (file)
@@ -1,12 +1,14 @@
 Most (all) Intel-MP compliant SMP boards have the so-called 'IO-APIC',
-which is an enhanced interrupt controller, it enables us to route
-hardware interrupts to multiple CPUs, or to CPU groups.
+which is an enhanced interrupt controller. It enables us to route
+hardware interrupts to multiple CPUs, or to CPU groups. Without an
+IO-APIC, interrupts from hardware will be delivered only to the
+CPU which boots the operating system (usually CPU#0).
 
 Linux supports all variants of compliant SMP boards, including ones with
-multiple IO-APICs. (multiple IO-APICs are used in high-end servers to
-distribute IRQ load further).
+multiple IO-APICs. Multiple IO-APICs are used in high-end servers to
+distribute IRQ load further.
 
-There are (a few) known breakages in certain older boards, which bugs are
+There are (a few) known breakages in certain older boards, such bugs are
 usually worked around by the kernel. If your MP-compliant SMP board does
 not boot Linux, then consult the linux-smp mailing list archives first.
 
@@ -28,18 +30,18 @@ If your box boots fine with enabled IO-APIC IRQs, then your
   hell:~>
   <----------------------------
 
-some interrupts are still listed as 'XT PIC', but this is not a problem,
+Some interrupts are still listed as 'XT PIC', but this is not a problem;
 none of those IRQ sources is performance-critical.
 
 
-in the unlikely case that your board does not create a working mp-table,
+In the unlikely case that your board does not create a working mp-table,
 you can use the pirq= boot parameter to 'hand-construct' IRQ entries. This
-is nontrivial though and cannot be automated. One sample /etc/lilo.conf
+is non-trivial though and cannot be automated. One sample /etc/lilo.conf
 entry:
 
        append="pirq=15,11,10"
 
-the actual numbers depend on your system, on your PCI cards and on their
+The actual numbers depend on your system, on your PCI cards and on their
 PCI slot position. Usually PCI slots are 'daisy chained' before they are
 connected to the PCI chipset IRQ routing facility (the incoming PIRQ1-4
 lines):
@@ -54,7 +56,7 @@ lines):
      PIRQ1 ----| |-  `----| |-  `----| |-  `----| |--------| |
                `-'        `-'        `-'        `-'        `-'
 
-every PCI card emits a PCI IRQ, which can be INTA,INTB,INTC,INTD:
+Every PCI card emits a PCI IRQ, which can be INTA, INTB, INTC or INTD:
 
                                ,-.
                          INTD--| |
@@ -95,21 +97,21 @@ card (IRQ11) in Slot3, and have Slot1 empty:
 [value '0' is a generic 'placeholder', reserved for empty (or non-IRQ emitting)
 slots.]
 
-generally, it's always possible to find out the correct pirq= settings, just
+Generally, it's always possible to find out the correct pirq= settings, just
 permute all IRQ numbers properly ... it will take some time though. An
 'incorrect' pirq line will cause the booting process to hang, or a device
-won't function properly (if it's inserted as eg. a module).
+won't function properly (e.g. if it's inserted as a module).
 
-If you have 2 PCI buses, then you can use up to 8 pirq values. Although such
+If you have 2 PCI buses, then you can use up to 8 pirq values, although such
 boards tend to have a good configuration.
 
 Be prepared that it might happen that you need some strange pirq line:
 
        append="pirq=0,0,0,0,0,0,9,11"
 
-use smart try-and-err techniques to find out the correct pirq line ...
+Use smart trial-and-error techniques to find out the correct pirq line ...
 
-good luck and mail to linux-smp@vger.kernel.org or
+Good luck and mail to linux-smp@vger.kernel.org or
 linux-kernel@vger.kernel.org if you have any problems that are not covered
 by this document.
 
index a4fc7fc21439404c27a12bf718592bf0bf75c3d4..9a5b6658c65e0ee4a6b55df39da68d5836e9889b 100644 (file)
@@ -950,6 +950,41 @@ and is between 256 and 4096 characters. It is defined in the file
                        when set.
                        Format: <int>
 
+       libata.force=   [LIBATA] Force configurations.  The format is comma
+                       separated list of "[ID:]VAL" where ID is
+                       PORT[:DEVICE].  PORT and DEVICE are decimal numbers
+                       matching port, link or device.  Basically, it matches
+                       the ATA ID string printed on console by libata.  If
+                       the whole ID part is omitted, the last PORT and DEVICE
+                       values are used.  If ID hasn't been specified yet, the
+                       configuration applies to all ports, links and devices.
+
+                       If only DEVICE is omitted, the parameter applies to
+                       the port and all links and devices behind it.  DEVICE
+                       number of 0 either selects the first device or the
+                       first fan-out link behind PMP device.  It does not
+                       select the host link.  DEVICE number of 15 selects the
+                       host link and device attached to it.
+
+                       The VAL specifies the configuration to force.  As long
+                       as there's no ambiguity shortcut notation is allowed.
+                       For example, both 1.5 and 1.5G would work for 1.5Gbps.
+                       The following configurations can be forced.
+
+                       * Cable type: 40c, 80c, short40c, unk, ign or sata.
+                         Any ID with matching PORT is used.
+
+                       * SATA link speed limit: 1.5Gbps or 3.0Gbps.
+
+                       * Transfer mode: pio[0-7], mwdma[0-4] and udma[0-7].
+                         udma[/][16,25,33,44,66,100,133] notation is also
+                         allowed.
+
+                       * [no]ncq: Turn on or off NCQ.
+
+                       If there are multiple matching configurations changing
+                       the same attribute, the last one is used.
+
        load_ramdisk=   [RAM] List of ramdisks to load from floppy
                        See Documentation/ramdisk.txt.
 
@@ -1056,8 +1091,6 @@ and is between 256 and 4096 characters. It is defined in the file
                        [SCSI] Maximum number of LUNs received.
                        Should be between 1 and 16384.
 
-       mca-pentium     [BUGS=X86-32]
-
        mcatest=        [IA-64]
 
        mce             [X86-32] Machine Check Exception
index 6c2477754a2a35025e8c837740693275d2df8f21..76cb428435daf4c1dfe9d611fd6a155483e447a2 100644 (file)
@@ -160,7 +160,7 @@ Hot keys
 procfs: /proc/acpi/ibm/hotkey
 sysfs device attribute: hotkey_*
 
-In a ThinkPad, the ACPI HKEY handler is responsible for comunicating
+In a ThinkPad, the ACPI HKEY handler is responsible for communicating
 some important events and also keyboard hot key presses to the operating
 system.  Enabling the hotkey functionality of thinkpad-acpi signals the
 firmware that such a driver is present, and modifies how the ThinkPad
@@ -193,7 +193,7 @@ Not all bits in the mask can be modified.  Not all bits that can be
 modified do anything.  Not all hot keys can be individually controlled
 by the mask.  Some models do not support the mask at all, and in those
 models, hot keys cannot be controlled individually.  The behaviour of
-the mask is, therefore, higly dependent on the ThinkPad model.
+the mask is, therefore, highly dependent on the ThinkPad model.
 
 Note that unmasking some keys prevents their default behavior.  For
 example, if Fn+F5 is unmasked, that key will no longer enable/disable
@@ -288,7 +288,7 @@ sysfs notes:
                in ACPI event mode, volume up/down/mute are reported as
                separate events, but this behaviour may be corrected in
                future releases of this driver, in which case the
-               ThinkPad volume mixer user interface semanthics will be
+               ThinkPad volume mixer user interface semantics will be
                enforced.
 
        hotkey_poll_freq:
@@ -306,13 +306,20 @@ sysfs notes:
                The recommended polling frequency is 10Hz.
 
        hotkey_radio_sw:
-               if the ThinkPad has a hardware radio switch, this
+               If the ThinkPad has a hardware radio switch, this
                attribute will read 0 if the switch is in the "radios
-               disabled" postition, and 1 if the switch is in the
+               disabled" position, and 1 if the switch is in the
                "radios enabled" position.
 
                This attribute has poll()/select() support.
 
+       hotkey_tablet_mode:
+               If the ThinkPad has tablet capabilities, this attribute
+               will read 0 if the ThinkPad is in normal mode, and
+               1 if the ThinkPad is in tablet mode.
+
+               This attribute has poll()/select() support.
+
        hotkey_report_mode:
                Returns the state of the procfs ACPI event report mode
                filter for hot keys.  If it is set to 1 (the default),
@@ -339,7 +346,7 @@ sysfs notes:
        wakeup_hotunplug_complete:
                Set to 1 if the system was waken up because of an
                undock or bay ejection request, and that request
-               was sucessfully completed.  At this point, it might
+               was successfully completed.  At this point, it might
                be useful to send the system back to sleep, at the
                user's choice.  Refer to HKEY events 0x4003 and
                0x3003, below.
@@ -392,7 +399,7 @@ event       code    Key             Notes
                                Lenovo: battery
 
 0x1004 0x03    FN+F4           Sleep button (ACPI sleep button
-                               semanthics, i.e. sleep-to-RAM).
+                               semantics, i.e. sleep-to-RAM).
                                It is always generate some kind
                                of event, either the hot key
                                event or a ACPI sleep button
@@ -403,12 +410,12 @@ event     code    Key             Notes
                                time passes.
 
 0x1005 0x04    FN+F5           Radio.  Enables/disables
-                               the internal BlueTooth hardware
+                               the internal Bluetooth hardware
                                and W-WAN card if left in control
                                of the firmware.  Does not affect
                                the WLAN card.
                                Should be used to turn on/off all
-                               radios (bluetooth+W-WAN+WLAN),
+                               radios (Bluetooth+W-WAN+WLAN),
                                really.
 
 0x1006 0x05    FN+F6           -
@@ -417,7 +424,7 @@ event       code    Key             Notes
                                Do you feel lucky today?
 
 0x1008 0x07    FN+F8           IBM: toggle screen expand
-                               Lenovo: configure ultranav
+                               Lenovo: configure UltraNav
 
 0x1009 0x08    FN+F9           -
        ..      ..              ..
@@ -447,7 +454,7 @@ event       code    Key             Notes
 0x1011 0x10    FN+END          Brightness down.  See brightness
                                up for details.
 
-0x1012 0x11    FN+PGUP         Thinklight toggle.  This key is
+0x1012 0x11    FN+PGUP         ThinkLight toggle.  This key is
                                always handled by the firmware,
                                even when unmasked.
 
@@ -469,7 +476,7 @@ event       code    Key             Notes
                                key is always handled by the
                                firmware, even when unmasked.
 
-0x1018 0x17    THINKPAD        Thinkpad/Access IBM/Lenovo key
+0x1018 0x17    THINKPAD        ThinkPad/Access IBM/Lenovo key
 
 0x1019 0x18    unknown
 ..     ..      ..
@@ -488,9 +495,17 @@ If a key is mapped to KEY_UNKNOWN, it generates an input event that
 includes an scan code.  If a key is mapped to anything else, it will
 generate input device EV_KEY events.
 
+In addition to the EV_KEY events, thinkpad-acpi may also issue EV_SW
+events for switches:
+
+SW_RADIO       T60 and later hardare rfkill rocker switch
+SW_TABLET_MODE Tablet ThinkPads HKEY events 0x5009 and 0x500A
+
 Non hot-key ACPI HKEY event map:
 0x5001         Lid closed
 0x5002         Lid opened
+0x5009         Tablet swivel: switched to tablet mode
+0x500A         Tablet swivel: switched to normal mode
 0x7000         Radio Switch may have changed state
 
 The above events are not propagated by the driver, except for legacy
@@ -505,9 +520,7 @@ The above events are never propagated by the driver.
 
 0x3003         Bay ejection (see 0x2x05) complete, can sleep again
 0x4003         Undocked (see 0x2x04), can sleep again
-0x5009         Tablet swivel: switched to tablet mode
-0x500A         Tablet swivel: switched to normal mode
-0x500B         Tablet pen insterted into its storage bay
+0x500B         Tablet pen inserted into its storage bay
 0x500C         Tablet pen removed from its storage bay
 0x5010         Brightness level changed (newer Lenovo BIOSes)
 
@@ -539,7 +552,7 @@ sysfs (it is read-only).
 If the hotkey_report_mode module parameter is set to 1 or 2, it cannot
 be changed later through sysfs (any writes will return -EPERM to signal
 that hotkey_report_mode was locked.  On 2.6.23 and later, where
-hotkey_report_mode cannot be changed at all, writes will return -EACES).
+hotkey_report_mode cannot be changed at all, writes will return -EACCES).
 
 hotkey_report_mode set to 1 makes the driver export through the procfs
 ACPI event interface all hot key presses (which are *also* sent to the
@@ -584,7 +597,7 @@ Sysfs notes:
                0: disables Bluetooth / Bluetooth is disabled
                1: enables Bluetooth / Bluetooth is enabled.
 
-       Note: this interface will be probably be superseeded by the
+       Note: this interface will be probably be superseded by the
        generic rfkill class, so it is NOT to be considered stable yet.
 
 Video output control -- /proc/acpi/ibm/video
@@ -791,12 +804,12 @@ on the X40 (tpb is the ThinkPad Buttons utility):
        1 - Related to "Volume up" key press
        2 - Related to "Mute on" key press
        3 - Related to "Access IBM" key press
-       4 - Related to "LCD brightness up" key pess
+       4 - Related to "LCD brightness up" key press
        5 - Related to "LCD brightness down" key press
        11 - Related to "toggle screen expansion" key press/function
        12 - Related to "ThinkLight on"
        13 - Related to "ThinkLight off"
-       14 - Related to "ThinkLight" key press (toggle thinklight)
+       14 - Related to "ThinkLight" key press (toggle ThinkLight)
 
 The cmos command interface is prone to firmware split-brain problems, as
 in newer ThinkPads it is just a compatibility layer.  Do not use it, it is
@@ -1024,7 +1037,7 @@ There are two interfaces to the firmware for direct brightness control,
 EC and CMOS.  To select which one should be used, use the
 brightness_mode module parameter: brightness_mode=1 selects EC mode,
 brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC
-and CMOS.  The driver tries to autodetect which interface to use.
+and CMOS.  The driver tries to auto-detect which interface to use.
 
 When display backlight brightness controls are available through the
 standard ACPI interface, it is best to use it instead of this direct
@@ -1266,8 +1279,8 @@ experimental=1 parameter when loading the module.
 This feature shows the presence and current state of a W-WAN (Sierra
 Wireless EV-DO) device.
 
-It was tested on a Lenovo Thinkpad X60. It should probably work on other
-Thinkpad models which come with this module installed.
+It was tested on a Lenovo ThinkPad X60. It should probably work on other
+ThinkPad models which come with this module installed.
 
 Procfs notes:
 
@@ -1286,7 +1299,7 @@ Sysfs notes:
                0: disables WWAN card / WWAN card is disabled
                1: enables WWAN card / WWAN card is enabled.
 
-       Note: this interface will be probably be superseeded by the
+       Note: this interface will be probably be superseded by the
        generic rfkill class, so it is NOT to be considered stable yet.
 
 Multiple Commands, Module Parameters
@@ -1309,7 +1322,7 @@ Enabling debugging output
 The module takes a debug parameter which can be used to selectively
 enable various classes of debugging output, for example:
 
-        modprobe ibm_acpi debug=0xffff
+        modprobe thinkpad_acpi debug=0xffff
 
 will enable all debugging output classes.  It takes a bitmask, so
 to enable more than one output class, just add their values.
@@ -1356,7 +1369,7 @@ Sysfs interface changelog:
                NVRAM is compiled out by the user because it is
                unneeded/undesired in the first place).
 0x020101:      Marker for thinkpad-acpi with hot key NVRAM polling
-               and proper hotkey_mask semanthics (version 8 of the
+               and proper hotkey_mask semantics (version 8 of the
                NVRAM polling patch).  Some development snapshots of
                0.18 had an earlier version that did strange things
                to hotkey_mask.
index ca6a345b87e401f7309e89c0a41702a91f38a35d..f36d7f4a7c25eab7458e9d4c19771e23151a3e1c 100644 (file)
@@ -1494,9 +1494,11 @@ sys_call_table:
        .long sys_epoll_pwait
        .long sys_utimensat             /* 320 */
        .long sys_signalfd
-       .long sys_ni_syscall
+       .long sys_timerfd_create
        .long sys_eventfd
        .long sys_fallocate
+       .long sys_timerfd_settime       /* 325 */
+       .long sys_timerfd_gettime
 
 
 syscall_table_size = (. - sys_call_table)
index 17725a55aed8cecc0ba3405f33e0ecdd235f081b..b95c4eace62fe318c7db0bdbcc46b9968360d5c2 100644 (file)
@@ -76,9 +76,6 @@ SECTIONS
          *(.data.init_task)
   }
 
-  . = ALIGN(4096);
-  .data.page_aligned : { *(.data.idt) }
-
   . = ALIGN(L1_CACHE_BYTES);
   .data.cacheline_aligned : { *(.data.cacheline_aligned) }
 
index 1b6b0fa5028f23f9993e6f71e0fb21397b29a1be..8d36f186890eaf5e4271c31ea967c0efbe18608e 100644 (file)
@@ -92,17 +92,17 @@ static int bcm47xx_get_invariants(struct ssb_bus *bus,
        iv->sprom.revision = 3;
 
        if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0)
-               str2eaddr(buf, iv->sprom.r1.et0mac);
+               str2eaddr(buf, iv->sprom.et0mac);
        if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0)
-               str2eaddr(buf, iv->sprom.r1.et1mac);
+               str2eaddr(buf, iv->sprom.et1mac);
        if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0)
-               iv->sprom.r1.et0phyaddr = simple_strtoul(buf, NULL, 10);
+               iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 10);
        if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0)
-               iv->sprom.r1.et1phyaddr = simple_strtoul(buf, NULL, 10);
+               iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 10);
        if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0)
-               iv->sprom.r1.et0mdcport = simple_strtoul(buf, NULL, 10);
+               iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10);
        if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0)
-               iv->sprom.r1.et1mdcport = simple_strtoul(buf, NULL, 10);
+               iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10);
 
        return 0;
 }
index 5a017eaee712c0f84941c0681b5465d829d2180a..d1d90c9ef2fa7382fa6b65fe3e34778ad843e3c1 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/platform_device.h>
 #include <linux/module.h>
 #include <linux/leds.h>
+#include <linux/mtd/physmap.h>
 #include <linux/ssb/ssb.h>
 #include <asm/mach-bcm47xx/bcm47xx.h>
 
@@ -43,6 +44,61 @@ static struct platform_device wgt634u_gpio_leds = {
        }
 };
 
+
+/* 8MiB flash. The struct mtd_partition matches original Netgear WGT634U
+   firmware. */
+static struct mtd_partition wgt634u_partitions[] = {
+       {
+               .name       = "cfe",
+               .offset     = 0,
+               .size       = 0x60000,          /* 384k */
+               .mask_flags = MTD_WRITEABLE     /* force read-only */
+       },
+       {
+               .name   = "config",
+               .offset = 0x60000,
+               .size   = 0x20000               /* 128k */
+       },
+       {
+               .name   = "linux",
+               .offset = 0x80000,
+               .size   = 0x140000              /* 1280k */
+       },
+       {
+               .name   = "jffs",
+               .offset = 0x1c0000,
+               .size   = 0x620000              /* 6272k */
+       },
+       {
+               .name   = "nvram",
+               .offset = 0x7e0000,
+               .size   = 0x20000               /* 128k */
+       },
+};
+
+static struct physmap_flash_data wgt634u_flash_data = {
+       .parts    = wgt634u_partitions,
+       .nr_parts = ARRAY_SIZE(wgt634u_partitions)
+};
+
+static struct resource wgt634u_flash_resource = {
+       .flags = IORESOURCE_MEM,
+};
+
+static struct platform_device wgt634u_flash = {
+       .name          = "physmap-flash",
+       .id            = 0,
+       .dev           = { .platform_data = &wgt634u_flash_data, },
+       .resource      = &wgt634u_flash_resource,
+       .num_resources = 1,
+};
+
+/* Platform devices */
+static struct platform_device *wgt634u_devices[] __initdata = {
+       &wgt634u_flash,
+       &wgt634u_gpio_leds,
+};
+
 static int __init wgt634u_init(void)
 {
        /* There is no easy way to detect that we are running on a WGT634U
@@ -50,13 +106,20 @@ static int __init wgt634u_init(void)
         * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx.
         */
 
-       u8 *et0mac = ssb_bcm47xx.sprom.r1.et0mac;
+       u8 *et0mac = ssb_bcm47xx.sprom.et0mac;
 
        if (et0mac[0] == 0x00 &&
            ((et0mac[1] == 0x09 && et0mac[2] == 0x5b) ||
-            (et0mac[1] == 0x0f && et0mac[2] == 0xb5)))
-               return platform_device_register(&wgt634u_gpio_leds);
-       else
+            (et0mac[1] == 0x0f && et0mac[2] == 0xb5))) {
+               struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
+               wgt634u_flash_data.width = mcore->flash_buswidth;
+               wgt634u_flash_resource.start = mcore->flash_window;
+               wgt634u_flash_resource.end = mcore->flash_window
+                                          + mcore->flash_window_size
+                                          - 1;
+               return platform_add_devices(wgt634u_devices,
+                                           ARRAY_SIZE(wgt634u_devices));
+       } else
                return -ENODEV;
 }
 
diff --git a/arch/mips/configs/bcm47xx_defconfig b/arch/mips/configs/bcm47xx_defconfig
new file mode 100644 (file)
index 0000000..c0e42e7
--- /dev/null
@@ -0,0 +1,1939 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.25-rc2
+# Mon Feb 18 11:55:24 2008
+#
+CONFIG_MIPS=y
+
+#
+# Machine selection
+#
+# CONFIG_MACH_ALCHEMY is not set
+# CONFIG_BASLER_EXCITE is not set
+CONFIG_BCM47XX=y
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_MACH_DECSTATION is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_LASAT is not set
+# CONFIG_LEMOTE_FULONG is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MARKEINS is not set
+# CONFIG_MACH_VR41XX is not set
+# CONFIG_PNX8550_JBS is not set
+# CONFIG_PNX8550_STB810 is not set
+# CONFIG_PMC_MSP is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+# CONFIG_SGI_IP28 is not set
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_CRHONE is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SNI_RM is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+# CONFIG_WR_PPMC is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
+CONFIG_CEVT_R4K=y
+CONFIG_CSRC_R4K=y
+CONFIG_CFE=y
+CONFIG_DMA_NONCOHERENT=y
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_SYS_HAS_EARLY_PRINTK=y
+# CONFIG_HOTPLUG_CPU is not set
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_GPIO=y
+# CONFIG_CPU_BIG_ENDIAN is not set
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
+CONFIG_IRQ_CPU=y
+CONFIG_MIPS_L1_CACHE_SHIFT=5
+
+#
+# CPU selection
+#
+# CONFIG_CPU_LOONGSON2 is not set
+CONFIG_CPU_MIPS32_R1=y
+# CONFIG_CPU_MIPS32_R2 is not set
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+# CONFIG_CPU_R10000 is not set
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_SYS_HAS_CPU_MIPS32_R1=y
+CONFIG_CPU_MIPS32=y
+CONFIG_CPU_MIPSR1=y
+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+
+#
+# Kernel type
+#
+CONFIG_32BIT=y
+# CONFIG_64BIT is not set
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_MIPS_MT_DISABLED=y
+# CONFIG_MIPS_MT_SMP is not set
+# CONFIG_MIPS_MT_SMTC is not set
+CONFIG_CPU_HAS_LLSC=y
+CONFIG_CPU_HAS_SYNC=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_RESOURCES_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_48 is not set
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_128 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_256 is not set
+# CONFIG_HZ_1000 is not set
+# CONFIG_HZ_1024 is not set
+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_RCU_TRACE=y
+CONFIG_KEXEC=y
+# CONFIG_SECCOMP is not set
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+CONFIG_BSD_PROCESS_ACCT_V3=y
+CONFIG_TASKSTATS=y
+CONFIG_TASK_DELAY_ACCT=y
+CONFIG_TASK_XACCT=y
+CONFIG_TASK_IO_ACCOUNTING=y
+CONFIG_AUDIT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_CGROUPS=y
+# CONFIG_CGROUP_DEBUG is not set
+CONFIG_CGROUP_NS=y
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+CONFIG_CGROUP_CPUACCT=y
+# CONFIG_RESOURCE_COUNTERS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_KPROBES is not set
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+CONFIG_LBD=y
+CONFIG_BLK_DEV_IO_TRACE=y
+CONFIG_LSF=y
+# CONFIG_BLK_DEV_BSG is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+CONFIG_DEFAULT_CFQ=y
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="cfq"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_PREEMPT_RCU is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, ISA, TC)
+#
+CONFIG_HW_HAS_PCI=y
+CONFIG_PCI=y
+CONFIG_PCI_DOMAINS=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCI_LEGACY=y
+CONFIG_MMU=y
+# CONFIG_PCCARD is not set
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_BINFMT_MISC=m
+CONFIG_TRAD_SIGNALS=y
+
+#
+# Power management options
+#
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+CONFIG_XFRM_USER=m
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=m
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_VERBOSE=y
+# CONFIG_IP_PNP is not set
+CONFIG_NET_IPIP=m
+CONFIG_NET_IPGRE=m
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
+CONFIG_INET_TUNNEL=m
+CONFIG_INET_XFRM_MODE_TRANSPORT=m
+CONFIG_INET_XFRM_MODE_TUNNEL=m
+CONFIG_INET_XFRM_MODE_BEET=m
+CONFIG_INET_LRO=m
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+CONFIG_TCP_CONG_ADVANCED=y
+CONFIG_TCP_CONG_BIC=y
+CONFIG_TCP_CONG_CUBIC=m
+CONFIG_TCP_CONG_WESTWOOD=m
+CONFIG_TCP_CONG_HTCP=m
+CONFIG_TCP_CONG_HSTCP=m
+CONFIG_TCP_CONG_HYBLA=m
+CONFIG_TCP_CONG_VEGAS=m
+CONFIG_TCP_CONG_SCALABLE=m
+CONFIG_TCP_CONG_LP=m
+CONFIG_TCP_CONG_VENO=m
+CONFIG_TCP_CONG_YEAH=m
+CONFIG_TCP_CONG_ILLINOIS=m
+CONFIG_DEFAULT_BIC=y
+# CONFIG_DEFAULT_CUBIC is not set
+# CONFIG_DEFAULT_HTCP is not set
+# CONFIG_DEFAULT_VEGAS is not set
+# CONFIG_DEFAULT_WESTWOOD is not set
+# CONFIG_DEFAULT_RENO is not set
+CONFIG_DEFAULT_TCP_CONG="bic"
+# CONFIG_TCP_MD5SIG is not set
+CONFIG_IP_VS=m
+# CONFIG_IP_VS_DEBUG is not set
+CONFIG_IP_VS_TAB_BITS=12
+
+#
+# IPVS transport protocol load balancing support
+#
+CONFIG_IP_VS_PROTO_TCP=y
+CONFIG_IP_VS_PROTO_UDP=y
+CONFIG_IP_VS_PROTO_ESP=y
+CONFIG_IP_VS_PROTO_AH=y
+
+#
+# IPVS scheduler
+#
+CONFIG_IP_VS_RR=m
+CONFIG_IP_VS_WRR=m
+CONFIG_IP_VS_LC=m
+CONFIG_IP_VS_WLC=m
+CONFIG_IP_VS_LBLC=m
+CONFIG_IP_VS_LBLCR=m
+CONFIG_IP_VS_DH=m
+CONFIG_IP_VS_SH=m
+CONFIG_IP_VS_SED=m
+CONFIG_IP_VS_NQ=m
+
+#
+# IPVS application helper
+#
+CONFIG_IP_VS_FTP=m
+CONFIG_IPV6=m
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
+CONFIG_INET6_AH=m
+CONFIG_INET6_ESP=m
+CONFIG_INET6_IPCOMP=m
+# CONFIG_IPV6_MIP6 is not set
+CONFIG_INET6_XFRM_TUNNEL=m
+CONFIG_INET6_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
+CONFIG_INET6_XFRM_MODE_TUNNEL=m
+CONFIG_INET6_XFRM_MODE_BEET=m
+CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
+CONFIG_IPV6_SIT=m
+CONFIG_IPV6_TUNNEL=m
+CONFIG_IPV6_MULTIPLE_TABLES=y
+CONFIG_IPV6_SUBTREES=y
+CONFIG_NETWORK_SECMARK=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_NETFILTER_ADVANCED=y
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NF_CONNTRACK=m
+CONFIG_NF_CT_ACCT=y
+CONFIG_NF_CONNTRACK_MARK=y
+CONFIG_NF_CONNTRACK_SECMARK=y
+CONFIG_NF_CONNTRACK_EVENTS=y
+CONFIG_NF_CT_PROTO_GRE=m
+CONFIG_NF_CT_PROTO_SCTP=m
+CONFIG_NF_CT_PROTO_UDPLITE=m
+CONFIG_NF_CONNTRACK_AMANDA=m
+CONFIG_NF_CONNTRACK_FTP=m
+CONFIG_NF_CONNTRACK_H323=m
+CONFIG_NF_CONNTRACK_IRC=m
+CONFIG_NF_CONNTRACK_NETBIOS_NS=m
+CONFIG_NF_CONNTRACK_PPTP=m
+CONFIG_NF_CONNTRACK_SANE=m
+CONFIG_NF_CONNTRACK_SIP=m
+CONFIG_NF_CONNTRACK_TFTP=m
+CONFIG_NF_CT_NETLINK=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NFLOG=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
+CONFIG_NETFILTER_XT_TARGET_TRACE=m
+CONFIG_NETFILTER_XT_TARGET_SECMARK=m
+CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m
+CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_DSCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+CONFIG_NETFILTER_XT_MATCH_TIME=m
+CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV4=m
+CONFIG_NF_CONNTRACK_PROC_COMPAT=y
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_NF_NAT=m
+CONFIG_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_NF_NAT_SNMP_BASIC=m
+CONFIG_NF_NAT_PROTO_GRE=m
+CONFIG_NF_NAT_FTP=m
+CONFIG_NF_NAT_IRC=m
+CONFIG_NF_NAT_TFTP=m
+CONFIG_NF_NAT_AMANDA=m
+CONFIG_NF_NAT_PPTP=m
+CONFIG_NF_NAT_H323=m
+CONFIG_NF_NAT_SIP=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration
+#
+CONFIG_NF_CONNTRACK_IPV6=m
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_MH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+CONFIG_BRIDGE_NF_EBTABLES=m
+CONFIG_BRIDGE_EBT_BROUTE=m
+CONFIG_BRIDGE_EBT_T_FILTER=m
+CONFIG_BRIDGE_EBT_T_NAT=m
+CONFIG_BRIDGE_EBT_802_3=m
+CONFIG_BRIDGE_EBT_AMONG=m
+CONFIG_BRIDGE_EBT_ARP=m
+CONFIG_BRIDGE_EBT_IP=m
+CONFIG_BRIDGE_EBT_LIMIT=m
+CONFIG_BRIDGE_EBT_MARK=m
+CONFIG_BRIDGE_EBT_PKTTYPE=m
+CONFIG_BRIDGE_EBT_STP=m
+CONFIG_BRIDGE_EBT_VLAN=m
+CONFIG_BRIDGE_EBT_ARPREPLY=m
+CONFIG_BRIDGE_EBT_DNAT=m
+CONFIG_BRIDGE_EBT_MARK_T=m
+CONFIG_BRIDGE_EBT_REDIRECT=m
+CONFIG_BRIDGE_EBT_SNAT=m
+CONFIG_BRIDGE_EBT_LOG=m
+CONFIG_BRIDGE_EBT_ULOG=m
+CONFIG_IP_DCCP=m
+CONFIG_INET_DCCP_DIAG=m
+CONFIG_IP_DCCP_ACKVEC=y
+
+#
+# DCCP CCIDs Configuration (EXPERIMENTAL)
+#
+CONFIG_IP_DCCP_CCID2=m
+# CONFIG_IP_DCCP_CCID2_DEBUG is not set
+CONFIG_IP_DCCP_CCID3=m
+# CONFIG_IP_DCCP_CCID3_DEBUG is not set
+CONFIG_IP_DCCP_CCID3_RTO=100
+CONFIG_IP_DCCP_TFRC_LIB=m
+CONFIG_IP_SCTP=m
+# CONFIG_SCTP_DBG_MSG is not set
+# CONFIG_SCTP_DBG_OBJCNT is not set
+# CONFIG_SCTP_HMAC_NONE is not set
+# CONFIG_SCTP_HMAC_SHA1 is not set
+CONFIG_SCTP_HMAC_MD5=y
+CONFIG_TIPC=m
+CONFIG_TIPC_ADVANCED=y
+CONFIG_TIPC_ZONES=3
+CONFIG_TIPC_CLUSTERS=1
+CONFIG_TIPC_NODES=255
+CONFIG_TIPC_SLAVE_NODES=0
+CONFIG_TIPC_PORTS=8191
+CONFIG_TIPC_LOG=0
+# CONFIG_TIPC_DEBUG is not set
+CONFIG_ATM=m
+CONFIG_ATM_CLIP=m
+# CONFIG_ATM_CLIP_NO_ICMP is not set
+CONFIG_ATM_LANE=m
+CONFIG_ATM_MPOA=m
+CONFIG_ATM_BR2684=m
+# CONFIG_ATM_BR2684_IPFILTER is not set
+CONFIG_BRIDGE=m
+CONFIG_VLAN_8021Q=m
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+CONFIG_NET_SCHED=y
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_ATM=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RR=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+# CONFIG_NET_CLS_FLOW is not set
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_NAT=m
+CONFIG_NET_ACT_PEDIT=m
+CONFIG_NET_ACT_SIMP=m
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_SCH_FIFO=y
+
+#
+# Network testing
+#
+CONFIG_NET_PKTGEN=m
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+CONFIG_IRDA=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+CONFIG_IRCOMM=m
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+CONFIG_IRDA_CACHE_LAST_LSAP=y
+CONFIG_IRDA_FAST_RR=y
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+CONFIG_IRTTY_SIR=m
+
+#
+# Dongle support
+#
+CONFIG_DONGLE=y
+CONFIG_ESI_DONGLE=m
+CONFIG_ACTISYS_DONGLE=m
+CONFIG_TEKRAM_DONGLE=m
+CONFIG_TOIM3232_DONGLE=m
+CONFIG_LITELINK_DONGLE=m
+CONFIG_MA600_DONGLE=m
+CONFIG_GIRBIL_DONGLE=m
+CONFIG_MCP2120_DONGLE=m
+CONFIG_OLD_BELKIN_DONGLE=m
+CONFIG_ACT200L_DONGLE=m
+CONFIG_KINGSUN_DONGLE=m
+CONFIG_KSDAZZLE_DONGLE=m
+CONFIG_KS959_DONGLE=m
+
+#
+# FIR device drivers
+#
+CONFIG_USB_IRDA=m
+CONFIG_SIGMATEL_FIR=m
+CONFIG_TOSHIBA_FIR=m
+CONFIG_VLSI_FIR=m
+CONFIG_MCS_FIR=m
+CONFIG_BT=m
+# CONFIG_BT_L2CAP is not set
+# CONFIG_BT_SCO is not set
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUSB=m
+CONFIG_BT_HCIUSB_SCO=y
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIUART_LL=y
+CONFIG_BT_HCIBCM203X=m
+CONFIG_BT_HCIBPA10X=m
+CONFIG_BT_HCIBFUSB=m
+CONFIG_BT_HCIVHCI=m
+# CONFIG_AF_RXRPC is not set
+CONFIG_FIB_RULES=y
+
+#
+# Wireless
+#
+CONFIG_CFG80211=m
+CONFIG_NL80211=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_MAC80211=m
+
+#
+# Rate control algorithm selection
+#
+CONFIG_MAC80211_RC_DEFAULT_PID=y
+# CONFIG_MAC80211_RC_DEFAULT_SIMPLE is not set
+# CONFIG_MAC80211_RC_DEFAULT_NONE is not set
+
+#
+# Selecting 'y' for an algorithm will
+#
+
+#
+# build the algorithm into mac80211.
+#
+CONFIG_MAC80211_RC_DEFAULT="pid"
+CONFIG_MAC80211_RC_PID=y
+# CONFIG_MAC80211_RC_SIMPLE is not set
+CONFIG_MAC80211_LEDS=y
+# CONFIG_MAC80211_DEBUGFS is not set
+# CONFIG_MAC80211_DEBUG_PACKET_ALIGNMENT is not set
+# CONFIG_MAC80211_DEBUG is not set
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+CONFIG_IEEE80211_CRYPT_CCMP=m
+CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_RFKILL=m
+CONFIG_RFKILL_INPUT=m
+CONFIG_RFKILL_LEDS=y
+CONFIG_NET_9P=m
+CONFIG_NET_9P_FD=m
+# CONFIG_NET_9P_DEBUG is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_CONNECTOR=m
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+# CONFIG_MTD_CMDLINE_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS 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_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+CONFIG_MTD_ABSENT=y
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+CONFIG_MTD_PHYSMAP=y
+CONFIG_MTD_PHYSMAP_START=0x8000000
+CONFIG_MTD_PHYSMAP_LEN=0x0
+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
+# CONFIG_MTD_INTEL_VR_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+# CONFIG_MTD_NAND is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# UBI - Unsorted block images
+#
+# CONFIG_MTD_UBI is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# 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_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+CONFIG_BLK_DEV_NBD=m
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+CONFIG_MISC_DEVICES=y
+# CONFIG_PHANTOM is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_SGI_IOC4 is not set
+# CONFIG_TIFM_CORE is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+CONFIG_RAID_ATTRS=m
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+CONFIG_SCSI_TGT=m
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+CONFIG_CHR_DEV_ST=m
+CONFIG_CHR_DEV_OSST=m
+CONFIG_BLK_DEV_SR=m
+CONFIG_BLK_DEV_SR_VENDOR=y
+CONFIG_CHR_DEV_SG=m
+CONFIG_CHR_DEV_SCH=m
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+CONFIG_SCSI_CONSTANTS=y
+CONFIG_SCSI_LOGGING=y
+CONFIG_SCSI_SCAN_ASYNC=y
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+CONFIG_SCSI_ISCSI_ATTRS=m
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+CONFIG_ISCSI_TCP=m
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_AIC94XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_ARCMSR is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_HPTIOP is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_STEX is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_QLA_ISCSI is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_SRP is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_FIREWIRE is not set
+# CONFIG_IEEE1394 is not set
+# CONFIG_I2O is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+# CONFIG_IFB is not set
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+CONFIG_EQUALIZER=m
+CONFIG_TUN=m
+CONFIG_VETH=m
+# CONFIG_ARCNET is not set
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_CICADA_PHY=m
+CONFIG_VITESSE_PHY=m
+CONFIG_SMSC_PHY=m
+CONFIG_BROADCOM_PHY=m
+CONFIG_ICPLUS_PHY=m
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_FIXED_PHY is not set
+CONFIG_MDIO_BITBANG=m
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_HAPPYMEAL is not set
+# CONFIG_SUNGEM is not set
+# CONFIG_CASSINI is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 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_B44=y
+CONFIG_B44_PCI_AUTOSELECT=y
+CONFIG_B44_PCICORE_AUTOSELECT=y
+CONFIG_B44_PCI=y
+# CONFIG_FORCEDETH is not set
+# CONFIG_TC35815 is not set
+# CONFIG_EEPRO100 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_8139CP is not set
+# CONFIG_8139TOO is not set
+# CONFIG_R6040 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_SC92031 is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_LIBERTAS is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+# CONFIG_PRISM54 is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_USB_NET_RNDIS_WLAN is not set
+# CONFIG_RTL8180 is not set
+# CONFIG_RTL8187 is not set
+# CONFIG_ADM8211 is not set
+# CONFIG_P54_COMMON is not set
+CONFIG_ATH5K=m
+# CONFIG_IWL4965 is not set
+# CONFIG_IWL3945 is not set
+# CONFIG_HOSTAP is not set
+# CONFIG_BCM43XX is not set
+# CONFIG_B43 is not set
+# CONFIG_B43LEGACY is not set
+CONFIG_ZD1211RW=m
+# CONFIG_ZD1211RW_DEBUG is not set
+# CONFIG_RT2X00 is not set
+
+#
+# USB Network Adapters
+#
+CONFIG_USB_CATC=m
+CONFIG_USB_KAWETH=m
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+CONFIG_USB_USBNET=m
+CONFIG_USB_NET_AX8817X=m
+CONFIG_USB_NET_CDCETHER=m
+CONFIG_USB_NET_DM9601=m
+CONFIG_USB_NET_GL620A=m
+CONFIG_USB_NET_NET1080=m
+CONFIG_USB_NET_PLUSB=m
+CONFIG_USB_NET_MCS7830=m
+CONFIG_USB_NET_RNDIS_HOST=m
+CONFIG_USB_NET_CDC_SUBSET=m
+CONFIG_USB_ALI_M5632=y
+CONFIG_USB_AN2720=y
+CONFIG_USB_BELKIN=y
+CONFIG_USB_ARMLINUX=y
+CONFIG_USB_EPSON2888=y
+CONFIG_USB_KC2190=y
+CONFIG_USB_NET_ZAURUS=m
+# CONFIG_WAN is not set
+CONFIG_ATM_DRIVERS=y
+CONFIG_ATM_DUMMY=m
+CONFIG_ATM_TCP=m
+# CONFIG_ATM_LANAI is not set
+# CONFIG_ATM_ENI is not set
+# CONFIG_ATM_FIRESTREAM is not set
+# CONFIG_ATM_ZATM is not set
+# CONFIG_ATM_NICSTAR is not set
+# CONFIG_ATM_IDT77252 is not set
+# CONFIG_ATM_AMBASSADOR is not set
+# CONFIG_ATM_HORIZON is not set
+# CONFIG_ATM_IA is not set
+# CONFIG_ATM_FORE200E_MAYBE is not set
+# CONFIG_ATM_HE is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+CONFIG_PPP_ASYNC=m
+# CONFIG_PPP_SYNC_TTY is not set
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_PPPOATM=m
+# CONFIG_PPPOL2TP is not set
+CONFIG_SLIP=m
+# CONFIG_SLIP_COMPRESSED is not set
+CONFIG_SLHC=m
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+CONFIG_NETCONSOLE=y
+# CONFIG_NETCONSOLE_DYNAMIC is not set
+CONFIG_NETPOLL=y
+# CONFIG_NETPOLL_TRAP is not set
+CONFIG_NET_POLL_CONTROLLER=y
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=m
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_NOZOMI is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+# CONFIG_SERIAL_8250_PCI is not set
+CONFIG_SERIAL_8250_NR_UARTS=2
+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+CONFIG_W1=m
+CONFIG_W1_CON=y
+
+#
+# 1-wire Bus Masters
+#
+CONFIG_W1_MASTER_MATROX=m
+CONFIG_W1_MASTER_DS2490=m
+# CONFIG_W1_MASTER_GPIO is not set
+
+#
+# 1-wire Slaves
+#
+CONFIG_W1_SLAVE_THERM=m
+CONFIG_W1_SLAVE_SMEM=m
+CONFIG_W1_SLAVE_DS2433=m
+# CONFIG_W1_SLAVE_DS2433_CRC is not set
+CONFIG_W1_SLAVE_DS2760=m
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+CONFIG_THERMAL=y
+# CONFIG_WATCHDOG is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+CONFIG_SSB=y
+CONFIG_SSB_PCIHOST_POSSIBLE=y
+CONFIG_SSB_PCIHOST=y
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+CONFIG_SSB_SERIAL=y
+CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
+CONFIG_SSB_DRIVER_PCICORE=y
+CONFIG_SSB_PCICORE_HOSTMODE=y
+CONFIG_SSB_DRIVER_MIPS=y
+CONFIG_SSB_DRIVER_EXTIF=y
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+CONFIG_DAB=y
+CONFIG_USB_DABUSB=m
+
+#
+# Graphics support
+#
+# CONFIG_DRM is not set
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+CONFIG_SND=m
+CONFIG_SND_TIMER=m
+CONFIG_SND_PCM=m
+CONFIG_SND_HWDEP=m
+CONFIG_SND_RAWMIDI=m
+CONFIG_SND_SEQUENCER=m
+CONFIG_SND_SEQ_DUMMY=m
+CONFIG_SND_OSSEMUL=y
+CONFIG_SND_MIXER_OSS=m
+CONFIG_SND_PCM_OSS=m
+CONFIG_SND_PCM_OSS_PLUGINS=y
+CONFIG_SND_SEQUENCER_OSS=y
+# CONFIG_SND_DYNAMIC_MINORS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
+# CONFIG_SND_VERBOSE_PRINTK is not set
+# CONFIG_SND_DEBUG is not set
+
+#
+# Generic devices
+#
+CONFIG_SND_DUMMY=m
+CONFIG_SND_VIRMIDI=m
+# CONFIG_SND_MTPAV is not set
+# CONFIG_SND_SERIAL_U16550 is not set
+# CONFIG_SND_MPU401 is not set
+
+#
+# PCI devices
+#
+# CONFIG_SND_AD1889 is not set
+# CONFIG_SND_ALS300 is not set
+# CONFIG_SND_ALI5451 is not set
+# CONFIG_SND_ATIIXP is not set
+# CONFIG_SND_ATIIXP_MODEM is not set
+# CONFIG_SND_AU8810 is not set
+# CONFIG_SND_AU8820 is not set
+# CONFIG_SND_AU8830 is not set
+# CONFIG_SND_AZT3328 is not set
+# CONFIG_SND_BT87X is not set
+# CONFIG_SND_CA0106 is not set
+# CONFIG_SND_CMIPCI is not set
+# CONFIG_SND_OXYGEN is not set
+# CONFIG_SND_CS4281 is not set
+# CONFIG_SND_CS46XX is not set
+# CONFIG_SND_DARLA20 is not set
+# CONFIG_SND_GINA20 is not set
+# CONFIG_SND_LAYLA20 is not set
+# CONFIG_SND_DARLA24 is not set
+# CONFIG_SND_GINA24 is not set
+# CONFIG_SND_LAYLA24 is not set
+# CONFIG_SND_MONA is not set
+# CONFIG_SND_MIA is not set
+# CONFIG_SND_ECHO3G is not set
+# CONFIG_SND_INDIGO is not set
+# CONFIG_SND_INDIGOIO is not set
+# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_EMU10K1 is not set
+# CONFIG_SND_EMU10K1X is not set
+# CONFIG_SND_ENS1370 is not set
+# CONFIG_SND_ENS1371 is not set
+# CONFIG_SND_ES1938 is not set
+# CONFIG_SND_ES1968 is not set
+# CONFIG_SND_FM801 is not set
+# CONFIG_SND_HDA_INTEL is not set
+# CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
+# CONFIG_SND_HIFIER is not set
+# CONFIG_SND_ICE1712 is not set
+# CONFIG_SND_ICE1724 is not set
+# CONFIG_SND_INTEL8X0 is not set
+# CONFIG_SND_INTEL8X0M is not set
+# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_MAESTRO3 is not set
+# CONFIG_SND_MIXART is not set
+# CONFIG_SND_NM256 is not set
+# CONFIG_SND_PCXHR is not set
+# CONFIG_SND_RIPTIDE is not set
+# CONFIG_SND_RME32 is not set
+# CONFIG_SND_RME96 is not set
+# CONFIG_SND_RME9652 is not set
+# CONFIG_SND_SONICVIBES is not set
+# CONFIG_SND_TRIDENT is not set
+# CONFIG_SND_VIA82XX is not set
+# CONFIG_SND_VIA82XX_MODEM is not set
+# CONFIG_SND_VIRTUOSO is not set
+# CONFIG_SND_VX222 is not set
+# CONFIG_SND_YMFPCI is not set
+
+#
+# ALSA MIPS devices
+#
+
+#
+# USB devices
+#
+CONFIG_SND_USB_AUDIO=m
+# CONFIG_SND_USB_CAIAQ is not set
+
+#
+# System on Chip audio support
+#
+# CONFIG_SND_SOC is not set
+
+#
+# SoC Audio support for SuperH
+#
+
+#
+# ALSA SoC audio for Freescale SOCs
+#
+
+#
+# Open Sound System
+#
+# CONFIG_SOUND_PRIME is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=m
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
+# CONFIG_HID_FF is not set
+CONFIG_USB_HIDDEV=y
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+CONFIG_USB_EHCI_ROOT_HUB_TT=y
+CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_HCD_SSB is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+CONFIG_USB_U132_HCD=m
+# CONFIG_USB_SL811_HCD is not set
+CONFIG_USB_R8A66597_HCD=m
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+# CONFIG_USB_STORAGE_ISD200 is not set
+CONFIG_USB_STORAGE_DPCM=y
+CONFIG_USB_STORAGE_USBAT=y
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+CONFIG_USB_STORAGE_ALAUDA=y
+CONFIG_USB_STORAGE_ONETOUCH=y
+CONFIG_USB_STORAGE_KARMA=y
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+CONFIG_USB_MDC800=m
+CONFIG_USB_MICROTEK=m
+# CONFIG_USB_MON is not set
+
+#
+# USB port drivers
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_EZUSB=y
+CONFIG_USB_SERIAL_GENERIC=y
+CONFIG_USB_SERIAL_AIRCABLE=m
+CONFIG_USB_SERIAL_AIRPRIME=m
+CONFIG_USB_SERIAL_ARK3116=m
+CONFIG_USB_SERIAL_BELKIN=m
+CONFIG_USB_SERIAL_CH341=m
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
+CONFIG_USB_SERIAL_CP2101=m
+CONFIG_USB_SERIAL_CYPRESS_M8=m
+CONFIG_USB_SERIAL_EMPEG=m
+CONFIG_USB_SERIAL_FTDI_SIO=m
+CONFIG_USB_SERIAL_FUNSOFT=m
+CONFIG_USB_SERIAL_VISOR=m
+CONFIG_USB_SERIAL_IPAQ=m
+CONFIG_USB_SERIAL_IR=m
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+CONFIG_USB_SERIAL_GARMIN=m
+CONFIG_USB_SERIAL_IPW=m
+# CONFIG_USB_SERIAL_IUU is not set
+CONFIG_USB_SERIAL_KEYSPAN_PDA=m
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+CONFIG_USB_SERIAL_KLSI=m
+CONFIG_USB_SERIAL_KOBIL_SCT=m
+CONFIG_USB_SERIAL_MCT_U232=m
+CONFIG_USB_SERIAL_MOS7720=m
+CONFIG_USB_SERIAL_MOS7840=m
+CONFIG_USB_SERIAL_NAVMAN=m
+CONFIG_USB_SERIAL_PL2303=m
+CONFIG_USB_SERIAL_OTI6858=m
+CONFIG_USB_SERIAL_HP4X=m
+CONFIG_USB_SERIAL_SAFE=m
+# CONFIG_USB_SERIAL_SAFE_PADDED is not set
+CONFIG_USB_SERIAL_SIERRAWIRELESS=m
+# CONFIG_USB_SERIAL_TI is not set
+CONFIG_USB_SERIAL_CYBERJACK=m
+CONFIG_USB_SERIAL_XIRCOM=m
+CONFIG_USB_SERIAL_OPTION=m
+CONFIG_USB_SERIAL_OMNINET=m
+CONFIG_USB_SERIAL_DEBUG=m
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+CONFIG_USB_ADUTUX=m
+CONFIG_USB_AUERSWALD=m
+CONFIG_USB_RIO500=m
+CONFIG_USB_LEGOTOWER=m
+CONFIG_USB_LCD=m
+CONFIG_USB_BERRY_CHARGE=m
+CONFIG_USB_LED=m
+CONFIG_USB_CYPRESS_CY7C63=m
+CONFIG_USB_CYTHERM=m
+CONFIG_USB_PHIDGET=m
+CONFIG_USB_PHIDGETKIT=m
+CONFIG_USB_PHIDGETMOTORCONTROL=m
+CONFIG_USB_PHIDGETSERVO=m
+CONFIG_USB_IDMOUSE=m
+CONFIG_USB_FTDI_ELAN=m
+# CONFIG_USB_APPLEDISPLAY is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_LD=m
+CONFIG_USB_TRANCEVIBRATOR=m
+CONFIG_USB_IOWARRIOR=m
+CONFIG_USB_TEST=m
+CONFIG_USB_ATM=m
+CONFIG_USB_SPEEDTOUCH=m
+CONFIG_USB_CXACRU=m
+CONFIG_USB_UEAGLEATM=m
+CONFIG_USB_XUSBATM=m
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+CONFIG_USB_GADGET_NET2280=y
+CONFIG_USB_NET2280=m
+# CONFIG_USB_GADGET_PXA2XX is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+CONFIG_USB_ZERO=m
+CONFIG_USB_ETH=m
+CONFIG_USB_ETH_RNDIS=y
+CONFIG_USB_GADGETFS=m
+CONFIG_USB_FILE_STORAGE=m
+# CONFIG_USB_FILE_STORAGE_TEST is not set
+CONFIG_USB_G_SERIAL=m
+CONFIG_USB_MIDI_GADGET=m
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_INFINIBAND is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+CONFIG_EXT2_FS_XATTR=y
+CONFIG_EXT2_FS_POSIX_ACL=y
+CONFIG_EXT2_FS_SECURITY=y
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+CONFIG_REISERFS_FS_XATTR=y
+CONFIG_REISERFS_FS_POSIX_ACL=y
+CONFIG_REISERFS_FS_SECURITY=y
+CONFIG_JFS_FS=m
+CONFIG_JFS_POSIX_ACL=y
+CONFIG_JFS_SECURITY=y
+# CONFIG_JFS_DEBUG is not set
+# CONFIG_JFS_STATISTICS is not set
+CONFIG_FS_POSIX_ACL=y
+CONFIG_XFS_FS=m
+CONFIG_XFS_QUOTA=y
+CONFIG_XFS_SECURITY=y
+CONFIG_XFS_POSIX_ACL=y
+CONFIG_XFS_RT=y
+CONFIG_GFS2_FS=m
+CONFIG_GFS2_FS_LOCKING_NOLOCK=m
+CONFIG_GFS2_FS_LOCKING_DLM=m
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+CONFIG_QUOTA_NETLINK_INTERFACE=y
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QFMT_V1=m
+CONFIG_QFMT_V2=m
+CONFIG_QUOTACTL=y
+CONFIG_AUTOFS_FS=m
+CONFIG_AUTOFS4_FS=m
+CONFIG_FUSE_FS=m
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+CONFIG_ADFS_FS=m
+# CONFIG_ADFS_FS_RW is not set
+CONFIG_AFFS_FS=m
+CONFIG_HFS_FS=m
+CONFIG_HFSPLUS_FS=m
+CONFIG_BEFS_FS=m
+# CONFIG_BEFS_DEBUG is not set
+CONFIG_BFS_FS=m
+CONFIG_EFS_FS=m
+CONFIG_JFFS2_FS=m
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+# CONFIG_JFFS2_SUMMARY is not set
+CONFIG_JFFS2_FS_XATTR=y
+CONFIG_JFFS2_FS_POSIX_ACL=y
+CONFIG_JFFS2_FS_SECURITY=y
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=m
+CONFIG_VXFS_FS=m
+CONFIG_MINIX_FS=m
+CONFIG_HPFS_FS=m
+CONFIG_QNX4FS_FS=m
+CONFIG_ROMFS_FS=m
+CONFIG_SYSV_FS=m
+CONFIG_UFS_FS=m
+# CONFIG_UFS_FS_WRITE is not set
+# CONFIG_UFS_DEBUG is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V2_ACL=y
+CONFIG_NFSD_V3=y
+CONFIG_NFSD_V3_ACL=y
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_ACL_SUPPORT=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+CONFIG_SUNRPC_GSS=m
+CONFIG_SUNRPC_BIND34=y
+CONFIG_RPCSEC_GSS_KRB5=m
+CONFIG_RPCSEC_GSS_SPKM3=m
+# CONFIG_SMB_FS is not set
+CONFIG_CIFS=m
+# CONFIG_CIFS_STATS is not set
+# CONFIG_CIFS_WEAK_PW_HASH is not set
+CONFIG_CIFS_XATTR=y
+CONFIG_CIFS_POSIX=y
+# CONFIG_CIFS_DEBUG2 is not set
+# CONFIG_CIFS_EXPERIMENTAL is not set
+CONFIG_NCP_FS=m
+# CONFIG_NCPFS_PACKET_SIGNING is not set
+# CONFIG_NCPFS_IOCTL_LOCKING is not set
+# CONFIG_NCPFS_STRONG is not set
+CONFIG_NCPFS_NFS_NS=y
+CONFIG_NCPFS_OS2_NS=y
+# CONFIG_NCPFS_SMALLDOS is not set
+CONFIG_NCPFS_NLS=y
+CONFIG_NCPFS_EXTRAS=y
+CONFIG_CODA_FS=m
+# CONFIG_CODA_FS_OLD_API is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# 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_KARMA_PARTITION=y
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_852=m
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_2=m
+CONFIG_NLS_ISO8859_3=m
+CONFIG_NLS_ISO8859_4=m
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+CONFIG_DLM=m
+CONFIG_DLM_DEBUG=y
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_SAMPLES is not set
+CONFIG_CMDLINE=""
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_AEAD=m
+CONFIG_CRYPTO_BLKCIPHER=m
+# CONFIG_CRYPTO_SEQIV is not set
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_XCBC=m
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_GF128MUL=m
+CONFIG_CRYPTO_ECB=m
+CONFIG_CRYPTO_CBC=m
+CONFIG_CRYPTO_PCBC=m
+CONFIG_CRYPTO_LRW=m
+CONFIG_CRYPTO_XTS=m
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_FCRYPT=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_TWOFISH_COMMON=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_SEED=m
+# CONFIG_CRYPTO_SALSA20 is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_CAMELLIA=m
+CONFIG_CRYPTO_TEST=m
+CONFIG_CRYPTO_AUTHENC=m
+# CONFIG_CRYPTO_LZO is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC_ITU_T=m
+CONFIG_CRC32=y
+CONFIG_CRC7=m
+CONFIG_LIBCRC32C=m
+CONFIG_AUDIT_GENERIC=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/arch/mips/configs/ip28_defconfig b/arch/mips/configs/ip28_defconfig
new file mode 100644 (file)
index 0000000..ec188be
--- /dev/null
@@ -0,0 +1,891 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.25-rc1
+# Mon Feb 11 15:58:54 2008
+#
+CONFIG_MIPS=y
+
+#
+# Machine selection
+#
+# CONFIG_MACH_ALCHEMY is not set
+# CONFIG_BASLER_EXCITE is not set
+# CONFIG_BCM47XX is not set
+# CONFIG_MIPS_COBALT is not set
+# CONFIG_MACH_DECSTATION is not set
+# CONFIG_MACH_JAZZ is not set
+# CONFIG_LASAT is not set
+# CONFIG_LEMOTE_FULONG is not set
+# CONFIG_MIPS_ATLAS is not set
+# CONFIG_MIPS_MALTA is not set
+# CONFIG_MIPS_SEAD is not set
+# CONFIG_MIPS_SIM is not set
+# CONFIG_MARKEINS is not set
+# CONFIG_MACH_VR41XX is not set
+# CONFIG_PNX8550_JBS is not set
+# CONFIG_PNX8550_STB810 is not set
+# CONFIG_PMC_MSP is not set
+# CONFIG_PMC_YOSEMITE is not set
+# CONFIG_SGI_IP22 is not set
+# CONFIG_SGI_IP27 is not set
+CONFIG_SGI_IP28=y
+# CONFIG_SGI_IP32 is not set
+# CONFIG_SIBYTE_CRHINE is not set
+# CONFIG_SIBYTE_CARMEL is not set
+# CONFIG_SIBYTE_CRHONE is not set
+# CONFIG_SIBYTE_RHONE is not set
+# CONFIG_SIBYTE_SWARM is not set
+# CONFIG_SIBYTE_LITTLESUR is not set
+# CONFIG_SIBYTE_SENTOSA is not set
+# CONFIG_SIBYTE_BIGSUR is not set
+# CONFIG_SNI_RM is not set
+# CONFIG_TOSHIBA_JMR3927 is not set
+# CONFIG_TOSHIBA_RBTX4927 is not set
+# CONFIG_TOSHIBA_RBTX4938 is not set
+# CONFIG_WR_PPMC is not set
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_SUPPORTS_OPROFILE=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CMOS_UPDATE=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ is not set
+CONFIG_ARC=y
+CONFIG_CEVT_R4K=y
+CONFIG_CSRC_R4K=y
+CONFIG_DMA_NONCOHERENT=y
+CONFIG_DMA_NEED_PCI_MAP_STATE=y
+CONFIG_EARLY_PRINTK=y
+CONFIG_SYS_HAS_EARLY_PRINTK=y
+# CONFIG_HOTPLUG_CPU is not set
+CONFIG_I8259=y
+# CONFIG_NO_IOPORT is not set
+CONFIG_GENERIC_ISA_DMA=y
+CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y
+CONFIG_CPU_BIG_ENDIAN=y
+# CONFIG_CPU_LITTLE_ENDIAN is not set
+CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
+CONFIG_IRQ_CPU=y
+CONFIG_SWAP_IO_SPACE=y
+CONFIG_SGI_HAS_DS1286=y
+CONFIG_SGI_HAS_INDYDOG=y
+CONFIG_SGI_HAS_SEEQ=y
+CONFIG_SGI_HAS_WD93=y
+CONFIG_SGI_HAS_ZILOG=y
+CONFIG_SGI_HAS_I8042=y
+CONFIG_DEFAULT_SGI_PARTITION=y
+CONFIG_MIPS_L1_CACHE_SHIFT=7
+CONFIG_ARC_CONSOLE=y
+CONFIG_ARC_PROMLIB=y
+CONFIG_ARC64=y
+CONFIG_BOOT_ELF64=y
+
+#
+# CPU selection
+#
+# CONFIG_CPU_LOONGSON2 is not set
+# CONFIG_CPU_MIPS32_R1 is not set
+# CONFIG_CPU_MIPS32_R2 is not set
+# CONFIG_CPU_MIPS64_R1 is not set
+# CONFIG_CPU_MIPS64_R2 is not set
+# CONFIG_CPU_R3000 is not set
+# CONFIG_CPU_TX39XX is not set
+# CONFIG_CPU_VR41XX is not set
+# CONFIG_CPU_R4300 is not set
+# CONFIG_CPU_R4X00 is not set
+# CONFIG_CPU_TX49XX is not set
+# CONFIG_CPU_R5000 is not set
+# CONFIG_CPU_R5432 is not set
+# CONFIG_CPU_R6000 is not set
+# CONFIG_CPU_NEVADA is not set
+# CONFIG_CPU_R8000 is not set
+CONFIG_CPU_R10000=y
+# CONFIG_CPU_RM7000 is not set
+# CONFIG_CPU_RM9000 is not set
+# CONFIG_CPU_SB1 is not set
+CONFIG_SYS_HAS_CPU_R10000=y
+CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
+CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y
+
+#
+# Kernel type
+#
+# CONFIG_32BIT is not set
+CONFIG_64BIT=y
+CONFIG_PAGE_SIZE_4KB=y
+# CONFIG_PAGE_SIZE_8KB is not set
+# CONFIG_PAGE_SIZE_16KB is not set
+# CONFIG_PAGE_SIZE_64KB is not set
+CONFIG_CPU_HAS_PREFETCH=y
+CONFIG_MIPS_MT_DISABLED=y
+# CONFIG_MIPS_MT_SMP is not set
+# CONFIG_MIPS_MT_SMTC is not set
+CONFIG_CPU_HAS_LLSC=y
+CONFIG_CPU_HAS_SYNC=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_CPU_SUPPORTS_HIGHMEM=y
+CONFIG_ARCH_FLATMEM_ENABLE=y
+CONFIG_ARCH_POPULATES_NODE_MAP=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_RESOURCES_64BIT=y
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+# CONFIG_TICK_ONESHOT is not set
+# CONFIG_NO_HZ is not set
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+# CONFIG_HZ_48 is not set
+# CONFIG_HZ_100 is not set
+# CONFIG_HZ_128 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_256 is not set
+# CONFIG_HZ_1000 is not set
+# CONFIG_HZ_1024 is not set
+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
+CONFIG_HZ=250
+# CONFIG_PREEMPT_NONE is not set
+CONFIG_PREEMPT_VOLUNTARY=y
+# CONFIG_PREEMPT is not set
+# CONFIG_RCU_TRACE is not set
+# CONFIG_MIPS_INSANE_LARGE is not set
+# CONFIG_KEXEC is not set
+CONFIG_SECCOMP=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_CGROUPS is not set
+CONFIG_FAIR_GROUP_SCHED=y
+CONFIG_FAIR_USER_SCHED=y
+# CONFIG_FAIR_CGROUP_SCHED is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_RELAY=y
+# CONFIG_NAMESPACES is not set
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SYSCTL=y
+CONFIG_EMBEDDED=y
+CONFIG_SYSCTL_SYSCALL=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+# CONFIG_HOTPLUG is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_ANON_INODES=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+# CONFIG_MARKERS is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_HAVE_KPROBES is not set
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+CONFIG_MODULE_SRCVERSION_ALL=y
+CONFIG_KMOD=y
+CONFIG_BLOCK=y
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_BLK_DEV_BSG is not set
+CONFIG_BLOCK_COMPAT=y
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_CLASSIC_RCU=y
+# CONFIG_PREEMPT_RCU is not set
+
+#
+# Bus options (PCI, PCMCIA, EISA, ISA, TC)
+#
+CONFIG_HW_HAS_EISA=y
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_ISA=y
+CONFIG_EISA=y
+CONFIG_EISA_NAMES=y
+CONFIG_MMU=y
+CONFIG_I8253=y
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+CONFIG_MIPS32_COMPAT=y
+CONFIG_COMPAT=y
+CONFIG_SYSVIPC_COMPAT=y
+CONFIG_MIPS32_O32=y
+CONFIG_MIPS32_N32=y
+CONFIG_BINFMT_ELF32=y
+
+#
+# Power management options
+#
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_PM=y
+# CONFIG_PM_LEGACY is not set
+# CONFIG_PM_DEBUG is not set
+# CONFIG_SUSPEND is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+CONFIG_XFRM_MIGRATE=y
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+CONFIG_NET_KEY_MIGRATE=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+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_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+# CONFIG_INET_XFRM_MODE_BEET is not set
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+CONFIG_TCP_MD5SIG=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+
+#
+# Wireless
+#
+# CONFIG_CFG80211 is not set
+# CONFIG_WIRELESS_EXT is not set
+# CONFIG_MAC80211 is not set
+# CONFIG_IEEE80211 is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+# CONFIG_MTD is not set
+# CONFIG_PARPORT is not set
+# CONFIG_PNP is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+# CONFIG_BLK_DEV_LOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MISC_DEVICES is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=y
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+CONFIG_SCSI_CONSTANTS=y
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+CONFIG_SGIWD93_SCSI=y
+# CONFIG_SCSI_AHA1740 is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_ADVANSYS is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_SIM710 is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_NETDEVICES_MULTIQUEUE is not set
+CONFIG_DUMMY=m
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+# CONFIG_ARCNET is not set
+# CONFIG_PHYLIB is not set
+CONFIG_NET_ETHERNET=y
+# CONFIG_MII is not set
+# CONFIG_AX88796 is not set
+# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_NET_VENDOR_SMC is not set
+# CONFIG_DM9000 is not set
+# CONFIG_NET_VENDOR_RACAL is not set
+# CONFIG_NET_TULIP is not set
+# CONFIG_AT1700 is not set
+# CONFIG_DEPCA is not set
+# CONFIG_HP100 is not set
+# CONFIG_NET_ISA is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_NET_PCI is not set
+# CONFIG_B44 is not set
+CONFIG_SGISEEQ=y
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+# CONFIG_TR is not set
+
+#
+# Wireless LAN
+#
+# CONFIG_WLAN_PRE80211 is not set
+# CONFIG_WLAN_80211 is not set
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+CONFIG_INPUT_MOUSE=y
+CONFIG_MOUSE_PS2=y
+# CONFIG_MOUSE_PS2_ALPS is not set
+CONFIG_MOUSE_PS2_LOGIPS2PP=y
+# CONFIG_MOUSE_PS2_SYNAPTICS is not set
+# CONFIG_MOUSE_PS2_LIFEBOOK is not set
+CONFIG_MOUSE_PS2_TRACKPOINT=y
+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_INPORT is not set
+# CONFIG_MOUSE_LOGIBM is not set
+# CONFIG_MOUSE_PC110PAD is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+CONFIG_VT_HW_CONSOLE_BINDING=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_IP22_ZILOG=y
+CONFIG_SERIAL_IP22_ZILOG_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+# CONFIG_IPMI_HANDLER is not set
+# CONFIG_HW_RANDOM is not set
+# CONFIG_RTC is not set
+CONFIG_SGI_DS1286=y
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_DEVPORT=y
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_INDYDOG=y
+
+#
+# ISA-based Watchdog Cards
+#
+# CONFIG_PCWATCHDOG is not set
+# CONFIG_MIXCOMWD is not set
+# CONFIG_WDT is not set
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB_POSSIBLE=y
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_SM501 is not set
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+# CONFIG_DVB_CORE is not set
+# CONFIG_DAB is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+# CONFIG_FB is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT 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
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HID_DEBUG is not set
+# CONFIG_HIDRAW is not set
+CONFIG_USB_SUPPORT=y
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+# CONFIG_USB_GADGET is not set
+# CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
+# CONFIG_NEW_LEDS is not set
+CONFIG_RTC_LIB=y
+# CONFIG_RTC_CLASS is not set
+
+#
+# Userspace I/O
+#
+# CONFIG_UIO is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+CONFIG_EXT3_FS_POSIX_ACL=y
+CONFIG_EXT3_FS_SECURITY=y
+# CONFIG_EXT4DEV_FS is not set
+CONFIG_JBD=y
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+# CONFIG_QFMT_V1 is not set
+# CONFIG_QFMT_V2 is not set
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+CONFIG_GENERIC_ACL=y
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+CONFIG_TMPFS_POSIX_ACL=y
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_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_MINIX_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+CONFIG_NFS_V3_ACL=y
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_ACL_SUPPORT=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_SUNRPC_BIND34 is not set
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 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_AFS_FS is not set
+
+#
+# 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=y
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_SAMPLES is not set
+CONFIG_CMDLINE=""
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_ALGAPI=y
+# CONFIG_CRYPTO_SEQIV is not set
+CONFIG_CRYPTO_MANAGER=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_XTS is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_TEST is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_LZO is not set
+# CONFIG_CRYPTO_HW is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+# CONFIG_CRC_ITU_T is not set
+# CONFIG_CRC32 is not set
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_PLIST=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/arch/mips/configs/qemu_defconfig b/arch/mips/configs/qemu_defconfig
deleted file mode 100644 (file)
index 72ca147..0000000
+++ /dev/null
@@ -1,800 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.20
-# Tue Feb 20 21:47:39 2007
-#
-CONFIG_MIPS=y
-
-#
-# Machine selection
-#
-CONFIG_ZONE_DMA=y
-# CONFIG_MIPS_MTX1 is not set
-# CONFIG_MIPS_BOSPORUS is not set
-# CONFIG_MIPS_PB1000 is not set
-# CONFIG_MIPS_PB1100 is not set
-# CONFIG_MIPS_PB1500 is not set
-# CONFIG_MIPS_PB1550 is not set
-# CONFIG_MIPS_PB1200 is not set
-# CONFIG_MIPS_DB1000 is not set
-# CONFIG_MIPS_DB1100 is not set
-# CONFIG_MIPS_DB1500 is not set
-# CONFIG_MIPS_DB1550 is not set
-# CONFIG_MIPS_DB1200 is not set
-# CONFIG_MIPS_MIRAGE is not set
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_MIPS_COBALT is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MIPS_ATLAS is not set
-# CONFIG_MIPS_MALTA is not set
-# CONFIG_MIPS_SEAD is not set
-# CONFIG_WR_PPMC is not set
-# CONFIG_MIPS_SIM is not set
-# CONFIG_MOMENCO_JAGUAR_ATX is not set
-# CONFIG_MIPS_XXS1500 is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_MARKEINS is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_TOSHIBA_JMR3927 is not set
-# CONFIG_TOSHIBA_RBTX4927 is not set
-# CONFIG_TOSHIBA_RBTX4938 is not set
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_TIME=y
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_DMA_COHERENT=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_I8259=y
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-CONFIG_SWAP_IO_SPACE=y
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-CONFIG_HAVE_STD_PC_SERIAL_PORT=y
-
-#
-# CPU selection
-#
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_VR41XX is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPSR1=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-
-#
-# Kernel type
-#
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_64KB is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_VPE_LOADER is not set
-# CONFIG_64BIT_PHYS_ADDR is not set
-CONFIG_CPU_HAS_LLSC=y
-CONFIG_CPU_HAS_SYNC=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-# CONFIG_HZ_48 is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_1000 is not set
-# CONFIG_HZ_1024 is not set
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_HZ=100
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# Code maturity level options
-#
-# CONFIG_EXPERIMENTAL is not set
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-
-#
-# General setup
-#
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-# CONFIG_SWAP is not set
-# CONFIG_SYSVIPC is not set
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_TASKSTATS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_AUDIT is not set
-# CONFIG_IKCONFIG is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_RELAY=y
-CONFIG_SYSCTL=y
-CONFIG_EMBEDDED=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_HOTPLUG is not set
-CONFIG_PRINTK=y
-# CONFIG_BUG is not set
-CONFIG_ELF_CORE=y
-# CONFIG_BASE_FULL is not set
-# CONFIG_FUTEX is not set
-# CONFIG_EPOLL is not set
-# CONFIG_SHMEM is not set
-CONFIG_SLAB=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_TINY_SHMEM=y
-CONFIG_BASE_SMALL=1
-# CONFIG_SLOB is not set
-
-#
-# Loadable module support
-#
-# CONFIG_MODULES is not set
-
-#
-# Block layer
-#
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_LSF is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-# CONFIG_DEFAULT_CFQ is not set
-CONFIG_DEFAULT_NOOP=y
-CONFIG_DEFAULT_IOSCHED="noop"
-
-#
-# Bus options (PCI, PCMCIA, EISA, ISA, TC)
-#
-CONFIG_ISA=y
-CONFIG_MMU=y
-CONFIG_PCSPEAKER=y
-
-#
-# PCCARD (PCMCIA/CardBus) support
-#
-
-#
-# PCI Hotplug Support
-#
-
-#
-# Executable file formats
-#
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-CONFIG_TRAD_SIGNALS=y
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_LEGACY is not set
-# CONFIG_PM_DEBUG is not set
-# CONFIG_PM_SYSFS_DEPRECATED is not set
-
-#
-# Networking
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_NETDEBUG is not set
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_FIB_HASH=y
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-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_IP_MROUTE is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_INET_XFRM_MODE_TRANSPORT=y
-CONFIG_INET_XFRM_MODE_TUNNEL=y
-CONFIG_INET_XFRM_MODE_BEET=y
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-# CONFIG_IPV6 is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_NETWORK_SECMARK=y
-# CONFIG_NETFILTER is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
-# CONFIG_IEEE80211 is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_STANDALONE=y
-# CONFIG_PREVENT_FIRMWARE_BUILD is not set
-# CONFIG_SYS_HYPERVISOR is not set
-
-#
-# Connector - unified userspace <-> kernelspace linker
-#
-CONFIG_CONNECTOR=y
-CONFIG_PROC_EVENTS=y
-
-#
-# Memory Technology Devices (MTD)
-#
-# CONFIG_MTD is not set
-
-#
-# Parallel port support
-#
-# CONFIG_PARPORT is not set
-
-#
-# Plug and Play support
-#
-# CONFIG_PNP is not set
-# CONFIG_PNPACPI is not set
-
-#
-# Block devices
-#
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-
-#
-# Misc devices
-#
-
-#
-# ATA/ATAPI/MFM/RLL support
-#
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_NETLINK is not set
-
-#
-# Serial ATA (prod) and Parallel ATA (experimental) drivers
-#
-# CONFIG_ATA is not set
-
-#
-# Old CD-ROM drivers (not SCSI, not IDE)
-#
-# CONFIG_CD_NO_IDESCSI is not set
-
-#
-# Multi-device support (RAID and LVM)
-#
-# CONFIG_MD is not set
-
-#
-# Fusion MPT device support
-#
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# I2O device support
-#
-
-#
-# Network device support
-#
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_EQUALIZER is not set
-# CONFIG_TUN is not set
-
-#
-# ARCnet devices
-#
-# CONFIG_ARCNET is not set
-
-#
-# PHY device support
-#
-# CONFIG_PHYLIB is not set
-
-#
-# Ethernet (10 or 100Mbit)
-#
-CONFIG_NET_ETHERNET=y
-# CONFIG_MII is not set
-# CONFIG_NET_VENDOR_3COM is not set
-# CONFIG_NET_VENDOR_SMC is not set
-# CONFIG_DM9000 is not set
-# CONFIG_NET_VENDOR_RACAL is not set
-# CONFIG_DEPCA is not set
-# CONFIG_HP100 is not set
-CONFIG_NET_ISA=y
-# CONFIG_E2100 is not set
-# CONFIG_EWRK3 is not set
-# CONFIG_EEXPRESS is not set
-# CONFIG_EEXPRESS_PRO is not set
-# CONFIG_HPLAN_PLUS is not set
-# CONFIG_HPLAN is not set
-# CONFIG_LP486E is not set
-# CONFIG_ETH16I is not set
-CONFIG_NE2000=y
-# CONFIG_NET_PCI is not set
-
-#
-# Ethernet (1000 Mbit)
-#
-
-#
-# Ethernet (10000 Mbit)
-#
-
-#
-# Token Ring devices
-#
-# CONFIG_TR is not set
-
-#
-# Wireless LAN (non-hamradio)
-#
-# CONFIG_NET_RADIO is not set
-
-#
-# Wan interfaces
-#
-# CONFIG_WAN is not set
-# CONFIG_PPP is not set
-# CONFIG_SLIP is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
-# ISDN subsystem
-#
-# CONFIG_ISDN is not set
-
-#
-# Telephony Support
-#
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-
-#
-# Userland interfaces
-#
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_MISC is not set
-
-#
-# Hardware I/O ports
-#
-# CONFIG_SERIO is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_VT_CONSOLE=y
-CONFIG_HW_CONSOLE=y
-CONFIG_VT_HW_CONSOLE_BINDING=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_8250_CONSOLE=y
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-
-#
-# IPMI
-#
-# CONFIG_IPMI_HANDLER is not set
-
-#
-# Watchdog Cards
-#
-# CONFIG_WATCHDOG is not set
-# CONFIG_HW_RANDOM 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_RAW_DRIVER is not set
-
-#
-# TPM devices
-#
-
-#
-# I2C support
-#
-# CONFIG_I2C is not set
-
-#
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
-# Dallas's 1-wire bus
-#
-# CONFIG_W1 is not set
-
-#
-# Hardware Monitoring support
-#
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-
-#
-# Multimedia devices
-#
-# CONFIG_VIDEO_DEV is not set
-
-#
-# Digital Video Broadcasting Devices
-#
-# CONFIG_DVB is not set
-
-#
-# Graphics support
-#
-# CONFIG_FIRMWARE_EDID is not set
-# CONFIG_FB is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-
-#
-# Sound
-#
-# CONFIG_SOUND is not set
-
-#
-# HID Devices
-#
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-
-#
-# USB support
-#
-# CONFIG_USB_ARCH_HAS_HCD is not set
-# CONFIG_USB_ARCH_HAS_OHCI is not set
-# CONFIG_USB_ARCH_HAS_EHCI is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# USB Gadget Support
-#
-# CONFIG_USB_GADGET is not set
-
-#
-# MMC/SD Card support
-#
-# CONFIG_MMC is not set
-
-#
-# LED devices
-#
-# CONFIG_NEW_LEDS is not set
-
-#
-# LED drivers
-#
-
-#
-# LED Triggers
-#
-
-#
-# InfiniBand support
-#
-
-#
-# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
-#
-
-#
-# Real Time Clock
-#
-
-#
-# DMA Engine support
-#
-# CONFIG_DMA_ENGINE is not set
-
-#
-# DMA Clients
-#
-
-#
-# DMA Devices
-#
-
-#
-# Auxiliary Display support
-#
-
-#
-# Virtualization
-#
-
-#
-# File systems
-#
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-# CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_ROMFS_FS is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUTOFS4_FS is not set
-CONFIG_FUSE_FS=y
-CONFIG_GENERIC_ACL=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-# CONFIG_ISO9660_FS is not set
-# CONFIG_UDF_FS is not set
-
-#
-# DOS/FAT/NT Filesystems
-#
-# CONFIG_MSDOS_FS is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-CONFIG_TMPFS_POSIX_ACL=y
-# CONFIG_HUGETLB_PAGE is not set
-CONFIG_RAMFS=y
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_HFSPLUS_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
-
-#
-# Network File Systems
-#
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_DIRECTIO=y
-# CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-# CONFIG_SMB_FS is not set
-# CONFIG_CIFS is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-
-#
-# Native Language Support
-#
-# CONFIG_NLS is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_MUST_CHECK=y
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_DEBUG_KERNEL is not set
-CONFIG_LOG_BUF_SHIFT=14
-CONFIG_CROSSCOMPILE=y
-CONFIG_CMDLINE=""
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-
-#
-# Cryptographic options
-#
-# CONFIG_CRYPTO is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_LIBCRC32C is not set
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
index 971adf6ef4f4d527b94c94dbff5edab0e57f78b1..fb50cc78b28b45cf36ffddb8fa4add2a734d5fa1 100644 (file)
@@ -33,6 +33,7 @@ static struct irq_chip rm7k_irq_controller = {
        .mask = mask_rm7k_irq,
        .mask_ack = mask_rm7k_irq,
        .unmask = unmask_rm7k_irq,
+       .eoi    = unmask_rm7k_irq
 };
 
 void __init rm7k_cpu_irq_init(void)
index 7b04583bd800410a5a0d24e92865d0640c081b8d..ed9febe63d7286c19189c154a0e59d0ee956a529 100644 (file)
@@ -75,6 +75,7 @@ static struct irq_chip rm9k_irq_controller = {
        .mask = mask_rm9k_irq,
        .mask_ack = mask_rm9k_irq,
        .unmask = unmask_rm9k_irq,
+       .eoi    = unmask_rm9k_irq
 };
 
 static struct irq_chip rm9k_perfcounter_irq = {
index bb4f00c0cbe94f8a5dfe1c822a072f1c6d4de928..df4d3f2f740c54fa73b413e8b8c8d91601b95c74 100644 (file)
@@ -36,7 +36,7 @@ unsigned long mt_fpemul_threshold = 0;
  */
 static inline struct task_struct *find_process_by_pid(pid_t pid)
 {
-       return pid ? find_task_by_pid(pid) : current;
+       return pid ? find_task_by_vpid(pid) : current;
 }
 
 
index f798139e888e144943870740b20b9cb812ef0543..08a9c5070ea8bf75567591325e0d39d6dd134805 100644 (file)
@@ -663,6 +663,9 @@ einval:     li      v0, -EINVAL
        sys     sys_ni_syscall          0
        sys     sys_eventfd             1
        sys     sys_fallocate           6       /* 4320 */
+       sys     sys_timerfd_create      2
+       sys     sys_timerfd_gettime     2
+       sys     sys_timerfd_settime     4
        .endm
 
        /* We pre-compute the number of _instruction_ bytes needed to
index a626be6baea38e477ca76a444bb8326979cec1ae..dc597b600c68f002393008a622f0dc882a86bdba 100644 (file)
@@ -478,4 +478,7 @@ sys_call_table:
        PTR     sys_ni_syscall
        PTR     sys_eventfd
        PTR     sys_fallocate
+       PTR     sys_timerfd_create              /* 5280 */
+       PTR     sys_timerfd_gettime
+       PTR     sys_timerfd_settime
        .size   sys_call_table,.-sys_call_table
index 9d5bcaf1b3890e35ba92a1ccbba03d2ec42f41ea..12940eca7893253d097b7effc1d16121b9881328 100644 (file)
@@ -404,4 +404,7 @@ EXPORT(sysn32_call_table)
        PTR     sys_ni_syscall
        PTR     sys_eventfd
        PTR     sys_fallocate
+       PTR     sys_timerfd_create
+       PTR     sys_timerfd_gettime             /* 5285 */
+       PTR     sys_timerfd_settime
        .size   sysn32_call_table,.-sysn32_call_table
index fd2019c1ec2d65e9a9532ece52a60828025090bf..9a275efb4f04490f6192b725fbea0e665f50ee0b 100644 (file)
@@ -526,4 +526,7 @@ sys_call_table:
        PTR     sys_ni_syscall
        PTR     sys_eventfd
        PTR     sys32_fallocate                 /* 4320 */
+       PTR     sys_timerfd_create
+       PTR     sys_timerfd_gettime
+       PTR     sys_timerfd_settime
        .size   sys_call_table,.-sys_call_table
index 672fba84b2ccb50a145a7966890a8dfb6b4562f0..c357762b801286803099afd629a7550e70954df4 100644 (file)
@@ -111,7 +111,7 @@ asmlinkage int irix_prctl(unsigned option, ...)
                printk("irix_prctl[%s:%d]: Wants PR_ISBLOCKED\n",
                       current->comm, current->pid);
                read_lock(&tasklist_lock);
-               task = find_task_by_pid(va_arg(args, pid_t));
+               task = find_task_by_vpid(va_arg(args, pid_t));
                error = -ESRCH;
                if (error)
                        error = (task->run_list.next != NULL);
index 53ec05267a98190739ac454d217f4e12a9f34e90..2c4f7e11f0d55fe746d142f764b0e4024f78d686 100644 (file)
@@ -364,20 +364,23 @@ static inline int has_valid_asid(const struct mm_struct *mm)
 static inline void local_r4k_flush_cache_range(void * args)
 {
        struct vm_area_struct *vma = args;
+       int exec = vma->vm_flags & VM_EXEC;
 
        if (!(has_valid_asid(vma->vm_mm)))
                return;
 
        r4k_blast_dcache();
+       if (exec)
+               r4k_blast_icache();
 }
 
 static void r4k_flush_cache_range(struct vm_area_struct *vma,
        unsigned long start, unsigned long end)
 {
-       if (!cpu_has_dc_aliases)
-               return;
+       int exec = vma->vm_flags & VM_EXEC;
 
-       r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
+       if (cpu_has_dc_aliases || (exec && !cpu_has_ic_fills_f_dc))
+               r4k_on_each_cpu(local_r4k_flush_cache_range, vma, 1, 1);
 }
 
 static inline void local_r4k_flush_cache_mm(void * args)
index 81f30ac2bff95fe7c406e3dcf7429899c0e74380..6a24651971df0f6e361d110419c65ee46f5f241a 100644 (file)
@@ -92,12 +92,17 @@ EXPORT_SYMBOL(__flush_dcache_page);
 
 void __flush_anon_page(struct page *page, unsigned long vmaddr)
 {
-       if (pages_do_alias((unsigned long)page_address(page), vmaddr)) {
-               void *kaddr;
+       unsigned long addr = (unsigned long) page_address(page);
 
-               kaddr = kmap_coherent(page, vmaddr);
-               flush_data_cache_page((unsigned long)kaddr);
-               kunmap_coherent();
+       if (pages_do_alias(addr, vmaddr)) {
+               if (page_mapped(page) && !Page_dcache_dirty(page)) {
+                       void *kaddr;
+
+                       kaddr = kmap_coherent(page, vmaddr);
+                       flush_data_cache_page((unsigned long)kaddr);
+                       kunmap_coherent();
+               } else
+                       flush_data_cache_page(addr);
        }
 }
 
index 480dec04f552cbe086f6fa96aedbaf73ff09ff7c..c7aed133d11d586894b14bd3a349ec2ba088baad 100644 (file)
@@ -211,7 +211,8 @@ void copy_user_highpage(struct page *to, struct page *from,
        void *vfrom, *vto;
 
        vto = kmap_atomic(to, KM_USER1);
-       if (cpu_has_dc_aliases && page_mapped(from)) {
+       if (cpu_has_dc_aliases &&
+           page_mapped(from) && !Page_dcache_dirty(from)) {
                vfrom = kmap_coherent(from, vaddr);
                copy_page(vto, vfrom);
                kunmap_coherent();
@@ -234,7 +235,8 @@ void copy_to_user_page(struct vm_area_struct *vma,
        struct page *page, unsigned long vaddr, void *dst, const void *src,
        unsigned long len)
 {
-       if (cpu_has_dc_aliases && page_mapped(page)) {
+       if (cpu_has_dc_aliases &&
+           page_mapped(page) && !Page_dcache_dirty(page)) {
                void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
                memcpy(vto, src, len);
                kunmap_coherent();
@@ -253,7 +255,8 @@ void copy_from_user_page(struct vm_area_struct *vma,
        struct page *page, unsigned long vaddr, void *dst, const void *src,
        unsigned long len)
 {
-       if (cpu_has_dc_aliases && page_mapped(page)) {
+       if (cpu_has_dc_aliases &&
+           page_mapped(page) && !Page_dcache_dirty(page)) {
                void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
                memcpy(dst, vfrom, len);
                kunmap_coherent();
index a3e98c243a89c08c066ff128669e107bdf7b1faa..89925ec57d6a83e80b8657dc2fb038996bea90ac 100644 (file)
@@ -216,7 +216,7 @@ void sb1_dma_init(void)
        int i;
 
        for (i = 0; i < DM_NUM_CHANNELS; i++) {
-               const u64 base_val = CPHYSADDR(&page_descr[i]) |
+               const u64 base_val = CPHYSADDR((unsigned long)&page_descr[i]) |
                                     V_DM_DSCR_BASE_RINGSZ(1);
                void *base_reg = IOADDR(A_DM_REGISTER(i, R_DM_DSCR_BASE));
 
@@ -228,11 +228,11 @@ void sb1_dma_init(void)
 
 void clear_page(void *page)
 {
-       u64 to_phys = CPHYSADDR(page);
+       u64 to_phys = CPHYSADDR((unsigned long)page);
        unsigned int cpu = smp_processor_id();
 
        /* if the page is not in KSEG0, use old way */
-       if ((long)KSEGX(page) != (long)CKSEG0)
+       if ((long)KSEGX((unsigned long)page) != (long)CKSEG0)
                return clear_page_cpu(page);
 
        page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_ZERO_MEM |
@@ -252,13 +252,13 @@ void clear_page(void *page)
 
 void copy_page(void *to, void *from)
 {
-       u64 from_phys = CPHYSADDR(from);
-       u64 to_phys = CPHYSADDR(to);
+       u64 from_phys = CPHYSADDR((unsigned long)from);
+       u64 to_phys = CPHYSADDR((unsigned long)to);
        unsigned int cpu = smp_processor_id();
 
        /* if any page is not in KSEG0, use old way */
-       if ((long)KSEGX(to) != (long)CKSEG0
-           || (long)KSEGX(from) != (long)CKSEG0)
+       if ((long)KSEGX((unsigned long)to) != (long)CKSEG0
+           || (long)KSEGX((unsigned long)from) != (long)CKSEG0)
                return copy_page_cpu(to, from);
 
        page_descr[cpu].dscr_a = to_phys | M_DM_DSCRA_L2C_DEST |
index 6e6981fd79346f0979c9aaa66f1a15997861a7ee..f9471d77c09673f9c1e4252a404b95fea1abeecf 100644 (file)
@@ -177,8 +177,15 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
                        continue;
 
                r = &dev->resource[idx];
+               if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
+                       continue;
+               if ((idx == PCI_ROM_RESOURCE) &&
+                               (!(r->flags & IORESOURCE_ROM_ENABLE)))
+                       continue;
                if (!r->start && r->end) {
-                       printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
+                       printk(KERN_ERR "PCI: Device %s not available "
+                              "because of resource collisions\n",
+                              pci_name(dev));
                        return -EINVAL;
                }
                if (r->flags & IORESOURCE_IO)
@@ -186,10 +193,9 @@ static int pcibios_enable_resources(struct pci_dev *dev, int mask)
                if (r->flags & IORESOURCE_MEM)
                        cmd |= PCI_COMMAND_MEMORY;
        }
-       if (dev->resource[PCI_ROM_RESOURCE].start)
-               cmd |= PCI_COMMAND_MEMORY;
        if (cmd != old_cmd) {
-               printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
+               printk("PCI: Enabling device %s (%04x -> %04x)\n",
+                      pci_name(dev), old_cmd, cmd);
                pci_write_config_word(dev, PCI_COMMAND, cmd);
        }
        return 0;
index 183c460b9ca1b10e7cec696d3c5f6945338590ce..bd9eeb43ed0e1bd86a365322374ae9b9cfdfe25c 100644 (file)
@@ -110,7 +110,6 @@ static void __cpuinit bcm1480_smp_finish(void)
 
        sb1480_clockevent_init();
        local_irq_enable();
-       bcm1480_smp_finish();
 }
 
 /*
index ca9876a111d376982ecb2a2da9b00ae924abb028..3aa8906b3deaa8a99564964c18400ab0151103fb 100644 (file)
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.24-rc2
-# Fri Nov 16 13:36:38 2007
+# Linux kernel version: 2.6.25-rc2
+# Tue Feb 19 18:52:24 2008
 #
 CONFIG_MN10300=y
 CONFIG_AM33=y
@@ -21,6 +21,7 @@ CONFIG_ARCH_HAS_ILOG2_U32=y
 # CONFIG_ARCH_SUPPORTS_AOUT is not set
 CONFIG_GENERIC_HARDIRQS=y
 # CONFIG_HOTPLUG_CPU is not set
+CONFIG_HZ=1000
 CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
 
 #
@@ -38,15 +39,16 @@ CONFIG_SYSVIPC_SYSCTL=y
 CONFIG_BSD_PROCESS_ACCT=y
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 # CONFIG_TASKSTATS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
 # CONFIG_AUDIT is not set
 # CONFIG_IKCONFIG is not set
 CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_CGROUPS is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_USER_SCHED is not set
+# CONFIG_CGROUP_SCHED is not set
 # CONFIG_SYSFS_DEPRECATED is not set
 # CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
 # CONFIG_BLK_DEV_INITRD is not set
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SYSCTL=y
@@ -57,22 +59,33 @@ CONFIG_SYSCTL_SYSCALL=y
 CONFIG_PRINTK=y
 CONFIG_BUG=y
 CONFIG_ELF_CORE=y
+CONFIG_COMPAT_BRK=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_ANON_INODES=y
 CONFIG_EPOLL=y
 CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
 CONFIG_EVENTFD=y
 CONFIG_SHMEM=y
 # CONFIG_VM_EVENT_COUNTERS is not set
 CONFIG_SLAB=y
 # CONFIG_SLUB is not set
 # CONFIG_SLOB is not set
+CONFIG_PROFILING=y
+# CONFIG_MARKERS is not set
+CONFIG_OPROFILE=y
+# CONFIG_HAVE_OPROFILE is not set
+# CONFIG_HAVE_KPROBES is not set
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SLABINFO=y
 CONFIG_RT_MUTEXES=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
 # CONFIG_MODULES is not set
 # CONFIG_BLOCK is not set
+CONFIG_CLASSIC_RCU=y
+# CONFIG_PREEMPT_RCU is not set
 
 #
 # Matsushita MN10300 system setup
@@ -206,6 +219,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
 #
 # CONFIG_NET_PKTGEN is not set
 # CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
 # CONFIG_IRDA is not set
 # CONFIG_BT is not set
 # CONFIG_AF_RXRPC is not set
@@ -311,6 +325,8 @@ CONFIG_MTD_PHYSMAP_BANKWIDTH=2
 # CONFIG_PARPORT is not set
 CONFIG_MISC_DEVICES=y
 # CONFIG_EEPROM_93CX6 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_HAVE_IDE is not set
 
 #
 # SCSI device support
@@ -345,7 +361,6 @@ CONFIG_SMC91X=y
 # CONFIG_WAN is not set
 # CONFIG_PPP is not set
 # CONFIG_SLIP is not set
-# CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
@@ -405,6 +420,7 @@ CONFIG_RTC=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY is not set
 # CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
 # CONFIG_WATCHDOG is not set
 
 #
@@ -444,6 +460,7 @@ CONFIG_SSB_POSSIBLE=y
 # CONFIG_SOUND is not set
 # CONFIG_USB_SUPPORT is not set
 # CONFIG_MMC is not set
+# CONFIG_MEMSTICK is not set
 # CONFIG_NEW_LEDS is not set
 # CONFIG_RTC_CLASS is not set
 
@@ -455,10 +472,10 @@ CONFIG_SSB_POSSIBLE=y
 #
 # File systems
 #
+CONFIG_DNOTIFY=y
 CONFIG_INOTIFY=y
 CONFIG_INOTIFY_USER=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
 # CONFIG_FUSE_FS is not set
@@ -554,5 +571,3 @@ CONFIG_HAS_DMA=y
 #
 # Profiling support
 #
-CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
index c5451592d403065b3e38c52b4e8f83c0ae7eece3..e94c25e8ca058e47d077060a76c3d12c7db7e910 100644 (file)
@@ -196,6 +196,7 @@ int gdbstub_io_rx_char(unsigned char *_ch, int nonblock)
 try_again:
        /* pull chars out of the buffer */
        ix = gdbstub_rx_outp;
+       barrier();
        if (ix == gdbstub_rx_inp) {
                if (nonblock)
                        return -EAGAIN;
@@ -207,6 +208,7 @@ try_again:
 
        ch = gdbstub_rx_buffer[ix++];
        st = gdbstub_rx_buffer[ix++];
+       barrier();
        gdbstub_rx_outp = ix & (PAGE_SIZE - 1);
 
        st &= SC01STR_RXF | SC01STR_RBF | SC01STR_FEF | SC01STR_PEF |
index ff492e3b34577eb083ca6921d4152c4060739888..babb7c2ac37701be5065da1e9cba3d1659cf636c 100644 (file)
@@ -84,11 +84,13 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
                /* advance the kernel's time tracking system */
                profile_tick(CPU_PROFILING);
                do_timer(1);
-               update_process_times(user_mode(get_irq_regs()));
                check_rtc_time();
        }
 
        write_sequnlock(&xtime_lock);
+
+       update_process_times(user_mode(get_irq_regs()));
+
        return IRQ_HANDLED;
 }
 
index 8b9dc6d9dcc6e34e555deccc7d1fb594b4a8ac9e..fcb9a03d46a8a33212b852354b9928b9c575a6e0 100644 (file)
@@ -391,7 +391,7 @@ static asmlinkage void unsupported_syscall(struct pt_regs *regs,
        if (code == EXCEP_SYSCALL15 && !user_mode(regs)) {
                if (report_bug(regs->pc, regs) == BUG_TRAP_TYPE_BUG) {
 #ifdef CONFIG_GDBSTUB
-                       __gdbstub_bug_trap();
+                       gdbstub_intercept(regs, code);
 #endif
                }
        }
index 6845482f009354e531ede0d90cb5a6dde20c7c07..1c6ce3536e4cf15e88d1a0138bd26daada9251f5 100644 (file)
@@ -176,7 +176,7 @@ define archhelp
   @echo '  *_defconfig     - Select default config from arch/$(ARCH)/configs'
 endef
 
-install: vdso_install
+install:
        $(Q)$(MAKE) $(build)=$(boot) install
 
 vdso_install:
index 864affc9a7b07ec67870e1fe2f0dcbc0159cc721..702eb39901ca3ee987f0adeb81f7d38567ba8c93 100644 (file)
@@ -156,7 +156,7 @@ config IO_DELAY_TYPE_NONE
 
 choice
        prompt "IO delay type"
-       default IO_DELAY_0XED
+       default IO_DELAY_0X80
 
 config IO_DELAY_0X80
        bool "port 0x80 based port-IO delay [recommended]"
index 204af43535c512556985a9c70d5b5c1b1355b485..f1e739a43d414025927c7f62db4af5895000070a 100644 (file)
@@ -229,7 +229,7 @@ zdisk bzdisk: vmlinux
 fdimage fdimage144 fdimage288 isoimage: vmlinux
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
 
-install: vdso_install
+install:
        $(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) install
 
 PHONY += vdso_install
index 76ec0f8f138a71cc6014b0f4cc27f3f49b28485f..4eb5ce841106765256ba16c940b6d8c52ba638e6 100644 (file)
@@ -6,7 +6,15 @@ extra-y                := head_$(BITS).o init_task.o vmlinux.lds
 extra-$(CONFIG_X86_64) += head64.o
 
 CPPFLAGS_vmlinux.lds += -U$(UTS_MACHINE)
-CFLAGS_vsyscall_64.o := $(PROFILING) -g0
+
+#
+# vsyscalls (which work on the user stack) should have
+# no stack-protector checks:
+#
+nostackp := $(call cc-option, -fno-stack-protector)
+CFLAGS_vsyscall_64.o   := $(PROFILING) -g0 $(nostackp)
+CFLAGS_hpet.o          := $(nostackp)
+CFLAGS_tsc_64.o                := $(nostackp)
 
 obj-y                  := process_$(BITS).o signal_$(BITS).o entry_$(BITS).o
 obj-y                  += traps_$(BITS).o irq_$(BITS).o
index 9b95edcfc6ae23696fc7566087adc601afa6f388..027e5c003b167df8ed361e8e33c0a6af698f8344 100644 (file)
@@ -25,14 +25,6 @@ static int __init no_halt(char *s)
 
 __setup("no-hlt", no_halt);
 
-static int __init mca_pentium(char *s)
-{
-       mca_pentium_flag = 1;
-       return 1;
-}
-
-__setup("mca-pentium", mca_pentium);
-
 static int __init no_387(char *s)
 {
        boot_cpu_data.hard_math = 0;
index 0c0eeb163d9035aa6e143ba7a74b79aa84659cf6..759e02bec0708f955764907ec380e6eb737c6dfa 100644 (file)
@@ -54,7 +54,7 @@ EXPORT_SYMBOL(efi);
 
 struct efi_memory_map memmap;
 
-struct efi efi_phys __initdata;
+static struct efi efi_phys __initdata;
 static efi_system_table_t efi_systab __initdata;
 
 static int __init setup_noefi(char *arg)
index cb91f985b4a1f8520e021d995135977729e57481..5d23d85624d46c130cc595517b05c773a6daa2c8 100644 (file)
@@ -28,6 +28,7 @@
 #include <asm/page.h>
 #include <asm/pgtable.h>
 #include <asm/tlbflush.h>
+#include <asm/efi.h>
 
 /*
  * To make EFI call EFI runtime service in physical addressing mode we need
index 824e21b80aadf8c3ff35f30424265f1e87879c35..4b87c32b639f50b08d92021027b40de1307871fb 100644 (file)
@@ -409,7 +409,7 @@ restore_nocheck_notrace:
        RESTORE_REGS
        addl $4, %esp                   # skip orig_eax/error_code
        CFI_ADJUST_CFA_OFFSET -4
-ENTRY(irq_return)
+irq_return:
        INTERRUPT_RETURN
 .section .fixup,"ax"
 iret_exc:
index 6be39a387c5ae66780b0b5f946a71c336980fea8..2ad9a1bc6a73fafd6ea8e34b9117877eb2e736dd 100644 (file)
@@ -583,7 +583,7 @@ retint_restore_args:        /* return to kernel space */
 restore_args:
        RESTORE_ARGS 0,8,0
 
-ENTRY(irq_return)
+irq_return:
        INTERRUPT_RETURN
 
        .section __ex_table, "a"
index 74ef4a41f22404a1ff86eb6a7865c83e0ab7d555..25eb98540a41e067f7593753a51b8430fd8930df 100644 (file)
@@ -612,7 +612,7 @@ ENTRY(swapper_pg_pmd)
 ENTRY(swapper_pg_dir)
        .fill 1024,4,0
 #endif
-ENTRY(swapper_pg_fixmap)
+swapper_pg_fixmap:
        .fill 1024,4,0
 ENTRY(empty_zero_page)
        .fill 4096,1,0
index 53e5820d6054949967c26595a2457f97961c6e6e..eb415043a9297d742f3df5d9a1de10fa35d0b69b 100644 (file)
@@ -255,7 +255,7 @@ ENTRY(secondary_startup_64)
        lretq
 
        /* SMP bootup changes these two */
-       __CPUINITDATA
+       __REFDATA
        .align  8
        ENTRY(initial_code)
        .quad   x86_64_start_kernel
index 26719bd2c77ce01c8e087fca9c86ad5d3f067278..763dfc407232b0133750f3f61898a120f0685ebc 100644 (file)
@@ -39,7 +39,7 @@
 #define HAVE_HWFP 1
 #endif
 
-unsigned int mxcsr_feature_mask __read_mostly = 0xffffffffu;
+static unsigned int mxcsr_feature_mask __read_mostly = 0xffffffffu;
 
 void mxcsr_feature_mask_init(void)
 {
index 2d25b77102fe19e964291713c94e1dd62a0b1466..fe631967d6255e3f27a675346f23359153a95299 100644 (file)
@@ -26,8 +26,6 @@
  * present in the majority of PC/AT boxes.
  * plus some generic x86 specific things if generic specifics makes
  * any sense at all.
- * this file should become arch/i386/kernel/irq.c when the old irq.c
- * moves to arch independent land
  */
 
 static int i8259A_auto_eoi;
@@ -362,23 +360,12 @@ void __init init_ISA_irqs (void)
 #endif
        init_8259A(0);
 
-       for (i = 0; i < NR_IRQS; i++) {
-               irq_desc[i].status = IRQ_DISABLED;
-               irq_desc[i].action = NULL;
-               irq_desc[i].depth = 1;
-
-               if (i < 16) {
-                       /*
-                        * 16 old-style INTA-cycle interrupts:
-                        */
-                       set_irq_chip_and_handler_name(i, &i8259A_chip,
-                                                     handle_level_irq, "XT");
-               } else {
-                       /*
-                        * 'high' PCI IRQs filled in on demand
-                        */
-                       irq_desc[i].chip = &no_irq_chip;
-               }
+       /*
+        * 16 old-style INTA-cycle interrupts:
+        */
+       for (i = 0; i < 16; i++) {
+               set_irq_chip_and_handler_name(i, &i8259A_chip,
+                                             handle_level_irq, "XT");
        }
 }
 
index bd49321034db775a486279fbdf8948a1b9392401..c706a3061553d31f69e8904ae23b7b2b335ccfd8 100644 (file)
@@ -13,7 +13,6 @@
 #include <asm/io.h>
 
 int io_delay_type __read_mostly = CONFIG_DEFAULT_IO_DELAY_TYPE;
-EXPORT_SYMBOL_GPL(io_delay_type);
 
 static int __initdata io_delay_override;
 
index a99e764fd66a8a1875dad2e70893f0e7128f987e..34a591283f5d9e5fb602e8e5f93e3dd5a1a1615e 100644 (file)
@@ -581,7 +581,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
  * When a retprobed function returns, this code saves registers and
  * calls trampoline_handler() runs, which calls the kretprobe's handler.
  */
-void __kprobes kretprobe_trampoline_holder(void)
+static void __used __kprobes kretprobe_trampoline_holder(void)
 {
        asm volatile (
                        ".global kretprobe_trampoline\n"
@@ -673,7 +673,7 @@ void __kprobes kretprobe_trampoline_holder(void)
 /*
  * Called from kretprobe_trampoline
  */
-void * __kprobes trampoline_handler(struct pt_regs *regs)
+static __used __kprobes void *trampoline_handler(struct pt_regs *regs)
 {
        struct kretprobe_instance *ri = NULL;
        struct hlist_head *head, empty_rp;
index edd413650b3b06954b65ab05664ae0d6f8e3a3e5..6a0aa70386859ae9aa7235b1572505ffee21f055 100644 (file)
@@ -46,9 +46,6 @@ static unsigned int nmi_hz = HZ;
 
 static DEFINE_PER_CPU(short, wd_enabled);
 
-/* local prototypes */
-static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu);
-
 static int endflag __initdata = 0;
 
 #ifdef CONFIG_SMP
@@ -391,15 +388,6 @@ __kprobes int nmi_watchdog_tick(struct pt_regs * regs, unsigned reason)
        return rc;
 }
 
-int do_nmi_callback(struct pt_regs * regs, int cpu)
-{
-#ifdef CONFIG_SYSCTL
-       if (unknown_nmi_panic)
-               return unknown_nmi_panic_callback(regs, cpu);
-#endif
-       return 0;
-}
-
 #ifdef CONFIG_SYSCTL
 
 static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu)
@@ -453,6 +441,15 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
 
 #endif
 
+int do_nmi_callback(struct pt_regs *regs, int cpu)
+{
+#ifdef CONFIG_SYSCTL
+       if (unknown_nmi_panic)
+               return unknown_nmi_panic_callback(regs, cpu);
+#endif
+       return 0;
+}
+
 void __trigger_all_cpu_backtrace(void)
 {
        int i;
index fb99484d21cf6db94f7349d466a124515266b858..9a4fde74bee119f393a6d05c7207f9a23531a4d1 100644 (file)
@@ -46,9 +46,6 @@ static unsigned int nmi_hz = HZ;
 
 static DEFINE_PER_CPU(short, wd_enabled);
 
-/* local prototypes */
-static int unknown_nmi_panic_callback(struct pt_regs *regs, int cpu);
-
 /* Run after command line and cpu_init init, but before all other checks */
 void nmi_watchdog_default(void)
 {
@@ -394,15 +391,6 @@ asmlinkage __kprobes void do_nmi(struct pt_regs * regs, long error_code)
        nmi_exit();
 }
 
-int do_nmi_callback(struct pt_regs * regs, int cpu)
-{
-#ifdef CONFIG_SYSCTL
-       if (unknown_nmi_panic)
-               return unknown_nmi_panic_callback(regs, cpu);
-#endif
-       return 0;
-}
-
 void stop_nmi(void)
 {
        acpi_nmi_disable();
@@ -464,6 +452,15 @@ int proc_nmi_enabled(struct ctl_table *table, int write, struct file *file,
 
 #endif
 
+int do_nmi_callback(struct pt_regs *regs, int cpu)
+{
+#ifdef CONFIG_SYSCTL
+       if (unknown_nmi_panic)
+               return unknown_nmi_panic_callback(regs, cpu);
+#endif
+       return 0;
+}
+
 void __trigger_all_cpu_backtrace(void)
 {
        int i;
index 691ab4cb167be129fda7ac8bf1d5d14da92017d4..a1d7071a51c91c472d4c2926018906dd47e31344 100644 (file)
@@ -164,7 +164,6 @@ unsigned long mmu_cr4_features = X86_CR4_PAE;
 unsigned int machine_id;
 unsigned int machine_submodel_id;
 unsigned int BIOS_revision;
-unsigned int mca_pentium_flag;
 
 /* Boot loader ID as an integer, for the benefit of proc_dointvec */
 int bootloader_type;
index c0d8208af12a2d92e4e5bee3baf6b52dadb3efd6..6fd804f0782145be3b45c223590c5c287a9bdb57 100644 (file)
@@ -518,7 +518,7 @@ static void __cpuinit display_cacheinfo(struct cpuinfo_x86 *c)
 }
 
 #ifdef CONFIG_NUMA
-static int nearby_node(int apicid)
+static int __cpuinit nearby_node(int apicid)
 {
        int i, node;
 
@@ -791,7 +791,7 @@ static int __cpuinit intel_num_cpu_cores(struct cpuinfo_x86 *c)
                return 1;
 }
 
-static void srat_detect_node(void)
+static void __cpuinit srat_detect_node(void)
 {
 #ifdef CONFIG_NUMA
        unsigned node;
@@ -1046,7 +1046,7 @@ __setup("noclflush", setup_noclflush);
 void __cpuinit print_cpu_info(struct cpuinfo_x86 *c)
 {
        if (c->x86_model_id[0])
-               printk(KERN_INFO "%s", c->x86_model_id);
+               printk(KERN_CONT "%s", c->x86_model_id);
 
        if (c->x86_mask || c->cpuid_level >= 0)
                printk(KERN_CONT " stepping %02x\n", c->x86_mask);
index a40051b71d9b79cb2906b296aa5fc882dbe7dc53..0fcc95a354f7c28d980bf45fffd777c01a3ace25 100644 (file)
@@ -34,7 +34,7 @@
 static DEFINE_PER_CPU(struct x86_cpu, cpu_devices);
 
 #ifdef CONFIG_HOTPLUG_CPU
-int arch_register_cpu(int num)
+int __ref arch_register_cpu(int num)
 {
        /*
         * CPU0 cannot be offlined due to several
index f1148ac8abe307ae425127e5275f78dd31db5531..2ffa9656fe7ac5ea3fe5fc2b175e996d37972f7a 100644 (file)
@@ -38,7 +38,7 @@ SECTIONS
 
   /* read-only */
   .text : AT(ADDR(.text) - LOAD_OFFSET) {
-       . = ALIGN(4096); /* not really needed, already page aligned */
+       . = ALIGN(PAGE_SIZE); /* not really needed, already page aligned */
        *(.text.page_aligned)
        TEXT_TEXT
        SCHED_TEXT
@@ -70,21 +70,21 @@ SECTIONS
   RODATA
 
   /* writeable */
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .data : AT(ADDR(.data) - LOAD_OFFSET) {      /* Data */
        DATA_DATA
        CONSTRUCTORS
        } :data
 
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
        __nosave_begin = .;
        *(.data.nosave)
-       . = ALIGN(4096);
+       . = ALIGN(PAGE_SIZE);
        __nosave_end = .;
   }
 
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
        *(.data.page_aligned)
        *(.data.idt)
@@ -108,7 +108,7 @@ SECTIONS
   }
 
   /* might get freed after init */
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
        __smp_locks = .;
        *(.smp_locks)
@@ -120,10 +120,10 @@ SECTIONS
    * after boot. Always make sure that ALIGN() directive is present after
    * the section which contains __smp_alt_end.
    */
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
 
   /* will be freed after init */
-  . = ALIGN(4096);             /* Init code and data */
+  . = ALIGN(PAGE_SIZE);                /* Init code and data */
   .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
        __init_begin = .;
        _sinittext = .;
@@ -174,23 +174,23 @@ SECTIONS
        EXIT_DATA
   }
 #if defined(CONFIG_BLK_DEV_INITRD)
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
        __initramfs_start = .;
        *(.init.ramfs)
        __initramfs_end = .;
   }
 #endif
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
        __per_cpu_start = .;
        *(.data.percpu)
        *(.data.percpu.shared_aligned)
        __per_cpu_end = .;
   }
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   /* freed after init ends here */
-       
+
   .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
        __init_end = .;
        __bss_start = .;                /* BSS */
@@ -200,7 +200,7 @@ SECTIONS
        __bss_stop = .;
        _end = . ;
        /* This is where the kernel creates the early boot page tables */
-       . = ALIGN(4096);
+       . = ALIGN(PAGE_SIZE);
        pg0 = . ;
   }
 
index 0992b9946c6fd1b931ce19bbbb511465844ea3d1..fab1322997359f8a95d011c10a41b4acfa0bf60f 100644 (file)
@@ -37,7 +37,7 @@ SECTIONS
        KPROBES_TEXT
        *(.fixup)
        *(.gnu.warning)
-       _etext = .;                     /* End of text section */
+       _etext = .;             /* End of text section */
   } :text = 0x9090
 
   . = ALIGN(16);               /* Exception table */
@@ -60,7 +60,7 @@ SECTIONS
        __tracedata_end = .;
   }
 
-  . = ALIGN(PAGE_SIZE);        /* Align data segment to page size boundary */
+  . = ALIGN(PAGE_SIZE);                /* Align data segment to page size boundary */
                                /* Data */
   .data : AT(ADDR(.data) - LOAD_OFFSET) {
        DATA_DATA
@@ -119,7 +119,7 @@ SECTIONS
   .vsyscall_3 ADDR(.vsyscall_0) + 3072: AT(VLOAD(.vsyscall_3))
                { *(.vsyscall_3) }
 
-  . = VSYSCALL_VIRT_ADDR + 4096;
+  . = VSYSCALL_VIRT_ADDR + PAGE_SIZE;
 
 #undef VSYSCALL_ADDR
 #undef VSYSCALL_PHYS_ADDR
@@ -129,28 +129,28 @@ SECTIONS
 #undef VVIRT_OFFSET
 #undef VVIRT
 
-  . = ALIGN(8192);             /* init_task */
+  . = ALIGN(THREAD_SIZE);      /* init_task */
   .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
        *(.data.init_task)
   }:data.init
 
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
        *(.data.page_aligned)
   }
 
   /* might get freed after init */
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __smp_alt_begin = .;
   __smp_locks = .;
   .smp_locks : AT(ADDR(.smp_locks) - LOAD_OFFSET) {
        *(.smp_locks)
   }
   __smp_locks_end = .;
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __smp_alt_end = .;
 
-  . = ALIGN(4096);             /* Init code and data */
+  . = ALIGN(PAGE_SIZE);                /* Init code and data */
   __init_begin = .;
   .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
        _sinittext = .;
@@ -191,7 +191,7 @@ SECTIONS
   .altinstructions : AT(ADDR(.altinstructions) - LOAD_OFFSET) {
        *(.altinstructions)
   }
-  __alt_instructions_end = .; 
+  __alt_instructions_end = .;
   .altinstr_replacement : AT(ADDR(.altinstr_replacement) - LOAD_OFFSET) {
        *(.altinstr_replacement)
   }
@@ -207,25 +207,25 @@ SECTIONS
 /* vdso blob that is mapped into user space */
   vdso_start = . ;
   .vdso  : AT(ADDR(.vdso) - LOAD_OFFSET) { *(.vdso) }
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   vdso_end = .;
 
 #ifdef CONFIG_BLK_DEV_INITRD
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __initramfs_start = .;
   .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { *(.init.ramfs) }
   __initramfs_end = .;
 #endif
 
-  PERCPU(4096)
+  PERCPU(PAGE_SIZE)
 
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __init_end = .;
 
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __nosave_begin = .;
   .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) { *(.data.nosave) }
-  . = ALIGN(4096);
+  . = ALIGN(PAGE_SIZE);
   __nosave_end = .;
 
   __bss_start = .;             /* BSS */
index fd42a4a095fc1bb822f1dc033df8a35fa58070b5..459b58a8a15cecd12c52ca0b48d19c0b57e4a4f0 100644 (file)
-/* Copyright 2002,2003 Andi Kleen, SuSE Labs.
+/*
+ * Copyright 2002, 2003 Andi Kleen, SuSE Labs.
  * Subject to the GNU Public License v.2
- * 
+ *
  * Wrappers of assembly checksum functions for x86-64.
  */
-
 #include <asm/checksum.h>
 #include <linux/module.h>
 
-/** 
- * csum_partial_copy_from_user - Copy and checksum from user space. 
- * @src: source address (user space) 
+/**
+ * csum_partial_copy_from_user - Copy and checksum from user space.
+ * @src: source address (user space)
  * @dst: destination address
  * @len: number of bytes to be copied.
  * @isum: initial sum that is added into the result (32bit unfolded)
  * @errp: set to -EFAULT for an bad source address.
- * 
+ *
  * Returns an 32bit unfolded checksum of the buffer.
- * src and dst are best aligned to 64bits. 
- */ 
+ * src and dst are best aligned to 64bits.
+ */
 __wsum
 csum_partial_copy_from_user(const void __user *src, void *dst,
                            int len, __wsum isum, int *errp)
-{ 
+{
        might_sleep();
        *errp = 0;
-       if (likely(access_ok(VERIFY_READ,src, len))) { 
-               /* Why 6, not 7? To handle odd addresses aligned we
-                  would need to do considerable complications to fix the
-                  checksum which is defined as an 16bit accumulator. The
-                  fix alignment code is primarily for performance
-                  compatibility with 32bit and that will handle odd
-                  addresses slowly too. */
-               if (unlikely((unsigned long)src & 6)) {                 
-                       while (((unsigned long)src & 6) && len >= 2) { 
-                               __u16 val16;                    
-                               *errp = __get_user(val16, (const __u16 __user *)src);
-                               if (*errp)
-                                       return isum;
-                               *(__u16 *)dst = val16;
-                               isum = (__force __wsum)add32_with_carry(
-                                               (__force unsigned)isum, val16);
-                               src += 2; 
-                               dst += 2; 
-                               len -= 2;
-                       }
+
+       if (!likely(access_ok(VERIFY_READ, src, len)))
+               goto out_err;
+
+       /*
+        * Why 6, not 7? To handle odd addresses aligned we
+        * would need to do considerable complications to fix the
+        * checksum which is defined as an 16bit accumulator. The
+        * fix alignment code is primarily for performance
+        * compatibility with 32bit and that will handle odd
+        * addresses slowly too.
+        */
+       if (unlikely((unsigned long)src & 6)) {
+               while (((unsigned long)src & 6) && len >= 2) {
+                       __u16 val16;
+
+                       *errp = __get_user(val16, (const __u16 __user *)src);
+                       if (*errp)
+                               return isum;
+
+                       *(__u16 *)dst = val16;
+                       isum = (__force __wsum)add32_with_carry(
+                                       (__force unsigned)isum, val16);
+                       src += 2;
+                       dst += 2;
+                       len -= 2;
                }
-               isum = csum_partial_copy_generic((__force const void *)src,
-                                       dst, len, isum, errp, NULL);
-               if (likely(*errp == 0)) 
-                       return isum;
-       } 
+       }
+       isum = csum_partial_copy_generic((__force const void *)src,
+                               dst, len, isum, errp, NULL);
+       if (unlikely(*errp))
+               goto out_err;
+
+       return isum;
+
+out_err:
        *errp = -EFAULT;
-       memset(dst,0,len); 
-       return isum;            
-} 
+       memset(dst, 0, len);
 
+       return isum;
+}
 EXPORT_SYMBOL(csum_partial_copy_from_user);
 
-/** 
- * csum_partial_copy_to_user - Copy and checksum to user space. 
+/**
+ * csum_partial_copy_to_user - Copy and checksum to user space.
  * @src: source address
  * @dst: destination address (user space)
  * @len: number of bytes to be copied.
  * @isum: initial sum that is added into the result (32bit unfolded)
  * @errp: set to -EFAULT for an bad destination address.
- * 
+ *
  * Returns an 32bit unfolded checksum of the buffer.
  * src and dst are best aligned to 64bits.
- */ 
+ */
 __wsum
 csum_partial_copy_to_user(const void *src, void __user *dst,
                          int len, __wsum isum, int *errp)
-{ 
+{
        might_sleep();
+
        if (unlikely(!access_ok(VERIFY_WRITE, dst, len))) {
                *errp = -EFAULT;
-               return 0; 
+               return 0;
        }
 
        if (unlikely((unsigned long)dst & 6)) {
-               while (((unsigned long)dst & 6) && len >= 2) { 
+               while (((unsigned long)dst & 6) && len >= 2) {
                        __u16 val16 = *(__u16 *)src;
+
                        isum = (__force __wsum)add32_with_carry(
                                        (__force unsigned)isum, val16);
                        *errp = __put_user(val16, (__u16 __user *)dst);
                        if (*errp)
                                return isum;
-                       src += 2; 
-                       dst += 2; 
+                       src += 2;
+                       dst += 2;
                        len -= 2;
                }
        }
 
        *errp = 0;
-       return csum_partial_copy_generic(src, (void __force *)dst,len,isum,NULL,errp); 
-} 
-
+       return csum_partial_copy_generic(src, (void __force *)dst,
+                                        len, isum, NULL, errp);
+}
 EXPORT_SYMBOL(csum_partial_copy_to_user);
 
-/** 
+/**
  * csum_partial_copy_nocheck - Copy and checksum.
  * @src: source address
  * @dst: destination address
  * @len: number of bytes to be copied.
  * @isum: initial sum that is added into the result (32bit unfolded)
- * 
+ *
  * Returns an 32bit unfolded checksum of the buffer.
- */ 
+ */
 __wsum
 csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
-{ 
-       return csum_partial_copy_generic(src,dst,len,sum,NULL,NULL);
-} 
+{
+       return csum_partial_copy_generic(src, dst, len, sum, NULL, NULL);
+}
 EXPORT_SYMBOL(csum_partial_copy_nocheck);
 
 __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
@@ -119,17 +131,20 @@ __sum16 csum_ipv6_magic(const struct in6_addr *saddr,
                        __u32 len, unsigned short proto, __wsum sum)
 {
        __u64 rest, sum64;
-     
+
        rest = (__force __u64)htonl(len) + (__force __u64)htons(proto) +
                (__force __u64)sum;
-       asm("  addq (%[saddr]),%[sum]\n"
-           "  adcq 8(%[saddr]),%[sum]\n"
-           "  adcq (%[daddr]),%[sum]\n" 
-           "  adcq 8(%[daddr]),%[sum]\n"
-           "  adcq $0,%[sum]\n"
-           : [sum] "=r" (sum64) 
-           : "[sum]" (rest),[saddr] "r" (saddr), [daddr] "r" (daddr));
-       return csum_fold((__force __wsum)add32_with_carry(sum64 & 0xffffffff, sum64>>32));
-}
 
+       asm("   addq (%[saddr]),%[sum]\n"
+           "   adcq 8(%[saddr]),%[sum]\n"
+           "   adcq (%[daddr]),%[sum]\n"
+           "   adcq 8(%[daddr]),%[sum]\n"
+           "   adcq $0,%[sum]\n"
+
+           : [sum] "=r" (sum64)
+           : "[sum]" (rest), [saddr] "r" (saddr), [daddr] "r" (daddr));
+
+       return csum_fold(
+              (__force __wsum)add32_with_carry(sum64 & 0xffffffff, sum64>>32));
+}
 EXPORT_SYMBOL(csum_ipv6_magic);
index 87b4a4e180391230156d0d4bd84cbda325d57810..3f1eb59b5f08bda91acc5ae33c94e73b350c6524 100644 (file)
@@ -1,23 +1,25 @@
 #include <linux/string.h>
-#include <asm/io.h>
 #include <linux/module.h>
+#include <asm/io.h>
 
-void __memcpy_toio(unsigned long dst,const void*src,unsigned len)
+void __memcpy_toio(unsigned long dst, const void *src, unsigned len)
 {
-       __inline_memcpy((void *) dst,src,len);
+       __inline_memcpy((void *)dst, src, len);
 }
 EXPORT_SYMBOL(__memcpy_toio);
 
-void __memcpy_fromio(void *dst,unsigned long src,unsigned len)
+void __memcpy_fromio(void *dst, unsigned long src, unsigned len)
 {
-       __inline_memcpy(dst,(const void *) src,len);
+       __inline_memcpy(dst, (const void *)src, len);
 }
 EXPORT_SYMBOL(__memcpy_fromio);
 
 void memset_io(volatile void __iomem *a, int b, size_t c)
 {
-       /* XXX: memset can mangle the IO patterns quite a bit.
-          perhaps it would be better to use a dumb one */
-       memset((void *)a,b,c);
+       /*
+        * TODO: memset can mangle the IO patterns quite a bit.
+        * perhaps it would be better to use a dumb one:
+        */
+       memset((void *)a, b, c);
 }
 EXPORT_SYMBOL(memset_io);
index 9f42d7e9c15829431ed31c90fd993750adf9791f..882328efc3dbab30920cfa041892f1e877be9a50 100644 (file)
@@ -42,6 +42,22 @@ int page_is_ram(unsigned long pagenr)
        unsigned long addr, end;
        int i;
 
+       /*
+        * A special case is the first 4Kb of memory;
+        * This is a BIOS owned area, not kernel ram, but generally
+        * not listed as such in the E820 table.
+        */
+       if (pagenr == 0)
+               return 0;
+
+       /*
+        * Second special case: Some BIOSen report the PC BIOS
+        * area (640->1Mb) as ram even though it is not.
+        */
+       if (pagenr >= (BIOS_BEGIN >> PAGE_SHIFT) &&
+                   pagenr < (BIOS_END >> PAGE_SHIFT))
+               return 0;
+
        for (i = 0; i < e820.nr_map; i++) {
                /*
                 * Not usable memory:
@@ -51,14 +67,6 @@ int page_is_ram(unsigned long pagenr)
                addr = (e820.map[i].addr + PAGE_SIZE-1) >> PAGE_SHIFT;
                end = (e820.map[i].addr + e820.map[i].size) >> PAGE_SHIFT;
 
-               /*
-                * Sanity check: Some BIOSen report areas as RAM that
-                * are not. Notably the 640->1Mb area, which is the
-                * PCI BIOS area.
-                */
-               if (addr >= (BIOS_BEGIN >> PAGE_SHIFT) &&
-                   end < (BIOS_END >> PAGE_SHIFT))
-                       continue;
 
                if ((pagenr >= addr) && (pagenr < end))
                        return 1;
@@ -126,6 +134,8 @@ static void __iomem *__ioremap(unsigned long phys_addr, unsigned long size,
                        return NULL;
        }
 
+       WARN_ON_ONCE(page_is_ram(pfn));
+
        switch (mode) {
        case IOR_MODE_UNCACHED:
        default:
index 3ee14996c829fd4da8571c3ce8149cd36b6017ae..464d8fc21ce69b67d8d8bf057f5a57ef6a84c677 100644 (file)
@@ -513,7 +513,6 @@ static int __change_page_attr(struct cpa_data *cpa, int primary)
        unsigned long address = cpa->vaddr;
        int do_split, err;
        unsigned int level;
-       struct page *kpte_page;
        pte_t *kpte, old_pte;
 
 repeat:
@@ -532,10 +531,6 @@ repeat:
                return -EINVAL;
        }
 
-       kpte_page = virt_to_page(kpte);
-       BUG_ON(PageLRU(kpte_page));
-       BUG_ON(PageCompound(kpte_page));
-
        if (level == PG_LEVEL_4K) {
                pte_t new_pte;
                pgprot_t new_prot = pte_pgprot(old_pte);
@@ -904,7 +899,24 @@ void kernel_map_pages(struct page *page, int numpages, int enable)
         */
        cpa_fill_pool();
 }
-#endif
+
+#ifdef CONFIG_HIBERNATION
+
+bool kernel_page_present(struct page *page)
+{
+       unsigned int level;
+       pte_t *pte;
+
+       if (PageHighMem(page))
+               return false;
+
+       pte = lookup_address((unsigned long)page_address(page), &level);
+       return (pte_val(*pte) & _PAGE_PRESENT);
+}
+
+#endif /* CONFIG_HIBERNATION */
+
+#endif /* CONFIG_DEBUG_PAGEALLOC */
 
 /*
  * The testcases use internal knowledge of the implementation that shouldn't
index ecd91ea8a8ae66d5f7ecd54de0b907fc65565bd4..845001c617cc7130697b5e659f3e5ce0e71eb936 100644 (file)
@@ -166,7 +166,8 @@ static inline int save_add_info(void) {return 0;}
  * Both SPARSE and RESERVE need nodes_add information.
  * This code supports one contiguous hot add area per node.
  */
-static int reserve_hotadd(int node, unsigned long start, unsigned long end)
+static int __init
+reserve_hotadd(int node, unsigned long start, unsigned long end)
 {
        unsigned long s_pfn = start >> PAGE_SHIFT;
        unsigned long e_pfn = end >> PAGE_SHIFT;
index b7c67a187b6bd3417c6bf7528e466e24660255a7..7b6e3bb9b28c4ca07b8a8ac21852e6f5f39e36cb 100644 (file)
@@ -541,7 +541,7 @@ void pcibios_disable_device (struct pci_dev *dev)
                pcibios_disable_irq(dev);
 }
 
-struct pci_bus *pci_scan_bus_with_sysdata(int busno)
+struct pci_bus *__devinit pci_scan_bus_with_sysdata(int busno)
 {
        struct pci_bus *bus = NULL;
        struct pci_sysdata *sd;
index 1deb3244b99b766977565019790516ea98c48211..000415947d93590e3f3230371c1d81fa35d2b600 100644 (file)
@@ -20,6 +20,7 @@
 #include <asm/segment.h>
 #include <asm/page.h>
 #include <asm/asm-offsets.h>
+#include <asm/processor-flags.h>
 
 ENTRY(swsusp_arch_suspend)
        movq    $saved_context, %rax
@@ -60,7 +61,7 @@ ENTRY(restore_image)
        /* Flush TLB */
        movq    mmu_cr4_features(%rip), %rax
        movq    %rax, %rdx
-       andq    $~(1<<7), %rdx  # PGE
+       andq    $~(X86_CR4_PGE), %rdx
        movq    %rdx, %cr4;  # turn off PGE
        movq    %cr3, %rcx;  # flush TLB
        movq    %rcx, %cr3;
@@ -112,7 +113,7 @@ ENTRY(restore_registers)
        /* Flush TLB, including "global" things (vmalloc) */
        movq    mmu_cr4_features(%rip), %rax
        movq    %rax, %rdx
-       andq    $~(1<<7), %rdx;  # PGE
+       andq    $~(X86_CR4_PGE), %rdx
        movq    %rdx, %cr4;  # turn off PGE
        movq    %cr3, %rcx;  # flush TLB
        movq    %rcx, %cr3
index 56685a88334747ef1467cac388345f5b9bf20339..4bd1e14c6b908cca0fcf04d96a766ab10f372387 100644 (file)
@@ -59,7 +59,7 @@ LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
 head-y         := arch/xtensa/kernel/head.o
 core-y         += arch/xtensa/kernel/ arch/xtensa/mm/
 ifneq ($(PLATFORM),)
-core-y         += arch/xtensa/platform-$(PLATFORM)/
+core-y         += arch/xtensa/platforms/$(PLATFORM)/
 endif
 libs-y         += arch/xtensa/lib/ $(LIBGCC)
 
index 734db7f76583ad3c24b38699bc39503df166ec8e..08e8814f8c713b720ce4a824263f3efcba07dcc9 100644 (file)
@@ -14,25 +14,26 @@ OBJCOPY_ARGS    := -O elf32-xtensa-le
 endif
 
 export OBJCOPY_ARGS
+export CPPFLAGS_boot.lds += -P -C
 
 boot-y         := bootstrap.o
 
 OBJS           := $(addprefix $(obj)/,$(boot-y))
 
-Image: vmlinux $(OBJS)
-       $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \
+Image: vmlinux $(OBJS) arch/$(ARCH)/boot/boot-elf/boot.lds
+       $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
                vmlinux vmlinux.tmp
        $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
                --add-section image=vmlinux.tmp \
                --set-section-flags image=contents,alloc,load,load,data \
                $(OBJS) $@.tmp
        $(LD) $(LDFLAGS) $(LDFLAGS_vmlinux) \
-               -T $(srctree)/arch/$(ARCH)/boot/boot-elf/boot.ld \
+               -T arch/$(ARCH)/boot/boot-elf/boot.lds \
                -o arch/$(ARCH)/boot/$@.elf $@.tmp
        rm -f $@.tmp vmlinux.tmp
 
 Image.initrd:  vmlinux $(OBJS)
-       $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \
+       $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
                --add-section .initrd=arch/$(ARCH)/boot/ramdisk \
                --set-section-flags .initrd=contents,alloc,load,load,data \
                vmlinux vmlinux.tmp
similarity index 89%
rename from arch/xtensa/boot/boot-elf/boot.ld
rename to arch/xtensa/boot/boot-elf/boot.lds.S
index 4ab06a0a7a6b4e0a61f3c845b6c8e9a14032fa3d..849dfcafd5184a2f1014d153a044c052ff0bc5cc 100644 (file)
@@ -1,4 +1,6 @@
+#include <asm/variant/core.h>
 OUTPUT_ARCH(xtensa)
+ENTRY(_ResetVector)
 
 SECTIONS
 {
@@ -61,7 +63,7 @@ SECTIONS
        _end = .;
        _param_start = .;
 
-       .ResetVector.text 0xfe000020 :
+       .ResetVector.text XCHAL_RESET_VECTOR_VADDR :
        {
                *(.ResetVector.text)
        }
index 74d15d08077b5556c5dce5e26f2b1509fd9dc2fb..872029b84435eb561ec97fd125ddb8ad51fbab07 100644 (file)
@@ -22,7 +22,7 @@ LIBS  := arch/xtensa/boot/lib/lib.a arch/xtensa/lib/lib.a
 LIBGCC := $(shell $(CC) $(KBUILD_CFLAGS) -print-libgcc-file-name)
 
 zImage: vmlinux $(OBJS) $(LIBS)
-       $(OBJCOPY) --strip-all -R .comment -R .xt.insn -O binary \
+       $(OBJCOPY) --strip-all -R .comment -R .note.gnu.build-id -O binary \
                vmlinux vmlinux.tmp
        gzip -vf9 vmlinux.tmp
        $(OBJCOPY) $(OBJCOPY_ARGS) -R .comment \
index 65b726410e8ad057db035f3ea7d9aa137229b5cf..774db20d11f715cfd6aee5394c7960c8f9a9a064 100644 (file)
@@ -2,7 +2,7 @@ OUTPUT_ARCH(xtensa)
 
 SECTIONS
 {
-       .start 0xD0200000 : { *(.start) }
+       .start 0xD1000000 : { *(.start) }
 
        .text :
        {
index d5ffe7b6443ef170994f66b9e94f50f2bdcd0969..ef63adadf7f4106ccded17d9370fd619a6557fb4 100644 (file)
@@ -21,7 +21,6 @@
 #include <linux/mm.h>
 
 #include <asm/ptrace.h>
-#include <asm/processor.h>
 #include <asm/uaccess.h>
 
 #define DEFINE(sym, val) asm volatile("\n->" #sym " %0 " #val : : "i" (val))
@@ -64,6 +63,8 @@ int main(void)
        DEFINE(PT_SIZE, sizeof(struct pt_regs));
        DEFINE(PT_AREG_END, offsetof (struct pt_regs, areg[XCHAL_NUM_AREGS]));
        DEFINE(PT_USER_SIZE, offsetof(struct pt_regs, areg[XCHAL_NUM_AREGS]));
+       DEFINE(PT_XTREGS_OPT, offsetof(struct pt_regs, xtregs_opt));
+       DEFINE(XTREGS_OPT_SIZE, sizeof(xtregs_opt_t));
 
        /* struct task_struct */
        DEFINE(TASK_PTRACE, offsetof (struct task_struct, ptrace));
@@ -77,7 +78,19 @@ int main(void)
        /* struct thread_info (offset from start_struct) */
        DEFINE(THREAD_RA, offsetof (struct task_struct, thread.ra));
        DEFINE(THREAD_SP, offsetof (struct task_struct, thread.sp));
-       DEFINE(THREAD_CP_SAVE, offsetof (struct task_struct, thread.cp_save));
+       DEFINE(THREAD_CPENABLE, offsetof (struct thread_info, cpenable));
+#if XTENSA_HAVE_COPROCESSORS
+       DEFINE(THREAD_XTREGS_CP0, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP1, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP2, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP3, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP4, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP5, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP6, offsetof (struct thread_info, xtregs_cp));
+       DEFINE(THREAD_XTREGS_CP7, offsetof (struct thread_info, xtregs_cp));
+#endif
+       DEFINE(THREAD_XTREGS_USER, offsetof (struct thread_info, xtregs_user));
+       DEFINE(XTREGS_USER_SIZE, sizeof(xtregs_user_t));
        DEFINE(THREAD_CURRENT_DS, offsetof (struct task_struct, thread.current_ds));
 
        /* struct mm_struct */
index 01bcb9fcfcbdba96dc35f1e8c081455ac5539f5c..2bc1e145c0a46d66512826db3bcf41aa65d92491 100644 (file)
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2003 - 2005 Tensilica Inc.
- *
- * Marc Gauthier <marc@tensilica.com> <marc@alumni.uwaterloo.ca>
+ * Copyright (C) 2003 - 2007 Tensilica Inc.
  */
 
-/*
- * This module contains a table that describes the layout of the various
- * custom registers and states associated with each coprocessor, as well
- * as those not associated with any coprocessor ("extra state").
- * This table is included with core dumps and is available via the ptrace
- * interface, allowing the layout of such register/state information to
- * be modified in the kernel without affecting the debugger.  Each
- * register or state is identified using a 32-bit "libdb target number"
- * assigned when the Xtensa processor is generated.
- */
 
 #include <linux/linkage.h>
+#include <asm/asm-offsets.h>
 #include <asm/processor.h>
+#include <asm/coprocessor.h>
+#include <asm/thread_info.h>
+#include <asm/uaccess.h>
+#include <asm/unistd.h>
+#include <asm/ptrace.h>
+#include <asm/current.h>
+#include <asm/pgtable.h>
+#include <asm/page.h>
+#include <asm/signal.h>
+#include <asm/tlbflush.h>
 
-#if XCHAL_HAVE_CP
+/*
+ * Entry condition:
+ *
+ *   a0:       trashed, original value saved on stack (PT_AREG0)
+ *   a1:       a1
+ *   a2:       new stack pointer, original in DEPC
+ *   a3:       dispatch table
+ *   depc:     a2, original value saved on stack (PT_DEPC)
+ *   excsave_1:        a3
+ *
+ *   PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
+ *          <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
+ */
 
-#define CP_LAST ((XCHAL_CP_MAX - 1) * COPROCESSOR_INFO_SIZE)
+/* IO protection is currently unsupported. */
 
-ENTRY(release_coprocessors)
+ENTRY(fast_io_protect)
+       wsr     a0, EXCSAVE_1
+       movi    a0, unrecoverable_exception
+       callx0  a0
 
-       entry   a1, 16
-                                               # a2: task
-       movi    a3, 1 << XCHAL_CP_MAX           # a3: coprocessor-bit
-       movi    a4, coprocessor_info+CP_LAST    # a4: owner-table
-                                               # a5: tmp
-       movi    a6, 0                           # a6: 0
-       rsil    a7, LOCKLEVEL                   # a7: PS
+#if XTENSA_HAVE_COPROCESSORS
 
-1:     /* Check if task is coprocessor owner of coprocessor[i]. */
+/*
+ * Macros for lazy context switch. 
+ */
 
-       l32i    a5, a4, COPROCESSOR_INFO_OWNER
-       srli    a3, a3, 1
-       beqz    a3, 1f
-       addi    a4, a4, -8
-       beq     a2, a5, 1b
+#define SAVE_CP_REGS(x)                                                        \
+       .align 4;                                                       \
+       .Lsave_cp_regs_cp##x:                                           \
+       .if XTENSA_HAVE_COPROCESSOR(x);                                 \
+               xchal_cp##x##_store a2 a4 a5 a6 a7;                     \
+       .endif;                                                         \
+       jx      a0
 
-       /* Found an entry: Clear entry CPENABLE bit to disable CP. */
+#define SAVE_CP_REGS_TAB(x)                                            \
+       .if XTENSA_HAVE_COPROCESSOR(x);                                 \
+               .long .Lsave_cp_regs_cp##x - .Lsave_cp_regs_jump_table; \
+       .else;                                                          \
+               .long 0;                                                \
+       .endif;                                                         \
+       .long THREAD_XTREGS_CP##x
 
-       rsr     a5, CPENABLE
-       s32i    a6, a4, COPROCESSOR_INFO_OWNER
-       xor     a5, a3, a5
-       wsr     a5, CPENABLE
 
-       bnez    a3, 1b
+#define LOAD_CP_REGS(x)                                                        \
+       .align 4;                                                       \
+       .Lload_cp_regs_cp##x:                                           \
+       .if XTENSA_HAVE_COPROCESSOR(x);                                 \
+               xchal_cp##x##_load a2 a4 a5 a6 a7;                      \
+       .endif;                                                         \
+       jx      a0
 
-1:     wsr     a7, PS
-       rsync
-       retw
+#define LOAD_CP_REGS_TAB(x)                                            \
+       .if XTENSA_HAVE_COPROCESSOR(x);                                 \
+               .long .Lload_cp_regs_cp##x - .Lload_cp_regs_jump_table; \
+       .else;                                                          \
+               .long 0;                                                \
+       .endif;                                                         \
+       .long THREAD_XTREGS_CP##x
 
+       SAVE_CP_REGS(0)
+       SAVE_CP_REGS(1)
+       SAVE_CP_REGS(2)
+       SAVE_CP_REGS(3)
+       SAVE_CP_REGS(4)
+       SAVE_CP_REGS(5)
+       SAVE_CP_REGS(6)
+       SAVE_CP_REGS(7)
 
-ENTRY(disable_coprocessor)
-       entry   sp, 16
-       rsil    a7, LOCKLEVEL
-       rsr     a3, CPENABLE
-       movi    a4, 1
-       ssl     a2
-       sll     a4, a4
-       and     a4, a3, a4
-       xor     a3, a3, a4
-       wsr     a3, CPENABLE
-       wsr     a7, PS
-       rsync
-       retw
+       LOAD_CP_REGS(0)
+       LOAD_CP_REGS(1)
+       LOAD_CP_REGS(2)
+       LOAD_CP_REGS(3)
+       LOAD_CP_REGS(4)
+       LOAD_CP_REGS(5)
+       LOAD_CP_REGS(6)
+       LOAD_CP_REGS(7)
 
-ENTRY(enable_coprocessor)
-       entry   sp, 16
-       rsil    a7, LOCKLEVEL
-       rsr     a3, CPENABLE
-       movi    a4, 1
-       ssl     a2
-       sll     a4, a4
-       or      a3, a3, a4
-       wsr     a3, CPENABLE
-       wsr     a7, PS
-       rsync
-       retw
+       .align 4
+.Lsave_cp_regs_jump_table:
+       SAVE_CP_REGS_TAB(0)
+       SAVE_CP_REGS_TAB(1)
+       SAVE_CP_REGS_TAB(2)
+       SAVE_CP_REGS_TAB(3)
+       SAVE_CP_REGS_TAB(4)
+       SAVE_CP_REGS_TAB(5)
+       SAVE_CP_REGS_TAB(6)
+       SAVE_CP_REGS_TAB(7)
 
+.Lload_cp_regs_jump_table:
+       LOAD_CP_REGS_TAB(0)
+       LOAD_CP_REGS_TAB(1)
+       LOAD_CP_REGS_TAB(2)
+       LOAD_CP_REGS_TAB(3)
+       LOAD_CP_REGS_TAB(4)
+       LOAD_CP_REGS_TAB(5)
+       LOAD_CP_REGS_TAB(6)
+       LOAD_CP_REGS_TAB(7)
 
-ENTRY(save_coprocessor_extra)
-       entry   sp, 16
-       xchal_extra_store_funcbody
-       retw
+/*
+ * coprocessor_save(buffer, index) 
+ *                    a2      a3
+ * coprocessor_load(buffer, index)
+ *                    a2      a3
+ *
+ * Save or load coprocessor registers for coprocessor 'index'. 
+ * The register values are saved to or loaded from them 'buffer' address.
+ *
+ * Note that these functions don't update the coprocessor_owner information!
+ *
+ */
 
-ENTRY(restore_coprocessor_extra)
-       entry   sp, 16
-       xchal_extra_load_funcbody
+ENTRY(coprocessor_save)
+       entry   a1, 32
+       s32i    a0, a1, 0
+       movi    a0, .Lsave_cp_regs_jump_table
+       addx8   a3, a3, a0
+       l32i    a3, a3, 0
+       beqz    a3, 1f
+       add     a0, a0, a3
+       callx0  a0
+1:     l32i    a0, a1, 0
        retw
 
-ENTRY(save_coprocessor_registers)
-       entry   sp, 16
-       xchal_cpi_store_funcbody
+ENTRY(coprocessor_load)
+       entry   a1, 32
+       s32i    a0, a1, 0
+       movi    a0, .Lload_cp_regs_jump_table
+       addx4   a3, a3, a0
+       l32i    a3, a3, 0
+       beqz    a3, 1f
+       add     a0, a0, a3
+       callx0  a0
+1:     l32i    a0, a1, 0
        retw
 
-ENTRY(restore_coprocessor_registers)
-       entry   sp, 16
-       xchal_cpi_load_funcbody
+/*
+ * coprocessor_flush(struct task_info*, index) 
+ *                             a2        a3
+ * coprocessor_restore(struct task_info*, index)
+ *                              a2         a3
+ *
+ * Save or load coprocessor registers for coprocessor 'index'. 
+ * The register values are saved to or loaded from the coprocessor area 
+ * inside the task_info structure.
+ *
+ * Note that these functions don't update the coprocessor_owner information!
+ *
+ */
+
+
+ENTRY(coprocessor_flush)
+       entry   a1, 32
+       s32i    a0, a1, 0
+       movi    a0, .Lsave_cp_regs_jump_table
+       addx8   a3, a3, a0
+       l32i    a4, a3, 4
+       l32i    a3, a3, 0
+       add     a2, a2, a4
+       beqz    a3, 1f
+       add     a0, a0, a3
+       callx0  a0
+1:     l32i    a0, a1, 0
        retw
 
+ENTRY(coprocessor_restore)
+       entry   a1, 32
+       s32i    a0, a1, 0
+       movi    a0, .Lload_cp_regs_jump_table
+       addx4   a3, a3, a0
+       l32i    a4, a3, 4
+       l32i    a3, a3, 0
+       add     a2, a2, a4
+       beqz    a3, 1f
+       add     a0, a0, a3
+       callx0  a0
+1:     l32i    a0, a1, 0
+       retw
 
 /*
- *  The Xtensa compile-time HAL (core.h) XCHAL_*_SA_CONTENTS_LIBDB macros
- *  describe the contents of coprocessor & extra save areas in terms of
- *  undefined CONTENTS_LIBDB_{SREG,UREG,REGF} macros.  We define these
- *  latter macros here; they expand into a table of the format we want.
- *  The general format is:
+ * Entry condition:
  *
- *     CONTENTS_LIBDB_SREG(libdbnum, offset, size, align, rsv1, name, sregnum,
- *                         bitmask, rsv2, rsv3)
- *     CONTENTS_LIBDB_UREG(libdbnum, offset, size, align, rsv1, name, uregnum,
- *                         bitmask, rsv2, rsv3)
- *     CONTENTS_LIBDB_REGF(libdbnum, offset, size, align, rsv1, name, index,
- *                         numentries, contentsize, regname_base,
- *                         regfile_name, rsv2, rsv3)
+ *   a0:       trashed, original value saved on stack (PT_AREG0)
+ *   a1:       a1
+ *   a2:       new stack pointer, original in DEPC
+ *   a3:       dispatch table
+ *   depc:     a2, original value saved on stack (PT_DEPC)
+ *   excsave_1:        a3
  *
- *  For this table, we only care about the <libdbnum>, <offset> and <size>
- *  fields.
+ *   PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
+ *          <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
  */
 
-/*  Map all XCHAL CONTENTS macros to the reg_entry asm macro defined below:  */
-
-#define CONTENTS_LIBDB_SREG(libdbnum,offset,size,align,rsv1,name,sregnum,     \
-                           bitmask, rsv2, rsv3)                              \
-               reg_entry libdbnum, offset, size ;
-#define CONTENTS_LIBDB_UREG(libdbnum,offset,size,align,rsv1,name,uregnum,     \
-                           bitmask, rsv2, rsv3)                              \
-               reg_entry libdbnum, offset, size ;
-#define CONTENTS_LIBDB_REGF(libdbnum, offset, size, align, rsv1, name, index, \
-                           numentries, contentsize, regname_base,            \
-                           regfile_name, rsv2, rsv3)                         \
-               reg_entry libdbnum, offset, size ;
-
-/* A single table entry: */
-       .macro  reg_entry       libdbnum, offset, size
-        .ifne  (__last_offset-(__last_group_offset+\offset))
-         /* padding entry */
-         .word (0xFC000000+__last_offset-(__last_group_offset+\offset))
-        .endif
-        .word  \libdbnum                               /* actual entry */
-        .set   __last_offset, __last_group_offset+\offset+\size
-       .endm   /* reg_entry */
-
-
-/* Table entry that marks the beginning of a group (coprocessor or "extra"): */
-       .macro  reg_group       cpnum, num_entries, align
-        .set   __last_group_offset, (__last_offset + \align- 1) & -\align
-        .ifne  \num_entries
-         .word 0xFD000000+(\cpnum<<16)+\num_entries
-        .endif
-       .endm   /* reg_group */
+ENTRY(fast_coprocessor_double)
+       wsr     a0, EXCSAVE_1
+       movi    a0, unrecoverable_exception
+       callx0  a0
 
-/*
- * Register info tables.
- */
 
-       .section .rodata, "a"
-       .globl  _xtensa_reginfo_tables
-       .globl  _xtensa_reginfo_table_size
-       .align  4
-_xtensa_reginfo_table_size:
-       .word   _xtensa_reginfo_table_end - _xtensa_reginfo_tables
-
-_xtensa_reginfo_tables:
-       .set    __last_offset, 0
-       reg_group 0xFF, XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM, XCHAL_EXTRA_SA_ALIGN
-       XCHAL_EXTRA_SA_CONTENTS_LIBDB
-       reg_group 0, XCHAL_CP0_SA_CONTENTS_LIBDB_NUM, XCHAL_CP0_SA_ALIGN
-       XCHAL_CP0_SA_CONTENTS_LIBDB
-       reg_group 1, XCHAL_CP1_SA_CONTENTS_LIBDB_NUM, XCHAL_CP1_SA_ALIGN
-       XCHAL_CP1_SA_CONTENTS_LIBDB
-       reg_group 2, XCHAL_CP2_SA_CONTENTS_LIBDB_NUM, XCHAL_CP2_SA_ALIGN
-       XCHAL_CP2_SA_CONTENTS_LIBDB
-       reg_group 3, XCHAL_CP3_SA_CONTENTS_LIBDB_NUM, XCHAL_CP3_SA_ALIGN
-       XCHAL_CP3_SA_CONTENTS_LIBDB
-       reg_group 4, XCHAL_CP4_SA_CONTENTS_LIBDB_NUM, XCHAL_CP4_SA_ALIGN
-       XCHAL_CP4_SA_CONTENTS_LIBDB
-       reg_group 5, XCHAL_CP5_SA_CONTENTS_LIBDB_NUM, XCHAL_CP5_SA_ALIGN
-       XCHAL_CP5_SA_CONTENTS_LIBDB
-       reg_group 6, XCHAL_CP6_SA_CONTENTS_LIBDB_NUM, XCHAL_CP6_SA_ALIGN
-       XCHAL_CP6_SA_CONTENTS_LIBDB
-       reg_group 7, XCHAL_CP7_SA_CONTENTS_LIBDB_NUM, XCHAL_CP7_SA_ALIGN
-       XCHAL_CP7_SA_CONTENTS_LIBDB
-       .word   0xFC000000      /* invalid register number,marks end of table*/
-_xtensa_reginfo_table_end:
-#endif
+ENTRY(fast_coprocessor)
+
+       /* Save remaining registers a1-a3 and SAR */
+
+       xsr     a3, EXCSAVE_1
+       s32i    a3, a2, PT_AREG3
+       rsr     a3, SAR
+       s32i    a1, a2, PT_AREG1
+       s32i    a3, a2, PT_SAR
+       mov     a1, a2
+       rsr     a2, DEPC
+       s32i    a2, a1, PT_AREG2
+
+       /*
+        * The hal macros require up to 4 temporary registers. We use a3..a6.
+        */
+
+       s32i    a4, a1, PT_AREG4
+       s32i    a5, a1, PT_AREG5
+       s32i    a6, a1, PT_AREG6
+
+       /* Find coprocessor number. Subtract first CP EXCCAUSE from EXCCAUSE */
+
+       rsr     a3, EXCCAUSE
+       addi    a3, a3, -EXCCAUSE_COPROCESSOR0_DISABLED
+
+       /* Set corresponding CPENABLE bit -> (sar:cp-index, a3: 1<<cp-index)*/
+
+       ssl     a3                      # SAR: 32 - coprocessor_number
+       movi    a2, 1
+       rsr     a0, CPENABLE
+       sll     a2, a2
+       or      a0, a0, a2
+       wsr     a0, CPENABLE
+       rsync
+
+       /* Retrieve previous owner. (a3 still holds CP number) */
+
+       movi    a0, coprocessor_owner   # list of owners
+       addx4   a0, a3, a0              # entry for CP
+       l32i    a4, a0, 0
+
+       beqz    a4, 1f                  # skip 'save' if no previous owner
+
+       /* Disable coprocessor for previous owner. (a2 = 1 << CP number) */
+
+       l32i    a5, a4, THREAD_CPENABLE
+       xor     a5, a5, a2              # (1 << cp-id) still in a2
+       s32i    a5, a4, THREAD_CPENABLE
+
+       /*
+        * Get context save area and 'call' save routine. 
+        * (a4 still holds previous owner (thread_info), a3 CP number)
+        */
+
+       movi    a5, .Lsave_cp_regs_jump_table
+       movi    a0, 2f                  # a0: 'return' address
+       addx8   a3, a3, a5              # a3: coprocessor number
+       l32i    a2, a3, 4               # a2: xtregs offset
+       l32i    a3, a3, 0               # a3: jump offset
+       add     a2, a2, a4
+       add     a4, a3, a5              # a4: address of save routine
+       jx      a4
+
+       /* Note that only a0 and a1 were preserved. */
+
+2:     rsr     a3, EXCCAUSE
+       addi    a3, a3, -EXCCAUSE_COPROCESSOR0_DISABLED
+       movi    a0, coprocessor_owner
+       addx4   a0, a3, a0
+
+       /* Set new 'owner' (a0 points to the CP owner, a3 contains the CP nr) */
+
+1:     GET_THREAD_INFO (a4, a1)
+       s32i    a4, a0, 0
+
+       /* Get context save area and 'call' load routine. */
+
+       movi    a5, .Lload_cp_regs_jump_table
+       movi    a0, 1f
+       addx8   a3, a3, a5
+       l32i    a2, a3, 4               # a2: xtregs offset
+       l32i    a3, a3, 0               # a3: jump offset
+       add     a2, a2, a4
+       add     a4, a3, a5
+       jx      a4
+
+       /* Restore all registers and return from exception handler. */
+
+1:     l32i    a6, a1, PT_AREG6
+       l32i    a5, a1, PT_AREG5
+       l32i    a4, a1, PT_AREG4
+
+       l32i    a0, a1, PT_SAR
+       l32i    a3, a1, PT_AREG3
+       l32i    a2, a1, PT_AREG2
+       wsr     a0, SAR
+       l32i    a0, a1, PT_AREG0
+       l32i    a1, a1, PT_AREG1
+
+       rfe
+
+       .data
+ENTRY(coprocessor_owner)
+       .fill XCHAL_CP_MAX, 4, 0
+
+#endif /* XTENSA_HAVE_COPROCESSORS */
 
index 91a689eca43d98a055afb2d329910292305b0e02..dfd35dcc1cb553cb9105f5f824250a3b388e40fb 100644 (file)
 #include <asm/page.h>
 #include <asm/signal.h>
 #include <asm/tlbflush.h>
+#include <asm/variant/tie-asm.h>
 
 /* Unimplemented features. */
 
-#undef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
 #undef KERNEL_STACK_OVERFLOW_CHECK
 #undef PREEMPTIBLE_KERNEL
 #undef ALLOCA_EXCEPTION_IN_IRAM
@@ -214,19 +214,7 @@ _user_exception:
 
        /* We are back to the original stack pointer (a1) */
 
-2:
-#if XCHAL_EXTRA_SA_SIZE
-
-       /* For user exceptions, save the extra state into the user's TCB.
-        * Note: We must assume that xchal_extra_store_funcbody destroys a2..a15
-        */
-
-       GET_CURRENT(a2,a1)
-       addi    a2, a2, THREAD_CP_SAVE
-       xchal_extra_store_funcbody
-#endif
-
-       /* Now, jump to the common exception handler. */
+2:     /* Now, jump to the common exception handler. */
 
        j       common_exception
 
@@ -382,6 +370,10 @@ common_exception:
        s32i    a2, a1, PT_LBEG
        s32i    a3, a1, PT_LEND
 
+       /* Save optional registers. */
+
+       save_xtregs_opt a1 a2 a4 a5 a6 a7 PT_XTREGS_OPT
+       
        /* Go to second-level dispatcher. Set up parameters to pass to the
         * exception handler and call the exception handler.
         */
@@ -403,74 +395,49 @@ common_exception_return:
        /* Jump if we are returning from kernel exceptions. */
 
 1:     l32i    a3, a1, PT_PS
-       _bbsi.l a3, PS_UM_BIT, 2f
-       j       kernel_exception_exit
+       _bbci.l a3, PS_UM_BIT, 4f
 
        /* Specific to a user exception exit:
         * We need to check some flags for signal handling and rescheduling,
         * and have to restore WB and WS, extra states, and all registers
         * in the register file that were in use in the user task.
-        */
-
-2:     wsr     a3, PS          /* disable interrupts */
-
-       /* Check for signals (keep interrupts disabled while we read TI_FLAGS)
-        * Note: PS.INTLEVEL = 0, PS.EXCM = 1
+        * Note that we don't disable interrupts here. 
         */
 
        GET_THREAD_INFO(a2,a1)
        l32i    a4, a2, TI_FLAGS
 
-       /* Enable interrupts again.
-        * Note: When we get here, we certainly have handled any interrupts.
-        *       (Hint: There is only one user exception frame on stack)
-        */
-
-       movi    a3, 1 << PS_WOE_BIT
-
        _bbsi.l a4, TIF_NEED_RESCHED, 3f
        _bbci.l a4, TIF_SIGPENDING, 4f
 
-#ifndef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
        l32i    a4, a1, PT_DEPC
        bgeui   a4, VALID_DOUBLE_EXCEPTION_ADDRESS, 4f
-#endif
 
-       /* Reenable interrupts and call do_signal() */
+       /* Call do_signal() */
 
-       wsr     a3, PS
        movi    a4, do_signal   # int do_signal(struct pt_regs*, sigset_t*)
        mov     a6, a1
        movi    a7, 0
        callx4  a4
        j       1b
 
-3:     /* Reenable interrupts and reschedule */
+3:     /* Reschedule */
 
-       wsr     a3, PS
        movi    a4, schedule    # void schedule (void)
        callx4  a4
        j       1b
 
-       /* Restore the state of the task and return from the exception. */
-
-4:     /* a2 holds GET_CURRENT(a2,a1)  */
-
-#if XCHAL_EXTRA_SA_SIZE
+4:     /* Restore optional registers. */
 
-       /* For user exceptions, restore the extra state from the user's TCB. */
+       load_xtregs_opt a1 a2 a4 a5 a6 a7 PT_XTREGS_OPT
 
-       /* Note: a2 still contains GET_CURRENT(a2,a1) */
-       addi    a2, a2, THREAD_CP_SAVE
-       xchal_extra_load_funcbody
+       wsr     a3, PS          /* disable interrupts */
 
-       /* We must assume that xchal_extra_store_funcbody destroys
-        * registers a2..a15.  FIXME, this list can eventually be
-        * reduced once real register requirements of the macro are
-        * finalized. */
+       _bbci.l a3, PS_UM_BIT, kernel_exception_exit
 
-#endif /* XCHAL_EXTRA_SA_SIZE */
+user_exception_exit:
 
+       /* Restore the state of the task and return from the exception. */
 
        /* Switch to the user thread WINDOWBASE. Save SP temporarily in DEPC */
 
@@ -536,10 +503,6 @@ common_exception_return:
 
 kernel_exception_exit:
 
-       /* Disable interrupts (a3 holds PT_PS) */
-
-       wsr     a3, PS
-
 #ifdef PREEMPTIBLE_KERNEL
 
 #ifdef CONFIG_PREEMPT
@@ -618,6 +581,8 @@ kernel_exception_exit:
 
 common_exception_exit:
 
+       /* Restore address registers. */
+
        _bbsi.l a2, 1, 1f
        l32i    a4,  a1, PT_AREG4
        l32i    a5,  a1, PT_AREG5
@@ -1150,7 +1115,6 @@ CATCH
  *   excsave_1:        a3
  *
  * Note: We assume the stack pointer is EXC_TABLE_KSTK in the fixup handler.
- * Note: We don't need to save a2 in depc (return value)
  */
 
 ENTRY(fast_syscall_spill_registers)
@@ -1166,29 +1130,31 @@ ENTRY(fast_syscall_spill_registers)
 
        rsr     a0, SAR
        xsr     a3, EXCSAVE_1           # restore a3 and excsave_1
-       s32i    a0, a2, PT_AREG4        # store SAR to PT_AREG4
        s32i    a3, a2, PT_AREG3
+       s32i    a4, a2, PT_AREG4
+       s32i    a0, a2, PT_AREG5        # store SAR to PT_AREG5
 
        /* The spill routine might clobber a7, a11, and a15. */
 
-       s32i    a7, a2, PT_AREG5
-       s32i    a11, a2, PT_AREG6
-       s32i    a15, a2, PT_AREG7
+       s32i    a7, a2, PT_AREG7
+       s32i    a11, a2, PT_AREG11
+       s32i    a15, a2, PT_AREG15
 
-       call0   _spill_registers        # destroys a3, DEPC, and SAR
+       call0   _spill_registers        # destroys a3, a4, and SAR
 
        /* Advance PC, restore registers and SAR, and return from exception. */
 
-       l32i    a3, a2, PT_AREG4
+       l32i    a3, a2, PT_AREG5
+       l32i    a4, a2, PT_AREG4
        l32i    a0, a2, PT_AREG0
        wsr     a3, SAR
        l32i    a3, a2, PT_AREG3
 
        /* Restore clobbered registers. */
 
-       l32i    a7, a2, PT_AREG5
-       l32i    a11, a2, PT_AREG6
-       l32i    a15, a2, PT_AREG7
+       l32i    a7, a2, PT_AREG7
+       l32i    a11, a2, PT_AREG11
+       l32i    a15, a2, PT_AREG15
 
        movi    a2, 0
        rfe
@@ -1247,16 +1213,6 @@ fast_syscall_spill_registers_fixup:
         * Note: This frame might be the same as above.
         */
 
-#ifdef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
-       /* Restore registers we precautiously saved.
-        * We have the value of the 'right' a3
-        */
-
-       l32i    a7, a2, PT_AREG5
-       l32i    a11, a2, PT_AREG6
-       l32i    a15, a2, PT_AREG7
-#endif
-
        /* Setup stack pointer. */
 
        addi    a2, a2, -PT_USER_SIZE
@@ -1271,9 +1227,9 @@ fast_syscall_spill_registers_fixup:
 
        movi    a3, exc_table
        rsr     a0, EXCCAUSE
-        addx4   a0, a0, a3                     # find entry in table
-        l32i    a0, a0, EXC_TABLE_FAST_USER     # load handler
-        jx      a0
+        addx4  a0, a0, a3                      # find entry in table
+        l32i   a0, a0, EXC_TABLE_FAST_USER     # load handler
+        jx     a0
 
 fast_syscall_spill_registers_fixup_return:
 
@@ -1290,14 +1246,6 @@ fast_syscall_spill_registers_fixup_return:
        s32i    a2, a3, EXC_TABLE_PARAM
        l32i    a2, a3, EXC_TABLE_KSTK
 
-#ifdef SIGNAL_HANDLING_IN_DOUBLE_EXCEPTION
-       /* Save registers again that might be clobbered. */
-
-       s32i    a7, a2, PT_AREG5
-       s32i    a11, a2, PT_AREG6
-       s32i    a15, a2, PT_AREG7
-#endif
-
        /* Load WB at the time the exception occurred. */
 
        rsr     a3, SAR                 # WB is still in SAR
@@ -1319,7 +1267,7 @@ fast_syscall_spill_registers_fixup_return:
  * This is not a real function. The following conditions must be met:
  *
  *  - must be called with call0.
- *  - uses DEPC, a3 and SAR.
+ *  - uses a3, a4 and SAR.
  *  - the last 'valid' register of each frame are clobbered.
  *  - the caller must have registered a fixup handler
  *    (or be inside a critical section)
@@ -1331,41 +1279,39 @@ ENTRY(_spill_registers)
        /*
         * Rotate ws so that the current windowbase is at bit 0.
         * Assume ws = xxxwww1yy (www1 current window frame).
-        * Rotate ws right so that a2 = yyxxxwww1.
+        * Rotate ws right so that a4 = yyxxxwww1.
         */
 
-       wsr     a2, DEPC                # preserve a2
-       rsr     a2, WINDOWBASE
-       rsr     a3, WINDOWSTART
-       ssr     a2                      # holds WB
-       slli    a2, a3, WSBITS
-       or      a3, a3, a2              # a2 = xxxwww1yyxxxwww1yy
-       srl     a3, a3
+       rsr     a4, WINDOWBASE
+       rsr     a3, WINDOWSTART         # a3 = xxxwww1yy
+       ssr     a4                      # holds WB
+       slli    a4, a3, WSBITS
+       or      a3, a3, a4              # a3 = xxxwww1yyxxxwww1yy
+       srl     a3, a3                  # a3 = 00xxxwww1yyxxxwww1
 
        /* We are done if there are no more than the current register frame. */
 
-       extui   a3, a3, 1, WSBITS-2     # a3 = 0yyxxxwww
-       movi    a2, (1 << (WSBITS-1))
+       extui   a3, a3, 1, WSBITS-1     # a3 = 0yyxxxwww
+       movi    a4, (1 << (WSBITS-1))
        _beqz   a3, .Lnospill           # only one active frame? jump
 
        /* We want 1 at the top, so that we return to the current windowbase */
 
-       or      a3, a3, a2              # 1yyxxxwww
+       or      a3, a3, a4              # 1yyxxxwww
 
        /* Skip empty frames - get 'oldest' WINDOWSTART-bit. */
 
        wsr     a3, WINDOWSTART         # save shifted windowstart
-       neg     a2, a3
-       and     a3, a2, a3              # first bit set from right: 000010000
+       neg     a4, a3
+       and     a3, a4, a3              # first bit set from right: 000010000
 
-       ffs_ws  a2, a3                  # a2: shifts to skip empty frames
+       ffs_ws  a4, a3                  # a4: shifts to skip empty frames
        movi    a3, WSBITS
-       sub     a2, a3, a2              # WSBITS-a2:number of 0-bits from right
-       ssr     a2                      # save in SAR for later.
+       sub     a4, a3, a4              # WSBITS-a4:number of 0-bits from right
+       ssr     a4                      # save in SAR for later.
 
        rsr     a3, WINDOWBASE
-       add     a3, a3, a2
-       rsr     a2, DEPC                # restore a2
+       add     a3, a3, a4
        wsr     a3, WINDOWBASE
        rsync
 
@@ -1394,6 +1340,9 @@ ENTRY(_spill_registers)
        l32e    a4, a1, -16
        j       .Lc12c
 
+.Lnospill:
+       ret
+
 .Lloop: _bbsi.l        a3, 1, .Lc4
        _bbci.l a3, 2, .Lc12
 
@@ -1419,9 +1368,7 @@ ENTRY(_spill_registers)
        movi    a3, 1
        sll     a3, a3
        wsr     a3, WINDOWSTART
-
-.Lnospill:
-       jx      a0
+       ret
 
 .Lc4:  s32e    a4, a9, -16
        s32e    a5, a9, -12
@@ -1830,154 +1777,6 @@ ENTRY(fast_store_prohibited)
 1:     j       _user_exception
 
 
-#if XCHAL_EXTRA_SA_SIZE
-
-#warning fast_coprocessor untested
-
-/*
- * Entry condition:
- *
- *   a0:       trashed, original value saved on stack (PT_AREG0)
- *   a1:       a1
- *   a2:       new stack pointer, original in DEPC
- *   a3:       dispatch table
- *   depc:     a2, original value saved on stack (PT_DEPC)
- *   excsave_1:        a3
- *
- *   PT_DEPC >= VALID_DOUBLE_EXCEPTION_ADDRESS: double exception, DEPC
- *          <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
- */
-
-ENTRY(fast_coprocessor_double)
-       wsr     a0, EXCSAVE_1
-       movi    a0, unrecoverable_exception
-       callx0  a0
-
-ENTRY(fast_coprocessor)
-
-       /* Fatal if we are in a double exception. */
-
-       l32i    a0, a2, PT_DEPC
-       _bgeui  a0, VALID_DOUBLE_EXCEPTION_ADDRESS, fast_coprocessor_double
-
-       /* Save some registers a1, a3, a4, SAR */
-
-       xsr     a3, EXCSAVE_1
-       s32i    a3, a2, PT_AREG3
-       rsr     a3, SAR
-       s32i    a4, a2, PT_AREG4
-       s32i    a1, a2, PT_AREG1
-       s32i    a5, a1, PT_AREG5
-       s32i    a3, a2, PT_SAR
-       mov     a1, a2
-
-       /* Currently, the HAL macros only guarantee saving a0 and a1.
-        * These can and will be refined in the future, but for now,
-        * just save the remaining registers of a2...a15.
-        */
-       s32i    a6, a1, PT_AREG6
-       s32i    a7, a1, PT_AREG7
-       s32i    a8, a1, PT_AREG8
-       s32i    a9, a1, PT_AREG9
-       s32i    a10, a1, PT_AREG10
-       s32i    a11, a1, PT_AREG11
-       s32i    a12, a1, PT_AREG12
-       s32i    a13, a1, PT_AREG13
-       s32i    a14, a1, PT_AREG14
-       s32i    a15, a1, PT_AREG15
-
-       /* Find coprocessor number. Subtract first CP EXCCAUSE from EXCCAUSE */
-
-       rsr     a0, EXCCAUSE
-       addi    a3, a0, -XCHAL_EXCCAUSE_COPROCESSOR0_DISABLED
-
-       /* Set corresponding CPENABLE bit */
-
-       movi    a4, 1
-       ssl     a3                      # SAR: 32 - coprocessor_number
-       rsr     a5, CPENABLE
-       sll     a4, a4
-       or      a4, a5, a4
-       wsr     a4, CPENABLE
-       rsync
-       movi    a5, coprocessor_info    # list of owner and offset into cp_save
-       addx8   a0, a4, a5              # entry for CP
-
-       bne     a4, a5, .Lload          # bit wasn't set before, cp not in use
-
-       /* Now compare the current task with the owner of the coprocessor.
-        * If they are the same, there is no reason to save or restore any
-        * coprocessor state. Having already enabled the coprocessor,
-        * branch ahead to return.
-        */
-       GET_CURRENT(a5,a1)
-       l32i    a4, a0, COPROCESSOR_INFO_OWNER  # a4: current owner for this CP
-       beq     a4, a5, .Ldone
-
-       /* Find location to dump current coprocessor state:
-        *  task_struct->task_cp_save_offset + coprocessor_offset[coprocessor]
-        *
-        * Note: a0 pointer to the entry in the coprocessor owner table,
-        *       a3 coprocessor number,
-         *      a4 current owner of coprocessor.
-        */
-       l32i    a5, a0, COPROCESSOR_INFO_OFFSET
-       addi    a2, a4, THREAD_CP_SAVE
-       add     a2, a2, a5
-
-       /* Store current coprocessor states. (a5 still has CP number) */
-
-       xchal_cpi_store_funcbody
-
-       /* The macro might have destroyed a3 (coprocessor number), but
-        * SAR still has 32 - coprocessor_number!
-        */
-       movi    a3, 32
-       rsr     a4, SAR
-       sub     a3, a3, a4
-
-.Lload:        /* A new task now owns the corpocessors. Save its TCB pointer into
-        * the coprocessor owner table.
-        *
-        * Note: a0 pointer to the entry in the coprocessor owner table,
-        *       a3 coprocessor number.
-        */
-       GET_CURRENT(a4,a1)
-       s32i    a4, a0, 0
-
-       /* Find location from where to restore the current coprocessor state.*/
-
-       l32i    a5, a0, COPROCESSOR_INFO_OFFSET
-       addi    a2, a4, THREAD_CP_SAVE
-       add     a2, a2, a4
-
-       xchal_cpi_load_funcbody
-
-       /* We must assume that the xchal_cpi_store_funcbody macro destroyed
-        * registers a2..a15.
-        */
-
-.Ldone:        l32i    a15, a1, PT_AREG15
-       l32i    a14, a1, PT_AREG14
-       l32i    a13, a1, PT_AREG13
-       l32i    a12, a1, PT_AREG12
-       l32i    a11, a1, PT_AREG11
-       l32i    a10, a1, PT_AREG10
-       l32i    a9, a1, PT_AREG9
-       l32i    a8, a1, PT_AREG8
-       l32i    a7, a1, PT_AREG7
-       l32i    a6, a1, PT_AREG6
-       l32i    a5, a1, PT_AREG5
-       l32i    a4, a1, PT_AREG4
-       l32i    a3, a1, PT_AREG3
-       l32i    a2, a1, PT_AREG2
-       l32i    a0, a1, PT_AREG0
-       l32i    a1, a1, PT_AREG1
-
-       rfe
-
-#endif /* XCHAL_EXTRA_SA_SIZE */
-
 /*
  * System Calls.
  *
@@ -2086,20 +1885,36 @@ ENTRY(_switch_to)
 
        entry   a1, 16
 
-       mov     a4, a3                  # preserve a3
+       mov     a12, a2                 # preserve 'prev' (a2)
+       mov     a13, a3                 # and 'next' (a3)
+
+       l32i    a4, a2, TASK_THREAD_INFO
+       l32i    a5, a3, TASK_THREAD_INFO
+
+       save_xtregs_user a4 a6 a8 a9 a10 a11 THREAD_XTREGS_USER
 
-       s32i    a0, a2, THREAD_RA       # save return address
-       s32i    a1, a2, THREAD_SP       # save stack pointer
+       s32i    a0, a12, THREAD_RA      # save return address
+       s32i    a1, a12, THREAD_SP      # save stack pointer
 
-       /* Disable ints while we manipulate the stack pointer; spill regs. */
+       /* Disable ints while we manipulate the stack pointer. */
 
-       movi    a5, (1 << PS_EXCM_BIT) | LOCKLEVEL
-       xsr     a5, PS
+       movi    a14, (1 << PS_EXCM_BIT) | LOCKLEVEL
+       xsr     a14, PS
        rsr     a3, EXCSAVE_1
        rsync
        s32i    a3, a3, EXC_TABLE_FIXUP /* enter critical section */
 
-       call0   _spill_registers
+       /* Switch CPENABLE */
+
+#if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS)
+       l32i    a3, a5, THREAD_CPENABLE
+       xsr     a3, CPENABLE
+       s32i    a3, a4, THREAD_CPENABLE
+#endif
+
+       /* Flush register file. */
+
+       call0   _spill_registers        # destroys a3, a4, and SAR
 
        /* Set kernel stack (and leave critical section)
         * Note: It's save to set it here. The stack will not be overwritten
@@ -2107,19 +1922,21 @@ ENTRY(_switch_to)
         *       we return from kernel space.
         */
 
-       l32i    a0, a4, TASK_THREAD_INFO
        rsr     a3, EXCSAVE_1           # exc_table
-       movi    a1, 0
-       addi    a0, a0, PT_REGS_OFFSET
-       s32i    a1, a3, EXC_TABLE_FIXUP
-       s32i    a0, a3, EXC_TABLE_KSTK
+       movi    a6, 0
+       addi    a7, a5, PT_REGS_OFFSET
+       s32i    a6, a3, EXC_TABLE_FIXUP
+       s32i    a7, a3, EXC_TABLE_KSTK
 
        /* restore context of the task that 'next' addresses */
 
-       l32i    a0, a4, THREAD_RA       /* restore return address */
-       l32i    a1, a4, THREAD_SP       /* restore stack pointer */
+       l32i    a0, a13, THREAD_RA      # restore return address
+       l32i    a1, a13, THREAD_SP      # restore stack pointer
+
+       load_xtregs_user a5 a6 a8 a9 a10 a11 THREAD_XTREGS_USER
 
-       wsr     a5, PS
+       wsr     a14, PS
+       mov     a2, a12                 # return 'prev'
        rsync
 
        retw
index ddf14dcf2ad969d1bc2be814c9ee7f99c3c6d366..3981a466c779cfd57f8e4cd0033581d8dfc3edd4 100644 (file)
@@ -28,7 +28,7 @@ void *module_alloc(unsigned long size)
 {
        if (size == 0)
                return NULL;
-       return vmalloc(size);
+       return vmalloc_exec(size);
 }
 
 void module_free(struct module *mod, void *module_region)
index f53d7bd9dfb208aa018536fefa7a42f2fc58e907..9185597eb6a046b1ccc5f17ad6a9c216a12f0815 100644 (file)
@@ -52,6 +52,55 @@ void (*pm_power_off)(void) = NULL;
 EXPORT_SYMBOL(pm_power_off);
 
 
+#if XTENSA_HAVE_COPROCESSORS
+
+void coprocessor_release_all(struct thread_info *ti)
+{
+       unsigned long cpenable;
+       int i;
+
+       /* Make sure we don't switch tasks during this operation. */
+
+       preempt_disable();
+
+       /* Walk through all cp owners and release it for the requested one. */
+
+       cpenable = ti->cpenable;
+
+       for (i = 0; i < XCHAL_CP_MAX; i++) {
+               if (coprocessor_owner[i] == ti) {
+                       coprocessor_owner[i] = 0;
+                       cpenable &= ~(1 << i);
+               }
+       }
+
+       ti->cpenable = cpenable;
+       coprocessor_clear_cpenable();
+
+       preempt_enable();
+}
+
+void coprocessor_flush_all(struct thread_info *ti)
+{
+       unsigned long cpenable;
+       int i;
+
+       preempt_disable();
+
+       cpenable = ti->cpenable;
+
+       for (i = 0; i < XCHAL_CP_MAX; i++) {
+               if ((cpenable & 1) != 0 && coprocessor_owner[i] == ti)
+                       coprocessor_flush(ti, i);
+               cpenable >>= 1;
+       }
+
+       preempt_enable();
+}
+
+#endif
+
+
 /*
  * Powermanagement idle function, if any is provided by the platform.
  */
@@ -71,15 +120,36 @@ void cpu_idle(void)
 }
 
 /*
- * Free current thread data structures etc..
+ * This is called when the thread calls exit().
  */
-
 void exit_thread(void)
 {
+#if XTENSA_HAVE_COPROCESSORS
+       coprocessor_release_all(current_thread_info());
+#endif
 }
 
+/*
+ * Flush thread state. This is called when a thread does an execve()
+ * Note that we flush coprocessor registers for the case execve fails.
+ */
 void flush_thread(void)
 {
+#if XTENSA_HAVE_COPROCESSORS
+       struct thread_info *ti = current_thread_info();
+       coprocessor_flush_all(ti);
+       coprocessor_release_all(ti);
+#endif
+}
+
+/*
+ * This is called before the thread is copied. 
+ */
+void prepare_to_copy(struct task_struct *tsk)
+{
+#if XTENSA_HAVE_COPROCESSORS
+       coprocessor_flush_all(task_thread_info(tsk));
+#endif
 }
 
 /*
@@ -107,6 +177,7 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
                 struct task_struct * p, struct pt_regs * regs)
 {
        struct pt_regs *childregs;
+       struct thread_info *ti;
        unsigned long tos;
        int user_mode = user_mode(regs);
 
@@ -128,13 +199,14 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
        p->set_child_tid = p->clear_child_tid = NULL;
        p->thread.ra = MAKE_RA_FOR_CALL((unsigned long)ret_from_fork, 0x1);
        p->thread.sp = (unsigned long)childregs;
+
        if (user_mode(regs)) {
 
                int len = childregs->wmask & ~0xf;
                childregs->areg[1] = usp;
                memcpy(&childregs->areg[XCHAL_NUM_AREGS - len/4],
                       &regs->areg[XCHAL_NUM_AREGS - len/4], len);
-
+// FIXME: we need to set THREADPTR in thread_info...
                if (clone_flags & CLONE_SETTLS)
                        childregs->areg[2] = childregs->areg[6];
 
@@ -142,6 +214,12 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long usp,
                /* In kernel space, we start a new thread with a new stack. */
                childregs->wmask = 1;
        }
+
+#if (XTENSA_HAVE_COPROCESSORS || XTENSA_HAVE_IO_PORTS)
+       ti = task_thread_info(p);
+       ti->cpenable = 0;
+#endif
+
        return 0;
 }
 
@@ -179,10 +257,6 @@ unsigned long get_wchan(struct task_struct *p)
 }
 
 /*
- * do_copy_regs() gathers information from 'struct pt_regs' and
- * 'current->thread.areg[]' to fill in the xtensa_gregset_t
- * structure.
- *
  * xtensa_gregset_t and 'struct pt_regs' are vastly different formats
  * of processor registers.  Besides different ordering,
  * xtensa_gregset_t contains non-live register information that
@@ -191,18 +265,19 @@ unsigned long get_wchan(struct task_struct *p)
  *
  */
 
-void do_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs,
-                  struct task_struct *tsk)
+void xtensa_elf_core_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs)
 {
-       int i, n, wb_offset;
+       unsigned long wb, ws, wm;
+       int live, last;
 
-       elfregs->xchal_config_id0 = XCHAL_HW_CONFIGID0;
-       elfregs->xchal_config_id1 = XCHAL_HW_CONFIGID1;
+       wb = regs->windowbase;
+       ws = regs->windowstart;
+       wm = regs->wmask;
+       ws = ((ws >> wb) | (ws << (WSBITS - wb))) & ((1 << WSBITS) - 1);
 
-       __asm__ __volatile__ ("rsr  %0, 176\n" : "=a" (i));
-       elfregs->cpux = i;
-       __asm__ __volatile__ ("rsr  %0, 208\n" : "=a" (i));
-       elfregs->cpuy = i;
+       /* Don't leak any random bits. */
+
+       memset(elfregs, 0, sizeof (elfregs));
 
        /* Note:  PS.EXCM is not set while user task is running; its
         * being set in regs->ps is for exception handling convenience.
@@ -210,204 +285,22 @@ void do_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs,
 
        elfregs->pc             = regs->pc;
        elfregs->ps             = (regs->ps & ~(1 << PS_EXCM_BIT));
-       elfregs->exccause       = regs->exccause;
-       elfregs->excvaddr       = regs->excvaddr;
-       elfregs->windowbase     = regs->windowbase;
-       elfregs->windowstart    = regs->windowstart;
        elfregs->lbeg           = regs->lbeg;
        elfregs->lend           = regs->lend;
        elfregs->lcount         = regs->lcount;
        elfregs->sar            = regs->sar;
-       elfregs->syscall        = regs->syscall;
-
-       /* Copy register file.
-        * The layout looks like this:
-        *
-        * |  a0 ... a15  | Z ... Z |  arX ... arY  |
-        *  current window  unused    saved frames
-        */
-
-       memset (elfregs->ar, 0, sizeof(elfregs->ar));
+       elfregs->windowstart    = ws;
 
-       wb_offset = regs->windowbase * 4;
-       n = (regs->wmask&1)? 4 : (regs->wmask&2)? 8 : (regs->wmask&4)? 12 : 16;
-
-       for (i = 0; i < n; i++)
-               elfregs->ar[(wb_offset + i) % XCHAL_NUM_AREGS] = regs->areg[i];
-
-       n = (regs->wmask >> 4) * 4;
-
-       for (i = XCHAL_NUM_AREGS - n; n > 0; i++, n--)
-               elfregs->ar[(wb_offset + i) % XCHAL_NUM_AREGS] = regs->areg[i];
+       live = (wm & 2) ? 4 : (wm & 4) ? 8 : (wm & 8) ? 12 : 16;
+       last = XCHAL_NUM_AREGS - (wm >> 4) * 4;
+       memcpy(elfregs->a, regs->areg, live * 4);
+       memcpy(elfregs->a + last, regs->areg + last, (wm >> 4) * 16);
 }
 
-void xtensa_elf_core_copy_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs)
+int dump_fpu(void)
 {
-       do_copy_regs ((xtensa_gregset_t *)elfregs, regs, current);
-}
-
-
-/* The inverse of do_copy_regs().  No error or sanity checking. */
-
-void do_restore_regs (xtensa_gregset_t *elfregs, struct pt_regs *regs,
-                     struct task_struct *tsk)
-{
-       int i, n, wb_offset;
-
-       /* Note:  PS.EXCM is not set while user task is running; it
-        * needs to be set in regs->ps is for exception handling convenience.
-        */
-
-       regs->pc                = elfregs->pc;
-       regs->ps                = (elfregs->ps | (1 << PS_EXCM_BIT));
-       regs->exccause          = elfregs->exccause;
-       regs->excvaddr          = elfregs->excvaddr;
-       regs->windowbase        = elfregs->windowbase;
-       regs->windowstart       = elfregs->windowstart;
-       regs->lbeg              = elfregs->lbeg;
-       regs->lend              = elfregs->lend;
-       regs->lcount            = elfregs->lcount;
-       regs->sar               = elfregs->sar;
-       regs->syscall   = elfregs->syscall;
-
-       /* Clear everything. */
-
-       memset (regs->areg, 0, sizeof(regs->areg));
-
-       /* Copy regs from live window frame. */
-
-       wb_offset = regs->windowbase * 4;
-       n = (regs->wmask&1)? 4 : (regs->wmask&2)? 8 : (regs->wmask&4)? 12 : 16;
-
-       for (i = 0; i < n; i++)
-               regs->areg[(wb_offset+i) % XCHAL_NUM_AREGS] = elfregs->ar[i];
-
-       n = (regs->wmask >> 4) * 4;
-
-       for (i = XCHAL_NUM_AREGS - n; n > 0; i++, n--)
-               regs->areg[(wb_offset+i) % XCHAL_NUM_AREGS] = elfregs->ar[i];
-}
-
-/*
- * do_save_fpregs() gathers information from 'struct pt_regs' and
- * 'current->thread' to fill in the elf_fpregset_t structure.
- *
- * Core files and ptrace use elf_fpregset_t.
- */
-
-void do_save_fpregs (elf_fpregset_t *fpregs, struct pt_regs *regs,
-                    struct task_struct *tsk)
-{
-#if XCHAL_HAVE_CP
-
-       extern unsigned char    _xtensa_reginfo_tables[];
-       extern unsigned         _xtensa_reginfo_table_size;
-       int i;
-       unsigned long flags;
-
-       /* Before dumping coprocessor state from memory,
-        * ensure any live coprocessor contents for this
-        * task are first saved to memory:
-        */
-       local_irq_save(flags);
-
-       for (i = 0; i < XCHAL_CP_MAX; i++) {
-               if (tsk == coprocessor_info[i].owner) {
-                       enable_coprocessor(i);
-                       save_coprocessor_registers(
-                           tsk->thread.cp_save+coprocessor_info[i].offset,i);
-                       disable_coprocessor(i);
-               }
-       }
-
-       local_irq_restore(flags);
-
-       /* Now dump coprocessor & extra state: */
-       memcpy((unsigned char*)fpregs,
-               _xtensa_reginfo_tables, _xtensa_reginfo_table_size);
-       memcpy((unsigned char*)fpregs + _xtensa_reginfo_table_size,
-               tsk->thread.cp_save, XTENSA_CP_EXTRA_SIZE);
-#endif
-}
-
-/*
- * The inverse of do_save_fpregs().
- * Copies coprocessor and extra state from fpregs into regs and tsk->thread.
- * Returns 0 on success, non-zero if layout doesn't match.
- */
-
-int  do_restore_fpregs (elf_fpregset_t *fpregs, struct pt_regs *regs,
-                       struct task_struct *tsk)
-{
-#if XCHAL_HAVE_CP
-
-       extern unsigned char    _xtensa_reginfo_tables[];
-       extern unsigned         _xtensa_reginfo_table_size;
-       int i;
-       unsigned long flags;
-
-       /* Make sure save area layouts match.
-        * FIXME:  in the future we could allow restoring from
-        * a different layout of the same registers, by comparing
-        * fpregs' table with _xtensa_reginfo_tables and matching
-        * entries and copying registers one at a time.
-        * Not too sure yet whether that's very useful.
-        */
-
-       if( memcmp((unsigned char*)fpregs,
-               _xtensa_reginfo_tables, _xtensa_reginfo_table_size) ) {
-           return -1;
-       }
-
-       /* Before restoring coprocessor state from memory,
-        * ensure any live coprocessor contents for this
-        * task are first invalidated.
-        */
-
-       local_irq_save(flags);
-
-       for (i = 0; i < XCHAL_CP_MAX; i++) {
-               if (tsk == coprocessor_info[i].owner) {
-                       enable_coprocessor(i);
-                       save_coprocessor_registers(
-                           tsk->thread.cp_save+coprocessor_info[i].offset,i);
-                       coprocessor_info[i].owner = 0;
-                       disable_coprocessor(i);
-               }
-       }
-
-       local_irq_restore(flags);
-
-       /*  Now restore coprocessor & extra state:  */
-
-       memcpy(tsk->thread.cp_save,
-               (unsigned char*)fpregs + _xtensa_reginfo_table_size,
-               XTENSA_CP_EXTRA_SIZE);
-#endif
        return 0;
 }
-/*
- * Fill in the CP structure for a core dump for a particular task.
- */
-
-int
-dump_task_fpu(struct pt_regs *regs, struct task_struct *task, elf_fpregset_t *r)
-{
-       return 0;       /* no coprocessors active on this processor */
-}
-
-/*
- * Fill in the CP structure for a core dump.
- * This includes any FPU coprocessor.
- * Here, we dump all coprocessors, and other ("extra") custom state.
- *
- * This function is called by elf_core_dump() in fs/binfmt_elf.c
- * (in which case 'regs' comes from calls to do_coredump, see signals.c).
- */
-int  dump_fpu(struct pt_regs *regs, elf_fpregset_t *r)
-{
-       return dump_task_fpu(regs, current, r);
-}
 
 asmlinkage
 long xtensa_clone(unsigned long clone_flags, unsigned long newsp,
@@ -421,8 +314,8 @@ long xtensa_clone(unsigned long clone_flags, unsigned long newsp,
 }
 
 /*
- *  * xtensa_execve() executes a new program.
- *   */
+ * xtensa_execve() executes a new program.
+ */
 
 asmlinkage
 long xtensa_execve(char __user *name, char __user * __user *argv,
@@ -437,7 +330,6 @@ long xtensa_execve(char __user *name, char __user * __user *argv,
        error = PTR_ERR(filename);
        if (IS_ERR(filename))
                goto out;
-       // FIXME: release coprocessor??
        error = do_execve(filename, argv, envp, regs);
        if (error == 0) {
                task_lock(current);
index 5533c7850d53b33c11aee1063ef1536bd91a46fd..9486882ef0afa8318fca682d24ff3c382c18997b 100644 (file)
@@ -4,7 +4,7 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2001 - 2005  Tensilica Inc.
+ * Copyright (C) 2001 - 2007  Tensilica Inc.
  *
  * Joe Taylor  <joe@tensilica.com, joetylr@yahoo.com>
  * Chris Zankel <chris@zankel.net>
 #include <asm/uaccess.h>
 #include <asm/ptrace.h>
 #include <asm/elf.h>
-
-#define TEST_KERNEL    // verify kernel operations FIXME: remove
-
+#include <asm/coprocessor.h>
 
 /*
- * Called by kernel/ptrace.c when detaching..
- *
- * Make sure single step bits etc are not set.
+ * Called by kernel/ptrace.c when detaching to disable single stepping.
  */
 
 void ptrace_disable(struct task_struct *child)
@@ -43,136 +39,237 @@ void ptrace_disable(struct task_struct *child)
        /* Nothing to do.. */
 }
 
-long arch_ptrace(struct task_struct *child, long request, long addr, long data)
+int ptrace_getregs(struct task_struct *child, void __user *uregs)
 {
-       int ret = -EPERM;
+       struct pt_regs *regs = task_pt_regs(child);
+       xtensa_gregset_t __user *gregset = uregs;
+       unsigned long wm = regs->wmask;
+       unsigned long wb = regs->windowbase;
+       int live, i;
+
+       if (!access_ok(VERIFY_WRITE, uregs, sizeof(xtensa_gregset_t)))
+               return -EIO;
+
+       __put_user(regs->pc, &gregset->pc);
+       __put_user(regs->ps & ~(1 << PS_EXCM_BIT), &gregset->ps);
+       __put_user(regs->lbeg, &gregset->lbeg);
+       __put_user(regs->lend, &gregset->lend);
+       __put_user(regs->lcount, &gregset->lcount);
+       __put_user(regs->windowstart, &gregset->windowstart);
+       __put_user(regs->windowbase, &gregset->windowbase);
+
+       live = (wm & 2) ? 4 : (wm & 4) ? 8 : (wm & 8) ? 12 : 16;
+
+       for (i = 0; i < live; i++)
+               __put_user(regs->areg[i],gregset->a+((wb*4+i)%XCHAL_NUM_AREGS));
+       for (i = XCHAL_NUM_AREGS - (wm >> 4) * 4; i < XCHAL_NUM_AREGS; i++)
+               __put_user(regs->areg[i],gregset->a+((wb*4+i)%XCHAL_NUM_AREGS));
+
+       return 0;
+}
 
-       switch (request) {
-       case PTRACE_PEEKTEXT: /* read word at location addr. */
-       case PTRACE_PEEKDATA:
-               ret = generic_ptrace_peekdata(child, addr, data);
-               goto out;
+int ptrace_setregs(struct task_struct *child, void __user *uregs)
+{
+       struct pt_regs *regs = task_pt_regs(child);
+       xtensa_gregset_t *gregset = uregs;
+       const unsigned long ps_mask = PS_CALLINC_MASK | PS_OWB_MASK;
+       unsigned long ps;
+       unsigned long wb;
 
-       /* Read the word at location addr in the USER area.  */
+       if (!access_ok(VERIFY_WRITE, uregs, sizeof(xtensa_gregset_t)))
+               return -EIO;
 
-       case PTRACE_PEEKUSR:
-               {
-               struct pt_regs *regs;
-               unsigned long tmp;
+       __get_user(regs->pc, &gregset->pc);
+       __get_user(ps, &gregset->ps);
+       __get_user(regs->lbeg, &gregset->lbeg);
+       __get_user(regs->lend, &gregset->lend);
+       __get_user(regs->lcount, &gregset->lcount);
+       __get_user(regs->windowstart, &gregset->windowstart);
+       __get_user(wb, &gregset->windowbase);
+
+       regs->ps = (regs->ps & ~ps_mask) | (ps & ps_mask) | (1 << PS_EXCM_BIT);
+
+       if (wb >= XCHAL_NUM_AREGS / 4)
+               return -EFAULT;
+
+       regs->windowbase = wb;
+
+       if (wb != 0 &&  __copy_from_user(regs->areg + XCHAL_NUM_AREGS - wb * 4,
+                                        gregset->a, wb * 16))
+               return -EFAULT;
+
+       if (__copy_from_user(regs->areg, gregset->a + wb*4, (WSBITS-wb) * 16))
+               return -EFAULT;
+
+       return 0;
+}
+
+
+int ptrace_getxregs(struct task_struct *child, void __user *uregs)
+{
+       struct pt_regs *regs = task_pt_regs(child);
+       struct thread_info *ti = task_thread_info(child);
+       elf_xtregs_t __user *xtregs = uregs;
+       int ret = 0;
+
+       if (!access_ok(VERIFY_WRITE, uregs, sizeof(elf_xtregs_t)))
+               return -EIO;
+
+#if XTENSA_HAVE_COPROCESSORS
+       /* Flush all coprocessor registers to memory. */
+       coprocessor_flush_all(ti);
+       ret |= __copy_to_user(&xtregs->cp0, &ti->xtregs_cp,
+                             sizeof(xtregs_coprocessor_t));
+#endif
+       ret |= __copy_to_user(&xtregs->opt, &regs->xtregs_opt,
+                             sizeof(xtregs->opt));
+       ret |= __copy_to_user(&xtregs->user,&ti->xtregs_user,
+                             sizeof(xtregs->user));
+
+       return ret ? -EFAULT : 0;
+}
+
+int ptrace_setxregs(struct task_struct *child, void __user *uregs)
+{
+       struct thread_info *ti = task_thread_info(child);
+       struct pt_regs *regs = task_pt_regs(child);
+       elf_xtregs_t *xtregs = uregs;
+       int ret = 0;
+
+#if XTENSA_HAVE_COPROCESSORS
+       /* Flush all coprocessors before we overwrite them. */
+       coprocessor_flush_all(ti);
+       coprocessor_release_all(ti);
+
+       ret |= __copy_from_user(&ti->xtregs_cp, &xtregs->cp0, 
+                               sizeof(xtregs_coprocessor_t));
+#endif
+       ret |= __copy_from_user(&regs->xtregs_opt, &xtregs->opt,
+                               sizeof(xtregs->opt));
+       ret |= __copy_from_user(&ti->xtregs_user, &xtregs->user,
+                               sizeof(xtregs->user));
+
+       return ret ? -EFAULT : 0;
+}
+
+int ptrace_peekusr(struct task_struct *child, long regno, long __user *ret)
+{
+       struct pt_regs *regs;
+       unsigned long tmp;
 
-               regs = task_pt_regs(child);
-               tmp = 0;  /* Default return value. */
+       regs = task_pt_regs(child);
+       tmp = 0;  /* Default return value. */
 
-               switch(addr) {
+       switch(regno) {
 
                case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1:
-                       {
-                       int ar = addr - REG_AR_BASE - regs->windowbase * 4;
-                       ar &= (XCHAL_NUM_AREGS - 1);
-                       if (ar < 16 && ar + (regs->wmask >> 4) * 4 >= 0)
-                               tmp = regs->areg[ar];
-                       else
-                               ret = -EIO;
+                       tmp = regs->areg[regno - REG_AR_BASE];
                        break;
-                       }
+
                case REG_A_BASE ... REG_A_BASE + 15:
-                       tmp = regs->areg[addr - REG_A_BASE];
+                       tmp = regs->areg[regno - REG_A_BASE];
                        break;
+
                case REG_PC:
                        tmp = regs->pc;
                        break;
+
                case REG_PS:
                        /* Note:  PS.EXCM is not set while user task is running;
                         * its being set in regs is for exception handling
                         * convenience.  */
                        tmp = (regs->ps & ~(1 << PS_EXCM_BIT));
                        break;
+
                case REG_WB:
-                       tmp = regs->windowbase;
-                       break;
+                       break;          /* tmp = 0 */
+
                case REG_WS:
-                       tmp = regs->windowstart;
+               {
+                       unsigned long wb = regs->windowbase;
+                       unsigned long ws = regs->windowstart;
+                       tmp = ((ws>>wb) | (ws<<(WSBITS-wb))) & ((1<<WSBITS)-1);
                        break;
+               }
                case REG_LBEG:
                        tmp = regs->lbeg;
                        break;
+
                case REG_LEND:
                        tmp = regs->lend;
                        break;
+
                case REG_LCOUNT:
                        tmp = regs->lcount;
                        break;
+
                case REG_SAR:
                        tmp = regs->sar;
                        break;
-               case REG_DEPC:
-                       tmp = regs->depc;
-                       break;
-               case REG_EXCCAUSE:
-                       tmp = regs->exccause;
-                       break;
-               case REG_EXCVADDR:
-                       tmp = regs->excvaddr;
-                       break;
+
                case SYSCALL_NR:
                        tmp = regs->syscall;
                        break;
-               default:
-                       tmp = 0;
-                       ret = -EIO;
-                       goto out;
-               }
-               ret = put_user(tmp, (unsigned long *) data);
-               goto out;
-               }
 
-       case PTRACE_POKETEXT: /* write the word at location addr. */
-       case PTRACE_POKEDATA:
-               ret = generic_ptrace_pokedata(child, addr, data);
-               goto out;
+               default:
+                       return -EIO;
+       }
+       return put_user(tmp, ret);
+}
 
-       case PTRACE_POKEUSR:
-               {
-               struct pt_regs *regs;
-               regs = task_pt_regs(child);
+int ptrace_pokeusr(struct task_struct *child, long regno, long val)
+{
+       struct pt_regs *regs;
+       regs = task_pt_regs(child);
 
-               switch (addr) {
+       switch (regno) {
                case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1:
-                       {
-                       int ar = addr - REG_AR_BASE - regs->windowbase * 4;
-                       if (ar < 16 && ar + (regs->wmask >> 4) * 4 >= 0)
-                               regs->areg[ar & (XCHAL_NUM_AREGS - 1)] = data;
-                       else
-                               ret = -EIO;
+                       regs->areg[regno - REG_AR_BASE] = val;
                        break;
-                       }
+
                case REG_A_BASE ... REG_A_BASE + 15:
-                       regs->areg[addr - REG_A_BASE] = data;
+                       regs->areg[regno - REG_A_BASE] = val;
                        break;
+
                case REG_PC:
-                       regs->pc = data;
+                       regs->pc = val;
                        break;
+
                case SYSCALL_NR:
-                       regs->syscall = data;
-                       break;
-#ifdef TEST_KERNEL
-               case REG_WB:
-                       regs->windowbase = data;
-                       break;
-               case REG_WS:
-                       regs->windowstart = data;
+                       regs->syscall = val;
                        break;
-#endif
 
                default:
-                       /* The rest are not allowed. */
-                       ret = -EIO;
-                       break;
-               }
+                       return -EIO;
+       }
+       return 0;
+}
+
+long arch_ptrace(struct task_struct *child, long request, long addr, long data)
+{
+       int ret = -EPERM;
+
+       switch (request) {
+       case PTRACE_PEEKTEXT:   /* read word at location addr. */
+       case PTRACE_PEEKDATA:
+               ret = generic_ptrace_peekdata(child, addr, data);
+               break;
+
+       case PTRACE_PEEKUSR:    /* read register specified by addr. */
+               ret = ptrace_peekusr(child, addr, (void __user *) data);
+               break;
+
+       case PTRACE_POKETEXT:   /* write the word at location addr. */
+       case PTRACE_POKEDATA:
+               ret = generic_ptrace_pokedata(child, addr, data);
+               break;
+
+       case PTRACE_POKEUSR:    /* write register specified by addr. */
+               ret = ptrace_pokeusr(child, addr, data);
                break;
-               }
 
        /* continue and stop at next (return from) syscall */
+
        case PTRACE_SYSCALL:
        case PTRACE_CONT: /* restart after signal. */
        {
@@ -217,98 +314,26 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
                break;
 
        case PTRACE_GETREGS:
-       {
-               /* 'data' points to user memory in which to write.
-                * Mainly due to the non-live register values, we
-                * reformat the register values into something more
-                * standard.  For convenience, we use the handy
-                * elf_gregset_t format. */
-
-               xtensa_gregset_t format;
-               struct pt_regs *regs = task_pt_regs(child);
-
-               do_copy_regs (&format, regs, child);
-
-               /* Now, copy to user space nice and easy... */
-               ret = 0;
-               if (copy_to_user((void *)data, &format, sizeof(elf_gregset_t)))
-                       ret = -EFAULT;
+               ret = ptrace_getregs(child, (void __user *) data);
                break;
-       }
 
        case PTRACE_SETREGS:
-       {
-               /* 'data' points to user memory that contains the new
-                * values in the elf_gregset_t format. */
-
-               xtensa_gregset_t format;
-               struct pt_regs *regs = task_pt_regs(child);
-
-               if (copy_from_user(&format,(void *)data,sizeof(elf_gregset_t))){
-                       ret = -EFAULT;
-                       break;
-               }
-
-               /* FIXME: Perhaps we want some sanity checks on
-                * these user-space values?  See ARM version.  Are
-                * debuggers a security concern? */
-
-               do_restore_regs (&format, regs, child);
-
-               ret = 0;
-               break;
-       }
-
-       case PTRACE_GETFPREGS:
-       {
-               /* 'data' points to user memory in which to write.
-                * For convenience, we use the handy
-                * elf_fpregset_t format. */
-
-               elf_fpregset_t fpregs;
-               struct pt_regs *regs = task_pt_regs(child);
-
-               do_save_fpregs (&fpregs, regs, child);
-
-               /* Now, copy to user space nice and easy... */
-               ret = 0;
-               if (copy_to_user((void *)data, &fpregs, sizeof(elf_fpregset_t)))
-                       ret = -EFAULT;
-
+               ret = ptrace_setregs(child, (void __user *) data);
                break;
-       }
-
-       case PTRACE_SETFPREGS:
-       {
-               /* 'data' points to user memory that contains the new
-                * values in the elf_fpregset_t format.
-                */
-               elf_fpregset_t fpregs;
-               struct pt_regs *regs = task_pt_regs(child);
 
-               ret = 0;
-               if (copy_from_user(&fpregs, (void *)data, sizeof(elf_fpregset_t))) {
-                       ret = -EFAULT;
-                       break;
-               }
-
-               if (do_restore_fpregs (&fpregs, regs, child))
-                       ret = -EIO;
+       case PTRACE_GETXTREGS:
+               ret = ptrace_getxregs(child, (void __user *) data);
                break;
-       }
 
-       case PTRACE_GETFPREGSIZE:
-               /* 'data' points to 'unsigned long' set to the size
-                * of elf_fpregset_t
-                */
-               ret = put_user(sizeof(elf_fpregset_t), (unsigned long *) data);
+       case PTRACE_SETXTREGS:
+               ret = ptrace_setxregs(child, (void __user *) data);
                break;
 
        default:
                ret = ptrace_request(child, request, addr, data);
-               goto out;
+               break;
        }
- out:
+
        return ret;
 }
 
index b80f2cb1b4fb1c9883473c8dae6d63261874fb15..5e6d75c9f92b33c9a7a210c12333852710350e70 100644 (file)
@@ -60,11 +60,6 @@ struct ide_ops *ide_ops;
 extern struct rtc_ops no_rtc_ops;
 struct rtc_ops *rtc_ops;
 
-#ifdef CONFIG_PC_KEYB
-extern struct kbd_ops no_kbd_ops;
-struct kbd_ops *kbd_ops;
-#endif
-
 #ifdef CONFIG_BLK_DEV_INITRD
 extern void *initrd_start;
 extern void *initrd_end;
index 033aae0336d260d323f07c3abaad1ea521690d7c..f2220b5bdce64daff9d0b75306e713159b334502 100644 (file)
@@ -35,13 +35,17 @@ asmlinkage int do_signal(struct pt_regs *regs, sigset_t *oldset);
 
 extern struct task_struct *coproc_owners[];
 
-extern void release_all_cp (struct task_struct *);
-
 struct rt_sigframe
 {
        struct siginfo info;
        struct ucontext uc;
-       cp_state_t cpstate;
+       struct {
+               xtregs_opt_t opt;
+               xtregs_user_t user;
+#if XTENSA_HAVE_COPROCESSORS
+               xtregs_coprocessor_t cp;
+#endif
+       } xtregs;
        unsigned char retcode[6];
        unsigned int window[4];
 };
@@ -49,8 +53,6 @@ struct rt_sigframe
 /* 
  * Flush register windows stored in pt_regs to stack.
  * Returns 1 for errors.
- *
- * Note that windowbase, windowstart, and wmask are not updated!
  */
 
 int
@@ -116,6 +118,9 @@ flush_window_regs_user(struct pt_regs *regs)
                base += inc;
        }
 
+       regs->wmask = 1;
+       regs->windowstart = 1 << wb;
+
        return 0;
 
 errout:
@@ -131,9 +136,10 @@ errout:
  */
 
 static int
-setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate,
-                struct pt_regs *regs, unsigned long mask)
+setup_sigcontext(struct rt_sigframe __user *frame, struct pt_regs *regs)
 {
+       struct sigcontext __user *sc = &frame->uc.uc_mcontext;
+       struct thread_info *ti = current_thread_info();
        int err = 0;
 
 #define COPY(x)        err |= __put_user(regs->x, &sc->sc_##x)
@@ -147,23 +153,32 @@ setup_sigcontext(struct sigcontext __user *sc, cp_state_t *cpstate,
 
        err |= flush_window_regs_user(regs);
        err |= __copy_to_user (sc->sc_a, regs->areg, 16 * 4);
+       err |= __put_user(0, &sc->sc_xtregs);
 
-       // err |= __copy_to_user (sc->sc_a, regs->areg, XCHAL_NUM_AREGS * 4)
+       if (err)
+               return err;
 
-#if XCHAL_HAVE_CP
-# error Coprocessors unsupported
-       err |= save_cpextra(cpstate);
-       err |= __put_user(err ? NULL : cpstate, &sc->sc_cpstate);
+#if XTENSA_HAVE_COPROCESSORS
+       coprocessor_flush_all(ti);
+       coprocessor_release_all(ti);
+       err |= __copy_to_user(&frame->xtregs.cp, &ti->xtregs_cp,
+                             sizeof (frame->xtregs.cp));
 #endif
-       /* non-iBCS2 extensions.. */
-       err |= __put_user(mask, &sc->oldmask);
+       err |= __copy_to_user(&frame->xtregs.opt, &regs->xtregs_opt,
+                             sizeof (xtregs_opt_t));
+       err |= __copy_to_user(&frame->xtregs.user, &ti->xtregs_user,
+                             sizeof (xtregs_user_t));
+
+       err |= __put_user(err ? NULL : &frame->xtregs, &sc->sc_xtregs);
 
        return err;
 }
 
 static int
-restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
+restore_sigcontext(struct pt_regs *regs, struct rt_sigframe __user *frame)
 {
+       struct sigcontext __user *sc = &frame->uc.uc_mcontext;
+       struct thread_info *ti = current_thread_info();
        unsigned int err = 0;
        unsigned long ps;
 
@@ -181,6 +196,8 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
        regs->windowbase = 0;
        regs->windowstart = 1;
 
+       regs->syscall = -1;             /* disable syscall checks */
+
        /* For PS, restore only PS.CALLINC.
         * Assume that all other bits are either the same as for the signal
         * handler, or the user mode value doesn't matter (e.g. PS.OWB).
@@ -196,8 +213,9 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
 
        err |= __copy_from_user(regs->areg, sc->sc_a, 16 * 4);
 
-#if XCHAL_HAVE_CP
-# error Coprocessors unsupported
+       if (err)
+               return err;
+
        /* The signal handler may have used coprocessors in which
         * case they are still enabled.  We disable them to force a
         * reloading of the original task's CP state by the lazy
@@ -205,20 +223,20 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc)
         * Also, we essentially discard any coprocessor state that the
         * signal handler created. */
 
-       if (!err) {
-         struct task_struct *tsk = current;
-         release_all_cp(tsk);
-         err |= __copy_from_user(tsk->thread.cpextra, sc->sc_cpstate, 
-                                 XTENSA_CP_EXTRA_SIZE);
-       }
+#if XTENSA_HAVE_COPROCESSORS
+       coprocessor_release_all(ti);
+       err |= __copy_from_user(&ti->xtregs_cp, &frame->xtregs.cp,
+                               sizeof (frame->xtregs.cp));
 #endif
+       err |= __copy_from_user(&ti->xtregs_user, &frame->xtregs.user,
+                               sizeof (xtregs_user_t));
+       err |= __copy_from_user(&regs->xtregs_opt, &frame->xtregs.opt,
+                               sizeof (xtregs_opt_t));
 
-       regs->syscall = -1;             /* disable syscall checks */
        return err;
 }
 
 
-
 /*
  * Do a signal return; undo the signal stack.
  */
@@ -247,7 +265,7 @@ asmlinkage long xtensa_rt_sigreturn(long a0, long a1, long a2, long a3,
        recalc_sigpending();
        spin_unlock_irq(&current->sighand->siglock);
 
-       if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
+       if (restore_sigcontext(regs, frame))
                goto badframe;
 
        ret = regs->areg[2];
@@ -360,18 +378,22 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
        err |= __put_user(sas_ss_flags(regs->areg[1]),
                          &frame->uc.uc_stack.ss_flags);
        err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size);
-       err |= setup_sigcontext(&frame->uc.uc_mcontext, &frame->cpstate,
-                               regs, set->sig[0]);
+       err |= setup_sigcontext(frame, regs);
        err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set));
 
-       /* Create sys_rt_sigreturn syscall in stack frame */
+       if (ka->sa.sa_flags & SA_RESTORER) {
+               ra = (unsigned long)ka->sa.sa_restorer;
+       } else {
 
-       err |= gen_return_code(frame->retcode);
+               /* Create sys_rt_sigreturn syscall in stack frame */
 
-       if (err) {
-               goto give_sigsegv;
+               err |= gen_return_code(frame->retcode);
+
+               if (err) {
+                       goto give_sigsegv;
+               }
+               ra = (unsigned long) frame->retcode;
        }
-               
 
        /* 
         * Create signal handler execution context.
@@ -385,7 +407,6 @@ static void setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
        /* Set up a stack frame for a call4
         * Note: PS.CALLINC is set to one by start_thread
         */
-       ra = (unsigned long) frame->retcode;
        regs->areg[4] = (((unsigned long) ra) & 0x3fffffff) | 0x40000000;
        regs->areg[6] = (unsigned long) signal;
        regs->areg[7] = (unsigned long) &frame->info;
index 397bcd6ad08d4ca860e8d936862fd22f1f1629ac..c7a021d9f696bba087df97b70d433a0a216c575b 100644 (file)
@@ -118,28 +118,28 @@ static dispatch_init_table_t __initdata dispatch_init_table[] = {
 { EXCCAUSE_STORE_CACHE_ATTRIBUTE,      0,         do_page_fault },
 { EXCCAUSE_LOAD_CACHE_ATTRIBUTE,       0,         do_page_fault },
 /* XCCHAL_EXCCAUSE_FLOATING_POINT unhandled */
-#if (XCHAL_CP_MASK & 1)
+#if XTENSA_HAVE_COPROCESSOR(0)
 COPROCESSOR(0),
 #endif
-#if (XCHAL_CP_MASK & 2)
+#if XTENSA_HAVE_COPROCESSOR(1)
 COPROCESSOR(1),
 #endif
-#if (XCHAL_CP_MASK & 4)
+#if XTENSA_HAVE_COPROCESSOR(2)
 COPROCESSOR(2),
 #endif
-#if (XCHAL_CP_MASK & 8)
+#if XTENSA_HAVE_COPROCESSOR(3)
 COPROCESSOR(3),
 #endif
-#if (XCHAL_CP_MASK & 16)
+#if XTENSA_HAVE_COPROCESSOR(4)
 COPROCESSOR(4),
 #endif
-#if (XCHAL_CP_MASK & 32)
+#if XTENSA_HAVE_COPROCESSOR(5)
 COPROCESSOR(5),
 #endif
-#if (XCHAL_CP_MASK & 64)
+#if XTENSA_HAVE_COPROCESSOR(6)
 COPROCESSOR(6),
 #endif
-#if (XCHAL_CP_MASK & 128)
+#if XTENSA_HAVE_COPROCESSOR(7)
 COPROCESSOR(7),
 #endif
 { EXCCAUSE_MAPPED_DEBUG,               0,              do_debug },
@@ -349,9 +349,7 @@ void show_regs(struct pt_regs * regs)
 
        wmask = regs->wmask & ~1;
 
-       for (i = 0; i < 32; i++) {
-               if (wmask & (1 << (i / 4)))
-                       break;
+       for (i = 0; i < 16; i++) {
                if ((i % 8) == 0)
                        printk ("\n" KERN_INFO "a%02d: ", i);
                printk("%08lx ", regs->areg[i]);
index 7d0f55a4982d41ba997e4ec557807d4a768fde23..51f4fb6f16f9a4b9f404ed61f3996b03082f9963 100644 (file)
@@ -136,7 +136,9 @@ SECTIONS
   __init_begin = .;
   .init.text : {
        _sinittext = .;
-       *(.init.literal) INIT_TEXT
+       *(.init.literal) *(.cpuinit.literal) 
+       *(.devinit.literal) *(.meminit.literal)
+       INIT_TEXT
        _einittext = .;
   }
 
@@ -161,6 +163,8 @@ SECTIONS
                   .DoubleExceptionVector.literal);
     RELOCATE_ENTRY(_DoubleExceptionVector_text,
                   .DoubleExceptionVector.text);
+    RELOCATE_ENTRY(_DebugInterruptVector_text,
+                  .DebugInterruptVector.text);
   
     __boot_reloc_table_end = ABSOLUTE(.) ;
   }
index 9a1fa9478ae74090664466824e8ee495a88be9e5..3ba990c67676c0b40976ff60d03638ceefba94cd 100644 (file)
@@ -25,7 +25,6 @@
 #include <linux/swap.h>
 #include <linux/pagemap.h>
 
-#include <asm/pgtable.h>
 #include <asm/bootparam.h>
 #include <asm/mmu_context.h>
 #include <asm/tlb.h>
@@ -181,9 +180,9 @@ update_mmu_cache(struct vm_area_struct * vma, unsigned long addr, pte_t pte)
 #else
        if (!PageReserved(page) && !test_bit(PG_arch_1, &page->flags)
            && (vma->vm_flags & VM_EXEC) != 0) {
-               unsigned long vaddr = addr & PAGE_MASK;
-               __flush_dcache_page(vaddr);
-               __invalidate_icache_page(vaddr);
+               unsigned long paddr = (unsigned long) page_address(page);
+               __flush_dcache_page(paddr);
+               __invalidate_icache_page(paddr);
                set_bit(PG_arch_1, &page->flags);
        }
 #endif
index b3086f34a8e7f6b4386e47c5cdc12ef7f4205df2..81d0560eaea207a3cd6a66c0ee40ed21089658b9 100644 (file)
@@ -309,7 +309,7 @@ void show_mem(void)
 
 struct kmem_cache *pgtable_cache __read_mostly;
 
-static void pgd_ctor(void *addr, struct kmem_cache *cache, unsigned long flags)
+static void pgd_ctor(struct kmem_cache *cache, void* addr)
 {
        pte_t* ptep = (pte_t*)addr;
        int i;
index e1f880368e3276e5eaaaa395530e1f457ac0008c..c885664211d15ffea236ae0fc4fe32c61d7a1155 100644 (file)
@@ -295,7 +295,7 @@ ENTRY(__tlbtemp_mapping_itlb)
 ENTRY(__invalidate_icache_page_alias)
        entry   sp, 16
 
-       addi    a6, a3, (PAGE_KERNEL | _PAGE_HW_WRITE)
+       addi    a6, a3, (PAGE_KERNEL_EXEC | _PAGE_HW_WRITE)
        mov     a4, a2
        witlb   a6, a2
        isync
similarity index 98%
rename from arch/xtensa/platform-iss/console.c
rename to arch/xtensa/platforms/iss/console.c
index 854677d0c3f680feccffe731c2db72a95116ff61..9141e369073194115eb5ad06d1f1e22b0d230d9f 100644 (file)
@@ -43,6 +43,7 @@ static DEFINE_SPINLOCK(timer_lock);
 
 int errno;
 
+static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__));
 static int __simc (int a, int b, int c, int d, int e, int f)
 {
        int ret;
similarity index 99%
rename from arch/xtensa/platform-iss/network.c
rename to arch/xtensa/platforms/iss/network.c
index f21b9b0899a8e3ae277d08256aab7207940f0aa2..a2e252217428f0500ea965c47bf18822d32e4a2b 100644 (file)
@@ -31,7 +31,6 @@
 #include <linux/bootmem.h>
 #include <linux/ethtool.h>
 #include <linux/rtnetlink.h>
-#include <linux/timer.h>
 #include <linux/platform_device.h>
 
 #include <asm/platform/simcall.h>
@@ -108,6 +107,7 @@ struct iss_net_private {
 
 static int errno;
 
+static int __simc (int a, int b, int c, int d, int e, int f) __attribute__((__noinline__));
 static int __simc (int a, int b, int c, int d, int e, int f)
 {
        int ret;
index 7222a18a03198d0bc70121d1246dc27af1d0629e..caf873c14bfb244a89ba9c322ada05c3c2b3c04e 100644 (file)
@@ -943,7 +943,11 @@ int __init acpi_ec_ecdt_probe(void)
                boot_ec->command_addr = ecdt_ptr->control.address;
                boot_ec->data_addr = ecdt_ptr->data.address;
                boot_ec->gpe = ecdt_ptr->gpe;
-               boot_ec->handle = ACPI_ROOT_OBJECT;
+               if (ACPI_FAILURE(acpi_get_handle(NULL, ecdt_ptr->id,
+                               &boot_ec->handle))) {
+                       pr_info("Failed to locate handle for boot EC\n");
+                       boot_ec->handle = ACPI_ROOT_OBJECT;
+               }
        } else {
                /* This workaround is needed only on some broken machines,
                 * which require early EC, but fail to provide ECDT */
index 2e9ce94798c7dbb59fd628f493bb0970cde6ed85..3f51b7e84a17f532801dd47bdff391f5252bcc55 100644 (file)
@@ -338,6 +338,7 @@ acpi_ex_pci_config_space_handler(u32 function,
        acpi_status status = AE_OK;
        struct acpi_pci_id *pci_id;
        u16 pci_register;
+       u32 value32;
 
        ACPI_FUNCTION_TRACE(ex_pci_config_space_handler);
 
@@ -364,9 +365,9 @@ acpi_ex_pci_config_space_handler(u32 function,
        switch (function) {
        case ACPI_READ:
 
-               *value = 0;
                status = acpi_os_read_pci_configuration(pci_id, pci_register,
-                                                       value, bit_width);
+                                                       &value32, bit_width);
+               *value = value32;
                break;
 
        case ACPI_WRITE:
index 48cb705b274afb837129ae6d13ead27f8f2c6ccc..c8e3cba423ef19d7548b63bfdb041d266454d4e1 100644 (file)
@@ -256,22 +256,28 @@ static int acpi_fan_add(struct acpi_device *device)
 
        cdev = thermal_cooling_device_register("Fan", device,
                                                &fan_cooling_ops);
-       if (cdev)
+       if (IS_ERR(cdev)) {
+               result = PTR_ERR(cdev);
+               goto end;
+       }
+       if (cdev) {
                printk(KERN_INFO PREFIX
                        "%s is registered as cooling_device%d\n",
                        device->dev.bus_id, cdev->id);
-       else
-               goto end;
-       acpi_driver_data(device) = cdev;
-       result = sysfs_create_link(&device->dev.kobj, &cdev->device.kobj,
-                                       "thermal_cooling");
-       if (result)
-               return result;
 
-       result = sysfs_create_link(&cdev->device.kobj, &device->dev.kobj,
-                                       "device");
-        if (result)
-                return result;
+               acpi_driver_data(device) = cdev;
+               result = sysfs_create_link(&device->dev.kobj,
+                                          &cdev->device.kobj,
+                                          "thermal_cooling");
+               if (result)
+                       return result;
+
+               result = sysfs_create_link(&cdev->device.kobj,
+                                          &device->dev.kobj,
+                                          "device");
+               if (result)
+                       return result;
+       }
 
        result = acpi_fan_add_fs(device);
        if (result)
index 75ccf5d18bf4e3630e892dd0021a8c890a0fc0c2..a3cc8a98255cf724248c7efbf749a912bc9ef4f1 100644 (file)
@@ -670,21 +670,26 @@ static int __cpuinit acpi_processor_start(struct acpi_device *device)
 
        pr->cdev = thermal_cooling_device_register("Processor", device,
                                                &processor_cooling_ops);
-       if (pr->cdev)
+       if (IS_ERR(pr->cdev)) {
+               result = PTR_ERR(pr->cdev);
+               goto end;
+       }
+       if (pr->cdev) {
                printk(KERN_INFO PREFIX
                        "%s is registered as cooling_device%d\n",
                        device->dev.bus_id, pr->cdev->id);
-       else
-               goto end;
 
-       result = sysfs_create_link(&device->dev.kobj, &pr->cdev->device.kobj,
-                                       "thermal_cooling");
-       if (result)
-               return result;
-       result = sysfs_create_link(&pr->cdev->device.kobj, &device->dev.kobj,
-                                       "device");
-       if (result)
-               return result;
+               result = sysfs_create_link(&device->dev.kobj,
+                                          &pr->cdev->device.kobj,
+                                          "thermal_cooling");
+               if (result)
+                       return result;
+               result = sysfs_create_link(&pr->cdev->device.kobj,
+                                          &device->dev.kobj,
+                                          "device");
+               if (result)
+                       return result;
+       }
 
        if (pr->flags.throttling) {
                printk(KERN_INFO PREFIX "%s [%s] (supports",
@@ -809,10 +814,12 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
 
        acpi_processor_remove_fs(device);
 
-       sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
-       sysfs_remove_link(&pr->cdev->device.kobj, "device");
-       thermal_cooling_device_unregister(pr->cdev);
-       pr->cdev = NULL;
+       if (pr->cdev) {
+               sysfs_remove_link(&device->dev.kobj, "thermal_cooling");
+               sysfs_remove_link(&pr->cdev->device.kobj, "device");
+               thermal_cooling_device_unregister(pr->cdev);
+               pr->cdev = NULL;
+       }
 
        processors[pr->id] = NULL;
 
@@ -826,8 +833,6 @@ static int acpi_processor_remove(struct acpi_device *device, int type)
  *     Acpi processor hotplug support                                      *
  ****************************************************************************/
 
-static int is_processor_present(acpi_handle handle);
-
 static int is_processor_present(acpi_handle handle)
 {
        acpi_status status;
index 34f1575710807eada4cfd4ff8162b9753b4cfd1b..eba55b7d6c95ad63479430fc3c63c57dce3a5b19 100644 (file)
@@ -36,16 +36,20 @@ ACPI_MODULE_NAME("utils");
 /* --------------------------------------------------------------------------
                             Object Evaluation Helpers
    -------------------------------------------------------------------------- */
+static void
+acpi_util_eval_error(acpi_handle h, acpi_string p, acpi_status s)
+{
 #ifdef ACPI_DEBUG_OUTPUT
-#define acpi_util_eval_error(h,p,s) {\
-       char prefix[80] = {'\0'};\
-       struct acpi_buffer buffer = {sizeof(prefix), prefix};\
-       acpi_get_name(h, ACPI_FULL_PATHNAME, &buffer);\
-       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate [%s.%s]: %s\n",\
-               (char *) prefix, p, acpi_format_exception(s))); }
+       char prefix[80] = {'\0'};
+       struct acpi_buffer buffer = {sizeof(prefix), prefix};
+       acpi_get_name(h, ACPI_FULL_PATHNAME, &buffer);
+       ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Evaluate [%s.%s]: %s\n",
+               (char *) prefix, p, acpi_format_exception(s)));
 #else
-#define acpi_util_eval_error(h,p,s)
+       return;
 #endif
+}
+
 acpi_status
 acpi_extract_package(union acpi_object *package,
                     struct acpi_buffer *format, struct acpi_buffer *buffer)
index 7f714fa2a4547d284323d85441e60a9c6b61600f..12cce69b5441e98a7bd8da23031dc250daaa88f1 100644 (file)
@@ -731,6 +731,9 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
 
                device->cdev = thermal_cooling_device_register("LCD",
                                        device->dev, &video_cooling_ops);
+               if (IS_ERR(device->cdev))
+                       return;
+
                if (device->cdev) {
                        printk(KERN_INFO PREFIX
                                "%s is registered as cooling_device%d\n",
index def3682f416a19d04b45893eb172d7f4ecbbbcf0..60d1bb556973b95e6133ac3830e36a06b9d45573 100644 (file)
@@ -87,6 +87,28 @@ static struct workqueue_struct *ata_wq;
 
 struct workqueue_struct *ata_aux_wq;
 
+struct ata_force_param {
+       const char      *name;
+       unsigned int    cbl;
+       int             spd_limit;
+       unsigned long   xfer_mask;
+       unsigned int    horkage_on;
+       unsigned int    horkage_off;
+};
+
+struct ata_force_ent {
+       int                     port;
+       int                     device;
+       struct ata_force_param  param;
+};
+
+static struct ata_force_ent *ata_force_tbl;
+static int ata_force_tbl_size;
+
+static char ata_force_param_buf[PAGE_SIZE] __initdata;
+module_param_string(force, ata_force_param_buf, sizeof(ata_force_param_buf), 0444);
+MODULE_PARM_DESC(force, "Force ATA configurations including cable type, link speed and transfer mode (see Documentation/kernel-parameters.txt for details)");
+
 int atapi_enabled = 1;
 module_param(atapi_enabled, int, 0444);
 MODULE_PARM_DESC(atapi_enabled, "Enable discovery of ATAPI devices (0=off, 1=on)");
@@ -129,6 +151,179 @@ MODULE_LICENSE("GPL");
 MODULE_VERSION(DRV_VERSION);
 
 
+/**
+ *     ata_force_cbl - force cable type according to libata.force
+ *     @link: ATA link of interest
+ *
+ *     Force cable type according to libata.force and whine about it.
+ *     The last entry which has matching port number is used, so it
+ *     can be specified as part of device force parameters.  For
+ *     example, both "a:40c,1.00:udma4" and "1.00:40c,udma4" have the
+ *     same effect.
+ *
+ *     LOCKING:
+ *     EH context.
+ */
+void ata_force_cbl(struct ata_port *ap)
+{
+       int i;
+
+       for (i = ata_force_tbl_size - 1; i >= 0; i--) {
+               const struct ata_force_ent *fe = &ata_force_tbl[i];
+
+               if (fe->port != -1 && fe->port != ap->print_id)
+                       continue;
+
+               if (fe->param.cbl == ATA_CBL_NONE)
+                       continue;
+
+               ap->cbl = fe->param.cbl;
+               ata_port_printk(ap, KERN_NOTICE,
+                               "FORCE: cable set to %s\n", fe->param.name);
+               return;
+       }
+}
+
+/**
+ *     ata_force_spd_limit - force SATA spd limit according to libata.force
+ *     @link: ATA link of interest
+ *
+ *     Force SATA spd limit according to libata.force and whine about
+ *     it.  When only the port part is specified (e.g. 1:), the limit
+ *     applies to all links connected to both the host link and all
+ *     fan-out ports connected via PMP.  If the device part is
+ *     specified as 0 (e.g. 1.00:), it specifies the first fan-out
+ *     link not the host link.  Device number 15 always points to the
+ *     host link whether PMP is attached or not.
+ *
+ *     LOCKING:
+ *     EH context.
+ */
+static void ata_force_spd_limit(struct ata_link *link)
+{
+       int linkno, i;
+
+       if (ata_is_host_link(link))
+               linkno = 15;
+       else
+               linkno = link->pmp;
+
+       for (i = ata_force_tbl_size - 1; i >= 0; i--) {
+               const struct ata_force_ent *fe = &ata_force_tbl[i];
+
+               if (fe->port != -1 && fe->port != link->ap->print_id)
+                       continue;
+
+               if (fe->device != -1 && fe->device != linkno)
+                       continue;
+
+               if (!fe->param.spd_limit)
+                       continue;
+
+               link->hw_sata_spd_limit = (1 << fe->param.spd_limit) - 1;
+               ata_link_printk(link, KERN_NOTICE,
+                       "FORCE: PHY spd limit set to %s\n", fe->param.name);
+               return;
+       }
+}
+
+/**
+ *     ata_force_xfermask - force xfermask according to libata.force
+ *     @dev: ATA device of interest
+ *
+ *     Force xfer_mask according to libata.force and whine about it.
+ *     For consistency with link selection, device number 15 selects
+ *     the first device connected to the host link.
+ *
+ *     LOCKING:
+ *     EH context.
+ */
+static void ata_force_xfermask(struct ata_device *dev)
+{
+       int devno = dev->link->pmp + dev->devno;
+       int alt_devno = devno;
+       int i;
+
+       /* allow n.15 for the first device attached to host port */
+       if (ata_is_host_link(dev->link) && devno == 0)
+               alt_devno = 15;
+
+       for (i = ata_force_tbl_size - 1; i >= 0; i--) {
+               const struct ata_force_ent *fe = &ata_force_tbl[i];
+               unsigned long pio_mask, mwdma_mask, udma_mask;
+
+               if (fe->port != -1 && fe->port != dev->link->ap->print_id)
+                       continue;
+
+               if (fe->device != -1 && fe->device != devno &&
+                   fe->device != alt_devno)
+                       continue;
+
+               if (!fe->param.xfer_mask)
+                       continue;
+
+               ata_unpack_xfermask(fe->param.xfer_mask,
+                                   &pio_mask, &mwdma_mask, &udma_mask);
+               if (udma_mask)
+                       dev->udma_mask = udma_mask;
+               else if (mwdma_mask) {
+                       dev->udma_mask = 0;
+                       dev->mwdma_mask = mwdma_mask;
+               } else {
+                       dev->udma_mask = 0;
+                       dev->mwdma_mask = 0;
+                       dev->pio_mask = pio_mask;
+               }
+
+               ata_dev_printk(dev, KERN_NOTICE,
+                       "FORCE: xfer_mask set to %s\n", fe->param.name);
+               return;
+       }
+}
+
+/**
+ *     ata_force_horkage - force horkage according to libata.force
+ *     @dev: ATA device of interest
+ *
+ *     Force horkage according to libata.force and whine about it.
+ *     For consistency with link selection, device number 15 selects
+ *     the first device connected to the host link.
+ *
+ *     LOCKING:
+ *     EH context.
+ */
+static void ata_force_horkage(struct ata_device *dev)
+{
+       int devno = dev->link->pmp + dev->devno;
+       int alt_devno = devno;
+       int i;
+
+       /* allow n.15 for the first device attached to host port */
+       if (ata_is_host_link(dev->link) && devno == 0)
+               alt_devno = 15;
+
+       for (i = 0; i < ata_force_tbl_size; i++) {
+               const struct ata_force_ent *fe = &ata_force_tbl[i];
+
+               if (fe->port != -1 && fe->port != dev->link->ap->print_id)
+                       continue;
+
+               if (fe->device != -1 && fe->device != devno &&
+                   fe->device != alt_devno)
+                       continue;
+
+               if (!(~dev->horkage & fe->param.horkage_on) &&
+                   !(dev->horkage & fe->param.horkage_off))
+                       continue;
+
+               dev->horkage |= fe->param.horkage_on;
+               dev->horkage &= ~fe->param.horkage_off;
+
+               ata_dev_printk(dev, KERN_NOTICE,
+                       "FORCE: horkage modified (%s)\n", fe->param.name);
+       }
+}
+
 /**
  *     ata_tf_to_fis - Convert ATA taskfile to SATA FIS structure
  *     @tf: Taskfile to convert
@@ -2067,6 +2262,7 @@ int ata_dev_configure(struct ata_device *dev)
 
        /* set horkage */
        dev->horkage |= ata_dev_blacklisted(dev);
+       ata_force_horkage(dev);
 
        /* let ACPI work its magic */
        rc = ata_acpi_on_devcfg(dev);
@@ -3150,6 +3346,7 @@ int ata_do_set_mode(struct ata_link *link, struct ata_device **r_failed_dev)
                        mode_mask = ATA_DMA_MASK_CFA;
 
                ata_dev_xfermask(dev);
+               ata_force_xfermask(dev);
 
                pio_mask = ata_pack_xfermask(dev->pio_mask, 0, 0);
                dma_mask = ata_pack_xfermask(0, dev->mwdma_mask, dev->udma_mask);
@@ -6497,7 +6694,8 @@ void ata_link_init(struct ata_port *ap, struct ata_link *link, int pmp)
  */
 int sata_link_init_spd(struct ata_link *link)
 {
-       u32 scontrol, spd;
+       u32 scontrol;
+       u8 spd;
        int rc;
 
        rc = sata_scr_read(link, SCR_CONTROL, &scontrol);
@@ -6508,6 +6706,8 @@ int sata_link_init_spd(struct ata_link *link)
        if (spd)
                link->hw_sata_spd_limit &= (1 << spd) - 1;
 
+       ata_force_spd_limit(link);
+
        link->sata_spd_limit = link->hw_sata_spd_limit;
 
        return 0;
@@ -7218,10 +7418,187 @@ int ata_pci_device_resume(struct pci_dev *pdev)
 
 #endif /* CONFIG_PCI */
 
+static int __init ata_parse_force_one(char **cur,
+                                     struct ata_force_ent *force_ent,
+                                     const char **reason)
+{
+       /* FIXME: Currently, there's no way to tag init const data and
+        * using __initdata causes build failure on some versions of
+        * gcc.  Once __initdataconst is implemented, add const to the
+        * following structure.
+        */
+       static struct ata_force_param force_tbl[] __initdata = {
+               { "40c",        .cbl            = ATA_CBL_PATA40 },
+               { "80c",        .cbl            = ATA_CBL_PATA80 },
+               { "short40c",   .cbl            = ATA_CBL_PATA40_SHORT },
+               { "unk",        .cbl            = ATA_CBL_PATA_UNK },
+               { "ign",        .cbl            = ATA_CBL_PATA_IGN },
+               { "sata",       .cbl            = ATA_CBL_SATA },
+               { "1.5Gbps",    .spd_limit      = 1 },
+               { "3.0Gbps",    .spd_limit      = 2 },
+               { "noncq",      .horkage_on     = ATA_HORKAGE_NONCQ },
+               { "ncq",        .horkage_off    = ATA_HORKAGE_NONCQ },
+               { "pio0",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 0) },
+               { "pio1",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 1) },
+               { "pio2",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 2) },
+               { "pio3",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 3) },
+               { "pio4",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 4) },
+               { "pio5",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 5) },
+               { "pio6",       .xfer_mask      = 1 << (ATA_SHIFT_PIO + 6) },
+               { "mwdma0",     .xfer_mask      = 1 << (ATA_SHIFT_MWDMA + 0) },
+               { "mwdma1",     .xfer_mask      = 1 << (ATA_SHIFT_MWDMA + 1) },
+               { "mwdma2",     .xfer_mask      = 1 << (ATA_SHIFT_MWDMA + 2) },
+               { "mwdma3",     .xfer_mask      = 1 << (ATA_SHIFT_MWDMA + 3) },
+               { "mwdma4",     .xfer_mask      = 1 << (ATA_SHIFT_MWDMA + 4) },
+               { "udma0",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 0) },
+               { "udma16",     .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 0) },
+               { "udma/16",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 0) },
+               { "udma1",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 1) },
+               { "udma25",     .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 1) },
+               { "udma/25",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 1) },
+               { "udma2",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 2) },
+               { "udma33",     .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 2) },
+               { "udma/33",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 2) },
+               { "udma3",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 3) },
+               { "udma44",     .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 3) },
+               { "udma/44",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 3) },
+               { "udma4",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 4) },
+               { "udma66",     .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 4) },
+               { "udma/66",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 4) },
+               { "udma5",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 5) },
+               { "udma100",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 5) },
+               { "udma/100",   .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 5) },
+               { "udma6",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 6) },
+               { "udma133",    .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 6) },
+               { "udma/133",   .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 6) },
+               { "udma7",      .xfer_mask      = 1 << (ATA_SHIFT_UDMA + 7) },
+       };
+       char *start = *cur, *p = *cur;
+       char *id, *val, *endp;
+       const struct ata_force_param *match_fp = NULL;
+       int nr_matches = 0, i;
+
+       /* find where this param ends and update *cur */
+       while (*p != '\0' && *p != ',')
+               p++;
+
+       if (*p == '\0')
+               *cur = p;
+       else
+               *cur = p + 1;
+
+       *p = '\0';
+
+       /* parse */
+       p = strchr(start, ':');
+       if (!p) {
+               val = strstrip(start);
+               goto parse_val;
+       }
+       *p = '\0';
+
+       id = strstrip(start);
+       val = strstrip(p + 1);
+
+       /* parse id */
+       p = strchr(id, '.');
+       if (p) {
+               *p++ = '\0';
+               force_ent->device = simple_strtoul(p, &endp, 10);
+               if (p == endp || *endp != '\0') {
+                       *reason = "invalid device";
+                       return -EINVAL;
+               }
+       }
+
+       force_ent->port = simple_strtoul(id, &endp, 10);
+       if (p == endp || *endp != '\0') {
+               *reason = "invalid port/link";
+               return -EINVAL;
+       }
+
+ parse_val:
+       /* parse val, allow shortcuts so that both 1.5 and 1.5Gbps work */
+       for (i = 0; i < ARRAY_SIZE(force_tbl); i++) {
+               const struct ata_force_param *fp = &force_tbl[i];
+
+               if (strncasecmp(val, fp->name, strlen(val)))
+                       continue;
+
+               nr_matches++;
+               match_fp = fp;
+
+               if (strcasecmp(val, fp->name) == 0) {
+                       nr_matches = 1;
+                       break;
+               }
+       }
+
+       if (!nr_matches) {
+               *reason = "unknown value";
+               return -EINVAL;
+       }
+       if (nr_matches > 1) {
+               *reason = "ambigious value";
+               return -EINVAL;
+       }
+
+       force_ent->param = *match_fp;
+
+       return 0;
+}
+
+static void __init ata_parse_force_param(void)
+{
+       int idx = 0, size = 1;
+       int last_port = -1, last_device = -1;
+       char *p, *cur, *next;
+
+       /* calculate maximum number of params and allocate force_tbl */
+       for (p = ata_force_param_buf; *p; p++)
+               if (*p == ',')
+                       size++;
+
+       ata_force_tbl = kzalloc(sizeof(ata_force_tbl[0]) * size, GFP_KERNEL);
+       if (!ata_force_tbl) {
+               printk(KERN_WARNING "ata: failed to extend force table, "
+                      "libata.force ignored\n");
+               return;
+       }
+
+       /* parse and populate the table */
+       for (cur = ata_force_param_buf; *cur != '\0'; cur = next) {
+               const char *reason = "";
+               struct ata_force_ent te = { .port = -1, .device = -1 };
+
+               next = cur;
+               if (ata_parse_force_one(&next, &te, &reason)) {
+                       printk(KERN_WARNING "ata: failed to parse force "
+                              "parameter \"%s\" (%s)\n",
+                              cur, reason);
+                       continue;
+               }
+
+               if (te.port == -1) {
+                       te.port = last_port;
+                       te.device = last_device;
+               }
+
+               ata_force_tbl[idx++] = te;
+
+               last_port = te.port;
+               last_device = te.device;
+       }
+
+       ata_force_tbl_size = idx;
+}
 
 static int __init ata_init(void)
 {
        ata_probe_timeout *= HZ;
+
+       ata_parse_force_param();
+
        ata_wq = create_workqueue("ata");
        if (!ata_wq)
                return -ENOMEM;
@@ -7238,6 +7615,7 @@ static int __init ata_init(void)
 
 static void __exit ata_exit(void)
 {
+       kfree(ata_force_tbl);
        destroy_workqueue(ata_wq);
        destroy_workqueue(ata_aux_wq);
 }
index 4e31071acc02b15f270a2f76ea752b4a4896f822..698ce2cea52c6be6689158a27d2688043985398b 100644 (file)
@@ -2393,9 +2393,11 @@ static int ata_eh_revalidate_and_attach(struct ata_link *link,
        }
 
        /* PDIAG- should have been released, ask cable type if post-reset */
-       if (ata_is_host_link(link) && ap->ops->cable_detect &&
-           (ehc->i.flags & ATA_EHI_DID_RESET))
-               ap->cbl = ap->ops->cable_detect(ap);
+       if ((ehc->i.flags & ATA_EHI_DID_RESET) && ata_is_host_link(link)) {
+               if (ap->ops->cable_detect)
+                       ap->cbl = ap->ops->cable_detect(ap);
+               ata_force_cbl(ap);
+       }
 
        /* Configure new devices forward such that user doesn't see
         * device detection messages backwards.
index dd41b1a1b304fa3921ca69666a71d91d157e2f33..f888babc8283cc3512c2932769ff9bfc50a570de 100644 (file)
@@ -828,7 +828,7 @@ static void ata_scsi_sdev_config(struct scsi_device *sdev)
 
 /**
  *     atapi_drain_needed - Check whether data transfer may overflow
- *     @request: request to be checked
+ *     @rq: request to be checked
  *
  *     ATAPI commands which transfer variable length data to host
  *     might overflow due to application error or hardare bug.  This
index 409ffb9af16321ead378f8554bfbf9684c6ca5ce..6036dedfe377579b494a85cff095a793d2b3331d 100644 (file)
@@ -61,6 +61,7 @@ extern int atapi_passthru16;
 extern int libata_fua;
 extern int libata_noacpi;
 extern int libata_allow_tpm;
+extern void ata_force_cbl(struct ata_port *ap);
 extern struct ata_queued_cmd *ata_qc_new_init(struct ata_device *dev);
 extern int ata_build_rw_tf(struct ata_taskfile *tf, struct ata_device *dev,
                           u64 block, u32 n_block, unsigned int tf_flags,
index d2177f75078adf540f05c835b22fa4b6df0e852d..50fe08ebe23c49c13fd4d115b0af6e34ccc04c4d 100644 (file)
@@ -774,14 +774,14 @@ static struct ata_port_operations opti82c46x_port_ops = {
 static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -790,9 +790,9 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
        }
        timing = (recovery << 4) | active | 0x08;
 
-       qdi->clock[adev->devno] = timing;
+       ld_qdi->clock[adev->devno] = timing;
 
-       outb(timing, qdi->timing);
+       outb(timing, ld_qdi->timing);
 }
 
 /**
@@ -808,14 +808,14 @@ static void qdi6500_set_piomode(struct ata_port *ap, struct ata_device *adev)
 static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -824,12 +824,12 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
        }
        timing = (recovery << 4) | active | 0x08;
 
-       qdi->clock[adev->devno] = timing;
+       ld_qdi->clock[adev->devno] = timing;
 
-       outb(timing, qdi->timing + 2 * ap->port_no);
+       outb(timing, ld_qdi->timing + 2 * ap->port_no);
        /* Clear the FIFO */
        if (adev->class != ATA_DEV_ATA)
-               outb(0x5F, qdi->timing + 3);
+               outb(0x5F, ld_qdi->timing + 3);
 }
 
 /**
@@ -845,14 +845,14 @@ static void qdi6580dp_set_piomode(struct ata_port *ap, struct ata_device *adev)
 static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
        int active, recovery;
        u8 timing;
 
        /* Get the timing data in cycles */
        ata_timing_compute(adev, adev->pio_mode, &t, 30303, 1000);
 
-       if (qdi->fast) {
+       if (ld_qdi->fast) {
                active = 8 - FIT(t.active, 1, 8);
                recovery = 18 - FIT(t.recover, 3, 18);
        } else {
@@ -860,11 +860,11 @@ static void qdi6580_set_piomode(struct ata_port *ap, struct ata_device *adev)
                recovery = 15 - FIT(t.recover, 0, 15);
        }
        timing = (recovery << 4) | active | 0x08;
-       qdi->clock[adev->devno] = timing;
-       outb(timing, qdi->timing + 2 * adev->devno);
+       ld_qdi->clock[adev->devno] = timing;
+       outb(timing, ld_qdi->timing + 2 * adev->devno);
        /* Clear the FIFO */
        if (adev->class != ATA_DEV_ATA)
-               outb(0x5F, qdi->timing + 3);
+               outb(0x5F, ld_qdi->timing + 3);
 }
 
 /**
@@ -879,12 +879,12 @@ static unsigned int qdi_qc_issue_prot(struct ata_queued_cmd *qc)
 {
        struct ata_port *ap = qc->ap;
        struct ata_device *adev = qc->dev;
-       struct legacy_data *qdi = ap->host->private_data;
+       struct legacy_data *ld_qdi = ap->host->private_data;
 
-       if (qdi->clock[adev->devno] != qdi->last) {
+       if (ld_qdi->clock[adev->devno] != ld_qdi->last) {
                if (adev->pio_mode) {
-                       qdi->last = qdi->clock[adev->devno];
-                       outb(qdi->clock[adev->devno], qdi->timing +
+                       ld_qdi->last = ld_qdi->clock[adev->devno];
+                       outb(ld_qdi->clock[adev->devno], ld_qdi->timing +
                                                        2 * ap->port_no);
                }
        }
@@ -1037,12 +1037,12 @@ static u8 winbond_readcfg(unsigned long port, u8 reg)
 static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
 {
        struct ata_timing t;
-       struct legacy_data *winbond = ap->host->private_data;
+       struct legacy_data *ld_winbond = ap->host->private_data;
        int active, recovery;
        u8 reg;
        int timing = 0x88 + (ap->port_no * 4) + (adev->devno * 2);
 
-       reg = winbond_readcfg(winbond->timing, 0x81);
+       reg = winbond_readcfg(ld_winbond->timing, 0x81);
 
        /* Get the timing data in cycles */
        if (reg & 0x40)         /* Fast VLB bus, assume 50MHz */
@@ -1053,7 +1053,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
        active = (FIT(t.active, 3, 17) - 1) & 0x0F;
        recovery = (FIT(t.recover, 1, 15) + 1) & 0x0F;
        timing = (active << 4) | recovery;
-       winbond_writecfg(winbond->timing, timing, reg);
+       winbond_writecfg(ld_winbond->timing, timing, reg);
 
        /* Load the setup timing */
 
@@ -1063,7 +1063,7 @@ static void winbond_set_piomode(struct ata_port *ap, struct ata_device *adev)
        if (!ata_pio_need_iordy(adev))
                reg |= 0x02;    /* IORDY off */
        reg |= (FIT(t.setup, 0, 3) << 6);
-       winbond_writecfg(winbond->timing, timing + 1, reg);
+       winbond_writecfg(ld_winbond->timing, timing + 1, reg);
 }
 
 static int winbond_port(struct platform_device *dev,
index 1c1fbf375d9af979957913fe3acdff359adf5538..6ebebde8454a939b3e564c15998cd624ca363261 100644 (file)
@@ -870,7 +870,7 @@ static void mv_start_dma(struct ata_port *ap, void __iomem *port_mmio,
                struct mv_host_priv *hpriv = ap->host->private_data;
                int hard_port = mv_hardport_from_port(ap->port_no);
                void __iomem *hc_mmio = mv_hc_base_from_port(
-                               ap->host->iomap[MV_PRIMARY_BAR], hard_port);
+                                       mv_host_base(ap->host), hard_port);
                u32 hc_irq_cause, ipending;
 
                /* clear EDMA event indicators, if any */
@@ -2947,7 +2947,8 @@ static int mv_platform_probe(struct platform_device *pdev)
        hpriv->n_ports = n_ports;
 
        host->iomap = NULL;
-       hpriv->base = ioremap(res->start, res->end - res->start + 1);
+       hpriv->base = devm_ioremap(&pdev->dev, res->start,
+                                  res->end - res->start + 1);
        hpriv->base -= MV_SATAHC0_REG_BASE;
 
        rc = mv_create_dma_pools(hpriv, &pdev->dev);
@@ -2979,11 +2980,8 @@ static int __devexit mv_platform_remove(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        struct ata_host *host = dev_get_drvdata(dev);
-       struct mv_host_priv *hpriv = host->private_data;
-       void __iomem *base = hpriv->base;
 
        ata_host_detach(host);
-       iounmap(base);
        return 0;
 }
 
@@ -3194,6 +3192,7 @@ MODULE_DESCRIPTION("SCSI low-level driver for Marvell SATA controllers");
 MODULE_LICENSE("GPL");
 MODULE_DEVICE_TABLE(pci, mv_pci_tbl);
 MODULE_VERSION(DRV_VERSION);
+MODULE_ALIAS("platform:sata_mv");
 
 #ifdef CONFIG_PCI
 module_param(msi, int, 0444);
index bdc03f7e8424ceda39d454413a76d637a9215418..a96ca86a7b4aff74ef6c3c11cdf8571965311870 100644 (file)
@@ -415,7 +415,7 @@ EXPORT_SYMBOL_GPL(device_power_down);
  *     @dev:   Device.
  *     @state: Power state device is entering.
  */
-int suspend_device(struct device *dev, pm_message_t state)
+static int suspend_device(struct device *dev, pm_message_t state)
 {
        int error = 0;
 
index 87be46406dafdc201e5da80cd5faabd7dd1060da..d28669992147556cb6107d5fe3f8de9bb4d4264a 100644 (file)
@@ -41,6 +41,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
        if (page_map->real == NULL)
                return -ENOMEM;
 
+#ifndef CONFIG_X86
        SetPageReserved(virt_to_page(page_map->real));
        global_cache_flush();
        page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
@@ -52,6 +53,10 @@ static int amd_create_page_map(struct amd_page_map *page_map)
                return -ENOMEM;
        }
        global_cache_flush();
+#else
+       set_memory_uc((unsigned long)page_map->real, 1);
+       page_map->remapped = page_map->real;
+#endif
 
        for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) {
                writel(agp_bridge->scratch_page, page_map->remapped+i);
@@ -63,8 +68,12 @@ static int amd_create_page_map(struct amd_page_map *page_map)
 
 static void amd_free_page_map(struct amd_page_map *page_map)
 {
+#ifndef CONFIG_X86
        iounmap(page_map->remapped);
        ClearPageReserved(virt_to_page(page_map->real));
+#else
+       set_memory_wb((unsigned long)page_map->real, 1);
+#endif
        free_page((unsigned long) page_map->real);
 }
 
index 2d46b713c8f2a9f7ee5e54a5180ede15f270c29c..55c97f623242e0a0fdb559d13fe1515aa26f7c7b 100644 (file)
@@ -60,18 +60,9 @@ static int ati_create_page_map(struct ati_page_map *page_map)
        if (page_map->real == NULL)
                return -ENOMEM;
 
-       SetPageReserved(virt_to_page(page_map->real));
+       set_memory_uc((unsigned long)page_map->real, 1);
        err = map_page_into_agp(virt_to_page(page_map->real));
-       page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
-                                           PAGE_SIZE);
-       if (page_map->remapped == NULL || err) {
-               ClearPageReserved(virt_to_page(page_map->real));
-               free_page((unsigned long) page_map->real);
-               page_map->real = NULL;
-               return -ENOMEM;
-       }
-       /*CACHE_FLUSH();*/
-       global_cache_flush();
+       page_map->remapped = page_map->real;
 
        for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) {
                writel(agp_bridge->scratch_page, page_map->remapped+i);
@@ -85,8 +76,7 @@ static int ati_create_page_map(struct ati_page_map *page_map)
 static void ati_free_page_map(struct ati_page_map *page_map)
 {
        unmap_page_from_agp(virt_to_page(page_map->real));
-       iounmap(page_map->remapped);
-       ClearPageReserved(virt_to_page(page_map->real));
+       set_memory_wb((unsigned long)page_map->real, 1);
        free_page((unsigned long) page_map->real);
 }
 
index 7484bc759c4ccb8e2fb2fa407e68ae38e5936dae..7fc0c99a3a5850cc939cbe8e3909840c0748c3d6 100644 (file)
@@ -932,9 +932,14 @@ int agp_generic_create_gatt_table(struct agp_bridge_data *bridge)
        agp_gatt_table = (void *)table;
 
        bridge->driver->cache_flush();
+#ifdef CONFIG_X86
+       set_memory_uc((unsigned long)table, 1 << page_order);
+       bridge->gatt_table = (void *)table;
+#else
        bridge->gatt_table = ioremap_nocache(virt_to_gart(table),
                                        (PAGE_SIZE * (1 << page_order)));
        bridge->driver->cache_flush();
+#endif
 
        if (bridge->gatt_table == NULL) {
                for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
@@ -991,7 +996,11 @@ int agp_generic_free_gatt_table(struct agp_bridge_data *bridge)
         * called, then all agp memory is deallocated and removed
         * from the table. */
 
+#ifdef CONFIG_X86
+       set_memory_wb((unsigned long)bridge->gatt_table, 1 << page_order);
+#else
        iounmap(bridge->gatt_table);
+#endif
        table = (char *) bridge->gatt_table_real;
        table_end = table + ((PAGE_SIZE * (1 << page_order)) - 1);
 
index eb1a1c7381900dddec1d173ff530e0b24fe08c56..b6791846809fc7cda691146ff625befac1342bec 100644 (file)
@@ -14,6 +14,9 @@
 #define SIS_TLBCNTRL   0x97
 #define SIS_TLBFLUSH   0x98
 
+#define PCI_DEVICE_ID_SI_662   0x0662
+#define PCI_DEVICE_ID_SI_671   0x0671
+
 static int __devinitdata agp_sis_force_delay = 0;
 static int __devinitdata agp_sis_agp_spec = -1;
 
@@ -27,8 +30,8 @@ static int sis_fetch_size(void)
        values = A_SIZE_8(agp_bridge->driver->aperture_sizes);
        for (i = 0; i < agp_bridge->driver->num_aperture_sizes; i++) {
                if ((temp_size == values[i].size_value) ||
-                   ((temp_size & ~(0x03)) ==
-                    (values[i].size_value & ~(0x03)))) {
+                   ((temp_size & ~(0x07)) ==
+                    (values[i].size_value & ~(0x07)))) {
                        agp_bridge->previous_size =
                            agp_bridge->current_size = (void *) (values + i);
 
@@ -214,6 +217,26 @@ static void __devexit agp_sis_remove(struct pci_dev *pdev)
        agp_put_bridge(bridge);
 }
 
+#ifdef CONFIG_PM
+
+static int agp_sis_suspend(struct pci_dev *pdev, pm_message_t state)
+{
+       pci_save_state(pdev);
+       pci_set_power_state(pdev, pci_choose_state(pdev, state));
+
+       return 0;
+}
+
+static int agp_sis_resume(struct pci_dev *pdev)
+{
+       pci_set_power_state(pdev, PCI_D0);
+       pci_restore_state(pdev);
+
+       return sis_driver.configure();
+}
+
+#endif /* CONFIG_PM */
+
 static struct pci_device_id agp_sis_pci_table[] = {
        {
                .class          = (PCI_CLASS_BRIDGE_HOST << 8),
@@ -327,6 +350,22 @@ static struct pci_device_id agp_sis_pci_table[] = {
                .subvendor      = PCI_ANY_ID,
                .subdevice      = PCI_ANY_ID,
        },
+       {
+               .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+               .class_mask     = ~0,
+               .vendor         = PCI_VENDOR_ID_SI,
+               .device         = PCI_DEVICE_ID_SI_662,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+       },
+       {
+               .class          = (PCI_CLASS_BRIDGE_HOST << 8),
+               .class_mask     = ~0,
+               .vendor         = PCI_VENDOR_ID_SI,
+               .device         = PCI_DEVICE_ID_SI_671,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+       },
        {
                .class          = (PCI_CLASS_BRIDGE_HOST << 8),
                .class_mask     = ~0,
@@ -393,6 +432,10 @@ static struct pci_driver agp_sis_pci_driver = {
        .id_table       = agp_sis_pci_table,
        .probe          = agp_sis_probe,
        .remove         = agp_sis_remove,
+#ifdef CONFIG_PM
+       .suspend        = agp_sis_suspend,
+       .resume         = agp_sis_resume,
+#endif
 };
 
 static int __init agp_sis_init(void)
index 551ef25063efc9c705474e524f8358112047473d..e08934e58f32bc77b2292f2cbf1a24ca34fbb24f 100644 (file)
@@ -52,28 +52,20 @@ static int serverworks_create_page_map(struct serverworks_page_map *page_map)
        if (page_map->real == NULL) {
                return -ENOMEM;
        }
-       SetPageReserved(virt_to_page(page_map->real));
-       global_cache_flush();
-       page_map->remapped = ioremap_nocache(virt_to_gart(page_map->real),
-                                           PAGE_SIZE);
-       if (page_map->remapped == NULL) {
-               ClearPageReserved(virt_to_page(page_map->real));
-               free_page((unsigned long) page_map->real);
-               page_map->real = NULL;
-               return -ENOMEM;
-       }
-       global_cache_flush();
+
+       set_memory_uc((unsigned long)page_map->real, 1);
+       page_map->remapped = page_map->real;
 
        for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++)
                writel(agp_bridge->scratch_page, page_map->remapped+i);
+               /* Red Pen: Everyone else does pci posting flush here */
 
        return 0;
 }
 
 static void serverworks_free_page_map(struct serverworks_page_map *page_map)
 {
-       iounmap(page_map->remapped);
-       ClearPageReserved(virt_to_page(page_map->real));
+       set_memory_wb((unsigned long)page_map->real, 1);
        free_page((unsigned long) page_map->real);
 }
 
index 19d3be5c4b2d73f9457834102e7ac25cc769cc4d..a6789f25009b4858c1370104883601220f83be79 100644 (file)
@@ -568,7 +568,7 @@ struct drm_driver {
        void (*postclose) (struct drm_device *, struct drm_file *);
        void (*lastclose) (struct drm_device *);
        int (*unload) (struct drm_device *);
-       int (*suspend) (struct drm_device *);
+       int (*suspend) (struct drm_device *, pm_message_t state);
        int (*resume) (struct drm_device *);
        int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
        void (*dma_ready) (struct drm_device *);
index f524688436786e9d4a3dbdd4f1c532c77dd36ae5..715b361f0c2b37d39bb27f9b663b305c58761fbb 100644 (file)
@@ -83,6 +83,7 @@
        {0x1002, 0x5460, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
        {0x1002, 0x5462, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
        {0x1002, 0x5464, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_IS_MOBILITY}, \
+       {0x1002, 0x5657, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV380|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x5548, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x5549, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x554A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_R420|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x7297, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RV560|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x7834, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_NEW_MEMMAP}, \
        {0x1002, 0x7835, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS300|RADEON_IS_IGP|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
+       {0x1002, 0x791e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_RS690|RADEON_IS_IGP|RADEON_NEW_MEMMAP|RADEON_IS_IGPGART}, \
        {0, 0, 0}
 
 #define r128_PCI_IDS \
        {0x1039, 0x5300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x1039, 0x6300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x1039, 0x6330, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
+       {0x1039, 0x6351, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x1039, 0x7300, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, \
        {0x18CA, 0x0040, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
        {0x18CA, 0x0042, PCI_ANY_ID, PCI_ANY_ID, 0, 0, SIS_CHIP_315}, \
index fa36153619e83a28696b1360de42c1776c943aec..05ed5043254fa4212fc6b36475902516b9c0954a 100644 (file)
@@ -36,7 +36,7 @@ static int drm_sysfs_suspend(struct device *dev, pm_message_t state)
        printk(KERN_ERR "%s\n", __FUNCTION__);
 
        if (drm_dev->driver->suspend)
-               return drm_dev->driver->suspend(drm_dev);
+               return drm_dev->driver->suspend(drm_dev, state);
 
        return 0;
 }
index cea4105374b2b8c284b1fa05bd7772cd40bbf9d4..3d65c4dcd0c661d9aa21fb9effdc5149c8eac005 100644 (file)
@@ -66,7 +66,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
 }
 
 /**
- * \c nopage method for AGP virtual memory.
+ * \c fault method for AGP virtual memory.
  *
  * \param vma virtual memory area.
  * \param address access address.
@@ -76,8 +76,7 @@ static pgprot_t drm_io_prot(uint32_t map_type, struct vm_area_struct *vma)
  * map, get the page, increment the use count and return it.
  */
 #if __OS_HAS_AGP
-static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
-                                               unsigned long address)
+static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
        struct drm_file *priv = vma->vm_file->private_data;
        struct drm_device *dev = priv->head->dev;
@@ -89,19 +88,24 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
         * Find the right map
         */
        if (!drm_core_has_AGP(dev))
-               goto vm_nopage_error;
+               goto vm_fault_error;
 
        if (!dev->agp || !dev->agp->cant_use_aperture)
-               goto vm_nopage_error;
+               goto vm_fault_error;
 
        if (drm_ht_find_item(&dev->map_hash, vma->vm_pgoff, &hash))
-               goto vm_nopage_error;
+               goto vm_fault_error;
 
        r_list = drm_hash_entry(hash, struct drm_map_list, hash);
        map = r_list->map;
 
        if (map && map->type == _DRM_AGP) {
-               unsigned long offset = address - vma->vm_start;
+               /*
+                * Using vm_pgoff as a selector forces us to use this unusual
+                * addressing scheme.
+                */
+               unsigned long offset = (unsigned long)vmf->virtual_address -
+                                                               vma->vm_start;
                unsigned long baddr = map->offset + offset;
                struct drm_agp_mem *agpmem;
                struct page *page;
@@ -123,7 +127,7 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
                }
 
                if (!agpmem)
-                       goto vm_nopage_error;
+                       goto vm_fault_error;
 
                /*
                 * Get the page, inc the use count, and return it
@@ -131,22 +135,21 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
                offset = (baddr - agpmem->bound) >> PAGE_SHIFT;
                page = virt_to_page(__va(agpmem->memory->memory[offset]));
                get_page(page);
+               vmf->page = page;
 
                DRM_DEBUG
                    ("baddr = 0x%lx page = 0x%p, offset = 0x%lx, count=%d\n",
                     baddr, __va(agpmem->memory->memory[offset]), offset,
                     page_count(page));
-
-               return page;
+               return 0;
        }
-      vm_nopage_error:
-       return NOPAGE_SIGBUS;   /* Disallow mremap */
+vm_fault_error:
+       return VM_FAULT_SIGBUS; /* Disallow mremap */
 }
 #else                          /* __OS_HAS_AGP */
-static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
-                                               unsigned long address)
+static int drm_do_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-       return NOPAGE_SIGBUS;
+       return VM_FAULT_SIGBUS;
 }
 #endif                         /* __OS_HAS_AGP */
 
@@ -160,28 +163,26 @@ static __inline__ struct page *drm_do_vm_nopage(struct vm_area_struct *vma,
  * Get the mapping, find the real physical page to map, get the page, and
  * return it.
  */
-static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
-                                                   unsigned long address)
+static int drm_do_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
        struct drm_map *map = (struct drm_map *) vma->vm_private_data;
        unsigned long offset;
        unsigned long i;
        struct page *page;
 
-       if (address > vma->vm_end)
-               return NOPAGE_SIGBUS;   /* Disallow mremap */
        if (!map)
-               return NOPAGE_SIGBUS;   /* Nothing allocated */
+               return VM_FAULT_SIGBUS; /* Nothing allocated */
 
-       offset = address - vma->vm_start;
+       offset = (unsigned long)vmf->virtual_address - vma->vm_start;
        i = (unsigned long)map->handle + offset;
        page = vmalloc_to_page((void *)i);
        if (!page)
-               return NOPAGE_SIGBUS;
+               return VM_FAULT_SIGBUS;
        get_page(page);
+       vmf->page = page;
 
-       DRM_DEBUG("0x%lx\n", address);
-       return page;
+       DRM_DEBUG("shm_fault 0x%lx\n", offset);
+       return 0;
 }
 
 /**
@@ -263,7 +264,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
 }
 
 /**
- * \c nopage method for DMA virtual memory.
+ * \c fault method for DMA virtual memory.
  *
  * \param vma virtual memory area.
  * \param address access address.
@@ -271,8 +272,7 @@ static void drm_vm_shm_close(struct vm_area_struct *vma)
  *
  * Determine the page number from the page offset and get it from drm_device_dma::pagelist.
  */
-static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
-                                                   unsigned long address)
+static int drm_do_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
        struct drm_file *priv = vma->vm_file->private_data;
        struct drm_device *dev = priv->head->dev;
@@ -282,24 +282,23 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
        struct page *page;
 
        if (!dma)
-               return NOPAGE_SIGBUS;   /* Error */
-       if (address > vma->vm_end)
-               return NOPAGE_SIGBUS;   /* Disallow mremap */
+               return VM_FAULT_SIGBUS; /* Error */
        if (!dma->pagelist)
-               return NOPAGE_SIGBUS;   /* Nothing allocated */
+               return VM_FAULT_SIGBUS; /* Nothing allocated */
 
-       offset = address - vma->vm_start;       /* vm_[pg]off[set] should be 0 */
-       page_nr = offset >> PAGE_SHIFT;
+       offset = (unsigned long)vmf->virtual_address - vma->vm_start;   /* vm_[pg]off[set] should be 0 */
+       page_nr = offset >> PAGE_SHIFT; /* page_nr could just be vmf->pgoff */
        page = virt_to_page((dma->pagelist[page_nr] + (offset & (~PAGE_MASK))));
 
        get_page(page);
+       vmf->page = page;
 
-       DRM_DEBUG("0x%lx (page %lu)\n", address, page_nr);
-       return page;
+       DRM_DEBUG("dma_fault 0x%lx (page %lu)\n", offset, page_nr);
+       return 0;
 }
 
 /**
- * \c nopage method for scatter-gather virtual memory.
+ * \c fault method for scatter-gather virtual memory.
  *
  * \param vma virtual memory area.
  * \param address access address.
@@ -307,8 +306,7 @@ static __inline__ struct page *drm_do_vm_dma_nopage(struct vm_area_struct *vma,
  *
  * Determine the map offset from the page offset and get it from drm_sg_mem::pagelist.
  */
-static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
-                                                  unsigned long address)
+static int drm_do_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
        struct drm_map *map = (struct drm_map *) vma->vm_private_data;
        struct drm_file *priv = vma->vm_file->private_data;
@@ -320,77 +318,64 @@ static __inline__ struct page *drm_do_vm_sg_nopage(struct vm_area_struct *vma,
        struct page *page;
 
        if (!entry)
-               return NOPAGE_SIGBUS;   /* Error */
-       if (address > vma->vm_end)
-               return NOPAGE_SIGBUS;   /* Disallow mremap */
+               return VM_FAULT_SIGBUS; /* Error */
        if (!entry->pagelist)
-               return NOPAGE_SIGBUS;   /* Nothing allocated */
+               return VM_FAULT_SIGBUS; /* Nothing allocated */
 
-       offset = address - vma->vm_start;
+       offset = (unsigned long)vmf->virtual_address - vma->vm_start;
        map_offset = map->offset - (unsigned long)dev->sg->virtual;
        page_offset = (offset >> PAGE_SHIFT) + (map_offset >> PAGE_SHIFT);
        page = entry->pagelist[page_offset];
        get_page(page);
+       vmf->page = page;
 
-       return page;
+       return 0;
 }
 
-static struct page *drm_vm_nopage(struct vm_area_struct *vma,
-                                 unsigned long address, int *type)
+static int drm_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-       if (type)
-               *type = VM_FAULT_MINOR;
-       return drm_do_vm_nopage(vma, address);
+       return drm_do_vm_fault(vma, vmf);
 }
 
-static struct page *drm_vm_shm_nopage(struct vm_area_struct *vma,
-                                     unsigned long address, int *type)
+static int drm_vm_shm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-       if (type)
-               *type = VM_FAULT_MINOR;
-       return drm_do_vm_shm_nopage(vma, address);
+       return drm_do_vm_shm_fault(vma, vmf);
 }
 
-static struct page *drm_vm_dma_nopage(struct vm_area_struct *vma,
-                                     unsigned long address, int *type)
+static int drm_vm_dma_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-       if (type)
-               *type = VM_FAULT_MINOR;
-       return drm_do_vm_dma_nopage(vma, address);
+       return drm_do_vm_dma_fault(vma, vmf);
 }
 
-static struct page *drm_vm_sg_nopage(struct vm_area_struct *vma,
-                                    unsigned long address, int *type)
+static int drm_vm_sg_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
 {
-       if (type)
-               *type = VM_FAULT_MINOR;
-       return drm_do_vm_sg_nopage(vma, address);
+       return drm_do_vm_sg_fault(vma, vmf);
 }
 
 /** AGP virtual memory operations */
 static struct vm_operations_struct drm_vm_ops = {
-       .nopage = drm_vm_nopage,
+       .fault = drm_vm_fault,
        .open = drm_vm_open,
        .close = drm_vm_close,
 };
 
 /** Shared virtual memory operations */
 static struct vm_operations_struct drm_vm_shm_ops = {
-       .nopage = drm_vm_shm_nopage,
+       .fault = drm_vm_shm_fault,
        .open = drm_vm_open,
        .close = drm_vm_shm_close,
 };
 
 /** DMA virtual memory operations */
 static struct vm_operations_struct drm_vm_dma_ops = {
-       .nopage = drm_vm_dma_nopage,
+       .fault = drm_vm_dma_fault,
        .open = drm_vm_open,
        .close = drm_vm_close,
 };
 
 /** Scatter-gather virtual memory operations */
 static struct vm_operations_struct drm_vm_sg_ops = {
-       .nopage = drm_vm_sg_nopage,
+       .fault = drm_vm_sg_fault,
        .open = drm_vm_open,
        .close = drm_vm_close,
 };
@@ -604,7 +589,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
                        /*
                         * On some platforms we can't talk to bus dma address from the CPU, so for
                         * memory of type DRM_AGP, we'll deal with sorting out the real physical
-                        * pages and mappings in nopage()
+                        * pages and mappings in fault()
                         */
 #if defined(__powerpc__)
                        pgprot_val(vma->vm_page_prot) |= _PAGE_NO_CACHE;
@@ -634,7 +619,7 @@ static int drm_mmap_locked(struct file *filp, struct vm_area_struct *vma)
                break;
        case _DRM_CONSISTENT:
                /* Consistent memory is really like shared memory. But
-                * it's allocated in a different way, so avoid nopage */
+                * it's allocated in a different way, so avoid fault */
                if (remap_pfn_range(vma, vma->vm_start,
                    page_to_pfn(virt_to_page(map->handle)),
                    vma->vm_end - vma->vm_start, vma->vm_page_prot))
index 43986d81ae34f4b26fd8b1c4f717f1ae0ea13c17..e9d6663bec73ec5e9a2642d6af29bab81b0b9f40 100644 (file)
@@ -171,7 +171,7 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
        dev_priv->allow_batchbuffer = 1;
 
        /* Program Hardware Status Page */
-       if (!IS_G33(dev)) {
+       if (!I915_NEED_GFX_HWS(dev)) {
                dev_priv->status_page_dmah =
                        drm_pci_alloc(dev, PAGE_SIZE, PAGE_SIZE, 0xffffffff);
 
@@ -720,6 +720,9 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
        drm_i915_private_t *dev_priv = dev->dev_private;
        drm_i915_hws_addr_t *hws = data;
 
+       if (!I915_NEED_GFX_HWS(dev))
+               return -EINVAL;
+
        if (!dev_priv) {
                DRM_ERROR("called with no initialization\n");
                return -EINVAL;
index 52e51033d32c47d21bf487fccb86205c15620837..4048f39b7eed3acfad6b31b6e73b0c63ef73efc4 100644 (file)
@@ -160,6 +160,7 @@ static void i915_save_vga(struct drm_device *dev)
                dev_priv->saveAR[i] = i915_read_ar(st01, i, 0);
        inb(st01);
        outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX);
+       inb(st01);
 
        /* Graphics controller registers */
        for (i = 0; i < 9; i++)
@@ -225,6 +226,7 @@ static void i915_restore_vga(struct drm_device *dev)
                i915_write_ar(st01, i, dev_priv->saveAR[i], 0);
        inb(st01); /* switch back to index mode */
        outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX);
+       inb(st01);
 
        /* VGA color palette registers */
        outb(dev_priv->saveDACMASK, VGA_DACMASK);
@@ -236,7 +238,7 @@ static void i915_restore_vga(struct drm_device *dev)
 
 }
 
-static int i915_suspend(struct drm_device *dev)
+static int i915_suspend(struct drm_device *dev, pm_message_t state)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
        int i;
@@ -247,6 +249,9 @@ static int i915_suspend(struct drm_device *dev)
                return -ENODEV;
        }
 
+       if (state.event == PM_EVENT_PRETHAW)
+               return 0;
+
        pci_save_state(dev->pdev);
        pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB);
 
@@ -276,6 +281,7 @@ static int i915_suspend(struct drm_device *dev)
                dev_priv->saveDSPATILEOFF = I915_READ(DSPATILEOFF);
        }
        i915_save_palette(dev, PIPE_A);
+       dev_priv->savePIPEASTAT = I915_READ(I915REG_PIPEASTAT);
 
        /* Pipe & plane B info */
        dev_priv->savePIPEBCONF = I915_READ(PIPEBCONF);
@@ -303,6 +309,7 @@ static int i915_suspend(struct drm_device *dev)
                dev_priv->saveDSPBTILEOFF = I915_READ(DSPBTILEOFF);
        }
        i915_save_palette(dev, PIPE_B);
+       dev_priv->savePIPEBSTAT = I915_READ(I915REG_PIPEBSTAT);
 
        /* CRT state */
        dev_priv->saveADPA = I915_READ(ADPA);
@@ -329,12 +336,26 @@ static int i915_suspend(struct drm_device *dev)
        dev_priv->saveFBC_CONTROL2 = I915_READ(FBC_CONTROL2);
        dev_priv->saveFBC_CONTROL = I915_READ(FBC_CONTROL);
 
+       /* Interrupt state */
+       dev_priv->saveIIR = I915_READ(I915REG_INT_IDENTITY_R);
+       dev_priv->saveIER = I915_READ(I915REG_INT_ENABLE_R);
+       dev_priv->saveIMR = I915_READ(I915REG_INT_MASK_R);
+
        /* VGA state */
        dev_priv->saveVCLK_DIVISOR_VGA0 = I915_READ(VCLK_DIVISOR_VGA0);
        dev_priv->saveVCLK_DIVISOR_VGA1 = I915_READ(VCLK_DIVISOR_VGA1);
        dev_priv->saveVCLK_POST_DIV = I915_READ(VCLK_POST_DIV);
        dev_priv->saveVGACNTRL = I915_READ(VGACNTRL);
 
+       /* Clock gating state */
+       dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D);
+
+       /* Cache mode state */
+       dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
+
+       /* Memory Arbitration state */
+       dev_priv->saveMI_ARB_STATE = I915_READ(MI_ARB_STATE);
+
        /* Scratch space */
        for (i = 0; i < 16; i++) {
                dev_priv->saveSWF0[i] = I915_READ(SWF0 + (i << 2));
@@ -345,9 +366,11 @@ static int i915_suspend(struct drm_device *dev)
 
        i915_save_vga(dev);
 
-       /* Shut down the device */
-       pci_disable_device(dev->pdev);
-       pci_set_power_state(dev->pdev, PCI_D3hot);
+       if (state.event == PM_EVENT_SUSPEND) {
+               /* Shut down the device */
+               pci_disable_device(dev->pdev);
+               pci_set_power_state(dev->pdev, PCI_D3hot);
+       }
 
        return 0;
 }
@@ -400,9 +423,7 @@ static int i915_resume(struct drm_device *dev)
                I915_WRITE(DSPATILEOFF, dev_priv->saveDSPATILEOFF);
        }
 
-       if ((dev_priv->saveDPLL_A & DPLL_VCO_ENABLE) &&
-           (dev_priv->saveDPLL_A & DPLL_VGA_MODE_DIS))
-               I915_WRITE(PIPEACONF, dev_priv->savePIPEACONF);
+       I915_WRITE(PIPEACONF, dev_priv->savePIPEACONF);
 
        i915_restore_palette(dev, PIPE_A);
        /* Enable the plane */
@@ -444,10 +465,9 @@ static int i915_resume(struct drm_device *dev)
                I915_WRITE(DSPBTILEOFF, dev_priv->saveDSPBTILEOFF);
        }
 
-       if ((dev_priv->saveDPLL_B & DPLL_VCO_ENABLE) &&
-           (dev_priv->saveDPLL_B & DPLL_VGA_MODE_DIS))
-               I915_WRITE(PIPEBCONF, dev_priv->savePIPEBCONF);
-       i915_restore_palette(dev, PIPE_A);
+       I915_WRITE(PIPEBCONF, dev_priv->savePIPEBCONF);
+
+       i915_restore_palette(dev, PIPE_B);
        /* Enable the plane */
        I915_WRITE(DSPBCNTR, dev_priv->saveDSPBCNTR);
        I915_WRITE(DSPBBASE, I915_READ(DSPBBASE));
@@ -485,6 +505,15 @@ static int i915_resume(struct drm_device *dev)
        I915_WRITE(VCLK_POST_DIV, dev_priv->saveVCLK_POST_DIV);
        udelay(150);
 
+       /* Clock gating state */
+       I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D);
+
+       /* Cache mode state */
+       I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
+
+       /* Memory arbitration state */
+       I915_WRITE (MI_ARB_STATE, dev_priv->saveMI_ARB_STATE | 0xffff0000);
+
        for (i = 0; i < 16; i++) {
                I915_WRITE(SWF0 + (i << 2), dev_priv->saveSWF0[i]);
                I915_WRITE(SWF10 + (i << 2), dev_priv->saveSWF1[i+7]);
index f8308bfb26131ced8c68fa0d5fdf2a1220b1f993..c10d128e34dbd08beb949eef706d3ab11cee3a71 100644 (file)
@@ -134,6 +134,7 @@ typedef struct drm_i915_private {
        u32 saveVBLANK_A;
        u32 saveVSYNC_A;
        u32 saveBCLRPAT_A;
+       u32 savePIPEASTAT;
        u32 saveDSPASTRIDE;
        u32 saveDSPASIZE;
        u32 saveDSPAPOS;
@@ -154,6 +155,7 @@ typedef struct drm_i915_private {
        u32 saveVBLANK_B;
        u32 saveVSYNC_B;
        u32 saveBCLRPAT_B;
+       u32 savePIPEBSTAT;
        u32 saveDSPBSTRIDE;
        u32 saveDSPBSIZE;
        u32 saveDSPBPOS;
@@ -182,6 +184,12 @@ typedef struct drm_i915_private {
        u32 saveFBC_LL_BASE;
        u32 saveFBC_CONTROL;
        u32 saveFBC_CONTROL2;
+       u32 saveIER;
+       u32 saveIIR;
+       u32 saveIMR;
+       u32 saveCACHE_MODE_0;
+       u32 saveDSPCLK_GATE_D;
+       u32 saveMI_ARB_STATE;
        u32 saveSWF0[16];
        u32 saveSWF1[16];
        u32 saveSWF2[3];
@@ -450,6 +458,10 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
  */
 #define DMA_FADD_S             0x20d4
 
+/* Memory Interface Arbitration State
+ */
+#define MI_ARB_STATE           0x20e4
+
 /* Cache mode 0 reg.
  *  - Manipulating render cache behaviour is central
  *    to the concept of zone rendering, tuning this reg can help avoid
@@ -460,6 +472,7 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
  * bit of interest either set or cleared.  EG: (BIT<<16) | BIT to set.
  */
 #define Cache_Mode_0           0x2120
+#define CACHE_MODE_0           0x2120
 #define CM0_MASK_SHIFT          16
 #define CM0_IZ_OPT_DISABLE      (1<<6)
 #define CM0_ZR_OPT_DISABLE      (1<<5)
@@ -655,6 +668,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
 /** P1 value is 2 greater than this field */
 # define VGA0_PD_P1_MASK       (0x1f << 0)
 
+#define DSPCLK_GATE_D  0x6200
+
 /* I830 CRTC registers */
 #define HTOTAL_A       0x60000
 #define HBLANK_A       0x60004
@@ -1101,6 +1116,8 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
 #define IS_MOBILE(dev) (IS_I830(dev) || IS_I85X(dev) || IS_I915GM(dev) || \
                        IS_I945GM(dev) || IS_I965GM(dev) || IS_IGD_GM(dev))
 
+#define I915_NEED_GFX_HWS(dev) (IS_G33(dev) || IS_IGD_GM(dev))
+
 #define PRIMARY_RINGBUFFER_SIZE         (128*1024)
 
 #endif
index 5dc799ab86b8b9ac2bcbe54878987308e3df3dc7..833abc7e55fb35d4032d8dc2306ca48ddae9ab2b 100644 (file)
@@ -825,11 +825,19 @@ static u32 RADEON_READ_MCIND(drm_radeon_private_t *dev_priv, int addr)
        return ret;
 }
 
+static u32 RS690_READ_MCIND(drm_radeon_private_t *dev_priv, int addr)
+{
+       RADEON_WRITE(RS690_MC_INDEX, (addr & RS690_MC_INDEX_MASK));
+       return RADEON_READ(RS690_MC_DATA);
+}
+
 u32 radeon_read_fb_location(drm_radeon_private_t *dev_priv)
 {
 
        if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
                return RADEON_READ_MCIND(dev_priv, RV515_MC_FB_LOCATION);
+       else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
+               return RS690_READ_MCIND(dev_priv, RS690_MC_FB_LOCATION);
        else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
                return RADEON_READ_MCIND(dev_priv, R520_MC_FB_LOCATION);
        else
@@ -840,6 +848,8 @@ static void radeon_write_fb_location(drm_radeon_private_t *dev_priv, u32 fb_loc)
 {
        if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
                RADEON_WRITE_MCIND(RV515_MC_FB_LOCATION, fb_loc);
+       else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
+               RS690_WRITE_MCIND(RS690_MC_FB_LOCATION, fb_loc);
        else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
                RADEON_WRITE_MCIND(R520_MC_FB_LOCATION, fb_loc);
        else
@@ -850,6 +860,8 @@ static void radeon_write_agp_location(drm_radeon_private_t *dev_priv, u32 agp_lo
 {
        if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515)
                RADEON_WRITE_MCIND(RV515_MC_AGP_LOCATION, agp_loc);
+       else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690)
+               RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, agp_loc);
        else if ((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_RV515)
                RADEON_WRITE_MCIND(R520_MC_AGP_LOCATION, agp_loc);
        else
@@ -1362,6 +1374,70 @@ static void radeon_set_igpgart(drm_radeon_private_t * dev_priv, int on)
        }
 }
 
+/* Enable or disable RS690 GART on the chip */
+static void radeon_set_rs690gart(drm_radeon_private_t *dev_priv, int on)
+{
+       u32 temp;
+
+       if (on) {
+               DRM_DEBUG("programming rs690 gart %08X %08lX %08X\n",
+                         dev_priv->gart_vm_start,
+                         (long)dev_priv->gart_info.bus_addr,
+                         dev_priv->gart_size);
+
+               temp = RS690_READ_MCIND(dev_priv, RS690_MC_MISC_CNTL);
+               RS690_WRITE_MCIND(RS690_MC_MISC_CNTL, 0x5000);
+
+               RS690_WRITE_MCIND(RS690_MC_AGP_SIZE,
+                                 RS690_MC_GART_EN | RS690_MC_AGP_SIZE_32MB);
+
+               temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_FEATURE_ID);
+               RS690_WRITE_MCIND(RS690_MC_GART_FEATURE_ID, 0x42040800);
+
+               RS690_WRITE_MCIND(RS690_MC_GART_BASE,
+                                 dev_priv->gart_info.bus_addr);
+
+               temp = RS690_READ_MCIND(dev_priv, RS690_MC_AGP_MODE_CONTROL);
+               RS690_WRITE_MCIND(RS690_MC_AGP_MODE_CONTROL, 0x01400000);
+
+               RS690_WRITE_MCIND(RS690_MC_AGP_BASE,
+                                 (unsigned int)dev_priv->gart_vm_start);
+
+               dev_priv->gart_size = 32*1024*1024;
+               temp = (((dev_priv->gart_vm_start - 1 + dev_priv->gart_size) &
+                        0xffff0000) | (dev_priv->gart_vm_start >> 16));
+
+               RS690_WRITE_MCIND(RS690_MC_AGP_LOCATION, temp);
+
+               temp = RS690_READ_MCIND(dev_priv, RS690_MC_AGP_SIZE);
+               RS690_WRITE_MCIND(RS690_MC_AGP_SIZE,
+                                 RS690_MC_GART_EN | RS690_MC_AGP_SIZE_32MB);
+
+               do {
+                       temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_CACHE_CNTL);
+                       if ((temp & RS690_MC_GART_CLEAR_STATUS) ==
+                           RS690_MC_GART_CLEAR_DONE)
+                               break;
+                       DRM_UDELAY(1);
+               } while (1);
+
+               RS690_WRITE_MCIND(RS690_MC_GART_CACHE_CNTL,
+                                 RS690_MC_GART_CC_CLEAR);
+               do {
+                       temp = RS690_READ_MCIND(dev_priv, RS690_MC_GART_CACHE_CNTL);
+                       if ((temp & RS690_MC_GART_CLEAR_STATUS) ==
+                                  RS690_MC_GART_CLEAR_DONE)
+                               break;
+                       DRM_UDELAY(1);
+               } while (1);
+
+               RS690_WRITE_MCIND(RS690_MC_GART_CACHE_CNTL,
+                                 RS690_MC_GART_CC_NO_CHANGE);
+       } else {
+               RS690_WRITE_MCIND(RS690_MC_AGP_SIZE, RS690_MC_GART_DIS);
+       }
+}
+
 static void radeon_set_pciegart(drm_radeon_private_t * dev_priv, int on)
 {
        u32 tmp = RADEON_READ_PCIE(dev_priv, RADEON_PCIE_TX_GART_CNTL);
@@ -1396,6 +1472,11 @@ static void radeon_set_pcigart(drm_radeon_private_t * dev_priv, int on)
 {
        u32 tmp;
 
+       if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) {
+               radeon_set_rs690gart(dev_priv, on);
+               return;
+       }
+
        if (dev_priv->flags & RADEON_IS_IGPGART) {
                radeon_set_igpgart(dev_priv, on);
                return;
index 4434332c79bcc9115591297a8c7248f5f6c4fb4c..173ae620223a052238a0a212711e25290bff4f0c 100644 (file)
@@ -123,6 +123,7 @@ enum radeon_family {
        CHIP_R420,
        CHIP_RV410,
        CHIP_RS400,
+       CHIP_RS690,
        CHIP_RV515,
        CHIP_R520,
        CHIP_RV530,
@@ -467,6 +468,36 @@ extern int r300_do_cp_cmdbuf(struct drm_device * dev,
 #define RADEON_IGPGART_ENABLE           0x38
 #define RADEON_IGPGART_UNK_39           0x39
 
+#define RS690_MC_INDEX                  0x78
+#   define RS690_MC_INDEX_MASK          0x1ff
+#   define RS690_MC_INDEX_WR_EN         (1 << 9)
+#   define RS690_MC_INDEX_WR_ACK        0x7f
+#define RS690_MC_DATA                   0x7c
+
+#define RS690_MC_MISC_CNTL              0x18
+#define RS690_MC_GART_FEATURE_ID        0x2b
+#define RS690_MC_GART_BASE              0x2c
+#define RS690_MC_GART_CACHE_CNTL       0x2e
+#   define RS690_MC_GART_CC_NO_CHANGE   0x0
+#   define RS690_MC_GART_CC_CLEAR       0x1
+#   define RS690_MC_GART_CLEAR_STATUS   (1 << 1)
+#       define RS690_MC_GART_CLEAR_DONE     (0 << 1)
+#       define RS690_MC_GART_CLEAR_PENDING  (1 << 1)
+#define RS690_MC_AGP_SIZE               0x38
+#   define RS690_MC_GART_DIS            0x0
+#   define RS690_MC_GART_EN             0x1
+#   define RS690_MC_AGP_SIZE_32MB       (0 << 1)
+#   define RS690_MC_AGP_SIZE_64MB       (1 << 1)
+#   define RS690_MC_AGP_SIZE_128MB      (2 << 1)
+#   define RS690_MC_AGP_SIZE_256MB      (3 << 1)
+#   define RS690_MC_AGP_SIZE_512MB      (4 << 1)
+#   define RS690_MC_AGP_SIZE_1GB        (5 << 1)
+#   define RS690_MC_AGP_SIZE_2GB        (6 << 1)
+#define RS690_MC_AGP_MODE_CONTROL       0x39
+#define RS690_MC_FB_LOCATION            0x100
+#define RS690_MC_AGP_LOCATION           0x101
+#define RS690_MC_AGP_BASE               0x102
+
 #define R520_MC_IND_INDEX 0x70
 #define R520_MC_IND_WR_EN (1<<24)
 #define R520_MC_IND_DATA  0x74
@@ -1076,6 +1107,13 @@ do {                                                                     \
                RADEON_WRITE(R520_MC_IND_INDEX, 0);     \
        } while (0)
 
+#define RS690_WRITE_MCIND( addr, val )                                 \
+do {                                                           \
+       RADEON_WRITE(RS690_MC_INDEX, RS690_MC_INDEX_WR_EN | ((addr) & RS690_MC_INDEX_MASK));    \
+       RADEON_WRITE(RS690_MC_DATA, val);                       \
+       RADEON_WRITE(RS690_MC_INDEX, RS690_MC_INDEX_WR_ACK);    \
+} while (0)
+
 #define CP_PACKET0( reg, n )                                           \
        (RADEON_CP_PACKET0 | ((n) << 16) | ((reg) >> 2))
 #define CP_PACKET0_TABLE( reg, n )                                     \
index 3b6985557cb21cb77cc05df345a9dfb8dd573d3d..3538da16e3fe9ec4cea862fa7b0100fb3d3225c7 100644 (file)
@@ -686,7 +686,7 @@ err_out_table:
        mthca_table_put(dev, dev->mr_table.mpt_table, key);
 
 err_out_mpt_free:
-       mthca_free(&dev->mr_table.mpt_alloc, mr->ibmr.lkey);
+       mthca_free(&dev->mr_table.mpt_alloc, key);
        return err;
 }
 
index 7dd2ec473d24e297950aefffee9609959301b51f..52b1bebfa74482dc2586667e6c35c68f4b5e5c04 100644 (file)
@@ -824,7 +824,6 @@ void ipoib_cm_dev_stop(struct net_device *dev)
        struct ipoib_dev_priv *priv = netdev_priv(dev);
        struct ipoib_cm_rx *p;
        unsigned long begin;
-       LIST_HEAD(list);
        int ret;
 
        if (!IPOIB_CM_SUPPORTED(dev->dev_addr) || !priv->cm.id)
@@ -857,9 +856,12 @@ void ipoib_cm_dev_stop(struct net_device *dev)
                        /*
                         * assume the HW is wedged and just free up everything.
                         */
-                       list_splice_init(&priv->cm.rx_flush_list, &list);
-                       list_splice_init(&priv->cm.rx_error_list, &list);
-                       list_splice_init(&priv->cm.rx_drain_list, &list);
+                       list_splice_init(&priv->cm.rx_flush_list,
+                                        &priv->cm.rx_reap_list);
+                       list_splice_init(&priv->cm.rx_error_list,
+                                        &priv->cm.rx_reap_list);
+                       list_splice_init(&priv->cm.rx_drain_list,
+                                        &priv->cm.rx_reap_list);
                        break;
                }
                spin_unlock_irq(&priv->lock);
index 2928ef228101e941ff3876b454601d59b938a1ac..51605870f898e23dfa450314de6ef2409d4351c0 100644 (file)
@@ -1695,14 +1695,15 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
                         * information for a retry or there was no other
                         * mirror in-sync.
                         */
-                       DMERR_LIMIT("Mirror read failed from %s.",
-                                   m->dev->name);
+                       DMERR_LIMIT("Mirror read failed.");
                        return -EIO;
                }
+
+               m = read_record->m;
+
                DMERR("Mirror read failed from %s. Trying alternative device.",
                      m->dev->name);
 
-               m = read_record->m;
                fail_mirror(m, DM_RAID1_READ_ERROR);
 
                /*
index 1abc95ca9dfa2fe67aaa85405b259d16427c639c..982e27b86d101a15ebb2f579652a67d4ae08f806 100644 (file)
@@ -258,6 +258,23 @@ config THINKPAD_ACPI_BAY
 
          If you are not sure, say Y here.
 
+config THINKPAD_ACPI_VIDEO
+       bool "Video output control support"
+       depends on THINKPAD_ACPI
+       default y
+       ---help---
+         Allows the thinkpad_acpi driver to provide an interface to control
+         the various video output ports.
+
+         This feature often won't work well, depending on ThinkPad model,
+         display state, video output devices in use, whether there is a X
+         server running, phase of the moon, and the current mood of
+         Schroedinger's cat.  If you can use X.org's RandR to control
+         your ThinkPad's video output ports instead of this feature,
+         don't think twice: do it and say N here to save some memory.
+
+         If you are not sure, say Y here.
+
 config THINKPAD_ACPI_HOTKEY_POLL
        bool "Suport NVRAM polling for hot keys"
        depends on THINKPAD_ACPI
index d7aea93081f26f98310ebbb1db6a4e29e1ed7ffb..74d12b4a3abdae48be072857ec75a34c90496dcb 100644 (file)
@@ -271,6 +271,15 @@ static struct dmi_system_id acer_quirks[] = {
                },
                .driver_data = &quirk_acer_travelmate_2490,
        },
+       {
+               .callback = dmi_matched,
+               .ident = "Acer TravelMate 4200",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4200"),
+               },
+               .driver_data = &quirk_acer_travelmate_2490,
+       },
        {
                .callback = dmi_matched,
                .ident = "Medion MD 98300",
index f70984ab1e1bdfd2c1aa25a32108f6b96117f83b..de16e88eb8d3d89785fdefce12a7953c878bb0c6 100644 (file)
@@ -170,10 +170,13 @@ static int intel_menlow_memory_add(struct acpi_device *device)
 
        cdev = thermal_cooling_device_register("Memory controller", device,
                                               &memory_cooling_ops);
-       acpi_driver_data(device) = cdev;
-       if (!cdev)
-               result = -ENODEV;
-       else {
+       if (IS_ERR(cdev)) {
+               result = PTR_ERR(cdev);
+               goto end;
+       }
+
+       if (cdev) {
+               acpi_driver_data(device) = cdev;
                result = sysfs_create_link(&device->dev.kobj,
                                        &cdev->device.kobj, "thermal_cooling");
                if (result)
index e2c7edd206a6b0677894ec6bddfd779cd0851543..bb269d0c677edbc4cadd268dc634e90b6120a80e 100644 (file)
@@ -221,6 +221,7 @@ static struct {
        u32 hotkey:1;
        u32 hotkey_mask:1;
        u32 hotkey_wlsw:1;
+       u32 hotkey_tablet:1;
        u32 light:1;
        u32 light_status:1;
        u32 bright_16levels:1;
@@ -301,6 +302,13 @@ TPACPI_HANDLE(hkey, ec, "\\_SB.HKEY",      /* 600e/x, 770e, 770x */
           "HKEY",              /* all others */
           );                   /* 570 */
 
+TPACPI_HANDLE(vid, root, "\\_SB.PCI.AGP.VGA",  /* 570 */
+          "\\_SB.PCI0.AGP0.VID0",      /* 600e/x, 770x */
+          "\\_SB.PCI0.VID0",   /* 770e */
+          "\\_SB.PCI0.VID",    /* A21e, G4x, R50e, X30, X40 */
+          "\\_SB.PCI0.AGP.VID",        /* all others */
+          );                           /* R30, R31 */
+
 
 /*************************************************************************
  * ACPI helpers
@@ -1053,6 +1061,9 @@ static struct attribute_set *hotkey_dev_attributes;
 #define HOTKEY_CONFIG_CRITICAL_END
 #endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
 
+/* HKEY.MHKG() return bits */
+#define TP_HOTKEY_TABLET_MASK (1 << 3)
+
 static int hotkey_get_wlsw(int *status)
 {
        if (!acpi_evalf(hkey_handle, status, "WLSW", "d"))
@@ -1060,6 +1071,16 @@ static int hotkey_get_wlsw(int *status)
        return 0;
 }
 
+static int hotkey_get_tablet_mode(int *status)
+{
+       int s;
+
+       if (!acpi_evalf(hkey_handle, &s, "MHKG", "d"))
+               return -EIO;
+
+       return ((s & TP_HOTKEY_TABLET_MASK) != 0);
+}
+
 /*
  * Call with hotkey_mutex held
  */
@@ -1154,15 +1175,31 @@ static void tpacpi_input_send_radiosw(void)
 {
        int wlsw;
 
-       mutex_lock(&tpacpi_inputdev_send_mutex);
-
        if (tp_features.hotkey_wlsw && !hotkey_get_wlsw(&wlsw)) {
+               mutex_lock(&tpacpi_inputdev_send_mutex);
+
                input_report_switch(tpacpi_inputdev,
                                    SW_RADIO, !!wlsw);
                input_sync(tpacpi_inputdev);
+
+               mutex_unlock(&tpacpi_inputdev_send_mutex);
        }
+}
+
+static void tpacpi_input_send_tabletsw(void)
+{
+       int state;
+
+       if (tp_features.hotkey_tablet &&
+           !hotkey_get_tablet_mode(&state)) {
+               mutex_lock(&tpacpi_inputdev_send_mutex);
 
-       mutex_unlock(&tpacpi_inputdev_send_mutex);
+               input_report_switch(tpacpi_inputdev,
+                                   SW_TABLET_MODE, !!state);
+               input_sync(tpacpi_inputdev);
+
+               mutex_unlock(&tpacpi_inputdev_send_mutex);
+       }
 }
 
 static void tpacpi_input_send_key(unsigned int scancode)
@@ -1417,6 +1454,14 @@ static void hotkey_poll_setup_safe(int may_warn)
        mutex_unlock(&hotkey_mutex);
 }
 
+#else /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
+
+static void hotkey_poll_setup_safe(int __unused)
+{
+}
+
+#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
+
 static int hotkey_inputdev_open(struct input_dev *dev)
 {
        switch (tpacpi_lifecycle) {
@@ -1444,7 +1489,6 @@ static void hotkey_inputdev_close(struct input_dev *dev)
        if (tpacpi_lifecycle == TPACPI_LIFE_RUNNING)
                hotkey_poll_setup_safe(0);
 }
-#endif /* CONFIG_THINKPAD_ACPI_HOTKEY_POLL */
 
 /* sysfs hotkey enable ------------------------------------------------- */
 static ssize_t hotkey_enable_show(struct device *dev,
@@ -1666,6 +1710,29 @@ static void hotkey_radio_sw_notify_change(void)
                             "hotkey_radio_sw");
 }
 
+/* sysfs hotkey tablet mode (pollable) --------------------------------- */
+static ssize_t hotkey_tablet_mode_show(struct device *dev,
+                          struct device_attribute *attr,
+                          char *buf)
+{
+       int res, s;
+       res = hotkey_get_tablet_mode(&s);
+       if (res < 0)
+               return res;
+
+       return snprintf(buf, PAGE_SIZE, "%d\n", !!s);
+}
+
+static struct device_attribute dev_attr_hotkey_tablet_mode =
+       __ATTR(hotkey_tablet_mode, S_IRUGO, hotkey_tablet_mode_show, NULL);
+
+static void hotkey_tablet_mode_notify_change(void)
+{
+       if (tp_features.hotkey_tablet)
+               sysfs_notify(&tpacpi_pdev->dev.kobj, NULL,
+                            "hotkey_tablet_mode");
+}
+
 /* sysfs hotkey report_mode -------------------------------------------- */
 static ssize_t hotkey_report_mode_show(struct device *dev,
                           struct device_attribute *attr,
@@ -1878,7 +1945,7 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                str_supported(tp_features.hotkey));
 
        if (tp_features.hotkey) {
-               hotkey_dev_attributes = create_attr_set(12, NULL);
+               hotkey_dev_attributes = create_attr_set(13, NULL);
                if (!hotkey_dev_attributes)
                        return -ENOMEM;
                res = add_many_to_attr_set(hotkey_dev_attributes,
@@ -1957,6 +2024,18 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                                        &dev_attr_hotkey_radio_sw.attr);
                }
 
+               /* For X41t, X60t, X61t Tablets... */
+               if (!res && acpi_evalf(hkey_handle, &status, "MHKG", "qd")) {
+                       tp_features.hotkey_tablet = 1;
+                       printk(TPACPI_INFO
+                               "possible tablet mode switch found; "
+                               "ThinkPad in %s mode\n",
+                               (status & TP_HOTKEY_TABLET_MASK)?
+                                       "tablet" : "laptop");
+                       res = add_to_attr_set(hotkey_dev_attributes,
+                                       &dev_attr_hotkey_tablet_mode.attr);
+               }
+
                if (!res)
                        res = register_attr_set_with_sysfs(
                                        hotkey_dev_attributes,
@@ -2006,6 +2085,10 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                        set_bit(EV_SW, tpacpi_inputdev->evbit);
                        set_bit(SW_RADIO, tpacpi_inputdev->swbit);
                }
+               if (tp_features.hotkey_tablet) {
+                       set_bit(EV_SW, tpacpi_inputdev->evbit);
+                       set_bit(SW_TABLET_MODE, tpacpi_inputdev->swbit);
+               }
 
                dbg_printk(TPACPI_DBG_INIT,
                                "enabling hot key handling\n");
@@ -2023,12 +2106,12 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
                                (hotkey_report_mode < 2) ?
                                        "enabled" : "disabled");
 
-#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
                tpacpi_inputdev->open = &hotkey_inputdev_open;
                tpacpi_inputdev->close = &hotkey_inputdev_close;
 
                hotkey_poll_setup_safe(1);
-#endif
+               tpacpi_input_send_radiosw();
+               tpacpi_input_send_tabletsw();
        }
 
        return (tp_features.hotkey)? 0 : 1;
@@ -2156,11 +2239,15 @@ static void hotkey_notify(struct ibm_struct *ibm, u32 event)
                        /* 0x5000-0x5FFF: human interface helpers */
                        switch (hkey) {
                        case 0x5010: /* Lenovo new BIOS: brightness changed */
-                       case 0x5009: /* X61t: swivel up (tablet mode) */
-                       case 0x500a: /* X61t: swivel down (normal mode) */
                        case 0x500b: /* X61t: tablet pen inserted into bay */
                        case 0x500c: /* X61t: tablet pen removed from bay */
                                break;
+                       case 0x5009: /* X41t-X61t: swivel up (tablet mode) */
+                       case 0x500a: /* X41t-X61t: swivel down (normal mode) */
+                               tpacpi_input_send_tabletsw();
+                               hotkey_tablet_mode_notify_change();
+                               send_acpi_ev = 0;
+                               break;
                        case 0x5001:
                        case 0x5002:
                                /* LID switch events.  Do not propagate */
@@ -2219,11 +2306,10 @@ static void hotkey_resume(void)
                       "from firmware\n");
        tpacpi_input_send_radiosw();
        hotkey_radio_sw_notify_change();
+       hotkey_tablet_mode_notify_change();
        hotkey_wakeup_reason_notify_change();
        hotkey_wakeup_hotunplug_complete_notify_change();
-#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
        hotkey_poll_setup_safe(0);
-#endif
 }
 
 /* procfs -------------------------------------------------------------- */
@@ -2676,6 +2762,8 @@ static struct ibm_struct wan_driver_data = {
  * Video subdriver
  */
 
+#ifdef CONFIG_THINKPAD_ACPI_VIDEO
+
 enum video_access_mode {
        TPACPI_VIDEO_NONE = 0,
        TPACPI_VIDEO_570,       /* 570 */
@@ -2703,13 +2791,6 @@ static int video_orig_autosw;
 static int video_autosw_get(void);
 static int video_autosw_set(int enable);
 
-TPACPI_HANDLE(vid, root, "\\_SB.PCI.AGP.VGA",  /* 570 */
-          "\\_SB.PCI0.AGP0.VID0",      /* 600e/x, 770x */
-          "\\_SB.PCI0.VID0",   /* 770e */
-          "\\_SB.PCI0.VID",    /* A21e, G4x, R50e, X30, X40 */
-          "\\_SB.PCI0.AGP.VID",        /* all others */
-          );                           /* R30, R31 */
-
 TPACPI_HANDLE(vid2, root, "\\_SB.PCI0.AGPB.VID");      /* G41 */
 
 static int __init video_init(struct ibm_init_struct *iibm)
@@ -3019,6 +3100,8 @@ static struct ibm_struct video_driver_data = {
        .exit = video_exit,
 };
 
+#endif /* CONFIG_THINKPAD_ACPI_VIDEO */
+
 /*************************************************************************
  * Light (thinklight) subdriver
  */
@@ -5803,10 +5886,12 @@ static struct ibm_init_struct ibms_init[] __initdata = {
                .init = wan_init,
                .data = &wan_driver_data,
        },
+#ifdef CONFIG_THINKPAD_ACPI_VIDEO
        {
                .init = video_init,
                .data = &video_driver_data,
        },
+#endif
        {
                .init = light_init,
                .data = &light_driver_data,
@@ -5918,7 +6003,7 @@ MODULE_PARM_DESC(hotkey_report_mode,
 
 #define TPACPI_PARAM(feature) \
        module_param_call(feature, set_ibm_param, NULL, NULL, 0); \
-       MODULE_PARM_DESC(feature, "Simulates thinkpad-aci procfs command " \
+       MODULE_PARM_DESC(feature, "Simulates thinkpad-acpi procfs command " \
                         "at module load, see documentation")
 
 TPACPI_PARAM(hotkey);
index e569645d59e2f3ef429cac60e1da67840277a348..4a23654184fc04da02eb1a73468818709fbe6371 100644 (file)
@@ -158,6 +158,7 @@ run_osc_out:
 /**
  * __pci_osc_support_set - register OS support to Firmware
  * @flags: OS support bits
+ * @hid: hardware ID
  *
  * Update OS support fields and doing a _OSC Query to obtain an update
  * from Firmware on supported control bits.
@@ -241,8 +242,6 @@ EXPORT_SYMBOL(pci_osc_control_set);
  *     choose from highest power _SxD to lowest power _SxW
  * else // no _PRW at S-state x
  *     choose highest power _SxD or any lower power
- *
- * currently we simply return _SxD, if present.
  */
 
 static pci_power_t acpi_pci_choose_state(struct pci_dev *pdev,
index e782b3e7fcdb01c8b525e845e565538143bd2012..8b86e53ccf7a081586d32d09350dce072f2ef75e 100644 (file)
@@ -306,12 +306,23 @@ int thermal_zone_bind_cooling_device(struct thermal_zone_device *tz,
 {
        struct thermal_cooling_device_instance *dev;
        struct thermal_cooling_device_instance *pos;
+       struct thermal_zone_device *pos1;
+       struct thermal_cooling_device *pos2;
        int result;
 
        if (trip >= tz->trips || (trip < 0 && trip != THERMAL_TRIPS_NONE))
                return -EINVAL;
 
-       if (!tz || !cdev)
+       list_for_each_entry(pos1, &thermal_tz_list, node) {
+               if (pos1 == tz)
+                       break;
+       }
+       list_for_each_entry(pos2, &thermal_cdev_list, node) {
+               if (pos2 == cdev)
+                       break;
+       }
+
+       if (tz != pos1 || cdev != pos2)
                return -EINVAL;
 
        dev =
@@ -437,20 +448,20 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
        int result;
 
        if (strlen(type) >= THERMAL_NAME_LENGTH)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        if (!ops || !ops->get_max_state || !ops->get_cur_state ||
            !ops->set_cur_state)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        cdev = kzalloc(sizeof(struct thermal_cooling_device), GFP_KERNEL);
        if (!cdev)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        result = get_idr(&thermal_cdev_idr, &thermal_idr_lock, &cdev->id);
        if (result) {
                kfree(cdev);
-               return NULL;
+               return ERR_PTR(result);
        }
 
        strcpy(cdev->type, type);
@@ -462,7 +473,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
        if (result) {
                release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
                kfree(cdev);
-               return NULL;
+               return ERR_PTR(result);
        }
 
        /* sys I/F */
@@ -498,7 +509,7 @@ struct thermal_cooling_device *thermal_cooling_device_register(char *type,
       unregister:
        release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
        device_unregister(&cdev->device);
-       return NULL;
+       return ERR_PTR(result);
 }
 
 EXPORT_SYMBOL(thermal_cooling_device_register);
@@ -570,17 +581,17 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
        int count;
 
        if (strlen(type) >= THERMAL_NAME_LENGTH)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        if (trips > THERMAL_MAX_TRIPS || trips < 0)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        if (!ops || !ops->get_temp)
-               return NULL;
+               return ERR_PTR(-EINVAL);
 
        tz = kzalloc(sizeof(struct thermal_zone_device), GFP_KERNEL);
        if (!tz)
-               return NULL;
+               return ERR_PTR(-ENOMEM);
 
        INIT_LIST_HEAD(&tz->cooling_devices);
        idr_init(&tz->idr);
@@ -588,7 +599,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
        result = get_idr(&thermal_tz_idr, &thermal_idr_lock, &tz->id);
        if (result) {
                kfree(tz);
-               return NULL;
+               return ERR_PTR(result);
        }
 
        strcpy(tz->type, type);
@@ -601,7 +612,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
        if (result) {
                release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
                kfree(tz);
-               return NULL;
+               return ERR_PTR(result);
        }
 
        /* sys I/F */
@@ -643,7 +654,7 @@ struct thermal_zone_device *thermal_zone_device_register(char *type,
       unregister:
        release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
        device_unregister(&tz->device);
-       return NULL;
+       return ERR_PTR(result);
 }
 
 EXPORT_SYMBOL(thermal_zone_device_register);
diff --git a/fs/xfs/Makefile-linux-2.6 b/fs/xfs/Makefile-linux-2.6
deleted file mode 100644 (file)
index e69de29..0000000
index e8c9866675321b1d0c601f500efccf1343a41230..f184eb8c047c112151781673709154587c63f938 100644 (file)
 #define __NR_epoll_pwait       319
 #define __NR_utimensat         320
 #define __NR_signalfd          321
-/* #define __NR_timerfd                322 removed */
+#define __NR_timerfd_create    322
 #define __NR_eventfd           323
 #define __NR_fallocate         324
+#define __NR_timerfd_settime   325
+#define __NR_timerfd_gettime   326
 
 #ifdef __KERNEL__
 
index f784d2f341496f1ba095ef662720d33916208b52..f054778e916c08e0b1e7cc85dd028de15b21edb2 100644 (file)
                *(.kprobes.text)                                        \
                VMLINUX_SYMBOL(__kprobes_text_end) = .;
 
+/* Section used for early init (in .S files) */
+#define HEAD_TEXT  *(.head.text)
+
 /* init and exit section handling */
 #define INIT_DATA                                                      \
        *(.init.data)                                                   \
index 3fdbbf68e9522a91897f655d79cdf6ad44df26c6..ed7e6222dc1512c879d6122cd5845578c2f670df 100644 (file)
@@ -35,7 +35,7 @@ static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
 
 static unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr)
 {
-       return dma_addr & (0xffUL << 56);
+       return dma_addr & ~(0xffUL << 56);
 }
 
 static inline void plat_unmap_dma_mem(dma_addr_t dma_addr)
diff --git a/include/asm-mips/qemu.h b/include/asm-mips/qemu.h
deleted file mode 100644 (file)
index 487ced4..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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) 2005 by Ralf Baechle (ralf@linux-mips.org)
- */
-#ifndef __ASM_QEMU_H
-#define __ASM_QEMU_H
-
-/*
- * Interrupt numbers
- */
-#define Q_PIC_IRQ_BASE         0
-#define Q_COUNT_COMPARE_IRQ    23
-
-/*
- * Qemu clock rate.  Unlike on real MIPS this has no relation to the
- * instruction issue rate, so the choosen value is pure fiction, just needs
- * to match the value in Qemu itself.
- */
-#define QEMU_C0_COUNTER_CLOCK  100000000
-
-/*
- * Magic qemu system control location.
- */
-#define QEMU_RESTART_REG       0xBFBF0000
-#define QEMU_HALT_REG          0xBFBF0004
-
-#endif /* __ASM_QEMU_H */
index e716447e5e03d8235b46efb72531e9d3c2e899c5..8c1eb02c6d16fdd66a3945358d78a9f0d4d909ba 100644 (file)
@@ -228,7 +228,14 @@ extern void sni_pcimt_irq_init(void);
 extern void sni_cpu_time_init(void);
 
 /* eisa init for RM200/400 */
+#ifdef CONFIG_EISA
 extern int sni_eisa_root_init(void);
+#else
+static inline int sni_eisa_root_init(void)
+{
+       return 0;
+}
+#endif
 
 /* common irq stuff */
 extern void (*sni_hwint)(void);
index fa9a587b3bf18e4b8bef3a1e610116fa3c4dd4e9..4964c82f85f901fc9e61790cb089c61f510e37ff 100644 (file)
 #define __NR_timerfd                   (__NR_Linux + 318)
 #define __NR_eventfd                   (__NR_Linux + 319)
 #define __NR_fallocate                 (__NR_Linux + 320)
+#define __NR_timerfd_create            (__NR_Linux + 321)
+#define __NR_timerfd_gettime           (__NR_Linux + 322)
+#define __NR_timerfd_settime           (__NR_Linux + 323)
 
 /*
  * Offset of the last Linux o32 flavoured syscall
  */
-#define __NR_Linux_syscalls            320
+#define __NR_Linux_syscalls            323
 
 #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
 
 #define __NR_O32_Linux                 4000
-#define __NR_O32_Linux_syscalls                320
+#define __NR_O32_Linux_syscalls                323
 
 #if _MIPS_SIM == _MIPS_SIM_ABI64
 
 #define __NR_timerfd                   (__NR_Linux + 277)
 #define __NR_eventfd                   (__NR_Linux + 278)
 #define __NR_fallocate                 (__NR_Linux + 279)
+#define __NR_timerfd_create            (__NR_Linux + 280)
+#define __NR_timerfd_gettime           (__NR_Linux + 281)
+#define __NR_timerfd_settime           (__NR_Linux + 282)
 
 /*
  * Offset of the last Linux 64-bit flavoured syscall
  */
-#define __NR_Linux_syscalls            279
+#define __NR_Linux_syscalls            282
 
 #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
 
 #define __NR_64_Linux                  5000
-#define __NR_64_Linux_syscalls         279
+#define __NR_64_Linux_syscalls         282
 
 #if _MIPS_SIM == _MIPS_SIM_NABI32
 
 #define __NR_timerfd                   (__NR_Linux + 281)
 #define __NR_eventfd                   (__NR_Linux + 282)
 #define __NR_fallocate                 (__NR_Linux + 283)
+#define __NR_timerfd_create            (__NR_Linux + 284)
+#define __NR_timerfd_gettime           (__NR_Linux + 285)
+#define __NR_timerfd_settime           (__NR_Linux + 286)
 
 /*
  * Offset of the last N32 flavoured syscall
  */
-#define __NR_Linux_syscalls            283
+#define __NR_Linux_syscalls            286
 
 #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
 
 #define __NR_N32_Linux                 6000
-#define __NR_N32_Linux_syscalls                283
+#define __NR_N32_Linux_syscalls                286
 
 #ifdef __KERNEL__
 
diff --git a/include/asm-x86/desc_64.h b/include/asm-x86/desc_64.h
deleted file mode 100644 (file)
index 8b13789..0000000
+++ /dev/null
@@ -1 +0,0 @@
-
index 6b1895ccd6b78854bd3dc9f7f710ea1bc24ff9bb..f377b76b2f341e727f98a0232bd7fe7cca71def6 100644 (file)
@@ -20,7 +20,6 @@
 #include <asm/uaccess.h>
 
 extern void fpu_init(void);
-extern unsigned int mxcsr_feature_mask;
 extern void mxcsr_feature_mask_init(void);
 extern void init_fpu(struct task_struct *child);
 extern asmlinkage void math_state_restore(void);
index 7fd5e0e2361e001277f32ab9c85d0daf0aa64580..0a0b77bc736a82171beb2f50d39df7a6e2aae947 100644 (file)
@@ -188,6 +188,7 @@ static inline unsigned long pmd_bad(pmd_t pmd)
 #define pgd_offset(mm, addr) ((mm)->pgd + pgd_index(addr))
 #define pgd_offset_k(address) (init_level4_pgt + pgd_index(address))
 #define pgd_present(pgd) (pgd_val(pgd) & _PAGE_PRESENT)
+static inline int pgd_large(pgd_t pgd) { return 0; }
 #define mk_kernel_pgd(address) ((pgd_t){ (address) | _KERNPG_TABLE })
 
 /* PUD - Level3 access */
index 149920dcd341520c21964883302a95668111e6a0..45a2f0ab33d022158713b1b024b11b21cee59a2e 100644 (file)
@@ -302,10 +302,6 @@ union i387_union {
 };
 
 #ifdef CONFIG_X86_32
-/*
- * the following now lives in the per cpu area:
- * extern      int cpu_llc_id[NR_CPUS];
- */
 DECLARE_PER_CPU(u8, cpu_llc_id);
 #else
 DECLARE_PER_CPU(struct orig_ist, orig_ist);
@@ -671,7 +667,6 @@ extern void init_gdt(int cpu);
 extern unsigned int machine_id;
 extern unsigned int machine_submodel_id;
 extern unsigned int BIOS_revision;
-extern unsigned int mca_pentium_flag;
 
 /* Boot loader type from the setup header */
 extern int bootloader_type;
index b773c57e75a525c344a892855d8b04a6df14473b..94c4c53a099eb81cf2c4dbf2292131fb8c746014 100644 (file)
@@ -70,6 +70,8 @@ extern void __flush_invalidate_dcache_page_alias(unsigned long, unsigned long);
 #endif
 #if (ICACHE_WAY_SIZE > PAGE_SIZE)
 extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
+#else
+# define __invalidate_icache_page_alias(v,p)   do { } while(0)
 #endif
 
 /*
index aa2121034558684f3f6a654b383a77bb838ae558..1cbcf9001a41a6068718e3256b90d90b7fe4ce76 100644 (file)
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2003 - 2005 Tensilica Inc.
+ * Copyright (C) 2003 - 2007 Tensilica Inc.
  */
 
+
 #ifndef _XTENSA_COPROCESSOR_H
 #define _XTENSA_COPROCESSOR_H
 
-#include <asm/variant/core.h>
+#include <linux/stringify.h>
 #include <asm/variant/tie.h>
+#include <asm/types.h>
+
+#ifdef __ASSEMBLY__
+# include <asm/variant/tie-asm.h>
+
+.macro xchal_sa_start  a b
+       .set .Lxchal_pofs_, 0
+       .set .Lxchal_ofs_, 0
+.endm
+
+.macro xchal_sa_align  ptr minofs maxofs ofsalign totalign
+       .set    .Lxchal_ofs_, .Lxchal_ofs_ + .Lxchal_pofs_ + \totalign - 1
+       .set    .Lxchal_ofs_, (.Lxchal_ofs_ & -\totalign) - .Lxchal_pofs_
+.endm
+
+#define _SELECT        (  XTHAL_SAS_TIE | XTHAL_SAS_OPT \
+                | XTHAL_SAS_CC \
+                | XTHAL_SAS_CALR | XTHAL_SAS_CALE )
+
+.macro save_xtregs_opt ptr clb at1 at2 at3 at4 offset
+       .if XTREGS_OPT_SIZE > 0
+               addi    \clb, \ptr, \offset
+               xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
+       .endif
+.endm
+
+.macro load_xtregs_opt ptr clb at1 at2 at3 at4 offset
+       .if XTREGS_OPT_SIZE > 0
+               addi    \clb, \ptr, \offset
+               xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
+       .endif
+.endm
+#undef _SELECT
+
+#define _SELECT        (  XTHAL_SAS_TIE | XTHAL_SAS_OPT \
+                | XTHAL_SAS_NOCC \
+                | XTHAL_SAS_CALR | XTHAL_SAS_CALE | XTHAL_SAS_GLOB )
+
+.macro save_xtregs_user ptr clb at1 at2 at3 at4 offset
+       .if XTREGS_USER_SIZE > 0
+               addi    \clb, \ptr, \offset
+               xchal_ncp_store \clb \at1 \at2 \at3 \at4 select=_SELECT
+       .endif
+.endm
+
+.macro load_xtregs_user ptr clb at1 at2 at3 at4 offset
+       .if XTREGS_USER_SIZE > 0
+               addi    \clb, \ptr, \offset
+               xchal_ncp_load \clb \at1 \at2 \at3 \at4 select=_SELECT
+       .endif
+.endm
+#undef _SELECT
+
+
+
+#endif /* __ASSEMBLY__ */
 
-#if !XCHAL_HAVE_CP
-
-#define XTENSA_CP_EXTRA_OFFSET         0
-#define XTENSA_CP_EXTRA_ALIGN  1       /* must be a power of 2 */
-#define XTENSA_CP_EXTRA_SIZE   0
-
-#else
-
-#define XTOFS(last_start,last_size,align) \
-       ((last_start+last_size+align-1) & -align)
-
-#define XTENSA_CP_EXTRA_OFFSET 0
-#define XTENSA_CP_EXTRA_ALIGN  XCHAL_EXTRA_SA_ALIGN
-
-#define XTENSA_CPE_CP0_OFFSET  \
-       XTOFS(XTENSA_CP_EXTRA_OFFSET, XCHAL_EXTRA_SA_SIZE, XCHAL_CP0_SA_ALIGN)
-#define XTENSA_CPE_CP1_OFFSET  \
-       XTOFS(XTENSA_CPE_CP0_OFFSET, XCHAL_CP0_SA_SIZE, XCHAL_CP1_SA_ALIGN)
-#define XTENSA_CPE_CP2_OFFSET  \
-       XTOFS(XTENSA_CPE_CP1_OFFSET, XCHAL_CP1_SA_SIZE, XCHAL_CP2_SA_ALIGN)
-#define XTENSA_CPE_CP3_OFFSET  \
-       XTOFS(XTENSA_CPE_CP2_OFFSET, XCHAL_CP2_SA_SIZE, XCHAL_CP3_SA_ALIGN)
-#define XTENSA_CPE_CP4_OFFSET  \
-       XTOFS(XTENSA_CPE_CP3_OFFSET, XCHAL_CP3_SA_SIZE, XCHAL_CP4_SA_ALIGN)
-#define XTENSA_CPE_CP5_OFFSET  \
-       XTOFS(XTENSA_CPE_CP4_OFFSET, XCHAL_CP4_SA_SIZE, XCHAL_CP5_SA_ALIGN)
-#define XTENSA_CPE_CP6_OFFSET  \
-       XTOFS(XTENSA_CPE_CP5_OFFSET, XCHAL_CP5_SA_SIZE, XCHAL_CP6_SA_ALIGN)
-#define XTENSA_CPE_CP7_OFFSET  \
-       XTOFS(XTENSA_CPE_CP6_OFFSET, XCHAL_CP6_SA_SIZE, XCHAL_CP7_SA_ALIGN)
-#define XTENSA_CP_EXTRA_SIZE   \
-       XTOFS(XTENSA_CPE_CP7_OFFSET, XCHAL_CP7_SA_SIZE, 16)
-
-#if XCHAL_CP_NUM > 0
-# ifndef __ASSEMBLY__
 /*
- * Tasks that own contents of (last user) each coprocessor.
- * Entries are 0 for not-owned or non-existent coprocessors.
- * Note: The size of this structure is fixed to 8 bytes in entry.S
+ * XTENSA_HAVE_COPROCESSOR(x) returns 1 if coprocessor x is configured.
+ *
+ * XTENSA_HAVE_IO_PORT(x) returns 1 if io-port x is configured.
+ *
  */
-typedef struct {
-       struct task_struct *owner;      /* owner */
-       int offset;                     /* offset in cpextra space. */
-} coprocessor_info_t;
-# else
-#  define COPROCESSOR_INFO_OWNER 0
-#  define COPROCESSOR_INFO_OFFSET 4
-#  define COPROCESSOR_INFO_SIZE 8
-# endif
-#endif
-#endif /* XCHAL_HAVE_CP */
 
+#define XTENSA_HAVE_COPROCESSOR(x)                                     \
+       ((XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK) & (1 << (x)))
+#define XTENSA_HAVE_COPROCESSORS                                       \
+       (XCHAL_CP_MASK ^ XCHAL_CP_PORT_MASK)
+#define XTENSA_HAVE_IO_PORT(x)                                         \
+       (XCHAL_CP_PORT_MASK & (1 << (x)))
+#define XTENSA_HAVE_IO_PORTS                                           \
+       XCHAL_CP_PORT_MASK
 
 #ifndef __ASSEMBLY__
-# if XCHAL_CP_NUM > 0
-struct task_struct;
-extern void release_coprocessors (struct task_struct*);
-extern void save_coprocessor_registers(void*, int);
-# else
-#  define release_coprocessors(task)
-# endif
 
-typedef unsigned char cp_state_t[XTENSA_CP_EXTRA_SIZE]
-       __attribute__ ((aligned (XTENSA_CP_EXTRA_ALIGN)));
 
-#endif /* !__ASSEMBLY__ */
+#if XCHAL_HAVE_CP
+
+#define RSR_CPENABLE(x)        do {                                              \
+       __asm__ __volatile__("rsr %0," __stringify(CPENABLE) : "=a" (x)); \
+       } while(0);
+#define WSR_CPENABLE(x)        do {                                              \
+       __asm__ __volatile__("wsr %0," __stringify(CPENABLE) "; rsync"    \
+                            :: "a" (x));                                 \
+       } while(0);
 
+#endif /* XCHAL_HAVE_CP */
 
+
+/*
+ * Additional registers.
+ * We define three types of additional registers:
+ *  ext: extra registers that are used by the compiler
+ *  cpn: optional registers that can be used by a user application
+ *  cpX: coprocessor registers that can only be used if the corresponding
+ *       CPENABLE bit is set.
+ */
+
+#define XCHAL_SA_REG(list,cc,abi,type,y,name,z,align,size,...) \
+       __REG ## list (cc, abi, type, name, size, align)
+
+#define __REG0(cc,abi,t,name,s,a)      __REG0_ ## cc (abi,name)
+#define __REG1(cc,abi,t,name,s,a)      __REG1_ ## cc (name)
+#define __REG2(cc,abi,type,...)                __REG2_ ## type (__VA_ARGS__)
+
+#define __REG0_0(abi,name)
+#define __REG0_1(abi,name)             __REG0_1 ## abi (name)
+#define __REG0_10(name)        __u32 name;
+#define __REG0_11(name)        __u32 name;
+#define __REG0_12(name)
+
+#define __REG1_0(name) __u32 name;
+#define __REG1_1(name)
+
+#define __REG2_0(n,s,a)        __u32 name;
+#define __REG2_1(n,s,a)        unsigned char n[s] __attribute__ ((aligned(a)));
+#define __REG2_2(n,s,a) unsigned char n[s] __attribute__ ((aligned(a)));
+
+typedef struct { XCHAL_NCP_SA_LIST(0) } xtregs_opt_t
+       __attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
+typedef struct { XCHAL_NCP_SA_LIST(1) } xtregs_user_t
+       __attribute__ ((aligned (XCHAL_NCP_SA_ALIGN)));
+
+#if XTENSA_HAVE_COPROCESSORS
+
+typedef struct { XCHAL_CP0_SA_LIST(2) } xtregs_cp0_t
+       __attribute__ ((aligned (XCHAL_CP0_SA_ALIGN)));
+typedef struct { XCHAL_CP1_SA_LIST(2) } xtregs_cp1_t
+       __attribute__ ((aligned (XCHAL_CP1_SA_ALIGN)));
+typedef struct { XCHAL_CP2_SA_LIST(2) } xtregs_cp2_t
+       __attribute__ ((aligned (XCHAL_CP2_SA_ALIGN)));
+typedef struct { XCHAL_CP3_SA_LIST(2) } xtregs_cp3_t
+       __attribute__ ((aligned (XCHAL_CP3_SA_ALIGN)));
+typedef struct { XCHAL_CP4_SA_LIST(2) } xtregs_cp4_t
+       __attribute__ ((aligned (XCHAL_CP4_SA_ALIGN)));
+typedef struct { XCHAL_CP5_SA_LIST(2) } xtregs_cp5_t
+       __attribute__ ((aligned (XCHAL_CP5_SA_ALIGN)));
+typedef struct { XCHAL_CP6_SA_LIST(2) } xtregs_cp6_t
+       __attribute__ ((aligned (XCHAL_CP6_SA_ALIGN)));
+typedef struct { XCHAL_CP7_SA_LIST(2) } xtregs_cp7_t
+       __attribute__ ((aligned (XCHAL_CP7_SA_ALIGN)));
+
+extern struct thread_info* coprocessor_owner[XCHAL_CP_MAX];
+extern void coprocessor_save(void*, int);
+extern void coprocessor_load(void*, int);
+extern void coprocessor_flush(struct thread_info*, int);
+extern void coprocessor_restore(struct thread_info*, int);
+
+extern void coprocessor_release_all(struct thread_info*);
+extern void coprocessor_flush_all(struct thread_info*);
+
+static inline void coprocessor_clear_cpenable(void)
+{
+       unsigned long i = 0;
+       WSR_CPENABLE(i);
+}
+
+#endif /* XTENSA_HAVE_COPROCESSORS */
+
+#endif /* !__ASSEMBLY__ */
 #endif /* _XTENSA_COPROCESSOR_H */
index 467384542502640e21fb841e95b2b18cafdb55c1..ca6e5101a2cba6fb021fec6891193653660ecd64 100644 (file)
 
 /* ELF register definitions. This is needed for core dump support.  */
 
-/*
- * elf_gregset_t contains the application-level state in the following order:
- * Processor info:     config_version, cpuxy
- * Processor state:    pc, ps, exccause, excvaddr, wb, ws,
- *                     lbeg, lend, lcount, sar
- * GP regs:            ar0 - arXX
- */
-
 typedef unsigned long elf_greg_t;
 
 typedef struct {
-       elf_greg_t xchal_config_id0;
-       elf_greg_t xchal_config_id1;
-       elf_greg_t cpux;
-       elf_greg_t cpuy;
        elf_greg_t pc;
        elf_greg_t ps;
-       elf_greg_t exccause;
-       elf_greg_t excvaddr;
-       elf_greg_t windowbase;
-       elf_greg_t windowstart;
        elf_greg_t lbeg;
        elf_greg_t lend;
        elf_greg_t lcount;
        elf_greg_t sar;
-       elf_greg_t syscall;
-       elf_greg_t ar[64];
+       elf_greg_t windowstart;
+       elf_greg_t windowbase;
+       elf_greg_t reserved[8+48];
+       elf_greg_t a[64];
 } xtensa_gregset_t;
 
 #define ELF_NGREG      (sizeof(xtensa_gregset_t) / sizeof(elf_greg_t))
 
 typedef elf_greg_t elf_gregset_t[ELF_NGREG];
 
-/*
- *  Compute the size of the coprocessor and extra state layout (register info)
- *  table (in bytes).
- *  This is actually the maximum size of the table, as opposed to the size,
- *  which is available from the _xtensa_reginfo_table_size global variable.
- *
- *  (See also arch/xtensa/kernel/coprocessor.S)
- *
- */
-
-#ifndef XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM
-# define XTENSA_CPE_LTABLE_SIZE                0
-#else
-# define XTENSA_CPE_SEGMENT(num)       (num ? (1+num) : 0)
-# define XTENSA_CPE_LTABLE_ENTRIES     \
-               ( XTENSA_CPE_SEGMENT(XCHAL_EXTRA_SA_CONTENTS_LIBDB_NUM) \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP0_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP1_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP2_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP3_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP4_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP5_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP6_SA_CONTENTS_LIBDB_NUM)   \
-               + XTENSA_CPE_SEGMENT(XCHAL_CP7_SA_CONTENTS_LIBDB_NUM)   \
-               + 1             /* final entry */                       \
-               )
-# define XTENSA_CPE_LTABLE_SIZE                (XTENSA_CPE_LTABLE_ENTRIES * 8)
-#endif
-
-
-/*
- * Instantiations of the elf_fpregset_t type contain, in most
- * architectures, the floating point (FPU) register set.
- * For Xtensa, this type is extended to contain all custom state,
- * ie. coprocessor and "extra" (non-coprocessor) state (including,
- * for example, TIE-defined states and register files; as well
- * as other optional processor state).
- * This includes FPU state if a floating-point coprocessor happens
- * to have been configured within the Xtensa processor.
- *
- * TOTAL_FPREGS_SIZE is the required size (without rounding)
- * of elf_fpregset_t.  It provides space for the following:
- *
- *  a) 32-bit mask of active coprocessors for this task (similar
- *     to CPENABLE in single-threaded Xtensa processor systems)
- *
- *  b) table describing the layout of custom states (ie. of
- *      individual registers, etc) within the save areas
- *
- *  c)  save areas for each coprocessor and for non-coprocessor
- *      ("extra") state
- *
- * Note that save areas may require up to 16-byte alignment when
- * accessed by save/restore sequences.  We do not need to ensure
- * such alignment in an elf_fpregset_t structure because custom
- * state is not directly loaded/stored into it; rather, save area
- * contents are copied to elf_fpregset_t from the active save areas
- * (see 'struct task_struct' definition in processor.h for that)
- * using memcpy().  But we do allow space for such alignment,
- * to allow optimizations of layout and copying.
- */
-#if 0
-#define TOTAL_FPREGS_SIZE                                              \
-       (4 + XTENSA_CPE_LTABLE_SIZE + XTENSA_CP_EXTRA_SIZE)
-#define ELF_NFPREG                                                     \
-       ((TOTAL_FPREGS_SIZE + sizeof(elf_fpreg_t) - 1) / sizeof(elf_fpreg_t))
-#else
-#define TOTAL_FPREGS_SIZE      0
-#define ELF_NFPREG             0
-#endif
+#define ELF_NFPREG     18
 
 typedef unsigned int elf_fpreg_t;
 typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
 
 #define ELF_CORE_COPY_REGS(_eregs, _pregs)                             \
-       xtensa_elf_core_copy_regs (&_eregs, _pregs);
+       xtensa_elf_core_copy_regs ((xtensa_gregset_t*)&(_eregs), _pregs);
 
 extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *);
 
@@ -257,6 +174,21 @@ extern void xtensa_elf_core_copy_regs (xtensa_gregset_t *, struct pt_regs *);
        _r->areg[12]=0; _r->areg[13]=0;   _r->areg[14]=0; _r->areg[15]=0; \
   } while (0)
 
+typedef struct {
+       xtregs_opt_t    opt;
+       xtregs_user_t   user;
+#if XTENSA_HAVE_COPROCESSORS
+       xtregs_cp0_t    cp0;
+       xtregs_cp1_t    cp1;
+       xtregs_cp2_t    cp2;
+       xtregs_cp3_t    cp3;
+       xtregs_cp4_t    cp4;
+       xtregs_cp5_t    cp5;
+       xtregs_cp6_t    cp6;
+       xtregs_cp7_t    cp7;
+#endif
+} elf_xtregs_t;
+
 #define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX_32BIT)
 
 struct task_struct;
index ffb25bfdf6a12e2118f6657e86cc7d673044e93e..d9b34bee4d4255955bb0fae7340eb135a43158c4 100644 (file)
 
 struct mod_arch_specific
 {
-       /* Module support is not completely implemented. */
+       /* No special elements, yet. */
 };
 
+#define MODULE_ARCH_VERMAGIC "xtensa-" __stringify(XCHAL_CORE_ID) " "
+
 #define Elf_Shdr Elf32_Shdr
 #define Elf_Sym Elf32_Sym
 #define Elf_Ehdr Elf32_Ehdr
index 8d1544eb461ebfa13b3cd352786ba2af6fcf077e..4f4a7987eded7087251550e37204f227e293587e 100644 (file)
@@ -47,7 +47,7 @@ static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
        return kmem_cache_alloc(pgtable_cache, GFP_KERNEL|__GFP_REPEAT);
 }
 
-static inline pte_token_t pte_alloc_one(struct mm_struct *mm,
+static inline pgtable_t pte_alloc_one(struct mm_struct *mm,
                                        unsigned long addr)
 {
        struct page *page;
index c0fcc1c9660c2ec1836a4b3d96f8e8d85aa63121..c8b024a48b4d15f2865e76f7a4babf6592191b4d 100644 (file)
  */
 
 #define VMALLOC_START          0xC0000000
-#define VMALLOC_END            0xC6FEFFFF
-#define TLBTEMP_BASE_1         0xC6FF0000
-#define TLBTEMP_BASE_2         0xC6FF8000
-#define MODULE_START           0xC7000000
-#define MODULE_END             0xC7FFFFFF
+#define VMALLOC_END            0xC7FEFFFF
+#define TLBTEMP_BASE_1         0xC7FF0000
+#define TLBTEMP_BASE_2         0xC7FF8000
 
 /*
  * Xtensa Linux config PTE layout (when present):
index 96408f4366244a0010888c4e021bf5c09364eb4d..4918a4e96d4234109bfc50e25771107101f7f656 100644 (file)
@@ -103,10 +103,6 @@ struct thread_struct {
        unsigned long dbreaka[XCHAL_NUM_DBREAK];
        unsigned long dbreakc[XCHAL_NUM_DBREAK];
 
-       /* Allocate storage for extra state and coprocessor state. */
-       unsigned char cp_save[XTENSA_CP_EXTRA_SIZE]
-               __attribute__ ((aligned(XTENSA_CP_EXTRA_ALIGN)));
-
        /* Make structure 16 bytes aligned. */
        int align[0] __attribute__ ((aligned(16)));
 };
@@ -162,21 +158,16 @@ struct thread_struct {
 struct task_struct;
 struct mm_struct;
 
-// FIXME: do we need release_thread for CP??
 /* Free all resources held by a thread. */
 #define release_thread(thread) do { } while(0)
 
-// FIXME: do we need prepare_to_copy (lazy status) for CP??
 /* Prepare to copy thread state - unlazy all lazy status */
-#define prepare_to_copy(tsk)   do { } while (0)
+extern void prepare_to_copy(struct task_struct*);
 
-/*
- * create a kernel thread without removing it from tasklists
- */
+/* Create a kernel thread without removing it from tasklists */
 extern int kernel_thread(int (*fn)(void *), void * arg, unsigned long flags);
 
 /* Copy and release all segment info associated with a VM */
-
 #define copy_segments(p, mm)   do { } while(0)
 #define release_segments(mm)   do { } while(0)
 #define forget_segments()      do { } while (0)
index 77ff02d307bba119141aacfa733d51f01c137168..422c73e26937de34f292a387b1b48360ae702932 100644 (file)
 
 /* Registers used by strace */
 
-#define REG_A_BASE     0xfc000000
-#define REG_AR_BASE    0x04000000
-#define REG_PC         0x14000000
-#define REG_PS         0x080000e6
-#define REG_WB         0x08000048
-#define REG_WS         0x08000049
-#define REG_LBEG       0x08000000
-#define REG_LEND       0x08000001
-#define REG_LCOUNT     0x08000002
-#define REG_SAR                0x08000003
-#define REG_DEPC       0x080000c0
-#define        REG_EXCCAUSE    0x080000e8
-#define REG_EXCVADDR   0x080000ee
-#define SYSCALL_NR     0x1
-
-#define AR_REGNO_TO_A_REGNO(ar, wb) (ar - wb*4) & ~(XCHAL_NUM_AREGS - 1)
+#define REG_A_BASE     0x0000
+#define REG_AR_BASE    0x0100
+#define REG_PC         0x0020
+#define REG_PS         0x02e6
+#define REG_WB         0x0248
+#define REG_WS         0x0249
+#define REG_LBEG       0x0200
+#define REG_LEND       0x0201
+#define REG_LCOUNT     0x0202
+#define REG_SAR                0x0203
+
+#define SYSCALL_NR     0x00ff
 
 /* Other PTRACE_ values defined in <linux/ptrace.h> using values 0-9,16,17,24 */
 
-#define PTRACE_GETREGS            12
-#define PTRACE_SETREGS            13
-#define PTRACE_GETFPREGS          14
-#define PTRACE_SETFPREGS          15
-#define PTRACE_GETFPREGSIZE       18
+#define PTRACE_GETREGS         12
+#define PTRACE_SETREGS         13
+#define PTRACE_GETXTREGS       18
+#define PTRACE_SETXTREGS       19
 
 #ifndef __ASSEMBLY__
 
+#ifdef __KERNEL__
+
 /*
  * This struct defines the way the registers are stored on the
  * kernel stack during a system call or other kernel entry.
@@ -102,6 +99,9 @@ struct pt_regs {
        unsigned long icountlevel;      /*  60 */
        int reserved[1];                /*  64 */
 
+       /* Additional configurable registers that are used by the compiler. */
+       xtregs_opt_t xtregs_opt;
+
        /* Make sure the areg field is 16 bytes aligned. */
        int align[0] __attribute__ ((aligned(16)));
 
@@ -111,8 +111,6 @@ struct pt_regs {
        unsigned long areg[16];         /* 128 (64) */
 };
 
-#ifdef __KERNEL__
-
 #include <asm/variant/core.h>
 
 # define task_pt_regs(tsk) ((struct pt_regs*) \
index c913d259faaaad3bf1728c33307db918daa4b0d9..d4baed246928085507a76a5acff71156537bdb69 100644 (file)
 #define EXCCAUSE_DTLB_SIZE_RESTRICTION         27
 #define EXCCAUSE_LOAD_CACHE_ATTRIBUTE          28
 #define EXCCAUSE_STORE_CACHE_ATTRIBUTE         29
-#define EXCCAUSE_FLOATING_POINT                        40
+#define EXCCAUSE_COPROCESSOR0_DISABLED         32
+#define EXCCAUSE_COPROCESSOR1_DISABLED         33
+#define EXCCAUSE_COPROCESSOR2_DISABLED         34
+#define EXCCAUSE_COPROCESSOR3_DISABLED         35
+#define EXCCAUSE_COPROCESSOR4_DISABLED         36
+#define EXCCAUSE_COPROCESSOR5_DISABLED         37
+#define EXCCAUSE_COPROCESSOR6_DISABLED         38
+#define EXCCAUSE_COPROCESSOR7_DISABLED         39
 
 /*  PS register fields.  */
 
index e3381cee5059ae9946f3c53044c8fcac45276651..03383af8c3b789f94920983f57c976aeb1b8094a 100644 (file)
@@ -13,9 +13,6 @@
 
 
 struct sigcontext {
-       unsigned long   oldmask;
-
-       /* CPU registers */
        unsigned long sc_pc;
        unsigned long sc_ps;
        unsigned long sc_lbeg;
@@ -25,6 +22,7 @@ struct sigcontext {
        unsigned long sc_acclo;
        unsigned long sc_acchi;
        unsigned long sc_a[16];
+       void *sc_xtregs;
 };
 
 #endif /* _XTENSA_SIGCONTEXT_H */
index 149f4bce092f9f370cb87658617d1ecffc79ef1f..c4992038cee0baabab187085df8ffd87a89cc861 100644 (file)
@@ -5,25 +5,23 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  *
- * Copyright (C) 2001 - 2005 Tensilica Inc.
+ * Copyright (C) 2001 - 2007 Tensilica Inc.
  */
 
 #ifndef _XTENSA_STAT_H
 #define _XTENSA_STAT_H
 
-#include <linux/types.h>
-
 #define STAT_HAVE_NSEC 1
 
 struct stat {
        unsigned long   st_dev;
-       ino_t           st_ino;
-       mode_t          st_mode;
-       nlink_t         st_nlink;
-       uid_t           st_uid;
-       gid_t           st_gid;
-       unsigned int    st_rdev;
-       off_t           st_size;
+       unsigned long   st_ino;
+       unsigned int    st_mode;
+       unsigned int    st_nlink;
+       unsigned int    st_uid;
+       unsigned int    st_gid;
+       unsigned long   st_rdev;
+       long            st_size;
        unsigned long   st_blksize;
        unsigned long   st_blocks;
        unsigned long   st_atime;
@@ -36,8 +34,6 @@ struct stat {
        unsigned long   __unused5;
 };
 
-/* This matches struct stat64 in glibc-2.3 */
-
 struct stat64  {
        unsigned long long st_dev;      /* Device */
        unsigned long long st_ino;      /* File serial number */
@@ -47,20 +43,14 @@ struct stat64  {
        unsigned int  st_gid;           /* Group ID of the file's group. */
        unsigned long long st_rdev;     /* Device number, if device. */
        long long st_size;              /* Size of file, in bytes. */
-       long st_blksize;                /* Optimal block size for I/O. */
+       unsigned long st_blksize;       /* Optimal block size for I/O. */
        unsigned long __unused2;
-#ifdef __XTENSA_EB__
-       unsigned long __unused3;
-       long st_blocks;                 /* Number 512-byte blocks allocated. */
-#else
-       long st_blocks;                 /* Number 512-byte blocks allocated. */
-       unsigned long __unused3;
-#endif
-       long st_atime;                  /* Time of last access. */
+       unsigned long long st_blocks;   /* Number 512-byte blocks allocated. */
+       unsigned long st_atime;         /* Time of last access. */
        unsigned long st_atime_nsec;
-       long st_mtime;                  /* Time of last modification. */
+       unsigned long st_mtime;         /* Time of last modification. */
        unsigned long st_mtime_nsec;
-       long st_ctime;                  /* Time of last status change. */
+       unsigned long st_ctime;         /* Time of last status change. */
        unsigned long st_ctime_nsec;
        unsigned long __unused4;
        unsigned long __unused5;
index e0cb9116d8abe10249edcad13fdbcec603447bbe..62b1e8f3c13c38bb99e23bd457cc61e858628abe 100644 (file)
@@ -46,42 +46,6 @@ static inline int irqs_disabled(void)
        return flags & 0xf;
 }
 
-#define RSR_CPENABLE(x)        do {                                              \
-       __asm__ __volatile__("rsr %0," __stringify(CPENABLE) : "=a" (x)); \
-       } while(0);
-#define WSR_CPENABLE(x)        do {                                              \
-       __asm__ __volatile__("wsr %0," __stringify(CPENABLE)";rsync"      \
-                            :: "a" (x));} while(0);
-
-#define clear_cpenable() __clear_cpenable()
-
-static inline void __clear_cpenable(void)
-{
-#if XCHAL_HAVE_CP
-       unsigned long i = 0;
-       WSR_CPENABLE(i);
-#endif
-}
-
-static inline void enable_coprocessor(int i)
-{
-#if XCHAL_HAVE_CP
-       int cp;
-       RSR_CPENABLE(cp);
-       cp |= 1 << i;
-       WSR_CPENABLE(cp);
-#endif
-}
-
-static inline void disable_coprocessor(int i)
-{
-#if XCHAL_HAVE_CP
-       int cp;
-       RSR_CPENABLE(cp);
-       cp &= ~(1 << i);
-       WSR_CPENABLE(cp);
-#endif
-}
 
 #define smp_read_barrier_depends() do { } while(0)
 #define read_barrier_depends() do { } while(0)
@@ -111,7 +75,6 @@ extern void *_switch_to(void *last, void *next);
 
 #define switch_to(prev,next,last)              \
 do {                                           \
-       clear_cpenable();                       \
        (last) = _switch_to(prev, next);        \
 } while(0)
 
@@ -244,7 +207,7 @@ static inline void spill_registers(void)
                "wsr    a13," __stringify(SAR) "\n\t"
                "wsr    a14," __stringify(PS) "\n\t"
                :: "a" (&a0), "a" (&ps)
-               : "a2", "a3", "a12", "a13", "a14", "a15", "memory");
+               : "a2", "a3", "a4", "a7", "a11", "a12", "a13", "a14", "a15", "memory");
 }
 
 #define arch_align_stack(x) (x)
index 52c958285bcbaa919c85c26325cba608bbf8652b..a2c640682ed94f05f030a6b07b968456b7a294ac 100644 (file)
 
 #ifndef __ASSEMBLY__
 
+#if XTENSA_HAVE_COPROCESSORS
+
+typedef struct xtregs_coprocessor {
+       xtregs_cp0_t cp0;
+       xtregs_cp1_t cp1;
+       xtregs_cp2_t cp2;
+       xtregs_cp3_t cp3;
+       xtregs_cp4_t cp4;
+       xtregs_cp5_t cp5;
+       xtregs_cp6_t cp6;
+       xtregs_cp7_t cp7;
+} xtregs_coprocessor_t;
+
+#endif
+
 struct thread_info {
        struct task_struct      *task;          /* main task structure */
        struct exec_domain      *exec_domain;   /* execution domain */
@@ -38,7 +53,13 @@ struct thread_info {
        mm_segment_t            addr_limit;     /* thread address space */
        struct restart_block    restart_block;
 
+       unsigned long           cpenable;
 
+       /* Allocate storage for extra user states and coprocessor states. */
+#if XTENSA_HAVE_COPROCESSORS
+       xtregs_coprocessor_t    xtregs_cp;
+#endif
+       xtregs_user_t           xtregs_user;
 };
 
 #else /* !__ASSEMBLY__ */
index a5fca59fba9e4fb703c3120b2acd6cb5d3e339b0..b83a8181d448d9246bd84dd531f8953836225571 100644 (file)
@@ -63,10 +63,10 @@ extern cycles_t cacheflush_time;
  * Register access.
  */
 
-#define WSR_CCOUNT(r)    __asm__("wsr %0,"__stringify(CCOUNT) :: "a" (r))
-#define RSR_CCOUNT(r)    __asm__("rsr %0,"__stringify(CCOUNT) : "=a" (r))
-#define WSR_CCOMPARE(x,r) __asm__("wsr %0,"__stringify(CCOMPARE)"+"__stringify(x) :: "a"(r))
-#define RSR_CCOMPARE(x,r) __asm__("rsr %0,"__stringify(CCOMPARE)"+"__stringify(x) : "=a"(r))
+#define WSR_CCOUNT(r)    asm volatile ("wsr %0,"__stringify(CCOUNT) :: "a" (r))
+#define RSR_CCOUNT(r)    asm volatile ("rsr %0,"__stringify(CCOUNT) : "=a" (r))
+#define WSR_CCOMPARE(x,r) asm volatile ("wsr %0,"__stringify(CCOMPARE)"+"__stringify(x) :: "a"(r))
+#define RSR_CCOMPARE(x,r) asm volatile ("rsr %0,"__stringify(CCOMPARE)"+"__stringify(x) : "=a"(r))
 
 static inline unsigned long get_ccount (void)
 {
index d6352da05b10b9b29660b5121581dc44ae838423..b8528426ab1f0c8174db560b2caf6bdb5168cea9 100644 (file)
@@ -26,6 +26,7 @@
 #include <asm/current.h>
 #include <asm/asm-offsets.h>
 #include <asm/processor.h>
+#include <asm/types.h>
 
 /*
  * These assembly macros mirror the C macros that follow below.  They
  *     <at>    destroyed (actually, (TASK_SIZE + 1 - size))
  */
        .macro  user_ok aa, as, at, error
-       movi    \at, (TASK_SIZE+1)
+       movi    \at, __XTENSA_UL_CONST(TASK_SIZE)
        bgeu    \as, \at, \error
        sub     \at, \at, \as
        bgeu    \aa, \at, \error
@@ -226,20 +227,21 @@ extern long __put_user_bad(void);
        __pu_err;                                               \
 })
 
-#define __put_user_size(x,ptr,size,retval)                     \
-do {                                                           \
-       retval = 0;                                             \
-       switch (size) {                                         \
-        case 1: __put_user_asm(x,ptr,retval,1,"s8i");  break;  \
-        case 2: __put_user_asm(x,ptr,retval,2,"s16i"); break;   \
-        case 4: __put_user_asm(x,ptr,retval,4,"s32i"); break;   \
-        case 8: {                                              \
-                    __typeof__(*ptr) __v64 = x;                \
-                    retval = __copy_to_user(ptr,&__v64,8);     \
-                    break;                                     \
-               }                                               \
-       default: __put_user_bad();                              \
-       }                                                       \
+#define __put_user_size(x,ptr,size,retval)                             \
+do {                                                                   \
+       int __cb;                                                       \
+       retval = 0;                                                     \
+       switch (size) {                                                 \
+        case 1: __put_user_asm(x,ptr,retval,1,"s8i",__cb);  break;     \
+        case 2: __put_user_asm(x,ptr,retval,2,"s16i",__cb); break;     \
+        case 4: __put_user_asm(x,ptr,retval,4,"s32i",__cb); break;     \
+        case 8: {                                                      \
+                    __typeof__(*ptr) __v64 = x;                        \
+                    retval = __copy_to_user(ptr,&__v64,8);             \
+                    break;                                             \
+               }                                                       \
+       default: __put_user_bad();                                      \
+       }                                                               \
 } while (0)
 
 
@@ -267,14 +269,14 @@ do {                                                              \
 #define __check_align_1  ""
 
 #define __check_align_2                                \
-       "   _bbci.l %2,  0, 1f          \n"     \
-       "   movi    %0, %3              \n"     \
+       "   _bbci.l %3,  0, 1f          \n"     \
+       "   movi    %0, %4              \n"     \
        "   _j      2f                  \n"
 
 #define __check_align_4                                \
-       "   _bbsi.l %2,  0, 0f          \n"     \
-       "   _bbci.l %2,  1, 1f          \n"     \
-       "0: movi    %0, %3              \n"     \
+       "   _bbsi.l %3,  0, 0f          \n"     \
+       "   _bbci.l %3,  1, 1f          \n"     \
+       "0: movi    %0, %4              \n"     \
        "   _j      2f                  \n"
 
 
@@ -286,24 +288,24 @@ do {                                                              \
  * WARNING: If you modify this macro at all, verify that the
  * __check_align_* macros still work.
  */
-#define __put_user_asm(x, addr, err, align, insn) \
-   __asm__ __volatile__(                       \
-       __check_align_##align                   \
-       "1: "insn"  %1, %2, 0           \n"     \
-       "2:                             \n"     \
-       "   .section  .fixup,\"ax\"     \n"     \
-       "   .align 4                    \n"     \
-       "4:                             \n"     \
-       "   .long  2b                   \n"     \
-       "5:                             \n"     \
-       "   l32r   %2, 4b               \n"     \
-        "   movi   %0, %3              \n"     \
-        "   jx     %2                  \n"     \
-       "   .previous                   \n"     \
-       "   .section  __ex_table,\"a\"  \n"     \
-       "   .long       1b, 5b          \n"     \
-       "   .previous"                          \
-       :"=r" (err)                             \
+#define __put_user_asm(x, addr, err, align, insn, cb)  \
+   __asm__ __volatile__(                               \
+       __check_align_##align                           \
+       "1: "insn"  %2, %3, 0           \n"             \
+       "2:                             \n"             \
+       "   .section  .fixup,\"ax\"     \n"             \
+       "   .align 4                    \n"             \
+       "4:                             \n"             \
+       "   .long  2b                   \n"             \
+       "5:                             \n"             \
+       "   l32r   %1, 4b               \n"             \
+        "   movi   %0, %4              \n"             \
+        "   jx     %1                  \n"             \
+       "   .previous                   \n"             \
+       "   .section  __ex_table,\"a\"  \n"             \
+       "   .long       1b, 5b          \n"             \
+       "   .previous"                                  \
+       :"=r" (err), "=r" (cb)                          \
        :"r" ((int)(x)), "r" (addr), "i" (-EFAULT), "0" (err))
 
 #define __get_user_nocheck(x,ptr,size)                         \
@@ -328,11 +330,12 @@ extern long __get_user_bad(void);
 
 #define __get_user_size(x,ptr,size,retval)                             \
 do {                                                                   \
+       int __cb;                                                       \
        retval = 0;                                                     \
         switch (size) {                                                        \
-          case 1: __get_user_asm(x,ptr,retval,1,"l8ui");  break;       \
-          case 2: __get_user_asm(x,ptr,retval,2,"l16ui"); break;       \
-          case 4: __get_user_asm(x,ptr,retval,4,"l32i");  break;       \
+          case 1: __get_user_asm(x,ptr,retval,1,"l8ui",__cb);  break;  \
+          case 2: __get_user_asm(x,ptr,retval,2,"l16ui",__cb); break;  \
+          case 4: __get_user_asm(x,ptr,retval,4,"l32i",__cb);  break;  \
           case 8: retval = __copy_from_user(&x,ptr,8);    break;       \
           default: (x) = __get_user_bad();                             \
         }                                                              \
@@ -343,25 +346,25 @@ do {                                                                      \
  * WARNING: If you modify this macro at all, verify that the
  * __check_align_* macros still work.
  */
-#define __get_user_asm(x, addr, err, align, insn) \
+#define __get_user_asm(x, addr, err, align, insn, cb) \
    __asm__ __volatile__(                       \
        __check_align_##align                   \
-       "1: "insn"  %1, %2, 0           \n"     \
+       "1: "insn"  %2, %3, 0           \n"     \
        "2:                             \n"     \
        "   .section  .fixup,\"ax\"     \n"     \
        "   .align 4                    \n"     \
        "4:                             \n"     \
        "   .long  2b                   \n"     \
        "5:                             \n"     \
-       "   l32r   %2, 4b               \n"     \
-       "   movi   %1, 0                \n"     \
-        "   movi   %0, %3              \n"     \
-        "   jx     %2                  \n"     \
+       "   l32r   %1, 4b               \n"     \
+       "   movi   %2, 0                \n"     \
+        "   movi   %0, %4              \n"     \
+        "   jx     %1                  \n"     \
        "   .previous                   \n"     \
        "   .section  __ex_table,\"a\"  \n"     \
        "   .long       1b, 5b          \n"     \
        "   .previous"                          \
-       :"=r" (err), "=r" (x)                   \
+       :"=r" (err), "=r" (cb), "=r" (x)        \
        :"r" (addr), "i" (-EFAULT), "0" (err))
 
 
diff --git a/include/asm-xtensa/variant-fsf/tie-asm.h b/include/asm-xtensa/variant-fsf/tie-asm.h
new file mode 100644 (file)
index 0000000..68a73bf
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * This header file contains assembly-language definitions (assembly
+ * macros, etc.) for this specific Xtensa processor's TIE extensions
+ * and options.  It is customized to this Xtensa processor configuration.
+ *
+ * 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) 1999-2008 Tensilica Inc.
+ */
+
+#ifndef _XTENSA_CORE_TIE_ASM_H
+#define _XTENSA_CORE_TIE_ASM_H
+
+/*  Selection parameter values for save-area save/restore macros:  */
+/*  Option vs. TIE:  */
+#define XTHAL_SAS_TIE  0x0001  /* custom extension or coprocessor */
+#define XTHAL_SAS_OPT  0x0002  /* optional (and not a coprocessor) */
+/*  Whether used automatically by compiler:  */
+#define XTHAL_SAS_NOCC 0x0004  /* not used by compiler w/o special opts/code */
+#define XTHAL_SAS_CC   0x0008  /* used by compiler without special opts/code */
+/*  ABI handling across function calls:  */
+#define XTHAL_SAS_CALR 0x0010  /* caller-saved */
+#define XTHAL_SAS_CALE 0x0020  /* callee-saved */
+#define XTHAL_SAS_GLOB 0x0040  /* global across function calls (in thread) */
+/*  Misc  */
+#define XTHAL_SAS_ALL  0xFFFF  /* include all default NCP contents */
+
+
+
+/* Macro to save all non-coprocessor (extra) custom TIE and optional state
+ * (not including zero-overhead loop registers).
+ * Save area ptr (clobbered):  ptr  (1 byte aligned)
+ * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
+ */
+       .macro xchal_ncp_store  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
+       xchal_sa_start  \continue, \ofs
+       .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
+       xchal_sa_align  \ptr, 0, 1024-4, 4, 4
+       rur     \at1, THREADPTR         // threadptr option
+       s32i    \at1, \ptr, .Lxchal_ofs_ + 0
+       .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
+       .endif
+       .endm   // xchal_ncp_store
+
+/* Macro to save all non-coprocessor (extra) custom TIE and optional state
+ * (not including zero-overhead loop registers).
+ * Save area ptr (clobbered):  ptr  (1 byte aligned)
+ * Scratch regs  (clobbered):  at1..at4  (only first XCHAL_NCP_NUM_ATMPS needed)
+ */
+       .macro xchal_ncp_load  ptr at1 at2 at3 at4  continue=0 ofs=-1 select=XTHAL_SAS_ALL
+       xchal_sa_start  \continue, \ofs
+       .ifeq (XTHAL_SAS_OPT | XTHAL_SAS_CC | XTHAL_SAS_GLOB) & ~\select
+       xchal_sa_align  \ptr, 0, 1024-4, 4, 4
+       l32i    \at1, \ptr, .Lxchal_ofs_ + 0
+       wur     \at1, THREADPTR         // threadptr option
+       .set    .Lxchal_ofs_, .Lxchal_ofs_ + 4
+       .endif
+       .endm   // xchal_ncp_load
+
+
+
+#define XCHAL_NCP_NUM_ATMPS    1
+
+
+#define XCHAL_SA_NUM_ATMPS     1
+
+#endif /*_XTENSA_CORE_TIE_ASM_H*/
+
index a73c71664918e3cedba9768fef993f07560e0b72..bf4020116df521d18e1891d33a1815154b6046e9 100644 (file)
@@ -1,22 +1,77 @@
 /*
- * Xtensa processor core configuration information.
+ * This header file describes this specific Xtensa processor's TIE extensions
+ * that extend basic Xtensa core functionality.  It is customized to this
+ * Xtensa processor configuration.
  *
  * 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) 1999-2006 Tensilica Inc.
+ * Copyright (C) 1999-2007 Tensilica Inc.
  */
 
-#ifndef XTENSA_TIE_H
-#define XTENSA_TIE_H
-
-/*----------------------------------------------------------------------
-                       COPROCESSORS and EXTRA STATE
-  ----------------------------------------------------------------------*/
+#ifndef _XTENSA_CORE_TIE_H
+#define _XTENSA_CORE_TIE_H
 
 #define XCHAL_CP_NUM                   0       /* number of coprocessors */
-#define XCHAL_CP_MASK                  0x00
+#define XCHAL_CP_MAX                   0       /* max CP ID + 1 (0 if none) */
+#define XCHAL_CP_MASK                  0x00    /* bitmask of all CPs by ID */
+#define XCHAL_CP_PORT_MASK             0x00    /* bitmask of only port CPs */
+
+/*  Basic parameters of each coprocessor:  */
+#define XCHAL_CP7_NAME                 "XTIOP"
+#define XCHAL_CP7_IDENT                        XTIOP
+#define XCHAL_CP7_SA_SIZE              0       /* size of state save area */
+#define XCHAL_CP7_SA_ALIGN             1       /* min alignment of save area */
+#define XCHAL_CP_ID_XTIOP              7       /* coprocessor ID (0..7) */
+
+/*  Filler info for unassigned coprocessors, to simplify arrays etc:  */
+#define XCHAL_NCP_SA_SIZE              0
+#define XCHAL_NCP_SA_ALIGN             1
+#define XCHAL_CP0_SA_SIZE              0
+#define XCHAL_CP0_SA_ALIGN             1
+#define XCHAL_CP1_SA_SIZE              0
+#define XCHAL_CP1_SA_ALIGN             1
+#define XCHAL_CP2_SA_SIZE              0
+#define XCHAL_CP2_SA_ALIGN             1
+#define XCHAL_CP3_SA_SIZE              0
+#define XCHAL_CP3_SA_ALIGN             1
+#define XCHAL_CP4_SA_SIZE              0
+#define XCHAL_CP4_SA_ALIGN             1
+#define XCHAL_CP5_SA_SIZE              0
+#define XCHAL_CP5_SA_ALIGN             1
+#define XCHAL_CP6_SA_SIZE              0
+#define XCHAL_CP6_SA_ALIGN             1
+
+/*  Save area for non-coprocessor optional and custom (TIE) state:  */
+#define XCHAL_NCP_SA_SIZE              0
+#define XCHAL_NCP_SA_ALIGN             1
+
+/*  Total save area for optional and custom state (NCP + CPn):  */
+#define XCHAL_TOTAL_SA_SIZE            0       /* with 16-byte align padding */
+#define XCHAL_TOTAL_SA_ALIGN           1       /* actual minimum alignment */
+
+#define XCHAL_NCP_SA_NUM       0
+#define XCHAL_NCP_SA_LIST(s)
+#define XCHAL_CP0_SA_NUM       0
+#define XCHAL_CP0_SA_LIST(s)
+#define XCHAL_CP1_SA_NUM       0
+#define XCHAL_CP1_SA_LIST(s)
+#define XCHAL_CP2_SA_NUM       0
+#define XCHAL_CP2_SA_LIST(s)
+#define XCHAL_CP3_SA_NUM       0
+#define XCHAL_CP3_SA_LIST(s)
+#define XCHAL_CP4_SA_NUM       0
+#define XCHAL_CP4_SA_LIST(s)
+#define XCHAL_CP5_SA_NUM       0
+#define XCHAL_CP5_SA_LIST(s)
+#define XCHAL_CP6_SA_NUM       0
+#define XCHAL_CP6_SA_LIST(s)
+#define XCHAL_CP7_SA_NUM       0
+#define XCHAL_CP7_SA_LIST(s)
+
+/* Byte length of instruction from its first nibble (op0 field), per FLIX.  */
+#define XCHAL_OP0_FORMAT_LENGTHS       3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3
 
-#endif /*XTENSA_CONFIG_TIE_H*/
+#endif /*_XTENSA_CORE_TIE_H*/
 
index a404a0055dd7400489f5cc2ecff32c45d87f61ce..fb58c0493cf2f4524232ed95fd7b56371602ad28 100644 (file)
@@ -42,6 +42,7 @@
    discard it in modules) */
 #define __init         __section(.init.text) __cold
 #define __initdata     __section(.init.data)
+#define __initconst    __section(.init.rodata)
 #define __exitdata     __section(.exit.data)
 #define __exit_call    __used __section(.exitcall.exit)
 
 #define __memexitconst   __section(.memexit.rodata)
 
 /* For assembly routines */
+#define __HEAD         .section        ".head.text","ax"
 #define __INIT         .section        ".init.text","ax"
 #define __FINIT                .previous
 
index 2e098f940cec74083142d07a017522261b526c5e..ce7603a73156b15490d054e4374fe1560d04a57f 100644 (file)
@@ -1197,7 +1197,7 @@ static inline struct ata_link *ata_port_next_link(struct ata_link *link)
                return ap->pmp_link;
        }
 
-       if (++link - ap->pmp_link < ap->nr_pmp_links)
+       if (++link < ap->nr_pmp_links + ap->pmp_link)
                return link;
        return NULL;
 }
index 26c7124b841aee0dba64cb81e3d54bed248c0282..3b3e1341163f3075321b487362dc8bba0bab91f3 100644 (file)
@@ -1171,12 +1171,18 @@ static inline void enable_debug_pagealloc(void)
 {
        debug_pagealloc_enabled = 1;
 }
+#ifdef CONFIG_HIBERNATION
+extern bool kernel_page_present(struct page *page);
+#endif /* CONFIG_HIBERNATION */
 #else
 static inline void
 kernel_map_pages(struct page *page, int numpages, int enable) {}
 static inline void enable_debug_pagealloc(void)
 {
 }
+#ifdef CONFIG_HIBERNATION
+static inline bool kernel_page_present(struct page *page) { return true; }
+#endif /* CONFIG_HIBERNATION */
 #endif
 
 extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
index 95250d7c8d91db36593fc3707b10c99a8370dc62..72a020cabb4c5238f395c1aa6420a630dc8b49dc 100644 (file)
@@ -875,8 +875,8 @@ static inline void *saveable_highmem_page(unsigned long pfn) { return NULL; }
 #endif /* CONFIG_HIGHMEM */
 
 /**
- *     saveable - Determine whether a non-highmem page should be included in
- *     the suspend image.
+ *     saveable_page - Determine whether a non-highmem page should be included
+ *     in the suspend image.
  *
  *     We should save the page if it isn't Nosave, and is not in the range
  *     of pages statically defined as 'unsaveable', and it isn't a part of
@@ -897,7 +897,8 @@ static struct page *saveable_page(unsigned long pfn)
        if (swsusp_page_is_forbidden(page) || swsusp_page_is_free(page))
                return NULL;
 
-       if (PageReserved(page) && pfn_is_nosave(pfn))
+       if (PageReserved(page)
+           && (!kernel_page_present(page) || pfn_is_nosave(pfn)))
                return NULL;
 
        return page;
@@ -938,6 +939,25 @@ static inline void do_copy_page(long *dst, long *src)
                *dst++ = *src++;
 }
 
+
+/**
+ *     safe_copy_page - check if the page we are going to copy is marked as
+ *             present in the kernel page tables (this always is the case if
+ *             CONFIG_DEBUG_PAGEALLOC is not set and in that case
+ *             kernel_page_present() always returns 'true').
+ */
+static void safe_copy_page(void *dst, struct page *s_page)
+{
+       if (kernel_page_present(s_page)) {
+               do_copy_page(dst, page_address(s_page));
+       } else {
+               kernel_map_pages(s_page, 1, 1);
+               do_copy_page(dst, page_address(s_page));
+               kernel_map_pages(s_page, 1, 0);
+       }
+}
+
+
 #ifdef CONFIG_HIGHMEM
 static inline struct page *
 page_is_saveable(struct zone *zone, unsigned long pfn)
@@ -946,8 +966,7 @@ page_is_saveable(struct zone *zone, unsigned long pfn)
                        saveable_highmem_page(pfn) : saveable_page(pfn);
 }
 
-static inline void
-copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
+static void copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
 {
        struct page *s_page, *d_page;
        void *src, *dst;
@@ -961,29 +980,26 @@ copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
                kunmap_atomic(src, KM_USER0);
                kunmap_atomic(dst, KM_USER1);
        } else {
-               src = page_address(s_page);
                if (PageHighMem(d_page)) {
                        /* Page pointed to by src may contain some kernel
                         * data modified by kmap_atomic()
                         */
-                       do_copy_page(buffer, src);
+                       safe_copy_page(buffer, s_page);
                        dst = kmap_atomic(pfn_to_page(dst_pfn), KM_USER0);
                        memcpy(dst, buffer, PAGE_SIZE);
                        kunmap_atomic(dst, KM_USER0);
                } else {
-                       dst = page_address(d_page);
-                       do_copy_page(dst, src);
+                       safe_copy_page(page_address(d_page), s_page);
                }
        }
 }
 #else
 #define page_is_saveable(zone, pfn)    saveable_page(pfn)
 
-static inline void
-copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
+static inline void copy_data_page(unsigned long dst_pfn, unsigned long src_pfn)
 {
-       do_copy_page(page_address(pfn_to_page(dst_pfn)),
-                       page_address(pfn_to_page(src_pfn)));
+       safe_copy_page(page_address(pfn_to_page(dst_pfn)),
+                               pfn_to_page(src_pfn));
 }
 #endif /* CONFIG_HIGHMEM */
 
index 61742771c65dd28341a24fbdf992479350d209a3..695b5d657cf59cc89ba1a4989d7052085e942abf 100644 (file)
@@ -1200,7 +1200,7 @@ static void report_sec_mismatch(const char *modname, enum mismatch mismatch,
                "annotate %s with a matching annotation.\n",
                from, sec2annotation(fromsec), fromsym, from_p,
                to, sec2annotation(tosec), tosym, to_p,
-               fromsym, tosym, fromsym);
+               tosym, fromsym, tosym);
                break;
        case INIT_TO_EXIT:
                fprintf(stderr,