Merge branch 'upstream'
This commit is contained in:
commit
6e07e16404
477 changed files with 28019 additions and 7495 deletions
|
@ -127,13 +127,6 @@ Who: Christoph Hellwig <hch@lst.de>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: EXPORT_SYMBOL(lookup_hash)
|
|
||||||
When: January 2006
|
|
||||||
Why: Too low-level interface. Use lookup_one_len or lookup_create instead.
|
|
||||||
Who: Christoph Hellwig <hch@lst.de>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: CONFIG_FORCED_INLINING
|
What: CONFIG_FORCED_INLINING
|
||||||
When: June 2006
|
When: June 2006
|
||||||
Why: Config option is there to see if gcc is good enough. (in january
|
Why: Config option is there to see if gcc is good enough. (in january
|
||||||
|
@ -241,3 +234,15 @@ Why: The USB subsystem has changed a lot over time, and it has been
|
||||||
Who: Greg Kroah-Hartman <gregkh@suse.de>
|
Who: Greg Kroah-Hartman <gregkh@suse.de>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: find_trylock_page
|
||||||
|
When: January 2007
|
||||||
|
Why: The interface no longer has any callers left in the kernel. It
|
||||||
|
is an odd interface (compared with other find_*_page functions), in
|
||||||
|
that it does not take a refcount to the page, only the page lock.
|
||||||
|
It should be replaced with find_get_page or find_lock_page if possible.
|
||||||
|
This feature removal can be reevaluated if users of the interface
|
||||||
|
cannot cleanly use something else.
|
||||||
|
Who: Nick Piggin <npiggin@suse.de>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
71
Documentation/leds-class.txt
Normal file
71
Documentation/leds-class.txt
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
LED handling under Linux
|
||||||
|
========================
|
||||||
|
|
||||||
|
If you're reading this and thinking about keyboard leds, these are
|
||||||
|
handled by the input subsystem and the led class is *not* needed.
|
||||||
|
|
||||||
|
In its simplest form, the LED class just allows control of LEDs from
|
||||||
|
userspace. LEDs appear in /sys/class/leds/. The brightness file will
|
||||||
|
set the brightness of the LED (taking a value 0-255). Most LEDs don't
|
||||||
|
have hardware brightness support so will just be turned on for non-zero
|
||||||
|
brightness settings.
|
||||||
|
|
||||||
|
The class also introduces the optional concept of an LED trigger. A trigger
|
||||||
|
is a kernel based source of led events. Triggers can either be simple or
|
||||||
|
complex. A simple trigger isn't configurable and is designed to slot into
|
||||||
|
existing subsystems with minimal additional code. Examples are the ide-disk,
|
||||||
|
nand-disk and sharpsl-charge triggers. With led triggers disabled, the code
|
||||||
|
optimises away.
|
||||||
|
|
||||||
|
Complex triggers whilst available to all LEDs have LED specific
|
||||||
|
parameters and work on a per LED basis. The timer trigger is an example.
|
||||||
|
|
||||||
|
You can change triggers in a similar manner to the way an IO scheduler
|
||||||
|
is chosen (via /sys/class/leds/<device>/trigger). Trigger specific
|
||||||
|
parameters can appear in /sys/class/leds/<device> once a given trigger is
|
||||||
|
selected.
|
||||||
|
|
||||||
|
|
||||||
|
Design Philosophy
|
||||||
|
=================
|
||||||
|
|
||||||
|
The underlying design philosophy is simplicity. LEDs are simple devices
|
||||||
|
and the aim is to keep a small amount of code giving as much functionality
|
||||||
|
as possible. Please keep this in mind when suggesting enhancements.
|
||||||
|
|
||||||
|
|
||||||
|
LED Device Naming
|
||||||
|
=================
|
||||||
|
|
||||||
|
Is currently of the form:
|
||||||
|
|
||||||
|
"devicename:colour"
|
||||||
|
|
||||||
|
There have been calls for LED properties such as colour to be exported as
|
||||||
|
individual led class attributes. As a solution which doesn't incur as much
|
||||||
|
overhead, I suggest these become part of the device name. The naming scheme
|
||||||
|
above leaves scope for further attributes should they be needed.
|
||||||
|
|
||||||
|
|
||||||
|
Known Issues
|
||||||
|
============
|
||||||
|
|
||||||
|
The LED Trigger core cannot be a module as the simple trigger functions
|
||||||
|
would cause nightmare dependency issues. I see this as a minor issue
|
||||||
|
compared to the benefits the simple trigger functionality brings. The
|
||||||
|
rest of the LED subsystem can be modular.
|
||||||
|
|
||||||
|
Some leds can be programmed to flash in hardware. As this isn't a generic
|
||||||
|
LED device property, this should be exported as a device specific sysfs
|
||||||
|
attribute rather than part of the class if this functionality is required.
|
||||||
|
|
||||||
|
|
||||||
|
Future Development
|
||||||
|
==================
|
||||||
|
|
||||||
|
At the moment, a trigger can't be created specifically for a single LED.
|
||||||
|
There are a number of cases where a trigger might only be mappable to a
|
||||||
|
particular LED (ACPI?). The addition of triggers provided by the LED driver
|
||||||
|
should cover this option and be possible to add without breaking the
|
||||||
|
current interface.
|
||||||
|
|
1913
Documentation/memory-barriers.txt
Normal file
1913
Documentation/memory-barriers.txt
Normal file
File diff suppressed because it is too large
Load diff
36
Documentation/networking/bcm43xx.txt
Normal file
36
Documentation/networking/bcm43xx.txt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
|
||||||
|
BCM43xx Linux Driver Project
|
||||||
|
============================
|
||||||
|
|
||||||
|
About this software
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
The goal of this project is to develop a linux driver for Broadcom
|
||||||
|
BCM43xx chips, based on the specification at
|
||||||
|
http://bcm-specs.sipsolutions.net/
|
||||||
|
|
||||||
|
The project page is http://bcm43xx.berlios.de/
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
1) Linux Kernel 2.6.16 or later
|
||||||
|
http://www.kernel.org/
|
||||||
|
|
||||||
|
You may want to configure your kernel with:
|
||||||
|
|
||||||
|
CONFIG_DEBUG_FS (optional):
|
||||||
|
-> Kernel hacking
|
||||||
|
-> Debug Filesystem
|
||||||
|
|
||||||
|
2) SoftMAC IEEE 802.11 Networking Stack extension and patched ieee80211
|
||||||
|
modules:
|
||||||
|
http://softmac.sipsolutions.net/
|
||||||
|
|
||||||
|
3) Firmware Files
|
||||||
|
|
||||||
|
Please try fwcutter. Fwcutter can extract the firmware from various
|
||||||
|
binary driver files. It supports driver files from Windows, MacOS and
|
||||||
|
Linux. You can get fwcutter from http://bcm43xx.berlios.de/.
|
||||||
|
Also, fwcutter comes with a README file for further instructions.
|
|
@ -216,8 +216,6 @@ EXPORT_SYMBOL(memcpy);
|
||||||
EXPORT_SYMBOL(memset);
|
EXPORT_SYMBOL(memset);
|
||||||
EXPORT_SYMBOL(memchr);
|
EXPORT_SYMBOL(memchr);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
#ifdef CONFIG_ALPHA_IRONGATE
|
#ifdef CONFIG_ALPHA_IRONGATE
|
||||||
EXPORT_SYMBOL(irongate_ioremap);
|
EXPORT_SYMBOL(irongate_ioremap);
|
||||||
EXPORT_SYMBOL(irongate_iounmap);
|
EXPORT_SYMBOL(irongate_iounmap);
|
||||||
|
|
|
@ -435,7 +435,7 @@ marvel_specify_io7(char *str)
|
||||||
str = pchar;
|
str = pchar;
|
||||||
} while(*str);
|
} while(*str);
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("io7=", marvel_specify_io7);
|
__setup("io7=", marvel_specify_io7);
|
||||||
|
|
||||||
|
|
|
@ -77,6 +77,14 @@ config FIQ
|
||||||
config ARCH_MTD_XIP
|
config ARCH_MTD_XIP
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config VECTORS_BASE
|
||||||
|
hex
|
||||||
|
default 0xffff0000 if MMU
|
||||||
|
default DRAM_BASE if REMAP_VECTORS_TO_RAM
|
||||||
|
default 0x00000000
|
||||||
|
help
|
||||||
|
The base address of exception vectors.
|
||||||
|
|
||||||
source "init/Kconfig"
|
source "init/Kconfig"
|
||||||
|
|
||||||
menu "System Type"
|
menu "System Type"
|
||||||
|
@ -839,6 +847,8 @@ source "drivers/misc/Kconfig"
|
||||||
|
|
||||||
source "drivers/mfd/Kconfig"
|
source "drivers/mfd/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/leds/Kconfig"
|
||||||
|
|
||||||
source "drivers/media/Kconfig"
|
source "drivers/media/Kconfig"
|
||||||
|
|
||||||
source "drivers/video/Kconfig"
|
source "drivers/video/Kconfig"
|
||||||
|
|
44
arch/arm/Kconfig-nommu
Normal file
44
arch/arm/Kconfig-nommu
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
#
|
||||||
|
# Kconfig for uClinux(non-paged MM) depend configurations
|
||||||
|
# Hyok S. Choi <hyok.choi@samsung.com>
|
||||||
|
#
|
||||||
|
|
||||||
|
config SET_MEM_PARAM
|
||||||
|
bool "Set flash/sdram size and base addr"
|
||||||
|
help
|
||||||
|
Say Y to manually set the base addresses and sizes.
|
||||||
|
otherwise, the default values are assigned.
|
||||||
|
|
||||||
|
config DRAM_BASE
|
||||||
|
hex '(S)DRAM Base Address' if SET_MEM_PARAM
|
||||||
|
default 0x00800000
|
||||||
|
|
||||||
|
config DRAM_SIZE
|
||||||
|
hex '(S)DRAM SIZE' if SET_MEM_PARAM
|
||||||
|
default 0x00800000
|
||||||
|
|
||||||
|
config FLASH_MEM_BASE
|
||||||
|
hex 'FLASH Base Address' if SET_MEM_PARAM
|
||||||
|
default 0x00400000
|
||||||
|
|
||||||
|
config FLASH_SIZE
|
||||||
|
hex 'FLASH Size' if SET_MEM_PARAM
|
||||||
|
default 0x00400000
|
||||||
|
|
||||||
|
config REMAP_VECTORS_TO_RAM
|
||||||
|
bool 'Install vectors to the begining of RAM' if DRAM_BASE
|
||||||
|
depends on DRAM_BASE
|
||||||
|
help
|
||||||
|
The kernel needs to change the hardware exception vectors.
|
||||||
|
In nommu mode, the hardware exception vectors are normally
|
||||||
|
placed at address 0x00000000. However, this region may be
|
||||||
|
occupied by read-only memory depending on H/W design.
|
||||||
|
|
||||||
|
If the region contains read-write memory, say 'n' here.
|
||||||
|
|
||||||
|
If your CPU provides a remap facility which allows the exception
|
||||||
|
vectors to be mapped to writable memory, say 'n' here.
|
||||||
|
|
||||||
|
Otherwise, say 'y' here. In this case, the kernel will require
|
||||||
|
external support to redirect the hardware exception vectors to
|
||||||
|
the writable versions located at DRAM_BASE.
|
|
@ -20,6 +20,11 @@ GZFLAGS :=-9
|
||||||
# Select a platform tht is kept up-to-date
|
# Select a platform tht is kept up-to-date
|
||||||
KBUILD_DEFCONFIG := versatile_defconfig
|
KBUILD_DEFCONFIG := versatile_defconfig
|
||||||
|
|
||||||
|
# defines filename extension depending memory manement type.
|
||||||
|
ifeq ($(CONFIG_MMU),)
|
||||||
|
MMUEXT := -nommu
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_FRAME_POINTER),y)
|
ifeq ($(CONFIG_FRAME_POINTER),y)
|
||||||
CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
||||||
endif
|
endif
|
||||||
|
@ -73,7 +78,7 @@ AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
|
||||||
CHECKFLAGS += -D__arm__
|
CHECKFLAGS += -D__arm__
|
||||||
|
|
||||||
#Default value
|
#Default value
|
||||||
head-y := arch/arm/kernel/head.o arch/arm/kernel/init_task.o
|
head-y := arch/arm/kernel/head$(MMUEXT).o arch/arm/kernel/init_task.o
|
||||||
textofs-y := 0x00008000
|
textofs-y := 0x00008000
|
||||||
|
|
||||||
machine-$(CONFIG_ARCH_RPC) := rpc
|
machine-$(CONFIG_ARCH_RPC) := rpc
|
||||||
|
@ -133,7 +138,7 @@ else
|
||||||
MACHINE :=
|
MACHINE :=
|
||||||
endif
|
endif
|
||||||
|
|
||||||
export TEXT_OFFSET GZFLAGS
|
export TEXT_OFFSET GZFLAGS MMUEXT
|
||||||
|
|
||||||
# Do we have FASTFPE?
|
# Do we have FASTFPE?
|
||||||
FASTFPE :=arch/arm/fastfpe
|
FASTFPE :=arch/arm/fastfpe
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* linux/arch/arm/boot/compressed/head.S
|
* linux/arch/arm/boot/compressed/head.S
|
||||||
*
|
*
|
||||||
* Copyright (C) 1996-2002 Russell King
|
* Copyright (C) 1996-2002 Russell King
|
||||||
|
* Copyright (C) 2004 Hyok S. Choi (MPU support)
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
@ -320,6 +321,62 @@ params: ldr r0, =params_phys
|
||||||
cache_on: mov r3, #8 @ cache_on function
|
cache_on: mov r3, #8 @ cache_on function
|
||||||
b call_cache_fn
|
b call_cache_fn
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Initialize the highest priority protection region, PR7
|
||||||
|
* to cover all 32bit address and cacheable and bufferable.
|
||||||
|
*/
|
||||||
|
__armv4_mpu_cache_on:
|
||||||
|
mov r0, #0x3f @ 4G, the whole
|
||||||
|
mcr p15, 0, r0, c6, c7, 0 @ PR7 Area Setting
|
||||||
|
mcr p15, 0, r0, c6, c7, 1
|
||||||
|
|
||||||
|
mov r0, #0x80 @ PR7
|
||||||
|
mcr p15, 0, r0, c2, c0, 0 @ D-cache on
|
||||||
|
mcr p15, 0, r0, c2, c0, 1 @ I-cache on
|
||||||
|
mcr p15, 0, r0, c3, c0, 0 @ write-buffer on
|
||||||
|
|
||||||
|
mov r0, #0xc000
|
||||||
|
mcr p15, 0, r0, c5, c0, 1 @ I-access permission
|
||||||
|
mcr p15, 0, r0, c5, c0, 0 @ D-access permission
|
||||||
|
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||||
|
mcr p15, 0, r0, c7, c5, 0 @ flush(inval) I-Cache
|
||||||
|
mcr p15, 0, r0, c7, c6, 0 @ flush(inval) D-Cache
|
||||||
|
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||||
|
@ ...I .... ..D. WC.M
|
||||||
|
orr r0, r0, #0x002d @ .... .... ..1. 11.1
|
||||||
|
orr r0, r0, #0x1000 @ ...1 .... .... ....
|
||||||
|
|
||||||
|
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
||||||
|
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c5, 0 @ flush(inval) I-Cache
|
||||||
|
mcr p15, 0, r0, c7, c6, 0 @ flush(inval) D-Cache
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
|
__armv3_mpu_cache_on:
|
||||||
|
mov r0, #0x3f @ 4G, the whole
|
||||||
|
mcr p15, 0, r0, c6, c7, 0 @ PR7 Area Setting
|
||||||
|
|
||||||
|
mov r0, #0x80 @ PR7
|
||||||
|
mcr p15, 0, r0, c2, c0, 0 @ cache on
|
||||||
|
mcr p15, 0, r0, c3, c0, 0 @ write-buffer on
|
||||||
|
|
||||||
|
mov r0, #0xc000
|
||||||
|
mcr p15, 0, r0, c5, c0, 0 @ access permission
|
||||||
|
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
|
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||||
|
@ .... .... .... WC.M
|
||||||
|
orr r0, r0, #0x000d @ .... .... .... 11.1
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
||||||
|
|
||||||
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
__setup_mmu: sub r3, r4, #16384 @ Page directory size
|
__setup_mmu: sub r3, r4, #16384 @ Page directory size
|
||||||
bic r3, r3, #0xff @ Align the pointer
|
bic r3, r3, #0xff @ Align the pointer
|
||||||
bic r3, r3, #0x3f00
|
bic r3, r3, #0x3f00
|
||||||
|
@ -496,6 +553,18 @@ proc_types:
|
||||||
b __armv4_mmu_cache_off
|
b __armv4_mmu_cache_off
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
|
.word 0x41007400 @ ARM74x
|
||||||
|
.word 0xff00ff00
|
||||||
|
b __armv3_mpu_cache_on
|
||||||
|
b __armv3_mpu_cache_off
|
||||||
|
b __armv3_mpu_cache_flush
|
||||||
|
|
||||||
|
.word 0x41009400 @ ARM94x
|
||||||
|
.word 0xff00ff00
|
||||||
|
b __armv4_mpu_cache_on
|
||||||
|
b __armv4_mpu_cache_off
|
||||||
|
b __armv4_mpu_cache_flush
|
||||||
|
|
||||||
.word 0x00007000 @ ARM7 IDs
|
.word 0x00007000 @ ARM7 IDs
|
||||||
.word 0x0000f000
|
.word 0x0000f000
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
@ -562,6 +631,24 @@ proc_types:
|
||||||
cache_off: mov r3, #12 @ cache_off function
|
cache_off: mov r3, #12 @ cache_off function
|
||||||
b call_cache_fn
|
b call_cache_fn
|
||||||
|
|
||||||
|
__armv4_mpu_cache_off:
|
||||||
|
mrc p15, 0, r0, c1, c0
|
||||||
|
bic r0, r0, #0x000d
|
||||||
|
mcr p15, 0, r0, c1, c0 @ turn MPU and cache off
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c10, 4 @ drain write buffer
|
||||||
|
mcr p15, 0, r0, c7, c6, 0 @ flush D-Cache
|
||||||
|
mcr p15, 0, r0, c7, c5, 0 @ flush I-Cache
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
|
__armv3_mpu_cache_off:
|
||||||
|
mrc p15, 0, r0, c1, c0
|
||||||
|
bic r0, r0, #0x000d
|
||||||
|
mcr p15, 0, r0, c1, c0, 0 @ turn MPU and cache off
|
||||||
|
mov r0, #0
|
||||||
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
__armv4_mmu_cache_off:
|
__armv4_mmu_cache_off:
|
||||||
mrc p15, 0, r0, c1, c0
|
mrc p15, 0, r0, c1, c0
|
||||||
bic r0, r0, #0x000d
|
bic r0, r0, #0x000d
|
||||||
|
@ -601,6 +688,24 @@ cache_clean_flush:
|
||||||
mov r3, #16
|
mov r3, #16
|
||||||
b call_cache_fn
|
b call_cache_fn
|
||||||
|
|
||||||
|
__armv4_mpu_cache_flush:
|
||||||
|
mov r2, #1
|
||||||
|
mov r3, #0
|
||||||
|
mcr p15, 0, ip, c7, c6, 0 @ invalidate D cache
|
||||||
|
mov r1, #7 << 5 @ 8 segments
|
||||||
|
1: orr r3, r1, #63 << 26 @ 64 entries
|
||||||
|
2: mcr p15, 0, r3, c7, c14, 2 @ clean & invalidate D index
|
||||||
|
subs r3, r3, #1 << 26
|
||||||
|
bcs 2b @ entries 63 to 0
|
||||||
|
subs r1, r1, #1 << 5
|
||||||
|
bcs 1b @ segments 7 to 0
|
||||||
|
|
||||||
|
teq r2, #0
|
||||||
|
mcrne p15, 0, ip, c7, c5, 0 @ invalidate I cache
|
||||||
|
mcr p15, 0, ip, c7, c10, 4 @ drain WB
|
||||||
|
mov pc, lr
|
||||||
|
|
||||||
|
|
||||||
__armv6_mmu_cache_flush:
|
__armv6_mmu_cache_flush:
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
|
mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
|
||||||
|
@ -638,6 +743,7 @@ no_cache_id:
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
||||||
__armv3_mmu_cache_flush:
|
__armv3_mmu_cache_flush:
|
||||||
|
__armv3_mpu_cache_flush:
|
||||||
mov r1, #0
|
mov r1, #0
|
||||||
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/leds.h>
|
||||||
|
|
||||||
#include <asm/hardware.h>
|
#include <asm/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
@ -75,6 +76,7 @@ static void sharpsl_battery_thread(void *private_);
|
||||||
struct sharpsl_pm_status sharpsl_pm;
|
struct sharpsl_pm_status sharpsl_pm;
|
||||||
DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
|
DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
|
||||||
DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
|
DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
|
||||||
|
DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
|
||||||
|
|
||||||
|
|
||||||
static int get_percentage(int voltage)
|
static int get_percentage(int voltage)
|
||||||
|
@ -190,10 +192,10 @@ void sharpsl_pm_led(int val)
|
||||||
dev_err(sharpsl_pm.dev, "Charging Error!\n");
|
dev_err(sharpsl_pm.dev, "Charging Error!\n");
|
||||||
} else if (val == SHARPSL_LED_ON) {
|
} else if (val == SHARPSL_LED_ON) {
|
||||||
dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
|
dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
|
||||||
|
led_trigger_event(sharpsl_charge_led_trigger, LED_FULL);
|
||||||
} else {
|
} else {
|
||||||
dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
|
dev_dbg(sharpsl_pm.dev, "Charge LED Off\n");
|
||||||
|
led_trigger_event(sharpsl_charge_led_trigger, LED_OFF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -786,6 +788,8 @@ static int __init sharpsl_pm_probe(struct platform_device *pdev)
|
||||||
init_timer(&sharpsl_pm.chrg_full_timer);
|
init_timer(&sharpsl_pm.chrg_full_timer);
|
||||||
sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
|
sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
|
||||||
|
|
||||||
|
led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
|
||||||
|
|
||||||
sharpsl_pm.machinfo->init();
|
sharpsl_pm.machinfo->init();
|
||||||
|
|
||||||
device_create_file(&pdev->dev, &dev_attr_battery_percentage);
|
device_create_file(&pdev->dev, &dev_attr_battery_percentage);
|
||||||
|
@ -807,6 +811,8 @@ static int sharpsl_pm_remove(struct platform_device *pdev)
|
||||||
device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
|
device_remove_file(&pdev->dev, &dev_attr_battery_percentage);
|
||||||
device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
|
device_remove_file(&pdev->dev, &dev_attr_battery_voltage);
|
||||||
|
|
||||||
|
led_trigger_unregister_simple(sharpsl_charge_led_trigger);
|
||||||
|
|
||||||
sharpsl_pm.machinfo->exit();
|
sharpsl_pm.machinfo->exit();
|
||||||
|
|
||||||
del_timer_sync(&sharpsl_pm.chrg_full_timer);
|
del_timer_sync(&sharpsl_pm.chrg_full_timer);
|
||||||
|
|
|
@ -666,7 +666,7 @@ __kuser_helper_start:
|
||||||
*
|
*
|
||||||
* #define __kernel_dmb() \
|
* #define __kernel_dmb() \
|
||||||
* asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
|
* asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
|
||||||
* : : : "lr","cc" )
|
* : : : "r0", "lr","cc" )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__kuser_memory_barrier: @ 0xffff0fa0
|
__kuser_memory_barrier: @ 0xffff0fa0
|
||||||
|
|
217
arch/arm/kernel/head-common.S
Normal file
217
arch/arm/kernel/head-common.S
Normal file
|
@ -0,0 +1,217 @@
|
||||||
|
/*
|
||||||
|
* linux/arch/arm/kernel/head-common.S
|
||||||
|
*
|
||||||
|
* Copyright (C) 1994-2002 Russell King
|
||||||
|
* Copyright (c) 2003 ARM Limited
|
||||||
|
* All Rights Reserved
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
.type __switch_data, %object
|
||||||
|
__switch_data:
|
||||||
|
.long __mmap_switched
|
||||||
|
.long __data_loc @ r4
|
||||||
|
.long __data_start @ r5
|
||||||
|
.long __bss_start @ r6
|
||||||
|
.long _end @ r7
|
||||||
|
.long processor_id @ r4
|
||||||
|
.long __machine_arch_type @ r5
|
||||||
|
.long cr_alignment @ r6
|
||||||
|
.long init_thread_union + THREAD_START_SP @ sp
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following fragment of code is executed with the MMU on in MMU mode,
|
||||||
|
* and uses absolute addresses; this is not position independent.
|
||||||
|
*
|
||||||
|
* r0 = cp#15 control register
|
||||||
|
* r1 = machine ID
|
||||||
|
* r9 = processor ID
|
||||||
|
*/
|
||||||
|
.type __mmap_switched, %function
|
||||||
|
__mmap_switched:
|
||||||
|
adr r3, __switch_data + 4
|
||||||
|
|
||||||
|
ldmia r3!, {r4, r5, r6, r7}
|
||||||
|
cmp r4, r5 @ Copy data segment if needed
|
||||||
|
1: cmpne r5, r6
|
||||||
|
ldrne fp, [r4], #4
|
||||||
|
strne fp, [r5], #4
|
||||||
|
bne 1b
|
||||||
|
|
||||||
|
mov fp, #0 @ Clear BSS (and zero fp)
|
||||||
|
1: cmp r6, r7
|
||||||
|
strcc fp, [r6],#4
|
||||||
|
bcc 1b
|
||||||
|
|
||||||
|
ldmia r3, {r4, r5, r6, sp}
|
||||||
|
str r9, [r4] @ Save processor ID
|
||||||
|
str r1, [r5] @ Save machine type
|
||||||
|
bic r4, r0, #CR_A @ Clear 'A' bit
|
||||||
|
stmia r6, {r0, r4} @ Save control register values
|
||||||
|
b start_kernel
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Exception handling. Something went wrong and we can't proceed. We
|
||||||
|
* ought to tell the user, but since we don't have any guarantee that
|
||||||
|
* we're even running on the right architecture, we do virtually nothing.
|
||||||
|
*
|
||||||
|
* If CONFIG_DEBUG_LL is set we try to print out something about the error
|
||||||
|
* and hope for the best (useful if bootloader fails to pass a proper
|
||||||
|
* machine ID for example).
|
||||||
|
*/
|
||||||
|
|
||||||
|
.type __error_p, %function
|
||||||
|
__error_p:
|
||||||
|
#ifdef CONFIG_DEBUG_LL
|
||||||
|
adr r0, str_p1
|
||||||
|
bl printascii
|
||||||
|
b __error
|
||||||
|
str_p1: .asciz "\nError: unrecognized/unsupported processor variant.\n"
|
||||||
|
.align
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.type __error_a, %function
|
||||||
|
__error_a:
|
||||||
|
#ifdef CONFIG_DEBUG_LL
|
||||||
|
mov r4, r1 @ preserve machine ID
|
||||||
|
adr r0, str_a1
|
||||||
|
bl printascii
|
||||||
|
mov r0, r4
|
||||||
|
bl printhex8
|
||||||
|
adr r0, str_a2
|
||||||
|
bl printascii
|
||||||
|
adr r3, 3f
|
||||||
|
ldmia r3, {r4, r5, r6} @ get machine desc list
|
||||||
|
sub r4, r3, r4 @ get offset between virt&phys
|
||||||
|
add r5, r5, r4 @ convert virt addresses to
|
||||||
|
add r6, r6, r4 @ physical address space
|
||||||
|
1: ldr r0, [r5, #MACHINFO_TYPE] @ get machine type
|
||||||
|
bl printhex8
|
||||||
|
mov r0, #'\t'
|
||||||
|
bl printch
|
||||||
|
ldr r0, [r5, #MACHINFO_NAME] @ get machine name
|
||||||
|
add r0, r0, r4
|
||||||
|
bl printascii
|
||||||
|
mov r0, #'\n'
|
||||||
|
bl printch
|
||||||
|
add r5, r5, #SIZEOF_MACHINE_DESC @ next machine_desc
|
||||||
|
cmp r5, r6
|
||||||
|
blo 1b
|
||||||
|
adr r0, str_a3
|
||||||
|
bl printascii
|
||||||
|
b __error
|
||||||
|
str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x"
|
||||||
|
str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"
|
||||||
|
str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n"
|
||||||
|
.align
|
||||||
|
#endif
|
||||||
|
|
||||||
|
.type __error, %function
|
||||||
|
__error:
|
||||||
|
#ifdef CONFIG_ARCH_RPC
|
||||||
|
/*
|
||||||
|
* Turn the screen red on a error - RiscPC only.
|
||||||
|
*/
|
||||||
|
mov r0, #0x02000000
|
||||||
|
mov r3, #0x11
|
||||||
|
orr r3, r3, r3, lsl #8
|
||||||
|
orr r3, r3, r3, lsl #16
|
||||||
|
str r3, [r0], #4
|
||||||
|
str r3, [r0], #4
|
||||||
|
str r3, [r0], #4
|
||||||
|
str r3, [r0], #4
|
||||||
|
#endif
|
||||||
|
1: mov r0, r0
|
||||||
|
b 1b
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read processor ID register (CP#15, CR0), and look up in the linker-built
|
||||||
|
* supported processor list. Note that we can't use the absolute addresses
|
||||||
|
* for the __proc_info lists since we aren't running with the MMU on
|
||||||
|
* (and therefore, we are not in the correct address space). We have to
|
||||||
|
* calculate the offset.
|
||||||
|
*
|
||||||
|
* r9 = cpuid
|
||||||
|
* Returns:
|
||||||
|
* r3, r4, r6 corrupted
|
||||||
|
* r5 = proc_info pointer in physical address space
|
||||||
|
* r9 = cpuid (preserved)
|
||||||
|
*/
|
||||||
|
.type __lookup_processor_type, %function
|
||||||
|
__lookup_processor_type:
|
||||||
|
adr r3, 3f
|
||||||
|
ldmda r3, {r5 - r7}
|
||||||
|
sub r3, r3, r7 @ get offset between virt&phys
|
||||||
|
add r5, r5, r3 @ convert virt addresses to
|
||||||
|
add r6, r6, r3 @ physical address space
|
||||||
|
1: ldmia r5, {r3, r4} @ value, mask
|
||||||
|
and r4, r4, r9 @ mask wanted bits
|
||||||
|
teq r3, r4
|
||||||
|
beq 2f
|
||||||
|
add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list)
|
||||||
|
cmp r5, r6
|
||||||
|
blo 1b
|
||||||
|
mov r5, #0 @ unknown processor
|
||||||
|
2: mov pc, lr
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This provides a C-API version of the above function.
|
||||||
|
*/
|
||||||
|
ENTRY(lookup_processor_type)
|
||||||
|
stmfd sp!, {r4 - r7, r9, lr}
|
||||||
|
mov r9, r0
|
||||||
|
bl __lookup_processor_type
|
||||||
|
mov r0, r5
|
||||||
|
ldmfd sp!, {r4 - r7, r9, pc}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for
|
||||||
|
* more information about the __proc_info and __arch_info structures.
|
||||||
|
*/
|
||||||
|
.long __proc_info_begin
|
||||||
|
.long __proc_info_end
|
||||||
|
3: .long .
|
||||||
|
.long __arch_info_begin
|
||||||
|
.long __arch_info_end
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lookup machine architecture in the linker-build list of architectures.
|
||||||
|
* Note that we can't use the absolute addresses for the __arch_info
|
||||||
|
* lists since we aren't running with the MMU on (and therefore, we are
|
||||||
|
* not in the correct address space). We have to calculate the offset.
|
||||||
|
*
|
||||||
|
* r1 = machine architecture number
|
||||||
|
* Returns:
|
||||||
|
* r3, r4, r6 corrupted
|
||||||
|
* r5 = mach_info pointer in physical address space
|
||||||
|
*/
|
||||||
|
.type __lookup_machine_type, %function
|
||||||
|
__lookup_machine_type:
|
||||||
|
adr r3, 3b
|
||||||
|
ldmia r3, {r4, r5, r6}
|
||||||
|
sub r3, r3, r4 @ get offset between virt&phys
|
||||||
|
add r5, r5, r3 @ convert virt addresses to
|
||||||
|
add r6, r6, r3 @ physical address space
|
||||||
|
1: ldr r3, [r5, #MACHINFO_TYPE] @ get machine type
|
||||||
|
teq r3, r1 @ matches loader number?
|
||||||
|
beq 2f @ found
|
||||||
|
add r5, r5, #SIZEOF_MACHINE_DESC @ next machine_desc
|
||||||
|
cmp r5, r6
|
||||||
|
blo 1b
|
||||||
|
mov r5, #0 @ unknown machine
|
||||||
|
2: mov pc, lr
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This provides a C-API version of the above function.
|
||||||
|
*/
|
||||||
|
ENTRY(lookup_machine_type)
|
||||||
|
stmfd sp!, {r4 - r6, lr}
|
||||||
|
mov r1, r0
|
||||||
|
bl __lookup_machine_type
|
||||||
|
mov r0, r5
|
||||||
|
ldmfd sp!, {r4 - r6, pc}
|
83
arch/arm/kernel/head-nommu.S
Normal file
83
arch/arm/kernel/head-nommu.S
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* linux/arch/arm/kernel/head-nommu.S
|
||||||
|
*
|
||||||
|
* Copyright (C) 1994-2002 Russell King
|
||||||
|
* Copyright (C) 2003-2006 Hyok S. Choi
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*
|
||||||
|
* Common kernel startup code (non-paged MM)
|
||||||
|
* for 32-bit CPUs which has a process ID register(CP15).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
#include <linux/config.h>
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
#include <asm/assembler.h>
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/procinfo.h>
|
||||||
|
#include <asm/ptrace.h>
|
||||||
|
#include <asm/constants.h>
|
||||||
|
#include <asm/system.h>
|
||||||
|
|
||||||
|
#define PROCINFO_INITFUNC 12
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kernel startup entry point.
|
||||||
|
* ---------------------------
|
||||||
|
*
|
||||||
|
* This is normally called from the decompressor code. The requirements
|
||||||
|
* are: MMU = off, D-cache = off, I-cache = dont care, r0 = 0,
|
||||||
|
* r1 = machine nr.
|
||||||
|
*
|
||||||
|
* See linux/arch/arm/tools/mach-types for the complete list of machine
|
||||||
|
* numbers for r1.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
__INIT
|
||||||
|
.type stext, %function
|
||||||
|
ENTRY(stext)
|
||||||
|
msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | MODE_SVC @ ensure svc mode
|
||||||
|
@ and irqs disabled
|
||||||
|
mrc p15, 0, r9, c0, c0 @ get processor id
|
||||||
|
bl __lookup_processor_type @ r5=procinfo r9=cpuid
|
||||||
|
movs r10, r5 @ invalid processor (r5=0)?
|
||||||
|
beq __error_p @ yes, error 'p'
|
||||||
|
bl __lookup_machine_type @ r5=machinfo
|
||||||
|
movs r8, r5 @ invalid machine (r5=0)?
|
||||||
|
beq __error_a @ yes, error 'a'
|
||||||
|
|
||||||
|
ldr r13, __switch_data @ address to jump to after
|
||||||
|
@ the initialization is done
|
||||||
|
adr lr, __after_proc_init @ return (PIC) address
|
||||||
|
add pc, r10, #PROCINFO_INITFUNC
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set the Control Register and Read the process ID.
|
||||||
|
*/
|
||||||
|
.type __after_proc_init, %function
|
||||||
|
__after_proc_init:
|
||||||
|
mrc p15, 0, r0, c1, c0, 0 @ read control reg
|
||||||
|
#ifdef CONFIG_ALIGNMENT_TRAP
|
||||||
|
orr r0, r0, #CR_A
|
||||||
|
#else
|
||||||
|
bic r0, r0, #CR_A
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_CPU_DCACHE_DISABLE
|
||||||
|
bic r0, r0, #CR_C
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_CPU_BPREDICT_DISABLE
|
||||||
|
bic r0, r0, #CR_Z
|
||||||
|
#endif
|
||||||
|
#ifdef CONFIG_CPU_ICACHE_DISABLE
|
||||||
|
bic r0, r0, #CR_I
|
||||||
|
#endif
|
||||||
|
mcr p15, 0, r0, c1, c0, 0 @ write control reg
|
||||||
|
|
||||||
|
mov pc, r13 @ clear the BSS and jump
|
||||||
|
@ to start_kernel
|
||||||
|
|
||||||
|
#include "head-common.S"
|
|
@ -102,49 +102,6 @@ ENTRY(stext)
|
||||||
adr lr, __enable_mmu @ return (PIC) address
|
adr lr, __enable_mmu @ return (PIC) address
|
||||||
add pc, r10, #PROCINFO_INITFUNC
|
add pc, r10, #PROCINFO_INITFUNC
|
||||||
|
|
||||||
.type __switch_data, %object
|
|
||||||
__switch_data:
|
|
||||||
.long __mmap_switched
|
|
||||||
.long __data_loc @ r4
|
|
||||||
.long __data_start @ r5
|
|
||||||
.long __bss_start @ r6
|
|
||||||
.long _end @ r7
|
|
||||||
.long processor_id @ r4
|
|
||||||
.long __machine_arch_type @ r5
|
|
||||||
.long cr_alignment @ r6
|
|
||||||
.long init_thread_union + THREAD_START_SP @ sp
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The following fragment of code is executed with the MMU on, and uses
|
|
||||||
* absolute addresses; this is not position independent.
|
|
||||||
*
|
|
||||||
* r0 = cp#15 control register
|
|
||||||
* r1 = machine ID
|
|
||||||
* r9 = processor ID
|
|
||||||
*/
|
|
||||||
.type __mmap_switched, %function
|
|
||||||
__mmap_switched:
|
|
||||||
adr r3, __switch_data + 4
|
|
||||||
|
|
||||||
ldmia r3!, {r4, r5, r6, r7}
|
|
||||||
cmp r4, r5 @ Copy data segment if needed
|
|
||||||
1: cmpne r5, r6
|
|
||||||
ldrne fp, [r4], #4
|
|
||||||
strne fp, [r5], #4
|
|
||||||
bne 1b
|
|
||||||
|
|
||||||
mov fp, #0 @ Clear BSS (and zero fp)
|
|
||||||
1: cmp r6, r7
|
|
||||||
strcc fp, [r6],#4
|
|
||||||
bcc 1b
|
|
||||||
|
|
||||||
ldmia r3, {r4, r5, r6, sp}
|
|
||||||
str r9, [r4] @ Save processor ID
|
|
||||||
str r1, [r5] @ Save machine type
|
|
||||||
bic r4, r0, #CR_A @ Clear 'A' bit
|
|
||||||
stmia r6, {r0, r4} @ Save control register values
|
|
||||||
b start_kernel
|
|
||||||
|
|
||||||
#if defined(CONFIG_SMP)
|
#if defined(CONFIG_SMP)
|
||||||
.type secondary_startup, #function
|
.type secondary_startup, #function
|
||||||
ENTRY(secondary_startup)
|
ENTRY(secondary_startup)
|
||||||
|
@ -367,166 +324,4 @@ __create_page_tables:
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
.ltorg
|
.ltorg
|
||||||
|
|
||||||
|
#include "head-common.S"
|
||||||
|
|
||||||
/*
|
|
||||||
* Exception handling. Something went wrong and we can't proceed. We
|
|
||||||
* ought to tell the user, but since we don't have any guarantee that
|
|
||||||
* we're even running on the right architecture, we do virtually nothing.
|
|
||||||
*
|
|
||||||
* If CONFIG_DEBUG_LL is set we try to print out something about the error
|
|
||||||
* and hope for the best (useful if bootloader fails to pass a proper
|
|
||||||
* machine ID for example).
|
|
||||||
*/
|
|
||||||
|
|
||||||
.type __error_p, %function
|
|
||||||
__error_p:
|
|
||||||
#ifdef CONFIG_DEBUG_LL
|
|
||||||
adr r0, str_p1
|
|
||||||
bl printascii
|
|
||||||
b __error
|
|
||||||
str_p1: .asciz "\nError: unrecognized/unsupported processor variant.\n"
|
|
||||||
.align
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.type __error_a, %function
|
|
||||||
__error_a:
|
|
||||||
#ifdef CONFIG_DEBUG_LL
|
|
||||||
mov r4, r1 @ preserve machine ID
|
|
||||||
adr r0, str_a1
|
|
||||||
bl printascii
|
|
||||||
mov r0, r4
|
|
||||||
bl printhex8
|
|
||||||
adr r0, str_a2
|
|
||||||
bl printascii
|
|
||||||
adr r3, 3f
|
|
||||||
ldmia r3, {r4, r5, r6} @ get machine desc list
|
|
||||||
sub r4, r3, r4 @ get offset between virt&phys
|
|
||||||
add r5, r5, r4 @ convert virt addresses to
|
|
||||||
add r6, r6, r4 @ physical address space
|
|
||||||
1: ldr r0, [r5, #MACHINFO_TYPE] @ get machine type
|
|
||||||
bl printhex8
|
|
||||||
mov r0, #'\t'
|
|
||||||
bl printch
|
|
||||||
ldr r0, [r5, #MACHINFO_NAME] @ get machine name
|
|
||||||
add r0, r0, r4
|
|
||||||
bl printascii
|
|
||||||
mov r0, #'\n'
|
|
||||||
bl printch
|
|
||||||
add r5, r5, #SIZEOF_MACHINE_DESC @ next machine_desc
|
|
||||||
cmp r5, r6
|
|
||||||
blo 1b
|
|
||||||
adr r0, str_a3
|
|
||||||
bl printascii
|
|
||||||
b __error
|
|
||||||
str_a1: .asciz "\nError: unrecognized/unsupported machine ID (r1 = 0x"
|
|
||||||
str_a2: .asciz ").\n\nAvailable machine support:\n\nID (hex)\tNAME\n"
|
|
||||||
str_a3: .asciz "\nPlease check your kernel config and/or bootloader.\n"
|
|
||||||
.align
|
|
||||||
#endif
|
|
||||||
|
|
||||||
.type __error, %function
|
|
||||||
__error:
|
|
||||||
#ifdef CONFIG_ARCH_RPC
|
|
||||||
/*
|
|
||||||
* Turn the screen red on a error - RiscPC only.
|
|
||||||
*/
|
|
||||||
mov r0, #0x02000000
|
|
||||||
mov r3, #0x11
|
|
||||||
orr r3, r3, r3, lsl #8
|
|
||||||
orr r3, r3, r3, lsl #16
|
|
||||||
str r3, [r0], #4
|
|
||||||
str r3, [r0], #4
|
|
||||||
str r3, [r0], #4
|
|
||||||
str r3, [r0], #4
|
|
||||||
#endif
|
|
||||||
1: mov r0, r0
|
|
||||||
b 1b
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Read processor ID register (CP#15, CR0), and look up in the linker-built
|
|
||||||
* supported processor list. Note that we can't use the absolute addresses
|
|
||||||
* for the __proc_info lists since we aren't running with the MMU on
|
|
||||||
* (and therefore, we are not in the correct address space). We have to
|
|
||||||
* calculate the offset.
|
|
||||||
*
|
|
||||||
* r9 = cpuid
|
|
||||||
* Returns:
|
|
||||||
* r3, r4, r6 corrupted
|
|
||||||
* r5 = proc_info pointer in physical address space
|
|
||||||
* r9 = cpuid (preserved)
|
|
||||||
*/
|
|
||||||
.type __lookup_processor_type, %function
|
|
||||||
__lookup_processor_type:
|
|
||||||
adr r3, 3f
|
|
||||||
ldmda r3, {r5 - r7}
|
|
||||||
sub r3, r3, r7 @ get offset between virt&phys
|
|
||||||
add r5, r5, r3 @ convert virt addresses to
|
|
||||||
add r6, r6, r3 @ physical address space
|
|
||||||
1: ldmia r5, {r3, r4} @ value, mask
|
|
||||||
and r4, r4, r9 @ mask wanted bits
|
|
||||||
teq r3, r4
|
|
||||||
beq 2f
|
|
||||||
add r5, r5, #PROC_INFO_SZ @ sizeof(proc_info_list)
|
|
||||||
cmp r5, r6
|
|
||||||
blo 1b
|
|
||||||
mov r5, #0 @ unknown processor
|
|
||||||
2: mov pc, lr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This provides a C-API version of the above function.
|
|
||||||
*/
|
|
||||||
ENTRY(lookup_processor_type)
|
|
||||||
stmfd sp!, {r4 - r7, r9, lr}
|
|
||||||
mov r9, r0
|
|
||||||
bl __lookup_processor_type
|
|
||||||
mov r0, r5
|
|
||||||
ldmfd sp!, {r4 - r7, r9, pc}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Look in include/asm-arm/procinfo.h and arch/arm/kernel/arch.[ch] for
|
|
||||||
* more information about the __proc_info and __arch_info structures.
|
|
||||||
*/
|
|
||||||
.long __proc_info_begin
|
|
||||||
.long __proc_info_end
|
|
||||||
3: .long .
|
|
||||||
.long __arch_info_begin
|
|
||||||
.long __arch_info_end
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Lookup machine architecture in the linker-build list of architectures.
|
|
||||||
* Note that we can't use the absolute addresses for the __arch_info
|
|
||||||
* lists since we aren't running with the MMU on (and therefore, we are
|
|
||||||
* not in the correct address space). We have to calculate the offset.
|
|
||||||
*
|
|
||||||
* r1 = machine architecture number
|
|
||||||
* Returns:
|
|
||||||
* r3, r4, r6 corrupted
|
|
||||||
* r5 = mach_info pointer in physical address space
|
|
||||||
*/
|
|
||||||
.type __lookup_machine_type, %function
|
|
||||||
__lookup_machine_type:
|
|
||||||
adr r3, 3b
|
|
||||||
ldmia r3, {r4, r5, r6}
|
|
||||||
sub r3, r3, r4 @ get offset between virt&phys
|
|
||||||
add r5, r5, r3 @ convert virt addresses to
|
|
||||||
add r6, r6, r3 @ physical address space
|
|
||||||
1: ldr r3, [r5, #MACHINFO_TYPE] @ get machine type
|
|
||||||
teq r3, r1 @ matches loader number?
|
|
||||||
beq 2f @ found
|
|
||||||
add r5, r5, #SIZEOF_MACHINE_DESC @ next machine_desc
|
|
||||||
cmp r5, r6
|
|
||||||
blo 1b
|
|
||||||
mov r5, #0 @ unknown machine
|
|
||||||
2: mov pc, lr
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This provides a C-API version of the above function.
|
|
||||||
*/
|
|
||||||
ENTRY(lookup_machine_type)
|
|
||||||
stmfd sp!, {r4 - r6, lr}
|
|
||||||
mov r1, r0
|
|
||||||
bl __lookup_machine_type
|
|
||||||
mov r0, r5
|
|
||||||
ldmfd sp!, {r4 - r6, pc}
|
|
||||||
|
|
|
@ -474,4 +474,3 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
} while (count ++ < 16);
|
} while (count ++ < 16);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
|
@ -7,6 +7,6 @@
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
* published by the Free Software Foundation.
|
* published by the Free Software Foundation.
|
||||||
*/
|
*/
|
||||||
#define KERN_SIGRETURN_CODE 0xffff0500
|
#define KERN_SIGRETURN_CODE (CONFIG_VECTORS_BASE + 0x00000500)
|
||||||
|
|
||||||
extern const unsigned long sigreturn_codes[7];
|
extern const unsigned long sigreturn_codes[7];
|
||||||
|
|
|
@ -688,6 +688,7 @@ EXPORT_SYMBOL(abort);
|
||||||
|
|
||||||
void __init trap_init(void)
|
void __init trap_init(void)
|
||||||
{
|
{
|
||||||
|
unsigned long vectors = CONFIG_VECTORS_BASE;
|
||||||
extern char __stubs_start[], __stubs_end[];
|
extern char __stubs_start[], __stubs_end[];
|
||||||
extern char __vectors_start[], __vectors_end[];
|
extern char __vectors_start[], __vectors_end[];
|
||||||
extern char __kuser_helper_start[], __kuser_helper_end[];
|
extern char __kuser_helper_start[], __kuser_helper_end[];
|
||||||
|
@ -698,9 +699,9 @@ void __init trap_init(void)
|
||||||
* into the vector page, mapped at 0xffff0000, and ensure these
|
* into the vector page, mapped at 0xffff0000, and ensure these
|
||||||
* are visible to the instruction stream.
|
* are visible to the instruction stream.
|
||||||
*/
|
*/
|
||||||
memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);
|
memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);
|
||||||
memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);
|
memcpy((void *)vectors + 0x200, __stubs_start, __stubs_end - __stubs_start);
|
||||||
memcpy((void *)0xffff1000 - kuser_sz, __kuser_helper_start, kuser_sz);
|
memcpy((void *)vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copy signal return handlers into the vector page, and
|
* Copy signal return handlers into the vector page, and
|
||||||
|
@ -709,6 +710,6 @@ void __init trap_init(void)
|
||||||
memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
|
memcpy((void *)KERN_SIGRETURN_CODE, sigreturn_codes,
|
||||||
sizeof(sigreturn_codes));
|
sizeof(sigreturn_codes));
|
||||||
|
|
||||||
flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);
|
flush_icache_range(vectors, vectors + PAGE_SIZE);
|
||||||
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
|
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,8 @@ struct corgissp_machinfo corgi_ssp_machinfo = {
|
||||||
*/
|
*/
|
||||||
static struct corgibl_machinfo corgi_bl_machinfo = {
|
static struct corgibl_machinfo corgi_bl_machinfo = {
|
||||||
.max_intensity = 0x2f,
|
.max_intensity = 0x2f,
|
||||||
|
.default_intensity = 0x1f,
|
||||||
|
.limit_mask = 0x0b,
|
||||||
.set_bl_intensity = corgi_bl_set_intensity,
|
.set_bl_intensity = corgi_bl_set_intensity,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -163,6 +165,14 @@ static struct platform_device corgikbd_device = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Corgi LEDs
|
||||||
|
*/
|
||||||
|
static struct platform_device corgiled_device = {
|
||||||
|
.name = "corgi-led",
|
||||||
|
.id = -1,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Corgi Touch Screen Device
|
* Corgi Touch Screen Device
|
||||||
*/
|
*/
|
||||||
|
@ -297,6 +307,7 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&corgikbd_device,
|
&corgikbd_device,
|
||||||
&corgibl_device,
|
&corgibl_device,
|
||||||
&corgits_device,
|
&corgits_device,
|
||||||
|
&corgiled_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init corgi_init(void)
|
static void __init corgi_init(void)
|
||||||
|
|
|
@ -220,6 +220,8 @@ struct corgissp_machinfo spitz_ssp_machinfo = {
|
||||||
* Spitz Backlight Device
|
* Spitz Backlight Device
|
||||||
*/
|
*/
|
||||||
static struct corgibl_machinfo spitz_bl_machinfo = {
|
static struct corgibl_machinfo spitz_bl_machinfo = {
|
||||||
|
.default_intensity = 0x1f,
|
||||||
|
.limit_mask = 0x0b,
|
||||||
.max_intensity = 0x2f,
|
.max_intensity = 0x2f,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -241,6 +243,14 @@ static struct platform_device spitzkbd_device = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Spitz LEDs
|
||||||
|
*/
|
||||||
|
static struct platform_device spitzled_device = {
|
||||||
|
.name = "spitz-led",
|
||||||
|
.id = -1,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Spitz Touch Screen Device
|
* Spitz Touch Screen Device
|
||||||
*/
|
*/
|
||||||
|
@ -418,6 +428,7 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&spitzkbd_device,
|
&spitzkbd_device,
|
||||||
&spitzts_device,
|
&spitzts_device,
|
||||||
&spitzbl_device,
|
&spitzbl_device,
|
||||||
|
&spitzled_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init common_init(void)
|
static void __init common_init(void)
|
||||||
|
|
|
@ -251,10 +251,19 @@ static struct platform_device tosakbd_device = {
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Tosa LEDs
|
||||||
|
*/
|
||||||
|
static struct platform_device tosaled_device = {
|
||||||
|
.name = "tosa-led",
|
||||||
|
.id = -1,
|
||||||
|
};
|
||||||
|
|
||||||
static struct platform_device *devices[] __initdata = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
&tosascoop_device,
|
&tosascoop_device,
|
||||||
&tosascoop_jc_device,
|
&tosascoop_jc_device,
|
||||||
&tosakbd_device,
|
&tosakbd_device,
|
||||||
|
&tosaled_device,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init tosa_init(void)
|
static void __init tosa_init(void)
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <asm/procinfo.h>
|
#include <asm/procinfo.h>
|
||||||
#include <asm/hardware.h>
|
#include <asm/hardware.h>
|
||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
|
#include <asm/pgtable-hwdef.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include "proc-macros.S"
|
#include "proc-macros.S"
|
||||||
|
|
|
@ -212,8 +212,6 @@ EXPORT_SYMBOL(sys_open);
|
||||||
EXPORT_SYMBOL(sys_exit);
|
EXPORT_SYMBOL(sys_exit);
|
||||||
EXPORT_SYMBOL(sys_wait4);
|
EXPORT_SYMBOL(sys_wait4);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
#ifdef CONFIG_PREEMPT
|
#ifdef CONFIG_PREEMPT
|
||||||
EXPORT_SYMBOL(kernel_flag);
|
EXPORT_SYMBOL(kernel_flag);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -79,8 +79,6 @@ EXPORT_SYMBOL(memmove);
|
||||||
EXPORT_SYMBOL(__outsl_ns);
|
EXPORT_SYMBOL(__outsl_ns);
|
||||||
EXPORT_SYMBOL(__insl_ns);
|
EXPORT_SYMBOL(__insl_ns);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
#ifdef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS
|
#ifdef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS
|
||||||
EXPORT_SYMBOL(atomic_test_and_ANDNOT_mask);
|
EXPORT_SYMBOL(atomic_test_and_ANDNOT_mask);
|
||||||
EXPORT_SYMBOL(atomic_test_and_OR_mask);
|
EXPORT_SYMBOL(atomic_test_and_OR_mask);
|
||||||
|
|
|
@ -55,8 +55,6 @@ EXPORT_SYMBOL(memcmp);
|
||||||
EXPORT_SYMBOL(memscan);
|
EXPORT_SYMBOL(memscan);
|
||||||
EXPORT_SYMBOL(memmove);
|
EXPORT_SYMBOL(memmove);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libgcc functions - functions that are used internally by the
|
* libgcc functions - functions that are used internally by the
|
||||||
* compiler... (prototypes are not correct though, but that
|
* compiler... (prototypes are not correct though, but that
|
||||||
|
|
|
@ -415,6 +415,7 @@ void __init init_bsp_APIC(void)
|
||||||
void __devinit setup_local_APIC(void)
|
void __devinit setup_local_APIC(void)
|
||||||
{
|
{
|
||||||
unsigned long oldvalue, value, ver, maxlvt;
|
unsigned long oldvalue, value, ver, maxlvt;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
/* Pound the ESR really hard over the head with a big hammer - mbligh */
|
/* Pound the ESR really hard over the head with a big hammer - mbligh */
|
||||||
if (esr_disable) {
|
if (esr_disable) {
|
||||||
|
@ -451,6 +452,25 @@ void __devinit setup_local_APIC(void)
|
||||||
value &= ~APIC_TPRI_MASK;
|
value &= ~APIC_TPRI_MASK;
|
||||||
apic_write_around(APIC_TASKPRI, value);
|
apic_write_around(APIC_TASKPRI, value);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* After a crash, we no longer service the interrupts and a pending
|
||||||
|
* interrupt from previous kernel might still have ISR bit set.
|
||||||
|
*
|
||||||
|
* Most probably by now CPU has serviced that pending interrupt and
|
||||||
|
* it might not have done the ack_APIC_irq() because it thought,
|
||||||
|
* interrupt came from i8259 as ExtInt. LAPIC did not get EOI so it
|
||||||
|
* does not clear the ISR bit and cpu thinks it has already serivced
|
||||||
|
* the interrupt. Hence a vector might get locked. It was noticed
|
||||||
|
* for timer irq (vector 0x31). Issue an extra EOI to clear ISR.
|
||||||
|
*/
|
||||||
|
for (i = APIC_ISR_NR - 1; i >= 0; i--) {
|
||||||
|
value = apic_read(APIC_ISR + i*0x10);
|
||||||
|
for (j = 31; j >= 0; j--) {
|
||||||
|
if (value & (1<<j))
|
||||||
|
ack_APIC_irq();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Now that we are all set up, enable the APIC
|
* Now that we are all set up, enable the APIC
|
||||||
*/
|
*/
|
||||||
|
@ -732,7 +752,7 @@ static int __init apic_set_verbosity(char *str)
|
||||||
printk(KERN_WARNING "APIC Verbosity level %s not recognised"
|
printk(KERN_WARNING "APIC Verbosity level %s not recognised"
|
||||||
" use apic=verbose or apic=debug\n", str);
|
" use apic=verbose or apic=debug\n", str);
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("apic=", apic_set_verbosity);
|
__setup("apic=", apic_set_verbosity);
|
||||||
|
|
|
@ -64,13 +64,13 @@ void mcheck_init(struct cpuinfo_x86 *c)
|
||||||
static int __init mcheck_disable(char *str)
|
static int __init mcheck_disable(char *str)
|
||||||
{
|
{
|
||||||
mce_disabled = 1;
|
mce_disabled = 1;
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init mcheck_enable(char *str)
|
static int __init mcheck_enable(char *str)
|
||||||
{
|
{
|
||||||
mce_disabled = -1;
|
mce_disabled = -1;
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("nomce", mcheck_disable);
|
__setup("nomce", mcheck_disable);
|
||||||
|
|
|
@ -644,7 +644,7 @@ failed:
|
||||||
int __init irqbalance_disable(char *str)
|
int __init irqbalance_disable(char *str)
|
||||||
{
|
{
|
||||||
irqbalance_disabled = 1;
|
irqbalance_disabled = 1;
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
__setup("noirqbalance", irqbalance_disable);
|
__setup("noirqbalance", irqbalance_disable);
|
||||||
|
|
|
@ -781,7 +781,6 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
} while (count++ < 16);
|
} while (count++ < 16);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* sys_alloc_thread_area: get a yet unused TLS descriptor index.
|
* sys_alloc_thread_area: get a yet unused TLS descriptor index.
|
||||||
|
|
|
@ -312,3 +312,5 @@ ENTRY(sys_call_table)
|
||||||
.long sys_unshare /* 310 */
|
.long sys_unshare /* 310 */
|
||||||
.long sys_set_robust_list
|
.long sys_set_robust_list
|
||||||
.long sys_get_robust_list
|
.long sys_get_robust_list
|
||||||
|
.long sys_splice
|
||||||
|
.long sys_sync_file_range
|
||||||
|
|
|
@ -1193,6 +1193,6 @@ void __init trap_init(void)
|
||||||
static int __init kstack_setup(char *s)
|
static int __init kstack_setup(char *s)
|
||||||
{
|
{
|
||||||
kstack_depth_to_print = simple_strtoul(s, NULL, 0);
|
kstack_depth_to_print = simple_strtoul(s, NULL, 0);
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("kstack=", kstack_setup);
|
__setup("kstack=", kstack_setup);
|
||||||
|
|
|
@ -44,7 +44,7 @@ __kernel_rt_sigreturn:
|
||||||
.LSTARTCIEDLSI1:
|
.LSTARTCIEDLSI1:
|
||||||
.long 0 /* CIE ID */
|
.long 0 /* CIE ID */
|
||||||
.byte 1 /* Version number */
|
.byte 1 /* Version number */
|
||||||
.string "zR" /* NUL-terminated augmentation string */
|
.string "zRS" /* NUL-terminated augmentation string */
|
||||||
.uleb128 1 /* Code alignment factor */
|
.uleb128 1 /* Code alignment factor */
|
||||||
.sleb128 -4 /* Data alignment factor */
|
.sleb128 -4 /* Data alignment factor */
|
||||||
.byte 8 /* Return address register column */
|
.byte 8 /* Return address register column */
|
||||||
|
|
|
@ -1605,5 +1605,6 @@ sys_call_table:
|
||||||
data8 sys_ni_syscall // reserved for pselect
|
data8 sys_ni_syscall // reserved for pselect
|
||||||
data8 sys_ni_syscall // 1295 reserved for ppoll
|
data8 sys_ni_syscall // 1295 reserved for ppoll
|
||||||
data8 sys_unshare
|
data8 sys_unshare
|
||||||
|
data8 sys_splice
|
||||||
|
|
||||||
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||||
|
|
|
@ -59,6 +59,7 @@ SECTIONS
|
||||||
*(.dynbss)
|
*(.dynbss)
|
||||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||||
*(__ex_table)
|
*(__ex_table)
|
||||||
|
*(__mca_table)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,54 +9,65 @@
|
||||||
* Copyright (C) 1999 VA Linux Systems
|
* Copyright (C) 1999 VA Linux Systems
|
||||||
* Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com>
|
* Copyright (C) 1999,2000 Walt Drummond <drummond@valinux.com>
|
||||||
*
|
*
|
||||||
* 00/04/19 D. Mosberger Rewritten to mirror more closely the x86 I/O APIC code.
|
* 00/04/19 D. Mosberger Rewritten to mirror more closely the x86 I/O
|
||||||
* In particular, we now have separate handlers for edge
|
* APIC code. In particular, we now have separate
|
||||||
* and level triggered interrupts.
|
* handlers for edge and level triggered
|
||||||
* 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector allocation
|
* interrupts.
|
||||||
* PCI to vector mapping, shared PCI interrupts.
|
* 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector
|
||||||
* 00/10/27 D. Mosberger Document things a bit more to make them more understandable.
|
* allocation PCI to vector mapping, shared PCI
|
||||||
* Clean up much of the old IOSAPIC cruft.
|
* interrupts.
|
||||||
* 01/07/27 J.I. Lee PCI irq routing, Platform/Legacy interrupts and fixes for
|
* 00/10/27 D. Mosberger Document things a bit more to make them more
|
||||||
* ACPI S5(SoftOff) support.
|
* understandable. Clean up much of the old
|
||||||
|
* IOSAPIC cruft.
|
||||||
|
* 01/07/27 J.I. Lee PCI irq routing, Platform/Legacy interrupts
|
||||||
|
* and fixes for ACPI S5(SoftOff) support.
|
||||||
* 02/01/23 J.I. Lee iosapic pgm fixes for PCI irq routing from _PRT
|
* 02/01/23 J.I. Lee iosapic pgm fixes for PCI irq routing from _PRT
|
||||||
* 02/01/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt vectors in
|
* 02/01/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt
|
||||||
* iosapic_set_affinity(), initializations for
|
* vectors in iosapic_set_affinity(),
|
||||||
* /proc/irq/#/smp_affinity
|
* initializations for /proc/irq/#/smp_affinity
|
||||||
* 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing.
|
* 02/04/02 P. Diefenbaugh Cleaned up ACPI PCI IRQ routing.
|
||||||
* 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq
|
* 02/04/18 J.I. Lee bug fix in iosapic_init_pci_irq
|
||||||
* 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping
|
* 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to
|
||||||
* error
|
* IOSAPIC mapping error
|
||||||
* 02/07/29 T. Kochi Allocate interrupt vectors dynamically
|
* 02/07/29 T. Kochi Allocate interrupt vectors dynamically
|
||||||
* 02/08/04 T. Kochi Cleaned up terminology (irq, global system interrupt, vector, etc.)
|
* 02/08/04 T. Kochi Cleaned up terminology (irq, global system
|
||||||
* 02/09/20 D. Mosberger Simplified by taking advantage of ACPI's pci_irq code.
|
* interrupt, vector, etc.)
|
||||||
|
* 02/09/20 D. Mosberger Simplified by taking advantage of ACPI's
|
||||||
|
* pci_irq code.
|
||||||
* 03/02/19 B. Helgaas Make pcat_compat system-wide, not per-IOSAPIC.
|
* 03/02/19 B. Helgaas Make pcat_compat system-wide, not per-IOSAPIC.
|
||||||
* Remove iosapic_address & gsi_base from external interfaces.
|
* Remove iosapic_address & gsi_base from
|
||||||
* Rationalize __init/__devinit attributes.
|
* external interfaces. Rationalize
|
||||||
|
* __init/__devinit attributes.
|
||||||
* 04/12/04 Ashok Raj <ashok.raj@intel.com> Intel Corporation 2004
|
* 04/12/04 Ashok Raj <ashok.raj@intel.com> Intel Corporation 2004
|
||||||
* Updated to work with irq migration necessary for CPU Hotplug
|
* Updated to work with irq migration necessary
|
||||||
|
* for CPU Hotplug
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
* Here is what the interrupt logic between a PCI device and the kernel looks like:
|
* Here is what the interrupt logic between a PCI device and the kernel looks
|
||||||
|
* like:
|
||||||
*
|
*
|
||||||
* (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC, INTD). The
|
* (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC,
|
||||||
* device is uniquely identified by its bus--, and slot-number (the function
|
* INTD). The device is uniquely identified by its bus-, and slot-number
|
||||||
* number does not matter here because all functions share the same interrupt
|
* (the function number does not matter here because all functions share
|
||||||
* lines).
|
* the same interrupt lines).
|
||||||
*
|
*
|
||||||
* (2) The motherboard routes the interrupt line to a pin on a IOSAPIC controller.
|
* (2) The motherboard routes the interrupt line to a pin on a IOSAPIC
|
||||||
* Multiple interrupt lines may have to share the same IOSAPIC pin (if they're level
|
* controller. Multiple interrupt lines may have to share the same
|
||||||
* triggered and use the same polarity). Each interrupt line has a unique Global
|
* IOSAPIC pin (if they're level triggered and use the same polarity).
|
||||||
* System Interrupt (GSI) number which can be calculated as the sum of the controller's
|
* Each interrupt line has a unique Global System Interrupt (GSI) number
|
||||||
* base GSI number and the IOSAPIC pin number to which the line connects.
|
* which can be calculated as the sum of the controller's base GSI number
|
||||||
|
* and the IOSAPIC pin number to which the line connects.
|
||||||
*
|
*
|
||||||
* (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the IOSAPIC pin
|
* (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the
|
||||||
* into the IA-64 interrupt vector. This interrupt vector is then sent to the CPU.
|
* IOSAPIC pin into the IA-64 interrupt vector. This interrupt vector is then
|
||||||
|
* sent to the CPU.
|
||||||
*
|
*
|
||||||
* (4) The kernel recognizes an interrupt as an IRQ. The IRQ interface is used as
|
* (4) The kernel recognizes an interrupt as an IRQ. The IRQ interface is
|
||||||
* architecture-independent interrupt handling mechanism in Linux. As an
|
* used as architecture-independent interrupt handling mechanism in Linux.
|
||||||
* IRQ is a number, we have to have IA-64 interrupt vector number <-> IRQ number
|
* As an IRQ is a number, we have to have
|
||||||
* mapping. On smaller systems, we use one-to-one mapping between IA-64 vector and
|
* IA-64 interrupt vector number <-> IRQ number mapping. On smaller
|
||||||
* IRQ. A platform can implement platform_irq_to_vector(irq) and
|
* systems, we use one-to-one mapping between IA-64 vector and IRQ. A
|
||||||
|
* platform can implement platform_irq_to_vector(irq) and
|
||||||
* platform_local_vector_to_irq(vector) APIs to differentiate the mapping.
|
* platform_local_vector_to_irq(vector) APIs to differentiate the mapping.
|
||||||
* Please see also include/asm-ia64/hw_irq.h for those APIs.
|
* Please see also include/asm-ia64/hw_irq.h for those APIs.
|
||||||
*
|
*
|
||||||
|
@ -64,9 +75,9 @@
|
||||||
*
|
*
|
||||||
* PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ
|
* PCI pin -> global system interrupt (GSI) -> IA-64 vector <-> IRQ
|
||||||
*
|
*
|
||||||
* Note: The term "IRQ" is loosely used everywhere in Linux kernel to describe interrupts.
|
* Note: The term "IRQ" is loosely used everywhere in Linux kernel to
|
||||||
* Now we use "IRQ" only for Linux IRQ's. ISA IRQ (isa_irq) is the only exception in this
|
* describeinterrupts. Now we use "IRQ" only for Linux IRQ's. ISA IRQ
|
||||||
* source code.
|
* (isa_irq) is the only exception in this source code.
|
||||||
*/
|
*/
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
|
|
||||||
|
@ -90,7 +101,6 @@
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
|
|
||||||
#undef DEBUG_INTERRUPT_ROUTING
|
#undef DEBUG_INTERRUPT_ROUTING
|
||||||
|
|
||||||
#ifdef DEBUG_INTERRUPT_ROUTING
|
#ifdef DEBUG_INTERRUPT_ROUTING
|
||||||
|
@ -99,36 +109,46 @@
|
||||||
#define DBG(fmt...)
|
#define DBG(fmt...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define NR_PREALLOCATE_RTE_ENTRIES (PAGE_SIZE / sizeof(struct iosapic_rte_info))
|
#define NR_PREALLOCATE_RTE_ENTRIES \
|
||||||
|
(PAGE_SIZE / sizeof(struct iosapic_rte_info))
|
||||||
#define RTE_PREALLOCATED (1)
|
#define RTE_PREALLOCATED (1)
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(iosapic_lock);
|
static DEFINE_SPINLOCK(iosapic_lock);
|
||||||
|
|
||||||
/* These tables map IA-64 vectors to the IOSAPIC pin that generates this vector. */
|
/*
|
||||||
|
* These tables map IA-64 vectors to the IOSAPIC pin that generates this
|
||||||
|
* vector.
|
||||||
|
*/
|
||||||
|
|
||||||
struct iosapic_rte_info {
|
struct iosapic_rte_info {
|
||||||
struct list_head rte_list; /* node in list of RTEs sharing the same vector */
|
struct list_head rte_list; /* node in list of RTEs sharing the
|
||||||
|
* same vector */
|
||||||
char __iomem *addr; /* base address of IOSAPIC */
|
char __iomem *addr; /* base address of IOSAPIC */
|
||||||
unsigned int gsi_base; /* first GSI assigned to this IOSAPIC */
|
unsigned int gsi_base; /* first GSI assigned to this
|
||||||
|
* IOSAPIC */
|
||||||
char rte_index; /* IOSAPIC RTE index */
|
char rte_index; /* IOSAPIC RTE index */
|
||||||
int refcnt; /* reference counter */
|
int refcnt; /* reference counter */
|
||||||
unsigned int flags; /* flags */
|
unsigned int flags; /* flags */
|
||||||
} ____cacheline_aligned;
|
} ____cacheline_aligned;
|
||||||
|
|
||||||
static struct iosapic_intr_info {
|
static struct iosapic_intr_info {
|
||||||
struct list_head rtes; /* RTEs using this vector (empty => not an IOSAPIC interrupt) */
|
struct list_head rtes; /* RTEs using this vector (empty =>
|
||||||
|
* not an IOSAPIC interrupt) */
|
||||||
int count; /* # of RTEs that shares this vector */
|
int count; /* # of RTEs that shares this vector */
|
||||||
u32 low32; /* current value of low word of Redirection table entry */
|
u32 low32; /* current value of low word of
|
||||||
|
* Redirection table entry */
|
||||||
unsigned int dest; /* destination CPU physical ID */
|
unsigned int dest; /* destination CPU physical ID */
|
||||||
unsigned char dmode : 3; /* delivery mode (see iosapic.h) */
|
unsigned char dmode : 3; /* delivery mode (see iosapic.h) */
|
||||||
unsigned char polarity: 1; /* interrupt polarity (see iosapic.h) */
|
unsigned char polarity: 1; /* interrupt polarity
|
||||||
|
* (see iosapic.h) */
|
||||||
unsigned char trigger : 1; /* trigger mode (see iosapic.h) */
|
unsigned char trigger : 1; /* trigger mode (see iosapic.h) */
|
||||||
} iosapic_intr_info[IA64_NUM_VECTORS];
|
} iosapic_intr_info[IA64_NUM_VECTORS];
|
||||||
|
|
||||||
static struct iosapic {
|
static struct iosapic {
|
||||||
char __iomem *addr; /* base address of IOSAPIC */
|
char __iomem *addr; /* base address of IOSAPIC */
|
||||||
unsigned int gsi_base; /* first GSI assigned to this IOSAPIC */
|
unsigned int gsi_base; /* first GSI assigned to this
|
||||||
unsigned short num_rte; /* number of RTE in this IOSAPIC */
|
* IOSAPIC */
|
||||||
|
unsigned short num_rte; /* # of RTEs on this IOSAPIC */
|
||||||
int rtes_inuse; /* # of RTEs in use on this IOSAPIC */
|
int rtes_inuse; /* # of RTEs in use on this IOSAPIC */
|
||||||
#ifdef CONFIG_NUMA
|
#ifdef CONFIG_NUMA
|
||||||
unsigned short node; /* numa node association via pxm */
|
unsigned short node; /* numa node association via pxm */
|
||||||
|
@ -149,7 +169,8 @@ find_iosapic (unsigned int gsi)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < NR_IOSAPICS; i++) {
|
for (i = 0; i < NR_IOSAPICS; i++) {
|
||||||
if ((unsigned) (gsi - iosapic_lists[i].gsi_base) < iosapic_lists[i].num_rte)
|
if ((unsigned) (gsi - iosapic_lists[i].gsi_base) <
|
||||||
|
iosapic_lists[i].num_rte)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,7 +183,8 @@ _gsi_to_vector (unsigned int gsi)
|
||||||
struct iosapic_intr_info *info;
|
struct iosapic_intr_info *info;
|
||||||
struct iosapic_rte_info *rte;
|
struct iosapic_rte_info *rte;
|
||||||
|
|
||||||
for (info = iosapic_intr_info; info < iosapic_intr_info + IA64_NUM_VECTORS; ++info)
|
for (info = iosapic_intr_info; info <
|
||||||
|
iosapic_intr_info + IA64_NUM_VECTORS; ++info)
|
||||||
list_for_each_entry(rte, &info->rtes, rte_list)
|
list_for_each_entry(rte, &info->rtes, rte_list)
|
||||||
if (rte->gsi_base + rte->rte_index == gsi)
|
if (rte->gsi_base + rte->rte_index == gsi)
|
||||||
return info - iosapic_intr_info;
|
return info - iosapic_intr_info;
|
||||||
|
@ -185,8 +207,8 @@ gsi_to_irq (unsigned int gsi)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
int irq;
|
int irq;
|
||||||
/*
|
/*
|
||||||
* XXX fix me: this assumes an identity mapping vetween IA-64 vector and Linux irq
|
* XXX fix me: this assumes an identity mapping between IA-64 vector
|
||||||
* numbers...
|
* and Linux irq numbers...
|
||||||
*/
|
*/
|
||||||
spin_lock_irqsave(&iosapic_lock, flags);
|
spin_lock_irqsave(&iosapic_lock, flags);
|
||||||
{
|
{
|
||||||
|
@ -197,7 +219,8 @@ gsi_to_irq (unsigned int gsi)
|
||||||
return irq;
|
return irq;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi, unsigned int vec)
|
static struct iosapic_rte_info *gsi_vector_to_rte(unsigned int gsi,
|
||||||
|
unsigned int vec)
|
||||||
{
|
{
|
||||||
struct iosapic_rte_info *rte;
|
struct iosapic_rte_info *rte;
|
||||||
|
|
||||||
|
@ -237,7 +260,9 @@ set_rte (unsigned int gsi, unsigned int vector, unsigned int dest, int mask)
|
||||||
|
|
||||||
for (irq = 0; irq < NR_IRQS; ++irq)
|
for (irq = 0; irq < NR_IRQS; ++irq)
|
||||||
if (irq_to_vector(irq) == vector) {
|
if (irq_to_vector(irq) == vector) {
|
||||||
set_irq_affinity_info(irq, (int)(dest & 0xffff), redir);
|
set_irq_affinity_info(irq,
|
||||||
|
(int)(dest & 0xffff),
|
||||||
|
redir);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -259,7 +284,7 @@ set_rte (unsigned int gsi, unsigned int vector, unsigned int dest, int mask)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
nop (unsigned int vector)
|
nop (unsigned int irq)
|
||||||
{
|
{
|
||||||
/* do nothing... */
|
/* do nothing... */
|
||||||
}
|
}
|
||||||
|
@ -281,7 +306,8 @@ mask_irq (unsigned int irq)
|
||||||
{
|
{
|
||||||
/* set only the mask bit */
|
/* set only the mask bit */
|
||||||
low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK;
|
low32 = iosapic_intr_info[vec].low32 |= IOSAPIC_MASK;
|
||||||
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
|
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
|
||||||
|
rte_list) {
|
||||||
addr = rte->addr;
|
addr = rte->addr;
|
||||||
rte_index = rte->rte_index;
|
rte_index = rte->rte_index;
|
||||||
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
||||||
|
@ -306,7 +332,8 @@ unmask_irq (unsigned int irq)
|
||||||
spin_lock_irqsave(&iosapic_lock, flags);
|
spin_lock_irqsave(&iosapic_lock, flags);
|
||||||
{
|
{
|
||||||
low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK;
|
low32 = iosapic_intr_info[vec].low32 &= ~IOSAPIC_MASK;
|
||||||
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
|
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
|
||||||
|
rte_list) {
|
||||||
addr = rte->addr;
|
addr = rte->addr;
|
||||||
rte_index = rte->rte_index;
|
rte_index = rte->rte_index;
|
||||||
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
||||||
|
@ -346,21 +373,25 @@ iosapic_set_affinity (unsigned int irq, cpumask_t mask)
|
||||||
|
|
||||||
spin_lock_irqsave(&iosapic_lock, flags);
|
spin_lock_irqsave(&iosapic_lock, flags);
|
||||||
{
|
{
|
||||||
low32 = iosapic_intr_info[vec].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT);
|
low32 = iosapic_intr_info[vec].low32 &
|
||||||
|
~(7 << IOSAPIC_DELIVERY_SHIFT);
|
||||||
|
|
||||||
if (redir)
|
if (redir)
|
||||||
/* change delivery mode to lowest priority */
|
/* change delivery mode to lowest priority */
|
||||||
low32 |= (IOSAPIC_LOWEST_PRIORITY << IOSAPIC_DELIVERY_SHIFT);
|
low32 |= (IOSAPIC_LOWEST_PRIORITY <<
|
||||||
|
IOSAPIC_DELIVERY_SHIFT);
|
||||||
else
|
else
|
||||||
/* change delivery mode to fixed */
|
/* change delivery mode to fixed */
|
||||||
low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
|
low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
|
||||||
|
|
||||||
iosapic_intr_info[vec].low32 = low32;
|
iosapic_intr_info[vec].low32 = low32;
|
||||||
iosapic_intr_info[vec].dest = dest;
|
iosapic_intr_info[vec].dest = dest;
|
||||||
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes, rte_list) {
|
list_for_each_entry(rte, &iosapic_intr_info[vec].rtes,
|
||||||
|
rte_list) {
|
||||||
addr = rte->addr;
|
addr = rte->addr;
|
||||||
rte_index = rte->rte_index;
|
rte_index = rte->rte_index;
|
||||||
iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index), high32);
|
iosapic_write(addr, IOSAPIC_RTE_HIGH(rte_index),
|
||||||
|
high32);
|
||||||
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -433,7 +464,8 @@ iosapic_ack_edge_irq (unsigned int irq)
|
||||||
* interrupt for real. This prevents IRQ storms from unhandled
|
* interrupt for real. This prevents IRQ storms from unhandled
|
||||||
* devices.
|
* devices.
|
||||||
*/
|
*/
|
||||||
if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) == (IRQ_PENDING|IRQ_DISABLED))
|
if ((idesc->status & (IRQ_PENDING|IRQ_DISABLED)) ==
|
||||||
|
(IRQ_PENDING|IRQ_DISABLED))
|
||||||
mask_irq(irq);
|
mask_irq(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -467,7 +499,8 @@ iosapic_version (char __iomem *addr)
|
||||||
return iosapic_read(addr, IOSAPIC_VERSION);
|
return iosapic_read(addr, IOSAPIC_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long pol)
|
static int iosapic_find_sharable_vector (unsigned long trigger,
|
||||||
|
unsigned long pol)
|
||||||
{
|
{
|
||||||
int i, vector = -1, min_count = -1;
|
int i, vector = -1, min_count = -1;
|
||||||
struct iosapic_intr_info *info;
|
struct iosapic_intr_info *info;
|
||||||
|
@ -482,7 +515,8 @@ static int iosapic_find_sharable_vector (unsigned long trigger, unsigned long po
|
||||||
for (i = IA64_FIRST_DEVICE_VECTOR; i <= IA64_LAST_DEVICE_VECTOR; i++) {
|
for (i = IA64_FIRST_DEVICE_VECTOR; i <= IA64_LAST_DEVICE_VECTOR; i++) {
|
||||||
info = &iosapic_intr_info[i];
|
info = &iosapic_intr_info[i];
|
||||||
if (info->trigger == trigger && info->polarity == pol &&
|
if (info->trigger == trigger && info->polarity == pol &&
|
||||||
(info->dmode == IOSAPIC_FIXED || info->dmode == IOSAPIC_LOWEST_PRIORITY)) {
|
(info->dmode == IOSAPIC_FIXED || info->dmode ==
|
||||||
|
IOSAPIC_LOWEST_PRIORITY)) {
|
||||||
if (min_count == -1 || info->count < min_count) {
|
if (min_count == -1 || info->count < min_count) {
|
||||||
vector = i;
|
vector = i;
|
||||||
min_count = info->count;
|
min_count = info->count;
|
||||||
|
@ -506,12 +540,15 @@ iosapic_reassign_vector (int vector)
|
||||||
new_vector = assign_irq_vector(AUTO_ASSIGN);
|
new_vector = assign_irq_vector(AUTO_ASSIGN);
|
||||||
if (new_vector < 0)
|
if (new_vector < 0)
|
||||||
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
|
panic("%s: out of interrupt vectors!\n", __FUNCTION__);
|
||||||
printk(KERN_INFO "Reassigning vector %d to %d\n", vector, new_vector);
|
printk(KERN_INFO "Reassigning vector %d to %d\n",
|
||||||
|
vector, new_vector);
|
||||||
memcpy(&iosapic_intr_info[new_vector], &iosapic_intr_info[vector],
|
memcpy(&iosapic_intr_info[new_vector], &iosapic_intr_info[vector],
|
||||||
sizeof(struct iosapic_intr_info));
|
sizeof(struct iosapic_intr_info));
|
||||||
INIT_LIST_HEAD(&iosapic_intr_info[new_vector].rtes);
|
INIT_LIST_HEAD(&iosapic_intr_info[new_vector].rtes);
|
||||||
list_move(iosapic_intr_info[vector].rtes.next, &iosapic_intr_info[new_vector].rtes);
|
list_move(iosapic_intr_info[vector].rtes.next,
|
||||||
memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info));
|
&iosapic_intr_info[new_vector].rtes);
|
||||||
|
memset(&iosapic_intr_info[vector], 0,
|
||||||
|
sizeof(struct iosapic_intr_info));
|
||||||
iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
|
iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
|
||||||
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
||||||
}
|
}
|
||||||
|
@ -524,7 +561,8 @@ static struct iosapic_rte_info *iosapic_alloc_rte (void)
|
||||||
int preallocated = 0;
|
int preallocated = 0;
|
||||||
|
|
||||||
if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) {
|
if (!iosapic_kmalloc_ok && list_empty(&free_rte_list)) {
|
||||||
rte = alloc_bootmem(sizeof(struct iosapic_rte_info) * NR_PREALLOCATE_RTE_ENTRIES);
|
rte = alloc_bootmem(sizeof(struct iosapic_rte_info) *
|
||||||
|
NR_PREALLOCATE_RTE_ENTRIES);
|
||||||
if (!rte)
|
if (!rte)
|
||||||
return NULL;
|
return NULL;
|
||||||
for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++)
|
for (i = 0; i < NR_PREALLOCATE_RTE_ENTRIES; i++, rte++)
|
||||||
|
@ -532,7 +570,8 @@ static struct iosapic_rte_info *iosapic_alloc_rte (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!list_empty(&free_rte_list)) {
|
if (!list_empty(&free_rte_list)) {
|
||||||
rte = list_entry(free_rte_list.next, struct iosapic_rte_info, rte_list);
|
rte = list_entry(free_rte_list.next, struct iosapic_rte_info,
|
||||||
|
rte_list);
|
||||||
list_del(&rte->rte_list);
|
list_del(&rte->rte_list);
|
||||||
preallocated++;
|
preallocated++;
|
||||||
} else {
|
} else {
|
||||||
|
@ -575,7 +614,8 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
||||||
|
|
||||||
index = find_iosapic(gsi);
|
index = find_iosapic(gsi);
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n", __FUNCTION__, gsi);
|
printk(KERN_WARNING "%s: No IOSAPIC for GSI %u\n",
|
||||||
|
__FUNCTION__, gsi);
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -586,7 +626,8 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
||||||
if (!rte) {
|
if (!rte) {
|
||||||
rte = iosapic_alloc_rte();
|
rte = iosapic_alloc_rte();
|
||||||
if (!rte) {
|
if (!rte) {
|
||||||
printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
|
printk(KERN_WARNING "%s: cannot allocate memory\n",
|
||||||
|
__FUNCTION__);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -602,7 +643,9 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
||||||
else if (vector_is_shared(vector)) {
|
else if (vector_is_shared(vector)) {
|
||||||
struct iosapic_intr_info *info = &iosapic_intr_info[vector];
|
struct iosapic_intr_info *info = &iosapic_intr_info[vector];
|
||||||
if (info->trigger != trigger || info->polarity != polarity) {
|
if (info->trigger != trigger || info->polarity != polarity) {
|
||||||
printk (KERN_WARNING "%s: cannot override the interrupt\n", __FUNCTION__);
|
printk (KERN_WARNING
|
||||||
|
"%s: cannot override the interrupt\n",
|
||||||
|
__FUNCTION__);
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -619,8 +662,10 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
||||||
idesc = irq_descp(vector);
|
idesc = irq_descp(vector);
|
||||||
if (idesc->handler != irq_type) {
|
if (idesc->handler != irq_type) {
|
||||||
if (idesc->handler != &no_irq_type)
|
if (idesc->handler != &no_irq_type)
|
||||||
printk(KERN_WARNING "%s: changing vector %d from %s to %s\n",
|
printk(KERN_WARNING
|
||||||
__FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
|
"%s: changing vector %d from %s to %s\n",
|
||||||
|
__FUNCTION__, vector,
|
||||||
|
idesc->handler->typename, irq_type->typename);
|
||||||
idesc->handler = irq_type;
|
idesc->handler = irq_type;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -681,7 +726,7 @@ get_target_cpu (unsigned int gsi, int vector)
|
||||||
if (!num_cpus)
|
if (!num_cpus)
|
||||||
goto skip_numa_setup;
|
goto skip_numa_setup;
|
||||||
|
|
||||||
/* Use vector assigment to distribute across cpus in node */
|
/* Use vector assignment to distribute across cpus in node */
|
||||||
cpu_index = vector % num_cpus;
|
cpu_index = vector % num_cpus;
|
||||||
|
|
||||||
for (numa_cpu = first_cpu(cpu_mask) ; i < cpu_index ; i++)
|
for (numa_cpu = first_cpu(cpu_mask) ; i < cpu_index ; i++)
|
||||||
|
@ -703,7 +748,7 @@ skip_numa_setup:
|
||||||
} while (!cpu_online(cpu));
|
} while (!cpu_online(cpu));
|
||||||
|
|
||||||
return cpu_physical_id(cpu);
|
return cpu_physical_id(cpu);
|
||||||
#else
|
#else /* CONFIG_SMP */
|
||||||
return cpu_physical_id(smp_processor_id());
|
return cpu_physical_id(smp_processor_id());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -755,7 +800,8 @@ again:
|
||||||
if (list_empty(&iosapic_intr_info[vector].rtes))
|
if (list_empty(&iosapic_intr_info[vector].rtes))
|
||||||
free_irq_vector(vector);
|
free_irq_vector(vector);
|
||||||
spin_unlock(&iosapic_lock);
|
spin_unlock(&iosapic_lock);
|
||||||
spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
|
spin_unlock_irqrestore(&irq_descp(vector)->lock,
|
||||||
|
flags);
|
||||||
goto again;
|
goto again;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -764,7 +810,8 @@ again:
|
||||||
polarity, trigger);
|
polarity, trigger);
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
spin_unlock(&iosapic_lock);
|
spin_unlock(&iosapic_lock);
|
||||||
spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
|
spin_unlock_irqrestore(&irq_descp(vector)->lock,
|
||||||
|
flags);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,7 +853,8 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
*/
|
*/
|
||||||
irq = gsi_to_irq(gsi);
|
irq = gsi_to_irq(gsi);
|
||||||
if (irq < 0) {
|
if (irq < 0) {
|
||||||
printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n", gsi);
|
printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n",
|
||||||
|
gsi);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -817,7 +865,9 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
spin_lock(&iosapic_lock);
|
spin_lock(&iosapic_lock);
|
||||||
{
|
{
|
||||||
if ((rte = gsi_vector_to_rte(gsi, vector)) == NULL) {
|
if ((rte = gsi_vector_to_rte(gsi, vector)) == NULL) {
|
||||||
printk(KERN_ERR "iosapic_unregister_intr(%u) unbalanced\n", gsi);
|
printk(KERN_ERR
|
||||||
|
"iosapic_unregister_intr(%u) unbalanced\n",
|
||||||
|
gsi);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
@ -827,7 +877,8 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
|
|
||||||
/* Mask the interrupt */
|
/* Mask the interrupt */
|
||||||
low32 = iosapic_intr_info[vector].low32 | IOSAPIC_MASK;
|
low32 = iosapic_intr_info[vector].low32 | IOSAPIC_MASK;
|
||||||
iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index), low32);
|
iosapic_write(rte->addr, IOSAPIC_RTE_LOW(rte->rte_index),
|
||||||
|
low32);
|
||||||
|
|
||||||
/* Remove the rte entry from the list */
|
/* Remove the rte entry from the list */
|
||||||
list_del(&rte->rte_list);
|
list_del(&rte->rte_list);
|
||||||
|
@ -840,7 +891,9 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
trigger = iosapic_intr_info[vector].trigger;
|
trigger = iosapic_intr_info[vector].trigger;
|
||||||
polarity = iosapic_intr_info[vector].polarity;
|
polarity = iosapic_intr_info[vector].polarity;
|
||||||
dest = iosapic_intr_info[vector].dest;
|
dest = iosapic_intr_info[vector].dest;
|
||||||
printk(KERN_INFO "GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d unregistered\n",
|
printk(KERN_INFO
|
||||||
|
"GSI %u (%s, %s) -> CPU %d (0x%04x)"
|
||||||
|
" vector %d unregistered\n",
|
||||||
gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
|
gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
|
||||||
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
||||||
cpu_logical_id(dest), dest, vector);
|
cpu_logical_id(dest), dest, vector);
|
||||||
|
@ -853,12 +906,15 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
idesc->handler = &no_irq_type;
|
idesc->handler = &no_irq_type;
|
||||||
|
|
||||||
/* Clear the interrupt information */
|
/* Clear the interrupt information */
|
||||||
memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info));
|
memset(&iosapic_intr_info[vector], 0,
|
||||||
|
sizeof(struct iosapic_intr_info));
|
||||||
iosapic_intr_info[vector].low32 |= IOSAPIC_MASK;
|
iosapic_intr_info[vector].low32 |= IOSAPIC_MASK;
|
||||||
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
||||||
|
|
||||||
if (idesc->action) {
|
if (idesc->action) {
|
||||||
printk(KERN_ERR "interrupt handlers still exist on IRQ %u\n", irq);
|
printk(KERN_ERR
|
||||||
|
"interrupt handlers still exist on"
|
||||||
|
"IRQ %u\n", irq);
|
||||||
WARN_ON(1);
|
WARN_ON(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -873,7 +929,6 @@ iosapic_unregister_intr (unsigned int gsi)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ACPI calls this when it finds an entry for a platform interrupt.
|
* ACPI calls this when it finds an entry for a platform interrupt.
|
||||||
* Note that the irq_base and IOSAPIC address must be set in iosapic_init().
|
|
||||||
*/
|
*/
|
||||||
int __init
|
int __init
|
||||||
iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
||||||
|
@ -907,13 +962,16 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
||||||
mask = 1;
|
mask = 1;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
printk(KERN_ERR "iosapic_register_platform_irq(): invalid int type 0x%x\n", int_type);
|
printk(KERN_ERR "%s: invalid int type 0x%x\n", __FUNCTION__,
|
||||||
|
int_type);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
register_intr(gsi, vector, delivery, polarity, trigger);
|
register_intr(gsi, vector, delivery, polarity, trigger);
|
||||||
|
|
||||||
printk(KERN_INFO "PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d (0x%04x) vector %d\n",
|
printk(KERN_INFO
|
||||||
|
"PLATFORM int %s (0x%x): GSI %u (%s, %s) -> CPU %d (0x%04x)"
|
||||||
|
" vector %d\n",
|
||||||
int_type < ARRAY_SIZE(name) ? name[int_type] : "unknown",
|
int_type < ARRAY_SIZE(name) ? name[int_type] : "unknown",
|
||||||
int_type, gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
|
int_type, gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
|
||||||
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
||||||
|
@ -923,10 +981,8 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ACPI calls this when it finds an entry for a legacy ISA IRQ override.
|
* ACPI calls this when it finds an entry for a legacy ISA IRQ override.
|
||||||
* Note that the gsi_base and IOSAPIC address must be set in iosapic_init().
|
|
||||||
*/
|
*/
|
||||||
void __init
|
void __init
|
||||||
iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
|
iosapic_override_isa_irq (unsigned int isa_irq, unsigned int gsi,
|
||||||
|
@ -955,16 +1011,19 @@ iosapic_system_init (int system_pcat_compat)
|
||||||
|
|
||||||
for (vector = 0; vector < IA64_NUM_VECTORS; ++vector) {
|
for (vector = 0; vector < IA64_NUM_VECTORS; ++vector) {
|
||||||
iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
|
iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
|
||||||
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes); /* mark as unused */
|
/* mark as unused */
|
||||||
|
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
||||||
}
|
}
|
||||||
|
|
||||||
pcat_compat = system_pcat_compat;
|
pcat_compat = system_pcat_compat;
|
||||||
if (pcat_compat) {
|
if (pcat_compat) {
|
||||||
/*
|
/*
|
||||||
* Disable the compatibility mode interrupts (8259 style), needs IN/OUT support
|
* Disable the compatibility mode interrupts (8259 style),
|
||||||
* enabled.
|
* needs IN/OUT support enabled.
|
||||||
*/
|
*/
|
||||||
printk(KERN_INFO "%s: Disabling PC-AT compatible 8259 interrupts\n", __FUNCTION__);
|
printk(KERN_INFO
|
||||||
|
"%s: Disabling PC-AT compatible 8259 interrupts\n",
|
||||||
|
__FUNCTION__);
|
||||||
outb(0xff, 0xA1);
|
outb(0xff, 0xA1);
|
||||||
outb(0xff, 0x21);
|
outb(0xff, 0x21);
|
||||||
}
|
}
|
||||||
|
@ -1004,10 +1063,7 @@ iosapic_check_gsi_range (unsigned int gsi_base, unsigned int ver)
|
||||||
base = iosapic_lists[index].gsi_base;
|
base = iosapic_lists[index].gsi_base;
|
||||||
end = base + iosapic_lists[index].num_rte - 1;
|
end = base + iosapic_lists[index].num_rte - 1;
|
||||||
|
|
||||||
if (gsi_base < base && gsi_end < base)
|
if (gsi_end < base || end < gsi_base)
|
||||||
continue;/* OK */
|
|
||||||
|
|
||||||
if (gsi_base > end && gsi_end > end)
|
|
||||||
continue; /* OK */
|
continue; /* OK */
|
||||||
|
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
|
@ -1053,12 +1109,14 @@ iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
|
||||||
|
|
||||||
if ((gsi_base == 0) && pcat_compat) {
|
if ((gsi_base == 0) && pcat_compat) {
|
||||||
/*
|
/*
|
||||||
* Map the legacy ISA devices into the IOSAPIC data. Some of these may
|
* Map the legacy ISA devices into the IOSAPIC data. Some of
|
||||||
* get reprogrammed later on with data from the ACPI Interrupt Source
|
* these may get reprogrammed later on with data from the ACPI
|
||||||
* Override table.
|
* Interrupt Source Override table.
|
||||||
*/
|
*/
|
||||||
for (isa_irq = 0; isa_irq < 16; ++isa_irq)
|
for (isa_irq = 0; isa_irq < 16; ++isa_irq)
|
||||||
iosapic_override_isa_irq(isa_irq, isa_irq, IOSAPIC_POL_HIGH, IOSAPIC_EDGE);
|
iosapic_override_isa_irq(isa_irq, isa_irq,
|
||||||
|
IOSAPIC_POL_HIGH,
|
||||||
|
IOSAPIC_EDGE);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1081,7 +1139,8 @@ iosapic_remove (unsigned int gsi_base)
|
||||||
|
|
||||||
if (iosapic_lists[index].rtes_inuse) {
|
if (iosapic_lists[index].rtes_inuse) {
|
||||||
err = -EBUSY;
|
err = -EBUSY;
|
||||||
printk(KERN_WARNING "%s: IOSAPIC for GSI base %u is busy\n",
|
printk(KERN_WARNING
|
||||||
|
"%s: IOSAPIC for GSI base %u is busy\n",
|
||||||
__FUNCTION__, gsi_base);
|
__FUNCTION__, gsi_base);
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -240,7 +240,7 @@ cache_info(char *page)
|
||||||
}
|
}
|
||||||
p += sprintf(p,
|
p += sprintf(p,
|
||||||
"%s Cache level %lu:\n"
|
"%s Cache level %lu:\n"
|
||||||
"\tSize : %lu bytes\n"
|
"\tSize : %u bytes\n"
|
||||||
"\tAttributes : ",
|
"\tAttributes : ",
|
||||||
cache_types[j+cci.pcci_unified], i+1,
|
cache_types[j+cci.pcci_unified], i+1,
|
||||||
cci.pcci_cache_size);
|
cci.pcci_cache_size);
|
||||||
|
@ -648,9 +648,9 @@ frequency_info(char *page)
|
||||||
if (ia64_pal_freq_ratios(&proc, &bus, &itc) != 0) return 0;
|
if (ia64_pal_freq_ratios(&proc, &bus, &itc) != 0) return 0;
|
||||||
|
|
||||||
p += sprintf(p,
|
p += sprintf(p,
|
||||||
"Processor/Clock ratio : %ld/%ld\n"
|
"Processor/Clock ratio : %d/%d\n"
|
||||||
"Bus/Clock ratio : %ld/%ld\n"
|
"Bus/Clock ratio : %d/%d\n"
|
||||||
"ITC/Clock ratio : %ld/%ld\n",
|
"ITC/Clock ratio : %d/%d\n",
|
||||||
proc.num, proc.den, bus.num, bus.den, itc.num, itc.den);
|
proc.num, proc.den, bus.num, bus.den, itc.num, itc.den);
|
||||||
|
|
||||||
return p - page;
|
return p - page;
|
||||||
|
|
|
@ -188,7 +188,7 @@ ia64_init_itm (void)
|
||||||
itc_freq = (platform_base_freq*itc_ratio.num)/itc_ratio.den;
|
itc_freq = (platform_base_freq*itc_ratio.num)/itc_ratio.den;
|
||||||
|
|
||||||
local_cpu_data->itm_delta = (itc_freq + HZ/2) / HZ;
|
local_cpu_data->itm_delta = (itc_freq + HZ/2) / HZ;
|
||||||
printk(KERN_DEBUG "CPU %d: base freq=%lu.%03luMHz, ITC ratio=%lu/%lu, "
|
printk(KERN_DEBUG "CPU %d: base freq=%lu.%03luMHz, ITC ratio=%u/%u, "
|
||||||
"ITC freq=%lu.%03luMHz", smp_processor_id(),
|
"ITC freq=%lu.%03luMHz", smp_processor_id(),
|
||||||
platform_base_freq / 1000000, (platform_base_freq / 1000) % 1000,
|
platform_base_freq / 1000000, (platform_base_freq / 1000) % 1000,
|
||||||
itc_ratio.num, itc_ratio.den, itc_freq / 1000000, (itc_freq / 1000) % 1000);
|
itc_ratio.num, itc_ratio.den, itc_freq / 1000000, (itc_freq / 1000) % 1000);
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
* 2002/08/07 Erich Focht <efocht@ess.nec.de>
|
* 2002/08/07 Erich Focht <efocht@ess.nec.de>
|
||||||
* Populate cpu entries in sysfs for non-numa systems as well
|
* Populate cpu entries in sysfs for non-numa systems as well
|
||||||
* Intel Corporation - Ashok Raj
|
* Intel Corporation - Ashok Raj
|
||||||
|
* 02/27/2006 Zhang, Yanmin
|
||||||
|
* Populate cpu cache entries in sysfs for cpu cache info
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/config.h>
|
#include <linux/config.h>
|
||||||
|
@ -19,6 +21,7 @@
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/bootmem.h>
|
#include <linux/bootmem.h>
|
||||||
#include <linux/nodemask.h>
|
#include <linux/nodemask.h>
|
||||||
|
#include <linux/notifier.h>
|
||||||
#include <asm/mmzone.h>
|
#include <asm/mmzone.h>
|
||||||
#include <asm/numa.h>
|
#include <asm/numa.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
|
@ -101,3 +104,367 @@ out:
|
||||||
}
|
}
|
||||||
|
|
||||||
subsys_initcall(topology_init);
|
subsys_initcall(topology_init);
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Export cpu cache information through sysfs
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A bunch of string array to get pretty printing
|
||||||
|
*/
|
||||||
|
static const char *cache_types[] = {
|
||||||
|
"", /* not used */
|
||||||
|
"Instruction",
|
||||||
|
"Data",
|
||||||
|
"Unified" /* unified */
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *cache_mattrib[]={
|
||||||
|
"WriteThrough",
|
||||||
|
"WriteBack",
|
||||||
|
"", /* reserved */
|
||||||
|
"" /* reserved */
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cache_info {
|
||||||
|
pal_cache_config_info_t cci;
|
||||||
|
cpumask_t shared_cpu_map;
|
||||||
|
int level;
|
||||||
|
int type;
|
||||||
|
struct kobject kobj;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cpu_cache_info {
|
||||||
|
struct cache_info *cache_leaves;
|
||||||
|
int num_cache_leaves;
|
||||||
|
struct kobject kobj;
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct cpu_cache_info all_cpu_cache_info[NR_CPUS];
|
||||||
|
#define LEAF_KOBJECT_PTR(x,y) (&all_cpu_cache_info[x].cache_leaves[y])
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
static void cache_shared_cpu_map_setup( unsigned int cpu,
|
||||||
|
struct cache_info * this_leaf)
|
||||||
|
{
|
||||||
|
pal_cache_shared_info_t csi;
|
||||||
|
int num_shared, i = 0;
|
||||||
|
unsigned int j;
|
||||||
|
|
||||||
|
if (cpu_data(cpu)->threads_per_core <= 1 &&
|
||||||
|
cpu_data(cpu)->cores_per_socket <= 1) {
|
||||||
|
cpu_set(cpu, this_leaf->shared_cpu_map);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ia64_pal_cache_shared_info(this_leaf->level,
|
||||||
|
this_leaf->type,
|
||||||
|
0,
|
||||||
|
&csi) != PAL_STATUS_SUCCESS)
|
||||||
|
return;
|
||||||
|
|
||||||
|
num_shared = (int) csi.num_shared;
|
||||||
|
do {
|
||||||
|
for_each_cpu(j)
|
||||||
|
if (cpu_data(cpu)->socket_id == cpu_data(j)->socket_id
|
||||||
|
&& cpu_data(j)->core_id == csi.log1_cid
|
||||||
|
&& cpu_data(j)->thread_id == csi.log1_tid)
|
||||||
|
cpu_set(j, this_leaf->shared_cpu_map);
|
||||||
|
|
||||||
|
i++;
|
||||||
|
} while (i < num_shared &&
|
||||||
|
ia64_pal_cache_shared_info(this_leaf->level,
|
||||||
|
this_leaf->type,
|
||||||
|
i,
|
||||||
|
&csi) == PAL_STATUS_SUCCESS);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static void cache_shared_cpu_map_setup(unsigned int cpu,
|
||||||
|
struct cache_info * this_leaf)
|
||||||
|
{
|
||||||
|
cpu_set(cpu, this_leaf->shared_cpu_map);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static ssize_t show_coherency_line_size(struct cache_info *this_leaf,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf, "%u\n", 1 << this_leaf->cci.pcci_line_size);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_ways_of_associativity(struct cache_info *this_leaf,
|
||||||
|
char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf, "%u\n", this_leaf->cci.pcci_assoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_attributes(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf,
|
||||||
|
"%s\n",
|
||||||
|
cache_mattrib[this_leaf->cci.pcci_cache_attr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_size(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf, "%uK\n", this_leaf->cci.pcci_cache_size / 1024);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_number_of_sets(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
unsigned number_of_sets = this_leaf->cci.pcci_cache_size;
|
||||||
|
number_of_sets /= this_leaf->cci.pcci_assoc;
|
||||||
|
number_of_sets /= 1 << this_leaf->cci.pcci_line_size;
|
||||||
|
|
||||||
|
return sprintf(buf, "%u\n", number_of_sets);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_shared_cpu_map(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
ssize_t len;
|
||||||
|
cpumask_t shared_cpu_map;
|
||||||
|
|
||||||
|
cpus_and(shared_cpu_map, this_leaf->shared_cpu_map, cpu_online_map);
|
||||||
|
len = cpumask_scnprintf(buf, NR_CPUS+1, shared_cpu_map);
|
||||||
|
len += sprintf(buf+len, "\n");
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_type(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
int type = this_leaf->type + this_leaf->cci.pcci_unified;
|
||||||
|
return sprintf(buf, "%s\n", cache_types[type]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static ssize_t show_level(struct cache_info *this_leaf, char *buf)
|
||||||
|
{
|
||||||
|
return sprintf(buf, "%u\n", this_leaf->level);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct cache_attr {
|
||||||
|
struct attribute attr;
|
||||||
|
ssize_t (*show)(struct cache_info *, char *);
|
||||||
|
ssize_t (*store)(struct cache_info *, const char *, size_t count);
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef define_one_ro
|
||||||
|
#undef define_one_ro
|
||||||
|
#endif
|
||||||
|
#define define_one_ro(_name) \
|
||||||
|
static struct cache_attr _name = \
|
||||||
|
__ATTR(_name, 0444, show_##_name, NULL)
|
||||||
|
|
||||||
|
define_one_ro(level);
|
||||||
|
define_one_ro(type);
|
||||||
|
define_one_ro(coherency_line_size);
|
||||||
|
define_one_ro(ways_of_associativity);
|
||||||
|
define_one_ro(size);
|
||||||
|
define_one_ro(number_of_sets);
|
||||||
|
define_one_ro(shared_cpu_map);
|
||||||
|
define_one_ro(attributes);
|
||||||
|
|
||||||
|
static struct attribute * cache_default_attrs[] = {
|
||||||
|
&type.attr,
|
||||||
|
&level.attr,
|
||||||
|
&coherency_line_size.attr,
|
||||||
|
&ways_of_associativity.attr,
|
||||||
|
&attributes.attr,
|
||||||
|
&size.attr,
|
||||||
|
&number_of_sets.attr,
|
||||||
|
&shared_cpu_map.attr,
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
#define to_object(k) container_of(k, struct cache_info, kobj)
|
||||||
|
#define to_attr(a) container_of(a, struct cache_attr, attr)
|
||||||
|
|
||||||
|
static ssize_t cache_show(struct kobject * kobj, struct attribute * attr, char * buf)
|
||||||
|
{
|
||||||
|
struct cache_attr *fattr = to_attr(attr);
|
||||||
|
struct cache_info *this_leaf = to_object(kobj);
|
||||||
|
ssize_t ret;
|
||||||
|
|
||||||
|
ret = fattr->show ? fattr->show(this_leaf, buf) : 0;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct sysfs_ops cache_sysfs_ops = {
|
||||||
|
.show = cache_show
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct kobj_type cache_ktype = {
|
||||||
|
.sysfs_ops = &cache_sysfs_ops,
|
||||||
|
.default_attrs = cache_default_attrs,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct kobj_type cache_ktype_percpu_entry = {
|
||||||
|
.sysfs_ops = &cache_sysfs_ops,
|
||||||
|
};
|
||||||
|
|
||||||
|
static void __cpuinit cpu_cache_sysfs_exit(unsigned int cpu)
|
||||||
|
{
|
||||||
|
if (all_cpu_cache_info[cpu].cache_leaves) {
|
||||||
|
kfree(all_cpu_cache_info[cpu].cache_leaves);
|
||||||
|
all_cpu_cache_info[cpu].cache_leaves = NULL;
|
||||||
|
}
|
||||||
|
all_cpu_cache_info[cpu].num_cache_leaves = 0;
|
||||||
|
memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __cpuinit cpu_cache_sysfs_init(unsigned int cpu)
|
||||||
|
{
|
||||||
|
u64 i, levels, unique_caches;
|
||||||
|
pal_cache_config_info_t cci;
|
||||||
|
int j;
|
||||||
|
s64 status;
|
||||||
|
struct cache_info *this_cache;
|
||||||
|
int num_cache_leaves = 0;
|
||||||
|
|
||||||
|
if ((status = ia64_pal_cache_summary(&levels, &unique_caches)) != 0) {
|
||||||
|
printk(KERN_ERR "ia64_pal_cache_summary=%ld\n", status);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
this_cache=kzalloc(sizeof(struct cache_info)*unique_caches,
|
||||||
|
GFP_KERNEL);
|
||||||
|
if (this_cache == NULL)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
for (i=0; i < levels; i++) {
|
||||||
|
for (j=2; j >0 ; j--) {
|
||||||
|
if ((status=ia64_pal_cache_config_info(i,j, &cci)) !=
|
||||||
|
PAL_STATUS_SUCCESS)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
this_cache[num_cache_leaves].cci = cci;
|
||||||
|
this_cache[num_cache_leaves].level = i + 1;
|
||||||
|
this_cache[num_cache_leaves].type = j;
|
||||||
|
|
||||||
|
cache_shared_cpu_map_setup(cpu,
|
||||||
|
&this_cache[num_cache_leaves]);
|
||||||
|
num_cache_leaves ++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
all_cpu_cache_info[cpu].cache_leaves = this_cache;
|
||||||
|
all_cpu_cache_info[cpu].num_cache_leaves = num_cache_leaves;
|
||||||
|
|
||||||
|
memset(&all_cpu_cache_info[cpu].kobj, 0, sizeof(struct kobject));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add cache interface for CPU device */
|
||||||
|
static int __cpuinit cache_add_dev(struct sys_device * sys_dev)
|
||||||
|
{
|
||||||
|
unsigned int cpu = sys_dev->id;
|
||||||
|
unsigned long i, j;
|
||||||
|
struct cache_info *this_object;
|
||||||
|
int retval = 0;
|
||||||
|
cpumask_t oldmask;
|
||||||
|
|
||||||
|
if (all_cpu_cache_info[cpu].kobj.parent)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
oldmask = current->cpus_allowed;
|
||||||
|
retval = set_cpus_allowed(current, cpumask_of_cpu(cpu));
|
||||||
|
if (unlikely(retval))
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
retval = cpu_cache_sysfs_init(cpu);
|
||||||
|
set_cpus_allowed(current, oldmask);
|
||||||
|
if (unlikely(retval < 0))
|
||||||
|
return retval;
|
||||||
|
|
||||||
|
all_cpu_cache_info[cpu].kobj.parent = &sys_dev->kobj;
|
||||||
|
kobject_set_name(&all_cpu_cache_info[cpu].kobj, "%s", "cache");
|
||||||
|
all_cpu_cache_info[cpu].kobj.ktype = &cache_ktype_percpu_entry;
|
||||||
|
retval = kobject_register(&all_cpu_cache_info[cpu].kobj);
|
||||||
|
|
||||||
|
for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++) {
|
||||||
|
this_object = LEAF_KOBJECT_PTR(cpu,i);
|
||||||
|
this_object->kobj.parent = &all_cpu_cache_info[cpu].kobj;
|
||||||
|
kobject_set_name(&(this_object->kobj), "index%1lu", i);
|
||||||
|
this_object->kobj.ktype = &cache_ktype;
|
||||||
|
retval = kobject_register(&(this_object->kobj));
|
||||||
|
if (unlikely(retval)) {
|
||||||
|
for (j = 0; j < i; j++) {
|
||||||
|
kobject_unregister(
|
||||||
|
&(LEAF_KOBJECT_PTR(cpu,j)->kobj));
|
||||||
|
}
|
||||||
|
kobject_unregister(&all_cpu_cache_info[cpu].kobj);
|
||||||
|
cpu_cache_sysfs_exit(cpu);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return retval;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove cache interface for CPU device */
|
||||||
|
static int __cpuinit cache_remove_dev(struct sys_device * sys_dev)
|
||||||
|
{
|
||||||
|
unsigned int cpu = sys_dev->id;
|
||||||
|
unsigned long i;
|
||||||
|
|
||||||
|
for (i = 0; i < all_cpu_cache_info[cpu].num_cache_leaves; i++)
|
||||||
|
kobject_unregister(&(LEAF_KOBJECT_PTR(cpu,i)->kobj));
|
||||||
|
|
||||||
|
if (all_cpu_cache_info[cpu].kobj.parent) {
|
||||||
|
kobject_unregister(&all_cpu_cache_info[cpu].kobj);
|
||||||
|
memset(&all_cpu_cache_info[cpu].kobj,
|
||||||
|
0,
|
||||||
|
sizeof(struct kobject));
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu_cache_sysfs_exit(cpu);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When a cpu is hot-plugged, do a check and initiate
|
||||||
|
* cache kobject if necessary
|
||||||
|
*/
|
||||||
|
static int __cpuinit cache_cpu_callback(struct notifier_block *nfb,
|
||||||
|
unsigned long action, void *hcpu)
|
||||||
|
{
|
||||||
|
unsigned int cpu = (unsigned long)hcpu;
|
||||||
|
struct sys_device *sys_dev;
|
||||||
|
|
||||||
|
sys_dev = get_cpu_sysdev(cpu);
|
||||||
|
switch (action) {
|
||||||
|
case CPU_ONLINE:
|
||||||
|
cache_add_dev(sys_dev);
|
||||||
|
break;
|
||||||
|
case CPU_DEAD:
|
||||||
|
cache_remove_dev(sys_dev);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return NOTIFY_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct notifier_block cache_cpu_notifier =
|
||||||
|
{
|
||||||
|
.notifier_call = cache_cpu_callback
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __cpuinit cache_sysfs_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for_each_online_cpu(i) {
|
||||||
|
cache_cpu_callback(&cache_cpu_notifier, CPU_ONLINE,
|
||||||
|
(void *)(long)i);
|
||||||
|
}
|
||||||
|
|
||||||
|
register_cpu_notifier(&cache_cpu_notifier);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(cache_sysfs_init);
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,15 @@ SECTIONS
|
||||||
__stop___ex_table = .;
|
__stop___ex_table = .;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* MCA table */
|
||||||
|
. = ALIGN(16);
|
||||||
|
__mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET)
|
||||||
|
{
|
||||||
|
__start___mca_table = .;
|
||||||
|
*(__mca_table)
|
||||||
|
__stop___mca_table = .;
|
||||||
|
}
|
||||||
|
|
||||||
/* Global data */
|
/* Global data */
|
||||||
_data = .;
|
_data = .;
|
||||||
|
|
||||||
|
@ -130,15 +139,6 @@ SECTIONS
|
||||||
__initcall_end = .;
|
__initcall_end = .;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MCA table */
|
|
||||||
. = ALIGN(16);
|
|
||||||
__mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET)
|
|
||||||
{
|
|
||||||
__start___mca_table = .;
|
|
||||||
*(__mca_table)
|
|
||||||
__stop___mca_table = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET)
|
.data.patch.vtop : AT(ADDR(.data.patch.vtop) - LOAD_OFFSET)
|
||||||
{
|
{
|
||||||
__start___vtop_patchlist = .;
|
__start___vtop_patchlist = .;
|
||||||
|
|
|
@ -109,6 +109,7 @@ lazy_mmu_prot_update (pte_t pte)
|
||||||
{
|
{
|
||||||
unsigned long addr;
|
unsigned long addr;
|
||||||
struct page *page;
|
struct page *page;
|
||||||
|
unsigned long order;
|
||||||
|
|
||||||
if (!pte_exec(pte))
|
if (!pte_exec(pte))
|
||||||
return; /* not an executable page... */
|
return; /* not an executable page... */
|
||||||
|
@ -119,7 +120,12 @@ lazy_mmu_prot_update (pte_t pte)
|
||||||
if (test_bit(PG_arch_1, &page->flags))
|
if (test_bit(PG_arch_1, &page->flags))
|
||||||
return; /* i-cache is already coherent with d-cache */
|
return; /* i-cache is already coherent with d-cache */
|
||||||
|
|
||||||
flush_icache_range(addr, addr + PAGE_SIZE);
|
if (PageCompound(page)) {
|
||||||
|
order = (unsigned long) (page[1].lru.prev);
|
||||||
|
flush_icache_range(addr, addr + (1UL << order << PAGE_SHIFT));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
flush_icache_range(addr, addr + PAGE_SIZE);
|
||||||
set_bit(PG_arch_1, &page->flags); /* mark page as clean */
|
set_bit(PG_arch_1, &page->flags); /* mark page as clean */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,12 +21,12 @@ __ioremap (unsigned long offset, unsigned long size)
|
||||||
void __iomem *
|
void __iomem *
|
||||||
ioremap (unsigned long offset, unsigned long size)
|
ioremap (unsigned long offset, unsigned long size)
|
||||||
{
|
{
|
||||||
if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
|
|
||||||
return __ioremap(offset, size);
|
|
||||||
|
|
||||||
if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
|
if (efi_mem_attribute_range(offset, size, EFI_MEMORY_WB))
|
||||||
return phys_to_virt(offset);
|
return phys_to_virt(offset);
|
||||||
|
|
||||||
|
if (efi_mem_attribute_range(offset, size, EFI_MEMORY_UC))
|
||||||
|
return __ioremap(offset, size);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Someday this should check ACPI resources so we
|
* Someday this should check ACPI resources so we
|
||||||
* can do the right thing for hot-plugged regions.
|
* can do the right thing for hot-plugged regions.
|
||||||
|
|
|
@ -156,17 +156,19 @@ flush_tlb_range (struct vm_area_struct *vma, unsigned long start,
|
||||||
nbits = purge.max_bits;
|
nbits = purge.max_bits;
|
||||||
start &= ~((1UL << nbits) - 1);
|
start &= ~((1UL << nbits) - 1);
|
||||||
|
|
||||||
# ifdef CONFIG_SMP
|
|
||||||
platform_global_tlb_purge(mm, start, end, nbits);
|
|
||||||
# else
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
if (mm != current->active_mm || cpus_weight(mm->cpu_vm_mask) != 1) {
|
||||||
|
platform_global_tlb_purge(mm, start, end, nbits);
|
||||||
|
preempt_enable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
do {
|
do {
|
||||||
ia64_ptcl(start, (nbits<<2));
|
ia64_ptcl(start, (nbits<<2));
|
||||||
start += (1UL << nbits);
|
start += (1UL << nbits);
|
||||||
} while (start < end);
|
} while (start < end);
|
||||||
preempt_enable();
|
preempt_enable();
|
||||||
# endif
|
|
||||||
|
|
||||||
ia64_srlz_i(); /* srlz.i implies srlz.d */
|
ia64_srlz_i(); /* srlz.i implies srlz.d */
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(flush_tlb_range);
|
EXPORT_SYMBOL(flush_tlb_range);
|
||||||
|
|
|
@ -110,7 +110,11 @@ static int sn_hwperf_geoid_to_cnode(char *location)
|
||||||
if (sn_hwperf_location_to_bpos(location, &rack, &bay, &slot, &slab))
|
if (sn_hwperf_location_to_bpos(location, &rack, &bay, &slot, &slab))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
for_each_node(cnode) {
|
/*
|
||||||
|
* FIXME: replace with cleaner for_each_XXX macro which addresses
|
||||||
|
* both compute and IO nodes once ACPI3.0 is available.
|
||||||
|
*/
|
||||||
|
for (cnode = 0; cnode < num_cnodes; cnode++) {
|
||||||
geoid = cnodeid_get_geoid(cnode);
|
geoid = cnodeid_get_geoid(cnode);
|
||||||
module_id = geo_module(geoid);
|
module_id = geo_module(geoid);
|
||||||
this_rack = MODULE_GET_RACK(module_id);
|
this_rack = MODULE_GET_RACK(module_id);
|
||||||
|
@ -605,7 +609,7 @@ static int sn_hwperf_op_cpu(struct sn_hwperf_op_info *op_info)
|
||||||
op_info->a->arg &= SN_HWPERF_ARG_OBJID_MASK;
|
op_info->a->arg &= SN_HWPERF_ARG_OBJID_MASK;
|
||||||
|
|
||||||
if (cpu != SN_HWPERF_ARG_ANY_CPU) {
|
if (cpu != SN_HWPERF_ARG_ANY_CPU) {
|
||||||
if (cpu >= num_online_cpus() || !cpu_online(cpu)) {
|
if (cpu >= NR_CPUS || !cpu_online(cpu)) {
|
||||||
r = -EINVAL;
|
r = -EINVAL;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,4 +79,3 @@ EXPORT_SYMBOL(__down_failed_interruptible);
|
||||||
EXPORT_SYMBOL(__down_failed_trylock);
|
EXPORT_SYMBOL(__down_failed_trylock);
|
||||||
EXPORT_SYMBOL(__up_wakeup);
|
EXPORT_SYMBOL(__up_wakeup);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
|
@ -57,8 +57,6 @@ EXPORT_SYMBOL(__down_failed_interruptible);
|
||||||
EXPORT_SYMBOL(__down_failed_trylock);
|
EXPORT_SYMBOL(__down_failed_trylock);
|
||||||
EXPORT_SYMBOL(__up_wakeup);
|
EXPORT_SYMBOL(__up_wakeup);
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* libgcc functions - functions that are used internally by the
|
* libgcc functions - functions that are used internally by the
|
||||||
* compiler... (prototypes are not correct though, but that
|
* compiler... (prototypes are not correct though, but that
|
||||||
|
|
|
@ -419,4 +419,3 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
return pc;
|
return pc;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
|
@ -177,14 +177,10 @@ config ARCH_DISCONTIGMEM_DEFAULT
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on ARCH_DISCONTIGMEM_ENABLE
|
depends on ARCH_DISCONTIGMEM_ENABLE
|
||||||
|
|
||||||
|
source "kernel/Kconfig.preempt"
|
||||||
source "kernel/Kconfig.hz"
|
source "kernel/Kconfig.hz"
|
||||||
source "mm/Kconfig"
|
source "mm/Kconfig"
|
||||||
|
|
||||||
config PREEMPT
|
|
||||||
bool
|
|
||||||
# bool "Preemptible Kernel"
|
|
||||||
default n
|
|
||||||
|
|
||||||
config COMPAT
|
config COMPAT
|
||||||
def_bool y
|
def_bool y
|
||||||
depends on 64BIT
|
depends on 64BIT
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.14-rc5-pa1
|
# Linux kernel version: 2.6.16-pa6
|
||||||
# Fri Oct 21 23:04:34 2005
|
# Sun Mar 26 19:59:51 2006
|
||||||
#
|
#
|
||||||
CONFIG_PARISC=y
|
CONFIG_PARISC=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -10,14 +10,11 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
CONFIG_GENERIC_IRQ_PROBE=y
|
CONFIG_GENERIC_IRQ_PROBE=y
|
||||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
#
|
#
|
||||||
CONFIG_EXPERIMENTAL=y
|
CONFIG_EXPERIMENTAL=y
|
||||||
# CONFIG_CLEAN_COMPILE is not set
|
|
||||||
CONFIG_BROKEN=y
|
|
||||||
CONFIG_BROKEN_ON_SMP=y
|
CONFIG_BROKEN_ON_SMP=y
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
@ -32,17 +29,18 @@ CONFIG_POSIX_MQUEUE=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
CONFIG_HOTPLUG=y
|
|
||||||
CONFIG_KOBJECT_UEVENT=y
|
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
# CONFIG_EMBEDDED is not set
|
# CONFIG_EMBEDDED is not set
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
CONFIG_KALLSYMS_ALL=y
|
CONFIG_KALLSYMS_ALL=y
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
|
@ -51,8 +49,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
CONFIG_CC_ALIGN_LABELS=0
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
CONFIG_CC_ALIGN_LOOPS=0
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
CONFIG_CC_ALIGN_JUMPS=0
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
CONFIG_SLAB=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
|
# CONFIG_SLOB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Loadable module support
|
# Loadable module support
|
||||||
|
@ -65,6 +65,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_KMOD=y
|
CONFIG_KMOD=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Block layer
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Processor type and features
|
# Processor type and features
|
||||||
#
|
#
|
||||||
|
@ -75,6 +92,10 @@ CONFIG_PA7100LC=y
|
||||||
# CONFIG_PA8X00 is not set
|
# CONFIG_PA8X00 is not set
|
||||||
CONFIG_PA11=y
|
CONFIG_PA11=y
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
|
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||||
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
|
CONFIG_PREEMPT_VOLUNTARY=y
|
||||||
|
# CONFIG_PREEMPT is not set
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
CONFIG_HZ_250=y
|
CONFIG_HZ_250=y
|
||||||
# CONFIG_HZ_1000 is not set
|
# CONFIG_HZ_1000 is not set
|
||||||
|
@ -86,7 +107,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||||
CONFIG_FLATMEM=y
|
CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
# CONFIG_PREEMPT is not set
|
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||||
# CONFIG_HPUX is not set
|
# CONFIG_HPUX is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -130,6 +151,7 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
# CONFIG_NETDEBUG is not set
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_MMAP=y
|
CONFIG_PACKET_MMAP=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -165,7 +187,12 @@ CONFIG_TCP_CONG_BIC=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
# CONFIG_NETFILTER_DEBUG is not set
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Core Netfilter Configuration
|
||||||
|
#
|
||||||
# CONFIG_NETFILTER_NETLINK is not set
|
# CONFIG_NETFILTER_NETLINK is not set
|
||||||
|
# CONFIG_NETFILTER_XTABLES is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IP: Netfilter Configuration
|
# IP: Netfilter Configuration
|
||||||
|
@ -182,64 +209,6 @@ CONFIG_IP_NF_TFTP=m
|
||||||
CONFIG_IP_NF_AMANDA=m
|
CONFIG_IP_NF_AMANDA=m
|
||||||
# CONFIG_IP_NF_PPTP is not set
|
# CONFIG_IP_NF_PPTP is not set
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
CONFIG_IP_NF_IPTABLES=m
|
|
||||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
|
||||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
|
||||||
CONFIG_IP_NF_MATCH_MAC=m
|
|
||||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
|
||||||
CONFIG_IP_NF_MATCH_MARK=m
|
|
||||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
|
||||||
CONFIG_IP_NF_MATCH_TOS=m
|
|
||||||
CONFIG_IP_NF_MATCH_RECENT=m
|
|
||||||
CONFIG_IP_NF_MATCH_ECN=m
|
|
||||||
CONFIG_IP_NF_MATCH_DSCP=m
|
|
||||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
|
||||||
CONFIG_IP_NF_MATCH_LENGTH=m
|
|
||||||
CONFIG_IP_NF_MATCH_TTL=m
|
|
||||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
|
||||||
CONFIG_IP_NF_MATCH_HELPER=m
|
|
||||||
CONFIG_IP_NF_MATCH_STATE=m
|
|
||||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
|
||||||
CONFIG_IP_NF_MATCH_OWNER=m
|
|
||||||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
|
||||||
CONFIG_IP_NF_MATCH_SCTP=m
|
|
||||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
|
||||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
|
||||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
|
||||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
|
||||||
# CONFIG_IP_NF_MATCH_STRING is not set
|
|
||||||
CONFIG_IP_NF_FILTER=m
|
|
||||||
CONFIG_IP_NF_TARGET_REJECT=m
|
|
||||||
CONFIG_IP_NF_TARGET_LOG=m
|
|
||||||
CONFIG_IP_NF_TARGET_ULOG=m
|
|
||||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
|
||||||
# CONFIG_IP_NF_TARGET_NFQUEUE is not set
|
|
||||||
CONFIG_IP_NF_NAT=m
|
|
||||||
CONFIG_IP_NF_NAT_NEEDED=y
|
|
||||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
|
||||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
|
||||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
|
||||||
CONFIG_IP_NF_TARGET_SAME=m
|
|
||||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
|
||||||
CONFIG_IP_NF_NAT_IRC=m
|
|
||||||
CONFIG_IP_NF_NAT_FTP=m
|
|
||||||
CONFIG_IP_NF_NAT_TFTP=m
|
|
||||||
CONFIG_IP_NF_NAT_AMANDA=m
|
|
||||||
CONFIG_IP_NF_MANGLE=m
|
|
||||||
CONFIG_IP_NF_TARGET_TOS=m
|
|
||||||
CONFIG_IP_NF_TARGET_ECN=m
|
|
||||||
CONFIG_IP_NF_TARGET_DSCP=m
|
|
||||||
CONFIG_IP_NF_TARGET_MARK=m
|
|
||||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
|
||||||
# CONFIG_IP_NF_TARGET_TTL is not set
|
|
||||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
|
||||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
|
||||||
CONFIG_IP_NF_RAW=m
|
|
||||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
|
||||||
CONFIG_IP_NF_ARPTABLES=m
|
|
||||||
CONFIG_IP_NF_ARPFILTER=m
|
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# DCCP Configuration (EXPERIMENTAL)
|
# DCCP Configuration (EXPERIMENTAL)
|
||||||
|
@ -250,6 +219,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
||||||
# SCTP Configuration (EXPERIMENTAL)
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
# CONFIG_IP_SCTP is not set
|
# CONFIG_IP_SCTP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TIPC Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_TIPC is not set
|
||||||
# CONFIG_ATM is not set
|
# CONFIG_ATM is not set
|
||||||
# CONFIG_BRIDGE is not set
|
# CONFIG_BRIDGE is not set
|
||||||
# CONFIG_VLAN_8021Q is not set
|
# CONFIG_VLAN_8021Q is not set
|
||||||
|
@ -263,8 +237,11 @@ CONFIG_LLC2=m
|
||||||
# CONFIG_NET_DIVERT is not set
|
# CONFIG_NET_DIVERT is not set
|
||||||
# CONFIG_ECONET is not set
|
# CONFIG_ECONET is not set
|
||||||
# CONFIG_WAN_ROUTER is not set
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# QoS and/or fair queueing
|
||||||
|
#
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
# CONFIG_NET_CLS_ROUTE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
|
@ -304,6 +281,7 @@ CONFIG_PARPORT=y
|
||||||
CONFIG_PARPORT_PC=m
|
CONFIG_PARPORT_PC=m
|
||||||
# CONFIG_PARPORT_PC_FIFO is not set
|
# CONFIG_PARPORT_PC_FIFO is not set
|
||||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||||
|
CONFIG_PARPORT_NOT_PC=y
|
||||||
CONFIG_PARPORT_GSC=y
|
CONFIG_PARPORT_GSC=y
|
||||||
# CONFIG_PARPORT_1284 is not set
|
# CONFIG_PARPORT_1284 is not set
|
||||||
|
|
||||||
|
@ -314,7 +292,6 @@ CONFIG_PARPORT_GSC=y
|
||||||
#
|
#
|
||||||
# Block devices
|
# Block devices
|
||||||
#
|
#
|
||||||
# CONFIG_BLK_DEV_FD is not set
|
|
||||||
# CONFIG_PARIDE is not set
|
# CONFIG_PARIDE is not set
|
||||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
@ -325,14 +302,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
# CONFIG_CDROM_PKTCDVD is not set
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
|
||||||
#
|
|
||||||
# IO Schedulers
|
|
||||||
#
|
|
||||||
CONFIG_IOSCHED_NOOP=y
|
|
||||||
CONFIG_IOSCHED_AS=y
|
|
||||||
CONFIG_IOSCHED_DEADLINE=y
|
|
||||||
CONFIG_IOSCHED_CFQ=y
|
|
||||||
CONFIG_ATA_OVER_ETH=m
|
CONFIG_ATA_OVER_ETH=m
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -376,6 +345,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||||
#
|
#
|
||||||
# SCSI low-level drivers
|
# SCSI low-level drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_ISCSI_TCP is not set
|
||||||
# CONFIG_SCSI_SATA is not set
|
# CONFIG_SCSI_SATA is not set
|
||||||
# CONFIG_SCSI_PPA is not set
|
# CONFIG_SCSI_PPA is not set
|
||||||
# CONFIG_SCSI_IMM is not set
|
# CONFIG_SCSI_IMM is not set
|
||||||
|
@ -407,7 +377,6 @@ CONFIG_MD_RAID1=m
|
||||||
#
|
#
|
||||||
# IEEE 1394 (FireWire) support
|
# IEEE 1394 (FireWire) support
|
||||||
#
|
#
|
||||||
# CONFIG_IEEE1394 is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2O device support
|
# I2O device support
|
||||||
|
@ -471,6 +440,7 @@ CONFIG_PPP_ASYNC=m
|
||||||
CONFIG_PPP_SYNC_TTY=m
|
CONFIG_PPP_SYNC_TTY=m
|
||||||
CONFIG_PPP_DEFLATE=m
|
CONFIG_PPP_DEFLATE=m
|
||||||
CONFIG_PPP_BSDCOMP=m
|
CONFIG_PPP_BSDCOMP=m
|
||||||
|
CONFIG_PPP_MPPE=m
|
||||||
CONFIG_PPPOE=m
|
CONFIG_PPPOE=m
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
# CONFIG_SHAPER is not set
|
# CONFIG_SHAPER is not set
|
||||||
|
@ -516,8 +486,8 @@ CONFIG_KEYBOARD_ATKBD_HP_KEYCODES=y
|
||||||
# CONFIG_KEYBOARD_LKKBD is not set
|
# CONFIG_KEYBOARD_LKKBD is not set
|
||||||
# CONFIG_KEYBOARD_XTKBD is not set
|
# CONFIG_KEYBOARD_XTKBD is not set
|
||||||
# CONFIG_KEYBOARD_NEWTON is not set
|
# CONFIG_KEYBOARD_NEWTON is not set
|
||||||
CONFIG_KEYBOARD_HIL_OLD=y
|
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||||
# CONFIG_KEYBOARD_HIL is not set
|
CONFIG_KEYBOARD_HIL=y
|
||||||
CONFIG_INPUT_MOUSE=y
|
CONFIG_INPUT_MOUSE=y
|
||||||
CONFIG_MOUSE_PS2=y
|
CONFIG_MOUSE_PS2=y
|
||||||
CONFIG_MOUSE_SERIAL=m
|
CONFIG_MOUSE_SERIAL=m
|
||||||
|
@ -554,6 +524,7 @@ CONFIG_HW_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||||
|
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
|
@ -598,12 +569,20 @@ CONFIG_MAX_RAW_DEVS=256
|
||||||
#
|
#
|
||||||
# TPM devices
|
# TPM devices
|
||||||
#
|
#
|
||||||
|
# CONFIG_TCG_TPM is not set
|
||||||
|
# CONFIG_TELCLOCK is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2C support
|
# I2C support
|
||||||
#
|
#
|
||||||
# CONFIG_I2C is not set
|
# CONFIG_I2C is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI support
|
||||||
|
#
|
||||||
|
# CONFIG_SPI is not set
|
||||||
|
# CONFIG_SPI_MASTER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
|
@ -640,7 +619,6 @@ CONFIG_FB=y
|
||||||
CONFIG_FB_CFB_FILLRECT=y
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
CONFIG_FB_CFB_COPYAREA=y
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
CONFIG_FB_SOFT_CURSOR=y
|
|
||||||
# CONFIG_FB_MACMODES is not set
|
# CONFIG_FB_MACMODES is not set
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
CONFIG_FB_TILEBLITTING=y
|
CONFIG_FB_TILEBLITTING=y
|
||||||
|
@ -655,6 +633,7 @@ CONFIG_DUMMY_CONSOLE=y
|
||||||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
CONFIG_STI_CONSOLE=y
|
CONFIG_STI_CONSOLE=y
|
||||||
CONFIG_FONTS=y
|
CONFIG_FONTS=y
|
||||||
CONFIG_FONT_8x8=y
|
CONFIG_FONT_8x8=y
|
||||||
|
@ -695,6 +674,8 @@ CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
|
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||||
|
CONFIG_SND_SUPPORT_OLD_API=y
|
||||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_SND_DEBUG is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
|
|
||||||
|
@ -723,6 +704,10 @@ CONFIG_SND_HARMONY=y
|
||||||
# CONFIG_USB_ARCH_HAS_HCD is not set
|
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Gadget Support
|
# USB Gadget Support
|
||||||
#
|
#
|
||||||
|
@ -736,10 +721,9 @@ CONFIG_SND_HARMONY=y
|
||||||
#
|
#
|
||||||
# InfiniBand support
|
# InfiniBand support
|
||||||
#
|
#
|
||||||
# CONFIG_INFINIBAND is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# SN Devices
|
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -765,6 +749,7 @@ CONFIG_XFS_EXPORT=y
|
||||||
# CONFIG_XFS_SECURITY is not set
|
# CONFIG_XFS_SECURITY is not set
|
||||||
# CONFIG_XFS_POSIX_ACL is not set
|
# CONFIG_XFS_POSIX_ACL is not set
|
||||||
# CONFIG_XFS_RT is not set
|
# CONFIG_XFS_RT is not set
|
||||||
|
# CONFIG_OCFS2_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
@ -800,10 +785,10 @@ CONFIG_PROC_FS=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
CONFIG_SYSFS=y
|
CONFIG_SYSFS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
# CONFIG_HUGETLBFS is not set
|
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_RAMFS=y
|
CONFIG_RAMFS=y
|
||||||
# CONFIG_RELAYFS_FS is not set
|
# CONFIG_RELAYFS_FS is not set
|
||||||
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Miscellaneous filesystems
|
# Miscellaneous filesystems
|
||||||
|
@ -821,7 +806,6 @@ CONFIG_RAMFS=y
|
||||||
# CONFIG_QNX4FS_FS is not set
|
# CONFIG_QNX4FS_FS is not set
|
||||||
# CONFIG_SYSV_FS is not set
|
# CONFIG_SYSV_FS is not set
|
||||||
CONFIG_UFS_FS=m
|
CONFIG_UFS_FS=m
|
||||||
# CONFIG_UFS_FS_WRITE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network File Systems
|
# Network File Systems
|
||||||
|
@ -917,18 +901,22 @@ CONFIG_OPROFILE=m
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_IOREMAP is not set
|
|
||||||
# CONFIG_DEBUG_FS is not set
|
# CONFIG_DEBUG_FS is not set
|
||||||
|
# CONFIG_DEBUG_VM is not set
|
||||||
|
CONFIG_FORCED_INLINING=y
|
||||||
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
|
CONFIG_DEBUG_RODATA=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
|
|
@ -1031,8 +1031,8 @@ CONFIG_NLS_CODEPAGE_850=m
|
||||||
# CONFIG_NLS_ISO8859_8 is not set
|
# CONFIG_NLS_ISO8859_8 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||||
# CONFIG_NLS_ASCII is not set
|
CONFIG_NLS_ASCII=m
|
||||||
# CONFIG_NLS_ISO8859_1 is not set
|
CONFIG_NLS_ISO8859_1=m
|
||||||
# CONFIG_NLS_ISO8859_2 is not set
|
# CONFIG_NLS_ISO8859_2 is not set
|
||||||
# CONFIG_NLS_ISO8859_3 is not set
|
# CONFIG_NLS_ISO8859_3 is not set
|
||||||
# CONFIG_NLS_ISO8859_4 is not set
|
# CONFIG_NLS_ISO8859_4 is not set
|
||||||
|
|
|
@ -939,10 +939,10 @@ CONFIG_MSDOS_PARTITION=y
|
||||||
#
|
#
|
||||||
CONFIG_NLS=y
|
CONFIG_NLS=y
|
||||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_CODEPAGE_437 is not set
|
CONFIG_NLS_CODEPAGE_437=m
|
||||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
CONFIG_NLS_CODEPAGE_850=m
|
||||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||||
|
@ -962,8 +962,8 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_ISO8859_8 is not set
|
# CONFIG_NLS_ISO8859_8 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||||
# CONFIG_NLS_ASCII is not set
|
CONFIG_NLS_ASCII=m
|
||||||
# CONFIG_NLS_ISO8859_1 is not set
|
CONFIG_NLS_ISO8859_1=m
|
||||||
# CONFIG_NLS_ISO8859_2 is not set
|
# CONFIG_NLS_ISO8859_2 is not set
|
||||||
# CONFIG_NLS_ISO8859_3 is not set
|
# CONFIG_NLS_ISO8859_3 is not set
|
||||||
# CONFIG_NLS_ISO8859_4 is not set
|
# CONFIG_NLS_ISO8859_4 is not set
|
||||||
|
@ -973,10 +973,10 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_ISO8859_9 is not set
|
# CONFIG_NLS_ISO8859_9 is not set
|
||||||
# CONFIG_NLS_ISO8859_13 is not set
|
# CONFIG_NLS_ISO8859_13 is not set
|
||||||
# CONFIG_NLS_ISO8859_14 is not set
|
# CONFIG_NLS_ISO8859_14 is not set
|
||||||
# CONFIG_NLS_ISO8859_15 is not set
|
CONFIG_NLS_ISO8859_15=m
|
||||||
# CONFIG_NLS_KOI8_R is not set
|
# CONFIG_NLS_KOI8_R is not set
|
||||||
# CONFIG_NLS_KOI8_U is not set
|
# CONFIG_NLS_KOI8_U is not set
|
||||||
# CONFIG_NLS_UTF8 is not set
|
CONFIG_NLS_UTF8=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.14-rc5-pa1
|
# Linux kernel version: 2.6.16-pa6
|
||||||
# Fri Oct 21 23:06:31 2005
|
# Sun Mar 26 20:03:29 2006
|
||||||
#
|
#
|
||||||
CONFIG_PARISC=y
|
CONFIG_PARISC=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -10,14 +10,11 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
CONFIG_GENERIC_IRQ_PROBE=y
|
CONFIG_GENERIC_IRQ_PROBE=y
|
||||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
#
|
#
|
||||||
CONFIG_EXPERIMENTAL=y
|
CONFIG_EXPERIMENTAL=y
|
||||||
# CONFIG_CLEAN_COMPILE is not set
|
|
||||||
CONFIG_BROKEN=y
|
|
||||||
CONFIG_BROKEN_ON_SMP=y
|
CONFIG_BROKEN_ON_SMP=y
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
@ -32,28 +29,30 @@ CONFIG_SYSVIPC=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
CONFIG_HOTPLUG=y
|
|
||||||
CONFIG_KOBJECT_UEVENT=y
|
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||||
CONFIG_EMBEDDED=y
|
CONFIG_EMBEDDED=y
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
CONFIG_KALLSYMS_ALL=y
|
CONFIG_KALLSYMS_ALL=y
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
CONFIG_CC_ALIGN_LABELS=0
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
CONFIG_CC_ALIGN_LOOPS=0
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
CONFIG_CC_ALIGN_JUMPS=0
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
CONFIG_SLAB=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
|
# CONFIG_SLOB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Loadable module support
|
# Loadable module support
|
||||||
|
@ -66,6 +65,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
||||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
CONFIG_KMOD=y
|
CONFIG_KMOD=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Block layer
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Processor type and features
|
# Processor type and features
|
||||||
#
|
#
|
||||||
|
@ -78,6 +94,10 @@ CONFIG_PA20=y
|
||||||
CONFIG_PREFETCH=y
|
CONFIG_PREFETCH=y
|
||||||
# CONFIG_64BIT is not set
|
# CONFIG_64BIT is not set
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
|
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||||
|
# CONFIG_PREEMPT_NONE is not set
|
||||||
|
CONFIG_PREEMPT_VOLUNTARY=y
|
||||||
|
# CONFIG_PREEMPT is not set
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
CONFIG_HZ_250=y
|
CONFIG_HZ_250=y
|
||||||
# CONFIG_HZ_1000 is not set
|
# CONFIG_HZ_1000 is not set
|
||||||
|
@ -89,7 +109,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||||
CONFIG_FLATMEM=y
|
CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
# CONFIG_PREEMPT is not set
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
# CONFIG_HPUX is not set
|
# CONFIG_HPUX is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -135,6 +155,7 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
# CONFIG_NETDEBUG is not set
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_MMAP=y
|
CONFIG_PACKET_MMAP=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -175,7 +196,12 @@ CONFIG_INET6_TUNNEL=m
|
||||||
CONFIG_IPV6_TUNNEL=m
|
CONFIG_IPV6_TUNNEL=m
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
CONFIG_NETFILTER_DEBUG=y
|
CONFIG_NETFILTER_DEBUG=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Core Netfilter Configuration
|
||||||
|
#
|
||||||
# CONFIG_NETFILTER_NETLINK is not set
|
# CONFIG_NETFILTER_NETLINK is not set
|
||||||
|
# CONFIG_NETFILTER_XTABLES is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IP: Netfilter Configuration
|
# IP: Netfilter Configuration
|
||||||
|
@ -192,87 +218,11 @@ CONFIG_IP_NF_TFTP=m
|
||||||
CONFIG_IP_NF_AMANDA=m
|
CONFIG_IP_NF_AMANDA=m
|
||||||
# CONFIG_IP_NF_PPTP is not set
|
# CONFIG_IP_NF_PPTP is not set
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
CONFIG_IP_NF_IPTABLES=m
|
|
||||||
CONFIG_IP_NF_MATCH_LIMIT=m
|
|
||||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
|
||||||
CONFIG_IP_NF_MATCH_MAC=m
|
|
||||||
CONFIG_IP_NF_MATCH_PKTTYPE=m
|
|
||||||
CONFIG_IP_NF_MATCH_MARK=m
|
|
||||||
CONFIG_IP_NF_MATCH_MULTIPORT=m
|
|
||||||
CONFIG_IP_NF_MATCH_TOS=m
|
|
||||||
CONFIG_IP_NF_MATCH_RECENT=m
|
|
||||||
CONFIG_IP_NF_MATCH_ECN=m
|
|
||||||
CONFIG_IP_NF_MATCH_DSCP=m
|
|
||||||
CONFIG_IP_NF_MATCH_AH_ESP=m
|
|
||||||
CONFIG_IP_NF_MATCH_LENGTH=m
|
|
||||||
CONFIG_IP_NF_MATCH_TTL=m
|
|
||||||
CONFIG_IP_NF_MATCH_TCPMSS=m
|
|
||||||
CONFIG_IP_NF_MATCH_HELPER=m
|
|
||||||
CONFIG_IP_NF_MATCH_STATE=m
|
|
||||||
CONFIG_IP_NF_MATCH_CONNTRACK=m
|
|
||||||
CONFIG_IP_NF_MATCH_OWNER=m
|
|
||||||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_SCTP is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_COMMENT is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
|
|
||||||
# CONFIG_IP_NF_MATCH_STRING is not set
|
|
||||||
CONFIG_IP_NF_FILTER=m
|
|
||||||
CONFIG_IP_NF_TARGET_REJECT=m
|
|
||||||
CONFIG_IP_NF_TARGET_LOG=m
|
|
||||||
CONFIG_IP_NF_TARGET_ULOG=m
|
|
||||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
|
||||||
# CONFIG_IP_NF_TARGET_NFQUEUE is not set
|
|
||||||
CONFIG_IP_NF_NAT=m
|
|
||||||
CONFIG_IP_NF_NAT_NEEDED=y
|
|
||||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
|
||||||
CONFIG_IP_NF_TARGET_REDIRECT=m
|
|
||||||
CONFIG_IP_NF_TARGET_NETMAP=m
|
|
||||||
CONFIG_IP_NF_TARGET_SAME=m
|
|
||||||
CONFIG_IP_NF_NAT_SNMP_BASIC=m
|
|
||||||
CONFIG_IP_NF_NAT_IRC=m
|
|
||||||
CONFIG_IP_NF_NAT_FTP=m
|
|
||||||
CONFIG_IP_NF_NAT_TFTP=m
|
|
||||||
CONFIG_IP_NF_NAT_AMANDA=m
|
|
||||||
CONFIG_IP_NF_MANGLE=m
|
|
||||||
CONFIG_IP_NF_TARGET_TOS=m
|
|
||||||
CONFIG_IP_NF_TARGET_ECN=m
|
|
||||||
CONFIG_IP_NF_TARGET_DSCP=m
|
|
||||||
CONFIG_IP_NF_TARGET_MARK=m
|
|
||||||
CONFIG_IP_NF_TARGET_CLASSIFY=m
|
|
||||||
# CONFIG_IP_NF_TARGET_TTL is not set
|
|
||||||
# CONFIG_IP_NF_RAW is not set
|
|
||||||
CONFIG_IP_NF_ARPTABLES=m
|
|
||||||
CONFIG_IP_NF_ARPFILTER=m
|
|
||||||
CONFIG_IP_NF_ARP_MANGLE=m
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# IPv6: Netfilter Configuration (EXPERIMENTAL)
|
# IPv6: Netfilter Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
# CONFIG_IP6_NF_QUEUE is not set
|
# CONFIG_IP6_NF_QUEUE is not set
|
||||||
CONFIG_IP6_NF_IPTABLES=m
|
|
||||||
# CONFIG_IP6_NF_MATCH_LIMIT is not set
|
|
||||||
CONFIG_IP6_NF_MATCH_MAC=m
|
|
||||||
CONFIG_IP6_NF_MATCH_RT=m
|
|
||||||
# CONFIG_IP6_NF_MATCH_OPTS is not set
|
|
||||||
# CONFIG_IP6_NF_MATCH_FRAG is not set
|
|
||||||
# CONFIG_IP6_NF_MATCH_HL is not set
|
|
||||||
# CONFIG_IP6_NF_MATCH_MULTIPORT is not set
|
|
||||||
CONFIG_IP6_NF_MATCH_OWNER=m
|
|
||||||
# CONFIG_IP6_NF_MATCH_MARK is not set
|
|
||||||
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
|
|
||||||
# CONFIG_IP6_NF_MATCH_AHESP is not set
|
|
||||||
CONFIG_IP6_NF_MATCH_LENGTH=m
|
|
||||||
# CONFIG_IP6_NF_MATCH_EUI64 is not set
|
|
||||||
CONFIG_IP6_NF_FILTER=m
|
|
||||||
CONFIG_IP6_NF_TARGET_LOG=m
|
|
||||||
CONFIG_IP6_NF_TARGET_REJECT=m
|
|
||||||
# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
|
|
||||||
CONFIG_IP6_NF_MANGLE=m
|
|
||||||
# CONFIG_IP6_NF_TARGET_MARK is not set
|
|
||||||
# CONFIG_IP6_NF_TARGET_HL is not set
|
|
||||||
# CONFIG_IP6_NF_RAW is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# DCCP Configuration (EXPERIMENTAL)
|
# DCCP Configuration (EXPERIMENTAL)
|
||||||
|
@ -283,6 +233,11 @@ CONFIG_IP6_NF_MANGLE=m
|
||||||
# SCTP Configuration (EXPERIMENTAL)
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
# CONFIG_IP_SCTP is not set
|
# CONFIG_IP_SCTP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TIPC Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_TIPC is not set
|
||||||
# CONFIG_ATM is not set
|
# CONFIG_ATM is not set
|
||||||
# CONFIG_BRIDGE is not set
|
# CONFIG_BRIDGE is not set
|
||||||
# CONFIG_VLAN_8021Q is not set
|
# CONFIG_VLAN_8021Q is not set
|
||||||
|
@ -295,8 +250,11 @@ CONFIG_IP6_NF_MANGLE=m
|
||||||
# CONFIG_NET_DIVERT is not set
|
# CONFIG_NET_DIVERT is not set
|
||||||
# CONFIG_ECONET is not set
|
# CONFIG_ECONET is not set
|
||||||
# CONFIG_WAN_ROUTER is not set
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# QoS and/or fair queueing
|
||||||
|
#
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
# CONFIG_NET_CLS_ROUTE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
|
@ -341,7 +299,6 @@ CONFIG_FW_LOADER=y
|
||||||
#
|
#
|
||||||
# Block devices
|
# Block devices
|
||||||
#
|
#
|
||||||
# CONFIG_BLK_DEV_FD is not set
|
|
||||||
# CONFIG_BLK_CPQ_DA is not set
|
# CONFIG_BLK_CPQ_DA is not set
|
||||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||||
# CONFIG_BLK_DEV_DAC960 is not set
|
# CONFIG_BLK_DEV_DAC960 is not set
|
||||||
|
@ -355,14 +312,6 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m
|
||||||
# CONFIG_BLK_DEV_RAM is not set
|
# CONFIG_BLK_DEV_RAM is not set
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
# CONFIG_CDROM_PKTCDVD is not set
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
|
||||||
#
|
|
||||||
# IO Schedulers
|
|
||||||
#
|
|
||||||
CONFIG_IOSCHED_NOOP=y
|
|
||||||
CONFIG_IOSCHED_AS=y
|
|
||||||
CONFIG_IOSCHED_DEADLINE=y
|
|
||||||
CONFIG_IOSCHED_CFQ=y
|
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -458,6 +407,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||||
#
|
#
|
||||||
# SCSI low-level drivers
|
# SCSI low-level drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_ISCSI_TCP is not set
|
||||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||||
# CONFIG_SCSI_3W_9XXX is not set
|
# CONFIG_SCSI_3W_9XXX is not set
|
||||||
# CONFIG_SCSI_ACARD is not set
|
# CONFIG_SCSI_ACARD is not set
|
||||||
|
@ -466,7 +416,6 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||||
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
||||||
# CONFIG_SCSI_AIC79XX is not set
|
# CONFIG_SCSI_AIC79XX is not set
|
||||||
# CONFIG_SCSI_DPT_I2O is not set
|
# CONFIG_SCSI_DPT_I2O is not set
|
||||||
# CONFIG_SCSI_ADVANSYS is not set
|
|
||||||
# CONFIG_MEGARAID_NEWGEN is not set
|
# CONFIG_MEGARAID_NEWGEN is not set
|
||||||
# CONFIG_MEGARAID_LEGACY is not set
|
# CONFIG_MEGARAID_LEGACY is not set
|
||||||
# CONFIG_MEGARAID_SAS is not set
|
# CONFIG_MEGARAID_SAS is not set
|
||||||
|
@ -476,18 +425,18 @@ CONFIG_SCSI_SATA=y
|
||||||
CONFIG_SCSI_ATA_PIIX=m
|
CONFIG_SCSI_ATA_PIIX=m
|
||||||
# CONFIG_SCSI_SATA_MV is not set
|
# CONFIG_SCSI_SATA_MV is not set
|
||||||
# CONFIG_SCSI_SATA_NV is not set
|
# CONFIG_SCSI_SATA_NV is not set
|
||||||
CONFIG_SCSI_SATA_PROMISE=m
|
# CONFIG_SCSI_PDC_ADMA is not set
|
||||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||||
|
CONFIG_SCSI_SATA_PROMISE=m
|
||||||
# CONFIG_SCSI_SATA_SX4 is not set
|
# CONFIG_SCSI_SATA_SX4 is not set
|
||||||
CONFIG_SCSI_SATA_SIL=m
|
CONFIG_SCSI_SATA_SIL=m
|
||||||
|
# CONFIG_SCSI_SATA_SIL24 is not set
|
||||||
# CONFIG_SCSI_SATA_SIS is not set
|
# CONFIG_SCSI_SATA_SIS is not set
|
||||||
# CONFIG_SCSI_SATA_ULI is not set
|
# CONFIG_SCSI_SATA_ULI is not set
|
||||||
CONFIG_SCSI_SATA_VIA=m
|
CONFIG_SCSI_SATA_VIA=m
|
||||||
# CONFIG_SCSI_SATA_VITESSE is not set
|
# CONFIG_SCSI_SATA_VITESSE is not set
|
||||||
CONFIG_SCSI_SATA_INTEL_COMBINED=y
|
CONFIG_SCSI_SATA_INTEL_COMBINED=y
|
||||||
# CONFIG_SCSI_CPQFCTS is not set
|
|
||||||
# CONFIG_SCSI_DMX3191D is not set
|
# CONFIG_SCSI_DMX3191D is not set
|
||||||
# CONFIG_SCSI_EATA_PIO is not set
|
|
||||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||||
# CONFIG_SCSI_IPS is not set
|
# CONFIG_SCSI_IPS is not set
|
||||||
# CONFIG_SCSI_INITIO is not set
|
# CONFIG_SCSI_INITIO is not set
|
||||||
|
@ -496,18 +445,11 @@ CONFIG_SCSI_SYM53C8XX_2=y
|
||||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=0
|
||||||
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
||||||
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
||||||
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
|
CONFIG_SCSI_SYM53C8XX_MMIO=y
|
||||||
# CONFIG_SCSI_IPR is not set
|
# CONFIG_SCSI_IPR is not set
|
||||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
|
||||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
CONFIG_SCSI_QLA2XXX=y
|
# CONFIG_SCSI_QLA_FC is not set
|
||||||
# CONFIG_SCSI_QLA21XX is not set
|
|
||||||
# CONFIG_SCSI_QLA22XX is not set
|
|
||||||
# CONFIG_SCSI_QLA2300 is not set
|
|
||||||
# CONFIG_SCSI_QLA2322 is not set
|
|
||||||
# CONFIG_SCSI_QLA6312 is not set
|
|
||||||
# CONFIG_SCSI_QLA24XX is not set
|
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -633,6 +575,7 @@ CONFIG_E1000=m
|
||||||
# CONFIG_R8169 is not set
|
# CONFIG_R8169 is not set
|
||||||
# CONFIG_SIS190 is not set
|
# CONFIG_SIS190 is not set
|
||||||
# CONFIG_SKGE is not set
|
# CONFIG_SKGE is not set
|
||||||
|
# CONFIG_SKY2 is not set
|
||||||
# CONFIG_SK98LIN is not set
|
# CONFIG_SK98LIN is not set
|
||||||
# CONFIG_VIA_VELOCITY is not set
|
# CONFIG_VIA_VELOCITY is not set
|
||||||
CONFIG_TIGON3=m
|
CONFIG_TIGON3=m
|
||||||
|
@ -668,6 +611,7 @@ CONFIG_PPP_ASYNC=m
|
||||||
CONFIG_PPP_SYNC_TTY=m
|
CONFIG_PPP_SYNC_TTY=m
|
||||||
CONFIG_PPP_DEFLATE=m
|
CONFIG_PPP_DEFLATE=m
|
||||||
CONFIG_PPP_BSDCOMP=m
|
CONFIG_PPP_BSDCOMP=m
|
||||||
|
# CONFIG_PPP_MPPE is not set
|
||||||
CONFIG_PPPOE=m
|
CONFIG_PPPOE=m
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
# CONFIG_NET_FC is not set
|
# CONFIG_NET_FC is not set
|
||||||
|
@ -744,6 +688,7 @@ CONFIG_HW_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||||
|
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
|
@ -753,7 +698,6 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
#
|
#
|
||||||
# Non-8250 serial port support
|
# Non-8250 serial port support
|
||||||
#
|
#
|
||||||
# CONFIG_SERIAL_MUX is not set
|
|
||||||
# CONFIG_PDC_CONSOLE is not set
|
# CONFIG_PDC_CONSOLE is not set
|
||||||
CONFIG_SERIAL_CORE=y
|
CONFIG_SERIAL_CORE=y
|
||||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||||
|
@ -788,12 +732,19 @@ CONFIG_MAX_RAW_DEVS=256
|
||||||
# TPM devices
|
# TPM devices
|
||||||
#
|
#
|
||||||
# CONFIG_TCG_TPM is not set
|
# CONFIG_TCG_TPM is not set
|
||||||
|
# CONFIG_TELCLOCK is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2C support
|
# I2C support
|
||||||
#
|
#
|
||||||
# CONFIG_I2C is not set
|
# CONFIG_I2C is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI support
|
||||||
|
#
|
||||||
|
# CONFIG_SPI is not set
|
||||||
|
# CONFIG_SPI_MASTER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
|
@ -830,7 +781,6 @@ CONFIG_FB=y
|
||||||
CONFIG_FB_CFB_FILLRECT=y
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
CONFIG_FB_CFB_COPYAREA=y
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
CONFIG_FB_SOFT_CURSOR=y
|
|
||||||
# CONFIG_FB_MACMODES is not set
|
# CONFIG_FB_MACMODES is not set
|
||||||
# CONFIG_FB_MODE_HELPERS is not set
|
# CONFIG_FB_MODE_HELPERS is not set
|
||||||
# CONFIG_FB_TILEBLITTING is not set
|
# CONFIG_FB_TILEBLITTING is not set
|
||||||
|
@ -840,6 +790,7 @@ CONFIG_FB_SOFT_CURSOR=y
|
||||||
# CONFIG_FB_ASILIANT is not set
|
# CONFIG_FB_ASILIANT is not set
|
||||||
# CONFIG_FB_IMSTT is not set
|
# CONFIG_FB_IMSTT is not set
|
||||||
CONFIG_FB_STI=y
|
CONFIG_FB_STI=y
|
||||||
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
# CONFIG_FB_NVIDIA is not set
|
# CONFIG_FB_NVIDIA is not set
|
||||||
# CONFIG_FB_RIVA is not set
|
# CONFIG_FB_RIVA is not set
|
||||||
# CONFIG_FB_MATROX is not set
|
# CONFIG_FB_MATROX is not set
|
||||||
|
@ -853,10 +804,7 @@ CONFIG_FB_STI=y
|
||||||
# CONFIG_FB_KYRO is not set
|
# CONFIG_FB_KYRO is not set
|
||||||
# CONFIG_FB_3DFX is not set
|
# CONFIG_FB_3DFX is not set
|
||||||
# CONFIG_FB_VOODOO1 is not set
|
# CONFIG_FB_VOODOO1 is not set
|
||||||
# CONFIG_FB_CYBLA is not set
|
|
||||||
# CONFIG_FB_TRIDENT is not set
|
# CONFIG_FB_TRIDENT is not set
|
||||||
# CONFIG_FB_PM3 is not set
|
|
||||||
# CONFIG_FB_S1D13XXX is not set
|
|
||||||
# CONFIG_FB_VIRTUAL is not set
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -866,6 +814,7 @@ CONFIG_DUMMY_CONSOLE=y
|
||||||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
CONFIG_STI_CONSOLE=y
|
CONFIG_STI_CONSOLE=y
|
||||||
# CONFIG_FONTS is not set
|
# CONFIG_FONTS is not set
|
||||||
CONFIG_FONT_8x8=y
|
CONFIG_FONT_8x8=y
|
||||||
|
@ -898,23 +847,27 @@ CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
|
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||||
|
CONFIG_SND_SUPPORT_OLD_API=y
|
||||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_SND_DEBUG is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generic devices
|
# Generic devices
|
||||||
#
|
#
|
||||||
|
CONFIG_SND_AC97_CODEC=y
|
||||||
|
CONFIG_SND_AC97_BUS=y
|
||||||
# CONFIG_SND_DUMMY is not set
|
# CONFIG_SND_DUMMY is not set
|
||||||
# CONFIG_SND_VIRMIDI is not set
|
# CONFIG_SND_VIRMIDI is not set
|
||||||
# CONFIG_SND_MTPAV is not set
|
# CONFIG_SND_MTPAV is not set
|
||||||
# CONFIG_SND_SERIAL_U16550 is not set
|
# CONFIG_SND_SERIAL_U16550 is not set
|
||||||
# CONFIG_SND_MPU401 is not set
|
# CONFIG_SND_MPU401 is not set
|
||||||
CONFIG_SND_AC97_CODEC=y
|
|
||||||
CONFIG_SND_AC97_BUS=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# PCI devices
|
# PCI devices
|
||||||
#
|
#
|
||||||
|
CONFIG_SND_AD1889=y
|
||||||
|
# CONFIG_SND_AD1889_OPL3 is not set
|
||||||
# CONFIG_SND_ALI5451 is not set
|
# CONFIG_SND_ALI5451 is not set
|
||||||
# CONFIG_SND_ATIIXP is not set
|
# CONFIG_SND_ATIIXP is not set
|
||||||
# CONFIG_SND_ATIIXP_MODEM is not set
|
# CONFIG_SND_ATIIXP_MODEM is not set
|
||||||
|
@ -923,39 +876,38 @@ CONFIG_SND_AC97_BUS=y
|
||||||
# CONFIG_SND_AU8830 is not set
|
# CONFIG_SND_AU8830 is not set
|
||||||
# CONFIG_SND_AZT3328 is not set
|
# CONFIG_SND_AZT3328 is not set
|
||||||
# CONFIG_SND_BT87X is not set
|
# CONFIG_SND_BT87X is not set
|
||||||
# CONFIG_SND_CS46XX is not set
|
# CONFIG_SND_CA0106 is not set
|
||||||
|
# CONFIG_SND_CMIPCI is not set
|
||||||
# CONFIG_SND_CS4281 is not set
|
# CONFIG_SND_CS4281 is not set
|
||||||
|
# CONFIG_SND_CS46XX is not set
|
||||||
# CONFIG_SND_EMU10K1 is not set
|
# CONFIG_SND_EMU10K1 is not set
|
||||||
# CONFIG_SND_EMU10K1X is not set
|
# CONFIG_SND_EMU10K1X is not set
|
||||||
# CONFIG_SND_CA0106 is not set
|
|
||||||
# CONFIG_SND_KORG1212 is not set
|
|
||||||
# CONFIG_SND_MIXART is not set
|
|
||||||
# CONFIG_SND_NM256 is not set
|
|
||||||
# CONFIG_SND_RME32 is not set
|
|
||||||
# CONFIG_SND_RME96 is not set
|
|
||||||
# CONFIG_SND_RME9652 is not set
|
|
||||||
# CONFIG_SND_HDSP is not set
|
|
||||||
# CONFIG_SND_HDSPM is not set
|
|
||||||
# CONFIG_SND_TRIDENT is not set
|
|
||||||
# CONFIG_SND_YMFPCI is not set
|
|
||||||
CONFIG_SND_AD1889=y
|
|
||||||
# CONFIG_SND_AD1889_OPL3 is not set
|
|
||||||
# CONFIG_SND_CMIPCI is not set
|
|
||||||
# CONFIG_SND_ENS1370 is not set
|
# CONFIG_SND_ENS1370 is not set
|
||||||
# CONFIG_SND_ENS1371 is not set
|
# CONFIG_SND_ENS1371 is not set
|
||||||
# CONFIG_SND_ES1938 is not set
|
# CONFIG_SND_ES1938 is not set
|
||||||
# CONFIG_SND_ES1968 is not set
|
# CONFIG_SND_ES1968 is not set
|
||||||
# CONFIG_SND_MAESTRO3 is not set
|
|
||||||
# CONFIG_SND_FM801 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_ICE1712 is not set
|
# CONFIG_SND_ICE1712 is not set
|
||||||
# CONFIG_SND_ICE1724 is not set
|
# CONFIG_SND_ICE1724 is not set
|
||||||
# CONFIG_SND_INTEL8X0 is not set
|
# CONFIG_SND_INTEL8X0 is not set
|
||||||
# CONFIG_SND_INTEL8X0M 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_RME32 is not set
|
||||||
|
# CONFIG_SND_RME96 is not set
|
||||||
|
# CONFIG_SND_RME9652 is not set
|
||||||
# CONFIG_SND_SONICVIBES is not set
|
# CONFIG_SND_SONICVIBES is not set
|
||||||
|
# CONFIG_SND_TRIDENT is not set
|
||||||
# CONFIG_SND_VIA82XX is not set
|
# CONFIG_SND_VIA82XX is not set
|
||||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||||
# CONFIG_SND_VX222 is not set
|
# CONFIG_SND_VX222 is not set
|
||||||
# CONFIG_SND_HDA_INTEL is not set
|
# CONFIG_SND_YMFPCI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB devices
|
# USB devices
|
||||||
|
@ -998,12 +950,15 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||||
# USB Device Class drivers
|
# USB Device Class drivers
|
||||||
#
|
#
|
||||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||||
# CONFIG_USB_BLUETOOTH_TTY is not set
|
|
||||||
# CONFIG_USB_ACM is not set
|
# CONFIG_USB_ACM is not set
|
||||||
CONFIG_USB_PRINTER=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
|
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# may also be needed; see USB_STORAGE Help for more information
|
||||||
#
|
#
|
||||||
CONFIG_USB_STORAGE=m
|
CONFIG_USB_STORAGE=m
|
||||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||||
|
@ -1015,12 +970,15 @@ CONFIG_USB_STORAGE_USBAT=y
|
||||||
CONFIG_USB_STORAGE_SDDR09=y
|
CONFIG_USB_STORAGE_SDDR09=y
|
||||||
CONFIG_USB_STORAGE_SDDR55=y
|
CONFIG_USB_STORAGE_SDDR55=y
|
||||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||||
|
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||||
|
# CONFIG_USB_LIBUSUAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Input Devices
|
# USB Input Devices
|
||||||
#
|
#
|
||||||
CONFIG_USB_HID=y
|
CONFIG_USB_HID=y
|
||||||
CONFIG_USB_HIDINPUT=y
|
CONFIG_USB_HIDINPUT=y
|
||||||
|
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||||
# CONFIG_HID_FF is not set
|
# CONFIG_HID_FF is not set
|
||||||
CONFIG_USB_HIDDEV=y
|
CONFIG_USB_HIDDEV=y
|
||||||
# CONFIG_USB_AIPTEK is not set
|
# CONFIG_USB_AIPTEK is not set
|
||||||
|
@ -1034,6 +992,7 @@ CONFIG_USB_HIDDEV=y
|
||||||
# CONFIG_USB_YEALINK is not set
|
# CONFIG_USB_YEALINK is not set
|
||||||
# CONFIG_USB_XPAD is not set
|
# CONFIG_USB_XPAD is not set
|
||||||
# CONFIG_USB_ATI_REMOTE is not set
|
# CONFIG_USB_ATI_REMOTE is not set
|
||||||
|
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||||
# CONFIG_USB_APPLETOUCH is not set
|
# CONFIG_USB_APPLETOUCH is not set
|
||||||
|
|
||||||
|
@ -1108,7 +1067,7 @@ CONFIG_USB_LEGOTOWER=m
|
||||||
# CONFIG_INFINIBAND is not set
|
# CONFIG_INFINIBAND is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SN Devices
|
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1130,6 +1089,7 @@ CONFIG_XFS_EXPORT=y
|
||||||
# CONFIG_XFS_SECURITY is not set
|
# CONFIG_XFS_SECURITY is not set
|
||||||
# CONFIG_XFS_POSIX_ACL is not set
|
# CONFIG_XFS_POSIX_ACL is not set
|
||||||
# CONFIG_XFS_RT is not set
|
# CONFIG_XFS_RT is not set
|
||||||
|
# CONFIG_OCFS2_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
@ -1164,10 +1124,10 @@ CONFIG_PROC_FS=y
|
||||||
CONFIG_PROC_KCORE=y
|
CONFIG_PROC_KCORE=y
|
||||||
CONFIG_SYSFS=y
|
CONFIG_SYSFS=y
|
||||||
CONFIG_TMPFS=y
|
CONFIG_TMPFS=y
|
||||||
# CONFIG_HUGETLBFS is not set
|
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_RAMFS=y
|
CONFIG_RAMFS=y
|
||||||
# CONFIG_RELAYFS_FS is not set
|
# CONFIG_RELAYFS_FS is not set
|
||||||
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Miscellaneous filesystems
|
# Miscellaneous filesystems
|
||||||
|
@ -1225,10 +1185,10 @@ CONFIG_MSDOS_PARTITION=y
|
||||||
#
|
#
|
||||||
CONFIG_NLS=y
|
CONFIG_NLS=y
|
||||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_CODEPAGE_437 is not set
|
CONFIG_NLS_CODEPAGE_437=m
|
||||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
CONFIG_NLS_CODEPAGE_850=m
|
||||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||||
|
@ -1248,8 +1208,8 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_ISO8859_8 is not set
|
# CONFIG_NLS_ISO8859_8 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||||
# CONFIG_NLS_ASCII is not set
|
CONFIG_NLS_ASCII=m
|
||||||
# CONFIG_NLS_ISO8859_1 is not set
|
CONFIG_NLS_ISO8859_1=m
|
||||||
# CONFIG_NLS_ISO8859_2 is not set
|
# CONFIG_NLS_ISO8859_2 is not set
|
||||||
# CONFIG_NLS_ISO8859_3 is not set
|
# CONFIG_NLS_ISO8859_3 is not set
|
||||||
# CONFIG_NLS_ISO8859_4 is not set
|
# CONFIG_NLS_ISO8859_4 is not set
|
||||||
|
@ -1259,10 +1219,10 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
||||||
# CONFIG_NLS_ISO8859_9 is not set
|
# CONFIG_NLS_ISO8859_9 is not set
|
||||||
# CONFIG_NLS_ISO8859_13 is not set
|
# CONFIG_NLS_ISO8859_13 is not set
|
||||||
# CONFIG_NLS_ISO8859_14 is not set
|
# CONFIG_NLS_ISO8859_14 is not set
|
||||||
# CONFIG_NLS_ISO8859_15 is not set
|
CONFIG_NLS_ISO8859_15=m
|
||||||
# CONFIG_NLS_KOI8_R is not set
|
# CONFIG_NLS_KOI8_R is not set
|
||||||
# CONFIG_NLS_KOI8_U is not set
|
# CONFIG_NLS_KOI8_U is not set
|
||||||
# CONFIG_NLS_UTF8 is not set
|
CONFIG_NLS_UTF8=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# Profiling support
|
# Profiling support
|
||||||
|
@ -1274,18 +1234,22 @@ CONFIG_OPROFILE=m
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=16
|
CONFIG_LOG_BUF_SHIFT=16
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_IOREMAP is not set
|
|
||||||
# CONFIG_DEBUG_FS is not set
|
# CONFIG_DEBUG_FS is not set
|
||||||
|
# CONFIG_DEBUG_VM is not set
|
||||||
|
CONFIG_FORCED_INLINING=y
|
||||||
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
|
CONFIG_DEBUG_RODATA=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.14-rc5-pa1
|
# Linux kernel version: 2.6.16-pa6
|
||||||
# Fri Oct 21 23:01:33 2005
|
# Sun Mar 26 19:50:07 2006
|
||||||
#
|
#
|
||||||
CONFIG_PARISC=y
|
CONFIG_PARISC=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
|
@ -15,7 +15,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
#
|
#
|
||||||
CONFIG_EXPERIMENTAL=y
|
CONFIG_EXPERIMENTAL=y
|
||||||
CONFIG_CLEAN_COMPILE=y
|
|
||||||
CONFIG_BROKEN_ON_SMP=y
|
CONFIG_BROKEN_ON_SMP=y
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
|
||||||
|
@ -30,17 +29,18 @@ CONFIG_SYSVIPC=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
# CONFIG_HOTPLUG is not set
|
|
||||||
CONFIG_KOBJECT_UEVENT=y
|
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
CONFIG_IKCONFIG_PROC=y
|
CONFIG_IKCONFIG_PROC=y
|
||||||
CONFIG_INITRAMFS_SOURCE=""
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
# CONFIG_EMBEDDED is not set
|
# CONFIG_EMBEDDED is not set
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
# CONFIG_KALLSYMS_ALL is not set
|
# CONFIG_KALLSYMS_ALL is not set
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
CONFIG_PRINTK=y
|
CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
|
@ -49,14 +49,33 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||||
CONFIG_CC_ALIGN_LABELS=0
|
CONFIG_CC_ALIGN_LABELS=0
|
||||||
CONFIG_CC_ALIGN_LOOPS=0
|
CONFIG_CC_ALIGN_LOOPS=0
|
||||||
CONFIG_CC_ALIGN_JUMPS=0
|
CONFIG_CC_ALIGN_JUMPS=0
|
||||||
|
CONFIG_SLAB=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
|
# CONFIG_SLOB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Loadable module support
|
# Loadable module support
|
||||||
#
|
#
|
||||||
# CONFIG_MODULES is not set
|
# CONFIG_MODULES is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Block layer
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Processor type and features
|
# Processor type and features
|
||||||
#
|
#
|
||||||
|
@ -67,6 +86,10 @@ CONFIG_PA7000=y
|
||||||
# CONFIG_PA8X00 is not set
|
# CONFIG_PA8X00 is not set
|
||||||
CONFIG_PA11=y
|
CONFIG_PA11=y
|
||||||
# CONFIG_SMP is not set
|
# CONFIG_SMP is not set
|
||||||
|
CONFIG_ARCH_FLATMEM_ENABLE=y
|
||||||
|
CONFIG_PREEMPT_NONE=y
|
||||||
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||||
|
# CONFIG_PREEMPT is not set
|
||||||
# CONFIG_HZ_100 is not set
|
# CONFIG_HZ_100 is not set
|
||||||
CONFIG_HZ_250=y
|
CONFIG_HZ_250=y
|
||||||
# CONFIG_HZ_1000 is not set
|
# CONFIG_HZ_1000 is not set
|
||||||
|
@ -78,7 +101,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||||
CONFIG_FLATMEM=y
|
CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
# CONFIG_PREEMPT is not set
|
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||||
# CONFIG_HPUX is not set
|
# CONFIG_HPUX is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -132,6 +155,7 @@ CONFIG_NET=y
|
||||||
#
|
#
|
||||||
# Networking options
|
# Networking options
|
||||||
#
|
#
|
||||||
|
# CONFIG_NETDEBUG is not set
|
||||||
CONFIG_PACKET=y
|
CONFIG_PACKET=y
|
||||||
CONFIG_PACKET_MMAP=y
|
CONFIG_PACKET_MMAP=y
|
||||||
CONFIG_UNIX=y
|
CONFIG_UNIX=y
|
||||||
|
@ -174,6 +198,11 @@ CONFIG_IPV6=y
|
||||||
# SCTP Configuration (EXPERIMENTAL)
|
# SCTP Configuration (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
# CONFIG_IP_SCTP is not set
|
# CONFIG_IP_SCTP is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# TIPC Configuration (EXPERIMENTAL)
|
||||||
|
#
|
||||||
|
# CONFIG_TIPC is not set
|
||||||
# CONFIG_ATM is not set
|
# CONFIG_ATM is not set
|
||||||
# CONFIG_BRIDGE is not set
|
# CONFIG_BRIDGE is not set
|
||||||
# CONFIG_VLAN_8021Q is not set
|
# CONFIG_VLAN_8021Q is not set
|
||||||
|
@ -186,8 +215,11 @@ CONFIG_IPV6=y
|
||||||
# CONFIG_NET_DIVERT is not set
|
# CONFIG_NET_DIVERT is not set
|
||||||
# CONFIG_ECONET is not set
|
# CONFIG_ECONET is not set
|
||||||
# CONFIG_WAN_ROUTER is not set
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# QoS and/or fair queueing
|
||||||
|
#
|
||||||
# CONFIG_NET_SCHED is not set
|
# CONFIG_NET_SCHED is not set
|
||||||
# CONFIG_NET_CLS_ROUTE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Network testing
|
# Network testing
|
||||||
|
@ -228,6 +260,7 @@ CONFIG_PARPORT_PC=y
|
||||||
# CONFIG_PARPORT_SERIAL is not set
|
# CONFIG_PARPORT_SERIAL is not set
|
||||||
# CONFIG_PARPORT_PC_FIFO is not set
|
# CONFIG_PARPORT_PC_FIFO is not set
|
||||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||||
|
CONFIG_PARPORT_NOT_PC=y
|
||||||
CONFIG_PARPORT_GSC=y
|
CONFIG_PARPORT_GSC=y
|
||||||
# CONFIG_PARPORT_1284 is not set
|
# CONFIG_PARPORT_1284 is not set
|
||||||
|
|
||||||
|
@ -254,14 +287,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
# CONFIG_CDROM_PKTCDVD is not set
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
|
||||||
#
|
|
||||||
# IO Schedulers
|
|
||||||
#
|
|
||||||
CONFIG_IOSCHED_NOOP=y
|
|
||||||
CONFIG_IOSCHED_AS=y
|
|
||||||
CONFIG_IOSCHED_DEADLINE=y
|
|
||||||
CONFIG_IOSCHED_CFQ=y
|
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -305,6 +330,7 @@ CONFIG_SCSI_SPI_ATTRS=y
|
||||||
#
|
#
|
||||||
# SCSI low-level drivers
|
# SCSI low-level drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_ISCSI_TCP is not set
|
||||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||||
# CONFIG_SCSI_3W_9XXX is not set
|
# CONFIG_SCSI_3W_9XXX is not set
|
||||||
# CONFIG_SCSI_ACARD is not set
|
# CONFIG_SCSI_ACARD is not set
|
||||||
|
@ -331,7 +357,7 @@ CONFIG_SCSI_SYM53C8XX_2=y
|
||||||
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
|
CONFIG_SCSI_SYM53C8XX_DMA_ADDRESSING_MODE=1
|
||||||
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
CONFIG_SCSI_SYM53C8XX_DEFAULT_TAGS=16
|
||||||
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
CONFIG_SCSI_SYM53C8XX_MAX_TAGS=64
|
||||||
# CONFIG_SCSI_SYM53C8XX_IOMAPPED is not set
|
CONFIG_SCSI_SYM53C8XX_MMIO=y
|
||||||
# CONFIG_SCSI_IPR is not set
|
# CONFIG_SCSI_IPR is not set
|
||||||
CONFIG_SCSI_ZALON=y
|
CONFIG_SCSI_ZALON=y
|
||||||
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
|
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
|
||||||
|
@ -340,13 +366,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
|
||||||
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
|
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
|
||||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
CONFIG_SCSI_QLA2XXX=y
|
# CONFIG_SCSI_QLA_FC is not set
|
||||||
# CONFIG_SCSI_QLA21XX is not set
|
|
||||||
# CONFIG_SCSI_QLA22XX is not set
|
|
||||||
# CONFIG_SCSI_QLA2300 is not set
|
|
||||||
# CONFIG_SCSI_QLA2322 is not set
|
|
||||||
# CONFIG_SCSI_QLA6312 is not set
|
|
||||||
# CONFIG_SCSI_QLA24XX is not set
|
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
# CONFIG_SCSI_SIM710 is not set
|
# CONFIG_SCSI_SIM710 is not set
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
|
@ -471,6 +491,7 @@ CONFIG_ACENIC=y
|
||||||
# CONFIG_R8169 is not set
|
# CONFIG_R8169 is not set
|
||||||
# CONFIG_SIS190 is not set
|
# CONFIG_SIS190 is not set
|
||||||
# CONFIG_SKGE is not set
|
# CONFIG_SKGE is not set
|
||||||
|
# CONFIG_SKY2 is not set
|
||||||
# CONFIG_SK98LIN is not set
|
# CONFIG_SK98LIN is not set
|
||||||
# CONFIG_VIA_VELOCITY is not set
|
# CONFIG_VIA_VELOCITY is not set
|
||||||
CONFIG_TIGON3=y
|
CONFIG_TIGON3=y
|
||||||
|
@ -562,13 +583,13 @@ CONFIG_INPUT_KEYBOARD=y
|
||||||
# CONFIG_KEYBOARD_LKKBD is not set
|
# CONFIG_KEYBOARD_LKKBD is not set
|
||||||
# CONFIG_KEYBOARD_XTKBD is not set
|
# CONFIG_KEYBOARD_XTKBD is not set
|
||||||
# CONFIG_KEYBOARD_NEWTON is not set
|
# CONFIG_KEYBOARD_NEWTON is not set
|
||||||
CONFIG_KEYBOARD_HIL_OLD=y
|
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||||
CONFIG_KEYBOARD_HIL=y
|
CONFIG_KEYBOARD_HIL=y
|
||||||
CONFIG_INPUT_MOUSE=y
|
CONFIG_INPUT_MOUSE=y
|
||||||
# CONFIG_MOUSE_PS2 is not set
|
# CONFIG_MOUSE_PS2 is not set
|
||||||
# CONFIG_MOUSE_SERIAL is not set
|
# CONFIG_MOUSE_SERIAL is not set
|
||||||
# CONFIG_MOUSE_VSXXXAA is not set
|
# CONFIG_MOUSE_VSXXXAA is not set
|
||||||
# CONFIG_MOUSE_HIL is not set
|
CONFIG_MOUSE_HIL=y
|
||||||
CONFIG_INPUT_JOYSTICK=y
|
CONFIG_INPUT_JOYSTICK=y
|
||||||
# CONFIG_JOYSTICK_ANALOG is not set
|
# CONFIG_JOYSTICK_ANALOG is not set
|
||||||
# CONFIG_JOYSTICK_A3D is not set
|
# CONFIG_JOYSTICK_A3D is not set
|
||||||
|
@ -628,6 +649,7 @@ CONFIG_HW_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250=y
|
CONFIG_SERIAL_8250=y
|
||||||
CONFIG_SERIAL_8250_CONSOLE=y
|
CONFIG_SERIAL_8250_CONSOLE=y
|
||||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||||
|
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||||
CONFIG_SERIAL_8250_EXTENDED=y
|
CONFIG_SERIAL_8250_EXTENDED=y
|
||||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||||
|
@ -675,12 +697,19 @@ CONFIG_GEN_RTC=y
|
||||||
# TPM devices
|
# TPM devices
|
||||||
#
|
#
|
||||||
# CONFIG_TCG_TPM is not set
|
# CONFIG_TCG_TPM is not set
|
||||||
|
# CONFIG_TELCLOCK is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2C support
|
# I2C support
|
||||||
#
|
#
|
||||||
# CONFIG_I2C is not set
|
# CONFIG_I2C is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI support
|
||||||
|
#
|
||||||
|
# CONFIG_SPI is not set
|
||||||
|
# CONFIG_SPI_MASTER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
|
@ -691,6 +720,7 @@ CONFIG_GEN_RTC=y
|
||||||
#
|
#
|
||||||
CONFIG_HWMON=y
|
CONFIG_HWMON=y
|
||||||
# CONFIG_HWMON_VID is not set
|
# CONFIG_HWMON_VID is not set
|
||||||
|
# CONFIG_SENSORS_F71805F is not set
|
||||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -718,7 +748,6 @@ CONFIG_FB=y
|
||||||
CONFIG_FB_CFB_FILLRECT=y
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
CONFIG_FB_CFB_COPYAREA=y
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
CONFIG_FB_SOFT_CURSOR=y
|
|
||||||
# CONFIG_FB_MACMODES is not set
|
# CONFIG_FB_MACMODES is not set
|
||||||
# CONFIG_FB_MODE_HELPERS is not set
|
# CONFIG_FB_MODE_HELPERS is not set
|
||||||
# CONFIG_FB_TILEBLITTING is not set
|
# CONFIG_FB_TILEBLITTING is not set
|
||||||
|
@ -728,6 +757,7 @@ CONFIG_FB_SOFT_CURSOR=y
|
||||||
# CONFIG_FB_ASILIANT is not set
|
# CONFIG_FB_ASILIANT is not set
|
||||||
# CONFIG_FB_IMSTT is not set
|
# CONFIG_FB_IMSTT is not set
|
||||||
CONFIG_FB_STI=y
|
CONFIG_FB_STI=y
|
||||||
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
# CONFIG_FB_NVIDIA is not set
|
# CONFIG_FB_NVIDIA is not set
|
||||||
# CONFIG_FB_RIVA is not set
|
# CONFIG_FB_RIVA is not set
|
||||||
# CONFIG_FB_MATROX is not set
|
# CONFIG_FB_MATROX is not set
|
||||||
|
@ -741,9 +771,7 @@ CONFIG_FB_STI=y
|
||||||
# CONFIG_FB_KYRO is not set
|
# CONFIG_FB_KYRO is not set
|
||||||
# CONFIG_FB_3DFX is not set
|
# CONFIG_FB_3DFX is not set
|
||||||
# CONFIG_FB_VOODOO1 is not set
|
# CONFIG_FB_VOODOO1 is not set
|
||||||
# CONFIG_FB_CYBLA is not set
|
|
||||||
# CONFIG_FB_TRIDENT is not set
|
# CONFIG_FB_TRIDENT is not set
|
||||||
# CONFIG_FB_S1D13XXX is not set
|
|
||||||
# CONFIG_FB_VIRTUAL is not set
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -753,15 +781,28 @@ CONFIG_DUMMY_CONSOLE=y
|
||||||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
CONFIG_STI_CONSOLE=y
|
CONFIG_STI_CONSOLE=y
|
||||||
# CONFIG_FONTS is not set
|
CONFIG_FONTS=y
|
||||||
CONFIG_FONT_8x8=y
|
# CONFIG_FONT_8x8 is not set
|
||||||
CONFIG_FONT_8x16=y
|
CONFIG_FONT_8x16=y
|
||||||
|
# CONFIG_FONT_6x11 is not set
|
||||||
|
# CONFIG_FONT_7x14 is not set
|
||||||
|
# CONFIG_FONT_PEARL_8x8 is not set
|
||||||
|
# CONFIG_FONT_ACORN_8x8 is not set
|
||||||
|
# CONFIG_FONT_MINI_4x6 is not set
|
||||||
|
# CONFIG_FONT_SUN8x16 is not set
|
||||||
|
# CONFIG_FONT_SUN12x22 is not set
|
||||||
|
# CONFIG_FONT_10x18 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Logo configuration
|
# Logo configuration
|
||||||
#
|
#
|
||||||
# CONFIG_LOGO is not set
|
CONFIG_LOGO=y
|
||||||
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
|
# CONFIG_LOGO_LINUX_CLUT224 is not set
|
||||||
|
CONFIG_LOGO_PARISC_CLUT224=y
|
||||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -781,23 +822,27 @@ CONFIG_SND_OSSEMUL=y
|
||||||
CONFIG_SND_MIXER_OSS=y
|
CONFIG_SND_MIXER_OSS=y
|
||||||
CONFIG_SND_PCM_OSS=y
|
CONFIG_SND_PCM_OSS=y
|
||||||
CONFIG_SND_SEQUENCER_OSS=y
|
CONFIG_SND_SEQUENCER_OSS=y
|
||||||
|
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||||
|
CONFIG_SND_SUPPORT_OLD_API=y
|
||||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_SND_DEBUG is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Generic devices
|
# Generic devices
|
||||||
#
|
#
|
||||||
|
CONFIG_SND_AC97_CODEC=y
|
||||||
|
CONFIG_SND_AC97_BUS=y
|
||||||
# CONFIG_SND_DUMMY is not set
|
# CONFIG_SND_DUMMY is not set
|
||||||
# CONFIG_SND_VIRMIDI is not set
|
# CONFIG_SND_VIRMIDI is not set
|
||||||
# CONFIG_SND_MTPAV is not set
|
# CONFIG_SND_MTPAV is not set
|
||||||
# CONFIG_SND_SERIAL_U16550 is not set
|
# CONFIG_SND_SERIAL_U16550 is not set
|
||||||
# CONFIG_SND_MPU401 is not set
|
# CONFIG_SND_MPU401 is not set
|
||||||
CONFIG_SND_AC97_CODEC=y
|
|
||||||
CONFIG_SND_AC97_BUS=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# PCI devices
|
# PCI devices
|
||||||
#
|
#
|
||||||
|
CONFIG_SND_AD1889=y
|
||||||
|
# CONFIG_SND_AD1889_OPL3 is not set
|
||||||
# CONFIG_SND_ALI5451 is not set
|
# CONFIG_SND_ALI5451 is not set
|
||||||
# CONFIG_SND_ATIIXP is not set
|
# CONFIG_SND_ATIIXP is not set
|
||||||
# CONFIG_SND_ATIIXP_MODEM is not set
|
# CONFIG_SND_ATIIXP_MODEM is not set
|
||||||
|
@ -806,39 +851,38 @@ CONFIG_SND_AC97_BUS=y
|
||||||
# CONFIG_SND_AU8830 is not set
|
# CONFIG_SND_AU8830 is not set
|
||||||
# CONFIG_SND_AZT3328 is not set
|
# CONFIG_SND_AZT3328 is not set
|
||||||
# CONFIG_SND_BT87X is not set
|
# CONFIG_SND_BT87X is not set
|
||||||
# CONFIG_SND_CS46XX is not set
|
# CONFIG_SND_CA0106 is not set
|
||||||
|
# CONFIG_SND_CMIPCI is not set
|
||||||
# CONFIG_SND_CS4281 is not set
|
# CONFIG_SND_CS4281 is not set
|
||||||
|
# CONFIG_SND_CS46XX is not set
|
||||||
# CONFIG_SND_EMU10K1 is not set
|
# CONFIG_SND_EMU10K1 is not set
|
||||||
# CONFIG_SND_EMU10K1X is not set
|
# CONFIG_SND_EMU10K1X is not set
|
||||||
# CONFIG_SND_CA0106 is not set
|
|
||||||
# CONFIG_SND_KORG1212 is not set
|
|
||||||
# CONFIG_SND_MIXART is not set
|
|
||||||
# CONFIG_SND_NM256 is not set
|
|
||||||
# CONFIG_SND_RME32 is not set
|
|
||||||
# CONFIG_SND_RME96 is not set
|
|
||||||
# CONFIG_SND_RME9652 is not set
|
|
||||||
# CONFIG_SND_HDSP is not set
|
|
||||||
# CONFIG_SND_HDSPM is not set
|
|
||||||
# CONFIG_SND_TRIDENT is not set
|
|
||||||
# CONFIG_SND_YMFPCI is not set
|
|
||||||
CONFIG_SND_AD1889=y
|
|
||||||
# CONFIG_SND_AD1889_OPL3 is not set
|
|
||||||
# CONFIG_SND_CMIPCI is not set
|
|
||||||
# CONFIG_SND_ENS1370 is not set
|
# CONFIG_SND_ENS1370 is not set
|
||||||
# CONFIG_SND_ENS1371 is not set
|
# CONFIG_SND_ENS1371 is not set
|
||||||
# CONFIG_SND_ES1938 is not set
|
# CONFIG_SND_ES1938 is not set
|
||||||
# CONFIG_SND_ES1968 is not set
|
# CONFIG_SND_ES1968 is not set
|
||||||
# CONFIG_SND_MAESTRO3 is not set
|
|
||||||
# CONFIG_SND_FM801 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_ICE1712 is not set
|
# CONFIG_SND_ICE1712 is not set
|
||||||
# CONFIG_SND_ICE1724 is not set
|
# CONFIG_SND_ICE1724 is not set
|
||||||
# CONFIG_SND_INTEL8X0 is not set
|
# CONFIG_SND_INTEL8X0 is not set
|
||||||
# CONFIG_SND_INTEL8X0M 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_RME32 is not set
|
||||||
|
# CONFIG_SND_RME96 is not set
|
||||||
|
# CONFIG_SND_RME9652 is not set
|
||||||
# CONFIG_SND_SONICVIBES is not set
|
# CONFIG_SND_SONICVIBES is not set
|
||||||
|
# CONFIG_SND_TRIDENT is not set
|
||||||
# CONFIG_SND_VIA82XX is not set
|
# CONFIG_SND_VIA82XX is not set
|
||||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||||
# CONFIG_SND_VX222 is not set
|
# CONFIG_SND_VX222 is not set
|
||||||
# CONFIG_SND_HDA_INTEL is not set
|
# CONFIG_SND_YMFPCI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB devices
|
# USB devices
|
||||||
|
@ -888,14 +932,18 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||||
# USB Device Class drivers
|
# USB Device Class drivers
|
||||||
#
|
#
|
||||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||||
# CONFIG_USB_BLUETOOTH_TTY is not set
|
|
||||||
# CONFIG_USB_ACM is not set
|
# CONFIG_USB_ACM is not set
|
||||||
# CONFIG_USB_PRINTER is not set
|
# CONFIG_USB_PRINTER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# may also be needed; see USB_STORAGE Help for more information
|
||||||
#
|
#
|
||||||
# CONFIG_USB_STORAGE is not set
|
# CONFIG_USB_STORAGE is not set
|
||||||
|
# CONFIG_USB_LIBUSUAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Input Devices
|
# USB Input Devices
|
||||||
|
@ -918,6 +966,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||||
# CONFIG_USB_YEALINK is not set
|
# CONFIG_USB_YEALINK is not set
|
||||||
# CONFIG_USB_XPAD is not set
|
# CONFIG_USB_XPAD is not set
|
||||||
# CONFIG_USB_ATI_REMOTE is not set
|
# CONFIG_USB_ATI_REMOTE is not set
|
||||||
|
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||||
# CONFIG_USB_APPLETOUCH is not set
|
# CONFIG_USB_APPLETOUCH is not set
|
||||||
|
|
||||||
|
@ -994,7 +1043,7 @@ CONFIG_USB_MON=y
|
||||||
# CONFIG_INFINIBAND is not set
|
# CONFIG_INFINIBAND is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SN Devices
|
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1011,6 +1060,7 @@ CONFIG_JBD=y
|
||||||
# CONFIG_JFS_FS is not set
|
# CONFIG_JFS_FS is not set
|
||||||
# CONFIG_FS_POSIX_ACL is not set
|
# CONFIG_FS_POSIX_ACL is not set
|
||||||
# CONFIG_XFS_FS is not set
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_OCFS2_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
@ -1045,6 +1095,7 @@ CONFIG_TMPFS=y
|
||||||
# CONFIG_HUGETLB_PAGE is not set
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
CONFIG_RAMFS=y
|
CONFIG_RAMFS=y
|
||||||
# CONFIG_RELAYFS_FS is not set
|
# CONFIG_RELAYFS_FS is not set
|
||||||
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Miscellaneous filesystems
|
# Miscellaneous filesystems
|
||||||
|
@ -1151,18 +1202,22 @@ CONFIG_OPROFILE=y
|
||||||
# Kernel hacking
|
# Kernel hacking
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=15
|
CONFIG_LOG_BUF_SHIFT=15
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_IOREMAP is not set
|
|
||||||
# CONFIG_DEBUG_FS is not set
|
# CONFIG_DEBUG_FS is not set
|
||||||
|
# CONFIG_DEBUG_VM is not set
|
||||||
|
CONFIG_FORCED_INLINING=y
|
||||||
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
|
CONFIG_DEBUG_RODATA=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
|
|
@ -89,7 +89,7 @@ update_mmu_cache(struct vm_area_struct *vma, unsigned long address, pte_t pte)
|
||||||
if (pfn_valid(page_to_pfn(page)) && page_mapping(page) &&
|
if (pfn_valid(page_to_pfn(page)) && page_mapping(page) &&
|
||||||
test_bit(PG_dcache_dirty, &page->flags)) {
|
test_bit(PG_dcache_dirty, &page->flags)) {
|
||||||
|
|
||||||
flush_kernel_dcache_page(page_address(page));
|
flush_kernel_dcache_page(page);
|
||||||
clear_bit(PG_dcache_dirty, &page->flags);
|
clear_bit(PG_dcache_dirty, &page->flags);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ void flush_dcache_page(struct page *page)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
flush_kernel_dcache_page(page_address(page));
|
flush_kernel_dcache_page(page);
|
||||||
|
|
||||||
if (!mapping)
|
if (!mapping)
|
||||||
return;
|
return;
|
||||||
|
@ -317,7 +317,7 @@ EXPORT_SYMBOL(flush_dcache_page);
|
||||||
|
|
||||||
/* Defined in arch/parisc/kernel/pacache.S */
|
/* Defined in arch/parisc/kernel/pacache.S */
|
||||||
EXPORT_SYMBOL(flush_kernel_dcache_range_asm);
|
EXPORT_SYMBOL(flush_kernel_dcache_range_asm);
|
||||||
EXPORT_SYMBOL(flush_kernel_dcache_page);
|
EXPORT_SYMBOL(flush_kernel_dcache_page_asm);
|
||||||
EXPORT_SYMBOL(flush_data_cache_local);
|
EXPORT_SYMBOL(flush_data_cache_local);
|
||||||
EXPORT_SYMBOL(flush_kernel_icache_range_asm);
|
EXPORT_SYMBOL(flush_kernel_icache_range_asm);
|
||||||
|
|
||||||
|
|
|
@ -563,10 +563,10 @@
|
||||||
extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0
|
extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0
|
||||||
depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */
|
depd %r0,11,2,\prot /* If Gateway, Set PL2 to 0 */
|
||||||
|
|
||||||
/* Get rid of prot bits and convert to page addr for iitlbt */
|
/* Get rid of prot bits and convert to page addr for iitlbt and idtlbt */
|
||||||
|
|
||||||
depd %r0,63,PAGE_SHIFT,\pte
|
depd %r0,63,PAGE_SHIFT,\pte
|
||||||
extrd,u \pte,56,32,\pte
|
extrd,s \pte,(63-PAGE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/* Identical macro to make_insert_tlb above, except it
|
/* Identical macro to make_insert_tlb above, except it
|
||||||
|
@ -584,7 +584,7 @@
|
||||||
|
|
||||||
/* Get rid of prot bits and convert to page addr for iitlba */
|
/* Get rid of prot bits and convert to page addr for iitlba */
|
||||||
|
|
||||||
depi 0,31,12,\pte
|
depi 0,31,PAGE_SHIFT,\pte
|
||||||
extru \pte,24,25,\pte
|
extru \pte,24,25,\pte
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
@ -1014,14 +1014,21 @@ intr_restore:
|
||||||
nop
|
nop
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
#ifndef CONFIG_PREEMPT
|
||||||
|
# define intr_do_preempt intr_restore
|
||||||
|
#endif /* !CONFIG_PREEMPT */
|
||||||
|
|
||||||
.import schedule,code
|
.import schedule,code
|
||||||
intr_do_resched:
|
intr_do_resched:
|
||||||
/* Only do reschedule if we are returning to user space */
|
/* Only call schedule on return to userspace. If we're returning
|
||||||
|
* to kernel space, we may schedule if CONFIG_PREEMPT, otherwise
|
||||||
|
* we jump back to intr_restore.
|
||||||
|
*/
|
||||||
LDREG PT_IASQ0(%r16), %r20
|
LDREG PT_IASQ0(%r16), %r20
|
||||||
CMPIB= 0,%r20,intr_restore /* backward */
|
CMPIB= 0, %r20, intr_do_preempt
|
||||||
nop
|
nop
|
||||||
LDREG PT_IASQ1(%r16), %r20
|
LDREG PT_IASQ1(%r16), %r20
|
||||||
CMPIB= 0,%r20,intr_restore /* backward */
|
CMPIB= 0, %r20, intr_do_preempt
|
||||||
nop
|
nop
|
||||||
|
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
|
@ -1037,6 +1044,32 @@ intr_do_resched:
|
||||||
#endif
|
#endif
|
||||||
ldo R%intr_check_sig(%r2), %r2
|
ldo R%intr_check_sig(%r2), %r2
|
||||||
|
|
||||||
|
/* preempt the current task on returning to kernel
|
||||||
|
* mode from an interrupt, iff need_resched is set,
|
||||||
|
* and preempt_count is 0. otherwise, we continue on
|
||||||
|
* our merry way back to the current running task.
|
||||||
|
*/
|
||||||
|
#ifdef CONFIG_PREEMPT
|
||||||
|
.import preempt_schedule_irq,code
|
||||||
|
intr_do_preempt:
|
||||||
|
rsm PSW_SM_I, %r0 /* disable interrupts */
|
||||||
|
|
||||||
|
/* current_thread_info()->preempt_count */
|
||||||
|
mfctl %cr30, %r1
|
||||||
|
LDREG TI_PRE_COUNT(%r1), %r19
|
||||||
|
CMPIB<> 0, %r19, intr_restore /* if preempt_count > 0 */
|
||||||
|
nop /* prev insn branched backwards */
|
||||||
|
|
||||||
|
/* check if we interrupted a critical path */
|
||||||
|
LDREG PT_PSW(%r16), %r20
|
||||||
|
bb,<,n %r20, 31 - PSW_SM_I, intr_restore
|
||||||
|
nop
|
||||||
|
|
||||||
|
BL preempt_schedule_irq, %r2
|
||||||
|
nop
|
||||||
|
|
||||||
|
b intr_restore /* ssm PSW_SM_I done by intr_restore */
|
||||||
|
#endif /* CONFIG_PREEMPT */
|
||||||
|
|
||||||
.import do_signal,code
|
.import do_signal,code
|
||||||
intr_do_signal:
|
intr_do_signal:
|
||||||
|
|
|
@ -621,9 +621,9 @@ __clear_user_page_asm:
|
||||||
|
|
||||||
.procend
|
.procend
|
||||||
|
|
||||||
.export flush_kernel_dcache_page
|
.export flush_kernel_dcache_page_asm
|
||||||
|
|
||||||
flush_kernel_dcache_page:
|
flush_kernel_dcache_page_asm:
|
||||||
.proc
|
.proc
|
||||||
.callinfo NO_CALLS
|
.callinfo NO_CALLS
|
||||||
.entry
|
.entry
|
||||||
|
|
|
@ -30,22 +30,7 @@
|
||||||
#include <linux/syscalls.h>
|
#include <linux/syscalls.h>
|
||||||
|
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
EXPORT_SYMBOL(memchr);
|
|
||||||
EXPORT_SYMBOL(memcmp);
|
|
||||||
EXPORT_SYMBOL(memmove);
|
|
||||||
EXPORT_SYMBOL(memscan);
|
|
||||||
EXPORT_SYMBOL(memset);
|
EXPORT_SYMBOL(memset);
|
||||||
EXPORT_SYMBOL(strcat);
|
|
||||||
EXPORT_SYMBOL(strchr);
|
|
||||||
EXPORT_SYMBOL(strcmp);
|
|
||||||
EXPORT_SYMBOL(strcpy);
|
|
||||||
EXPORT_SYMBOL(strlen);
|
|
||||||
EXPORT_SYMBOL(strncat);
|
|
||||||
EXPORT_SYMBOL(strncmp);
|
|
||||||
EXPORT_SYMBOL(strncpy);
|
|
||||||
EXPORT_SYMBOL(strnlen);
|
|
||||||
EXPORT_SYMBOL(strrchr);
|
|
||||||
EXPORT_SYMBOL(strstr);
|
|
||||||
EXPORT_SYMBOL(strpbrk);
|
EXPORT_SYMBOL(strpbrk);
|
||||||
|
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
|
@ -82,16 +67,12 @@ EXPORT_SYMBOL($global$);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
EXPORT_SYMBOL(__ioremap);
|
|
||||||
EXPORT_SYMBOL(iounmap);
|
|
||||||
EXPORT_SYMBOL(memcpy_toio);
|
EXPORT_SYMBOL(memcpy_toio);
|
||||||
EXPORT_SYMBOL(memcpy_fromio);
|
EXPORT_SYMBOL(memcpy_fromio);
|
||||||
EXPORT_SYMBOL(memset_io);
|
EXPORT_SYMBOL(memset_io);
|
||||||
|
|
||||||
#include <asm/unistd.h>
|
#include <asm/unistd.h>
|
||||||
EXPORT_SYMBOL(sys_open);
|
|
||||||
EXPORT_SYMBOL(sys_lseek);
|
EXPORT_SYMBOL(sys_lseek);
|
||||||
EXPORT_SYMBOL(sys_read);
|
|
||||||
EXPORT_SYMBOL(sys_write);
|
EXPORT_SYMBOL(sys_write);
|
||||||
|
|
||||||
#include <asm/semaphore.h>
|
#include <asm/semaphore.h>
|
||||||
|
|
|
@ -5,9 +5,8 @@
|
||||||
* Copyright (C) 2002-2004 Thibaut VARENE <varenet@parisc-linux.org>
|
* Copyright (C) 2002-2004 Thibaut VARENE <varenet@parisc-linux.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License, version 2, as
|
||||||
* the Free Software Foundation; either version 2 of the License, or
|
* published by the Free Software Foundation.
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
*
|
||||||
* This program is distributed in the hope that it will be useful,
|
* This program is distributed in the hope that it will be useful,
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
|
|
@ -805,7 +805,7 @@ static int perf_write_image(uint64_t *memaddr)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
runway = ioremap(cpu_device->hpa.start, 4096);
|
runway = ioremap_nocache(cpu_device->hpa.start, 4096);
|
||||||
|
|
||||||
/* Merge intrigue bits into Runway STATUS 0 */
|
/* Merge intrigue bits into Runway STATUS 0 */
|
||||||
tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
|
tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
|
||||||
|
|
|
@ -287,7 +287,7 @@
|
||||||
ENTRY_SAME(chown) /* 180 */
|
ENTRY_SAME(chown) /* 180 */
|
||||||
/* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */
|
/* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */
|
||||||
ENTRY_COMP(setsockopt)
|
ENTRY_COMP(setsockopt)
|
||||||
ENTRY_SAME(getsockopt)
|
ENTRY_COMP(getsockopt)
|
||||||
ENTRY_COMP(sendmsg)
|
ENTRY_COMP(sendmsg)
|
||||||
ENTRY_COMP(recvmsg)
|
ENTRY_COMP(recvmsg)
|
||||||
ENTRY_SAME(semop) /* 185 */
|
ENTRY_SAME(semop) /* 185 */
|
||||||
|
|
|
@ -263,11 +263,7 @@ static const struct iomap_ops iomem_ops = {
|
||||||
|
|
||||||
const struct iomap_ops *iomap_ops[8] = {
|
const struct iomap_ops *iomap_ops[8] = {
|
||||||
[0] = &ioport_ops,
|
[0] = &ioport_ops,
|
||||||
#ifdef CONFIG_DEBUG_IOREMAP
|
|
||||||
[6] = &iomem_ops,
|
|
||||||
#else
|
|
||||||
[7] = &iomem_ops
|
[7] = &iomem_ops
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1013,9 +1013,9 @@ void flush_tlb_all(void)
|
||||||
#ifdef CONFIG_BLK_DEV_INITRD
|
#ifdef CONFIG_BLK_DEV_INITRD
|
||||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
#if 0
|
if (start >= end)
|
||||||
if (start < end)
|
return;
|
||||||
printk(KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
printk(KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||||
for (; start < end; start += PAGE_SIZE) {
|
for (; start < end; start += PAGE_SIZE) {
|
||||||
ClearPageReserved(virt_to_page(start));
|
ClearPageReserved(virt_to_page(start));
|
||||||
init_page_count(virt_to_page(start));
|
init_page_count(virt_to_page(start));
|
||||||
|
@ -1023,6 +1023,5 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
||||||
num_physpages++;
|
num_physpages++;
|
||||||
totalram_pages++;
|
totalram_pages++;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -72,7 +72,6 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if USE_HPPA_IOREMAP
|
|
||||||
static int
|
static int
|
||||||
remap_area_pages(unsigned long address, unsigned long phys_addr,
|
remap_area_pages(unsigned long address, unsigned long phys_addr,
|
||||||
unsigned long size, unsigned long flags)
|
unsigned long size, unsigned long flags)
|
||||||
|
@ -114,31 +113,6 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
#endif /* USE_HPPA_IOREMAP */
|
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_IOREMAP
|
|
||||||
static unsigned long last = 0;
|
|
||||||
|
|
||||||
void gsc_bad_addr(unsigned long addr)
|
|
||||||
{
|
|
||||||
if (time_after(jiffies, last + HZ*10)) {
|
|
||||||
printk("gsc_foo() called with bad address 0x%lx\n", addr);
|
|
||||||
dump_stack();
|
|
||||||
last = jiffies;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(gsc_bad_addr);
|
|
||||||
|
|
||||||
void __raw_bad_addr(const volatile void __iomem *addr)
|
|
||||||
{
|
|
||||||
if (time_after(jiffies, last + HZ*10)) {
|
|
||||||
printk("__raw_foo() called with bad address 0x%p\n", addr);
|
|
||||||
dump_stack();
|
|
||||||
last = jiffies;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(__raw_bad_addr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Generic mapping function (not visible outside):
|
* Generic mapping function (not visible outside):
|
||||||
|
@ -154,26 +128,19 @@ EXPORT_SYMBOL(__raw_bad_addr);
|
||||||
*/
|
*/
|
||||||
void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags)
|
||||||
{
|
{
|
||||||
#if !(USE_HPPA_IOREMAP)
|
|
||||||
|
|
||||||
unsigned long end = phys_addr + size - 1;
|
|
||||||
/* Support EISA addresses */
|
|
||||||
if ((phys_addr >= 0x00080000 && end < 0x000fffff)
|
|
||||||
|| (phys_addr >= 0x00500000 && end < 0x03bfffff)) {
|
|
||||||
phys_addr |= 0xfc000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUG_IOREMAP
|
|
||||||
return (void __iomem *)(phys_addr - (0x1UL << NYBBLE_SHIFT));
|
|
||||||
#else
|
|
||||||
return (void __iomem *)phys_addr;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else
|
|
||||||
void *addr;
|
void *addr;
|
||||||
struct vm_struct *area;
|
struct vm_struct *area;
|
||||||
unsigned long offset, last_addr;
|
unsigned long offset, last_addr;
|
||||||
|
|
||||||
|
#ifdef CONFIG_EISA
|
||||||
|
unsigned long end = phys_addr + size - 1;
|
||||||
|
/* Support EISA addresses */
|
||||||
|
if ((phys_addr >= 0x00080000 && end < 0x000fffff) ||
|
||||||
|
(phys_addr >= 0x00500000 && end < 0x03bfffff)) {
|
||||||
|
phys_addr |= F_EXTEND(0xfc000000);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Don't allow wraparound or zero size */
|
/* Don't allow wraparound or zero size */
|
||||||
last_addr = phys_addr + size - 1;
|
last_addr = phys_addr + size - 1;
|
||||||
if (!size || last_addr < phys_addr)
|
if (!size || last_addr < phys_addr)
|
||||||
|
@ -217,15 +184,12 @@ void __iomem * __ioremap(unsigned long phys_addr, unsigned long size, unsigned l
|
||||||
}
|
}
|
||||||
|
|
||||||
return (void __iomem *) (offset + (char *)addr);
|
return (void __iomem *) (offset + (char *)addr);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(__ioremap);
|
||||||
|
|
||||||
void iounmap(void __iomem *addr)
|
void iounmap(void __iomem *addr)
|
||||||
{
|
{
|
||||||
#if !(USE_HPPA_IOREMAP)
|
|
||||||
return;
|
|
||||||
#else
|
|
||||||
if (addr > high_memory)
|
if (addr > high_memory)
|
||||||
return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
|
return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(iounmap);
|
||||||
|
|
|
@ -61,7 +61,7 @@ static int __init parse_elfcorehdr(char *p)
|
||||||
if (p)
|
if (p)
|
||||||
elfcorehdr_addr = memparse(p, &p);
|
elfcorehdr_addr = memparse(p, &p);
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("elfcorehdr=", parse_elfcorehdr);
|
__setup("elfcorehdr=", parse_elfcorehdr);
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,7 +71,7 @@ static int __init parse_savemaxmem(char *p)
|
||||||
if (p)
|
if (p)
|
||||||
saved_max_pfn = (memparse(p, &p) >> PAGE_SHIFT) - 1;
|
saved_max_pfn = (memparse(p, &p) >> PAGE_SHIFT) - 1;
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
__setup("savemaxmem=", parse_savemaxmem);
|
__setup("savemaxmem=", parse_savemaxmem);
|
||||||
|
|
||||||
|
|
|
@ -834,7 +834,6 @@ unsigned long get_wchan(struct task_struct *p)
|
||||||
} while (count++ < 16);
|
} while (count++ < 16);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(get_wchan);
|
|
||||||
|
|
||||||
static int kstack_depth_to_print = 64;
|
static int kstack_depth_to_print = 64;
|
||||||
|
|
||||||
|
|
|
@ -261,7 +261,7 @@ V_FUNCTION_END(__kernel_sigtramp_rt32)
|
||||||
.Lcie_start:
|
.Lcie_start:
|
||||||
.long 0 /* CIE ID */
|
.long 0 /* CIE ID */
|
||||||
.byte 1 /* Version number */
|
.byte 1 /* Version number */
|
||||||
.string "zR" /* NUL-terminated augmentation string */
|
.string "zRS" /* NUL-terminated augmentation string */
|
||||||
.uleb128 4 /* Code alignment factor */
|
.uleb128 4 /* Code alignment factor */
|
||||||
.sleb128 -4 /* Data alignment factor */
|
.sleb128 -4 /* Data alignment factor */
|
||||||
.byte 67 /* Return address register column, ap */
|
.byte 67 /* Return address register column, ap */
|
||||||
|
|
|
@ -263,7 +263,7 @@ V_FUNCTION_END(__kernel_sigtramp_rt64)
|
||||||
.Lcie_start:
|
.Lcie_start:
|
||||||
.long 0 /* CIE ID */
|
.long 0 /* CIE ID */
|
||||||
.byte 1 /* Version number */
|
.byte 1 /* Version number */
|
||||||
.string "zR" /* NUL-terminated augmentation string */
|
.string "zRS" /* NUL-terminated augmentation string */
|
||||||
.uleb128 4 /* Code alignment factor */
|
.uleb128 4 /* Code alignment factor */
|
||||||
.sleb128 -8 /* Data alignment factor */
|
.sleb128 -8 /* Data alignment factor */
|
||||||
.byte 67 /* Return address register column, ap */
|
.byte 67 /* Return address register column, ap */
|
||||||
|
|
|
@ -801,7 +801,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
*/
|
*/
|
||||||
print_cpu_info(&S390_lowcore.cpu_data);
|
print_cpu_info(&S390_lowcore.cpu_data);
|
||||||
|
|
||||||
for_each_cpu(i) {
|
for_each_possible_cpu(i) {
|
||||||
lowcore_ptr[i] = (struct _lowcore *)
|
lowcore_ptr[i] = (struct _lowcore *)
|
||||||
__get_free_pages(GFP_KERNEL|GFP_DMA,
|
__get_free_pages(GFP_KERNEL|GFP_DMA,
|
||||||
sizeof(void*) == 8 ? 1 : 0);
|
sizeof(void*) == 8 ? 1 : 0);
|
||||||
|
@ -831,7 +831,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
#endif
|
#endif
|
||||||
set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]);
|
set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]);
|
||||||
|
|
||||||
for_each_cpu(cpu)
|
for_each_possible_cpu(cpu)
|
||||||
if (cpu != smp_processor_id())
|
if (cpu != smp_processor_id())
|
||||||
smp_create_idle(cpu);
|
smp_create_idle(cpu);
|
||||||
}
|
}
|
||||||
|
@ -868,7 +868,7 @@ static int __init topology_init(void)
|
||||||
int cpu;
|
int cpu;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
for_each_cpu(cpu) {
|
for_each_possible_cpu(cpu) {
|
||||||
ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
|
ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
|
||||||
if (ret)
|
if (ret)
|
||||||
printk(KERN_WARNING "topology_init: register_cpu %d "
|
printk(KERN_WARNING "topology_init: register_cpu %d "
|
||||||
|
|
|
@ -30,7 +30,7 @@ static int x##_disabled __initdata = 0; \
|
||||||
static int __init x##_setup(char *opts) \
|
static int __init x##_setup(char *opts) \
|
||||||
{ \
|
{ \
|
||||||
x##_disabled = 1; \
|
x##_disabled = 1; \
|
||||||
return 0; \
|
return 1; \
|
||||||
} \
|
} \
|
||||||
__setup("no" __stringify(x), x##_setup);
|
__setup("no" __stringify(x), x##_setup);
|
||||||
|
|
||||||
|
|
|
@ -401,7 +401,7 @@ static int __init topology_init(void)
|
||||||
{
|
{
|
||||||
int cpu_id;
|
int cpu_id;
|
||||||
|
|
||||||
for_each_cpu(cpu_id)
|
for_each_possible_cpu(cpu_id)
|
||||||
register_cpu(&cpu[cpu_id], cpu_id, NULL);
|
register_cpu(&cpu[cpu_id], cpu_id, NULL);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -22,6 +22,9 @@ config SBUS
|
||||||
config PCI
|
config PCI
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config PCMCIA
|
||||||
|
bool
|
||||||
|
|
||||||
config GENERIC_CALIBRATE_DELAY
|
config GENERIC_CALIBRATE_DELAY
|
||||||
bool
|
bool
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -20,7 +20,7 @@ core-y += $(ARCH_DIR)/kernel/ \
|
||||||
|
|
||||||
# Have to precede the include because the included Makefiles reference them.
|
# Have to precede the include because the included Makefiles reference them.
|
||||||
SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
|
SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
|
||||||
module.h vm-flags.h elf.h ldt.h
|
module.h vm-flags.h elf.h host_ldt.h
|
||||||
SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
|
SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
|
||||||
|
|
||||||
# XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
|
# XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
|
||||||
|
@ -129,7 +129,7 @@ CPPFLAGS_vmlinux.lds = -U$(SUBARCH) \
|
||||||
-DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \
|
-DSTART=$(START) -DELF_ARCH=$(ELF_ARCH) \
|
||||||
-DELF_FORMAT="$(ELF_FORMAT)" $(CPP_MODE-y) \
|
-DELF_FORMAT="$(ELF_FORMAT)" $(CPP_MODE-y) \
|
||||||
-DKERNEL_STACK_SIZE=$(STACK_SIZE) \
|
-DKERNEL_STACK_SIZE=$(STACK_SIZE) \
|
||||||
-DUNMAP_PATH=arch/um/sys-$(SUBARCH)/unmap_fin.o
|
-DUNMAP_PATH=arch/um/sys-$(SUBARCH)/unmap.o
|
||||||
|
|
||||||
#The wrappers will select whether using "malloc" or the kernel allocator.
|
#The wrappers will select whether using "malloc" or the kernel allocator.
|
||||||
LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
|
LINK_WRAPS = -Wl,--wrap,malloc -Wl,--wrap,free -Wl,--wrap,calloc
|
||||||
|
@ -150,8 +150,7 @@ CLEAN_FILES += linux x.i gmon.out $(ARCH_DIR)/include/uml-config.h \
|
||||||
$(ARCH_DIR)/include/user_constants.h \
|
$(ARCH_DIR)/include/user_constants.h \
|
||||||
$(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch
|
$(ARCH_DIR)/include/kern_constants.h $(ARCH_DIR)/Kconfig.arch
|
||||||
|
|
||||||
MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
|
MRPROPER_FILES += $(ARCH_SYMLINKS)
|
||||||
$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os
|
|
||||||
|
|
||||||
archclean:
|
archclean:
|
||||||
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# Copyright 2003 - 2004 Pathscale, Inc
|
# Copyright 2003 - 2004 Pathscale, Inc
|
||||||
# Released under the GPL
|
# Released under the GPL
|
||||||
|
|
||||||
libs-y += arch/um/sys-x86_64/
|
core-y += arch/um/sys-x86_64/
|
||||||
START := 0x60000000
|
START := 0x60000000
|
||||||
|
|
||||||
#We #undef __x86_64__ for kernelspace, not for userspace where
|
#We #undef __x86_64__ for kernelspace, not for userspace where
|
||||||
|
|
|
@ -95,18 +95,7 @@ static struct transport daemon_transport = {
|
||||||
static int register_daemon(void)
|
static int register_daemon(void)
|
||||||
{
|
{
|
||||||
register_transport(&daemon_transport);
|
register_transport(&daemon_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_daemon);
|
__initcall(register_daemon);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -104,7 +104,7 @@ static int harddog_release(struct inode *inode, struct file *file)
|
||||||
|
|
||||||
extern int ping_watchdog(int fd);
|
extern int ping_watchdog(int fd);
|
||||||
|
|
||||||
static ssize_t harddog_write(struct file *file, const char *data, size_t len,
|
static ssize_t harddog_write(struct file *file, const char __user *data, size_t len,
|
||||||
loff_t *ppos)
|
loff_t *ppos)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
|
@ -118,6 +118,7 @@ static ssize_t harddog_write(struct file *file, const char *data, size_t len,
|
||||||
static int harddog_ioctl(struct inode *inode, struct file *file,
|
static int harddog_ioctl(struct inode *inode, struct file *file,
|
||||||
unsigned int cmd, unsigned long arg)
|
unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
|
void __user *argp= (void __user *)arg;
|
||||||
static struct watchdog_info ident = {
|
static struct watchdog_info ident = {
|
||||||
WDIOC_SETTIMEOUT,
|
WDIOC_SETTIMEOUT,
|
||||||
0,
|
0,
|
||||||
|
@ -127,13 +128,12 @@ static int harddog_ioctl(struct inode *inode, struct file *file,
|
||||||
default:
|
default:
|
||||||
return -ENOTTY;
|
return -ENOTTY;
|
||||||
case WDIOC_GETSUPPORT:
|
case WDIOC_GETSUPPORT:
|
||||||
if(copy_to_user((struct harddog_info *)arg, &ident,
|
if(copy_to_user(argp, &ident, sizeof(ident)))
|
||||||
sizeof(ident)))
|
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
return 0;
|
return 0;
|
||||||
case WDIOC_GETSTATUS:
|
case WDIOC_GETSTATUS:
|
||||||
case WDIOC_GETBOOTSTATUS:
|
case WDIOC_GETBOOTSTATUS:
|
||||||
return put_user(0,(int *)arg);
|
return put_user(0,(int __user *)argp);
|
||||||
case WDIOC_KEEPALIVE:
|
case WDIOC_KEEPALIVE:
|
||||||
return(ping_watchdog(harddog_out_fd));
|
return(ping_watchdog(harddog_out_fd));
|
||||||
}
|
}
|
||||||
|
|
|
@ -67,8 +67,8 @@ MODULE_PARM_DESC(mixer, MIXER_HELP);
|
||||||
|
|
||||||
/* /dev/dsp file operations */
|
/* /dev/dsp file operations */
|
||||||
|
|
||||||
static ssize_t hostaudio_read(struct file *file, char *buffer, size_t count,
|
static ssize_t hostaudio_read(struct file *file, char __user *buffer,
|
||||||
loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct hostaudio_state *state = file->private_data;
|
struct hostaudio_state *state = file->private_data;
|
||||||
void *kbuf;
|
void *kbuf;
|
||||||
|
@ -94,7 +94,7 @@ static ssize_t hostaudio_read(struct file *file, char *buffer, size_t count,
|
||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
static ssize_t hostaudio_write(struct file *file, const char *buffer,
|
static ssize_t hostaudio_write(struct file *file, const char __user *buffer,
|
||||||
size_t count, loff_t *ppos)
|
size_t count, loff_t *ppos)
|
||||||
{
|
{
|
||||||
struct hostaudio_state *state = file->private_data;
|
struct hostaudio_state *state = file->private_data;
|
||||||
|
@ -152,7 +152,7 @@ static int hostaudio_ioctl(struct inode *inode, struct file *file,
|
||||||
case SNDCTL_DSP_CHANNELS:
|
case SNDCTL_DSP_CHANNELS:
|
||||||
case SNDCTL_DSP_SUBDIVIDE:
|
case SNDCTL_DSP_SUBDIVIDE:
|
||||||
case SNDCTL_DSP_SETFRAGMENT:
|
case SNDCTL_DSP_SETFRAGMENT:
|
||||||
if(get_user(data, (int *) arg))
|
if(get_user(data, (int __user *) arg))
|
||||||
return(-EFAULT);
|
return(-EFAULT);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -168,7 +168,7 @@ static int hostaudio_ioctl(struct inode *inode, struct file *file,
|
||||||
case SNDCTL_DSP_CHANNELS:
|
case SNDCTL_DSP_CHANNELS:
|
||||||
case SNDCTL_DSP_SUBDIVIDE:
|
case SNDCTL_DSP_SUBDIVIDE:
|
||||||
case SNDCTL_DSP_SETFRAGMENT:
|
case SNDCTL_DSP_SETFRAGMENT:
|
||||||
if(put_user(data, (int *) arg))
|
if(put_user(data, (int __user *) arg))
|
||||||
return(-EFAULT);
|
return(-EFAULT);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -124,18 +124,7 @@ static struct transport mcast_transport = {
|
||||||
static int register_mcast(void)
|
static int register_mcast(void)
|
||||||
{
|
{
|
||||||
register_transport(&mcast_transport);
|
register_transport(&mcast_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_mcast);
|
__initcall(register_mcast);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#include "linux/namei.h"
|
#include "linux/namei.h"
|
||||||
#include "linux/proc_fs.h"
|
#include "linux/proc_fs.h"
|
||||||
#include "linux/syscalls.h"
|
#include "linux/syscalls.h"
|
||||||
|
#include "linux/list.h"
|
||||||
|
#include "linux/mm.h"
|
||||||
#include "linux/console.h"
|
#include "linux/console.h"
|
||||||
#include "asm/irq.h"
|
#include "asm/irq.h"
|
||||||
#include "asm/uaccess.h"
|
#include "asm/uaccess.h"
|
||||||
|
@ -347,6 +349,142 @@ static struct mc_device *mconsole_find_dev(char *name)
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define UNPLUGGED_PER_PAGE \
|
||||||
|
((PAGE_SIZE - sizeof(struct list_head)) / sizeof(unsigned long))
|
||||||
|
|
||||||
|
struct unplugged_pages {
|
||||||
|
struct list_head list;
|
||||||
|
void *pages[UNPLUGGED_PER_PAGE];
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned long long unplugged_pages_count = 0;
|
||||||
|
static struct list_head unplugged_pages = LIST_HEAD_INIT(unplugged_pages);
|
||||||
|
static int unplug_index = UNPLUGGED_PER_PAGE;
|
||||||
|
|
||||||
|
static int mem_config(char *str)
|
||||||
|
{
|
||||||
|
unsigned long long diff;
|
||||||
|
int err = -EINVAL, i, add;
|
||||||
|
char *ret;
|
||||||
|
|
||||||
|
if(str[0] != '=')
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
if(str[0] == '-')
|
||||||
|
add = 0;
|
||||||
|
else if(str[0] == '+'){
|
||||||
|
add = 1;
|
||||||
|
}
|
||||||
|
else goto out;
|
||||||
|
|
||||||
|
str++;
|
||||||
|
diff = memparse(str, &ret);
|
||||||
|
if(*ret != '\0')
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
diff /= PAGE_SIZE;
|
||||||
|
|
||||||
|
for(i = 0; i < diff; i++){
|
||||||
|
struct unplugged_pages *unplugged;
|
||||||
|
void *addr;
|
||||||
|
|
||||||
|
if(add){
|
||||||
|
if(list_empty(&unplugged_pages))
|
||||||
|
break;
|
||||||
|
|
||||||
|
unplugged = list_entry(unplugged_pages.next,
|
||||||
|
struct unplugged_pages, list);
|
||||||
|
if(unplug_index > 0)
|
||||||
|
addr = unplugged->pages[--unplug_index];
|
||||||
|
else {
|
||||||
|
list_del(&unplugged->list);
|
||||||
|
addr = unplugged;
|
||||||
|
unplug_index = UNPLUGGED_PER_PAGE;
|
||||||
|
}
|
||||||
|
|
||||||
|
free_page((unsigned long) addr);
|
||||||
|
unplugged_pages_count--;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
struct page *page;
|
||||||
|
|
||||||
|
page = alloc_page(GFP_ATOMIC);
|
||||||
|
if(page == NULL)
|
||||||
|
break;
|
||||||
|
|
||||||
|
unplugged = page_address(page);
|
||||||
|
if(unplug_index == UNPLUGGED_PER_PAGE){
|
||||||
|
INIT_LIST_HEAD(&unplugged->list);
|
||||||
|
list_add(&unplugged->list, &unplugged_pages);
|
||||||
|
unplug_index = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
struct list_head *entry = unplugged_pages.next;
|
||||||
|
addr = unplugged;
|
||||||
|
|
||||||
|
unplugged = list_entry(entry,
|
||||||
|
struct unplugged_pages,
|
||||||
|
list);
|
||||||
|
unplugged->pages[unplug_index++] = addr;
|
||||||
|
err = os_drop_memory(addr, PAGE_SIZE);
|
||||||
|
if(err)
|
||||||
|
printk("Failed to release memory - "
|
||||||
|
"errno = %d\n", err);
|
||||||
|
}
|
||||||
|
|
||||||
|
unplugged_pages_count++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = 0;
|
||||||
|
out:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mem_get_config(char *name, char *str, int size, char **error_out)
|
||||||
|
{
|
||||||
|
char buf[sizeof("18446744073709551615")];
|
||||||
|
int len = 0;
|
||||||
|
|
||||||
|
sprintf(buf, "%ld", uml_physmem);
|
||||||
|
CONFIG_CHUNK(str, size, len, buf, 1);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mem_id(char **str, int *start_out, int *end_out)
|
||||||
|
{
|
||||||
|
*start_out = 0;
|
||||||
|
*end_out = 0;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int mem_remove(int n)
|
||||||
|
{
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct mc_device mem_mc = {
|
||||||
|
.name = "mem",
|
||||||
|
.config = mem_config,
|
||||||
|
.get_config = mem_get_config,
|
||||||
|
.id = mem_id,
|
||||||
|
.remove = mem_remove,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int mem_mc_init(void)
|
||||||
|
{
|
||||||
|
if(can_drop_memory())
|
||||||
|
mconsole_register_dev(&mem_mc);
|
||||||
|
else printk("Can't release memory to the host - memory hotplug won't "
|
||||||
|
"be supported\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
__initcall(mem_mc_init);
|
||||||
|
|
||||||
#define CONFIG_BUF_SIZE 64
|
#define CONFIG_BUF_SIZE 64
|
||||||
|
|
||||||
static void mconsole_get_config(int (*get_config)(char *, char *, int,
|
static void mconsole_get_config(int (*get_config)(char *, char *, int,
|
||||||
|
@ -478,7 +616,7 @@ static void console_write(struct console *console, const char *string,
|
||||||
return;
|
return;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
n = min(len, ARRAY_SIZE(console_buf) - console_index);
|
n = min((size_t)len, ARRAY_SIZE(console_buf) - console_index);
|
||||||
strncpy(&console_buf[console_index], string, n);
|
strncpy(&console_buf[console_index], string, n);
|
||||||
console_index += n;
|
console_index += n;
|
||||||
string += n;
|
string += n;
|
||||||
|
|
|
@ -106,18 +106,7 @@ static struct transport pcap_transport = {
|
||||||
static int register_pcap(void)
|
static int register_pcap(void)
|
||||||
{
|
{
|
||||||
register_transport(&pcap_transport);
|
register_transport(&pcap_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_pcap);
|
__initcall(register_pcap);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -93,18 +93,7 @@ static struct transport slip_transport = {
|
||||||
static int register_slip(void)
|
static int register_slip(void)
|
||||||
{
|
{
|
||||||
register_transport(&slip_transport);
|
register_transport(&slip_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_slip);
|
__initcall(register_slip);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ static int slirp_setup(char *str, char **mac_out, void *data)
|
||||||
int i=0;
|
int i=0;
|
||||||
|
|
||||||
*init = ((struct slirp_init)
|
*init = ((struct slirp_init)
|
||||||
{ argw : { { "slirp", NULL } } });
|
{ .argw = { { "slirp", NULL } } });
|
||||||
|
|
||||||
str = split_if_spec(str, mac_out, NULL);
|
str = split_if_spec(str, mac_out, NULL);
|
||||||
|
|
||||||
|
@ -116,18 +116,7 @@ static struct transport slirp_transport = {
|
||||||
static int register_slirp(void)
|
static int register_slirp(void)
|
||||||
{
|
{
|
||||||
register_transport(&slirp_transport);
|
register_transport(&slirp_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_slirp);
|
__initcall(register_slirp);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -891,7 +891,7 @@ int ubd_driver_init(void){
|
||||||
SA_INTERRUPT, "ubd", ubd_dev);
|
SA_INTERRUPT, "ubd", ubd_dev);
|
||||||
if(err != 0)
|
if(err != 0)
|
||||||
printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err);
|
printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err);
|
||||||
return(err);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_initcall(ubd_driver_init);
|
device_initcall(ubd_driver_init);
|
||||||
|
|
|
@ -116,7 +116,11 @@ extern void *get_current(void);
|
||||||
extern struct task_struct *get_task(int pid, int require);
|
extern struct task_struct *get_task(int pid, int require);
|
||||||
extern void machine_halt(void);
|
extern void machine_halt(void);
|
||||||
extern int is_syscall(unsigned long addr);
|
extern int is_syscall(unsigned long addr);
|
||||||
extern void arch_switch(void);
|
|
||||||
|
extern void arch_switch_to_tt(struct task_struct *from, struct task_struct *to);
|
||||||
|
|
||||||
|
extern void arch_switch_to_skas(struct task_struct *from, struct task_struct *to);
|
||||||
|
|
||||||
extern void free_irq(unsigned int, void *);
|
extern void free_irq(unsigned int, void *);
|
||||||
extern int cpu(void);
|
extern int cpu(void);
|
||||||
|
|
||||||
|
|
|
@ -58,23 +58,17 @@ struct line {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LINE_INIT(str, d) \
|
#define LINE_INIT(str, d) \
|
||||||
{ init_str : str, \
|
{ .init_str = str, \
|
||||||
init_pri : INIT_STATIC, \
|
.init_pri = INIT_STATIC, \
|
||||||
valid : 1, \
|
.valid = 1, \
|
||||||
throttled : 0, \
|
.lock = SPIN_LOCK_UNLOCKED, \
|
||||||
lock : SPIN_LOCK_UNLOCKED, \
|
.driver = d }
|
||||||
buffer : NULL, \
|
|
||||||
head : NULL, \
|
|
||||||
tail : NULL, \
|
|
||||||
sigio : 0, \
|
|
||||||
driver : d, \
|
|
||||||
have_irq : 0 }
|
|
||||||
|
|
||||||
struct lines {
|
struct lines {
|
||||||
int num;
|
int num;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LINES_INIT(n) { num : n }
|
#define LINES_INIT(n) { .num = n }
|
||||||
|
|
||||||
extern void line_close(struct tty_struct *tty, struct file * filp);
|
extern void line_close(struct tty_struct *tty, struct file * filp);
|
||||||
extern int line_open(struct line *lines, struct tty_struct *tty);
|
extern int line_open(struct line *lines, struct tty_struct *tty);
|
||||||
|
|
|
@ -49,7 +49,6 @@ extern int iomem_size;
|
||||||
extern unsigned long host_task_size;
|
extern unsigned long host_task_size;
|
||||||
extern unsigned long task_size;
|
extern unsigned long task_size;
|
||||||
|
|
||||||
extern void check_devanon(void);
|
|
||||||
extern int init_mem_user(void);
|
extern int init_mem_user(void);
|
||||||
extern void setup_memory(void *entry);
|
extern void setup_memory(void *entry);
|
||||||
extern unsigned long find_iomem(char *driver, unsigned long *len_out);
|
extern unsigned long find_iomem(char *driver, unsigned long *len_out);
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include "kern_util.h"
|
#include "kern_util.h"
|
||||||
#include "skas/mm_id.h"
|
#include "skas/mm_id.h"
|
||||||
#include "irq_user.h"
|
#include "irq_user.h"
|
||||||
|
#include "sysdep/tls.h"
|
||||||
|
|
||||||
#define OS_TYPE_FILE 1
|
#define OS_TYPE_FILE 1
|
||||||
#define OS_TYPE_DIR 2
|
#define OS_TYPE_DIR 2
|
||||||
|
@ -172,6 +173,7 @@ extern int os_fchange_dir(int fd);
|
||||||
extern void os_early_checks(void);
|
extern void os_early_checks(void);
|
||||||
extern int can_do_skas(void);
|
extern int can_do_skas(void);
|
||||||
extern void os_check_bugs(void);
|
extern void os_check_bugs(void);
|
||||||
|
extern void check_host_supports_tls(int *supports_tls, int *tls_min);
|
||||||
|
|
||||||
/* Make sure they are clear when running in TT mode. Required by
|
/* Make sure they are clear when running in TT mode. Required by
|
||||||
* SEGV_MAYBE_FIXABLE */
|
* SEGV_MAYBE_FIXABLE */
|
||||||
|
@ -205,6 +207,8 @@ extern int os_map_memory(void *virt, int fd, unsigned long long off,
|
||||||
extern int os_protect_memory(void *addr, unsigned long len,
|
extern int os_protect_memory(void *addr, unsigned long len,
|
||||||
int r, int w, int x);
|
int r, int w, int x);
|
||||||
extern int os_unmap_memory(void *addr, int len);
|
extern int os_unmap_memory(void *addr, int len);
|
||||||
|
extern int os_drop_memory(void *addr, int length);
|
||||||
|
extern int can_drop_memory(void);
|
||||||
extern void os_flush_stdout(void);
|
extern void os_flush_stdout(void);
|
||||||
|
|
||||||
/* tt.c
|
/* tt.c
|
||||||
|
@ -234,8 +238,12 @@ extern int run_helper_thread(int (*proc)(void *), void *arg,
|
||||||
int stack_order);
|
int stack_order);
|
||||||
extern int helper_wait(int pid);
|
extern int helper_wait(int pid);
|
||||||
|
|
||||||
/* umid.c */
|
|
||||||
|
|
||||||
|
/* tls.c */
|
||||||
|
extern int os_set_thread_area(user_desc_t *info, int pid);
|
||||||
|
extern int os_get_thread_area(user_desc_t *info, int pid);
|
||||||
|
|
||||||
|
/* umid.c */
|
||||||
extern int umid_file_name(char *name, char *buf, int len);
|
extern int umid_file_name(char *name, char *buf, int len);
|
||||||
extern int set_umid(char *name);
|
extern int set_umid(char *name);
|
||||||
extern char *get_umid(void);
|
extern char *get_umid(void);
|
||||||
|
|
|
@ -48,7 +48,8 @@ unsigned int csum_partial_copy_nocheck(const unsigned char *src, unsigned char *
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static __inline__
|
static __inline__
|
||||||
unsigned int csum_partial_copy_from_user(const unsigned char *src, unsigned char *dst,
|
unsigned int csum_partial_copy_from_user(const unsigned char __user *src,
|
||||||
|
unsigned char *dst,
|
||||||
int len, int sum, int *err_ptr)
|
int len, int sum, int *err_ptr)
|
||||||
{
|
{
|
||||||
if(copy_from_user(dst, src, len)){
|
if(copy_from_user(dst, src, len)){
|
||||||
|
@ -192,7 +193,7 @@ static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
|
||||||
*/
|
*/
|
||||||
#define HAVE_CSUM_COPY_USER
|
#define HAVE_CSUM_COPY_USER
|
||||||
static __inline__ unsigned int csum_and_copy_to_user(const unsigned char *src,
|
static __inline__ unsigned int csum_and_copy_to_user(const unsigned char *src,
|
||||||
unsigned char *dst,
|
unsigned char __user *dst,
|
||||||
int len, int sum, int *err_ptr)
|
int len, int sum, int *err_ptr)
|
||||||
{
|
{
|
||||||
if (access_ok(VERIFY_WRITE, dst, len)){
|
if (access_ok(VERIFY_WRITE, dst, len)){
|
||||||
|
|
|
@ -14,7 +14,12 @@
|
||||||
#define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long))
|
#define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long))
|
||||||
#define MAX_REG_OFFSET (UM_FRAME_SIZE)
|
#define MAX_REG_OFFSET (UM_FRAME_SIZE)
|
||||||
|
|
||||||
|
#ifdef UML_CONFIG_PT_PROXY
|
||||||
extern void update_debugregs(int seq);
|
extern void update_debugregs(int seq);
|
||||||
|
#else
|
||||||
|
static inline void update_debugregs(int seq) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* syscall emulation path in ptrace */
|
/* syscall emulation path in ptrace */
|
||||||
|
|
||||||
|
|
32
arch/um/include/sysdep-i386/tls.h
Normal file
32
arch/um/include/sysdep-i386/tls.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef _SYSDEP_TLS_H
|
||||||
|
#define _SYSDEP_TLS_H
|
||||||
|
|
||||||
|
# ifndef __KERNEL__
|
||||||
|
|
||||||
|
/* Change name to avoid conflicts with the original one from <asm/ldt.h>, which
|
||||||
|
* may be named user_desc (but in 2.4 and in header matching its API was named
|
||||||
|
* modify_ldt_ldt_s). */
|
||||||
|
|
||||||
|
typedef struct um_dup_user_desc {
|
||||||
|
unsigned int entry_number;
|
||||||
|
unsigned int base_addr;
|
||||||
|
unsigned int limit;
|
||||||
|
unsigned int seg_32bit:1;
|
||||||
|
unsigned int contents:2;
|
||||||
|
unsigned int read_exec_only:1;
|
||||||
|
unsigned int limit_in_pages:1;
|
||||||
|
unsigned int seg_not_present:1;
|
||||||
|
unsigned int useable:1;
|
||||||
|
} user_desc_t;
|
||||||
|
|
||||||
|
# else /* __KERNEL__ */
|
||||||
|
|
||||||
|
# include <asm/ldt.h>
|
||||||
|
typedef struct user_desc user_desc_t;
|
||||||
|
|
||||||
|
# endif /* __KERNEL__ */
|
||||||
|
|
||||||
|
#define GDT_ENTRY_TLS_MIN_I386 6
|
||||||
|
#define GDT_ENTRY_TLS_MIN_X86_64 12
|
||||||
|
|
||||||
|
#endif /* _SYSDEP_TLS_H */
|
29
arch/um/include/sysdep-x86_64/tls.h
Normal file
29
arch/um/include/sysdep-x86_64/tls.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef _SYSDEP_TLS_H
|
||||||
|
#define _SYSDEP_TLS_H
|
||||||
|
|
||||||
|
# ifndef __KERNEL__
|
||||||
|
|
||||||
|
/* Change name to avoid conflicts with the original one from <asm/ldt.h>, which
|
||||||
|
* may be named user_desc (but in 2.4 and in header matching its API was named
|
||||||
|
* modify_ldt_ldt_s). */
|
||||||
|
|
||||||
|
typedef struct um_dup_user_desc {
|
||||||
|
unsigned int entry_number;
|
||||||
|
unsigned int base_addr;
|
||||||
|
unsigned int limit;
|
||||||
|
unsigned int seg_32bit:1;
|
||||||
|
unsigned int contents:2;
|
||||||
|
unsigned int read_exec_only:1;
|
||||||
|
unsigned int limit_in_pages:1;
|
||||||
|
unsigned int seg_not_present:1;
|
||||||
|
unsigned int useable:1;
|
||||||
|
unsigned int lm:1;
|
||||||
|
} user_desc_t;
|
||||||
|
|
||||||
|
# else /* __KERNEL__ */
|
||||||
|
|
||||||
|
# include <asm/ldt.h>
|
||||||
|
typedef struct user_desc user_desc_t;
|
||||||
|
|
||||||
|
# endif /* __KERNEL__ */
|
||||||
|
#endif /* _SYSDEP_TLS_H */
|
|
@ -8,6 +8,9 @@
|
||||||
|
|
||||||
#include "sysdep/ptrace.h"
|
#include "sysdep/ptrace.h"
|
||||||
|
|
||||||
|
/* Copied from kernel.h */
|
||||||
|
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||||
|
|
||||||
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
|
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
|
||||||
|
|
||||||
extern int mode_tt;
|
extern int mode_tt;
|
||||||
|
@ -31,7 +34,7 @@ extern unsigned long uml_physmem;
|
||||||
extern unsigned long uml_reserved;
|
extern unsigned long uml_reserved;
|
||||||
extern unsigned long end_vm;
|
extern unsigned long end_vm;
|
||||||
extern unsigned long start_vm;
|
extern unsigned long start_vm;
|
||||||
extern unsigned long highmem;
|
extern unsigned long long highmem;
|
||||||
|
|
||||||
extern char host_info[];
|
extern char host_info[];
|
||||||
|
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
|
|
||||||
void flush_thread(void)
|
void flush_thread(void)
|
||||||
{
|
{
|
||||||
|
arch_flush_thread(¤t->thread.arch);
|
||||||
CHOOSE_MODE(flush_thread_tt(), flush_thread_skas());
|
CHOOSE_MODE(flush_thread_tt(), flush_thread_skas());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,14 +59,14 @@ long um_execve(char *file, char __user *__user *argv, char __user *__user *env)
|
||||||
return(err);
|
return(err);
|
||||||
}
|
}
|
||||||
|
|
||||||
long sys_execve(char *file, char __user *__user *argv,
|
long sys_execve(char __user *file, char __user *__user *argv,
|
||||||
char __user *__user *env)
|
char __user *__user *env)
|
||||||
{
|
{
|
||||||
long error;
|
long error;
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
lock_kernel();
|
lock_kernel();
|
||||||
filename = getname((char __user *) file);
|
filename = getname(file);
|
||||||
error = PTR_ERR(filename);
|
error = PTR_ERR(filename);
|
||||||
if (IS_ERR(filename)) goto out;
|
if (IS_ERR(filename)) goto out;
|
||||||
error = execve1(filename, argv, env);
|
error = execve1(filename, argv, env);
|
||||||
|
@ -74,14 +75,3 @@ long sys_execve(char *file, char __user *__user *argv,
|
||||||
unlock_kernel();
|
unlock_kernel();
|
||||||
return(error);
|
return(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
|
@ -30,7 +30,7 @@ extern char __binary_start;
|
||||||
unsigned long *empty_zero_page = NULL;
|
unsigned long *empty_zero_page = NULL;
|
||||||
unsigned long *empty_bad_page = NULL;
|
unsigned long *empty_bad_page = NULL;
|
||||||
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||||
unsigned long highmem;
|
unsigned long long highmem;
|
||||||
int kmalloc_ok = 0;
|
int kmalloc_ok = 0;
|
||||||
|
|
||||||
static unsigned long brk_end;
|
static unsigned long brk_end;
|
||||||
|
|
|
@ -156,9 +156,25 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long sp,
|
||||||
unsigned long stack_top, struct task_struct * p,
|
unsigned long stack_top, struct task_struct * p,
|
||||||
struct pt_regs *regs)
|
struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
p->thread = (struct thread_struct) INIT_THREAD;
|
p->thread = (struct thread_struct) INIT_THREAD;
|
||||||
return(CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr,
|
ret = CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr,
|
||||||
clone_flags, sp, stack_top, p, regs));
|
clone_flags, sp, stack_top, p, regs);
|
||||||
|
|
||||||
|
if (ret || !current->thread.forking)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
clear_flushed_tls(p);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set a new TLS for the child thread?
|
||||||
|
*/
|
||||||
|
if (clone_flags & CLONE_SETTLS)
|
||||||
|
ret = arch_copy_tls(p);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initial_thread_cb(void (*proc)(void *), void *arg)
|
void initial_thread_cb(void (*proc)(void *), void *arg)
|
||||||
|
@ -185,10 +201,6 @@ void default_idle(void)
|
||||||
{
|
{
|
||||||
CHOOSE_MODE(uml_idle_timer(), (void) 0);
|
CHOOSE_MODE(uml_idle_timer(), (void) 0);
|
||||||
|
|
||||||
atomic_inc(&init_mm.mm_count);
|
|
||||||
current->mm = &init_mm;
|
|
||||||
current->active_mm = &init_mm;
|
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
/* endless idle loop with no priority at all */
|
/* endless idle loop with no priority at all */
|
||||||
|
|
||||||
|
@ -407,7 +419,7 @@ static int proc_read_sysemu(char *buf, char **start, off_t offset, int size,int
|
||||||
return strlen(buf);
|
return strlen(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int proc_write_sysemu(struct file *file,const char *buf, unsigned long count,void *data)
|
static int proc_write_sysemu(struct file *file,const char __user *buf, unsigned long count,void *data)
|
||||||
{
|
{
|
||||||
char tmp[2];
|
char tmp[2];
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,7 @@ extern int poke_user(struct task_struct * child, long addr, long data);
|
||||||
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
{
|
{
|
||||||
int i, ret;
|
int i, ret;
|
||||||
|
unsigned long __user *p = (void __user *)(unsigned long)data;
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
/* when I and D space are separate, these will need to be fixed. */
|
/* when I and D space are separate, these will need to be fixed. */
|
||||||
|
@ -58,7 +59,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
|
copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
|
||||||
if (copied != sizeof(tmp))
|
if (copied != sizeof(tmp))
|
||||||
break;
|
break;
|
||||||
ret = put_user(tmp, (unsigned long __user *) data);
|
ret = put_user(tmp, p);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,15 +137,13 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
|
|
||||||
#ifdef PTRACE_GETREGS
|
#ifdef PTRACE_GETREGS
|
||||||
case PTRACE_GETREGS: { /* Get all gp regs from the child. */
|
case PTRACE_GETREGS: { /* Get all gp regs from the child. */
|
||||||
if (!access_ok(VERIFY_WRITE, (unsigned long *)data,
|
if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) {
|
||||||
MAX_REG_OFFSET)) {
|
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
|
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
|
||||||
__put_user(getreg(child, i),
|
__put_user(getreg(child, i), p);
|
||||||
(unsigned long __user *) data);
|
p++;
|
||||||
data += sizeof(long);
|
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -153,15 +152,14 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
#ifdef PTRACE_SETREGS
|
#ifdef PTRACE_SETREGS
|
||||||
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
|
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
|
||||||
unsigned long tmp = 0;
|
unsigned long tmp = 0;
|
||||||
if (!access_ok(VERIFY_READ, (unsigned *)data,
|
if (!access_ok(VERIFY_READ, p, MAX_REG_OFFSET)) {
|
||||||
MAX_REG_OFFSET)) {
|
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
|
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
|
||||||
__get_user(tmp, (unsigned long __user *) data);
|
__get_user(tmp, p);
|
||||||
putreg(child, i, tmp);
|
putreg(child, i, tmp);
|
||||||
data += sizeof(long);
|
p++;
|
||||||
}
|
}
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
@ -187,14 +185,23 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
ret = set_fpxregs(data, child);
|
ret = set_fpxregs(data, child);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
case PTRACE_GET_THREAD_AREA:
|
||||||
|
ret = ptrace_get_thread_area(child, addr,
|
||||||
|
(struct user_desc __user *) data);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PTRACE_SET_THREAD_AREA:
|
||||||
|
ret = ptrace_set_thread_area(child, addr,
|
||||||
|
(struct user_desc __user *) data);
|
||||||
|
break;
|
||||||
|
|
||||||
case PTRACE_FAULTINFO: {
|
case PTRACE_FAULTINFO: {
|
||||||
/* Take the info from thread->arch->faultinfo,
|
/* Take the info from thread->arch->faultinfo,
|
||||||
* but transfer max. sizeof(struct ptrace_faultinfo).
|
* but transfer max. sizeof(struct ptrace_faultinfo).
|
||||||
* On i386, ptrace_faultinfo is smaller!
|
* On i386, ptrace_faultinfo is smaller!
|
||||||
*/
|
*/
|
||||||
ret = copy_to_user((unsigned long __user *) data,
|
ret = copy_to_user(p, &child->thread.arch.faultinfo,
|
||||||
&child->thread.arch.faultinfo,
|
sizeof(struct ptrace_faultinfo));
|
||||||
sizeof(struct ptrace_faultinfo));
|
|
||||||
if(ret)
|
if(ret)
|
||||||
break;
|
break;
|
||||||
break;
|
break;
|
||||||
|
@ -204,8 +211,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||||
case PTRACE_LDT: {
|
case PTRACE_LDT: {
|
||||||
struct ptrace_ldt ldt;
|
struct ptrace_ldt ldt;
|
||||||
|
|
||||||
if(copy_from_user(&ldt, (unsigned long __user *) data,
|
if(copy_from_user(&ldt, p, sizeof(ldt))){
|
||||||
sizeof(ldt))){
|
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,6 +35,8 @@ void switch_to_skas(void *prev, void *next)
|
||||||
switch_threads(&from->thread.mode.skas.switch_buf,
|
switch_threads(&from->thread.mode.skas.switch_buf,
|
||||||
to->thread.mode.skas.switch_buf);
|
to->thread.mode.skas.switch_buf);
|
||||||
|
|
||||||
|
arch_switch_to_skas(current->thread.prev_sched, current);
|
||||||
|
|
||||||
if(current->pid == 0)
|
if(current->pid == 0)
|
||||||
switch_timers(1);
|
switch_timers(1);
|
||||||
}
|
}
|
||||||
|
@ -89,10 +91,17 @@ void fork_handler(int sig)
|
||||||
panic("blech");
|
panic("blech");
|
||||||
|
|
||||||
schedule_tail(current->thread.prev_sched);
|
schedule_tail(current->thread.prev_sched);
|
||||||
|
|
||||||
|
/* XXX: if interrupt_end() calls schedule, this call to
|
||||||
|
* arch_switch_to_skas isn't needed. We could want to apply this to
|
||||||
|
* improve performance. -bb */
|
||||||
|
arch_switch_to_skas(current->thread.prev_sched, current);
|
||||||
|
|
||||||
current->thread.prev_sched = NULL;
|
current->thread.prev_sched = NULL;
|
||||||
|
|
||||||
/* Handle any immediate reschedules or signals */
|
/* Handle any immediate reschedules or signals */
|
||||||
interrupt_end();
|
interrupt_end();
|
||||||
|
|
||||||
userspace(¤t->thread.regs.regs);
|
userspace(¤t->thread.regs.regs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,6 +118,8 @@ int copy_thread_skas(int nr, unsigned long clone_flags, unsigned long sp,
|
||||||
if(sp != 0) REGS_SP(p->thread.regs.regs.skas.regs) = sp;
|
if(sp != 0) REGS_SP(p->thread.regs.regs.skas.regs) = sp;
|
||||||
|
|
||||||
handler = fork_handler;
|
handler = fork_handler;
|
||||||
|
|
||||||
|
arch_copy_thread(¤t->thread.arch, &p->thread.arch);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
init_thread_registers(&p->thread.regs.regs);
|
init_thread_registers(&p->thread.regs.regs);
|
||||||
|
|
|
@ -104,7 +104,7 @@ long sys_pipe(unsigned long __user * fildes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
long sys_uname(struct old_utsname * name)
|
long sys_uname(struct old_utsname __user * name)
|
||||||
{
|
{
|
||||||
long err;
|
long err;
|
||||||
if (!name)
|
if (!name)
|
||||||
|
@ -115,7 +115,7 @@ long sys_uname(struct old_utsname * name)
|
||||||
return err?-EFAULT:0;
|
return err?-EFAULT:0;
|
||||||
}
|
}
|
||||||
|
|
||||||
long sys_olduname(struct oldold_utsname * name)
|
long sys_olduname(struct oldold_utsname __user * name)
|
||||||
{
|
{
|
||||||
long error;
|
long error;
|
||||||
|
|
||||||
|
|
|
@ -198,7 +198,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc)
|
||||||
si.si_signo = SIGBUS;
|
si.si_signo = SIGBUS;
|
||||||
si.si_errno = 0;
|
si.si_errno = 0;
|
||||||
si.si_code = BUS_ADRERR;
|
si.si_code = BUS_ADRERR;
|
||||||
si.si_addr = (void *)address;
|
si.si_addr = (void __user *)address;
|
||||||
current->thread.arch.faultinfo = fi;
|
current->thread.arch.faultinfo = fi;
|
||||||
force_sig_info(SIGBUS, &si, current);
|
force_sig_info(SIGBUS, &si, current);
|
||||||
} else if (err == -ENOMEM) {
|
} else if (err == -ENOMEM) {
|
||||||
|
@ -207,7 +207,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc)
|
||||||
} else {
|
} else {
|
||||||
BUG_ON(err != -EFAULT);
|
BUG_ON(err != -EFAULT);
|
||||||
si.si_signo = SIGSEGV;
|
si.si_signo = SIGSEGV;
|
||||||
si.si_addr = (void *) address;
|
si.si_addr = (void __user *) address;
|
||||||
current->thread.arch.faultinfo = fi;
|
current->thread.arch.faultinfo = fi;
|
||||||
force_sig_info(SIGSEGV, &si, current);
|
force_sig_info(SIGSEGV, &si, current);
|
||||||
}
|
}
|
||||||
|
@ -220,8 +220,8 @@ void bad_segv(struct faultinfo fi, unsigned long ip)
|
||||||
|
|
||||||
si.si_signo = SIGSEGV;
|
si.si_signo = SIGSEGV;
|
||||||
si.si_code = SEGV_ACCERR;
|
si.si_code = SEGV_ACCERR;
|
||||||
si.si_addr = (void *) FAULT_ADDRESS(fi);
|
si.si_addr = (void __user *) FAULT_ADDRESS(fi);
|
||||||
current->thread.arch.faultinfo = fi;
|
current->thread.arch.faultinfo = fi;
|
||||||
force_sig_info(SIGSEGV, &si, current);
|
force_sig_info(SIGSEGV, &si, current);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,13 @@ void switch_to_tt(void *prev, void *next)
|
||||||
|
|
||||||
c = 0;
|
c = 0;
|
||||||
|
|
||||||
|
/* Notice that here we "up" the semaphore on which "to" is waiting, and
|
||||||
|
* below (the read) we wait on this semaphore (which is implemented by
|
||||||
|
* switch_pipe) and go sleeping. Thus, after that, we have resumed in
|
||||||
|
* "to", and can't use any more the value of "from" (which is outdated),
|
||||||
|
* nor the value in "to" (since it was the task which stole us the CPU,
|
||||||
|
* which we don't care about). */
|
||||||
|
|
||||||
err = os_write_file(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
|
err = os_write_file(to->thread.mode.tt.switch_pipe[1], &c, sizeof(c));
|
||||||
if(err != sizeof(c))
|
if(err != sizeof(c))
|
||||||
panic("write of switch_pipe failed, err = %d", -err);
|
panic("write of switch_pipe failed, err = %d", -err);
|
||||||
|
@ -77,7 +84,7 @@ void switch_to_tt(void *prev, void *next)
|
||||||
change_sig(SIGALRM, alrm);
|
change_sig(SIGALRM, alrm);
|
||||||
change_sig(SIGPROF, prof);
|
change_sig(SIGPROF, prof);
|
||||||
|
|
||||||
arch_switch();
|
arch_switch_to_tt(prev_sched, current);
|
||||||
|
|
||||||
flush_tlb_all();
|
flush_tlb_all();
|
||||||
local_irq_restore(flags);
|
local_irq_restore(flags);
|
||||||
|
@ -141,7 +148,6 @@ static void new_thread_handler(int sig)
|
||||||
set_cmdline("(kernel thread)");
|
set_cmdline("(kernel thread)");
|
||||||
|
|
||||||
change_sig(SIGUSR1, 1);
|
change_sig(SIGUSR1, 1);
|
||||||
change_sig(SIGVTALRM, 1);
|
|
||||||
change_sig(SIGPROF, 1);
|
change_sig(SIGPROF, 1);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
if(!run_kernel_thread(fn, arg, ¤t->thread.exec_buf))
|
if(!run_kernel_thread(fn, arg, ¤t->thread.exec_buf))
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y = aio.o elf_aux.o file.o helper.o irq.o main.o mem.o process.o sigio.o \
|
obj-y = aio.o elf_aux.o file.o helper.o irq.o main.o mem.o process.o sigio.o \
|
||||||
signal.o start_up.o time.o trap.o tt.o tty.o uaccess.o umid.o \
|
signal.o start_up.o time.o trap.o tt.o tty.o uaccess.o umid.o tls.o \
|
||||||
user_syms.o util.o drivers/ sys-$(SUBARCH)/
|
user_syms.o util.o drivers/ sys-$(SUBARCH)/
|
||||||
|
|
||||||
obj-$(CONFIG_MODE_SKAS) += skas/
|
obj-$(CONFIG_MODE_SKAS) += skas/
|
||||||
|
@ -12,12 +12,9 @@ obj-$(CONFIG_TTY_LOG) += tty_log.o
|
||||||
user-objs-$(CONFIG_TTY_LOG) += tty_log.o
|
user-objs-$(CONFIG_TTY_LOG) += tty_log.o
|
||||||
|
|
||||||
USER_OBJS := $(user-objs-y) aio.o elf_aux.o file.o helper.o irq.o main.o mem.o \
|
USER_OBJS := $(user-objs-y) aio.o elf_aux.o file.o helper.o irq.o main.o mem.o \
|
||||||
process.o sigio.o signal.o start_up.o time.o trap.o tt.o tty.o \
|
process.o sigio.o signal.o start_up.o time.o trap.o tt.o tty.o tls.o \
|
||||||
uaccess.o umid.o util.o
|
uaccess.o umid.o util.o
|
||||||
|
|
||||||
elf_aux.o: $(ARCH_DIR)/kernel-offsets.h
|
|
||||||
CFLAGS_elf_aux.o += -I$(objtree)/arch/um
|
|
||||||
|
|
||||||
CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
|
CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
|
||||||
|
|
||||||
HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \
|
HAVE_AIO_ABI := $(shell [ -r /usr/include/linux/aio_abi.h ] && \
|
||||||
|
|
|
@ -102,18 +102,7 @@ static struct transport ethertap_transport = {
|
||||||
static int register_ethertap(void)
|
static int register_ethertap(void)
|
||||||
{
|
{
|
||||||
register_transport(ðertap_transport);
|
register_transport(ðertap_transport);
|
||||||
return(1);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
__initcall(register_ethertap);
|
__initcall(register_ethertap);
|
||||||
|
|
||||||
/*
|
|
||||||
* Overrides for Emacs so that we follow Linus's tabbing style.
|
|
||||||
* Emacs will notice this stuff at the end of the file and automatically
|
|
||||||
* adjust the settings for this buffer only. This must remain at the end
|
|
||||||
* of the file.
|
|
||||||
* ---------------------------------------------------------------------------
|
|
||||||
* Local variables:
|
|
||||||
* c-file-style: "linux"
|
|
||||||
* End:
|
|
||||||
*/
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue