Merge branch 'upstream'
This commit is contained in:
commit
6e07e16404
|
@ -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
|
||||
When: June 2006
|
||||
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>
|
||||
|
||||
---------------------------
|
||||
|
||||
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>
|
||||
|
||||
---------------------------
|
||||
|
|
|
@ -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.
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -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(memchr);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
#ifdef CONFIG_ALPHA_IRONGATE
|
||||
EXPORT_SYMBOL(irongate_ioremap);
|
||||
EXPORT_SYMBOL(irongate_iounmap);
|
||||
|
|
|
@ -435,7 +435,7 @@ marvel_specify_io7(char *str)
|
|||
str = pchar;
|
||||
} while(*str);
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
__setup("io7=", marvel_specify_io7);
|
||||
|
||||
|
|
|
@ -77,6 +77,14 @@ config FIQ
|
|||
config ARCH_MTD_XIP
|
||||
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"
|
||||
|
||||
menu "System Type"
|
||||
|
@ -839,6 +847,8 @@ source "drivers/misc/Kconfig"
|
|||
|
||||
source "drivers/mfd/Kconfig"
|
||||
|
||||
source "drivers/leds/Kconfig"
|
||||
|
||||
source "drivers/media/Kconfig"
|
||||
|
||||
source "drivers/video/Kconfig"
|
||||
|
|
|
@ -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
|
||||
KBUILD_DEFCONFIG := versatile_defconfig
|
||||
|
||||
# defines filename extension depending memory manement type.
|
||||
ifeq ($(CONFIG_MMU),)
|
||||
MMUEXT := -nommu
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_FRAME_POINTER),y)
|
||||
CFLAGS +=-fno-omit-frame-pointer -mapcs -mno-sched-prolog
|
||||
endif
|
||||
|
@ -73,7 +78,7 @@ AFLAGS +=$(CFLAGS_ABI) $(arch-y) $(tune-y) -msoft-float
|
|||
CHECKFLAGS += -D__arm__
|
||||
|
||||
#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
|
||||
|
||||
machine-$(CONFIG_ARCH_RPC) := rpc
|
||||
|
@ -133,7 +138,7 @@ else
|
|||
MACHINE :=
|
||||
endif
|
||||
|
||||
export TEXT_OFFSET GZFLAGS
|
||||
export TEXT_OFFSET GZFLAGS MMUEXT
|
||||
|
||||
# Do we have FASTFPE?
|
||||
FASTFPE :=arch/arm/fastfpe
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
* linux/arch/arm/boot/compressed/head.S
|
||||
*
|
||||
* 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
|
||||
* 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
|
||||
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
|
||||
bic r3, r3, #0xff @ Align the pointer
|
||||
bic r3, r3, #0x3f00
|
||||
|
@ -496,6 +553,18 @@ proc_types:
|
|||
b __armv4_mmu_cache_off
|
||||
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 0x0000f000
|
||||
mov pc, lr
|
||||
|
@ -562,6 +631,24 @@ proc_types:
|
|||
cache_off: mov r3, #12 @ cache_off function
|
||||
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:
|
||||
mrc p15, 0, r0, c1, c0
|
||||
bic r0, r0, #0x000d
|
||||
|
@ -601,6 +688,24 @@ cache_clean_flush:
|
|||
mov r3, #16
|
||||
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:
|
||||
mov r1, #0
|
||||
mcr p15, 0, r1, c7, c14, 0 @ clean+invalidate D
|
||||
|
@ -638,6 +743,7 @@ no_cache_id:
|
|||
mov pc, lr
|
||||
|
||||
__armv3_mmu_cache_flush:
|
||||
__armv3_mpu_cache_flush:
|
||||
mov r1, #0
|
||||
mcr p15, 0, r0, c7, c0, 0 @ invalidate whole cache v3
|
||||
mov pc, lr
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/leds.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -75,6 +76,7 @@ static void sharpsl_battery_thread(void *private_);
|
|||
struct sharpsl_pm_status sharpsl_pm;
|
||||
DECLARE_WORK(toggle_charger, sharpsl_charge_toggle, NULL);
|
||||
DECLARE_WORK(sharpsl_bat, sharpsl_battery_thread, NULL);
|
||||
DEFINE_LED_TRIGGER(sharpsl_charge_led_trigger);
|
||||
|
||||
|
||||
static int get_percentage(int voltage)
|
||||
|
@ -190,10 +192,10 @@ void sharpsl_pm_led(int val)
|
|||
dev_err(sharpsl_pm.dev, "Charging Error!\n");
|
||||
} else if (val == SHARPSL_LED_ON) {
|
||||
dev_dbg(sharpsl_pm.dev, "Charge LED On\n");
|
||||
|
||||
led_trigger_event(sharpsl_charge_led_trigger, LED_FULL);
|
||||
} else {
|
||||
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);
|
||||
sharpsl_pm.chrg_full_timer.function = sharpsl_chrg_full_timer;
|
||||
|
||||
led_trigger_register_simple("sharpsl-charge", &sharpsl_charge_led_trigger);
|
||||
|
||||
sharpsl_pm.machinfo->init();
|
||||
|
||||
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_voltage);
|
||||
|
||||
led_trigger_unregister_simple(sharpsl_charge_led_trigger);
|
||||
|
||||
sharpsl_pm.machinfo->exit();
|
||||
|
||||
del_timer_sync(&sharpsl_pm.chrg_full_timer);
|
||||
|
|
|
@ -666,7 +666,7 @@ __kuser_helper_start:
|
|||
*
|
||||
* #define __kernel_dmb() \
|
||||
* asm volatile ( "mov r0, #0xffff0fff; mov lr, pc; sub pc, r0, #95" \
|
||||
* : : : "lr","cc" )
|
||||
* : : : "r0", "lr","cc" )
|
||||
*/
|
||||
|
||||
__kuser_memory_barrier: @ 0xffff0fa0
|
||||
|
|
|
@ -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}
|
|
@ -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
|
||||
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)
|
||||
.type secondary_startup, #function
|
||||
ENTRY(secondary_startup)
|
||||
|
@ -367,166 +324,4 @@ __create_page_tables:
|
|||
mov pc, lr
|
||||
.ltorg
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 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}
|
||||
#include "head-common.S"
|
||||
|
|
|
@ -474,4 +474,3 @@ unsigned long get_wchan(struct task_struct *p)
|
|||
} while (count ++ < 16);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
|
|
@ -7,6 +7,6 @@
|
|||
* it under the terms of the GNU General Public License version 2 as
|
||||
* 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];
|
||||
|
|
|
@ -688,6 +688,7 @@ EXPORT_SYMBOL(abort);
|
|||
|
||||
void __init trap_init(void)
|
||||
{
|
||||
unsigned long vectors = CONFIG_VECTORS_BASE;
|
||||
extern char __stubs_start[], __stubs_end[];
|
||||
extern char __vectors_start[], __vectors_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
|
||||
* are visible to the instruction stream.
|
||||
*/
|
||||
memcpy((void *)0xffff0000, __vectors_start, __vectors_end - __vectors_start);
|
||||
memcpy((void *)0xffff0200, __stubs_start, __stubs_end - __stubs_start);
|
||||
memcpy((void *)0xffff1000 - kuser_sz, __kuser_helper_start, kuser_sz);
|
||||
memcpy((void *)vectors, __vectors_start, __vectors_end - __vectors_start);
|
||||
memcpy((void *)vectors + 0x200, __stubs_start, __stubs_end - __stubs_start);
|
||||
memcpy((void *)vectors + 0x1000 - kuser_sz, __kuser_helper_start, kuser_sz);
|
||||
|
||||
/*
|
||||
* 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,
|
||||
sizeof(sigreturn_codes));
|
||||
|
||||
flush_icache_range(0xffff0000, 0xffff0000 + PAGE_SIZE);
|
||||
flush_icache_range(vectors, vectors + PAGE_SIZE);
|
||||
modify_domain(DOMAIN_USER, DOMAIN_CLIENT);
|
||||
}
|
||||
|
|
|
@ -141,6 +141,8 @@ struct corgissp_machinfo corgi_ssp_machinfo = {
|
|||
*/
|
||||
static struct corgibl_machinfo corgi_bl_machinfo = {
|
||||
.max_intensity = 0x2f,
|
||||
.default_intensity = 0x1f,
|
||||
.limit_mask = 0x0b,
|
||||
.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
|
||||
*/
|
||||
|
@ -297,6 +307,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&corgikbd_device,
|
||||
&corgibl_device,
|
||||
&corgits_device,
|
||||
&corgiled_device,
|
||||
};
|
||||
|
||||
static void __init corgi_init(void)
|
||||
|
|
|
@ -220,6 +220,8 @@ struct corgissp_machinfo spitz_ssp_machinfo = {
|
|||
* Spitz Backlight Device
|
||||
*/
|
||||
static struct corgibl_machinfo spitz_bl_machinfo = {
|
||||
.default_intensity = 0x1f,
|
||||
.limit_mask = 0x0b,
|
||||
.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
|
||||
*/
|
||||
|
@ -418,6 +428,7 @@ static struct platform_device *devices[] __initdata = {
|
|||
&spitzkbd_device,
|
||||
&spitzts_device,
|
||||
&spitzbl_device,
|
||||
&spitzled_device,
|
||||
};
|
||||
|
||||
static void __init common_init(void)
|
||||
|
|
|
@ -251,10 +251,19 @@ static struct platform_device tosakbd_device = {
|
|||
.id = -1,
|
||||
};
|
||||
|
||||
/*
|
||||
* Tosa LEDs
|
||||
*/
|
||||
static struct platform_device tosaled_device = {
|
||||
.name = "tosa-led",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&tosascoop_device,
|
||||
&tosascoop_jc_device,
|
||||
&tosakbd_device,
|
||||
&tosaled_device,
|
||||
};
|
||||
|
||||
static void __init tosa_init(void)
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include <asm/procinfo.h>
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/pgtable.h>
|
||||
#include <asm/pgtable-hwdef.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include "proc-macros.S"
|
||||
|
|
|
@ -212,8 +212,6 @@ EXPORT_SYMBOL(sys_open);
|
|||
EXPORT_SYMBOL(sys_exit);
|
||||
EXPORT_SYMBOL(sys_wait4);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
EXPORT_SYMBOL(kernel_flag);
|
||||
#endif
|
||||
|
|
|
@ -79,8 +79,6 @@ EXPORT_SYMBOL(memmove);
|
|||
EXPORT_SYMBOL(__outsl_ns);
|
||||
EXPORT_SYMBOL(__insl_ns);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
#ifdef CONFIG_FRV_OUTOFLINE_ATOMIC_OPS
|
||||
EXPORT_SYMBOL(atomic_test_and_ANDNOT_mask);
|
||||
EXPORT_SYMBOL(atomic_test_and_OR_mask);
|
||||
|
|
|
@ -55,8 +55,6 @@ EXPORT_SYMBOL(memcmp);
|
|||
EXPORT_SYMBOL(memscan);
|
||||
EXPORT_SYMBOL(memmove);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
/*
|
||||
* libgcc functions - functions that are used internally by the
|
||||
* compiler... (prototypes are not correct though, but that
|
||||
|
|
|
@ -415,6 +415,7 @@ void __init init_bsp_APIC(void)
|
|||
void __devinit setup_local_APIC(void)
|
||||
{
|
||||
unsigned long oldvalue, value, ver, maxlvt;
|
||||
int i, j;
|
||||
|
||||
/* Pound the ESR really hard over the head with a big hammer - mbligh */
|
||||
if (esr_disable) {
|
||||
|
@ -451,6 +452,25 @@ void __devinit setup_local_APIC(void)
|
|||
value &= ~APIC_TPRI_MASK;
|
||||
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
|
||||
*/
|
||||
|
@ -732,7 +752,7 @@ static int __init apic_set_verbosity(char *str)
|
|||
printk(KERN_WARNING "APIC Verbosity level %s not recognised"
|
||||
" use apic=verbose or apic=debug\n", str);
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("apic=", apic_set_verbosity);
|
||||
|
|
|
@ -64,13 +64,13 @@ void mcheck_init(struct cpuinfo_x86 *c)
|
|||
static int __init mcheck_disable(char *str)
|
||||
{
|
||||
mce_disabled = 1;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int __init mcheck_enable(char *str)
|
||||
{
|
||||
mce_disabled = -1;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("nomce", mcheck_disable);
|
||||
|
|
|
@ -644,7 +644,7 @@ failed:
|
|||
int __init irqbalance_disable(char *str)
|
||||
{
|
||||
irqbalance_disabled = 1;
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("noirqbalance", irqbalance_disable);
|
||||
|
|
|
@ -781,7 +781,6 @@ unsigned long get_wchan(struct task_struct *p)
|
|||
} while (count++ < 16);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
/*
|
||||
* 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_set_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)
|
||||
{
|
||||
kstack_depth_to_print = simple_strtoul(s, NULL, 0);
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
__setup("kstack=", kstack_setup);
|
||||
|
|
|
@ -44,7 +44,7 @@ __kernel_rt_sigreturn:
|
|||
.LSTARTCIEDLSI1:
|
||||
.long 0 /* CIE ID */
|
||||
.byte 1 /* Version number */
|
||||
.string "zR" /* NUL-terminated augmentation string */
|
||||
.string "zRS" /* NUL-terminated augmentation string */
|
||||
.uleb128 1 /* Code alignment factor */
|
||||
.sleb128 -4 /* Data alignment factor */
|
||||
.byte 8 /* Return address register column */
|
||||
|
|
|
@ -1605,5 +1605,6 @@ sys_call_table:
|
|||
data8 sys_ni_syscall // reserved for pselect
|
||||
data8 sys_ni_syscall // 1295 reserved for ppoll
|
||||
data8 sys_unshare
|
||||
data8 sys_splice
|
||||
|
||||
.org sys_call_table + 8*NR_syscalls // guard against failures to increase NR_syscalls
|
||||
|
|
|
@ -59,6 +59,7 @@ SECTIONS
|
|||
*(.dynbss)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(__ex_table)
|
||||
*(__mca_table)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,54 +9,65 @@
|
|||
* Copyright (C) 1999 VA Linux Systems
|
||||
* 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.
|
||||
* In particular, we now have separate handlers for edge
|
||||
* and level triggered interrupts.
|
||||
* 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector allocation
|
||||
* PCI to vector mapping, shared PCI interrupts.
|
||||
* 00/10/27 D. Mosberger Document things a bit more to make them more 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.
|
||||
* 00/04/19 D. Mosberger Rewritten to mirror more closely the x86 I/O
|
||||
* APIC code. In particular, we now have separate
|
||||
* handlers for edge and level triggered
|
||||
* interrupts.
|
||||
* 00/10/27 Asit Mallick, Goutham Rao <goutham.rao@intel.com> IRQ vector
|
||||
* allocation PCI to vector mapping, shared PCI
|
||||
* interrupts.
|
||||
* 00/10/27 D. Mosberger Document things a bit more to make them more
|
||||
* 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/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt vectors in
|
||||
* iosapic_set_affinity(), initializations for
|
||||
* /proc/irq/#/smp_affinity
|
||||
* 02/01/07 E. Focht <efocht@ess.nec.de> Redirectable interrupt
|
||||
* vectors in iosapic_set_affinity(),
|
||||
* initializations for /proc/irq/#/smp_affinity
|
||||
* 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/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to IOSAPIC mapping
|
||||
* error
|
||||
* 02/04/30 J.I. Lee bug fix in find_iosapic to fix ACPI PCI IRQ to
|
||||
* IOSAPIC mapping error
|
||||
* 02/07/29 T. Kochi Allocate interrupt vectors dynamically
|
||||
* 02/08/04 T. Kochi Cleaned up terminology (irq, global system interrupt, vector, etc.)
|
||||
* 02/09/20 D. Mosberger Simplified by taking advantage of ACPI's pci_irq code.
|
||||
* 02/08/04 T. Kochi Cleaned up terminology (irq, global system
|
||||
* 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.
|
||||
* Remove iosapic_address & gsi_base from external interfaces.
|
||||
* Rationalize __init/__devinit attributes.
|
||||
* Remove iosapic_address & gsi_base from
|
||||
* external interfaces. Rationalize
|
||||
* __init/__devinit attributes.
|
||||
* 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
|
||||
* device is uniquely identified by its bus--, and slot-number (the function
|
||||
* number does not matter here because all functions share the same interrupt
|
||||
* lines).
|
||||
* (1) A PCI device raises one of the four interrupt pins (INTA, INTB, INTC,
|
||||
* INTD). The device is uniquely identified by its bus-, and slot-number
|
||||
* (the function number does not matter here because all functions share
|
||||
* the same interrupt lines).
|
||||
*
|
||||
* (2) The motherboard routes the interrupt line to a pin on a IOSAPIC controller.
|
||||
* Multiple interrupt lines may have to share the same IOSAPIC pin (if they're level
|
||||
* triggered and use the same polarity). Each interrupt line has a unique Global
|
||||
* System Interrupt (GSI) number which can be calculated as the sum of the controller's
|
||||
* base GSI number and the IOSAPIC pin number to which the line connects.
|
||||
* (2) The motherboard routes the interrupt line to a pin on a IOSAPIC
|
||||
* controller. Multiple interrupt lines may have to share the same
|
||||
* IOSAPIC pin (if they're level triggered and use the same polarity).
|
||||
* Each interrupt line has a unique Global System Interrupt (GSI) number
|
||||
* 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
|
||||
* into the IA-64 interrupt vector. This interrupt vector is then sent to the CPU.
|
||||
* (3) The IOSAPIC uses an internal routing table entries (RTEs) to map the
|
||||
* 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
|
||||
* architecture-independent interrupt handling mechanism in Linux. As an
|
||||
* IRQ is a number, we have to have IA-64 interrupt vector number <-> IRQ number
|
||||
* mapping. On smaller systems, we use one-to-one mapping between IA-64 vector and
|
||||
* IRQ. A platform can implement platform_irq_to_vector(irq) and
|
||||
* (4) The kernel recognizes an interrupt as an IRQ. The IRQ interface is
|
||||
* used as architecture-independent interrupt handling mechanism in Linux.
|
||||
* As an IRQ is a number, we have to have
|
||||
* IA-64 interrupt vector number <-> IRQ number mapping. On smaller
|
||||
* 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.
|
||||
* 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
|
||||
*
|
||||
* Note: The term "IRQ" is loosely used everywhere in Linux kernel to describe interrupts.
|
||||
* Now we use "IRQ" only for Linux IRQ's. ISA IRQ (isa_irq) is the only exception in this
|
||||
* source code.
|
||||
* Note: The term "IRQ" is loosely used everywhere in Linux kernel to
|
||||
* describeinterrupts. Now we use "IRQ" only for Linux IRQ's. ISA IRQ
|
||||
* (isa_irq) is the only exception in this source code.
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
|
||||
|
@ -90,7 +101,6 @@
|
|||
#include <asm/ptrace.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
|
||||
#undef DEBUG_INTERRUPT_ROUTING
|
||||
|
||||
#ifdef DEBUG_INTERRUPT_ROUTING
|
||||
|
@ -99,36 +109,46 @@
|
|||
#define DBG(fmt...)
|
||||
#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)
|
||||
|
||||
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 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 */
|
||||
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 */
|
||||
int refcnt; /* reference counter */
|
||||
unsigned int flags; /* flags */
|
||||
} ____cacheline_aligned;
|
||||
|
||||
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 */
|
||||
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 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) */
|
||||
} iosapic_intr_info[IA64_NUM_VECTORS];
|
||||
|
||||
static struct iosapic {
|
||||
char __iomem *addr; /* base address of IOSAPIC */
|
||||
unsigned int gsi_base; /* first GSI assigned to this IOSAPIC */
|
||||
unsigned short num_rte; /* number of RTE in this IOSAPIC */
|
||||
unsigned int gsi_base; /* first GSI assigned to this
|
||||
* IOSAPIC */
|
||||
unsigned short num_rte; /* # of RTEs on this IOSAPIC */
|
||||
int rtes_inuse; /* # of RTEs in use on this IOSAPIC */
|
||||
#ifdef CONFIG_NUMA
|
||||
unsigned short node; /* numa node association via pxm */
|
||||
|
@ -149,7 +169,8 @@ find_iosapic (unsigned int gsi)
|
|||
int 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;
|
||||
}
|
||||
|
||||
|
@ -162,7 +183,8 @@ _gsi_to_vector (unsigned int gsi)
|
|||
struct iosapic_intr_info *info;
|
||||
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)
|
||||
if (rte->gsi_base + rte->rte_index == gsi)
|
||||
return info - iosapic_intr_info;
|
||||
|
@ -185,8 +207,8 @@ gsi_to_irq (unsigned int gsi)
|
|||
unsigned long flags;
|
||||
int irq;
|
||||
/*
|
||||
* XXX fix me: this assumes an identity mapping vetween IA-64 vector and Linux irq
|
||||
* numbers...
|
||||
* XXX fix me: this assumes an identity mapping between IA-64 vector
|
||||
* and Linux irq numbers...
|
||||
*/
|
||||
spin_lock_irqsave(&iosapic_lock, flags);
|
||||
{
|
||||
|
@ -197,7 +219,8 @@ gsi_to_irq (unsigned int gsi)
|
|||
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;
|
||||
|
||||
|
@ -237,7 +260,9 @@ set_rte (unsigned int gsi, unsigned int vector, unsigned int dest, int mask)
|
|||
|
||||
for (irq = 0; irq < NR_IRQS; ++irq)
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -259,7 +284,7 @@ set_rte (unsigned int gsi, unsigned int vector, unsigned int dest, int mask)
|
|||
}
|
||||
|
||||
static void
|
||||
nop (unsigned int vector)
|
||||
nop (unsigned int irq)
|
||||
{
|
||||
/* do nothing... */
|
||||
}
|
||||
|
@ -281,7 +306,8 @@ mask_irq (unsigned int irq)
|
|||
{
|
||||
/* set only the mask bit */
|
||||
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;
|
||||
rte_index = rte->rte_index;
|
||||
iosapic_write(addr, IOSAPIC_RTE_LOW(rte_index), low32);
|
||||
|
@ -306,7 +332,8 @@ unmask_irq (unsigned int irq)
|
|||
spin_lock_irqsave(&iosapic_lock, flags);
|
||||
{
|
||||
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;
|
||||
rte_index = rte->rte_index;
|
||||
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);
|
||||
{
|
||||
low32 = iosapic_intr_info[vec].low32 & ~(7 << IOSAPIC_DELIVERY_SHIFT);
|
||||
low32 = iosapic_intr_info[vec].low32 &
|
||||
~(7 << IOSAPIC_DELIVERY_SHIFT);
|
||||
|
||||
if (redir)
|
||||
/* change delivery mode to lowest priority */
|
||||
low32 |= (IOSAPIC_LOWEST_PRIORITY << IOSAPIC_DELIVERY_SHIFT);
|
||||
low32 |= (IOSAPIC_LOWEST_PRIORITY <<
|
||||
IOSAPIC_DELIVERY_SHIFT);
|
||||
else
|
||||
/* change delivery mode to fixed */
|
||||
low32 |= (IOSAPIC_FIXED << IOSAPIC_DELIVERY_SHIFT);
|
||||
|
||||
iosapic_intr_info[vec].low32 = low32;
|
||||
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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -433,7 +464,8 @@ iosapic_ack_edge_irq (unsigned int irq)
|
|||
* interrupt for real. This prevents IRQ storms from unhandled
|
||||
* 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);
|
||||
}
|
||||
|
||||
|
@ -467,7 +499,8 @@ iosapic_version (char __iomem *addr)
|
|||
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;
|
||||
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++) {
|
||||
info = &iosapic_intr_info[i];
|
||||
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) {
|
||||
vector = i;
|
||||
min_count = info->count;
|
||||
|
@ -506,12 +540,15 @@ iosapic_reassign_vector (int vector)
|
|||
new_vector = assign_irq_vector(AUTO_ASSIGN);
|
||||
if (new_vector < 0)
|
||||
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],
|
||||
sizeof(struct iosapic_intr_info));
|
||||
INIT_LIST_HEAD(&iosapic_intr_info[new_vector].rtes);
|
||||
list_move(iosapic_intr_info[vector].rtes.next, &iosapic_intr_info[new_vector].rtes);
|
||||
memset(&iosapic_intr_info[vector], 0, sizeof(struct iosapic_intr_info));
|
||||
list_move(iosapic_intr_info[vector].rtes.next,
|
||||
&iosapic_intr_info[new_vector].rtes);
|
||||
memset(&iosapic_intr_info[vector], 0,
|
||||
sizeof(struct iosapic_intr_info));
|
||||
iosapic_intr_info[vector].low32 = IOSAPIC_MASK;
|
||||
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
||||
}
|
||||
|
@ -524,7 +561,8 @@ static struct iosapic_rte_info *iosapic_alloc_rte (void)
|
|||
int preallocated = 0;
|
||||
|
||||
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)
|
||||
return NULL;
|
||||
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)) {
|
||||
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);
|
||||
preallocated++;
|
||||
} else {
|
||||
|
@ -575,7 +614,8 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
|||
|
||||
index = find_iosapic(gsi);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -586,7 +626,8 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
|||
if (!rte) {
|
||||
rte = iosapic_alloc_rte();
|
||||
if (!rte) {
|
||||
printk(KERN_WARNING "%s: cannot allocate memory\n", __FUNCTION__);
|
||||
printk(KERN_WARNING "%s: cannot allocate memory\n",
|
||||
__FUNCTION__);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
@ -602,7 +643,9 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
|||
else if (vector_is_shared(vector)) {
|
||||
struct iosapic_intr_info *info = &iosapic_intr_info[vector];
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
@ -619,8 +662,10 @@ register_intr (unsigned int gsi, int vector, unsigned char delivery,
|
|||
idesc = irq_descp(vector);
|
||||
if (idesc->handler != irq_type) {
|
||||
if (idesc->handler != &no_irq_type)
|
||||
printk(KERN_WARNING "%s: changing vector %d from %s to %s\n",
|
||||
__FUNCTION__, vector, idesc->handler->typename, irq_type->typename);
|
||||
printk(KERN_WARNING
|
||||
"%s: changing vector %d from %s to %s\n",
|
||||
__FUNCTION__, vector,
|
||||
idesc->handler->typename, irq_type->typename);
|
||||
idesc->handler = irq_type;
|
||||
}
|
||||
return 0;
|
||||
|
@ -681,7 +726,7 @@ get_target_cpu (unsigned int gsi, int vector)
|
|||
if (!num_cpus)
|
||||
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;
|
||||
|
||||
for (numa_cpu = first_cpu(cpu_mask) ; i < cpu_index ; i++)
|
||||
|
@ -703,7 +748,7 @@ skip_numa_setup:
|
|||
} while (!cpu_online(cpu));
|
||||
|
||||
return cpu_physical_id(cpu);
|
||||
#else
|
||||
#else /* CONFIG_SMP */
|
||||
return cpu_physical_id(smp_processor_id());
|
||||
#endif
|
||||
}
|
||||
|
@ -755,7 +800,8 @@ again:
|
|||
if (list_empty(&iosapic_intr_info[vector].rtes))
|
||||
free_irq_vector(vector);
|
||||
spin_unlock(&iosapic_lock);
|
||||
spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
|
||||
spin_unlock_irqrestore(&irq_descp(vector)->lock,
|
||||
flags);
|
||||
goto again;
|
||||
}
|
||||
|
||||
|
@ -764,7 +810,8 @@ again:
|
|||
polarity, trigger);
|
||||
if (err < 0) {
|
||||
spin_unlock(&iosapic_lock);
|
||||
spin_unlock_irqrestore(&irq_descp(vector)->lock, flags);
|
||||
spin_unlock_irqrestore(&irq_descp(vector)->lock,
|
||||
flags);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -806,7 +853,8 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
*/
|
||||
irq = gsi_to_irq(gsi);
|
||||
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);
|
||||
return;
|
||||
}
|
||||
|
@ -817,7 +865,9 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
spin_lock(&iosapic_lock);
|
||||
{
|
||||
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);
|
||||
goto out;
|
||||
}
|
||||
|
@ -827,7 +877,8 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
|
||||
/* Mask the interrupt */
|
||||
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 */
|
||||
list_del(&rte->rte_list);
|
||||
|
@ -840,7 +891,9 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
trigger = iosapic_intr_info[vector].trigger;
|
||||
polarity = iosapic_intr_info[vector].polarity;
|
||||
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"),
|
||||
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
||||
cpu_logical_id(dest), dest, vector);
|
||||
|
@ -853,12 +906,15 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
idesc->handler = &no_irq_type;
|
||||
|
||||
/* 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;
|
||||
INIT_LIST_HEAD(&iosapic_intr_info[vector].rtes);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -873,7 +929,6 @@ iosapic_unregister_intr (unsigned int gsi)
|
|||
|
||||
/*
|
||||
* 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
|
||||
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;
|
||||
break;
|
||||
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;
|
||||
}
|
||||
|
||||
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, gsi, (trigger == IOSAPIC_EDGE ? "edge" : "level"),
|
||||
(polarity == IOSAPIC_POL_HIGH ? "high" : "low"),
|
||||
|
@ -923,10 +981,8 @@ iosapic_register_platform_intr (u32 int_type, unsigned int gsi,
|
|||
return vector;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* 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
|
||||
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) {
|
||||
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;
|
||||
if (pcat_compat) {
|
||||
/*
|
||||
* Disable the compatibility mode interrupts (8259 style), needs IN/OUT support
|
||||
* enabled.
|
||||
* Disable the compatibility mode interrupts (8259 style),
|
||||
* 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, 0x21);
|
||||
}
|
||||
|
@ -1004,10 +1063,7 @@ iosapic_check_gsi_range (unsigned int gsi_base, unsigned int ver)
|
|||
base = iosapic_lists[index].gsi_base;
|
||||
end = base + iosapic_lists[index].num_rte - 1;
|
||||
|
||||
if (gsi_base < base && gsi_end < base)
|
||||
continue;/* OK */
|
||||
|
||||
if (gsi_base > end && gsi_end > end)
|
||||
if (gsi_end < base || end < gsi_base)
|
||||
continue; /* OK */
|
||||
|
||||
return -EBUSY;
|
||||
|
@ -1053,12 +1109,14 @@ iosapic_init (unsigned long phys_addr, unsigned int gsi_base)
|
|||
|
||||
if ((gsi_base == 0) && pcat_compat) {
|
||||
/*
|
||||
* Map the legacy ISA devices into the IOSAPIC data. Some of these may
|
||||
* get reprogrammed later on with data from the ACPI Interrupt Source
|
||||
* Override table.
|
||||
* Map the legacy ISA devices into the IOSAPIC data. Some of
|
||||
* these may get reprogrammed later on with data from the ACPI
|
||||
* Interrupt Source Override table.
|
||||
*/
|
||||
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;
|
||||
}
|
||||
|
@ -1081,7 +1139,8 @@ iosapic_remove (unsigned int gsi_base)
|
|||
|
||||
if (iosapic_lists[index].rtes_inuse) {
|
||||
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);
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -240,7 +240,7 @@ cache_info(char *page)
|
|||
}
|
||||
p += sprintf(p,
|
||||
"%s Cache level %lu:\n"
|
||||
"\tSize : %lu bytes\n"
|
||||
"\tSize : %u bytes\n"
|
||||
"\tAttributes : ",
|
||||
cache_types[j+cci.pcci_unified], i+1,
|
||||
cci.pcci_cache_size);
|
||||
|
@ -648,9 +648,9 @@ frequency_info(char *page)
|
|||
if (ia64_pal_freq_ratios(&proc, &bus, &itc) != 0) return 0;
|
||||
|
||||
p += sprintf(p,
|
||||
"Processor/Clock ratio : %ld/%ld\n"
|
||||
"Bus/Clock ratio : %ld/%ld\n"
|
||||
"ITC/Clock ratio : %ld/%ld\n",
|
||||
"Processor/Clock ratio : %d/%d\n"
|
||||
"Bus/Clock ratio : %d/%d\n"
|
||||
"ITC/Clock ratio : %d/%d\n",
|
||||
proc.num, proc.den, bus.num, bus.den, itc.num, itc.den);
|
||||
|
||||
return p - page;
|
||||
|
|
|
@ -188,7 +188,7 @@ ia64_init_itm (void)
|
|||
itc_freq = (platform_base_freq*itc_ratio.num)/itc_ratio.den;
|
||||
|
||||
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(),
|
||||
platform_base_freq / 1000000, (platform_base_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>
|
||||
* Populate cpu entries in sysfs for non-numa systems as well
|
||||
* Intel Corporation - Ashok Raj
|
||||
* 02/27/2006 Zhang, Yanmin
|
||||
* Populate cpu cache entries in sysfs for cpu cache info
|
||||
*/
|
||||
|
||||
#include <linux/config.h>
|
||||
|
@ -19,6 +21,7 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/bootmem.h>
|
||||
#include <linux/nodemask.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <asm/mmzone.h>
|
||||
#include <asm/numa.h>
|
||||
#include <asm/cpu.h>
|
||||
|
@ -101,3 +104,367 @@ out:
|
|||
}
|
||||
|
||||
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 = .;
|
||||
}
|
||||
|
||||
/* MCA table */
|
||||
. = ALIGN(16);
|
||||
__mca_table : AT(ADDR(__mca_table) - LOAD_OFFSET)
|
||||
{
|
||||
__start___mca_table = .;
|
||||
*(__mca_table)
|
||||
__stop___mca_table = .;
|
||||
}
|
||||
|
||||
/* Global data */
|
||||
_data = .;
|
||||
|
||||
|
@ -130,15 +139,6 @@ SECTIONS
|
|||
__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)
|
||||
{
|
||||
__start___vtop_patchlist = .;
|
||||
|
|
|
@ -109,6 +109,7 @@ lazy_mmu_prot_update (pte_t pte)
|
|||
{
|
||||
unsigned long addr;
|
||||
struct page *page;
|
||||
unsigned long order;
|
||||
|
||||
if (!pte_exec(pte))
|
||||
return; /* not an executable page... */
|
||||
|
@ -119,7 +120,12 @@ lazy_mmu_prot_update (pte_t pte)
|
|||
if (test_bit(PG_arch_1, &page->flags))
|
||||
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 */
|
||||
}
|
||||
|
||||
|
|
|
@ -21,12 +21,12 @@ __ioremap (unsigned long offset, unsigned long size)
|
|||
void __iomem *
|
||||
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))
|
||||
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
|
||||
* 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;
|
||||
start &= ~((1UL << nbits) - 1);
|
||||
|
||||
# ifdef CONFIG_SMP
|
||||
platform_global_tlb_purge(mm, start, end, nbits);
|
||||
# else
|
||||
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 {
|
||||
ia64_ptcl(start, (nbits<<2));
|
||||
start += (1UL << nbits);
|
||||
} while (start < end);
|
||||
preempt_enable();
|
||||
# endif
|
||||
|
||||
ia64_srlz_i(); /* srlz.i implies srlz.d */
|
||||
}
|
||||
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))
|
||||
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);
|
||||
module_id = geo_module(geoid);
|
||||
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;
|
||||
|
||||
if (cpu != SN_HWPERF_ARG_ANY_CPU) {
|
||||
if (cpu >= num_online_cpus() || !cpu_online(cpu)) {
|
||||
if (cpu >= NR_CPUS || !cpu_online(cpu)) {
|
||||
r = -EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
|
|
@ -79,4 +79,3 @@ EXPORT_SYMBOL(__down_failed_interruptible);
|
|||
EXPORT_SYMBOL(__down_failed_trylock);
|
||||
EXPORT_SYMBOL(__up_wakeup);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
|
|
@ -57,8 +57,6 @@ EXPORT_SYMBOL(__down_failed_interruptible);
|
|||
EXPORT_SYMBOL(__down_failed_trylock);
|
||||
EXPORT_SYMBOL(__up_wakeup);
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
/*
|
||||
* libgcc functions - functions that are used internally by the
|
||||
* compiler... (prototypes are not correct though, but that
|
||||
|
|
|
@ -419,4 +419,3 @@ unsigned long get_wchan(struct task_struct *p)
|
|||
return pc;
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
|
|
@ -177,14 +177,10 @@ config ARCH_DISCONTIGMEM_DEFAULT
|
|||
def_bool y
|
||||
depends on ARCH_DISCONTIGMEM_ENABLE
|
||||
|
||||
source "kernel/Kconfig.preempt"
|
||||
source "kernel/Kconfig.hz"
|
||||
source "mm/Kconfig"
|
||||
|
||||
config PREEMPT
|
||||
bool
|
||||
# bool "Preemptible Kernel"
|
||||
default n
|
||||
|
||||
config COMPAT
|
||||
def_bool y
|
||||
depends on 64BIT
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:04:34 2005
|
||||
# Linux kernel version: 2.6.16-pa6
|
||||
# Sun Mar 26 19:59:51 2006
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -10,14 +10,11 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_CLEAN_COMPILE is not set
|
||||
CONFIG_BROKEN=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -32,17 +29,18 @@ CONFIG_POSIX_MQUEUE=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -51,8 +49,10 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
|||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -65,6 +65,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
|||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
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
|
||||
#
|
||||
|
@ -75,6 +92,10 @@ CONFIG_PA7100LC=y
|
|||
# CONFIG_PA8X00 is not set
|
||||
CONFIG_PA11=y
|
||||
# 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_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
|
@ -86,7 +107,7 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
#
|
||||
|
@ -130,6 +151,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -165,7 +187,12 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -182,64 +209,6 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
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)
|
||||
|
@ -250,6 +219,11 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -263,8 +237,11 @@ CONFIG_LLC2=m
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -304,6 +281,7 @@ CONFIG_PARPORT=y
|
|||
CONFIG_PARPORT_PC=m
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
CONFIG_PARPORT_NOT_PC=y
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# CONFIG_PARPORT_1284 is not set
|
||||
|
||||
|
@ -314,7 +292,6 @@ CONFIG_PARPORT_GSC=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_PARIDE is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
|
@ -325,14 +302,6 @@ CONFIG_BLK_DEV_RAM_COUNT=16
|
|||
CONFIG_BLK_DEV_RAM_SIZE=6144
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# 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
|
||||
|
||||
#
|
||||
|
@ -376,6 +345,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_PPA is not set
|
||||
# CONFIG_SCSI_IMM is not set
|
||||
|
@ -407,7 +377,6 @@ CONFIG_MD_RAID1=m
|
|||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
# CONFIG_IEEE1394 is not set
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
|
@ -471,6 +440,7 @@ CONFIG_PPP_ASYNC=m
|
|||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
CONFIG_PPP_MPPE=m
|
||||
CONFIG_PPPOE=m
|
||||
# CONFIG_SLIP 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_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
CONFIG_KEYBOARD_HIL_OLD=y
|
||||
# CONFIG_KEYBOARD_HIL is not set
|
||||
# CONFIG_KEYBOARD_HIL_OLD is not set
|
||||
CONFIG_KEYBOARD_HIL=y
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
CONFIG_MOUSE_SERIAL=m
|
||||
|
@ -554,6 +524,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=17
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
@ -598,12 +569,20 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -640,7 +619,6 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
CONFIG_FB_TILEBLITTING=y
|
||||
|
@ -655,6 +633,7 @@ CONFIG_DUMMY_CONSOLE=y
|
|||
CONFIG_DUMMY_CONSOLE_COLUMNS=128
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=48
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_STI_CONSOLE=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
|
@ -695,6 +674,8 @@ CONFIG_SND_OSSEMUL=y
|
|||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_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_DEBUG is not set
|
||||
|
||||
|
@ -723,6 +704,10 @@ CONFIG_SND_HARMONY=y
|
|||
# CONFIG_USB_ARCH_HAS_HCD is not set
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
|
@ -736,10 +721,9 @@ CONFIG_SND_HARMONY=y
|
|||
#
|
||||
# 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_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -800,10 +785,10 @@ CONFIG_PROC_FS=y
|
|||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -821,7 +806,6 @@ CONFIG_RAMFS=y
|
|||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
CONFIG_UFS_FS=m
|
||||
# CONFIG_UFS_FS_WRITE is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
|
@ -917,18 +901,22 @@ CONFIG_OPROFILE=m
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP 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
|
||||
|
|
|
@ -1031,8 +1031,8 @@ CONFIG_NLS_CODEPAGE_850=m
|
|||
# CONFIG_NLS_ISO8859_8 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
|
|
|
@ -939,10 +939,10 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
CONFIG_NLS=y
|
||||
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_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_855 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_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 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_13 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_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
CONFIG_NLS_UTF8=m
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:06:31 2005
|
||||
# Linux kernel version: 2.6.16-pa6
|
||||
# Sun Mar 26 20:03:29 2006
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -10,14 +10,11 @@ CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
|||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_CLEAN_COMPILE is not set
|
||||
CONFIG_BROKEN=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -32,28 +29,30 @@ CONFIG_SYSVIPC=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -66,6 +65,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
|||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
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
|
||||
#
|
||||
|
@ -78,6 +94,10 @@ CONFIG_PA20=y
|
|||
CONFIG_PREFETCH=y
|
||||
# CONFIG_64BIT 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_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
|
@ -89,7 +109,7 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
#
|
||||
|
@ -135,6 +155,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -175,7 +196,12 @@ CONFIG_INET6_TUNNEL=m
|
|||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
CONFIG_NETFILTER_DEBUG=y
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
# CONFIG_NETFILTER_XTABLES is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
|
@ -192,87 +218,11 @@ CONFIG_IP_NF_TFTP=m
|
|||
CONFIG_IP_NF_AMANDA=m
|
||||
# CONFIG_IP_NF_PPTP is not set
|
||||
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)
|
||||
#
|
||||
# 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)
|
||||
|
@ -283,6 +233,11 @@ CONFIG_IP6_NF_MANGLE=m
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE 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_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -341,7 +299,6 @@ CONFIG_FW_LOADER=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_CPQ_DA is not set
|
||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
|
@ -355,14 +312,6 @@ CONFIG_BLK_DEV_CRYPTOLOOP=m
|
|||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
# 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
|
||||
|
||||
#
|
||||
|
@ -458,6 +407,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX 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_AIC79XX is not set
|
||||
# CONFIG_SCSI_DPT_I2O is not set
|
||||
# CONFIG_SCSI_ADVANSYS is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
|
@ -476,18 +425,18 @@ CONFIG_SCSI_SATA=y
|
|||
CONFIG_SCSI_ATA_PIIX=m
|
||||
# CONFIG_SCSI_SATA_MV 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_PROMISE=m
|
||||
# CONFIG_SCSI_SATA_SX4 is not set
|
||||
CONFIG_SCSI_SATA_SIL=m
|
||||
# CONFIG_SCSI_SATA_SIL24 is not set
|
||||
# CONFIG_SCSI_SATA_SIS is not set
|
||||
# CONFIG_SCSI_SATA_ULI is not set
|
||||
CONFIG_SCSI_SATA_VIA=m
|
||||
# CONFIG_SCSI_SATA_VITESSE is not set
|
||||
CONFIG_SCSI_SATA_INTEL_COMBINED=y
|
||||
# CONFIG_SCSI_CPQFCTS 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_IPS 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_DEFAULT_TAGS=16
|
||||
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_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
# 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_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
|
@ -633,6 +575,7 @@ CONFIG_E1000=m
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=m
|
||||
|
@ -668,6 +611,7 @@ CONFIG_PPP_ASYNC=m
|
|||
CONFIG_PPP_SYNC_TTY=m
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
CONFIG_PPPOE=m
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_NET_FC is not set
|
||||
|
@ -744,6 +688,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
@ -753,7 +698,6 @@ CONFIG_SERIAL_8250_SHARE_IRQ=y
|
|||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_MUX is not set
|
||||
# CONFIG_PDC_CONSOLE is not set
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
|
@ -788,12 +732,19 @@ CONFIG_MAX_RAW_DEVS=256
|
|||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -830,7 +781,6 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS 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_IMSTT is not set
|
||||
CONFIG_FB_STI=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA 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_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA 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
|
||||
|
||||
#
|
||||
|
@ -866,6 +814,7 @@ CONFIG_DUMMY_CONSOLE=y
|
|||
CONFIG_DUMMY_CONSOLE_COLUMNS=160
|
||||
CONFIG_DUMMY_CONSOLE_ROWS=64
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_STI_CONSOLE=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
|
@ -898,23 +847,27 @@ CONFIG_SND_OSSEMUL=y
|
|||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_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_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_AC97_CODEC=y
|
||||
CONFIG_SND_AC97_BUS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_VIRMIDI is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
CONFIG_SND_AC97_CODEC=y
|
||||
CONFIG_SND_AC97_BUS=y
|
||||
|
||||
#
|
||||
# PCI devices
|
||||
#
|
||||
CONFIG_SND_AD1889=y
|
||||
# CONFIG_SND_AD1889_OPL3 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP 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_AZT3328 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_CS46XX is not set
|
||||
# CONFIG_SND_EMU10K1 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_ENS1371 is not set
|
||||
# CONFIG_SND_ES1938 is not set
|
||||
# CONFIG_SND_ES1968 is not set
|
||||
# CONFIG_SND_MAESTRO3 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_ICE1724 is not set
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
# CONFIG_SND_INTEL8X0M is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_PCXHR is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_SONICVIBES is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
|
||||
#
|
||||
# USB devices
|
||||
|
@ -998,12 +950,15 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||
# USB Device Class drivers
|
||||
#
|
||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||
# CONFIG_USB_BLUETOOTH_TTY is not set
|
||||
# CONFIG_USB_ACM is not set
|
||||
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_DEBUG is not set
|
||||
|
@ -1015,12 +970,15 @@ CONFIG_USB_STORAGE_USBAT=y
|
|||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
||||
# CONFIG_USB_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
#
|
||||
CONFIG_USB_HID=y
|
||||
CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_HIDINPUT_POWERBOOK is not set
|
||||
# CONFIG_HID_FF is not set
|
||||
CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_AIPTEK is not set
|
||||
|
@ -1034,6 +992,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD 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_APPLETOUCH is not set
|
||||
|
||||
|
@ -1108,7 +1067,7 @@ CONFIG_USB_LEGOTOWER=m
|
|||
# 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_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -1164,10 +1124,10 @@ CONFIG_PROC_FS=y
|
|||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -1225,10 +1185,10 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
CONFIG_NLS=y
|
||||
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_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_855 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_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
CONFIG_NLS_ASCII=m
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 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_13 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_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
CONFIG_NLS_UTF8=m
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
|
@ -1274,18 +1234,22 @@ CONFIG_OPROFILE=m
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP 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
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc5-pa1
|
||||
# Fri Oct 21 23:01:33 2005
|
||||
# Linux kernel version: 2.6.16-pa6
|
||||
# Sun Mar 26 19:50:07 2006
|
||||
#
|
||||
CONFIG_PARISC=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -15,7 +15,6 @@ CONFIG_GENERIC_IRQ_PROBE=y
|
|||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
|
@ -30,17 +29,18 @@ CONFIG_SYSVIPC=y
|
|||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_HOTPLUG is not set
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
|
@ -49,14 +49,33 @@ CONFIG_CC_ALIGN_FUNCTIONS=0
|
|||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
# 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
|
||||
#
|
||||
|
@ -67,6 +86,10 @@ CONFIG_PA7000=y
|
|||
# CONFIG_PA8X00 is not set
|
||||
CONFIG_PA11=y
|
||||
# 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_250=y
|
||||
# CONFIG_HZ_1000 is not set
|
||||
|
@ -78,7 +101,7 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_PREEMPT is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_HPUX is not set
|
||||
|
||||
#
|
||||
|
@ -132,6 +155,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -174,6 +198,11 @@ CONFIG_IPV6=y
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -186,8 +215,11 @@ CONFIG_IPV6=y
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -228,6 +260,7 @@ CONFIG_PARPORT_PC=y
|
|||
# CONFIG_PARPORT_SERIAL is not set
|
||||
# CONFIG_PARPORT_PC_FIFO is not set
|
||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||
CONFIG_PARPORT_NOT_PC=y
|
||||
CONFIG_PARPORT_GSC=y
|
||||
# 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_INITRD=y
|
||||
# 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
|
||||
|
||||
#
|
||||
|
@ -305,6 +330,7 @@ CONFIG_SCSI_SPI_ATTRS=y
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX 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_DEFAULT_TAGS=16
|
||||
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_ZALON=y
|
||||
CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS=8
|
||||
|
@ -340,13 +366,7 @@ CONFIG_SCSI_NCR53C8XX_SYNC=20
|
|||
# CONFIG_SCSI_NCR53C8XX_PROFILE is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
# 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_QLA_FC is not set
|
||||
# CONFIG_SCSI_LPFC is not set
|
||||
# CONFIG_SCSI_SIM710 is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
|
@ -471,6 +491,7 @@ CONFIG_ACENIC=y
|
|||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SKY2 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
|
@ -562,13 +583,13 @@ CONFIG_INPUT_KEYBOARD=y
|
|||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD 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_INPUT_MOUSE=y
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
# CONFIG_MOUSE_HIL is not set
|
||||
CONFIG_MOUSE_HIL=y
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
# CONFIG_JOYSTICK_ANALOG is not set
|
||||
# CONFIG_JOYSTICK_A3D is not set
|
||||
|
@ -628,6 +649,7 @@ CONFIG_HW_CONSOLE=y
|
|||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=13
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
|
@ -675,12 +697,19 @@ CONFIG_GEN_RTC=y
|
|||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
|
@ -691,6 +720,7 @@ CONFIG_GEN_RTC=y
|
|||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_F71805F 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_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS 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_IMSTT is not set
|
||||
CONFIG_FB_STI=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_NVIDIA is not set
|
||||
# CONFIG_FB_RIVA 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_3DFX is not set
|
||||
# CONFIG_FB_VOODOO1 is not set
|
||||
# CONFIG_FB_CYBLA is not set
|
||||
# CONFIG_FB_TRIDENT is not set
|
||||
# CONFIG_FB_S1D13XXX 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_ROWS=64
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_STI_CONSOLE=y
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONTS=y
|
||||
# CONFIG_FONT_8x8 is not set
|
||||
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
|
||||
#
|
||||
# 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
|
||||
|
||||
#
|
||||
|
@ -781,23 +822,27 @@ CONFIG_SND_OSSEMUL=y
|
|||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_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_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_AC97_CODEC=y
|
||||
CONFIG_SND_AC97_BUS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_VIRMIDI is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
CONFIG_SND_AC97_CODEC=y
|
||||
CONFIG_SND_AC97_BUS=y
|
||||
|
||||
#
|
||||
# PCI devices
|
||||
#
|
||||
CONFIG_SND_AD1889=y
|
||||
# CONFIG_SND_AD1889_OPL3 is not set
|
||||
# CONFIG_SND_ALI5451 is not set
|
||||
# CONFIG_SND_ATIIXP 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_AZT3328 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_CS46XX is not set
|
||||
# CONFIG_SND_EMU10K1 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_ENS1371 is not set
|
||||
# CONFIG_SND_ES1938 is not set
|
||||
# CONFIG_SND_ES1968 is not set
|
||||
# CONFIG_SND_MAESTRO3 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_ICE1724 is not set
|
||||
# CONFIG_SND_INTEL8X0 is not set
|
||||
# CONFIG_SND_INTEL8X0M is not set
|
||||
# CONFIG_SND_KORG1212 is not set
|
||||
# CONFIG_SND_MAESTRO3 is not set
|
||||
# CONFIG_SND_MIXART is not set
|
||||
# CONFIG_SND_NM256 is not set
|
||||
# CONFIG_SND_PCXHR is not set
|
||||
# CONFIG_SND_RME32 is not set
|
||||
# CONFIG_SND_RME96 is not set
|
||||
# CONFIG_SND_RME9652 is not set
|
||||
# CONFIG_SND_SONICVIBES is not set
|
||||
# CONFIG_SND_TRIDENT is not set
|
||||
# CONFIG_SND_VIA82XX is not set
|
||||
# CONFIG_SND_VIA82XX_MODEM is not set
|
||||
# CONFIG_SND_VX222 is not set
|
||||
# CONFIG_SND_HDA_INTEL is not set
|
||||
# CONFIG_SND_YMFPCI is not set
|
||||
|
||||
#
|
||||
# USB devices
|
||||
|
@ -888,14 +932,18 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||
# USB Device Class drivers
|
||||
#
|
||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||
# CONFIG_USB_BLUETOOTH_TTY is not set
|
||||
# CONFIG_USB_ACM 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_LIBUSUAL is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
|
@ -918,6 +966,7 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD 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_APPLETOUCH is not set
|
||||
|
||||
|
@ -994,7 +1043,7 @@ CONFIG_USB_MON=y
|
|||
# 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_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
|
@ -1045,6 +1095,7 @@ CONFIG_TMPFS=y
|
|||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -1151,18 +1202,22 @@ CONFIG_OPROFILE=y
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=15
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_IOREMAP 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
|
||||
|
|
|
@ -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) &&
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ void flush_dcache_page(struct page *page)
|
|||
return;
|
||||
}
|
||||
|
||||
flush_kernel_dcache_page(page_address(page));
|
||||
flush_kernel_dcache_page(page);
|
||||
|
||||
if (!mapping)
|
||||
return;
|
||||
|
@ -317,7 +317,7 @@ EXPORT_SYMBOL(flush_dcache_page);
|
|||
|
||||
/* Defined in arch/parisc/kernel/pacache.S */
|
||||
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_kernel_icache_range_asm);
|
||||
|
||||
|
|
|
@ -563,10 +563,10 @@
|
|||
extrd,u,*= \pte,_PAGE_GATEWAY_BIT+32,1,%r0
|
||||
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
|
||||
extrd,u \pte,56,32,\pte
|
||||
extrd,s \pte,(63-PAGE_SHIFT)+(63-58),64-PAGE_SHIFT,\pte
|
||||
.endm
|
||||
|
||||
/* 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 */
|
||||
|
||||
depi 0,31,12,\pte
|
||||
depi 0,31,PAGE_SHIFT,\pte
|
||||
extru \pte,24,25,\pte
|
||||
|
||||
.endm
|
||||
|
@ -1014,14 +1014,21 @@ intr_restore:
|
|||
nop
|
||||
nop
|
||||
|
||||
#ifndef CONFIG_PREEMPT
|
||||
# define intr_do_preempt intr_restore
|
||||
#endif /* !CONFIG_PREEMPT */
|
||||
|
||||
.import schedule,code
|
||||
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
|
||||
CMPIB= 0,%r20,intr_restore /* backward */
|
||||
CMPIB= 0, %r20, intr_do_preempt
|
||||
nop
|
||||
LDREG PT_IASQ1(%r16), %r20
|
||||
CMPIB= 0,%r20,intr_restore /* backward */
|
||||
CMPIB= 0, %r20, intr_do_preempt
|
||||
nop
|
||||
|
||||
#ifdef CONFIG_64BIT
|
||||
|
@ -1037,6 +1044,32 @@ intr_do_resched:
|
|||
#endif
|
||||
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
|
||||
intr_do_signal:
|
||||
|
|
|
@ -621,9 +621,9 @@ __clear_user_page_asm:
|
|||
|
||||
.procend
|
||||
|
||||
.export flush_kernel_dcache_page
|
||||
.export flush_kernel_dcache_page_asm
|
||||
|
||||
flush_kernel_dcache_page:
|
||||
flush_kernel_dcache_page_asm:
|
||||
.proc
|
||||
.callinfo NO_CALLS
|
||||
.entry
|
||||
|
|
|
@ -30,22 +30,7 @@
|
|||
#include <linux/syscalls.h>
|
||||
|
||||
#include <linux/string.h>
|
||||
EXPORT_SYMBOL(memchr);
|
||||
EXPORT_SYMBOL(memcmp);
|
||||
EXPORT_SYMBOL(memmove);
|
||||
EXPORT_SYMBOL(memscan);
|
||||
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);
|
||||
|
||||
#include <asm/atomic.h>
|
||||
|
@ -82,16 +67,12 @@ EXPORT_SYMBOL($global$);
|
|||
#endif
|
||||
|
||||
#include <asm/io.h>
|
||||
EXPORT_SYMBOL(__ioremap);
|
||||
EXPORT_SYMBOL(iounmap);
|
||||
EXPORT_SYMBOL(memcpy_toio);
|
||||
EXPORT_SYMBOL(memcpy_fromio);
|
||||
EXPORT_SYMBOL(memset_io);
|
||||
|
||||
#include <asm/unistd.h>
|
||||
EXPORT_SYMBOL(sys_open);
|
||||
EXPORT_SYMBOL(sys_lseek);
|
||||
EXPORT_SYMBOL(sys_read);
|
||||
EXPORT_SYMBOL(sys_write);
|
||||
|
||||
#include <asm/semaphore.h>
|
||||
|
|
|
@ -5,9 +5,8 @@
|
|||
* Copyright (C) 2002-2004 Thibaut VARENE <varenet@parisc-linux.org>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
* it under the terms of the GNU General Public License, version 2, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
|
|
@ -805,7 +805,7 @@ static int perf_write_image(uint64_t *memaddr)
|
|||
return -1;
|
||||
}
|
||||
|
||||
runway = ioremap(cpu_device->hpa.start, 4096);
|
||||
runway = ioremap_nocache(cpu_device->hpa.start, 4096);
|
||||
|
||||
/* Merge intrigue bits into Runway STATUS 0 */
|
||||
tmp64 = __raw_readq(runway + RUNWAY_STATUS) & 0xffecfffffffffffful;
|
||||
|
|
|
@ -287,7 +287,7 @@
|
|||
ENTRY_SAME(chown) /* 180 */
|
||||
/* setsockopt() used by iptables: SO_SET_REPLACE/SO_SET_ADD_COUNTERS */
|
||||
ENTRY_COMP(setsockopt)
|
||||
ENTRY_SAME(getsockopt)
|
||||
ENTRY_COMP(getsockopt)
|
||||
ENTRY_COMP(sendmsg)
|
||||
ENTRY_COMP(recvmsg)
|
||||
ENTRY_SAME(semop) /* 185 */
|
||||
|
|
|
@ -263,11 +263,7 @@ static const struct iomap_ops iomem_ops = {
|
|||
|
||||
const struct iomap_ops *iomap_ops[8] = {
|
||||
[0] = &ioport_ops,
|
||||
#ifdef CONFIG_DEBUG_IOREMAP
|
||||
[6] = &iomem_ops,
|
||||
#else
|
||||
[7] = &iomem_ops
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -1013,9 +1013,9 @@ void flush_tlb_all(void)
|
|||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
{
|
||||
#if 0
|
||||
if (start < end)
|
||||
printk(KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||
if (start >= end)
|
||||
return;
|
||||
printk(KERN_INFO "Freeing initrd memory: %ldk freed\n", (end - start) >> 10);
|
||||
for (; start < end; start += PAGE_SIZE) {
|
||||
ClearPageReserved(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++;
|
||||
totalram_pages++;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -72,7 +72,6 @@ remap_area_pmd(pmd_t *pmd, unsigned long address, unsigned long size,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#if USE_HPPA_IOREMAP
|
||||
static int
|
||||
remap_area_pages(unsigned long address, unsigned long phys_addr,
|
||||
unsigned long size, unsigned long flags)
|
||||
|
@ -114,31 +113,6 @@ remap_area_pages(unsigned long address, unsigned long phys_addr,
|
|||
|
||||
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):
|
||||
|
@ -154,26 +128,19 @@ EXPORT_SYMBOL(__raw_bad_addr);
|
|||
*/
|
||||
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;
|
||||
struct vm_struct *area;
|
||||
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 */
|
||||
last_addr = phys_addr + size - 1;
|
||||
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);
|
||||
#endif
|
||||
}
|
||||
EXPORT_SYMBOL(__ioremap);
|
||||
|
||||
void iounmap(void __iomem *addr)
|
||||
{
|
||||
#if !(USE_HPPA_IOREMAP)
|
||||
return;
|
||||
#else
|
||||
if (addr > high_memory)
|
||||
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)
|
||||
elfcorehdr_addr = memparse(p, &p);
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
__setup("elfcorehdr=", parse_elfcorehdr);
|
||||
#endif
|
||||
|
@ -71,7 +71,7 @@ static int __init parse_savemaxmem(char *p)
|
|||
if (p)
|
||||
saved_max_pfn = (memparse(p, &p) >> PAGE_SHIFT) - 1;
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
__setup("savemaxmem=", parse_savemaxmem);
|
||||
|
||||
|
|
|
@ -834,7 +834,6 @@ unsigned long get_wchan(struct task_struct *p)
|
|||
} while (count++ < 16);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(get_wchan);
|
||||
|
||||
static int kstack_depth_to_print = 64;
|
||||
|
||||
|
|
|
@ -261,7 +261,7 @@ V_FUNCTION_END(__kernel_sigtramp_rt32)
|
|||
.Lcie_start:
|
||||
.long 0 /* CIE ID */
|
||||
.byte 1 /* Version number */
|
||||
.string "zR" /* NUL-terminated augmentation string */
|
||||
.string "zRS" /* NUL-terminated augmentation string */
|
||||
.uleb128 4 /* Code alignment factor */
|
||||
.sleb128 -4 /* Data alignment factor */
|
||||
.byte 67 /* Return address register column, ap */
|
||||
|
|
|
@ -263,7 +263,7 @@ V_FUNCTION_END(__kernel_sigtramp_rt64)
|
|||
.Lcie_start:
|
||||
.long 0 /* CIE ID */
|
||||
.byte 1 /* Version number */
|
||||
.string "zR" /* NUL-terminated augmentation string */
|
||||
.string "zRS" /* NUL-terminated augmentation string */
|
||||
.uleb128 4 /* Code alignment factor */
|
||||
.sleb128 -8 /* Data alignment factor */
|
||||
.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);
|
||||
|
||||
for_each_cpu(i) {
|
||||
for_each_possible_cpu(i) {
|
||||
lowcore_ptr[i] = (struct _lowcore *)
|
||||
__get_free_pages(GFP_KERNEL|GFP_DMA,
|
||||
sizeof(void*) == 8 ? 1 : 0);
|
||||
|
@ -831,7 +831,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
#endif
|
||||
set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]);
|
||||
|
||||
for_each_cpu(cpu)
|
||||
for_each_possible_cpu(cpu)
|
||||
if (cpu != smp_processor_id())
|
||||
smp_create_idle(cpu);
|
||||
}
|
||||
|
@ -868,7 +868,7 @@ static int __init topology_init(void)
|
|||
int cpu;
|
||||
int ret;
|
||||
|
||||
for_each_cpu(cpu) {
|
||||
for_each_possible_cpu(cpu) {
|
||||
ret = register_cpu(&per_cpu(cpu_devices, cpu), cpu, NULL);
|
||||
if (ret)
|
||||
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) \
|
||||
{ \
|
||||
x##_disabled = 1; \
|
||||
return 0; \
|
||||
return 1; \
|
||||
} \
|
||||
__setup("no" __stringify(x), x##_setup);
|
||||
|
||||
|
|
|
@ -401,7 +401,7 @@ static int __init topology_init(void)
|
|||
{
|
||||
int cpu_id;
|
||||
|
||||
for_each_cpu(cpu_id)
|
||||
for_each_possible_cpu(cpu_id)
|
||||
register_cpu(&cpu[cpu_id], cpu_id, NULL);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -22,6 +22,9 @@ config SBUS
|
|||
config PCI
|
||||
bool
|
||||
|
||||
config PCMCIA
|
||||
bool
|
||||
|
||||
config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
|
|
@ -20,7 +20,7 @@ core-y += $(ARCH_DIR)/kernel/ \
|
|||
|
||||
# Have to precede the include because the included Makefiles reference them.
|
||||
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))
|
||||
|
||||
# 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) \
|
||||
-DELF_FORMAT="$(ELF_FORMAT)" $(CPP_MODE-y) \
|
||||
-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.
|
||||
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/kern_constants.h $(ARCH_DIR)/Kconfig.arch
|
||||
|
||||
MRPROPER_FILES += $(SYMLINK_HEADERS) $(ARCH_SYMLINKS) \
|
||||
$(addprefix $(ARCH_DIR)/kernel/,$(KERN_SYMLINKS)) $(ARCH_DIR)/os
|
||||
MRPROPER_FILES += $(ARCH_SYMLINKS)
|
||||
|
||||
archclean:
|
||||
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
# Copyright 2003 - 2004 Pathscale, Inc
|
||||
# Released under the GPL
|
||||
|
||||
libs-y += arch/um/sys-x86_64/
|
||||
core-y += arch/um/sys-x86_64/
|
||||
START := 0x60000000
|
||||
|
||||
#We #undef __x86_64__ for kernelspace, not for userspace where
|
||||
|
|
|
@ -95,18 +95,7 @@ static struct transport daemon_transport = {
|
|||
static int register_daemon(void)
|
||||
{
|
||||
register_transport(&daemon_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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);
|
||||
|
||||
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)
|
||||
{
|
||||
/*
|
||||
|
@ -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,
|
||||
unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
void __user *argp= (void __user *)arg;
|
||||
static struct watchdog_info ident = {
|
||||
WDIOC_SETTIMEOUT,
|
||||
0,
|
||||
|
@ -127,13 +128,12 @@ static int harddog_ioctl(struct inode *inode, struct file *file,
|
|||
default:
|
||||
return -ENOTTY;
|
||||
case WDIOC_GETSUPPORT:
|
||||
if(copy_to_user((struct harddog_info *)arg, &ident,
|
||||
sizeof(ident)))
|
||||
if(copy_to_user(argp, &ident, sizeof(ident)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
case WDIOC_GETSTATUS:
|
||||
case WDIOC_GETBOOTSTATUS:
|
||||
return put_user(0,(int *)arg);
|
||||
return put_user(0,(int __user *)argp);
|
||||
case WDIOC_KEEPALIVE:
|
||||
return(ping_watchdog(harddog_out_fd));
|
||||
}
|
||||
|
|
|
@ -67,8 +67,8 @@ MODULE_PARM_DESC(mixer, MIXER_HELP);
|
|||
|
||||
/* /dev/dsp file operations */
|
||||
|
||||
static ssize_t hostaudio_read(struct file *file, char *buffer, size_t count,
|
||||
loff_t *ppos)
|
||||
static ssize_t hostaudio_read(struct file *file, char __user *buffer,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct hostaudio_state *state = file->private_data;
|
||||
void *kbuf;
|
||||
|
@ -94,7 +94,7 @@ static ssize_t hostaudio_read(struct file *file, char *buffer, size_t count,
|
|||
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)
|
||||
{
|
||||
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_SUBDIVIDE:
|
||||
case SNDCTL_DSP_SETFRAGMENT:
|
||||
if(get_user(data, (int *) arg))
|
||||
if(get_user(data, (int __user *) arg))
|
||||
return(-EFAULT);
|
||||
break;
|
||||
default:
|
||||
|
@ -168,7 +168,7 @@ static int hostaudio_ioctl(struct inode *inode, struct file *file,
|
|||
case SNDCTL_DSP_CHANNELS:
|
||||
case SNDCTL_DSP_SUBDIVIDE:
|
||||
case SNDCTL_DSP_SETFRAGMENT:
|
||||
if(put_user(data, (int *) arg))
|
||||
if(put_user(data, (int __user *) arg))
|
||||
return(-EFAULT);
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -124,18 +124,7 @@ static struct transport mcast_transport = {
|
|||
static int register_mcast(void)
|
||||
{
|
||||
register_transport(&mcast_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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/proc_fs.h"
|
||||
#include "linux/syscalls.h"
|
||||
#include "linux/list.h"
|
||||
#include "linux/mm.h"
|
||||
#include "linux/console.h"
|
||||
#include "asm/irq.h"
|
||||
#include "asm/uaccess.h"
|
||||
|
@ -347,6 +349,142 @@ static struct mc_device *mconsole_find_dev(char *name)
|
|||
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
|
||||
|
||||
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;
|
||||
|
||||
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);
|
||||
console_index += n;
|
||||
string += n;
|
||||
|
|
|
@ -106,18 +106,7 @@ static struct transport pcap_transport = {
|
|||
static int register_pcap(void)
|
||||
{
|
||||
register_transport(&pcap_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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)
|
||||
{
|
||||
register_transport(&slip_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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;
|
||||
|
||||
*init = ((struct slirp_init)
|
||||
{ argw : { { "slirp", NULL } } });
|
||||
{ .argw = { { "slirp", NULL } } });
|
||||
|
||||
str = split_if_spec(str, mac_out, NULL);
|
||||
|
||||
|
@ -116,18 +116,7 @@ static struct transport slirp_transport = {
|
|||
static int register_slirp(void)
|
||||
{
|
||||
register_transport(&slirp_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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);
|
||||
if(err != 0)
|
||||
printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err);
|
||||
return(err);
|
||||
return 0;
|
||||
}
|
||||
|
||||
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 void machine_halt(void);
|
||||
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 int cpu(void);
|
||||
|
||||
|
|
|
@ -58,23 +58,17 @@ struct line {
|
|||
};
|
||||
|
||||
#define LINE_INIT(str, d) \
|
||||
{ init_str : str, \
|
||||
init_pri : INIT_STATIC, \
|
||||
valid : 1, \
|
||||
throttled : 0, \
|
||||
lock : SPIN_LOCK_UNLOCKED, \
|
||||
buffer : NULL, \
|
||||
head : NULL, \
|
||||
tail : NULL, \
|
||||
sigio : 0, \
|
||||
driver : d, \
|
||||
have_irq : 0 }
|
||||
{ .init_str = str, \
|
||||
.init_pri = INIT_STATIC, \
|
||||
.valid = 1, \
|
||||
.lock = SPIN_LOCK_UNLOCKED, \
|
||||
.driver = d }
|
||||
|
||||
struct lines {
|
||||
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 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 task_size;
|
||||
|
||||
extern void check_devanon(void);
|
||||
extern int init_mem_user(void);
|
||||
extern void setup_memory(void *entry);
|
||||
extern unsigned long find_iomem(char *driver, unsigned long *len_out);
|
||||
|
|
|
@ -13,6 +13,7 @@
|
|||
#include "kern_util.h"
|
||||
#include "skas/mm_id.h"
|
||||
#include "irq_user.h"
|
||||
#include "sysdep/tls.h"
|
||||
|
||||
#define OS_TYPE_FILE 1
|
||||
#define OS_TYPE_DIR 2
|
||||
|
@ -172,6 +173,7 @@ extern int os_fchange_dir(int fd);
|
|||
extern void os_early_checks(void);
|
||||
extern int can_do_skas(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
|
||||
* 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,
|
||||
int r, int w, int x);
|
||||
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);
|
||||
|
||||
/* tt.c
|
||||
|
@ -234,8 +238,12 @@ extern int run_helper_thread(int (*proc)(void *), void *arg,
|
|||
int stack_order);
|
||||
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 set_umid(char *name);
|
||||
extern char *get_umid(void);
|
||||
|
|
|
@ -48,7 +48,8 @@ unsigned int csum_partial_copy_nocheck(const unsigned char *src, unsigned char *
|
|||
*/
|
||||
|
||||
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)
|
||||
{
|
||||
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
|
||||
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)
|
||||
{
|
||||
if (access_ok(VERIFY_WRITE, dst, len)){
|
||||
|
|
|
@ -14,7 +14,12 @@
|
|||
#define MAX_REG_NR (UM_FRAME_SIZE / sizeof(unsigned long))
|
||||
#define MAX_REG_OFFSET (UM_FRAME_SIZE)
|
||||
|
||||
#ifdef UML_CONFIG_PT_PROXY
|
||||
extern void update_debugregs(int seq);
|
||||
#else
|
||||
static inline void update_debugregs(int seq) {}
|
||||
#endif
|
||||
|
||||
|
||||
/* syscall emulation path in ptrace */
|
||||
|
||||
|
|
|
@ -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 */
|
|
@ -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"
|
||||
|
||||
/* Copied from kernel.h */
|
||||
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
|
||||
|
||||
#define CATCH_EINTR(expr) while ((errno = 0, ((expr) < 0)) && (errno == EINTR))
|
||||
|
||||
extern int mode_tt;
|
||||
|
@ -31,7 +34,7 @@ extern unsigned long uml_physmem;
|
|||
extern unsigned long uml_reserved;
|
||||
extern unsigned long end_vm;
|
||||
extern unsigned long start_vm;
|
||||
extern unsigned long highmem;
|
||||
extern unsigned long long highmem;
|
||||
|
||||
extern char host_info[];
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
void flush_thread(void)
|
||||
{
|
||||
arch_flush_thread(¤t->thread.arch);
|
||||
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);
|
||||
}
|
||||
|
||||
long sys_execve(char *file, char __user *__user *argv,
|
||||
long sys_execve(char __user *file, char __user *__user *argv,
|
||||
char __user *__user *env)
|
||||
{
|
||||
long error;
|
||||
char *filename;
|
||||
|
||||
lock_kernel();
|
||||
filename = getname((char __user *) file);
|
||||
filename = getname(file);
|
||||
error = PTR_ERR(filename);
|
||||
if (IS_ERR(filename)) goto out;
|
||||
error = execve1(filename, argv, env);
|
||||
|
@ -74,14 +75,3 @@ long sys_execve(char *file, char __user *__user *argv,
|
|||
unlock_kernel();
|
||||
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_bad_page = NULL;
|
||||
pgd_t swapper_pg_dir[PTRS_PER_PGD];
|
||||
unsigned long highmem;
|
||||
unsigned long long highmem;
|
||||
int kmalloc_ok = 0;
|
||||
|
||||
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,
|
||||
struct pt_regs *regs)
|
||||
{
|
||||
int ret;
|
||||
|
||||
p->thread = (struct thread_struct) INIT_THREAD;
|
||||
return(CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr,
|
||||
clone_flags, sp, stack_top, p, regs));
|
||||
ret = CHOOSE_MODE_PROC(copy_thread_tt, copy_thread_skas, nr,
|
||||
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)
|
||||
|
@ -185,10 +201,6 @@ void default_idle(void)
|
|||
{
|
||||
CHOOSE_MODE(uml_idle_timer(), (void) 0);
|
||||
|
||||
atomic_inc(&init_mm.mm_count);
|
||||
current->mm = &init_mm;
|
||||
current->active_mm = &init_mm;
|
||||
|
||||
while(1){
|
||||
/* 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);
|
||||
}
|
||||
|
||||
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];
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
int i, ret;
|
||||
unsigned long __user *p = (void __user *)(unsigned long)data;
|
||||
|
||||
switch (request) {
|
||||
/* 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);
|
||||
if (copied != sizeof(tmp))
|
||||
break;
|
||||
ret = put_user(tmp, (unsigned long __user *) data);
|
||||
ret = put_user(tmp, p);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -136,15 +137,13 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
|
||||
#ifdef PTRACE_GETREGS
|
||||
case PTRACE_GETREGS: { /* Get all gp regs from the child. */
|
||||
if (!access_ok(VERIFY_WRITE, (unsigned long *)data,
|
||||
MAX_REG_OFFSET)) {
|
||||
if (!access_ok(VERIFY_WRITE, p, MAX_REG_OFFSET)) {
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
for ( i = 0; i < MAX_REG_OFFSET; i += sizeof(long) ) {
|
||||
__put_user(getreg(child, i),
|
||||
(unsigned long __user *) data);
|
||||
data += sizeof(long);
|
||||
__put_user(getreg(child, i), p);
|
||||
p++;
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
|
@ -153,15 +152,14 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
#ifdef PTRACE_SETREGS
|
||||
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
|
||||
unsigned long tmp = 0;
|
||||
if (!access_ok(VERIFY_READ, (unsigned *)data,
|
||||
MAX_REG_OFFSET)) {
|
||||
if (!access_ok(VERIFY_READ, p, MAX_REG_OFFSET)) {
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
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);
|
||||
data += sizeof(long);
|
||||
p++;
|
||||
}
|
||||
ret = 0;
|
||||
break;
|
||||
|
@ -187,14 +185,23 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
ret = set_fpxregs(data, child);
|
||||
break;
|
||||
#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: {
|
||||
/* Take the info from thread->arch->faultinfo,
|
||||
* but transfer max. sizeof(struct ptrace_faultinfo).
|
||||
* On i386, ptrace_faultinfo is smaller!
|
||||
*/
|
||||
ret = copy_to_user((unsigned long __user *) data,
|
||||
&child->thread.arch.faultinfo,
|
||||
sizeof(struct ptrace_faultinfo));
|
||||
/* Take the info from thread->arch->faultinfo,
|
||||
* but transfer max. sizeof(struct ptrace_faultinfo).
|
||||
* On i386, ptrace_faultinfo is smaller!
|
||||
*/
|
||||
ret = copy_to_user(p, &child->thread.arch.faultinfo,
|
||||
sizeof(struct ptrace_faultinfo));
|
||||
if(ret)
|
||||
break;
|
||||
break;
|
||||
|
@ -204,8 +211,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
|||
case PTRACE_LDT: {
|
||||
struct ptrace_ldt ldt;
|
||||
|
||||
if(copy_from_user(&ldt, (unsigned long __user *) data,
|
||||
sizeof(ldt))){
|
||||
if(copy_from_user(&ldt, p, sizeof(ldt))){
|
||||
ret = -EIO;
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -35,6 +35,8 @@ void switch_to_skas(void *prev, void *next)
|
|||
switch_threads(&from->thread.mode.skas.switch_buf,
|
||||
to->thread.mode.skas.switch_buf);
|
||||
|
||||
arch_switch_to_skas(current->thread.prev_sched, current);
|
||||
|
||||
if(current->pid == 0)
|
||||
switch_timers(1);
|
||||
}
|
||||
|
@ -89,10 +91,17 @@ void fork_handler(int sig)
|
|||
panic("blech");
|
||||
|
||||
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;
|
||||
|
||||
/* Handle any immediate reschedules or signals */
|
||||
interrupt_end();
|
||||
|
||||
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;
|
||||
|
||||
handler = fork_handler;
|
||||
|
||||
arch_copy_thread(¤t->thread.arch, &p->thread.arch);
|
||||
}
|
||||
else {
|
||||
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;
|
||||
if (!name)
|
||||
|
@ -115,7 +115,7 @@ long sys_uname(struct old_utsname * name)
|
|||
return err?-EFAULT:0;
|
||||
}
|
||||
|
||||
long sys_olduname(struct oldold_utsname * name)
|
||||
long sys_olduname(struct oldold_utsname __user * name)
|
||||
{
|
||||
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_errno = 0;
|
||||
si.si_code = BUS_ADRERR;
|
||||
si.si_addr = (void *)address;
|
||||
si.si_addr = (void __user *)address;
|
||||
current->thread.arch.faultinfo = fi;
|
||||
force_sig_info(SIGBUS, &si, current);
|
||||
} else if (err == -ENOMEM) {
|
||||
|
@ -207,7 +207,7 @@ unsigned long segv(struct faultinfo fi, unsigned long ip, int is_user, void *sc)
|
|||
} else {
|
||||
BUG_ON(err != -EFAULT);
|
||||
si.si_signo = SIGSEGV;
|
||||
si.si_addr = (void *) address;
|
||||
si.si_addr = (void __user *) address;
|
||||
current->thread.arch.faultinfo = fi;
|
||||
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_code = SEGV_ACCERR;
|
||||
si.si_addr = (void *) FAULT_ADDRESS(fi);
|
||||
current->thread.arch.faultinfo = fi;
|
||||
si.si_addr = (void __user *) FAULT_ADDRESS(fi);
|
||||
current->thread.arch.faultinfo = fi;
|
||||
force_sig_info(SIGSEGV, &si, current);
|
||||
}
|
||||
|
||||
|
|
|
@ -51,6 +51,13 @@ void switch_to_tt(void *prev, void *next)
|
|||
|
||||
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));
|
||||
if(err != sizeof(c))
|
||||
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(SIGPROF, prof);
|
||||
|
||||
arch_switch();
|
||||
arch_switch_to_tt(prev_sched, current);
|
||||
|
||||
flush_tlb_all();
|
||||
local_irq_restore(flags);
|
||||
|
@ -141,7 +148,6 @@ static void new_thread_handler(int sig)
|
|||
set_cmdline("(kernel thread)");
|
||||
|
||||
change_sig(SIGUSR1, 1);
|
||||
change_sig(SIGVTALRM, 1);
|
||||
change_sig(SIGPROF, 1);
|
||||
local_irq_enable();
|
||||
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 \
|
||||
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)/
|
||||
|
||||
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 := $(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
|
||||
|
||||
elf_aux.o: $(ARCH_DIR)/kernel-offsets.h
|
||||
CFLAGS_elf_aux.o += -I$(objtree)/arch/um
|
||||
|
||||
CFLAGS_user_syms.o += -DSUBARCH_$(SUBARCH)
|
||||
|
||||
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)
|
||||
{
|
||||
register_transport(ðertap_transport);
|
||||
return(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
__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…
Reference in New Issue