Merge changes from linux-2.6 by hand
This commit is contained in:
commit
985990137e
30
.gitignore
vendored
Normal file
30
.gitignore
vendored
Normal file
@ -0,0 +1,30 @@
|
||||
#
|
||||
# NOTE! Don't add files that are generated in specific
|
||||
# subdirectories here. Add them in the ".gitignore" file
|
||||
# in that subdirectory instead.
|
||||
#
|
||||
# Normal rules
|
||||
#
|
||||
.*
|
||||
*.o
|
||||
*.a
|
||||
*.s
|
||||
*.ko
|
||||
*.mod.c
|
||||
|
||||
#
|
||||
# Top-level generic files
|
||||
#
|
||||
vmlinux*
|
||||
System.map
|
||||
Module.symvers
|
||||
|
||||
#
|
||||
# Generated include files
|
||||
#
|
||||
include/asm
|
||||
include/config
|
||||
include/linux/autoconf.h
|
||||
include/linux/compile.h
|
||||
include/linux/version.h
|
||||
|
@ -131,3 +131,47 @@ Netlink itself is not reliable protocol, that means that messages can
|
||||
be lost due to memory pressure or process' receiving queue overflowed,
|
||||
so caller is warned must be prepared. That is why struct cn_msg [main
|
||||
connector's message header] contains u32 seq and u32 ack fields.
|
||||
|
||||
/*****************************************/
|
||||
Userspace usage.
|
||||
/*****************************************/
|
||||
2.6.14 has a new netlink socket implementation, which by default does not
|
||||
allow to send data to netlink groups other than 1.
|
||||
So, if to use netlink socket (for example using connector)
|
||||
with different group number userspace application must subscribe to
|
||||
that group. It can be achieved by following pseudocode:
|
||||
|
||||
s = socket(PF_NETLINK, SOCK_DGRAM, NETLINK_CONNECTOR);
|
||||
|
||||
l_local.nl_family = AF_NETLINK;
|
||||
l_local.nl_groups = 12345;
|
||||
l_local.nl_pid = 0;
|
||||
|
||||
if (bind(s, (struct sockaddr *)&l_local, sizeof(struct sockaddr_nl)) == -1) {
|
||||
perror("bind");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
|
||||
{
|
||||
int on = l_local.nl_groups;
|
||||
setsockopt(s, 270, 1, &on, sizeof(on));
|
||||
}
|
||||
|
||||
Where 270 above is SOL_NETLINK, and 1 is a NETLINK_ADD_MEMBERSHIP socket
|
||||
option. To drop multicast subscription one should call above socket option
|
||||
with NETLINK_DROP_MEMBERSHIP parameter which is defined as 0.
|
||||
|
||||
2.6.14 netlink code only allows to select a group which is less or equal to
|
||||
the maximum group number, which is used at netlink_kernel_create() time.
|
||||
In case of connector it is CN_NETLINK_USERS + 0xf, so if you want to use
|
||||
group number 12345, you must increment CN_NETLINK_USERS to that number.
|
||||
Additional 0xf numbers are allocated to be used by non-in-kernel users.
|
||||
|
||||
Due to this limitation, group 0xffffffff does not work now, so one can
|
||||
not use add/remove connector's group notifications, but as far as I know,
|
||||
only cn_test.c test module used it.
|
||||
|
||||
Some work in netlink area is still being done, so things can be changed in
|
||||
2.6.15 timeframe, if it will happen, documentation will be updated for that
|
||||
kernel.
|
||||
|
@ -1618,6 +1618,13 @@ M: vandrove@vc.cvut.cz
|
||||
L: linux-fbdev-devel@lists.sourceforge.net
|
||||
S: Maintained
|
||||
|
||||
MEGARAID SCSI DRIVERS
|
||||
P: Neela Syam Kolli
|
||||
M: Neela.Kolli@engenio.com
|
||||
S: linux-scsi@vger.kernel.org
|
||||
W: http://megaraid.lsilogic.com
|
||||
S: Maintained
|
||||
|
||||
MEMORY TECHNOLOGY DEVICES
|
||||
P: David Woodhouse
|
||||
M: dwmw2@infradead.org
|
||||
|
8
Makefile
8
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 14
|
||||
EXTRAVERSION =-rc4
|
||||
EXTRAVERSION =-rc5
|
||||
NAME=Affluent Albatross
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -372,7 +372,7 @@ export MODVERDIR := $(if $(KBUILD_EXTMOD),$(firstword $(KBUILD_EXTMOD))/).tmp_ve
|
||||
# Files to ignore in find ... statements
|
||||
|
||||
RCS_FIND_IGNORE := \( -name SCCS -o -name BitKeeper -o -name .svn -o -name CVS -o -name .pc -o -name .hg \) -prune -o
|
||||
RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg
|
||||
export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn --exclude CVS --exclude .pc --exclude .hg
|
||||
|
||||
# ===========================================================================
|
||||
# Rules shared between *config targets and build targets
|
||||
@ -660,8 +660,10 @@ quiet_cmd_sysmap = SYSMAP
|
||||
# Link of vmlinux
|
||||
# If CONFIG_KALLSYMS is set .version is already updated
|
||||
# Generate System.map and verify that the content is consistent
|
||||
|
||||
# Use + in front of the vmlinux_version rule to silent warning with make -j2
|
||||
# First command is ':' to allow us to use + in front of the rule
|
||||
define rule_vmlinux__
|
||||
:
|
||||
$(if $(CONFIG_KALLSYMS),,+$(call cmd,vmlinux_version))
|
||||
|
||||
$(call cmd,vmlinux__)
|
||||
|
@ -53,7 +53,7 @@ tune-$(CONFIG_CPU_ARM926T) :=-mtune=arm9tdmi
|
||||
tune-$(CONFIG_CPU_SA110) :=-mtune=strongarm110
|
||||
tune-$(CONFIG_CPU_SA1100) :=-mtune=strongarm1100
|
||||
tune-$(CONFIG_CPU_XSCALE) :=$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale
|
||||
tune-$(CONFIG_CPU_V6) :=-mtune=strongarm
|
||||
tune-$(CONFIG_CPU_V6) :=$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm)
|
||||
|
||||
# Need -Uarm for gcc < 3.x
|
||||
CFLAGS_ABI :=$(call cc-option,-mapcs-32,-mabi=apcs-gnu) $(call cc-option,-mno-thumb-interwork,)
|
||||
|
@ -45,8 +45,8 @@ extern void fp_enter(void);
|
||||
|
||||
#define EXPORT_SYMBOL_ALIAS(sym,orig) \
|
||||
EXPORT_CRC_ALIAS(sym) \
|
||||
const struct kernel_symbol __ksymtab_##sym \
|
||||
__attribute__((section("__ksymtab"))) = \
|
||||
static const struct kernel_symbol __ksymtab_##sym \
|
||||
__attribute_used__ __attribute__((section("__ksymtab"))) = \
|
||||
{ (unsigned long)&orig, #sym };
|
||||
|
||||
/*
|
||||
|
@ -106,15 +106,10 @@ ENTRY(ret_from_fork)
|
||||
.endm
|
||||
|
||||
.Larm700bug:
|
||||
ldr r0, [sp, #S_PSR] @ Get calling cpsr
|
||||
sub lr, lr, #4
|
||||
str lr, [r8]
|
||||
msr spsr_cxsf, r0
|
||||
ldmia sp, {r0 - lr}^ @ Get calling r0 - lr
|
||||
mov r0, r0
|
||||
ldr lr, [sp, #S_PC] @ Get PC
|
||||
add sp, sp, #S_FRAME_SIZE
|
||||
movs pc, lr
|
||||
subs pc, lr, #4
|
||||
#else
|
||||
.macro arm710_bug_check, instr, temp
|
||||
.endm
|
||||
|
@ -89,13 +89,6 @@ SECTIONS
|
||||
*(.got) /* Global offset table */
|
||||
}
|
||||
|
||||
. = ALIGN(16);
|
||||
__ex_table : { /* Exception table */
|
||||
__start___ex_table = .;
|
||||
*(__ex_table)
|
||||
__stop___ex_table = .;
|
||||
}
|
||||
|
||||
RODATA
|
||||
|
||||
_etext = .; /* End of text and rodata section */
|
||||
@ -137,6 +130,14 @@ SECTIONS
|
||||
. = ALIGN(32);
|
||||
*(.data.cacheline_aligned)
|
||||
|
||||
/*
|
||||
* The exception fixup table (might need resorting at runtime)
|
||||
*/
|
||||
. = ALIGN(32);
|
||||
__start___ex_table = .;
|
||||
*(__ex_table)
|
||||
__stop___ex_table = .;
|
||||
|
||||
/*
|
||||
* and the usual data section
|
||||
*/
|
||||
|
@ -67,7 +67,7 @@ static void impd1_setvco(struct clk *clk, struct icst525_vco vco)
|
||||
}
|
||||
writel(0, impd1->base + IMPD1_LOCK);
|
||||
|
||||
#if DEBUG
|
||||
#ifdef DEBUG
|
||||
vco.v = val & 0x1ff;
|
||||
vco.r = (val >> 9) & 0x7f;
|
||||
vco.s = (val >> 16) & 7;
|
||||
@ -427,17 +427,18 @@ static int impd1_probe(struct lm_device *dev)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int impd1_remove_one(struct device *dev, void *data)
|
||||
{
|
||||
device_unregister(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void impd1_remove(struct lm_device *dev)
|
||||
{
|
||||
struct impd1_module *impd1 = lm_get_drvdata(dev);
|
||||
struct list_head *l, *n;
|
||||
int i;
|
||||
|
||||
list_for_each_safe(l, n, &dev->dev.children) {
|
||||
struct device *d = list_to_dev(l);
|
||||
|
||||
device_unregister(d);
|
||||
}
|
||||
device_for_each_child(&dev->dev, NULL, impd1_remove_one);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(impd1->vcos); i++)
|
||||
clk_unregister(&impd1->vcos[i]);
|
||||
|
@ -7,11 +7,17 @@
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include <asm/types.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/page.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
/*
|
||||
* IRQ base register
|
||||
@ -47,6 +53,12 @@ static void l7200_unmask_irq(unsigned int irq)
|
||||
{
|
||||
IRQ_ENABLE = 1 << irq;
|
||||
}
|
||||
|
||||
static struct irqchip l7200_irq_chip = {
|
||||
.ack = l7200_mask_irq,
|
||||
.mask = l7200_mask_irq,
|
||||
.unmask = l7200_unmask_irq
|
||||
};
|
||||
|
||||
static void __init l7200_init_irq(void)
|
||||
{
|
||||
@ -56,11 +68,9 @@ static void __init l7200_init_irq(void)
|
||||
FIQ_ENABLECLEAR = 0xffffffff; /* clear all fast interrupt enables */
|
||||
|
||||
for (irq = 0; irq < NR_IRQS; irq++) {
|
||||
irq_desc[irq].valid = 1;
|
||||
irq_desc[irq].probe_ok = 1;
|
||||
irq_desc[irq].mask_ack = l7200_mask_irq;
|
||||
irq_desc[irq].mask = l7200_mask_irq;
|
||||
irq_desc[irq].unmask = l7200_unmask_irq;
|
||||
set_irq_chip(irq, &l7200_irq_chip);
|
||||
set_irq_flags(irq, IRQF_VALID);
|
||||
set_irq_handler(irq, do_level_IRQ);
|
||||
}
|
||||
|
||||
init_FIQ();
|
||||
|
@ -467,6 +467,7 @@ void corgi_put_hsync(void)
|
||||
{
|
||||
if (get_hsync_time)
|
||||
symbol_put(w100fb_get_hsynclen);
|
||||
get_hsync_time = NULL;
|
||||
}
|
||||
|
||||
void corgi_wait_hsync(void)
|
||||
@ -476,20 +477,37 @@ void corgi_wait_hsync(void)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PXA_SHARP_Cxx00
|
||||
static struct device *spitz_pxafb_dev;
|
||||
|
||||
static int is_pxafb_device(struct device * dev, void * data)
|
||||
{
|
||||
struct platform_device *pdev = container_of(dev, struct platform_device, dev);
|
||||
|
||||
return (strncmp(pdev->name, "pxa2xx-fb", 9) == 0);
|
||||
}
|
||||
|
||||
unsigned long spitz_get_hsync_len(void)
|
||||
{
|
||||
if (!spitz_pxafb_dev) {
|
||||
spitz_pxafb_dev = bus_find_device(&platform_bus_type, NULL, NULL, is_pxafb_device);
|
||||
if (!spitz_pxafb_dev)
|
||||
return 0;
|
||||
}
|
||||
if (!get_hsync_time)
|
||||
get_hsync_time = symbol_get(pxafb_get_hsync_time);
|
||||
if (!get_hsync_time)
|
||||
return 0;
|
||||
|
||||
return pxafb_get_hsync_time(&pxafb_device.dev);
|
||||
return pxafb_get_hsync_time(spitz_pxafb_dev);
|
||||
}
|
||||
|
||||
void spitz_put_hsync(void)
|
||||
{
|
||||
put_device(spitz_pxafb_dev);
|
||||
if (get_hsync_time)
|
||||
symbol_put(pxafb_get_hsync_time);
|
||||
spitz_pxafb_dev = NULL;
|
||||
get_hsync_time = NULL;
|
||||
}
|
||||
|
||||
void spitz_wait_hsync(void)
|
||||
|
@ -208,6 +208,11 @@ static struct platform_device pxafb_device = {
|
||||
.resource = pxafb_resources,
|
||||
};
|
||||
|
||||
void __init set_pxa_fb_parent(struct device *parent_dev)
|
||||
{
|
||||
pxafb_device.dev.parent = parent_dev;
|
||||
}
|
||||
|
||||
static struct platform_device ffuart_device = {
|
||||
.name = "pxa2xx-uart",
|
||||
.id = 0,
|
||||
@ -245,6 +250,25 @@ void __init pxa_set_i2c_info(struct i2c_pxa_platform_data *info)
|
||||
i2c_device.dev.platform_data = info;
|
||||
}
|
||||
|
||||
static struct resource i2s_resources[] = {
|
||||
{
|
||||
.start = 0x40400000,
|
||||
.end = 0x40400083,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_I2S,
|
||||
.end = IRQ_I2S,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device i2s_device = {
|
||||
.name = "pxa2xx-i2s",
|
||||
.id = -1,
|
||||
.resource = i2c_resources,
|
||||
.num_resources = ARRAY_SIZE(i2s_resources),
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pxamci_device,
|
||||
&udc_device,
|
||||
@ -253,6 +277,7 @@ static struct platform_device *devices[] __initdata = {
|
||||
&btuart_device,
|
||||
&stuart_device,
|
||||
&i2c_device,
|
||||
&i2s_device,
|
||||
};
|
||||
|
||||
static int __init pxa_init(void)
|
||||
|
@ -36,7 +36,6 @@
|
||||
#include <asm/arch/irq.h>
|
||||
#include <asm/arch/mmc.h>
|
||||
#include <asm/arch/udc.h>
|
||||
#include <asm/arch/ohci.h>
|
||||
#include <asm/arch/pxafb.h>
|
||||
#include <asm/arch/akita.h>
|
||||
#include <asm/arch/spitz.h>
|
||||
@ -304,7 +303,6 @@ static struct platform_device *devices[] __initdata = {
|
||||
&spitzkbd_device,
|
||||
&spitzts_device,
|
||||
&spitzbl_device,
|
||||
&spitzbattery_device,
|
||||
};
|
||||
|
||||
static void __init common_init(void)
|
||||
@ -328,7 +326,7 @@ static void __init common_init(void)
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_mci_info(&spitz_mci_platform_data);
|
||||
pxafb_device.dev.parent = &spitzssp_device.dev;
|
||||
set_pxa_fb_parent(&spitzssp_device.dev);
|
||||
set_pxa_fb_info(&spitz_pxafb_info);
|
||||
}
|
||||
|
||||
|
@ -12,6 +12,7 @@ config MACH_ANUBIS
|
||||
config ARCH_BAST
|
||||
bool "Simtec Electronics BAST (EB2410ITX)"
|
||||
select CPU_S3C2410
|
||||
select ISA
|
||||
help
|
||||
Say Y here if you are using the Simtec Electronics EB2410ITX
|
||||
development board (also known as BAST)
|
||||
|
@ -98,7 +98,10 @@ struct clk *clk_get(struct device *dev, const char *id)
|
||||
struct clk *clk = ERR_PTR(-ENOENT);
|
||||
int idno;
|
||||
|
||||
idno = (dev == NULL) ? -1 : to_platform_device(dev)->id;
|
||||
if (dev == NULL || dev->bus != &platform_bus_type)
|
||||
idno = -1;
|
||||
else
|
||||
idno = to_platform_device(dev)->id;
|
||||
|
||||
down(&clocks_sem);
|
||||
|
||||
|
@ -125,7 +125,7 @@ static int external_map[] = { 2 };
|
||||
static int chip0_map[] = { 0 };
|
||||
static int chip1_map[] = { 1 };
|
||||
|
||||
struct mtd_partition anubis_default_nand_part[] = {
|
||||
static struct mtd_partition anubis_default_nand_part[] = {
|
||||
[0] = {
|
||||
.name = "Boot Agent",
|
||||
.size = SZ_16K,
|
||||
|
@ -230,7 +230,7 @@ static int chip0_map[] = { 1 };
|
||||
static int chip1_map[] = { 2 };
|
||||
static int chip2_map[] = { 3 };
|
||||
|
||||
struct mtd_partition bast_default_nand_part[] = {
|
||||
static struct mtd_partition bast_default_nand_part[] = {
|
||||
[0] = {
|
||||
.name = "Boot Agent",
|
||||
.size = SZ_16K,
|
||||
@ -307,9 +307,9 @@ static void bast_nand_select(struct s3c2410_nand_set *set, int slot)
|
||||
}
|
||||
|
||||
static struct s3c2410_platform_nand bast_nand_info = {
|
||||
.tacls = 40,
|
||||
.twrph0 = 80,
|
||||
.twrph1 = 80,
|
||||
.tacls = 30,
|
||||
.twrph0 = 60,
|
||||
.twrph1 = 60,
|
||||
.nr_sets = ARRAY_SIZE(bast_nand_sets),
|
||||
.sets = bast_nand_sets,
|
||||
.select_chip = bast_nand_select,
|
||||
@ -340,7 +340,7 @@ static struct resource bast_dm9k_resource[] = {
|
||||
* better IO routines can be written and tested
|
||||
*/
|
||||
|
||||
struct dm9000_plat_data bast_dm9k_platdata = {
|
||||
static struct dm9000_plat_data bast_dm9k_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY
|
||||
};
|
||||
|
||||
|
@ -288,7 +288,7 @@ static struct resource vr1000_dm9k1_resource[] = {
|
||||
* better IO routines can be written and tested
|
||||
*/
|
||||
|
||||
struct dm9000_plat_data vr1000_dm9k_platdata = {
|
||||
static struct dm9000_plat_data vr1000_dm9k_platdata = {
|
||||
.flags = DM9000_PLATF_16BITONLY,
|
||||
};
|
||||
|
||||
|
@ -125,9 +125,6 @@ static struct platform_device *uart_devices[] __initdata = {
|
||||
&s3c_uart2
|
||||
};
|
||||
|
||||
/* store our uart devices for the serial driver console */
|
||||
struct platform_device *s3c2410_uart_devices[3];
|
||||
|
||||
static int s3c2410_uart_count = 0;
|
||||
|
||||
/* uart registration process */
|
||||
|
@ -151,7 +151,7 @@ void __init s3c2440_init_uarts(struct s3c2410_uartcfg *cfg, int no)
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
struct sleep_save s3c2440_sleep[] = {
|
||||
static struct sleep_save s3c2440_sleep[] = {
|
||||
SAVE_ITEM(S3C2440_DSC0),
|
||||
SAVE_ITEM(S3C2440_DSC1),
|
||||
SAVE_ITEM(S3C2440_GPJDAT),
|
||||
@ -260,7 +260,7 @@ void __init s3c2440_init_clocks(int xtal)
|
||||
* as a driver which may support both 2410 and 2440 may try and use it.
|
||||
*/
|
||||
|
||||
int __init s3c2440_core_init(void)
|
||||
static int __init s3c2440_core_init(void)
|
||||
{
|
||||
return sysdev_class_register(&s3c2440_sysclass);
|
||||
}
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include <asm/hardware/clock.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "cpu.h"
|
||||
|
||||
static unsigned long timer_startval;
|
||||
static unsigned long timer_usec_ticks;
|
||||
|
@ -111,7 +111,7 @@ proc_alignment_read(char *page, char **start, off_t off, int count, int *eof,
|
||||
}
|
||||
|
||||
static int proc_alignment_write(struct file *file, const char __user *buffer,
|
||||
unsigned long count, void *data)
|
||||
unsigned long count, void *data)
|
||||
{
|
||||
char mode;
|
||||
|
||||
@ -119,7 +119,7 @@ static int proc_alignment_write(struct file *file, const char __user *buffer,
|
||||
if (get_user(mode, buffer))
|
||||
return -EFAULT;
|
||||
if (mode >= '0' && mode <= '5')
|
||||
ai_usermode = mode - '0';
|
||||
ai_usermode = mode - '0';
|
||||
}
|
||||
return count;
|
||||
}
|
||||
@ -262,7 +262,7 @@ union offset_union {
|
||||
goto fault; \
|
||||
} while (0)
|
||||
|
||||
#define put32_unaligned_check(val,addr) \
|
||||
#define put32_unaligned_check(val,addr) \
|
||||
__put32_unaligned_check("strb", val, addr)
|
||||
|
||||
#define put32t_unaligned_check(val,addr) \
|
||||
@ -306,19 +306,19 @@ do_alignment_ldrhstrh(unsigned long addr, unsigned long instr, struct pt_regs *r
|
||||
return TYPE_LDST;
|
||||
|
||||
user:
|
||||
if (LDST_L_BIT(instr)) {
|
||||
unsigned long val;
|
||||
get16t_unaligned_check(val, addr);
|
||||
if (LDST_L_BIT(instr)) {
|
||||
unsigned long val;
|
||||
get16t_unaligned_check(val, addr);
|
||||
|
||||
/* signed half-word? */
|
||||
if (instr & 0x40)
|
||||
val = (signed long)((signed short) val);
|
||||
/* signed half-word? */
|
||||
if (instr & 0x40)
|
||||
val = (signed long)((signed short) val);
|
||||
|
||||
regs->uregs[rd] = val;
|
||||
} else
|
||||
put16t_unaligned_check(regs->uregs[rd], addr);
|
||||
regs->uregs[rd] = val;
|
||||
} else
|
||||
put16t_unaligned_check(regs->uregs[rd], addr);
|
||||
|
||||
return TYPE_LDST;
|
||||
return TYPE_LDST;
|
||||
|
||||
fault:
|
||||
return TYPE_FAULT;
|
||||
@ -342,11 +342,11 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
|
||||
unsigned long val;
|
||||
get32_unaligned_check(val, addr);
|
||||
regs->uregs[rd] = val;
|
||||
get32_unaligned_check(val, addr+4);
|
||||
regs->uregs[rd+1] = val;
|
||||
get32_unaligned_check(val, addr + 4);
|
||||
regs->uregs[rd + 1] = val;
|
||||
} else {
|
||||
put32_unaligned_check(regs->uregs[rd], addr);
|
||||
put32_unaligned_check(regs->uregs[rd+1], addr+4);
|
||||
put32_unaligned_check(regs->uregs[rd + 1], addr + 4);
|
||||
}
|
||||
|
||||
return TYPE_LDST;
|
||||
@ -356,11 +356,11 @@ do_alignment_ldrdstrd(unsigned long addr, unsigned long instr,
|
||||
unsigned long val;
|
||||
get32t_unaligned_check(val, addr);
|
||||
regs->uregs[rd] = val;
|
||||
get32t_unaligned_check(val, addr+4);
|
||||
regs->uregs[rd+1] = val;
|
||||
get32t_unaligned_check(val, addr + 4);
|
||||
regs->uregs[rd + 1] = val;
|
||||
} else {
|
||||
put32t_unaligned_check(regs->uregs[rd], addr);
|
||||
put32t_unaligned_check(regs->uregs[rd+1], addr+4);
|
||||
put32t_unaligned_check(regs->uregs[rd + 1], addr + 4);
|
||||
}
|
||||
|
||||
return TYPE_LDST;
|
||||
@ -443,7 +443,7 @@ do_alignment_ldmstm(unsigned long addr, unsigned long instr, struct pt_regs *reg
|
||||
if (LDST_P_EQ_U(instr)) /* U = P */
|
||||
eaddr += 4;
|
||||
|
||||
/*
|
||||
/*
|
||||
* For alignment faults on the ARM922T/ARM920T the MMU makes
|
||||
* the FSR (and hence addr) equal to the updated base address
|
||||
* of the multiple access rather than the restored value.
|
||||
@ -570,7 +570,7 @@ thumb2arm(u16 tinstr)
|
||||
/* 6.5.1 Format 3: */
|
||||
case 0x4800 >> 11: /* 7.1.28 LDR(3) */
|
||||
/* NOTE: This case is not technically possible. We're
|
||||
* loading 32-bit memory data via PC relative
|
||||
* loading 32-bit memory data via PC relative
|
||||
* addressing mode. So we can and should eliminate
|
||||
* this case. But I'll leave it here for now.
|
||||
*/
|
||||
@ -642,7 +642,7 @@ do_alignment(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
|
||||
|
||||
if (fault) {
|
||||
type = TYPE_FAULT;
|
||||
goto bad_or_fault;
|
||||
goto bad_or_fault;
|
||||
}
|
||||
|
||||
if (user_mode(regs))
|
||||
|
@ -55,7 +55,14 @@ ENTRY(cpu_v6_proc_init)
|
||||
mov pc, lr
|
||||
|
||||
ENTRY(cpu_v6_proc_fin)
|
||||
mov pc, lr
|
||||
stmfd sp!, {lr}
|
||||
cpsid if @ disable interrupts
|
||||
bl v6_flush_kern_cache_all
|
||||
mrc p15, 0, r0, c1, c0, 0 @ ctrl register
|
||||
bic r0, r0, #0x1000 @ ...i............
|
||||
bic r0, r0, #0x0006 @ .............ca.
|
||||
mcr p15, 0, r0, c1, c0, 0 @ disable caches
|
||||
ldmfd sp!, {pc}
|
||||
|
||||
/*
|
||||
* cpu_v6_reset(loc)
|
||||
|
@ -31,11 +31,6 @@
|
||||
#include <linux/string.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
/* forward declarations */
|
||||
unsigned int EmulateCPDO(const unsigned int);
|
||||
unsigned int EmulateCPDT(const unsigned int);
|
||||
unsigned int EmulateCPRT(const unsigned int);
|
||||
|
||||
/* Reset the FPA11 chip. Called to initialize and reset the emulator. */
|
||||
static void resetFPA11(void)
|
||||
{
|
||||
|
@ -95,4 +95,24 @@ extern int8 SetRoundingMode(const unsigned int);
|
||||
extern int8 SetRoundingPrecision(const unsigned int);
|
||||
extern void nwfpe_init_fpa(union fp_state *fp);
|
||||
|
||||
extern unsigned int EmulateAll(unsigned int opcode);
|
||||
|
||||
extern unsigned int EmulateCPDT(const unsigned int opcode);
|
||||
extern unsigned int EmulateCPDO(const unsigned int opcode);
|
||||
extern unsigned int EmulateCPRT(const unsigned int opcode);
|
||||
|
||||
/* fpa11_cpdt.c */
|
||||
extern unsigned int PerformLDF(const unsigned int opcode);
|
||||
extern unsigned int PerformSTF(const unsigned int opcode);
|
||||
extern unsigned int PerformLFM(const unsigned int opcode);
|
||||
extern unsigned int PerformSFM(const unsigned int opcode);
|
||||
|
||||
/* single_cpdo.c */
|
||||
|
||||
extern unsigned int SingleCPDO(struct roundingData *roundData,
|
||||
const unsigned int opcode, FPREG * rFd);
|
||||
/* double_cpdo.c */
|
||||
extern unsigned int DoubleCPDO(struct roundingData *roundData,
|
||||
const unsigned int opcode, FPREG * rFd);
|
||||
|
||||
#endif
|
||||
|
@ -26,12 +26,11 @@
|
||||
#include "fpa11.inl"
|
||||
#include "fpmodule.h"
|
||||
#include "fpmodule.inl"
|
||||
#include "softfloat.h"
|
||||
|
||||
#ifdef CONFIG_FPE_NWFPE_XP
|
||||
extern flag floatx80_is_nan(floatx80);
|
||||
#endif
|
||||
extern flag float64_is_nan(float64);
|
||||
extern flag float32_is_nan(float32);
|
||||
|
||||
unsigned int PerformFLT(const unsigned int opcode);
|
||||
unsigned int PerformFIX(const unsigned int opcode);
|
||||
|
@ -476,4 +476,10 @@ static inline unsigned int getDestinationSize(const unsigned int opcode)
|
||||
return (nRc);
|
||||
}
|
||||
|
||||
extern unsigned int checkCondition(const unsigned int opcode,
|
||||
const unsigned int ccodes);
|
||||
|
||||
extern const float64 float64Constant[];
|
||||
extern const float32 float32Constant[];
|
||||
|
||||
#endif
|
||||
|
@ -265,4 +265,7 @@ static inline flag float64_lt_nocheck(float64 a, float64 b)
|
||||
return (a != b) && (aSign ^ (a < b));
|
||||
}
|
||||
|
||||
extern flag float32_is_nan( float32 a );
|
||||
extern flag float64_is_nan( float64 a );
|
||||
|
||||
#endif
|
||||
|
@ -15,6 +15,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#define IPI_SCHEDULE 1
|
||||
#define IPI_CALL 2
|
||||
@ -28,6 +29,7 @@ spinlock_t cris_atomic_locks[] = { [0 ... LOCK_COUNT - 1] = SPIN_LOCK_UNLOCKED};
|
||||
/* CPU masks */
|
||||
cpumask_t cpu_online_map = CPU_MASK_NONE;
|
||||
cpumask_t phys_cpu_present_map = CPU_MASK_NONE;
|
||||
EXPORT_SYMBOL(phys_cpu_present_map);
|
||||
|
||||
/* Variables used during SMP boot */
|
||||
volatile int cpu_now_booting = 0;
|
||||
|
@ -44,7 +44,7 @@
|
||||
|
||||
#define PFX "powernow-k8: "
|
||||
#define BFX PFX "BIOS error: "
|
||||
#define VERSION "version 1.50.3"
|
||||
#define VERSION "version 1.50.4"
|
||||
#include "powernow-k8.h"
|
||||
|
||||
/* serialize freq changes */
|
||||
@ -111,8 +111,8 @@ static int query_current_values_with_pending_wait(struct powernow_k8_data *data)
|
||||
u32 i = 0;
|
||||
|
||||
do {
|
||||
if (i++ > 0x1000000) {
|
||||
printk(KERN_ERR PFX "detected change pending stuck\n");
|
||||
if (i++ > 10000) {
|
||||
dprintk("detected change pending stuck\n");
|
||||
return 1;
|
||||
}
|
||||
rdmsr(MSR_FIDVID_STATUS, lo, hi);
|
||||
@ -159,6 +159,7 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
|
||||
{
|
||||
u32 lo;
|
||||
u32 savevid = data->currvid;
|
||||
u32 i = 0;
|
||||
|
||||
if ((fid & INVALID_FID_MASK) || (data->currvid & INVALID_VID_MASK)) {
|
||||
printk(KERN_ERR PFX "internal error - overflow on fid write\n");
|
||||
@ -170,10 +171,13 @@ static int write_new_fid(struct powernow_k8_data *data, u32 fid)
|
||||
dprintk("writing fid 0x%x, lo 0x%x, hi 0x%x\n",
|
||||
fid, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
|
||||
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
|
||||
if (query_current_values_with_pending_wait(data))
|
||||
return 1;
|
||||
do {
|
||||
wrmsr(MSR_FIDVID_CTL, lo, data->plllock * PLL_LOCK_CONVERSION);
|
||||
if (i++ > 100) {
|
||||
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
|
||||
return 1;
|
||||
}
|
||||
} while (query_current_values_with_pending_wait(data));
|
||||
|
||||
count_off_irt(data);
|
||||
|
||||
@ -197,6 +201,7 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
|
||||
{
|
||||
u32 lo;
|
||||
u32 savefid = data->currfid;
|
||||
int i = 0;
|
||||
|
||||
if ((data->currfid & INVALID_FID_MASK) || (vid & INVALID_VID_MASK)) {
|
||||
printk(KERN_ERR PFX "internal error - overflow on vid write\n");
|
||||
@ -208,10 +213,13 @@ static int write_new_vid(struct powernow_k8_data *data, u32 vid)
|
||||
dprintk("writing vid 0x%x, lo 0x%x, hi 0x%x\n",
|
||||
vid, lo, STOP_GRANT_5NS);
|
||||
|
||||
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS);
|
||||
|
||||
if (query_current_values_with_pending_wait(data))
|
||||
return 1;
|
||||
do {
|
||||
wrmsr(MSR_FIDVID_CTL, lo, STOP_GRANT_5NS);
|
||||
if (i++ > 100) {
|
||||
printk(KERN_ERR PFX "internal error - pending bit very stuck - no further pstate changes possible\n");
|
||||
return 1;
|
||||
}
|
||||
} while (query_current_values_with_pending_wait(data));
|
||||
|
||||
if (savefid != data->currfid) {
|
||||
printk(KERN_ERR PFX "fid changed on vid trans, old 0x%x new 0x%x\n",
|
||||
|
@ -123,8 +123,8 @@ swiotlb_init_with_default_size (size_t default_size)
|
||||
/*
|
||||
* Get IO TLB memory from the low pages
|
||||
*/
|
||||
io_tlb_start = alloc_bootmem_low_pages(io_tlb_nslabs *
|
||||
(1 << IO_TLB_SHIFT));
|
||||
io_tlb_start = alloc_bootmem_low_pages_limit(io_tlb_nslabs *
|
||||
(1 << IO_TLB_SHIFT), 0x100000000);
|
||||
if (!io_tlb_start)
|
||||
panic("Cannot allocate SWIOTLB buffer");
|
||||
io_tlb_end = io_tlb_start + io_tlb_nslabs * (1 << IO_TLB_SHIFT);
|
||||
|
@ -275,12 +275,14 @@ static void flush_tlb_all_ipi(void *info)
|
||||
*==========================================================================*/
|
||||
void smp_flush_tlb_mm(struct mm_struct *mm)
|
||||
{
|
||||
int cpu_id = smp_processor_id();
|
||||
int cpu_id;
|
||||
cpumask_t cpu_mask;
|
||||
unsigned long *mmc = &mm->context[cpu_id];
|
||||
unsigned long *mmc;
|
||||
unsigned long flags;
|
||||
|
||||
preempt_disable();
|
||||
cpu_id = smp_processor_id();
|
||||
mmc = &mm->context[cpu_id];
|
||||
cpu_mask = mm->cpu_vm_mask;
|
||||
cpu_clear(cpu_id, cpu_mask);
|
||||
|
||||
@ -343,12 +345,14 @@ void smp_flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
|
||||
void smp_flush_tlb_page(struct vm_area_struct *vma, unsigned long va)
|
||||
{
|
||||
struct mm_struct *mm = vma->vm_mm;
|
||||
int cpu_id = smp_processor_id();
|
||||
int cpu_id;
|
||||
cpumask_t cpu_mask;
|
||||
unsigned long *mmc = &mm->context[cpu_id];
|
||||
unsigned long *mmc;
|
||||
unsigned long flags;
|
||||
|
||||
preempt_disable();
|
||||
cpu_id = smp_processor_id();
|
||||
mmc = &mm->context[cpu_id];
|
||||
cpu_mask = mm->cpu_vm_mask;
|
||||
cpu_clear(cpu_id, cpu_mask);
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* fixup-tb0226.c, The TANBAC TB0226 specific PCI fixups.
|
||||
*
|
||||
* Copyright (C) 2002-2004 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
* Copyright (C) 2002-2005 Yoichi Yuasa <yuasa@hh.iij4u.or.jp>
|
||||
*
|
||||
* 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
|
||||
@ -20,6 +20,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/pci.h>
|
||||
|
||||
#include <asm/vr41xx/giu.h>
|
||||
#include <asm/vr41xx/tb0226.h>
|
||||
|
||||
int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||
@ -29,42 +30,42 @@ int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||
switch (slot) {
|
||||
case 12:
|
||||
vr41xx_set_irq_trigger(GD82559_1_PIN,
|
||||
TRIGGER_LEVEL,
|
||||
SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(GD82559_1_PIN, LEVEL_LOW);
|
||||
IRQ_TRIGGER_LEVEL,
|
||||
IRQ_SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(GD82559_1_PIN, IRQ_LEVEL_LOW);
|
||||
irq = GD82559_1_IRQ;
|
||||
break;
|
||||
case 13:
|
||||
vr41xx_set_irq_trigger(GD82559_2_PIN,
|
||||
TRIGGER_LEVEL,
|
||||
SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(GD82559_2_PIN, LEVEL_LOW);
|
||||
IRQ_TRIGGER_LEVEL,
|
||||
IRQ_SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(GD82559_2_PIN, IRQ_LEVEL_LOW);
|
||||
irq = GD82559_2_IRQ;
|
||||
break;
|
||||
case 14:
|
||||
switch (pin) {
|
||||
case 1:
|
||||
vr41xx_set_irq_trigger(UPD720100_INTA_PIN,
|
||||
TRIGGER_LEVEL,
|
||||
SIGNAL_THROUGH);
|
||||
IRQ_TRIGGER_LEVEL,
|
||||
IRQ_SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(UPD720100_INTA_PIN,
|
||||
LEVEL_LOW);
|
||||
IRQ_LEVEL_LOW);
|
||||
irq = UPD720100_INTA_IRQ;
|
||||
break;
|
||||
case 2:
|
||||
vr41xx_set_irq_trigger(UPD720100_INTB_PIN,
|
||||
TRIGGER_LEVEL,
|
||||
SIGNAL_THROUGH);
|
||||
IRQ_TRIGGER_LEVEL,
|
||||
IRQ_SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(UPD720100_INTB_PIN,
|
||||
LEVEL_LOW);
|
||||
IRQ_LEVEL_LOW);
|
||||
irq = UPD720100_INTB_IRQ;
|
||||
break;
|
||||
case 3:
|
||||
vr41xx_set_irq_trigger(UPD720100_INTC_PIN,
|
||||
TRIGGER_LEVEL,
|
||||
SIGNAL_THROUGH);
|
||||
IRQ_TRIGGER_LEVEL,
|
||||
IRQ_SIGNAL_THROUGH);
|
||||
vr41xx_set_irq_level(UPD720100_INTC_PIN,
|
||||
LEVEL_LOW);
|
||||
IRQ_LEVEL_LOW);
|
||||
irq = UPD720100_INTC_IRQ;
|
||||
break;
|
||||
default:
|
||||
|
@ -303,7 +303,7 @@ struct cpu_spec cpu_specs[] = {
|
||||
.cpu_name = "601",
|
||||
.cpu_features = CPU_FTRS_PPC601,
|
||||
.cpu_user_features = COMMON_USER | PPC_FEATURE_601_INSTR |
|
||||
PPC_FEATURE_UNIFIED_CACHE,
|
||||
PPC_FEATURE_UNIFIED_CACHE | PPC_FEATURE_NO_TB,
|
||||
.icache_bsize = 32,
|
||||
.dcache_bsize = 32,
|
||||
},
|
||||
@ -724,7 +724,8 @@ struct cpu_spec cpu_specs[] = {
|
||||
.pvr_value = 0x00201400,
|
||||
.cpu_name = "403GCX",
|
||||
.cpu_features = CPU_FTRS_40X,
|
||||
.cpu_user_features = PPC_FEATURE_32 | PPC_FEATURE_HAS_MMU,
|
||||
.cpu_user_features = PPC_FEATURE_32 |
|
||||
PPC_FEATURE_HAS_MMU | PPC_FEATURE_NO_TB,
|
||||
.icache_bsize = 16,
|
||||
.dcache_bsize = 16,
|
||||
},
|
||||
|
@ -477,8 +477,7 @@ void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
|
||||
if (cpus_equal(vma->vm_mm->cpu_vm_mask, tmp))
|
||||
local = 1;
|
||||
|
||||
__hash_page(address, pte_val(pte) & (_PAGE_USER|_PAGE_RW), vsid, ptep,
|
||||
0x300, local);
|
||||
__hash_page(address, 0, vsid, ptep, 0x300, local);
|
||||
local_irq_restore(flags);
|
||||
#endif
|
||||
#endif
|
||||
|
@ -68,7 +68,7 @@ static long iSeries_hpte_insert(unsigned long hpte_group, unsigned long va,
|
||||
}
|
||||
|
||||
if (slot < 0) { /* MSB set means secondary group */
|
||||
vflags |= HPTE_V_VALID;
|
||||
vflags |= HPTE_V_SECONDARY;
|
||||
secondary = 1;
|
||||
slot &= 0x7fffffffffffffff;
|
||||
}
|
||||
|
@ -669,7 +669,7 @@ static int pmac_check_legacy_ioport(unsigned int baseport)
|
||||
|
||||
static int __init pmac_declare_of_platform_devices(void)
|
||||
{
|
||||
struct device_node *np;
|
||||
struct device_node *np, *npp;
|
||||
|
||||
np = find_devices("uni-n");
|
||||
if (np) {
|
||||
@ -687,14 +687,16 @@ static int __init pmac_declare_of_platform_devices(void)
|
||||
if (np)
|
||||
of_platform_device_create(np, "platinum", NULL);
|
||||
|
||||
np = find_devices("u3");
|
||||
if (np) {
|
||||
for (np = np->child; np != NULL; np = np->sibling)
|
||||
npp = of_find_node_by_name(NULL, "u3");
|
||||
if (npp) {
|
||||
for (np = NULL; (np = of_get_next_child(npp, np)) != NULL;) {
|
||||
if (strncmp(np->name, "i2c", 3) == 0) {
|
||||
of_platform_device_create(np, "u3-i2c",
|
||||
NULL);
|
||||
of_platform_device_create(np, "u3-i2c", NULL);
|
||||
of_node_put(np);
|
||||
break;
|
||||
}
|
||||
}
|
||||
of_node_put(npp);
|
||||
}
|
||||
np = of_find_node_by_type(NULL, "smu");
|
||||
if (np) {
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:12:19 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:29:10 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
@ -36,6 +37,7 @@ CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -95,6 +97,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_NUMA is not set
|
||||
CONFIG_SCHED_SMT=y
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
@ -110,17 +113,18 @@ CONFIG_PPC_RTAS=y
|
||||
CONFIG_RTAS_PROC=y
|
||||
CONFIG_RTAS_FLASH=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
@ -132,8 +136,6 @@ CONFIG_PCI_NAMES=y
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
# CONFIG_HOTPLUG_PCI is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
@ -163,8 +165,8 @@ CONFIG_SYN_COOKIES=y
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
CONFIG_IP_TCPDIAG_IPV6=y
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
@ -181,6 +183,7 @@ CONFIG_INET6_TUNNEL=m
|
||||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
@ -188,11 +191,14 @@ CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_CONNTRACK=y
|
||||
# CONFIG_IP_NF_CT_ACCT is not set
|
||||
# CONFIG_IP_NF_CONNTRACK_MARK is not set
|
||||
# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=y
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
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
|
||||
@ -216,13 +222,16 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
# CONFIG_IP_NF_MATCH_DCCP is not set
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
@ -240,6 +249,7 @@ 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=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
CONFIG_IP_NF_TARGET_NOTRACK=m
|
||||
CONFIG_IP_NF_ARPTABLES=m
|
||||
@ -251,6 +261,12 @@ CONFIG_IP_NF_ARP_MANGLE=m
|
||||
#
|
||||
# CONFIG_IP6_NF_QUEUE is not set
|
||||
# CONFIG_IP6_NF_IPTABLES is not set
|
||||
# CONFIG_IP6_NF_TARGET_NFQUEUE is not set
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
@ -278,6 +294,7 @@ CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -291,6 +308,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -322,7 +344,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=131072
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
@ -395,6 +416,7 @@ CONFIG_IDEDMA_AUTO=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
|
||||
#
|
||||
@ -435,6 +457,11 @@ CONFIG_NETDEVICES=y
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -442,6 +469,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
|
||||
#
|
||||
@ -462,15 +490,18 @@ CONFIG_E1000=m
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
CONFIG_SKGE=m
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_SPIDER_NET is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
@ -552,6 +583,7 @@ CONFIG_HW_CONSOLE=y
|
||||
CONFIG_SERIAL_NONSTANDARD=y
|
||||
# CONFIG_ROCKETPORT is not set
|
||||
# CONFIG_CYCLADES is not set
|
||||
# CONFIG_DIGIEPCA is not set
|
||||
# CONFIG_MOXA_SMARTIO is not set
|
||||
# CONFIG_ISI is not set
|
||||
# CONFIG_SYNCLINK is not set
|
||||
@ -642,7 +674,6 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
@ -656,7 +687,6 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_I2C_VIAPRO is not set
|
||||
# CONFIG_I2C_VOODOO3 is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
@ -683,11 +713,16 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -756,10 +791,6 @@ CONFIG_FS_MBCACHE=y
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
@ -768,6 +799,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -794,13 +826,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
# CONFIG_TMPFS_SECURITY is not set
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -846,6 +876,7 @@ CONFIG_SUNRPC=m
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -923,6 +954,7 @@ CONFIG_NLS_ISO8859_15=m
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=15
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -981,7 +1013,12 @@ CONFIG_CRYPTO_DEFLATE=m
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=m
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:16:59 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:30:23 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -37,6 +38,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -97,6 +99,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_NUMA is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
@ -109,19 +112,20 @@ CONFIG_HZ_250=y
|
||||
CONFIG_HZ=250
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
# CONFIG_HOTPLUG_CPU is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
@ -132,8 +136,6 @@ CONFIG_PCI_NAMES=y
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
# CONFIG_HOTPLUG_PCI is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
@ -163,8 +165,8 @@ CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_IP_TCPDIAG=m
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
@ -175,6 +177,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
@ -182,11 +185,14 @@ CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
CONFIG_IP_NF_CT_ACCT=y
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
CONFIG_IP_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
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
|
||||
@ -210,14 +216,18 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
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_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
@ -235,6 +245,7 @@ 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=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
@ -243,6 +254,11 @@ CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
@ -270,6 +286,7 @@ CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -283,6 +300,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -315,7 +337,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CDROM_PKTCDVD=m
|
||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||
# CONFIG_CDROM_PKTCDVD_WCACHE is not set
|
||||
@ -395,6 +416,7 @@ CONFIG_IDEDMA_AUTO=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
@ -422,6 +444,7 @@ CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
@ -435,10 +458,12 @@ CONFIG_SCSI_SPI_ATTRS=y
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
CONFIG_SCSI_SATA=y
|
||||
# CONFIG_SCSI_SATA_AHCI is not set
|
||||
CONFIG_SCSI_SATA_SVW=y
|
||||
# CONFIG_SCSI_ATA_PIIX is not set
|
||||
# CONFIG_SCSI_SATA_MV is not set
|
||||
# CONFIG_SCSI_SATA_NV is not set
|
||||
# CONFIG_SCSI_SATA_PROMISE is not set
|
||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||
@ -498,6 +523,7 @@ CONFIG_DM_ZERO=m
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
@ -540,7 +566,6 @@ CONFIG_IEEE1394_RAWIO=y
|
||||
#
|
||||
CONFIG_ADB_PMU=y
|
||||
CONFIG_PMAC_SMU=y
|
||||
# CONFIG_PMAC_BACKLIGHT is not set
|
||||
CONFIG_THERM_PM72=y
|
||||
|
||||
#
|
||||
@ -557,6 +582,11 @@ CONFIG_TUN=m
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -564,6 +594,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
CONFIG_SUNGEM=y
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
|
||||
#
|
||||
@ -585,6 +616,7 @@ CONFIG_E1000=y
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
CONFIG_TIGON3=m
|
||||
@ -594,6 +626,7 @@ CONFIG_TIGON3=m
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
@ -760,8 +793,8 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
CONFIG_I2C_PMAC_SMU=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
@ -775,7 +808,6 @@ CONFIG_I2C_KEYWEST=y
|
||||
# CONFIG_I2C_VIAPRO is not set
|
||||
# CONFIG_I2C_VOODOO3 is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
@ -802,11 +834,16 @@ CONFIG_I2C_KEYWEST=y
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -856,6 +893,7 @@ CONFIG_FB_RADEON_I2C=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
|
||||
@ -937,6 +975,7 @@ CONFIG_USB_STORAGE_DPCM=y
|
||||
CONFIG_USB_STORAGE_SDDR09=y
|
||||
CONFIG_USB_STORAGE_SDDR55=y
|
||||
CONFIG_USB_STORAGE_JUMPSHOT=y
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
@ -956,9 +995,11 @@ CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
@ -983,30 +1024,14 @@ CONFIG_USB_KAWETH=m
|
||||
CONFIG_USB_PEGASUS=m
|
||||
CONFIG_USB_RTL8150=m
|
||||
CONFIG_USB_USBNET=m
|
||||
|
||||
#
|
||||
# USB Host-to-Host Cables
|
||||
#
|
||||
CONFIG_USB_ALI_M5632=y
|
||||
CONFIG_USB_AN2720=y
|
||||
CONFIG_USB_BELKIN=y
|
||||
CONFIG_USB_GENESYS=y
|
||||
CONFIG_USB_NET1080=y
|
||||
CONFIG_USB_PL2301=y
|
||||
CONFIG_USB_KC2190=y
|
||||
|
||||
#
|
||||
# Intelligent USB Devices/Gadgets
|
||||
#
|
||||
CONFIG_USB_ARMLINUX=y
|
||||
CONFIG_USB_EPSON2888=y
|
||||
CONFIG_USB_ZAURUS=y
|
||||
CONFIG_USB_CDCETHER=y
|
||||
|
||||
#
|
||||
# USB Network Adapters
|
||||
#
|
||||
CONFIG_USB_AX8817X=y
|
||||
# CONFIG_USB_NET_AX8817X is not set
|
||||
CONFIG_USB_NET_CDCETHER=m
|
||||
# CONFIG_USB_NET_GL620A is not set
|
||||
# CONFIG_USB_NET_NET1080 is not set
|
||||
# CONFIG_USB_NET_PLUSB is not set
|
||||
# CONFIG_USB_NET_RNDIS_HOST is not set
|
||||
# CONFIG_USB_NET_CDC_SUBSET is not set
|
||||
# CONFIG_USB_NET_ZAURUS is not set
|
||||
CONFIG_USB_MON=y
|
||||
|
||||
#
|
||||
@ -1124,16 +1149,12 @@ CONFIG_REISERFS_FS_POSIX_ACL=y
|
||||
CONFIG_REISERFS_FS_SECURITY=y
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
@ -1141,6 +1162,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -1168,14 +1190,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_DEVPTS_FS_XATTR=y
|
||||
# CONFIG_DEVPTS_FS_SECURITY is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_SECURITY=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -1225,6 +1244,7 @@ CONFIG_CIFS=m
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -1303,6 +1323,7 @@ CONFIG_OPROFILE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -1360,7 +1381,12 @@ CONFIG_CRYPTO_TEST=m
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:17:02 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:30:56 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -38,6 +39,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -88,6 +90,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_NUMA is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
@ -101,17 +104,16 @@ CONFIG_HZ=250
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
@ -152,8 +154,8 @@ CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_IP_TCPDIAG=m
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
@ -164,6 +166,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
@ -171,11 +174,14 @@ CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
CONFIG_IP_NF_CT_ACCT=y
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
CONFIG_IP_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
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
|
||||
@ -199,14 +205,18 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
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_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
@ -224,6 +234,7 @@ 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=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
@ -232,6 +243,11 @@ CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
@ -259,6 +275,7 @@ CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -272,6 +289,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=m
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -303,7 +325,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
@ -323,6 +344,7 @@ CONFIG_IOSCHED_CFQ=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
@ -350,6 +372,7 @@ CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
CONFIG_SCSI_FC_ATTRS=y
|
||||
# CONFIG_SCSI_ISCSI_ATTRS is not set
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
@ -363,6 +386,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
@ -415,6 +439,7 @@ CONFIG_DM_ZERO=m
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
@ -444,6 +469,11 @@ CONFIG_TUN=m
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -451,6 +481,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
|
||||
#
|
||||
@ -489,6 +520,7 @@ CONFIG_E1000=m
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
@ -498,6 +530,7 @@ CONFIG_E1000=m
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
@ -632,7 +665,6 @@ CONFIG_MAX_RAW_DEVS=256
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
@ -643,11 +675,16 @@ CONFIG_MAX_RAW_DEVS=256
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -722,16 +759,12 @@ CONFIG_JFS_SECURITY=y
|
||||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
@ -739,6 +772,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -766,14 +800,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_DEVPTS_FS_XATTR=y
|
||||
CONFIG_DEVPTS_FS_SECURITY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_SECURITY=y
|
||||
# CONFIG_HUGETLBFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -824,6 +855,7 @@ CONFIG_CIFS_POSIX=y
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -897,6 +929,7 @@ CONFIG_OPROFILE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -954,7 +987,12 @@ CONFIG_CRYPTO_TEST=m
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:17:04 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:31:24 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -37,6 +38,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
# CONFIG_CPUSETS is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
@ -97,6 +99,7 @@ CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
# CONFIG_NUMA is not set
|
||||
# CONFIG_SCHED_SMT is not set
|
||||
CONFIG_PREEMPT_NONE=y
|
||||
@ -109,17 +112,18 @@ CONFIG_HZ_250=y
|
||||
CONFIG_HZ=250
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
|
||||
#
|
||||
@ -131,8 +135,6 @@ CONFIG_PCI_NAMES=y
|
||||
# PCI Hotplug Support
|
||||
#
|
||||
# CONFIG_HOTPLUG_PCI is not set
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
@ -163,13 +165,18 @@ CONFIG_IP_PNP_DHCP=y
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_IP_TCPDIAG=y
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
@ -196,6 +203,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -209,6 +217,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -240,7 +253,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
@ -313,6 +325,7 @@ CONFIG_IDEDMA_AUTO=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
|
||||
#
|
||||
@ -353,6 +366,11 @@ CONFIG_NETDEVICES=y
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -360,6 +378,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
# CONFIG_NET_VENDOR_3COM is not set
|
||||
|
||||
#
|
||||
@ -398,6 +417,7 @@ CONFIG_E1000=y
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
@ -408,6 +428,7 @@ CONFIG_E1000=y
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
@ -553,7 +574,6 @@ CONFIG_I2C_AMD8111=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_PROSAVAGE is not set
|
||||
@ -567,7 +587,6 @@ CONFIG_I2C_AMD8111=y
|
||||
# CONFIG_I2C_VIAPRO is not set
|
||||
# CONFIG_I2C_VOODOO3 is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
@ -594,11 +613,16 @@ CONFIG_I2C_AMD8111=y
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -681,9 +705,11 @@ CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
@ -814,10 +840,6 @@ CONFIG_JBD=y
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
@ -826,6 +848,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -849,14 +872,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_DEVPTS_FS_XATTR=y
|
||||
# CONFIG_DEVPTS_FS_SECURITY is not set
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_SECURITY=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -898,6 +918,7 @@ CONFIG_RPCSEC_GSS_KRB5=y
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -975,6 +996,7 @@ CONFIG_NLS_UTF8=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
CONFIG_DEBUG_SLAB=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -1034,6 +1056,7 @@ CONFIG_CRYPTO_DES=y
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=y
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:17:07 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:32:17 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -38,6 +39,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
@ -104,6 +106,7 @@ CONFIG_DISCONTIGMEM_MANUAL=y
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_NEED_MULTIPLE_NODES=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
||||
CONFIG_NODES_SPAN_OTHER_NODES=y
|
||||
CONFIG_NUMA=y
|
||||
@ -124,19 +127,20 @@ CONFIG_RTAS_FLASH=m
|
||||
CONFIG_SCANLOG=m
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
@ -152,8 +156,6 @@ CONFIG_HOTPLUG_PCI=m
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
CONFIG_HOTPLUG_PCI_RPA=m
|
||||
CONFIG_HOTPLUG_PCI_RPA_DLPAR=m
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
@ -183,8 +185,8 @@ CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
CONFIG_IP_TCPDIAG=m
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
@ -195,6 +197,9 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
@ -202,11 +207,15 @@ CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
CONFIG_IP_NF_CT_ACCT=y
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
CONFIG_IP_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_IP_NF_CONNTRACK_NETLINK=m
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
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
|
||||
@ -230,14 +239,18 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
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_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
@ -255,6 +268,7 @@ 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=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
@ -263,6 +277,11 @@ CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
@ -290,6 +309,7 @@ CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -303,6 +323,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -342,7 +367,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
@ -416,6 +440,7 @@ CONFIG_IDEDMA_AUTO=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
@ -443,6 +468,7 @@ CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
CONFIG_SCSI_FC_ATTRS=y
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
@ -456,6 +482,7 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
@ -517,6 +544,7 @@ CONFIG_DM_MULTIPATH_EMC=m
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
@ -546,6 +574,11 @@ CONFIG_TUN=m
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -553,6 +586,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
# CONFIG_CASSINI is not set
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
CONFIG_VORTEX=y
|
||||
# CONFIG_TYPHOON is not set
|
||||
@ -581,6 +615,7 @@ CONFIG_E100=y
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_NET_POCKET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -594,6 +629,7 @@ CONFIG_E1000=y
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
@ -604,6 +640,7 @@ CONFIG_TIGON3=y
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
CONFIG_IXGB=m
|
||||
# CONFIG_IXGB_NAPI is not set
|
||||
CONFIG_S2IO=m
|
||||
@ -789,7 +826,6 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
@ -804,7 +840,6 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# CONFIG_I2C_VIAPRO is not set
|
||||
# CONFIG_I2C_VOODOO3 is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
@ -831,11 +866,16 @@ CONFIG_I2C_ALGOBIT=y
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -885,6 +925,7 @@ CONFIG_FB_RADEON_I2C=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
|
||||
@ -982,9 +1023,11 @@ CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
@ -1057,7 +1100,8 @@ CONFIG_USB_MON=y
|
||||
# InfiniBand support
|
||||
#
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_VERBS=m
|
||||
# CONFIG_INFINIBAND_USER_MAD is not set
|
||||
# CONFIG_INFINIBAND_USER_ACCESS is not set
|
||||
CONFIG_INFINIBAND_MTHCA=m
|
||||
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
|
||||
CONFIG_INFINIBAND_IPOIB=m
|
||||
@ -1095,16 +1139,12 @@ CONFIG_JFS_SECURITY=y
|
||||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
@ -1112,6 +1152,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=m
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -1139,14 +1180,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_DEVPTS_FS_XATTR=y
|
||||
CONFIG_DEVPTS_FS_SECURITY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_SECURITY=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -1197,6 +1235,7 @@ CONFIG_CIFS_POSIX=y
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -1261,6 +1300,7 @@ CONFIG_OPROFILE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -1320,7 +1360,12 @@ CONFIG_CRYPTO_TEST=m
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
@ -1,17 +1,17 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.13-rc6
|
||||
# Mon Aug 8 14:16:54 2005
|
||||
# Linux kernel version: 2.6.14-rc4
|
||||
# Thu Oct 20 08:28:33 2005
|
||||
#
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
CONFIG_HAVE_DEC_LOCK=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_COMPAT=y
|
||||
CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
|
||||
CONFIG_ARCH_MAY_HAVE_PC_FDC=y
|
||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||
|
||||
#
|
||||
@ -26,6 +26,7 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
@ -37,6 +38,7 @@ CONFIG_KOBJECT_UEVENT=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_CPUSETS=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
@ -106,6 +108,7 @@ CONFIG_DISCONTIGMEM_MANUAL=y
|
||||
CONFIG_DISCONTIGMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_NEED_MULTIPLE_NODES=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
||||
CONFIG_NODES_SPAN_OTHER_NODES=y
|
||||
# CONFIG_NUMA is not set
|
||||
@ -126,19 +129,20 @@ CONFIG_RTAS_FLASH=m
|
||||
CONFIG_SCANLOG=m
|
||||
CONFIG_LPARCFG=y
|
||||
CONFIG_SECCOMP=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
# Bus Options
|
||||
#
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_BINFMT_MISC=m
|
||||
# CONFIG_PCI_LEGACY_PROC is not set
|
||||
# CONFIG_PCI_NAMES is not set
|
||||
# CONFIG_PCI_DEBUG is not set
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
@ -154,8 +158,6 @@ CONFIG_HOTPLUG_PCI=m
|
||||
# CONFIG_HOTPLUG_PCI_SHPC is not set
|
||||
CONFIG_HOTPLUG_PCI_RPA=m
|
||||
CONFIG_HOTPLUG_PCI_RPA_DLPAR=m
|
||||
CONFIG_PROC_DEVICETREE=y
|
||||
# CONFIG_CMDLINE_BOOL is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
@ -185,8 +187,8 @@ CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
CONFIG_INET_IPCOMP=m
|
||||
CONFIG_INET_TUNNEL=y
|
||||
# CONFIG_IP_TCPDIAG is not set
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
|
||||
@ -197,6 +199,9 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
CONFIG_NETFILTER_NETLINK=y
|
||||
CONFIG_NETFILTER_NETLINK_QUEUE=m
|
||||
CONFIG_NETFILTER_NETLINK_LOG=m
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
@ -204,11 +209,15 @@ CONFIG_NETFILTER=y
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
CONFIG_IP_NF_CT_ACCT=y
|
||||
CONFIG_IP_NF_CONNTRACK_MARK=y
|
||||
CONFIG_IP_NF_CONNTRACK_EVENTS=y
|
||||
CONFIG_IP_NF_CONNTRACK_NETLINK=m
|
||||
CONFIG_IP_NF_CT_PROTO_SCTP=m
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_NETBIOS_NS is not set
|
||||
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
|
||||
@ -232,14 +241,18 @@ CONFIG_IP_NF_MATCH_OWNER=m
|
||||
CONFIG_IP_NF_MATCH_ADDRTYPE=m
|
||||
CONFIG_IP_NF_MATCH_REALM=m
|
||||
CONFIG_IP_NF_MATCH_SCTP=m
|
||||
CONFIG_IP_NF_MATCH_DCCP=m
|
||||
CONFIG_IP_NF_MATCH_COMMENT=m
|
||||
CONFIG_IP_NF_MATCH_CONNMARK=m
|
||||
CONFIG_IP_NF_MATCH_CONNBYTES=m
|
||||
CONFIG_IP_NF_MATCH_HASHLIMIT=m
|
||||
CONFIG_IP_NF_MATCH_STRING=m
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
CONFIG_IP_NF_TARGET_REJECT=m
|
||||
CONFIG_IP_NF_TARGET_LOG=m
|
||||
CONFIG_IP_NF_TARGET_ULOG=m
|
||||
CONFIG_IP_NF_TARGET_TCPMSS=m
|
||||
CONFIG_IP_NF_TARGET_NFQUEUE=m
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
@ -257,6 +270,7 @@ 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=m
|
||||
CONFIG_IP_NF_TARGET_CONNMARK=m
|
||||
CONFIG_IP_NF_TARGET_CLUSTERIP=m
|
||||
CONFIG_IP_NF_RAW=m
|
||||
@ -265,6 +279,11 @@ CONFIG_IP_NF_ARPTABLES=m
|
||||
CONFIG_IP_NF_ARPFILTER=m
|
||||
CONFIG_IP_NF_ARP_MANGLE=m
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
@ -292,6 +311,7 @@ CONFIG_NET_CLS_ROUTE=y
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
@ -305,6 +325,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
@ -344,7 +369,6 @@ CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
@ -422,6 +446,7 @@ CONFIG_IDEDMA_AUTO=y
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
@ -449,6 +474,7 @@ CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_SPI_ATTRS=y
|
||||
CONFIG_SCSI_FC_ATTRS=y
|
||||
CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_SAS_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
@ -462,10 +488,12 @@ CONFIG_SCSI_ISCSI_ATTRS=m
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_MEGARAID_SAS is not set
|
||||
CONFIG_SCSI_SATA=y
|
||||
# CONFIG_SCSI_SATA_AHCI is not set
|
||||
CONFIG_SCSI_SATA_SVW=y
|
||||
# CONFIG_SCSI_ATA_PIIX is not set
|
||||
# CONFIG_SCSI_SATA_MV is not set
|
||||
# CONFIG_SCSI_SATA_NV is not set
|
||||
# CONFIG_SCSI_SATA_PROMISE is not set
|
||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||
@ -535,6 +563,7 @@ CONFIG_DM_MULTIPATH_EMC=m
|
||||
# CONFIG_FUSION is not set
|
||||
# CONFIG_FUSION_SPI is not set
|
||||
# CONFIG_FUSION_FC is not set
|
||||
# CONFIG_FUSION_SAS is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
@ -578,7 +607,6 @@ CONFIG_IEEE1394_AMDTP=m
|
||||
#
|
||||
CONFIG_ADB_PMU=y
|
||||
CONFIG_PMAC_SMU=y
|
||||
# CONFIG_PMAC_BACKLIGHT is not set
|
||||
CONFIG_THERM_PM72=y
|
||||
|
||||
#
|
||||
@ -595,6 +623,11 @@ CONFIG_TUN=m
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
@ -602,6 +635,7 @@ CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
CONFIG_SUNGEM=y
|
||||
# CONFIG_CASSINI is not set
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
CONFIG_VORTEX=y
|
||||
# CONFIG_TYPHOON is not set
|
||||
@ -630,6 +664,7 @@ CONFIG_E100=y
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_NET_POCKET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -643,16 +678,19 @@ CONFIG_E1000=y
|
||||
# CONFIG_HAMACHI is not set
|
||||
# CONFIG_YELLOWFIN is not set
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SIS190 is not set
|
||||
# CONFIG_SKGE is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
CONFIG_TIGON3=y
|
||||
# CONFIG_BNX2 is not set
|
||||
# CONFIG_SPIDER_NET is not set
|
||||
# CONFIG_MV643XX_ETH is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_CHELSIO_T1 is not set
|
||||
CONFIG_IXGB=m
|
||||
# CONFIG_IXGB_NAPI is not set
|
||||
# CONFIG_S2IO is not set
|
||||
@ -838,8 +876,8 @@ CONFIG_I2C_AMD8111=y
|
||||
# CONFIG_I2C_I801 is not set
|
||||
# CONFIG_I2C_I810 is not set
|
||||
# CONFIG_I2C_PIIX4 is not set
|
||||
# CONFIG_I2C_ISA is not set
|
||||
CONFIG_I2C_KEYWEST=y
|
||||
CONFIG_I2C_PMAC_SMU=y
|
||||
# CONFIG_I2C_NFORCE2 is not set
|
||||
# CONFIG_I2C_PARPORT is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
@ -854,7 +892,6 @@ CONFIG_I2C_KEYWEST=y
|
||||
# CONFIG_I2C_VIAPRO is not set
|
||||
# CONFIG_I2C_VOODOO3 is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
# CONFIG_I2C_SENSOR is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
@ -881,11 +918,16 @@ CONFIG_I2C_KEYWEST=y
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -939,6 +981,7 @@ CONFIG_FB_RADEON_I2C=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
|
||||
@ -1020,6 +1063,7 @@ CONFIG_USB_STORAGE=m
|
||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
@ -1036,9 +1080,11 @@ CONFIG_USB_HIDDEV=y
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
@ -1111,7 +1157,8 @@ CONFIG_USB_PEGASUS=y
|
||||
# InfiniBand support
|
||||
#
|
||||
CONFIG_INFINIBAND=m
|
||||
CONFIG_INFINIBAND_USER_VERBS=m
|
||||
# CONFIG_INFINIBAND_USER_MAD is not set
|
||||
# CONFIG_INFINIBAND_USER_ACCESS is not set
|
||||
CONFIG_INFINIBAND_MTHCA=m
|
||||
# CONFIG_INFINIBAND_MTHCA_DEBUG is not set
|
||||
CONFIG_INFINIBAND_IPOIB=m
|
||||
@ -1149,16 +1196,12 @@ CONFIG_JFS_SECURITY=y
|
||||
# CONFIG_JFS_DEBUG is not set
|
||||
# CONFIG_JFS_STATISTICS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
CONFIG_XFS_FS=m
|
||||
CONFIG_XFS_EXPORT=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
CONFIG_XFS_SECURITY=y
|
||||
CONFIG_XFS_POSIX_ACL=y
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
@ -1166,6 +1209,7 @@ CONFIG_INOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_AUTOFS_FS=y
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -1192,14 +1236,11 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
CONFIG_DEVPTS_FS_XATTR=y
|
||||
CONFIG_DEVPTS_FS_SECURITY=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_XATTR=y
|
||||
CONFIG_TMPFS_SECURITY=y
|
||||
CONFIG_HUGETLBFS=y
|
||||
CONFIG_HUGETLB_PAGE=y
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
@ -1250,6 +1291,7 @@ CONFIG_CIFS_POSIX=y
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -1328,6 +1370,7 @@ CONFIG_OPROFILE=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOG_BUF_SHIFT=17
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
@ -1387,7 +1430,12 @@ CONFIG_CRYPTO_TEST=m
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
CONFIG_LIBCRC32C=m
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_TEXTSEARCH=y
|
||||
CONFIG_TEXTSEARCH_KMP=m
|
||||
CONFIG_TEXTSEARCH_BM=m
|
||||
CONFIG_TEXTSEARCH_FSM=m
|
||||
|
@ -109,7 +109,7 @@ __do_get_xsec:
|
||||
lwz r6,(CFG_TB_TO_XS+4)(r9)
|
||||
mulhwu r4,r7,r5
|
||||
mulhwu r6,r7,r6
|
||||
mullw r6,r7,r5
|
||||
mullw r0,r7,r5
|
||||
addc r6,r6,r0
|
||||
|
||||
/* At this point, we have the scaled xsec value in r4 + XER:CA
|
||||
|
@ -22,6 +22,7 @@
|
||||
#include <linux/time.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/processor.h>
|
||||
@ -39,6 +40,8 @@ struct sh_cpuinfo cpu_data[NR_CPUS];
|
||||
extern void per_cpu_trap_init(void);
|
||||
|
||||
cpumask_t cpu_possible_map;
|
||||
EXPORT_SYMBOL(cpu_possible_map);
|
||||
|
||||
cpumask_t cpu_online_map;
|
||||
static atomic_t cpus_booted = ATOMIC_INIT(0);
|
||||
|
||||
|
@ -53,19 +53,18 @@
|
||||
* be guaranteed to be 0 ... mmu_context.h does guarantee this
|
||||
* by only using 10 bits in the hwcontext value.
|
||||
*/
|
||||
#define CREATE_VPTE_OFFSET1(r1, r2)
|
||||
#define CREATE_VPTE_OFFSET1(r1, r2) nop
|
||||
#define CREATE_VPTE_OFFSET2(r1, r2) \
|
||||
srax r1, 10, r2
|
||||
#define CREATE_VPTE_NOP nop
|
||||
#else
|
||||
#define CREATE_VPTE_OFFSET1(r1, r2) \
|
||||
srax r1, PAGE_SHIFT, r2
|
||||
#define CREATE_VPTE_OFFSET2(r1, r2) \
|
||||
sllx r2, 3, r2
|
||||
#define CREATE_VPTE_NOP
|
||||
#endif
|
||||
|
||||
/* DTLB ** ICACHE line 1: Quick user TLB misses */
|
||||
mov TLB_SFSR, %g1
|
||||
ldxa [%g1 + %g1] ASI_DMMU, %g4 ! Get TAG_ACCESS
|
||||
andcc %g4, TAG_CONTEXT_BITS, %g0 ! From Nucleus?
|
||||
from_tl1_trap:
|
||||
@ -74,18 +73,16 @@ from_tl1_trap:
|
||||
be,pn %xcc, kvmap ! Yep, special processing
|
||||
CREATE_VPTE_OFFSET2(%g4, %g6) ! Create VPTE offset
|
||||
cmp %g5, 4 ! Last trap level?
|
||||
be,pn %xcc, longpath ! Yep, cannot risk VPTE miss
|
||||
nop ! delay slot
|
||||
|
||||
/* DTLB ** ICACHE line 2: User finish + quick kernel TLB misses */
|
||||
be,pn %xcc, longpath ! Yep, cannot risk VPTE miss
|
||||
nop ! delay slot
|
||||
ldxa [%g3 + %g6] ASI_S, %g5 ! Load VPTE
|
||||
1: brgez,pn %g5, longpath ! Invalid, branch out
|
||||
nop ! Delay-slot
|
||||
9: stxa %g5, [%g0] ASI_DTLB_DATA_IN ! Reload TLB
|
||||
retry ! Trap return
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
|
||||
/* DTLB ** ICACHE line 3: winfixups+real_faults */
|
||||
longpath:
|
||||
@ -106,8 +103,7 @@ longpath:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
CREATE_VPTE_NOP
|
||||
nop
|
||||
|
||||
#undef CREATE_VPTE_OFFSET1
|
||||
#undef CREATE_VPTE_OFFSET2
|
||||
#undef CREATE_VPTE_NOP
|
||||
|
@ -14,14 +14,14 @@
|
||||
*/
|
||||
|
||||
/* PROT ** ICACHE line 1: User DTLB protection trap */
|
||||
stxa %g0, [%g1] ASI_DMMU ! Clear SFSR FaultValid bit
|
||||
membar #Sync ! Synchronize ASI stores
|
||||
rdpr %pstate, %g5 ! Move into alternate globals
|
||||
mov TLB_SFSR, %g1
|
||||
stxa %g0, [%g1] ASI_DMMU ! Clear FaultValid bit
|
||||
membar #Sync ! Synchronize stores
|
||||
rdpr %pstate, %g5 ! Move into alt-globals
|
||||
wrpr %g5, PSTATE_AG|PSTATE_MG, %pstate
|
||||
rdpr %tl, %g1 ! Need to do a winfixup?
|
||||
rdpr %tl, %g1 ! Need a winfixup?
|
||||
cmp %g1, 1 ! Trap level >1?
|
||||
mov TLB_TAG_ACCESS, %g4 ! Prepare reload of vaddr
|
||||
nop
|
||||
mov TLB_TAG_ACCESS, %g4 ! For reload of vaddr
|
||||
|
||||
/* PROT ** ICACHE line 2: More real fault processing */
|
||||
bgu,pn %xcc, winfix_trampoline ! Yes, perform winfixup
|
||||
|
@ -28,19 +28,14 @@
|
||||
#include <asm/mmu.h>
|
||||
|
||||
/* This section from from _start to sparc64_boot_end should fit into
|
||||
* 0x0000.0000.0040.4000 to 0x0000.0000.0040.8000 and will be sharing space
|
||||
* with bootup_user_stack, which is from 0x0000.0000.0040.4000 to
|
||||
* 0x0000.0000.0040.6000 and empty_bad_page, which is from
|
||||
* 0x0000.0000.0040.6000 to 0x0000.0000.0040.8000.
|
||||
* 0x0000000000404000 to 0x0000000000408000.
|
||||
*/
|
||||
|
||||
.text
|
||||
.globl start, _start, stext, _stext
|
||||
_start:
|
||||
start:
|
||||
_stext:
|
||||
stext:
|
||||
bootup_user_stack:
|
||||
! 0x0000000000404000
|
||||
b sparc64_boot
|
||||
flushw /* Flush register file. */
|
||||
@ -392,31 +387,30 @@ tlb_fixup_done:
|
||||
* former does use this code, the latter does not yet due
|
||||
* to some complexities. That should be fixed up at some
|
||||
* point.
|
||||
*
|
||||
* There used to be enormous complexity wrt. transferring
|
||||
* over from the firwmare's trap table to the Linux kernel's.
|
||||
* For example, there was a chicken & egg problem wrt. building
|
||||
* the OBP page tables, yet needing to be on the Linux kernel
|
||||
* trap table (to translate PAGE_OFFSET addresses) in order to
|
||||
* do that.
|
||||
*
|
||||
* We now handle OBP tlb misses differently, via linear lookups
|
||||
* into the prom_trans[] array. So that specific problem no
|
||||
* longer exists. Yet, unfortunately there are still some issues
|
||||
* preventing trampoline.S from using this code... ho hum.
|
||||
*/
|
||||
.globl setup_trap_table
|
||||
setup_trap_table:
|
||||
save %sp, -192, %sp
|
||||
|
||||
/* Force interrupts to be disabled. Transferring over to
|
||||
* the Linux trap table is a very delicate operation.
|
||||
* Until we are actually on the Linux trap table, we cannot
|
||||
* get the PAGE_OFFSET linear mappings translated. We need
|
||||
* that mapping to be setup in order to initialize the firmware
|
||||
* page tables.
|
||||
*
|
||||
* So there is this window of time, from the return from
|
||||
* prom_set_trap_table() until inherit_prom_mappings_post()
|
||||
* (in arch/sparc64/mm/init.c) completes, during which no
|
||||
* firmware address space accesses can be made.
|
||||
*/
|
||||
/* Force interrupts to be disabled. */
|
||||
rdpr %pstate, %o1
|
||||
andn %o1, PSTATE_IE, %o1
|
||||
wrpr %o1, 0x0, %pstate
|
||||
wrpr %g0, 15, %pil
|
||||
|
||||
/* Ok, now make the final valid firmware call to jump over
|
||||
* to the Linux trap table.
|
||||
*/
|
||||
/* Make the firmware call to jump over to the Linux trap table. */
|
||||
call prom_set_trap_table
|
||||
sethi %hi(sparc64_ttable_tl0), %o0
|
||||
|
||||
@ -540,15 +534,21 @@ setup_tba: /* i0 = is_starfire */
|
||||
|
||||
ret
|
||||
restore
|
||||
sparc64_boot_end:
|
||||
|
||||
#include "systbls.S"
|
||||
#include "ktlb.S"
|
||||
#include "etrap.S"
|
||||
#include "rtrap.S"
|
||||
#include "winfixup.S"
|
||||
#include "entry.S"
|
||||
|
||||
/*
|
||||
* The following skips make sure the trap table in ttable.S is aligned
|
||||
* The following skip makes sure the trap table in ttable.S is aligned
|
||||
* on a 32K boundary as required by the v9 specs for TBA register.
|
||||
*/
|
||||
sparc64_boot_end:
|
||||
.skip 0x2000 + _start - sparc64_boot_end
|
||||
bootup_user_stack_end:
|
||||
.skip 0x2000
|
||||
1:
|
||||
.skip 0x4000 + _start - 1b
|
||||
|
||||
#ifdef CONFIG_SBUS
|
||||
/* This is just a hack to fool make depend config.h discovering
|
||||
@ -560,15 +560,6 @@ bootup_user_stack_end:
|
||||
! 0x0000000000408000
|
||||
|
||||
#include "ttable.S"
|
||||
#include "systbls.S"
|
||||
#include "ktlb.S"
|
||||
#include "etrap.S"
|
||||
#include "rtrap.S"
|
||||
#include "winfixup.S"
|
||||
#include "entry.S"
|
||||
|
||||
/* This is just anal retentiveness on my part... */
|
||||
.align 16384
|
||||
|
||||
.data
|
||||
.align 8
|
||||
|
@ -15,14 +15,12 @@
|
||||
*/
|
||||
#define CREATE_VPTE_OFFSET1(r1, r2) \
|
||||
srax r1, 10, r2
|
||||
#define CREATE_VPTE_OFFSET2(r1, r2)
|
||||
#define CREATE_VPTE_NOP nop
|
||||
#define CREATE_VPTE_OFFSET2(r1, r2) nop
|
||||
#else /* PAGE_SHIFT */
|
||||
#define CREATE_VPTE_OFFSET1(r1, r2) \
|
||||
srax r1, PAGE_SHIFT, r2
|
||||
#define CREATE_VPTE_OFFSET2(r1, r2) \
|
||||
sllx r2, 3, r2
|
||||
#define CREATE_VPTE_NOP
|
||||
#endif /* PAGE_SHIFT */
|
||||
|
||||
|
||||
@ -36,6 +34,7 @@
|
||||
*/
|
||||
|
||||
/* ITLB ** ICACHE line 1: Quick user TLB misses */
|
||||
mov TLB_SFSR, %g1
|
||||
ldxa [%g1 + %g1] ASI_IMMU, %g4 ! Get TAG_ACCESS
|
||||
CREATE_VPTE_OFFSET1(%g4, %g6) ! Create VPTE offset
|
||||
CREATE_VPTE_OFFSET2(%g4, %g6) ! Create VPTE offset
|
||||
@ -43,41 +42,38 @@
|
||||
1: brgez,pn %g5, 3f ! Not valid, branch out
|
||||
sethi %hi(_PAGE_EXEC), %g4 ! Delay-slot
|
||||
andcc %g5, %g4, %g0 ! Executable?
|
||||
|
||||
/* ITLB ** ICACHE line 2: Real faults */
|
||||
be,pn %xcc, 3f ! Nope, branch.
|
||||
nop ! Delay-slot
|
||||
2: stxa %g5, [%g0] ASI_ITLB_DATA_IN ! Load PTE into TLB
|
||||
retry ! Trap return
|
||||
3: rdpr %pstate, %g4 ! Move into alternate globals
|
||||
|
||||
/* ITLB ** ICACHE line 2: Real faults */
|
||||
3: rdpr %pstate, %g4 ! Move into alt-globals
|
||||
wrpr %g4, PSTATE_AG|PSTATE_MG, %pstate
|
||||
rdpr %tpc, %g5 ! And load faulting VA
|
||||
mov FAULT_CODE_ITLB, %g4 ! It was read from ITLB
|
||||
sparc64_realfault_common: ! Called by TL0 dtlb_miss too
|
||||
|
||||
/* ITLB ** ICACHE line 3: Finish faults */
|
||||
sparc64_realfault_common: ! Called by dtlb_miss
|
||||
stb %g4, [%g6 + TI_FAULT_CODE]
|
||||
stx %g5, [%g6 + TI_FAULT_ADDR]
|
||||
ba,pt %xcc, etrap ! Save state
|
||||
1: rd %pc, %g7 ! ...
|
||||
nop
|
||||
|
||||
/* ITLB ** ICACHE line 3: Finish faults + window fixups */
|
||||
call do_sparc64_fault ! Call fault handler
|
||||
add %sp, PTREGS_OFF, %o0! Compute pt_regs arg
|
||||
ba,pt %xcc, rtrap_clr_l6 ! Restore cpu state
|
||||
nop
|
||||
|
||||
/* ITLB ** ICACHE line 4: Window fixups */
|
||||
winfix_trampoline:
|
||||
rdpr %tpc, %g3 ! Prepare winfixup TNPC
|
||||
or %g3, 0x7c, %g3 ! Compute offset to branch
|
||||
or %g3, 0x7c, %g3 ! Compute branch offset
|
||||
wrpr %g3, %tnpc ! Write it into TNPC
|
||||
done ! Do it to it
|
||||
|
||||
/* ITLB ** ICACHE line 4: Unused... */
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
CREATE_VPTE_NOP
|
||||
|
||||
#undef CREATE_VPTE_OFFSET1
|
||||
#undef CREATE_VPTE_OFFSET2
|
||||
#undef CREATE_VPTE_NOP
|
||||
|
@ -58,9 +58,6 @@ vpte_noent:
|
||||
done
|
||||
|
||||
vpte_insn_obp:
|
||||
sethi %hi(prom_pmd_phys), %g5
|
||||
ldx [%g5 + %lo(prom_pmd_phys)], %g5
|
||||
|
||||
/* Behave as if we are at TL0. */
|
||||
wrpr %g0, 1, %tl
|
||||
rdpr %tpc, %g4 /* Find original faulting iaddr */
|
||||
@ -71,58 +68,57 @@ vpte_insn_obp:
|
||||
mov TLB_SFSR, %g1
|
||||
stxa %g4, [%g1 + %g1] ASI_IMMU
|
||||
|
||||
/* Get PMD offset. */
|
||||
srlx %g4, 23, %g6
|
||||
and %g6, 0x7ff, %g6
|
||||
sllx %g6, 2, %g6
|
||||
sethi %hi(prom_trans), %g5
|
||||
or %g5, %lo(prom_trans), %g5
|
||||
|
||||
/* Load PMD, is it valid? */
|
||||
lduwa [%g5 + %g6] ASI_PHYS_USE_EC, %g5
|
||||
brz,pn %g5, longpath
|
||||
sllx %g5, 11, %g5
|
||||
1: ldx [%g5 + 0x00], %g6 ! base
|
||||
brz,a,pn %g6, longpath ! no more entries, fail
|
||||
mov TLB_SFSR, %g1 ! and restore %g1
|
||||
ldx [%g5 + 0x08], %g1 ! len
|
||||
add %g6, %g1, %g1 ! end
|
||||
cmp %g6, %g4
|
||||
bgu,pt %xcc, 2f
|
||||
cmp %g4, %g1
|
||||
bgeu,pt %xcc, 2f
|
||||
ldx [%g5 + 0x10], %g1 ! PTE
|
||||
|
||||
/* Get PTE offset. */
|
||||
srlx %g4, 13, %g6
|
||||
and %g6, 0x3ff, %g6
|
||||
sllx %g6, 3, %g6
|
||||
|
||||
/* Load PTE. */
|
||||
ldxa [%g5 + %g6] ASI_PHYS_USE_EC, %g5
|
||||
brgez,pn %g5, longpath
|
||||
nop
|
||||
|
||||
/* TLB load and return from trap. */
|
||||
/* TLB load, restore %g1, and return from trap. */
|
||||
sub %g4, %g6, %g6
|
||||
add %g1, %g6, %g5
|
||||
mov TLB_SFSR, %g1
|
||||
stxa %g5, [%g0] ASI_ITLB_DATA_IN
|
||||
retry
|
||||
|
||||
2: ba,pt %xcc, 1b
|
||||
add %g5, (3 * 8), %g5 ! next entry
|
||||
|
||||
kvmap_do_obp:
|
||||
sethi %hi(prom_pmd_phys), %g5
|
||||
ldx [%g5 + %lo(prom_pmd_phys)], %g5
|
||||
sethi %hi(prom_trans), %g5
|
||||
or %g5, %lo(prom_trans), %g5
|
||||
srlx %g4, 13, %g4
|
||||
sllx %g4, 13, %g4
|
||||
|
||||
/* Get PMD offset. */
|
||||
srlx %g4, 23, %g6
|
||||
and %g6, 0x7ff, %g6
|
||||
sllx %g6, 2, %g6
|
||||
1: ldx [%g5 + 0x00], %g6 ! base
|
||||
brz,a,pn %g6, longpath ! no more entries, fail
|
||||
mov TLB_SFSR, %g1 ! and restore %g1
|
||||
ldx [%g5 + 0x08], %g1 ! len
|
||||
add %g6, %g1, %g1 ! end
|
||||
cmp %g6, %g4
|
||||
bgu,pt %xcc, 2f
|
||||
cmp %g4, %g1
|
||||
bgeu,pt %xcc, 2f
|
||||
ldx [%g5 + 0x10], %g1 ! PTE
|
||||
|
||||
/* Load PMD, is it valid? */
|
||||
lduwa [%g5 + %g6] ASI_PHYS_USE_EC, %g5
|
||||
brz,pn %g5, longpath
|
||||
sllx %g5, 11, %g5
|
||||
|
||||
/* Get PTE offset. */
|
||||
srlx %g4, 13, %g6
|
||||
and %g6, 0x3ff, %g6
|
||||
sllx %g6, 3, %g6
|
||||
|
||||
/* Load PTE. */
|
||||
ldxa [%g5 + %g6] ASI_PHYS_USE_EC, %g5
|
||||
brgez,pn %g5, longpath
|
||||
nop
|
||||
|
||||
/* TLB load and return from trap. */
|
||||
/* TLB load, restore %g1, and return from trap. */
|
||||
sub %g4, %g6, %g6
|
||||
add %g1, %g6, %g5
|
||||
mov TLB_SFSR, %g1
|
||||
stxa %g5, [%g0] ASI_DTLB_DATA_IN
|
||||
retry
|
||||
|
||||
2: ba,pt %xcc, 1b
|
||||
add %g5, (3 * 8), %g5 ! next entry
|
||||
|
||||
/*
|
||||
* On a first level data miss, check whether this is to the OBP range (note
|
||||
* that such accesses can be made by prom, as well as by kernel using
|
||||
|
@ -49,12 +49,6 @@ static void __iommu_flushall(struct pci_iommu *iommu)
|
||||
|
||||
/* Ensure completion of previous PIO writes. */
|
||||
(void) pci_iommu_read(iommu->write_complete_reg);
|
||||
|
||||
/* Now update everyone's flush point. */
|
||||
for (entry = 0; entry < PBM_NCLUSTERS; entry++) {
|
||||
iommu->alloc_info[entry].flush =
|
||||
iommu->alloc_info[entry].next;
|
||||
}
|
||||
}
|
||||
|
||||
#define IOPTE_CONSISTENT(CTX) \
|
||||
@ -80,120 +74,117 @@ static void inline iopte_make_dummy(struct pci_iommu *iommu, iopte_t *iopte)
|
||||
iopte_val(*iopte) = val;
|
||||
}
|
||||
|
||||
void pci_iommu_table_init(struct pci_iommu *iommu, int tsbsize)
|
||||
/* Based largely upon the ppc64 iommu allocator. */
|
||||
static long pci_arena_alloc(struct pci_iommu *iommu, unsigned long npages)
|
||||
{
|
||||
int i;
|
||||
struct pci_iommu_arena *arena = &iommu->arena;
|
||||
unsigned long n, i, start, end, limit;
|
||||
int pass;
|
||||
|
||||
tsbsize /= sizeof(iopte_t);
|
||||
limit = arena->limit;
|
||||
start = arena->hint;
|
||||
pass = 0;
|
||||
|
||||
for (i = 0; i < tsbsize; i++)
|
||||
again:
|
||||
n = find_next_zero_bit(arena->map, limit, start);
|
||||
end = n + npages;
|
||||
if (unlikely(end >= limit)) {
|
||||
if (likely(pass < 1)) {
|
||||
limit = start;
|
||||
start = 0;
|
||||
__iommu_flushall(iommu);
|
||||
pass++;
|
||||
goto again;
|
||||
} else {
|
||||
/* Scanned the whole thing, give up. */
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = n; i < end; i++) {
|
||||
if (test_bit(i, arena->map)) {
|
||||
start = i + 1;
|
||||
goto again;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = n; i < end; i++)
|
||||
__set_bit(i, arena->map);
|
||||
|
||||
arena->hint = end;
|
||||
|
||||
return n;
|
||||
}
|
||||
|
||||
static void pci_arena_free(struct pci_iommu_arena *arena, unsigned long base, unsigned long npages)
|
||||
{
|
||||
unsigned long i;
|
||||
|
||||
for (i = base; i < (base + npages); i++)
|
||||
__clear_bit(i, arena->map);
|
||||
}
|
||||
|
||||
void pci_iommu_table_init(struct pci_iommu *iommu, int tsbsize, u32 dma_offset, u32 dma_addr_mask)
|
||||
{
|
||||
unsigned long i, tsbbase, order, sz, num_tsb_entries;
|
||||
|
||||
num_tsb_entries = tsbsize / sizeof(iopte_t);
|
||||
|
||||
/* Setup initial software IOMMU state. */
|
||||
spin_lock_init(&iommu->lock);
|
||||
iommu->ctx_lowest_free = 1;
|
||||
iommu->page_table_map_base = dma_offset;
|
||||
iommu->dma_addr_mask = dma_addr_mask;
|
||||
|
||||
/* Allocate and initialize the free area map. */
|
||||
sz = num_tsb_entries / 8;
|
||||
sz = (sz + 7UL) & ~7UL;
|
||||
iommu->arena.map = kmalloc(sz, GFP_KERNEL);
|
||||
if (!iommu->arena.map) {
|
||||
prom_printf("PCI_IOMMU: Error, kmalloc(arena.map) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
memset(iommu->arena.map, 0, sz);
|
||||
iommu->arena.limit = num_tsb_entries;
|
||||
|
||||
/* Allocate and initialize the dummy page which we
|
||||
* set inactive IO PTEs to point to.
|
||||
*/
|
||||
iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0);
|
||||
if (!iommu->dummy_page) {
|
||||
prom_printf("PCI_IOMMU: Error, gfp(dummy_page) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
|
||||
iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
|
||||
|
||||
/* Now allocate and setup the IOMMU page table itself. */
|
||||
order = get_order(tsbsize);
|
||||
tsbbase = __get_free_pages(GFP_KERNEL, order);
|
||||
if (!tsbbase) {
|
||||
prom_printf("PCI_IOMMU: Error, gfp(tsb) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
iommu->page_table = (iopte_t *)tsbbase;
|
||||
|
||||
for (i = 0; i < num_tsb_entries; i++)
|
||||
iopte_make_dummy(iommu, &iommu->page_table[i]);
|
||||
}
|
||||
|
||||
static iopte_t *alloc_streaming_cluster(struct pci_iommu *iommu, unsigned long npages)
|
||||
static inline iopte_t *alloc_npages(struct pci_iommu *iommu, unsigned long npages)
|
||||
{
|
||||
iopte_t *iopte, *limit, *first;
|
||||
unsigned long cnum, ent, flush_point;
|
||||
long entry;
|
||||
|
||||
cnum = 0;
|
||||
while ((1UL << cnum) < npages)
|
||||
cnum++;
|
||||
iopte = (iommu->page_table +
|
||||
(cnum << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS)));
|
||||
entry = pci_arena_alloc(iommu, npages);
|
||||
if (unlikely(entry < 0))
|
||||
return NULL;
|
||||
|
||||
if (cnum == 0)
|
||||
limit = (iommu->page_table +
|
||||
iommu->lowest_consistent_map);
|
||||
else
|
||||
limit = (iopte +
|
||||
(1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS)));
|
||||
|
||||
iopte += ((ent = iommu->alloc_info[cnum].next) << cnum);
|
||||
flush_point = iommu->alloc_info[cnum].flush;
|
||||
|
||||
first = iopte;
|
||||
for (;;) {
|
||||
if (IOPTE_IS_DUMMY(iommu, iopte)) {
|
||||
if ((iopte + (1 << cnum)) >= limit)
|
||||
ent = 0;
|
||||
else
|
||||
ent = ent + 1;
|
||||
iommu->alloc_info[cnum].next = ent;
|
||||
if (ent == flush_point)
|
||||
__iommu_flushall(iommu);
|
||||
break;
|
||||
}
|
||||
iopte += (1 << cnum);
|
||||
ent++;
|
||||
if (iopte >= limit) {
|
||||
iopte = (iommu->page_table +
|
||||
(cnum <<
|
||||
(iommu->page_table_sz_bits - PBM_LOGCLUSTERS)));
|
||||
ent = 0;
|
||||
}
|
||||
if (ent == flush_point)
|
||||
__iommu_flushall(iommu);
|
||||
if (iopte == first)
|
||||
goto bad;
|
||||
}
|
||||
|
||||
/* I've got your streaming cluster right here buddy boy... */
|
||||
return iopte;
|
||||
|
||||
bad:
|
||||
printk(KERN_EMERG "pci_iommu: alloc_streaming_cluster of npages(%ld) failed!\n",
|
||||
npages);
|
||||
return NULL;
|
||||
return iommu->page_table + entry;
|
||||
}
|
||||
|
||||
static void free_streaming_cluster(struct pci_iommu *iommu, dma_addr_t base,
|
||||
unsigned long npages, unsigned long ctx)
|
||||
static inline void free_npages(struct pci_iommu *iommu, dma_addr_t base, unsigned long npages)
|
||||
{
|
||||
unsigned long cnum, ent;
|
||||
|
||||
cnum = 0;
|
||||
while ((1UL << cnum) < npages)
|
||||
cnum++;
|
||||
|
||||
ent = (base << (32 - IO_PAGE_SHIFT + PBM_LOGCLUSTERS - iommu->page_table_sz_bits))
|
||||
>> (32 + PBM_LOGCLUSTERS + cnum - iommu->page_table_sz_bits);
|
||||
|
||||
/* If the global flush might not have caught this entry,
|
||||
* adjust the flush point such that we will flush before
|
||||
* ever trying to reuse it.
|
||||
*/
|
||||
#define between(X,Y,Z) (((Z) - (Y)) >= ((X) - (Y)))
|
||||
if (between(ent, iommu->alloc_info[cnum].next, iommu->alloc_info[cnum].flush))
|
||||
iommu->alloc_info[cnum].flush = ent;
|
||||
#undef between
|
||||
}
|
||||
|
||||
/* We allocate consistent mappings from the end of cluster zero. */
|
||||
static iopte_t *alloc_consistent_cluster(struct pci_iommu *iommu, unsigned long npages)
|
||||
{
|
||||
iopte_t *iopte;
|
||||
|
||||
iopte = iommu->page_table + (1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS));
|
||||
while (iopte > iommu->page_table) {
|
||||
iopte--;
|
||||
if (IOPTE_IS_DUMMY(iommu, iopte)) {
|
||||
unsigned long tmp = npages;
|
||||
|
||||
while (--tmp) {
|
||||
iopte--;
|
||||
if (!IOPTE_IS_DUMMY(iommu, iopte))
|
||||
break;
|
||||
}
|
||||
if (tmp == 0) {
|
||||
u32 entry = (iopte - iommu->page_table);
|
||||
|
||||
if (entry < iommu->lowest_consistent_map)
|
||||
iommu->lowest_consistent_map = entry;
|
||||
return iopte;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NULL;
|
||||
pci_arena_free(&iommu->arena, base >> IO_PAGE_SHIFT, npages);
|
||||
}
|
||||
|
||||
static int iommu_alloc_ctx(struct pci_iommu *iommu)
|
||||
@ -233,7 +224,7 @@ void *pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_ad
|
||||
struct pcidev_cookie *pcp;
|
||||
struct pci_iommu *iommu;
|
||||
iopte_t *iopte;
|
||||
unsigned long flags, order, first_page, ctx;
|
||||
unsigned long flags, order, first_page;
|
||||
void *ret;
|
||||
int npages;
|
||||
|
||||
@ -251,9 +242,10 @@ void *pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_ad
|
||||
iommu = pcp->pbm->iommu;
|
||||
|
||||
spin_lock_irqsave(&iommu->lock, flags);
|
||||
iopte = alloc_consistent_cluster(iommu, size >> IO_PAGE_SHIFT);
|
||||
if (iopte == NULL) {
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
iopte = alloc_npages(iommu, size >> IO_PAGE_SHIFT);
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
if (unlikely(iopte == NULL)) {
|
||||
free_pages(first_page, order);
|
||||
return NULL;
|
||||
}
|
||||
@ -262,31 +254,15 @@ void *pci_alloc_consistent(struct pci_dev *pdev, size_t size, dma_addr_t *dma_ad
|
||||
((iopte - iommu->page_table) << IO_PAGE_SHIFT));
|
||||
ret = (void *) first_page;
|
||||
npages = size >> IO_PAGE_SHIFT;
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = iommu_alloc_ctx(iommu);
|
||||
first_page = __pa(first_page);
|
||||
while (npages--) {
|
||||
iopte_val(*iopte) = (IOPTE_CONSISTENT(ctx) |
|
||||
iopte_val(*iopte) = (IOPTE_CONSISTENT(0UL) |
|
||||
IOPTE_WRITE |
|
||||
(first_page & IOPTE_PAGE));
|
||||
iopte++;
|
||||
first_page += IO_PAGE_SIZE;
|
||||
}
|
||||
|
||||
{
|
||||
int i;
|
||||
u32 daddr = *dma_addrp;
|
||||
|
||||
npages = size >> IO_PAGE_SHIFT;
|
||||
for (i = 0; i < npages; i++) {
|
||||
pci_iommu_write(iommu->iommu_flush, daddr);
|
||||
daddr += IO_PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -296,7 +272,7 @@ void pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu, dma_addr_
|
||||
struct pcidev_cookie *pcp;
|
||||
struct pci_iommu *iommu;
|
||||
iopte_t *iopte;
|
||||
unsigned long flags, order, npages, i, ctx;
|
||||
unsigned long flags, order, npages;
|
||||
|
||||
npages = IO_PAGE_ALIGN(size) >> IO_PAGE_SHIFT;
|
||||
pcp = pdev->sysdata;
|
||||
@ -306,46 +282,7 @@ void pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu, dma_addr_
|
||||
|
||||
spin_lock_irqsave(&iommu->lock, flags);
|
||||
|
||||
if ((iopte - iommu->page_table) ==
|
||||
iommu->lowest_consistent_map) {
|
||||
iopte_t *walk = iopte + npages;
|
||||
iopte_t *limit;
|
||||
|
||||
limit = (iommu->page_table +
|
||||
(1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS)));
|
||||
while (walk < limit) {
|
||||
if (!IOPTE_IS_DUMMY(iommu, walk))
|
||||
break;
|
||||
walk++;
|
||||
}
|
||||
iommu->lowest_consistent_map =
|
||||
(walk - iommu->page_table);
|
||||
}
|
||||
|
||||
/* Data for consistent mappings cannot enter the streaming
|
||||
* buffers, so we only need to update the TSB. We flush
|
||||
* the IOMMU here as well to prevent conflicts with the
|
||||
* streaming mapping deferred tlb flush scheme.
|
||||
*/
|
||||
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = (iopte_val(*iopte) & IOPTE_CONTEXT) >> 47UL;
|
||||
|
||||
for (i = 0; i < npages; i++, iopte++)
|
||||
iopte_make_dummy(iommu, iopte);
|
||||
|
||||
if (iommu->iommu_ctxflush) {
|
||||
pci_iommu_write(iommu->iommu_ctxflush, ctx);
|
||||
} else {
|
||||
for (i = 0; i < npages; i++) {
|
||||
u32 daddr = dvma + (i << IO_PAGE_SHIFT);
|
||||
|
||||
pci_iommu_write(iommu->iommu_flush, daddr);
|
||||
}
|
||||
}
|
||||
|
||||
iommu_free_ctx(iommu, ctx);
|
||||
free_npages(iommu, dvma, npages);
|
||||
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
@ -372,25 +309,27 @@ dma_addr_t pci_map_single(struct pci_dev *pdev, void *ptr, size_t sz, int direct
|
||||
iommu = pcp->pbm->iommu;
|
||||
strbuf = &pcp->pbm->stc;
|
||||
|
||||
if (direction == PCI_DMA_NONE)
|
||||
BUG();
|
||||
if (unlikely(direction == PCI_DMA_NONE))
|
||||
goto bad_no_ctx;
|
||||
|
||||
oaddr = (unsigned long)ptr;
|
||||
npages = IO_PAGE_ALIGN(oaddr + sz) - (oaddr & IO_PAGE_MASK);
|
||||
npages >>= IO_PAGE_SHIFT;
|
||||
|
||||
spin_lock_irqsave(&iommu->lock, flags);
|
||||
base = alloc_npages(iommu, npages);
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = iommu_alloc_ctx(iommu);
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
base = alloc_streaming_cluster(iommu, npages);
|
||||
if (base == NULL)
|
||||
if (unlikely(!base))
|
||||
goto bad;
|
||||
|
||||
bus_addr = (iommu->page_table_map_base +
|
||||
((base - iommu->page_table) << IO_PAGE_SHIFT));
|
||||
ret = bus_addr | (oaddr & ~IO_PAGE_MASK);
|
||||
base_paddr = __pa(oaddr & IO_PAGE_MASK);
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = iommu_alloc_ctx(iommu);
|
||||
if (strbuf->strbuf_enabled)
|
||||
iopte_protection = IOPTE_STREAMING(ctx);
|
||||
else
|
||||
@ -401,12 +340,13 @@ dma_addr_t pci_map_single(struct pci_dev *pdev, void *ptr, size_t sz, int direct
|
||||
for (i = 0; i < npages; i++, base++, base_paddr += IO_PAGE_SIZE)
|
||||
iopte_val(*base) = iopte_protection | base_paddr;
|
||||
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
return ret;
|
||||
|
||||
bad:
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
iommu_free_ctx(iommu, ctx);
|
||||
bad_no_ctx:
|
||||
if (printk_ratelimit())
|
||||
WARN_ON(1);
|
||||
return PCI_DMA_ERROR_CODE;
|
||||
}
|
||||
|
||||
@ -481,10 +421,13 @@ void pci_unmap_single(struct pci_dev *pdev, dma_addr_t bus_addr, size_t sz, int
|
||||
struct pci_iommu *iommu;
|
||||
struct pci_strbuf *strbuf;
|
||||
iopte_t *base;
|
||||
unsigned long flags, npages, ctx;
|
||||
unsigned long flags, npages, ctx, i;
|
||||
|
||||
if (direction == PCI_DMA_NONE)
|
||||
BUG();
|
||||
if (unlikely(direction == PCI_DMA_NONE)) {
|
||||
if (printk_ratelimit())
|
||||
WARN_ON(1);
|
||||
return;
|
||||
}
|
||||
|
||||
pcp = pdev->sysdata;
|
||||
iommu = pcp->pbm->iommu;
|
||||
@ -510,13 +453,14 @@ void pci_unmap_single(struct pci_dev *pdev, dma_addr_t bus_addr, size_t sz, int
|
||||
|
||||
/* Step 1: Kick data out of streaming buffers if necessary. */
|
||||
if (strbuf->strbuf_enabled)
|
||||
pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction);
|
||||
pci_strbuf_flush(strbuf, iommu, bus_addr, ctx,
|
||||
npages, direction);
|
||||
|
||||
/* Step 2: Clear out first TSB entry. */
|
||||
iopte_make_dummy(iommu, base);
|
||||
/* Step 2: Clear out TSB entries. */
|
||||
for (i = 0; i < npages; i++)
|
||||
iopte_make_dummy(iommu, base + i);
|
||||
|
||||
free_streaming_cluster(iommu, bus_addr - iommu->page_table_map_base,
|
||||
npages, ctx);
|
||||
free_npages(iommu, bus_addr - iommu->page_table_map_base, npages);
|
||||
|
||||
iommu_free_ctx(iommu, ctx);
|
||||
|
||||
@ -621,6 +565,8 @@ int pci_map_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, int
|
||||
pci_map_single(pdev,
|
||||
(page_address(sglist->page) + sglist->offset),
|
||||
sglist->length, direction);
|
||||
if (unlikely(sglist->dma_address == PCI_DMA_ERROR_CODE))
|
||||
return 0;
|
||||
sglist->dma_length = sglist->length;
|
||||
return 1;
|
||||
}
|
||||
@ -629,21 +575,29 @@ int pci_map_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, int
|
||||
iommu = pcp->pbm->iommu;
|
||||
strbuf = &pcp->pbm->stc;
|
||||
|
||||
if (direction == PCI_DMA_NONE)
|
||||
BUG();
|
||||
if (unlikely(direction == PCI_DMA_NONE))
|
||||
goto bad_no_ctx;
|
||||
|
||||
/* Step 1: Prepare scatter list. */
|
||||
|
||||
npages = prepare_sg(sglist, nelems);
|
||||
|
||||
/* Step 2: Allocate a cluster. */
|
||||
/* Step 2: Allocate a cluster and context, if necessary. */
|
||||
|
||||
spin_lock_irqsave(&iommu->lock, flags);
|
||||
|
||||
base = alloc_streaming_cluster(iommu, npages);
|
||||
base = alloc_npages(iommu, npages);
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = iommu_alloc_ctx(iommu);
|
||||
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
if (base == NULL)
|
||||
goto bad;
|
||||
dma_base = iommu->page_table_map_base + ((base - iommu->page_table) << IO_PAGE_SHIFT);
|
||||
|
||||
dma_base = iommu->page_table_map_base +
|
||||
((base - iommu->page_table) << IO_PAGE_SHIFT);
|
||||
|
||||
/* Step 3: Normalize DMA addresses. */
|
||||
used = nelems;
|
||||
@ -656,30 +610,28 @@ int pci_map_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems, int
|
||||
}
|
||||
used = nelems - used;
|
||||
|
||||
/* Step 4: Choose a context if necessary. */
|
||||
ctx = 0;
|
||||
if (iommu->iommu_ctxflush)
|
||||
ctx = iommu_alloc_ctx(iommu);
|
||||
|
||||
/* Step 5: Create the mappings. */
|
||||
/* Step 4: Create the mappings. */
|
||||
if (strbuf->strbuf_enabled)
|
||||
iopte_protection = IOPTE_STREAMING(ctx);
|
||||
else
|
||||
iopte_protection = IOPTE_CONSISTENT(ctx);
|
||||
if (direction != PCI_DMA_TODEVICE)
|
||||
iopte_protection |= IOPTE_WRITE;
|
||||
fill_sg (base, sglist, used, nelems, iopte_protection);
|
||||
|
||||
fill_sg(base, sglist, used, nelems, iopte_protection);
|
||||
|
||||
#ifdef VERIFY_SG
|
||||
verify_sglist(sglist, nelems, base, npages);
|
||||
#endif
|
||||
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
|
||||
return used;
|
||||
|
||||
bad:
|
||||
spin_unlock_irqrestore(&iommu->lock, flags);
|
||||
return PCI_DMA_ERROR_CODE;
|
||||
iommu_free_ctx(iommu, ctx);
|
||||
bad_no_ctx:
|
||||
if (printk_ratelimit())
|
||||
WARN_ON(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Unmap a set of streaming mode DMA translations. */
|
||||
@ -692,8 +644,10 @@ void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
|
||||
unsigned long flags, ctx, i, npages;
|
||||
u32 bus_addr;
|
||||
|
||||
if (direction == PCI_DMA_NONE)
|
||||
BUG();
|
||||
if (unlikely(direction == PCI_DMA_NONE)) {
|
||||
if (printk_ratelimit())
|
||||
WARN_ON(1);
|
||||
}
|
||||
|
||||
pcp = pdev->sysdata;
|
||||
iommu = pcp->pbm->iommu;
|
||||
@ -705,7 +659,8 @@ void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
|
||||
if (sglist[i].dma_length == 0)
|
||||
break;
|
||||
i--;
|
||||
npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length) - bus_addr) >> IO_PAGE_SHIFT;
|
||||
npages = (IO_PAGE_ALIGN(sglist[i].dma_address + sglist[i].dma_length) -
|
||||
bus_addr) >> IO_PAGE_SHIFT;
|
||||
|
||||
base = iommu->page_table +
|
||||
((bus_addr - iommu->page_table_map_base) >> IO_PAGE_SHIFT);
|
||||
@ -726,11 +681,11 @@ void pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sglist, int nelems,
|
||||
if (strbuf->strbuf_enabled)
|
||||
pci_strbuf_flush(strbuf, iommu, bus_addr, ctx, npages, direction);
|
||||
|
||||
/* Step 2: Clear out first TSB entry. */
|
||||
iopte_make_dummy(iommu, base);
|
||||
/* Step 2: Clear out the TSB entries. */
|
||||
for (i = 0; i < npages; i++)
|
||||
iopte_make_dummy(iommu, base + i);
|
||||
|
||||
free_streaming_cluster(iommu, bus_addr - iommu->page_table_map_base,
|
||||
npages, ctx);
|
||||
free_npages(iommu, bus_addr - iommu->page_table_map_base, npages);
|
||||
|
||||
iommu_free_ctx(iommu, ctx);
|
||||
|
||||
|
@ -1207,13 +1207,9 @@ static void psycho_scan_bus(struct pci_controller_info *p)
|
||||
static void psycho_iommu_init(struct pci_controller_info *p)
|
||||
{
|
||||
struct pci_iommu *iommu = p->pbm_A.iommu;
|
||||
unsigned long tsbbase, i;
|
||||
unsigned long i;
|
||||
u64 control;
|
||||
|
||||
/* Setup initial software IOMMU state. */
|
||||
spin_lock_init(&iommu->lock);
|
||||
iommu->ctx_lowest_free = 1;
|
||||
|
||||
/* Register addresses. */
|
||||
iommu->iommu_control = p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL;
|
||||
iommu->iommu_tsbbase = p->pbm_A.controller_regs + PSYCHO_IOMMU_TSBBASE;
|
||||
@ -1240,40 +1236,10 @@ static void psycho_iommu_init(struct pci_controller_info *p)
|
||||
/* Leave diag mode enabled for full-flushing done
|
||||
* in pci_iommu.c
|
||||
*/
|
||||
pci_iommu_table_init(iommu, IO_TSB_SIZE, 0xc0000000, 0xffffffff);
|
||||
|
||||
iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0);
|
||||
if (!iommu->dummy_page) {
|
||||
prom_printf("PSYCHO_IOMMU: Error, gfp(dummy_page) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
|
||||
iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
|
||||
|
||||
/* Using assumed page size 8K with 128K entries we need 1MB iommu page
|
||||
* table (128K ioptes * 8 bytes per iopte). This is
|
||||
* page order 7 on UltraSparc.
|
||||
*/
|
||||
tsbbase = __get_free_pages(GFP_KERNEL, get_order(IO_TSB_SIZE));
|
||||
if (!tsbbase) {
|
||||
prom_printf("PSYCHO_IOMMU: Error, gfp(tsb) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
iommu->page_table = (iopte_t *)tsbbase;
|
||||
iommu->page_table_sz_bits = 17;
|
||||
iommu->page_table_map_base = 0xc0000000;
|
||||
iommu->dma_addr_mask = 0xffffffff;
|
||||
pci_iommu_table_init(iommu, IO_TSB_SIZE);
|
||||
|
||||
/* We start with no consistent mappings. */
|
||||
iommu->lowest_consistent_map =
|
||||
1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS);
|
||||
|
||||
for (i = 0; i < PBM_NCLUSTERS; i++) {
|
||||
iommu->alloc_info[i].flush = 0;
|
||||
iommu->alloc_info[i].next = 0;
|
||||
}
|
||||
|
||||
psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_TSBBASE, __pa(tsbbase));
|
||||
psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_TSBBASE,
|
||||
__pa(iommu->page_table));
|
||||
|
||||
control = psycho_read(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL);
|
||||
control &= ~(PSYCHO_IOMMU_CTRL_TSBSZ | PSYCHO_IOMMU_CTRL_TBWSZ);
|
||||
@ -1281,7 +1247,7 @@ static void psycho_iommu_init(struct pci_controller_info *p)
|
||||
psycho_write(p->pbm_A.controller_regs + PSYCHO_IOMMU_CONTROL, control);
|
||||
|
||||
/* If necessary, hook us up for starfire IRQ translations. */
|
||||
if(this_is_starfire)
|
||||
if (this_is_starfire)
|
||||
p->starfire_cookie = starfire_hookup(p->pbm_A.portid);
|
||||
else
|
||||
p->starfire_cookie = NULL;
|
||||
|
@ -1267,13 +1267,9 @@ static void sabre_iommu_init(struct pci_controller_info *p,
|
||||
u32 dma_mask)
|
||||
{
|
||||
struct pci_iommu *iommu = p->pbm_A.iommu;
|
||||
unsigned long tsbbase, i, order;
|
||||
unsigned long i;
|
||||
u64 control;
|
||||
|
||||
/* Setup initial software IOMMU state. */
|
||||
spin_lock_init(&iommu->lock);
|
||||
iommu->ctx_lowest_free = 1;
|
||||
|
||||
/* Register addresses. */
|
||||
iommu->iommu_control = p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL;
|
||||
iommu->iommu_tsbbase = p->pbm_A.controller_regs + SABRE_IOMMU_TSBBASE;
|
||||
@ -1295,26 +1291,10 @@ static void sabre_iommu_init(struct pci_controller_info *p,
|
||||
/* Leave diag mode enabled for full-flushing done
|
||||
* in pci_iommu.c
|
||||
*/
|
||||
pci_iommu_table_init(iommu, tsbsize * 1024 * 8, dvma_offset, dma_mask);
|
||||
|
||||
iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0);
|
||||
if (!iommu->dummy_page) {
|
||||
prom_printf("PSYCHO_IOMMU: Error, gfp(dummy_page) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
|
||||
iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
|
||||
|
||||
tsbbase = __get_free_pages(GFP_KERNEL, order = get_order(tsbsize * 1024 * 8));
|
||||
if (!tsbbase) {
|
||||
prom_printf("SABRE_IOMMU: Error, gfp(tsb) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
iommu->page_table = (iopte_t *)tsbbase;
|
||||
iommu->page_table_map_base = dvma_offset;
|
||||
iommu->dma_addr_mask = dma_mask;
|
||||
pci_iommu_table_init(iommu, PAGE_SIZE << order);
|
||||
|
||||
sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_TSBBASE, __pa(tsbbase));
|
||||
sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_TSBBASE,
|
||||
__pa(iommu->page_table));
|
||||
|
||||
control = sabre_read(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL);
|
||||
control &= ~(SABRE_IOMMUCTRL_TSBSZ | SABRE_IOMMUCTRL_TBWSZ);
|
||||
@ -1322,11 +1302,9 @@ static void sabre_iommu_init(struct pci_controller_info *p,
|
||||
switch(tsbsize) {
|
||||
case 64:
|
||||
control |= SABRE_IOMMU_TSBSZ_64K;
|
||||
iommu->page_table_sz_bits = 16;
|
||||
break;
|
||||
case 128:
|
||||
control |= SABRE_IOMMU_TSBSZ_128K;
|
||||
iommu->page_table_sz_bits = 17;
|
||||
break;
|
||||
default:
|
||||
prom_printf("iommu_init: Illegal TSB size %d\n", tsbsize);
|
||||
@ -1334,15 +1312,6 @@ static void sabre_iommu_init(struct pci_controller_info *p,
|
||||
break;
|
||||
}
|
||||
sabre_write(p->pbm_A.controller_regs + SABRE_IOMMU_CONTROL, control);
|
||||
|
||||
/* We start with no consistent mappings. */
|
||||
iommu->lowest_consistent_map =
|
||||
1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS);
|
||||
|
||||
for (i = 0; i < PBM_NCLUSTERS; i++) {
|
||||
iommu->alloc_info[i].flush = 0;
|
||||
iommu->alloc_info[i].next = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void pbm_register_toplevel_resources(struct pci_controller_info *p,
|
||||
|
@ -1765,7 +1765,7 @@ static void schizo_pbm_strbuf_init(struct pci_pbm_info *pbm)
|
||||
static void schizo_pbm_iommu_init(struct pci_pbm_info *pbm)
|
||||
{
|
||||
struct pci_iommu *iommu = pbm->iommu;
|
||||
unsigned long tsbbase, i, tagbase, database, order;
|
||||
unsigned long i, tagbase, database;
|
||||
u32 vdma[2], dma_mask;
|
||||
u64 control;
|
||||
int err, tsbsize;
|
||||
@ -1800,10 +1800,6 @@ static void schizo_pbm_iommu_init(struct pci_pbm_info *pbm)
|
||||
prom_halt();
|
||||
};
|
||||
|
||||
/* Setup initial software IOMMU state. */
|
||||
spin_lock_init(&iommu->lock);
|
||||
iommu->ctx_lowest_free = 1;
|
||||
|
||||
/* Register addresses, SCHIZO has iommu ctx flushing. */
|
||||
iommu->iommu_control = pbm->pbm_regs + SCHIZO_IOMMU_CONTROL;
|
||||
iommu->iommu_tsbbase = pbm->pbm_regs + SCHIZO_IOMMU_TSBBASE;
|
||||
@ -1832,56 +1828,9 @@ static void schizo_pbm_iommu_init(struct pci_pbm_info *pbm)
|
||||
/* Leave diag mode enabled for full-flushing done
|
||||
* in pci_iommu.c
|
||||
*/
|
||||
pci_iommu_table_init(iommu, tsbsize * 8 * 1024, vdma[0], dma_mask);
|
||||
|
||||
iommu->dummy_page = __get_free_pages(GFP_KERNEL, 0);
|
||||
if (!iommu->dummy_page) {
|
||||
prom_printf("PSYCHO_IOMMU: Error, gfp(dummy_page) failed.\n");
|
||||
prom_halt();
|
||||
}
|
||||
memset((void *)iommu->dummy_page, 0, PAGE_SIZE);
|
||||
iommu->dummy_page_pa = (unsigned long) __pa(iommu->dummy_page);
|
||||
|
||||
/* Using assumed page size 8K with 128K entries we need 1MB iommu page
|
||||
* table (128K ioptes * 8 bytes per iopte). This is
|
||||
* page order 7 on UltraSparc.
|
||||
*/
|
||||
order = get_order(tsbsize * 8 * 1024);
|
||||
tsbbase = __get_free_pages(GFP_KERNEL, order);
|
||||
if (!tsbbase) {
|
||||
prom_printf("%s: Error, gfp(tsb) failed.\n", pbm->name);
|
||||
prom_halt();
|
||||
}
|
||||
|
||||
iommu->page_table = (iopte_t *)tsbbase;
|
||||
iommu->page_table_map_base = vdma[0];
|
||||
iommu->dma_addr_mask = dma_mask;
|
||||
pci_iommu_table_init(iommu, PAGE_SIZE << order);
|
||||
|
||||
switch (tsbsize) {
|
||||
case 64:
|
||||
iommu->page_table_sz_bits = 16;
|
||||
break;
|
||||
|
||||
case 128:
|
||||
iommu->page_table_sz_bits = 17;
|
||||
break;
|
||||
|
||||
default:
|
||||
prom_printf("iommu_init: Illegal TSB size %d\n", tsbsize);
|
||||
prom_halt();
|
||||
break;
|
||||
};
|
||||
|
||||
/* We start with no consistent mappings. */
|
||||
iommu->lowest_consistent_map =
|
||||
1 << (iommu->page_table_sz_bits - PBM_LOGCLUSTERS);
|
||||
|
||||
for (i = 0; i < PBM_NCLUSTERS; i++) {
|
||||
iommu->alloc_info[i].flush = 0;
|
||||
iommu->alloc_info[i].next = 0;
|
||||
}
|
||||
|
||||
schizo_write(iommu->iommu_tsbbase, __pa(tsbbase));
|
||||
schizo_write(iommu->iommu_tsbbase, __pa(iommu->page_table));
|
||||
|
||||
control = schizo_read(iommu->iommu_control);
|
||||
control &= ~(SCHIZO_IOMMU_CTRL_TSBSZ | SCHIZO_IOMMU_CTRL_TBWSZ);
|
||||
|
@ -1001,13 +1001,6 @@ void smp_penguin_jailcell(int irq, struct pt_regs *regs)
|
||||
preempt_enable();
|
||||
}
|
||||
|
||||
extern unsigned long xcall_promstop;
|
||||
|
||||
void smp_promstop_others(void)
|
||||
{
|
||||
smp_cross_call(&xcall_promstop, 0, 0, 0);
|
||||
}
|
||||
|
||||
#define prof_multiplier(__cpu) cpu_data(__cpu).multiplier
|
||||
#define prof_counter(__cpu) cpu_data(__cpu).counter
|
||||
|
||||
|
@ -105,7 +105,7 @@ static void __init read_obp_memory(const char *property,
|
||||
regs[i].phys_addr = base;
|
||||
regs[i].reg_size = size;
|
||||
}
|
||||
sort(regs, ents, sizeof(struct linux_prom64_registers),
|
||||
sort(regs, ents, sizeof(struct linux_prom64_registers),
|
||||
cmp_p64, NULL);
|
||||
}
|
||||
|
||||
@ -367,8 +367,11 @@ struct linux_prom_translation {
|
||||
unsigned long size;
|
||||
unsigned long data;
|
||||
};
|
||||
static struct linux_prom_translation prom_trans[512] __initdata;
|
||||
static unsigned int prom_trans_ents __initdata;
|
||||
|
||||
/* Exported for kernel TLB miss handling in ktlb.S */
|
||||
struct linux_prom_translation prom_trans[512] __read_mostly;
|
||||
unsigned int prom_trans_ents __read_mostly;
|
||||
unsigned int swapper_pgd_zero __read_mostly;
|
||||
|
||||
extern unsigned long prom_boot_page;
|
||||
extern void prom_remap(unsigned long physpage, unsigned long virtpage, int mmu_ihandle);
|
||||
@ -378,122 +381,57 @@ extern void register_prom_callbacks(void);
|
||||
/* Exported for SMP bootup purposes. */
|
||||
unsigned long kern_locked_tte_data;
|
||||
|
||||
/* Exported for kernel TLB miss handling in ktlb.S */
|
||||
unsigned long prom_pmd_phys __read_mostly;
|
||||
unsigned int swapper_pgd_zero __read_mostly;
|
||||
|
||||
static pmd_t *prompmd __read_mostly;
|
||||
|
||||
#define BASE_PAGE_SIZE 8192
|
||||
|
||||
/*
|
||||
* Translate PROM's mapping we capture at boot time into physical address.
|
||||
* The second parameter is only set from prom_callback() invocations.
|
||||
*/
|
||||
unsigned long prom_virt_to_phys(unsigned long promva, int *error)
|
||||
{
|
||||
pmd_t *pmdp = prompmd + ((promva >> 23) & 0x7ff);
|
||||
pte_t *ptep;
|
||||
unsigned long base;
|
||||
int i;
|
||||
|
||||
if (pmd_none(*pmdp)) {
|
||||
if (error)
|
||||
*error = 1;
|
||||
return 0;
|
||||
}
|
||||
ptep = (pte_t *)__pmd_page(*pmdp) + ((promva >> 13) & 0x3ff);
|
||||
if (!pte_present(*ptep)) {
|
||||
if (error)
|
||||
*error = 1;
|
||||
return 0;
|
||||
}
|
||||
if (error) {
|
||||
*error = 0;
|
||||
return pte_val(*ptep);
|
||||
}
|
||||
base = pte_val(*ptep) & _PAGE_PADDR;
|
||||
for (i = 0; i < prom_trans_ents; i++) {
|
||||
struct linux_prom_translation *p = &prom_trans[i];
|
||||
|
||||
return base + (promva & (BASE_PAGE_SIZE - 1));
|
||||
if (promva >= p->virt &&
|
||||
promva < (p->virt + p->size)) {
|
||||
unsigned long base = p->data & _PAGE_PADDR;
|
||||
|
||||
if (error)
|
||||
*error = 0;
|
||||
return base + (promva & (8192 - 1));
|
||||
}
|
||||
}
|
||||
if (error)
|
||||
*error = 1;
|
||||
return 0UL;
|
||||
}
|
||||
|
||||
/* The obp translations are saved based on 8k pagesize, since obp can
|
||||
* use a mixture of pagesizes. Misses to the LOW_OBP_ADDRESS ->
|
||||
* HI_OBP_ADDRESS range are handled in entry.S and do not use the vpte
|
||||
* HI_OBP_ADDRESS range are handled in ktlb.S and do not use the vpte
|
||||
* scheme (also, see rant in inherit_locked_prom_mappings()).
|
||||
*/
|
||||
static void __init build_obp_range(unsigned long start, unsigned long end, unsigned long data)
|
||||
{
|
||||
unsigned long vaddr;
|
||||
|
||||
for (vaddr = start; vaddr < end; vaddr += BASE_PAGE_SIZE) {
|
||||
unsigned long val;
|
||||
pmd_t *pmd;
|
||||
pte_t *pte;
|
||||
|
||||
pmd = prompmd + ((vaddr >> 23) & 0x7ff);
|
||||
if (pmd_none(*pmd)) {
|
||||
pte = __alloc_bootmem(BASE_PAGE_SIZE, BASE_PAGE_SIZE,
|
||||
PAGE_SIZE);
|
||||
if (!pte)
|
||||
prom_halt();
|
||||
memset(pte, 0, BASE_PAGE_SIZE);
|
||||
pmd_set(pmd, pte);
|
||||
}
|
||||
pte = (pte_t *) __pmd_page(*pmd) + ((vaddr >> 13) & 0x3ff);
|
||||
|
||||
val = data;
|
||||
|
||||
/* Clear diag TTE bits. */
|
||||
if (tlb_type == spitfire)
|
||||
val &= ~0x0003fe0000000000UL;
|
||||
|
||||
set_pte_at(&init_mm, vaddr, pte,
|
||||
__pte(val | _PAGE_MODIFIED));
|
||||
|
||||
data += BASE_PAGE_SIZE;
|
||||
}
|
||||
}
|
||||
|
||||
static inline int in_obp_range(unsigned long vaddr)
|
||||
{
|
||||
return (vaddr >= LOW_OBP_ADDRESS &&
|
||||
vaddr < HI_OBP_ADDRESS);
|
||||
}
|
||||
|
||||
#define OBP_PMD_SIZE 2048
|
||||
static void __init build_obp_pgtable(void)
|
||||
static int cmp_ptrans(const void *a, const void *b)
|
||||
{
|
||||
unsigned long i;
|
||||
const struct linux_prom_translation *x = a, *y = b;
|
||||
|
||||
prompmd = __alloc_bootmem(OBP_PMD_SIZE, OBP_PMD_SIZE, PAGE_SIZE);
|
||||
if (!prompmd)
|
||||
prom_halt();
|
||||
|
||||
memset(prompmd, 0, OBP_PMD_SIZE);
|
||||
|
||||
prom_pmd_phys = __pa(prompmd);
|
||||
|
||||
for (i = 0; i < prom_trans_ents; i++) {
|
||||
unsigned long start, end;
|
||||
|
||||
if (!in_obp_range(prom_trans[i].virt))
|
||||
continue;
|
||||
|
||||
start = prom_trans[i].virt;
|
||||
end = start + prom_trans[i].size;
|
||||
if (end > HI_OBP_ADDRESS)
|
||||
end = HI_OBP_ADDRESS;
|
||||
|
||||
build_obp_range(start, end, prom_trans[i].data);
|
||||
}
|
||||
if (x->virt > y->virt)
|
||||
return 1;
|
||||
if (x->virt < y->virt)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Read OBP translations property into 'prom_trans[]'.
|
||||
* Return the number of entries.
|
||||
*/
|
||||
/* Read OBP translations property into 'prom_trans[]'. */
|
||||
static void __init read_obp_translations(void)
|
||||
{
|
||||
int n, node;
|
||||
int n, node, ents, first, last, i;
|
||||
|
||||
node = prom_finddevice("/virtual-memory");
|
||||
n = prom_getproplen(node, "translations");
|
||||
@ -515,7 +453,41 @@ static void __init read_obp_translations(void)
|
||||
|
||||
n = n / sizeof(struct linux_prom_translation);
|
||||
|
||||
prom_trans_ents = n;
|
||||
ents = n;
|
||||
|
||||
sort(prom_trans, ents, sizeof(struct linux_prom_translation),
|
||||
cmp_ptrans, NULL);
|
||||
|
||||
/* Now kick out all the non-OBP entries. */
|
||||
for (i = 0; i < ents; i++) {
|
||||
if (in_obp_range(prom_trans[i].virt))
|
||||
break;
|
||||
}
|
||||
first = i;
|
||||
for (; i < ents; i++) {
|
||||
if (!in_obp_range(prom_trans[i].virt))
|
||||
break;
|
||||
}
|
||||
last = i;
|
||||
|
||||
for (i = 0; i < (last - first); i++) {
|
||||
struct linux_prom_translation *src = &prom_trans[i + first];
|
||||
struct linux_prom_translation *dest = &prom_trans[i];
|
||||
|
||||
*dest = *src;
|
||||
}
|
||||
for (; i < ents; i++) {
|
||||
struct linux_prom_translation *dest = &prom_trans[i];
|
||||
dest->virt = dest->size = dest->data = 0x0UL;
|
||||
}
|
||||
|
||||
prom_trans_ents = last - first;
|
||||
|
||||
if (tlb_type == spitfire) {
|
||||
/* Clear diag TTE bits. */
|
||||
for (i = 0; i < prom_trans_ents; i++)
|
||||
prom_trans[i].data &= ~0x0003fe0000000000UL;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init remap_kernel(void)
|
||||
@ -553,21 +525,18 @@ static void __init remap_kernel(void)
|
||||
}
|
||||
|
||||
|
||||
static void __init inherit_prom_mappings_pre(void)
|
||||
static void __init inherit_prom_mappings(void)
|
||||
{
|
||||
read_obp_translations();
|
||||
|
||||
/* Now fixup OBP's idea about where we really are mapped. */
|
||||
prom_printf("Remapping the kernel... ");
|
||||
remap_kernel();
|
||||
|
||||
prom_printf("done.\n");
|
||||
}
|
||||
|
||||
static void __init inherit_prom_mappings_post(void)
|
||||
{
|
||||
build_obp_pgtable();
|
||||
prom_printf("Registering callbacks... ");
|
||||
register_prom_callbacks();
|
||||
prom_printf("done.\n");
|
||||
}
|
||||
|
||||
/* The OBP specifications for sun4u mark 0xfffffffc00000000 and
|
||||
@ -1519,7 +1488,7 @@ void __init paging_init(void)
|
||||
|
||||
swapper_pgd_zero = pgd_val(swapper_pg_dir[0]);
|
||||
|
||||
inherit_prom_mappings_pre();
|
||||
inherit_prom_mappings();
|
||||
|
||||
/* Ok, we can use our TLB miss and window trap handlers safely.
|
||||
* We need to do a quick peek here to see if we are on StarFire
|
||||
@ -1530,23 +1499,15 @@ void __init paging_init(void)
|
||||
extern void setup_tba(int);
|
||||
setup_tba(this_is_starfire);
|
||||
}
|
||||
__flush_tlb_all();
|
||||
|
||||
/* Everything from this point forward, until we are done with
|
||||
* inherit_prom_mappings_post(), must complete successfully
|
||||
* without calling into the firmware. The firwmare page tables
|
||||
* have not been built, but we are running on the Linux kernel's
|
||||
* trap table.
|
||||
*/
|
||||
inherit_locked_prom_mappings(1);
|
||||
|
||||
__flush_tlb_all();
|
||||
|
||||
/* Setup bootmem... */
|
||||
pages_avail = 0;
|
||||
last_valid_pfn = end_pfn = bootmem_init(&pages_avail);
|
||||
|
||||
inherit_prom_mappings_post();
|
||||
|
||||
inherit_locked_prom_mappings(1);
|
||||
|
||||
#ifdef CONFIG_DEBUG_PAGEALLOC
|
||||
kernel_physical_mapping_init();
|
||||
#endif
|
||||
|
@ -453,22 +453,6 @@ xcall_flush_dcache_page_spitfire: /* %g1 == physical page address
|
||||
nop
|
||||
nop
|
||||
|
||||
.globl xcall_promstop
|
||||
xcall_promstop:
|
||||
rdpr %pstate, %g2
|
||||
wrpr %g2, PSTATE_IG | PSTATE_AG, %pstate
|
||||
rdpr %pil, %g2
|
||||
wrpr %g0, 15, %pil
|
||||
sethi %hi(109f), %g7
|
||||
b,pt %xcc, etrap_irq
|
||||
109: or %g7, %lo(109b), %g7
|
||||
flushw
|
||||
call prom_stopself
|
||||
nop
|
||||
/* We should not return, just spin if we do... */
|
||||
1: b,a,pt %xcc, 1b
|
||||
nop
|
||||
|
||||
.data
|
||||
|
||||
errata32_hwbug:
|
||||
|
@ -68,19 +68,11 @@ void prom_cmdline(void)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
extern void smp_promstop_others(void);
|
||||
#endif
|
||||
|
||||
/* Drop into the prom, but completely terminate the program.
|
||||
* No chance of continuing.
|
||||
*/
|
||||
void prom_halt(void)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
smp_promstop_others();
|
||||
udelay(8000);
|
||||
#endif
|
||||
again:
|
||||
p1275_cmd("exit", P1275_INOUT(0, 0));
|
||||
goto again; /* PROM is out to get me -DaveM */
|
||||
@ -88,10 +80,6 @@ again:
|
||||
|
||||
void prom_halt_power_off(void)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
smp_promstop_others();
|
||||
udelay(8000);
|
||||
#endif
|
||||
p1275_cmd("SUNW,power-off", P1275_INOUT(0, 0));
|
||||
|
||||
/* if nothing else helps, we just halt */
|
||||
|
@ -13,7 +13,7 @@ mcast-objs := mcast_kern.o mcast_user.o
|
||||
net-objs := net_kern.o net_user.o
|
||||
mconsole-objs := mconsole_kern.o mconsole_user.o
|
||||
hostaudio-objs := hostaudio_kern.o
|
||||
ubd-objs := ubd_kern.o
|
||||
ubd-objs := ubd_kern.o ubd_user.o
|
||||
port-objs := port_kern.o port_user.o
|
||||
harddog-objs := harddog_kern.o harddog_user.o
|
||||
|
||||
|
@ -35,7 +35,6 @@
|
||||
#include "linux/blkpg.h"
|
||||
#include "linux/genhd.h"
|
||||
#include "linux/spinlock.h"
|
||||
#include "asm/atomic.h"
|
||||
#include "asm/segment.h"
|
||||
#include "asm/uaccess.h"
|
||||
#include "asm/irq.h"
|
||||
@ -54,21 +53,20 @@
|
||||
#include "mem.h"
|
||||
#include "mem_kern.h"
|
||||
#include "cow.h"
|
||||
#include "aio.h"
|
||||
|
||||
enum ubd_req { UBD_READ, UBD_WRITE };
|
||||
|
||||
struct io_thread_req {
|
||||
enum aio_type op;
|
||||
enum ubd_req op;
|
||||
int fds[2];
|
||||
unsigned long offsets[2];
|
||||
unsigned long long offset;
|
||||
unsigned long length;
|
||||
char *buffer;
|
||||
int sectorsize;
|
||||
int bitmap_offset;
|
||||
long bitmap_start;
|
||||
long bitmap_end;
|
||||
unsigned long sector_mask;
|
||||
unsigned long long cow_offset;
|
||||
unsigned long bitmap_words[2];
|
||||
int error;
|
||||
};
|
||||
|
||||
@ -82,31 +80,28 @@ extern int create_cow_file(char *cow_file, char *backing_file,
|
||||
unsigned long *bitmap_len_out,
|
||||
int *data_offset_out);
|
||||
extern int read_cow_bitmap(int fd, void *buf, int offset, int len);
|
||||
extern void do_io(struct io_thread_req *req, struct request *r,
|
||||
unsigned long *bitmap);
|
||||
extern void do_io(struct io_thread_req *req);
|
||||
|
||||
static inline int ubd_test_bit(__u64 bit, void *data)
|
||||
static inline int ubd_test_bit(__u64 bit, unsigned char *data)
|
||||
{
|
||||
unsigned char *buffer = data;
|
||||
__u64 n;
|
||||
int bits, off;
|
||||
|
||||
bits = sizeof(buffer[0]) * 8;
|
||||
bits = sizeof(data[0]) * 8;
|
||||
n = bit / bits;
|
||||
off = bit % bits;
|
||||
return((buffer[n] & (1 << off)) != 0);
|
||||
return((data[n] & (1 << off)) != 0);
|
||||
}
|
||||
|
||||
static inline void ubd_set_bit(__u64 bit, void *data)
|
||||
static inline void ubd_set_bit(__u64 bit, unsigned char *data)
|
||||
{
|
||||
unsigned char *buffer = data;
|
||||
__u64 n;
|
||||
int bits, off;
|
||||
|
||||
bits = sizeof(buffer[0]) * 8;
|
||||
bits = sizeof(data[0]) * 8;
|
||||
n = bit / bits;
|
||||
off = bit % bits;
|
||||
buffer[n] |= (1 << off);
|
||||
data[n] |= (1 << off);
|
||||
}
|
||||
/*End stuff from ubd_user.h*/
|
||||
|
||||
@ -115,6 +110,8 @@ static inline void ubd_set_bit(__u64 bit, void *data)
|
||||
static DEFINE_SPINLOCK(ubd_io_lock);
|
||||
static DEFINE_SPINLOCK(ubd_lock);
|
||||
|
||||
static void (*do_ubd)(void);
|
||||
|
||||
static int ubd_open(struct inode * inode, struct file * filp);
|
||||
static int ubd_release(struct inode * inode, struct file * file);
|
||||
static int ubd_ioctl(struct inode * inode, struct file * file,
|
||||
@ -161,8 +158,6 @@ struct cow {
|
||||
int data_offset;
|
||||
};
|
||||
|
||||
#define MAX_SG 64
|
||||
|
||||
struct ubd {
|
||||
char *file;
|
||||
int count;
|
||||
@ -173,7 +168,6 @@ struct ubd {
|
||||
int no_cow;
|
||||
struct cow cow;
|
||||
struct platform_device pdev;
|
||||
struct scatterlist sg[MAX_SG];
|
||||
};
|
||||
|
||||
#define DEFAULT_COW { \
|
||||
@ -466,114 +460,81 @@ __uml_help(fakehd,
|
||||
);
|
||||
|
||||
static void do_ubd_request(request_queue_t * q);
|
||||
static int in_ubd;
|
||||
|
||||
/* Only changed by ubd_init, which is an initcall. */
|
||||
int thread_fd = -1;
|
||||
|
||||
/* Changed by ubd_handler, which is serialized because interrupts only
|
||||
* happen on CPU 0.
|
||||
*/
|
||||
int intr_count = 0;
|
||||
|
||||
static void ubd_end_request(struct request *req, int bytes, int uptodate)
|
||||
{
|
||||
if (!end_that_request_first(req, uptodate, bytes >> 9)) {
|
||||
add_disk_randomness(req->rq_disk);
|
||||
end_that_request_last(req);
|
||||
}
|
||||
}
|
||||
|
||||
/* call ubd_finish if you need to serialize */
|
||||
static void __ubd_finish(struct request *req, int bytes)
|
||||
static void __ubd_finish(struct request *req, int error)
|
||||
{
|
||||
if(bytes < 0){
|
||||
ubd_end_request(req, 0, 0);
|
||||
return;
|
||||
}
|
||||
int nsect;
|
||||
|
||||
ubd_end_request(req, bytes, 1);
|
||||
if(error){
|
||||
end_request(req, 0);
|
||||
return;
|
||||
}
|
||||
nsect = req->current_nr_sectors;
|
||||
req->sector += nsect;
|
||||
req->buffer += nsect << 9;
|
||||
req->errors = 0;
|
||||
req->nr_sectors -= nsect;
|
||||
req->current_nr_sectors = 0;
|
||||
end_request(req, 1);
|
||||
}
|
||||
|
||||
static inline void ubd_finish(struct request *req, int bytes)
|
||||
static inline void ubd_finish(struct request *req, int error)
|
||||
{
|
||||
spin_lock(&ubd_io_lock);
|
||||
__ubd_finish(req, bytes);
|
||||
spin_unlock(&ubd_io_lock);
|
||||
spin_lock(&ubd_io_lock);
|
||||
__ubd_finish(req, error);
|
||||
spin_unlock(&ubd_io_lock);
|
||||
}
|
||||
|
||||
struct bitmap_io {
|
||||
atomic_t count;
|
||||
struct aio_context aio;
|
||||
};
|
||||
/* Called without ubd_io_lock held */
|
||||
static void ubd_handler(void)
|
||||
{
|
||||
struct io_thread_req req;
|
||||
struct request *rq = elv_next_request(ubd_queue);
|
||||
int n;
|
||||
|
||||
struct ubd_aio {
|
||||
struct aio_context aio;
|
||||
struct request *req;
|
||||
int len;
|
||||
struct bitmap_io *bitmap;
|
||||
void *bitmap_buf;
|
||||
};
|
||||
|
||||
static int ubd_reply_fd = -1;
|
||||
do_ubd = NULL;
|
||||
intr_count++;
|
||||
n = os_read_file(thread_fd, &req, sizeof(req));
|
||||
if(n != sizeof(req)){
|
||||
printk(KERN_ERR "Pid %d - spurious interrupt in ubd_handler, "
|
||||
"err = %d\n", os_getpid(), -n);
|
||||
spin_lock(&ubd_io_lock);
|
||||
end_request(rq, 0);
|
||||
spin_unlock(&ubd_io_lock);
|
||||
return;
|
||||
}
|
||||
|
||||
ubd_finish(rq, req.error);
|
||||
reactivate_fd(thread_fd, UBD_IRQ);
|
||||
do_ubd_request(ubd_queue);
|
||||
}
|
||||
|
||||
static irqreturn_t ubd_intr(int irq, void *dev, struct pt_regs *unused)
|
||||
{
|
||||
struct aio_thread_reply reply;
|
||||
struct ubd_aio *aio;
|
||||
struct request *req;
|
||||
int err, n, fd = (int) (long) dev;
|
||||
|
||||
while(1){
|
||||
err = os_read_file(fd, &reply, sizeof(reply));
|
||||
if(err == -EAGAIN)
|
||||
break;
|
||||
if(err < 0){
|
||||
printk("ubd_aio_handler - read returned err %d\n",
|
||||
-err);
|
||||
break;
|
||||
}
|
||||
|
||||
aio = container_of(reply.data, struct ubd_aio, aio);
|
||||
n = reply.err;
|
||||
|
||||
if(n == 0){
|
||||
req = aio->req;
|
||||
req->nr_sectors -= aio->len >> 9;
|
||||
|
||||
if((aio->bitmap != NULL) &&
|
||||
(atomic_dec_and_test(&aio->bitmap->count))){
|
||||
aio->aio = aio->bitmap->aio;
|
||||
aio->len = 0;
|
||||
kfree(aio->bitmap);
|
||||
aio->bitmap = NULL;
|
||||
submit_aio(&aio->aio);
|
||||
}
|
||||
else {
|
||||
if((req->nr_sectors == 0) &&
|
||||
(aio->bitmap == NULL)){
|
||||
int len = req->hard_nr_sectors << 9;
|
||||
ubd_finish(req, len);
|
||||
}
|
||||
|
||||
if(aio->bitmap_buf != NULL)
|
||||
kfree(aio->bitmap_buf);
|
||||
kfree(aio);
|
||||
}
|
||||
}
|
||||
else if(n < 0){
|
||||
ubd_finish(aio->req, n);
|
||||
if(aio->bitmap != NULL)
|
||||
kfree(aio->bitmap);
|
||||
if(aio->bitmap_buf != NULL)
|
||||
kfree(aio->bitmap_buf);
|
||||
kfree(aio);
|
||||
}
|
||||
}
|
||||
reactivate_fd(fd, UBD_IRQ);
|
||||
|
||||
do_ubd_request(ubd_queue);
|
||||
|
||||
ubd_handler();
|
||||
return(IRQ_HANDLED);
|
||||
}
|
||||
|
||||
/* Only changed by ubd_init, which is an initcall. */
|
||||
static int io_pid = -1;
|
||||
|
||||
void kill_io_thread(void)
|
||||
{
|
||||
if(io_pid != -1)
|
||||
os_kill_process(io_pid, 1);
|
||||
}
|
||||
|
||||
__uml_exitcall(kill_io_thread);
|
||||
|
||||
static int ubd_file_size(struct ubd *dev, __u64 *size_out)
|
||||
{
|
||||
char *file;
|
||||
@ -608,7 +569,7 @@ static int ubd_open_dev(struct ubd *dev)
|
||||
&dev->cow.data_offset, create_ptr);
|
||||
|
||||
if((dev->fd == -ENOENT) && create_cow){
|
||||
dev->fd = create_cow_file(dev->file, dev->cow.file,
|
||||
dev->fd = create_cow_file(dev->file, dev->cow.file,
|
||||
dev->openflags, 1 << 9, PAGE_SIZE,
|
||||
&dev->cow.bitmap_offset,
|
||||
&dev->cow.bitmap_len,
|
||||
@ -870,10 +831,6 @@ int ubd_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
ubd_reply_fd = init_aio_irq(UBD_IRQ, "ubd", ubd_intr);
|
||||
if(ubd_reply_fd < 0)
|
||||
printk("Setting up ubd AIO failed, err = %d\n", ubd_reply_fd);
|
||||
|
||||
devfs_mk_dir("ubd");
|
||||
if (register_blkdev(MAJOR_NR, "ubd"))
|
||||
return -1;
|
||||
@ -884,7 +841,6 @@ int ubd_init(void)
|
||||
return -1;
|
||||
}
|
||||
|
||||
blk_queue_max_hw_segments(ubd_queue, MAX_SG);
|
||||
if (fake_major != MAJOR_NR) {
|
||||
char name[sizeof("ubd_nnn\0")];
|
||||
|
||||
@ -896,12 +852,40 @@ int ubd_init(void)
|
||||
driver_register(&ubd_driver);
|
||||
for (i = 0; i < MAX_DEV; i++)
|
||||
ubd_add(i);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
late_initcall(ubd_init);
|
||||
|
||||
int ubd_driver_init(void){
|
||||
unsigned long stack;
|
||||
int err;
|
||||
|
||||
/* Set by CONFIG_BLK_DEV_UBD_SYNC or ubd=sync.*/
|
||||
if(global_openflags.s){
|
||||
printk(KERN_INFO "ubd: Synchronous mode\n");
|
||||
/* Letting ubd=sync be like using ubd#s= instead of ubd#= is
|
||||
* enough. So use anyway the io thread. */
|
||||
}
|
||||
stack = alloc_stack(0, 0);
|
||||
io_pid = start_io_thread(stack + PAGE_SIZE - sizeof(void *),
|
||||
&thread_fd);
|
||||
if(io_pid < 0){
|
||||
printk(KERN_ERR
|
||||
"ubd : Failed to start I/O thread (errno = %d) - "
|
||||
"falling back to synchronous I/O\n", -io_pid);
|
||||
io_pid = -1;
|
||||
return(0);
|
||||
}
|
||||
err = um_request_irq(UBD_IRQ, thread_fd, IRQ_READ, ubd_intr,
|
||||
SA_INTERRUPT, "ubd", ubd_dev);
|
||||
if(err != 0)
|
||||
printk(KERN_ERR "um_request_irq failed - errno = %d\n", -err);
|
||||
return(err);
|
||||
}
|
||||
|
||||
device_initcall(ubd_driver_init);
|
||||
|
||||
static int ubd_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct gendisk *disk = inode->i_bdev->bd_disk;
|
||||
@ -939,55 +923,105 @@ static int ubd_release(struct inode * inode, struct file * file)
|
||||
return(0);
|
||||
}
|
||||
|
||||
static void cowify_bitmap(struct io_thread_req *req, unsigned long *bitmap)
|
||||
static void cowify_bitmap(__u64 io_offset, int length, unsigned long *cow_mask,
|
||||
__u64 *cow_offset, unsigned long *bitmap,
|
||||
__u64 bitmap_offset, unsigned long *bitmap_words,
|
||||
__u64 bitmap_len)
|
||||
{
|
||||
__u64 sector = req->offset / req->sectorsize;
|
||||
int i;
|
||||
__u64 sector = io_offset >> 9;
|
||||
int i, update_bitmap = 0;
|
||||
|
||||
for(i = 0; i < req->length / req->sectorsize; i++){
|
||||
if(ubd_test_bit(sector + i, bitmap))
|
||||
continue;
|
||||
for(i = 0; i < length >> 9; i++){
|
||||
if(cow_mask != NULL)
|
||||
ubd_set_bit(i, (unsigned char *) cow_mask);
|
||||
if(ubd_test_bit(sector + i, (unsigned char *) bitmap))
|
||||
continue;
|
||||
|
||||
if(req->bitmap_start == -1)
|
||||
req->bitmap_start = sector + i;
|
||||
req->bitmap_end = sector + i + 1;
|
||||
update_bitmap = 1;
|
||||
ubd_set_bit(sector + i, (unsigned char *) bitmap);
|
||||
}
|
||||
|
||||
ubd_set_bit(sector + i, bitmap);
|
||||
}
|
||||
if(!update_bitmap)
|
||||
return;
|
||||
|
||||
*cow_offset = sector / (sizeof(unsigned long) * 8);
|
||||
|
||||
/* This takes care of the case where we're exactly at the end of the
|
||||
* device, and *cow_offset + 1 is off the end. So, just back it up
|
||||
* by one word. Thanks to Lynn Kerby for the fix and James McMechan
|
||||
* for the original diagnosis.
|
||||
*/
|
||||
if(*cow_offset == ((bitmap_len + sizeof(unsigned long) - 1) /
|
||||
sizeof(unsigned long) - 1))
|
||||
(*cow_offset)--;
|
||||
|
||||
bitmap_words[0] = bitmap[*cow_offset];
|
||||
bitmap_words[1] = bitmap[*cow_offset + 1];
|
||||
|
||||
*cow_offset *= sizeof(unsigned long);
|
||||
*cow_offset += bitmap_offset;
|
||||
}
|
||||
|
||||
static void cowify_req(struct io_thread_req *req, unsigned long *bitmap,
|
||||
__u64 bitmap_offset, __u64 bitmap_len)
|
||||
{
|
||||
__u64 sector = req->offset >> 9;
|
||||
int i;
|
||||
|
||||
if(req->length > (sizeof(req->sector_mask) * 8) << 9)
|
||||
panic("Operation too long");
|
||||
|
||||
if(req->op == UBD_READ) {
|
||||
for(i = 0; i < req->length >> 9; i++){
|
||||
if(ubd_test_bit(sector + i, (unsigned char *) bitmap))
|
||||
ubd_set_bit(i, (unsigned char *)
|
||||
&req->sector_mask);
|
||||
}
|
||||
}
|
||||
else cowify_bitmap(req->offset, req->length, &req->sector_mask,
|
||||
&req->cow_offset, bitmap, bitmap_offset,
|
||||
req->bitmap_words, bitmap_len);
|
||||
}
|
||||
|
||||
/* Called with ubd_io_lock held */
|
||||
static int prepare_request(struct request *req, struct io_thread_req *io_req,
|
||||
unsigned long long offset, int page_offset,
|
||||
int len, struct page *page)
|
||||
static int prepare_request(struct request *req, struct io_thread_req *io_req)
|
||||
{
|
||||
struct gendisk *disk = req->rq_disk;
|
||||
struct ubd *dev = disk->private_data;
|
||||
__u64 offset;
|
||||
int len;
|
||||
|
||||
if(req->rq_status == RQ_INACTIVE) return(1);
|
||||
|
||||
/* This should be impossible now */
|
||||
if((rq_data_dir(req) == WRITE) && !dev->openflags.w){
|
||||
printk("Write attempted on readonly ubd device %s\n",
|
||||
disk->disk_name);
|
||||
ubd_end_request(req, 0, 0);
|
||||
end_request(req, 0);
|
||||
return(1);
|
||||
}
|
||||
|
||||
offset = ((__u64) req->sector) << 9;
|
||||
len = req->current_nr_sectors << 9;
|
||||
|
||||
io_req->fds[0] = (dev->cow.file != NULL) ? dev->cow.fd : dev->fd;
|
||||
io_req->fds[1] = dev->fd;
|
||||
io_req->cow_offset = -1;
|
||||
io_req->offset = offset;
|
||||
io_req->length = len;
|
||||
io_req->error = 0;
|
||||
io_req->op = (rq_data_dir(req) == READ) ? AIO_READ : AIO_WRITE;
|
||||
io_req->sector_mask = 0;
|
||||
|
||||
io_req->op = (rq_data_dir(req) == READ) ? UBD_READ : UBD_WRITE;
|
||||
io_req->offsets[0] = 0;
|
||||
io_req->offsets[1] = dev->cow.data_offset;
|
||||
io_req->buffer = page_address(page) + page_offset;
|
||||
io_req->buffer = req->buffer;
|
||||
io_req->sectorsize = 1 << 9;
|
||||
io_req->bitmap_offset = dev->cow.bitmap_offset;
|
||||
io_req->bitmap_start = -1;
|
||||
io_req->bitmap_end = -1;
|
||||
|
||||
if((dev->cow.file != NULL) && (io_req->op == UBD_WRITE))
|
||||
cowify_bitmap(io_req, dev->cow.bitmap);
|
||||
if(dev->cow.file != NULL)
|
||||
cowify_req(io_req, dev->cow.bitmap, dev->cow.bitmap_offset,
|
||||
dev->cow.bitmap_len);
|
||||
|
||||
return(0);
|
||||
}
|
||||
|
||||
@ -996,36 +1030,30 @@ static void do_ubd_request(request_queue_t *q)
|
||||
{
|
||||
struct io_thread_req io_req;
|
||||
struct request *req;
|
||||
__u64 sector;
|
||||
int err;
|
||||
int err, n;
|
||||
|
||||
if(in_ubd)
|
||||
return;
|
||||
in_ubd = 1;
|
||||
while((req = elv_next_request(q)) != NULL){
|
||||
struct gendisk *disk = req->rq_disk;
|
||||
struct ubd *dev = disk->private_data;
|
||||
int n, i;
|
||||
|
||||
blkdev_dequeue_request(req);
|
||||
|
||||
sector = req->sector;
|
||||
n = blk_rq_map_sg(q, req, dev->sg);
|
||||
|
||||
for(i = 0; i < n; i++){
|
||||
struct scatterlist *sg = &dev->sg[i];
|
||||
|
||||
err = prepare_request(req, &io_req, sector << 9,
|
||||
sg->offset, sg->length,
|
||||
sg->page);
|
||||
if(err)
|
||||
continue;
|
||||
|
||||
sector += sg->length >> 9;
|
||||
do_io(&io_req, req, dev->cow.bitmap);
|
||||
if(thread_fd == -1){
|
||||
while((req = elv_next_request(q)) != NULL){
|
||||
err = prepare_request(req, &io_req);
|
||||
if(!err){
|
||||
do_io(&io_req);
|
||||
__ubd_finish(req, io_req.error);
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
if(do_ubd || (req = elv_next_request(q)) == NULL)
|
||||
return;
|
||||
err = prepare_request(req, &io_req);
|
||||
if(!err){
|
||||
do_ubd = ubd_handler;
|
||||
n = os_write_file(thread_fd, (char *) &io_req,
|
||||
sizeof(io_req));
|
||||
if(n != sizeof(io_req))
|
||||
printk("write to io thread failed, "
|
||||
"errno = %d\n", -n);
|
||||
}
|
||||
}
|
||||
in_ubd = 0;
|
||||
}
|
||||
|
||||
static int ubd_ioctl(struct inode * inode, struct file * file,
|
||||
@ -1241,95 +1269,131 @@ int create_cow_file(char *cow_file, char *backing_file, struct openflags flags,
|
||||
return(err);
|
||||
}
|
||||
|
||||
void do_io(struct io_thread_req *req, struct request *r, unsigned long *bitmap)
|
||||
static int update_bitmap(struct io_thread_req *req)
|
||||
{
|
||||
struct ubd_aio *aio;
|
||||
struct bitmap_io *bitmap_io = NULL;
|
||||
char *buf;
|
||||
void *bitmap_buf = NULL;
|
||||
unsigned long len, sector;
|
||||
int nsectors, start, end, bit, err;
|
||||
__u64 off;
|
||||
int n;
|
||||
|
||||
if(req->bitmap_start != -1){
|
||||
/* Round up to the nearest word */
|
||||
int round = sizeof(unsigned long);
|
||||
len = (req->bitmap_end - req->bitmap_start +
|
||||
round * 8 - 1) / (round * 8);
|
||||
len *= round;
|
||||
if(req->cow_offset == -1)
|
||||
return(0);
|
||||
|
||||
off = req->bitmap_start / (8 * round);
|
||||
off *= round;
|
||||
n = os_seek_file(req->fds[1], req->cow_offset);
|
||||
if(n < 0){
|
||||
printk("do_io - bitmap lseek failed : err = %d\n", -n);
|
||||
return(1);
|
||||
}
|
||||
|
||||
bitmap_io = kmalloc(sizeof(*bitmap_io), GFP_KERNEL);
|
||||
if(bitmap_io == NULL){
|
||||
printk("Failed to kmalloc bitmap IO\n");
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
n = os_write_file(req->fds[1], &req->bitmap_words,
|
||||
sizeof(req->bitmap_words));
|
||||
if(n != sizeof(req->bitmap_words)){
|
||||
printk("do_io - bitmap update failed, err = %d fd = %d\n", -n,
|
||||
req->fds[1]);
|
||||
return(1);
|
||||
}
|
||||
|
||||
bitmap_buf = kmalloc(len, GFP_KERNEL);
|
||||
if(bitmap_buf == NULL){
|
||||
printk("do_io : kmalloc of bitmap chunk "
|
||||
"failed\n");
|
||||
kfree(bitmap_io);
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
memcpy(bitmap_buf, &bitmap[off / sizeof(bitmap[0])], len);
|
||||
|
||||
*bitmap_io = ((struct bitmap_io)
|
||||
{ .count = ATOMIC_INIT(0),
|
||||
.aio = INIT_AIO(AIO_WRITE, req->fds[1],
|
||||
bitmap_buf, len,
|
||||
req->bitmap_offset + off,
|
||||
ubd_reply_fd) } );
|
||||
}
|
||||
|
||||
nsectors = req->length / req->sectorsize;
|
||||
start = 0;
|
||||
end = nsectors;
|
||||
bit = 0;
|
||||
do {
|
||||
if(bitmap != NULL){
|
||||
sector = req->offset / req->sectorsize;
|
||||
bit = ubd_test_bit(sector + start, bitmap);
|
||||
end = start;
|
||||
while((end < nsectors) &&
|
||||
(ubd_test_bit(sector + end, bitmap) == bit))
|
||||
end++;
|
||||
}
|
||||
|
||||
off = req->offsets[bit] + req->offset +
|
||||
start * req->sectorsize;
|
||||
len = (end - start) * req->sectorsize;
|
||||
buf = &req->buffer[start * req->sectorsize];
|
||||
|
||||
aio = kmalloc(sizeof(*aio), GFP_KERNEL);
|
||||
if(aio == NULL){
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
*aio = ((struct ubd_aio)
|
||||
{ .aio = INIT_AIO(req->op, req->fds[bit], buf,
|
||||
len, off, ubd_reply_fd),
|
||||
.len = len,
|
||||
.req = r,
|
||||
.bitmap = bitmap_io,
|
||||
.bitmap_buf = bitmap_buf });
|
||||
|
||||
if(aio->bitmap != NULL)
|
||||
atomic_inc(&aio->bitmap->count);
|
||||
|
||||
err = submit_aio(&aio->aio);
|
||||
if(err){
|
||||
printk("do_io - submit_aio failed, "
|
||||
"err = %d\n", err);
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
start = end;
|
||||
} while(start < nsectors);
|
||||
return(0);
|
||||
}
|
||||
|
||||
void do_io(struct io_thread_req *req)
|
||||
{
|
||||
char *buf;
|
||||
unsigned long len;
|
||||
int n, nsectors, start, end, bit;
|
||||
int err;
|
||||
__u64 off;
|
||||
|
||||
nsectors = req->length / req->sectorsize;
|
||||
start = 0;
|
||||
do {
|
||||
bit = ubd_test_bit(start, (unsigned char *) &req->sector_mask);
|
||||
end = start;
|
||||
while((end < nsectors) &&
|
||||
(ubd_test_bit(end, (unsigned char *)
|
||||
&req->sector_mask) == bit))
|
||||
end++;
|
||||
|
||||
off = req->offset + req->offsets[bit] +
|
||||
start * req->sectorsize;
|
||||
len = (end - start) * req->sectorsize;
|
||||
buf = &req->buffer[start * req->sectorsize];
|
||||
|
||||
err = os_seek_file(req->fds[bit], off);
|
||||
if(err < 0){
|
||||
printk("do_io - lseek failed : err = %d\n", -err);
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
if(req->op == UBD_READ){
|
||||
n = 0;
|
||||
do {
|
||||
buf = &buf[n];
|
||||
len -= n;
|
||||
n = os_read_file(req->fds[bit], buf, len);
|
||||
if (n < 0) {
|
||||
printk("do_io - read failed, err = %d "
|
||||
"fd = %d\n", -n, req->fds[bit]);
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
} while((n < len) && (n != 0));
|
||||
if (n < len) memset(&buf[n], 0, len - n);
|
||||
} else {
|
||||
n = os_write_file(req->fds[bit], buf, len);
|
||||
if(n != len){
|
||||
printk("do_io - write failed err = %d "
|
||||
"fd = %d\n", -n, req->fds[bit]);
|
||||
req->error = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
start = end;
|
||||
} while(start < nsectors);
|
||||
|
||||
req->error = update_bitmap(req);
|
||||
}
|
||||
|
||||
/* Changed in start_io_thread, which is serialized by being called only
|
||||
* from ubd_init, which is an initcall.
|
||||
*/
|
||||
int kernel_fd = -1;
|
||||
|
||||
/* Only changed by the io thread */
|
||||
int io_count = 0;
|
||||
|
||||
int io_thread(void *arg)
|
||||
{
|
||||
struct io_thread_req req;
|
||||
int n;
|
||||
|
||||
ignore_sigwinch_sig();
|
||||
while(1){
|
||||
n = os_read_file(kernel_fd, &req, sizeof(req));
|
||||
if(n != sizeof(req)){
|
||||
if(n < 0)
|
||||
printk("io_thread - read failed, fd = %d, "
|
||||
"err = %d\n", kernel_fd, -n);
|
||||
else {
|
||||
printk("io_thread - short read, fd = %d, "
|
||||
"length = %d\n", kernel_fd, n);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
io_count++;
|
||||
do_io(&req);
|
||||
n = os_write_file(kernel_fd, &req, sizeof(req));
|
||||
if(n != sizeof(req))
|
||||
printk("io_thread - write failed, fd = %d, err = %d\n",
|
||||
kernel_fd, -n);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*/
|
||||
|
75
arch/um/drivers/ubd_user.c
Normal file
75
arch/um/drivers/ubd_user.c
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
|
||||
* Copyright (C) 2001 Ridgerun,Inc (glonnon@ridgerun.com)
|
||||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <netinet/in.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/param.h>
|
||||
#include "asm/types.h"
|
||||
#include "user_util.h"
|
||||
#include "kern_util.h"
|
||||
#include "user.h"
|
||||
#include "ubd_user.h"
|
||||
#include "os.h"
|
||||
#include "cow.h"
|
||||
|
||||
#include <endian.h>
|
||||
#include <byteswap.h>
|
||||
|
||||
void ignore_sigwinch_sig(void)
|
||||
{
|
||||
signal(SIGWINCH, SIG_IGN);
|
||||
}
|
||||
|
||||
int start_io_thread(unsigned long sp, int *fd_out)
|
||||
{
|
||||
int pid, fds[2], err;
|
||||
|
||||
err = os_pipe(fds, 1, 1);
|
||||
if(err < 0){
|
||||
printk("start_io_thread - os_pipe failed, err = %d\n", -err);
|
||||
goto out;
|
||||
}
|
||||
|
||||
kernel_fd = fds[0];
|
||||
*fd_out = fds[1];
|
||||
|
||||
pid = clone(io_thread, (void *) sp, CLONE_FILES | CLONE_VM | SIGCHLD,
|
||||
NULL);
|
||||
if(pid < 0){
|
||||
printk("start_io_thread - clone failed : errno = %d\n", errno);
|
||||
err = -errno;
|
||||
goto out_close;
|
||||
}
|
||||
|
||||
return(pid);
|
||||
|
||||
out_close:
|
||||
os_close_file(fds[0]);
|
||||
os_close_file(fds[1]);
|
||||
kernel_fd = -1;
|
||||
*fd_out = -1;
|
||||
out:
|
||||
return(err);
|
||||
}
|
||||
|
||||
/*
|
||||
* 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:
|
||||
*/
|
@ -14,27 +14,15 @@ struct aio_thread_reply {
|
||||
};
|
||||
|
||||
struct aio_context {
|
||||
enum aio_type type;
|
||||
int fd;
|
||||
void *data;
|
||||
int len;
|
||||
unsigned long long offset;
|
||||
int reply_fd;
|
||||
struct aio_context *next;
|
||||
};
|
||||
|
||||
#define INIT_AIO(aio_type, aio_fd, aio_data, aio_len, aio_offset, \
|
||||
aio_reply_fd) \
|
||||
{ .type = aio_type, \
|
||||
.fd = aio_fd, \
|
||||
.data = aio_data, \
|
||||
.len = aio_len, \
|
||||
.offset = aio_offset, \
|
||||
.reply_fd = aio_reply_fd }
|
||||
|
||||
#define INIT_AIO_CONTEXT { .reply_fd = -1, \
|
||||
.next = NULL }
|
||||
|
||||
extern int submit_aio(struct aio_context *aio);
|
||||
extern int submit_aio(enum aio_type type, int fd, char *buf, int len,
|
||||
unsigned long long offset, int reply_fd,
|
||||
struct aio_context *aio);
|
||||
|
||||
#endif
|
||||
|
@ -6,6 +6,7 @@
|
||||
#ifndef __OS_H__
|
||||
#define __OS_H__
|
||||
|
||||
#include "uml-config.h"
|
||||
#include "asm/types.h"
|
||||
#include "../os/include/file.h"
|
||||
|
||||
@ -159,7 +160,11 @@ extern int can_do_skas(void);
|
||||
|
||||
/* Make sure they are clear when running in TT mode. Required by
|
||||
* SEGV_MAYBE_FIXABLE */
|
||||
#ifdef UML_CONFIG_MODE_SKAS
|
||||
#define clear_can_do_skas() do { ptrace_faultinfo = proc_mm = 0; } while (0)
|
||||
#else
|
||||
#define clear_can_do_skas() do {} while (0)
|
||||
#endif
|
||||
|
||||
/* mem.c */
|
||||
extern int create_mem_file(unsigned long len);
|
||||
|
@ -183,10 +183,6 @@ struct syscall_args {
|
||||
case RBP: val = UPT_RBP(regs); break; \
|
||||
case ORIG_RAX: val = UPT_ORIG_RAX(regs); break; \
|
||||
case CS: val = UPT_CS(regs); break; \
|
||||
case DS: val = UPT_DS(regs); break; \
|
||||
case ES: val = UPT_ES(regs); break; \
|
||||
case FS: val = UPT_FS(regs); break; \
|
||||
case GS: val = UPT_GS(regs); break; \
|
||||
case EFLAGS: val = UPT_EFLAGS(regs); break; \
|
||||
default : \
|
||||
panic("Bad register in UPT_REG : %d\n", reg); \
|
||||
|
@ -6,7 +6,6 @@
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <signal.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <sched.h>
|
||||
#include <sys/syscall.h>
|
||||
@ -17,31 +16,18 @@
|
||||
#include "user.h"
|
||||
#include "mode.h"
|
||||
|
||||
struct aio_thread_req {
|
||||
enum aio_type type;
|
||||
int io_fd;
|
||||
unsigned long long offset;
|
||||
char *buf;
|
||||
int len;
|
||||
struct aio_context *aio;
|
||||
};
|
||||
|
||||
static int aio_req_fd_r = -1;
|
||||
static int aio_req_fd_w = -1;
|
||||
|
||||
static int update_aio(struct aio_context *aio, int res)
|
||||
{
|
||||
if(res < 0)
|
||||
aio->len = res;
|
||||
else if((res == 0) && (aio->type == AIO_READ)){
|
||||
/* This is the EOF case - we have hit the end of the file
|
||||
* and it ends in a partial block, so we fill the end of
|
||||
* the block with zeros and claim success.
|
||||
*/
|
||||
memset(aio->data, 0, aio->len);
|
||||
aio->len = 0;
|
||||
}
|
||||
else if(res > 0){
|
||||
aio->len -= res;
|
||||
aio->data += res;
|
||||
aio->offset += res;
|
||||
return aio->len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(HAVE_AIO_ABI)
|
||||
#include <linux/aio_abi.h>
|
||||
|
||||
@ -80,7 +66,8 @@ static long io_getevents(aio_context_t ctx_id, long min_nr, long nr,
|
||||
* that it now backs the mmapped area.
|
||||
*/
|
||||
|
||||
static int do_aio(aio_context_t ctx, struct aio_context *aio)
|
||||
static int do_aio(aio_context_t ctx, enum aio_type type, int fd, char *buf,
|
||||
int len, unsigned long long offset, struct aio_context *aio)
|
||||
{
|
||||
struct iocb iocb, *iocbp = &iocb;
|
||||
char c;
|
||||
@ -88,39 +75,40 @@ static int do_aio(aio_context_t ctx, struct aio_context *aio)
|
||||
|
||||
iocb = ((struct iocb) { .aio_data = (unsigned long) aio,
|
||||
.aio_reqprio = 0,
|
||||
.aio_fildes = aio->fd,
|
||||
.aio_buf = (unsigned long) aio->data,
|
||||
.aio_nbytes = aio->len,
|
||||
.aio_offset = aio->offset,
|
||||
.aio_fildes = fd,
|
||||
.aio_buf = (unsigned long) buf,
|
||||
.aio_nbytes = len,
|
||||
.aio_offset = offset,
|
||||
.aio_reserved1 = 0,
|
||||
.aio_reserved2 = 0,
|
||||
.aio_reserved3 = 0 });
|
||||
|
||||
switch(aio->type){
|
||||
switch(type){
|
||||
case AIO_READ:
|
||||
iocb.aio_lio_opcode = IOCB_CMD_PREAD;
|
||||
err = io_submit(ctx, 1, &iocbp);
|
||||
break;
|
||||
case AIO_WRITE:
|
||||
iocb.aio_lio_opcode = IOCB_CMD_PWRITE;
|
||||
err = io_submit(ctx, 1, &iocbp);
|
||||
break;
|
||||
case AIO_MMAP:
|
||||
iocb.aio_lio_opcode = IOCB_CMD_PREAD;
|
||||
iocb.aio_buf = (unsigned long) &c;
|
||||
iocb.aio_nbytes = sizeof(c);
|
||||
err = io_submit(ctx, 1, &iocbp);
|
||||
break;
|
||||
default:
|
||||
printk("Bogus op in do_aio - %d\n", aio->type);
|
||||
printk("Bogus op in do_aio - %d\n", type);
|
||||
err = -EINVAL;
|
||||
goto out;
|
||||
break;
|
||||
}
|
||||
|
||||
err = io_submit(ctx, 1, &iocbp);
|
||||
if(err > 0)
|
||||
err = 0;
|
||||
else
|
||||
err = -errno;
|
||||
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
@ -129,9 +117,8 @@ static aio_context_t ctx = 0;
|
||||
static int aio_thread(void *arg)
|
||||
{
|
||||
struct aio_thread_reply reply;
|
||||
struct aio_context *aio;
|
||||
struct io_event event;
|
||||
int err, n;
|
||||
int err, n, reply_fd;
|
||||
|
||||
signal(SIGWINCH, SIG_IGN);
|
||||
|
||||
@ -144,22 +131,14 @@ static int aio_thread(void *arg)
|
||||
"errno = %d\n", errno);
|
||||
}
|
||||
else {
|
||||
/* This is safe as we've just a pointer here. */
|
||||
aio = (struct aio_context *) (long) event.data;
|
||||
if(update_aio(aio, event.res)){
|
||||
do_aio(ctx, aio);
|
||||
continue;
|
||||
}
|
||||
|
||||
reply = ((struct aio_thread_reply)
|
||||
{ .data = aio,
|
||||
.err = aio->len });
|
||||
err = os_write_file(aio->reply_fd, &reply,
|
||||
sizeof(reply));
|
||||
{ .data = (void *) (long) event.data,
|
||||
.err = event.res });
|
||||
reply_fd = ((struct aio_context *) reply.data)->reply_fd;
|
||||
err = os_write_file(reply_fd, &reply, sizeof(reply));
|
||||
if(err != sizeof(reply))
|
||||
printk("aio_thread - write failed, "
|
||||
"fd = %d, err = %d\n", aio->reply_fd,
|
||||
-err);
|
||||
printk("aio_thread - write failed, fd = %d, "
|
||||
"err = %d\n", aio_req_fd_r, -err);
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
@ -167,35 +146,35 @@ static int aio_thread(void *arg)
|
||||
|
||||
#endif
|
||||
|
||||
static int do_not_aio(struct aio_context *aio)
|
||||
static int do_not_aio(struct aio_thread_req *req)
|
||||
{
|
||||
char c;
|
||||
int err;
|
||||
|
||||
switch(aio->type){
|
||||
switch(req->type){
|
||||
case AIO_READ:
|
||||
err = os_seek_file(aio->fd, aio->offset);
|
||||
err = os_seek_file(req->io_fd, req->offset);
|
||||
if(err)
|
||||
goto out;
|
||||
|
||||
err = os_read_file(aio->fd, aio->data, aio->len);
|
||||
err = os_read_file(req->io_fd, req->buf, req->len);
|
||||
break;
|
||||
case AIO_WRITE:
|
||||
err = os_seek_file(aio->fd, aio->offset);
|
||||
err = os_seek_file(req->io_fd, req->offset);
|
||||
if(err)
|
||||
goto out;
|
||||
|
||||
err = os_write_file(aio->fd, aio->data, aio->len);
|
||||
err = os_write_file(req->io_fd, req->buf, req->len);
|
||||
break;
|
||||
case AIO_MMAP:
|
||||
err = os_seek_file(aio->fd, aio->offset);
|
||||
err = os_seek_file(req->io_fd, req->offset);
|
||||
if(err)
|
||||
goto out;
|
||||
|
||||
err = os_read_file(aio->fd, &c, sizeof(c));
|
||||
err = os_read_file(req->io_fd, &c, sizeof(c));
|
||||
break;
|
||||
default:
|
||||
printk("do_not_aio - bad request type : %d\n", aio->type);
|
||||
printk("do_not_aio - bad request type : %d\n", req->type);
|
||||
err = -EINVAL;
|
||||
break;
|
||||
}
|
||||
@ -206,14 +185,14 @@ static int do_not_aio(struct aio_context *aio)
|
||||
|
||||
static int not_aio_thread(void *arg)
|
||||
{
|
||||
struct aio_context *aio;
|
||||
struct aio_thread_req req;
|
||||
struct aio_thread_reply reply;
|
||||
int err;
|
||||
|
||||
signal(SIGWINCH, SIG_IGN);
|
||||
while(1){
|
||||
err = os_read_file(aio_req_fd_r, &aio, sizeof(aio));
|
||||
if(err != sizeof(aio)){
|
||||
err = os_read_file(aio_req_fd_r, &req, sizeof(req));
|
||||
if(err != sizeof(req)){
|
||||
if(err < 0)
|
||||
printk("not_aio_thread - read failed, "
|
||||
"fd = %d, err = %d\n", aio_req_fd_r,
|
||||
@ -224,34 +203,17 @@ static int not_aio_thread(void *arg)
|
||||
}
|
||||
continue;
|
||||
}
|
||||
again:
|
||||
err = do_not_aio(aio);
|
||||
|
||||
if(update_aio(aio, err))
|
||||
goto again;
|
||||
|
||||
reply = ((struct aio_thread_reply) { .data = aio,
|
||||
.err = aio->len });
|
||||
err = os_write_file(aio->reply_fd, &reply, sizeof(reply));
|
||||
err = do_not_aio(&req);
|
||||
reply = ((struct aio_thread_reply) { .data = req.aio,
|
||||
.err = err });
|
||||
err = os_write_file(req.aio->reply_fd, &reply, sizeof(reply));
|
||||
if(err != sizeof(reply))
|
||||
printk("not_aio_thread - write failed, fd = %d, "
|
||||
"err = %d\n", aio_req_fd_r, -err);
|
||||
}
|
||||
}
|
||||
|
||||
static int submit_aio_24(struct aio_context *aio)
|
||||
{
|
||||
int err;
|
||||
|
||||
err = os_write_file(aio_req_fd_w, &aio, sizeof(aio));
|
||||
if(err == sizeof(aio))
|
||||
err = 0;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int aio_pid = -1;
|
||||
static int (*submit_proc)(struct aio_context *aio);
|
||||
|
||||
static int init_aio_24(void)
|
||||
{
|
||||
@ -283,33 +245,11 @@ static int init_aio_24(void)
|
||||
#endif
|
||||
printk("2.6 host AIO support not used - falling back to I/O "
|
||||
"thread\n");
|
||||
|
||||
submit_proc = submit_aio_24;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef HAVE_AIO_ABI
|
||||
#define DEFAULT_24_AIO 0
|
||||
static int submit_aio_26(struct aio_context *aio)
|
||||
{
|
||||
struct aio_thread_reply reply;
|
||||
int err;
|
||||
|
||||
err = do_aio(ctx, aio);
|
||||
if(err){
|
||||
reply = ((struct aio_thread_reply) { .data = aio,
|
||||
.err = err });
|
||||
err = os_write_file(aio->reply_fd, &reply, sizeof(reply));
|
||||
if(err != sizeof(reply))
|
||||
printk("submit_aio_26 - write failed, "
|
||||
"fd = %d, err = %d\n", aio->reply_fd, -err);
|
||||
else err = 0;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
static int init_aio_26(void)
|
||||
{
|
||||
unsigned long stack;
|
||||
@ -330,22 +270,39 @@ static int init_aio_26(void)
|
||||
aio_pid = err;
|
||||
|
||||
printk("Using 2.6 host AIO\n");
|
||||
|
||||
submit_proc = submit_aio_26;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int submit_aio_26(enum aio_type type, int io_fd, char *buf, int len,
|
||||
unsigned long long offset, struct aio_context *aio)
|
||||
{
|
||||
struct aio_thread_reply reply;
|
||||
int err;
|
||||
|
||||
err = do_aio(ctx, type, io_fd, buf, len, offset, aio);
|
||||
if(err){
|
||||
reply = ((struct aio_thread_reply) { .data = aio,
|
||||
.err = err });
|
||||
err = os_write_file(aio->reply_fd, &reply, sizeof(reply));
|
||||
if(err != sizeof(reply))
|
||||
printk("submit_aio_26 - write failed, "
|
||||
"fd = %d, err = %d\n", aio->reply_fd, -err);
|
||||
else err = 0;
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
#else
|
||||
#define DEFAULT_24_AIO 1
|
||||
static int submit_aio_26(struct aio_context *aio)
|
||||
static int init_aio_26(void)
|
||||
{
|
||||
return -ENOSYS;
|
||||
}
|
||||
|
||||
static int init_aio_26(void)
|
||||
static int submit_aio_26(enum aio_type type, int io_fd, char *buf, int len,
|
||||
unsigned long long offset, struct aio_context *aio)
|
||||
{
|
||||
submit_proc = submit_aio_26;
|
||||
return -ENOSYS;
|
||||
}
|
||||
#endif
|
||||
@ -412,7 +369,33 @@ static void exit_aio(void)
|
||||
|
||||
__uml_exitcall(exit_aio);
|
||||
|
||||
int submit_aio(struct aio_context *aio)
|
||||
static int submit_aio_24(enum aio_type type, int io_fd, char *buf, int len,
|
||||
unsigned long long offset, struct aio_context *aio)
|
||||
{
|
||||
return (*submit_proc)(aio);
|
||||
struct aio_thread_req req = { .type = type,
|
||||
.io_fd = io_fd,
|
||||
.offset = offset,
|
||||
.buf = buf,
|
||||
.len = len,
|
||||
.aio = aio,
|
||||
};
|
||||
int err;
|
||||
|
||||
err = os_write_file(aio_req_fd_w, &req, sizeof(req));
|
||||
if(err == sizeof(req))
|
||||
err = 0;
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int submit_aio(enum aio_type type, int io_fd, char *buf, int len,
|
||||
unsigned long long offset, int reply_fd,
|
||||
struct aio_context *aio)
|
||||
{
|
||||
aio->reply_fd = reply_fd;
|
||||
if(aio_24)
|
||||
return submit_aio_24(type, io_fd, buf, len, offset, aio);
|
||||
else {
|
||||
return submit_aio_26(type, io_fd, buf, len, offset, aio);
|
||||
}
|
||||
}
|
||||
|
@ -58,9 +58,8 @@ acpi_system_read_event(struct file *file, char __user * buffer, size_t count,
|
||||
return_VALUE(-EAGAIN);
|
||||
|
||||
result = acpi_bus_receive_event(&event);
|
||||
if (result) {
|
||||
return_VALUE(-EIO);
|
||||
}
|
||||
if (result)
|
||||
return_VALUE(result);
|
||||
|
||||
chars_remaining = sprintf(str, "%s %s %08x %08x\n",
|
||||
event.device_class ? event.
|
||||
|
@ -96,7 +96,7 @@ struct acpi_find_pci_root {
|
||||
static acpi_status
|
||||
do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
|
||||
{
|
||||
int *busnr = (int *)data;
|
||||
unsigned long *busnr = (unsigned long *)data;
|
||||
struct acpi_resource_address64 address;
|
||||
|
||||
if (resource->id != ACPI_RSTYPE_ADDRESS16 &&
|
||||
@ -115,13 +115,13 @@ do_root_bridge_busnr_callback(struct acpi_resource *resource, void *data)
|
||||
static int get_root_bridge_busnr(acpi_handle handle)
|
||||
{
|
||||
acpi_status status;
|
||||
int bus, bbn;
|
||||
unsigned long bus, bbn;
|
||||
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
|
||||
|
||||
acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
|
||||
|
||||
status = acpi_evaluate_integer(handle, METHOD_NAME__BBN, NULL,
|
||||
(unsigned long *)&bbn);
|
||||
&bbn);
|
||||
if (status == AE_NOT_FOUND) {
|
||||
/* Assume bus = 0 */
|
||||
printk(KERN_INFO PREFIX
|
||||
@ -153,7 +153,7 @@ static int get_root_bridge_busnr(acpi_handle handle)
|
||||
}
|
||||
exit:
|
||||
acpi_os_free(buffer.pointer);
|
||||
return bbn;
|
||||
return (int)bbn;
|
||||
}
|
||||
|
||||
static acpi_status
|
||||
|
3
drivers/char/.gitignore
vendored
Normal file
3
drivers/char/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
consolemap_deftbl.c
|
||||
defkeymap.c
|
||||
|
@ -148,7 +148,8 @@ static __inline__ struct page *drm_do_vm_shm_nopage(struct vm_area_struct *vma,
|
||||
|
||||
offset = address - vma->vm_start;
|
||||
i = (unsigned long)map->handle + offset;
|
||||
page = vmalloc_to_page((void *)i);
|
||||
page = (map->type == _DRM_CONSISTENT) ?
|
||||
virt_to_page((void *)i) : vmalloc_to_page((void *)i);
|
||||
if (!page)
|
||||
return NOPAGE_OOM;
|
||||
get_page(page);
|
||||
|
@ -437,7 +437,7 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
|
||||
drm_mga_dma_bootstrap_t * dma_bs)
|
||||
{
|
||||
drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
|
||||
const unsigned int warp_size = mga_warp_microcode_size(dev_priv);
|
||||
unsigned int warp_size = mga_warp_microcode_size(dev_priv);
|
||||
int err;
|
||||
unsigned offset;
|
||||
const unsigned secondary_size = dma_bs->secondary_bin_count
|
||||
@ -499,6 +499,12 @@ static int mga_do_agp_dma_bootstrap(drm_device_t * dev,
|
||||
return err;
|
||||
}
|
||||
|
||||
/* Make drm_addbufs happy by not trying to create a mapping for less
|
||||
* than a page.
|
||||
*/
|
||||
if (warp_size < PAGE_SIZE)
|
||||
warp_size = PAGE_SIZE;
|
||||
|
||||
offset = 0;
|
||||
err = drm_addmap( dev, offset, warp_size,
|
||||
_DRM_AGP, _DRM_READ_ONLY, & dev_priv->warp );
|
||||
@ -587,7 +593,7 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
|
||||
drm_mga_dma_bootstrap_t * dma_bs)
|
||||
{
|
||||
drm_mga_private_t * const dev_priv = (drm_mga_private_t *) dev->dev_private;
|
||||
const unsigned int warp_size = mga_warp_microcode_size(dev_priv);
|
||||
unsigned int warp_size = mga_warp_microcode_size(dev_priv);
|
||||
unsigned int primary_size;
|
||||
unsigned int bin_count;
|
||||
int err;
|
||||
@ -599,6 +605,12 @@ static int mga_do_pci_dma_bootstrap(drm_device_t * dev,
|
||||
return DRM_ERR(EFAULT);
|
||||
}
|
||||
|
||||
/* Make drm_addbufs happy by not trying to create a mapping for less
|
||||
* than a page.
|
||||
*/
|
||||
if (warp_size < PAGE_SIZE)
|
||||
warp_size = PAGE_SIZE;
|
||||
|
||||
/* The proper alignment is 0x100 for this mapping */
|
||||
err = drm_addmap(dev, 0, warp_size, _DRM_CONSISTENT,
|
||||
_DRM_READ_ONLY, &dev_priv->warp);
|
||||
@ -812,6 +824,10 @@ static int mga_do_init_dma( drm_device_t *dev, drm_mga_init_t *init )
|
||||
}
|
||||
|
||||
if (! dev_priv->used_new_dma_init) {
|
||||
|
||||
dev_priv->dma_access = MGA_PAGPXFER;
|
||||
dev_priv->wagp_enable = MGA_WAGP_ENABLE;
|
||||
|
||||
dev_priv->status = drm_core_findmap(dev, init->status_offset);
|
||||
if (!dev_priv->status) {
|
||||
DRM_ERROR("failed to find status page!\n");
|
||||
@ -928,7 +944,7 @@ static int mga_do_cleanup_dma( drm_device_t *dev )
|
||||
drm_mga_private_t *dev_priv = dev->dev_private;
|
||||
|
||||
if ((dev_priv->warp != NULL)
|
||||
&& (dev_priv->mmio->type != _DRM_CONSISTENT))
|
||||
&& (dev_priv->warp->type != _DRM_CONSISTENT))
|
||||
drm_core_ioremapfree(dev_priv->warp, dev);
|
||||
|
||||
if ((dev_priv->primary != NULL)
|
||||
|
@ -227,7 +227,7 @@ static inline u32 _MGA_READ(u32 *addr)
|
||||
#define MGA_EMIT_STATE( dev_priv, dirty ) \
|
||||
do { \
|
||||
if ( (dirty) & ~MGA_UPLOAD_CLIPRECTS ) { \
|
||||
if ( dev_priv->chipset == MGA_CARD_TYPE_G400 ) { \
|
||||
if ( dev_priv->chipset >= MGA_CARD_TYPE_G400 ) { \
|
||||
mga_g400_emit_state( dev_priv ); \
|
||||
} else { \
|
||||
mga_g200_emit_state( dev_priv ); \
|
||||
|
@ -53,7 +53,7 @@ static void mga_emit_clip_rect( drm_mga_private_t *dev_priv,
|
||||
|
||||
/* Force reset of DWGCTL on G400 (eliminates clip disable bit).
|
||||
*/
|
||||
if (dev_priv->chipset == MGA_CARD_TYPE_G400) {
|
||||
if (dev_priv->chipset >= MGA_CARD_TYPE_G400) {
|
||||
DMA_BLOCK(MGA_DWGCTL, ctx->dwgctl,
|
||||
MGA_LEN + MGA_EXEC, 0x80000000,
|
||||
MGA_DWGCTL, ctx->dwgctl,
|
||||
|
@ -830,6 +830,9 @@ static int __init mbcs_init(void)
|
||||
{
|
||||
int rv;
|
||||
|
||||
if (!ia64_platform_is("sn2"))
|
||||
return -ENODEV;
|
||||
|
||||
// Put driver into chrdevs[]. Get major number.
|
||||
rv = register_chrdev(mbcs_major, DEVICE_NAME, &mbcs_ops);
|
||||
if (rv < 0) {
|
||||
|
@ -695,7 +695,7 @@ static void receive_char(struct r3964_info *pInfo, const unsigned char c)
|
||||
{
|
||||
TRACE_PE("IDLE - got STX but no space in rx_queue!");
|
||||
pInfo->state=R3964_WAIT_FOR_RX_BUF;
|
||||
mod_timer(&pInfo->tmr, R3964_TO_NO_BUF);
|
||||
mod_timer(&pInfo->tmr, jiffies + R3964_TO_NO_BUF);
|
||||
break;
|
||||
}
|
||||
start_receiving:
|
||||
@ -705,7 +705,7 @@ start_receiving:
|
||||
pInfo->last_rx = 0;
|
||||
pInfo->flags &= ~R3964_ERROR;
|
||||
pInfo->state=R3964_RECEIVING;
|
||||
mod_timer(&pInfo->tmr, R3964_TO_ZVZ);
|
||||
mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
|
||||
pInfo->nRetry = 0;
|
||||
put_char(pInfo, DLE);
|
||||
flush(pInfo);
|
||||
@ -732,7 +732,7 @@ start_receiving:
|
||||
if(pInfo->flags & R3964_BCC)
|
||||
{
|
||||
pInfo->state = R3964_WAIT_FOR_BCC;
|
||||
mod_timer(&pInfo->tmr, R3964_TO_ZVZ);
|
||||
mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -744,7 +744,7 @@ start_receiving:
|
||||
pInfo->last_rx = c;
|
||||
char_to_buf:
|
||||
pInfo->rx_buf[pInfo->rx_position++] = c;
|
||||
mod_timer(&pInfo->tmr, R3964_TO_ZVZ);
|
||||
mod_timer(&pInfo->tmr, jiffies + R3964_TO_ZVZ);
|
||||
}
|
||||
}
|
||||
/* else: overflow-msg? BUF_SIZE>MTU; should not happen? */
|
||||
|
@ -2283,8 +2283,9 @@ static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci,
|
||||
{
|
||||
struct ohci1394_iso_tasklet *t;
|
||||
unsigned long mask;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&ohci->iso_tasklet_list_lock);
|
||||
spin_lock_irqsave(&ohci->iso_tasklet_list_lock, flags);
|
||||
|
||||
list_for_each_entry(t, &ohci->iso_tasklet_list, link) {
|
||||
mask = 1 << t->context;
|
||||
@ -2295,8 +2296,7 @@ static void ohci_schedule_iso_tasklets(struct ti_ohci *ohci,
|
||||
tasklet_schedule(&t->tasklet);
|
||||
}
|
||||
|
||||
spin_unlock(&ohci->iso_tasklet_list_lock);
|
||||
|
||||
spin_unlock_irqrestore(&ohci->iso_tasklet_list_lock, flags);
|
||||
}
|
||||
|
||||
static irqreturn_t ohci_irq_handler(int irq, void *dev_id,
|
||||
|
@ -412,6 +412,7 @@ static void fcp_request(struct hpsb_host *host, int nodeid, int direction,
|
||||
static ssize_t raw1394_read(struct file *file, char __user * buffer,
|
||||
size_t count, loff_t * offset_is_ignored)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct file_info *fi = (struct file_info *)file->private_data;
|
||||
struct list_head *lh;
|
||||
struct pending_request *req;
|
||||
@ -435,10 +436,10 @@ static ssize_t raw1394_read(struct file *file, char __user * buffer,
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
lh = fi->req_complete.next;
|
||||
list_del(lh);
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
req = list_entry(lh, struct pending_request, list);
|
||||
|
||||
@ -486,6 +487,7 @@ static int state_opened(struct file_info *fi, struct pending_request *req)
|
||||
|
||||
static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct host_info *hi;
|
||||
struct raw1394_khost_list *khl;
|
||||
|
||||
@ -499,7 +501,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
|
||||
switch (req->req.type) {
|
||||
case RAW1394_REQ_LIST_CARDS:
|
||||
spin_lock_irq(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
khl = kmalloc(sizeof(struct raw1394_khost_list) * host_count,
|
||||
SLAB_ATOMIC);
|
||||
|
||||
@ -513,7 +515,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
khl++;
|
||||
}
|
||||
}
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
|
||||
if (khl != NULL) {
|
||||
req->req.error = RAW1394_ERROR_NONE;
|
||||
@ -528,7 +530,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
break;
|
||||
|
||||
case RAW1394_REQ_SET_CARD:
|
||||
spin_lock_irq(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
if (req->req.misc < host_count) {
|
||||
list_for_each_entry(hi, &host_info_list, list) {
|
||||
if (!req->req.misc--)
|
||||
@ -550,7 +552,7 @@ static int state_initialized(struct file_info *fi, struct pending_request *req)
|
||||
} else {
|
||||
req->req.error = RAW1394_ERROR_INVALID_ARG;
|
||||
}
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
|
||||
req->req.length = 0;
|
||||
break;
|
||||
@ -569,7 +571,6 @@ static void handle_iso_listen(struct file_info *fi, struct pending_request *req)
|
||||
{
|
||||
int channel = req->req.misc;
|
||||
|
||||
spin_lock_irq(&host_info_lock);
|
||||
if ((channel > 63) || (channel < -64)) {
|
||||
req->req.error = RAW1394_ERROR_INVALID_ARG;
|
||||
} else if (channel >= 0) {
|
||||
@ -601,7 +602,6 @@ static void handle_iso_listen(struct file_info *fi, struct pending_request *req)
|
||||
|
||||
req->req.length = 0;
|
||||
queue_complete_req(req);
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
}
|
||||
|
||||
static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
|
||||
@ -627,6 +627,7 @@ static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
|
||||
static int handle_async_request(struct file_info *fi,
|
||||
struct pending_request *req, int node)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct hpsb_packet *packet = NULL;
|
||||
u64 addr = req->req.address & 0xffffffffffffULL;
|
||||
|
||||
@ -761,9 +762,9 @@ static int handle_async_request(struct file_info *fi,
|
||||
hpsb_set_packet_complete_task(packet,
|
||||
(void (*)(void *))queue_complete_cb, req);
|
||||
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
list_add_tail(&req->list, &fi->req_pending);
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
packet->generation = req->req.generation;
|
||||
|
||||
@ -779,6 +780,7 @@ static int handle_async_request(struct file_info *fi,
|
||||
static int handle_iso_send(struct file_info *fi, struct pending_request *req,
|
||||
int channel)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct hpsb_packet *packet;
|
||||
|
||||
packet = hpsb_make_isopacket(fi->host, req->req.length, channel & 0x3f,
|
||||
@ -804,9 +806,9 @@ static int handle_iso_send(struct file_info *fi, struct pending_request *req,
|
||||
(void (*)(void *))queue_complete_req,
|
||||
req);
|
||||
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
list_add_tail(&req->list, &fi->req_pending);
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
/* Update the generation of the packet just before sending. */
|
||||
packet->generation = req->req.generation;
|
||||
@ -821,6 +823,7 @@ static int handle_iso_send(struct file_info *fi, struct pending_request *req,
|
||||
|
||||
static int handle_async_send(struct file_info *fi, struct pending_request *req)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct hpsb_packet *packet;
|
||||
int header_length = req->req.misc & 0xffff;
|
||||
int expect_response = req->req.misc >> 16;
|
||||
@ -867,9 +870,9 @@ static int handle_async_send(struct file_info *fi, struct pending_request *req)
|
||||
hpsb_set_packet_complete_task(packet,
|
||||
(void (*)(void *))queue_complete_cb, req);
|
||||
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
list_add_tail(&req->list, &fi->req_pending);
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
/* Update the generation of the packet just before sending. */
|
||||
packet->generation = req->req.generation;
|
||||
@ -885,6 +888,7 @@ static int handle_async_send(struct file_info *fi, struct pending_request *req)
|
||||
static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
u64 addr, size_t length, u16 flags)
|
||||
{
|
||||
unsigned long irqflags;
|
||||
struct pending_request *req;
|
||||
struct host_info *hi;
|
||||
struct file_info *fi = NULL;
|
||||
@ -899,7 +903,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
"addr: %4.4x %8.8x length: %Zu", nodeid,
|
||||
(u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF),
|
||||
length);
|
||||
spin_lock(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, irqflags);
|
||||
hi = find_host_info(host); /* search address-entry */
|
||||
if (hi != NULL) {
|
||||
list_for_each_entry(fi, &hi->file_info_list, list) {
|
||||
@ -924,7 +928,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
if (!found) {
|
||||
printk(KERN_ERR "raw1394: arm_read FAILED addr_entry not found"
|
||||
" -> rcode_address_error\n");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_ADDRESS_ERROR);
|
||||
} else {
|
||||
DBGMSG("arm_read addr_entry FOUND");
|
||||
@ -954,7 +958,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
req = __alloc_pending_request(SLAB_ATOMIC);
|
||||
if (!req) {
|
||||
DBGMSG("arm_read -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
}
|
||||
@ -974,7 +978,7 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
if (!(req->data)) {
|
||||
free_pending_request(req);
|
||||
DBGMSG("arm_read -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
}
|
||||
@ -1031,13 +1035,14 @@ static int arm_read(struct hpsb_host *host, int nodeid, quadlet_t * buffer,
|
||||
sizeof(struct arm_request));
|
||||
queue_complete_req(req);
|
||||
}
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (rcode);
|
||||
}
|
||||
|
||||
static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
quadlet_t * data, u64 addr, size_t length, u16 flags)
|
||||
{
|
||||
unsigned long irqflags;
|
||||
struct pending_request *req;
|
||||
struct host_info *hi;
|
||||
struct file_info *fi = NULL;
|
||||
@ -1052,7 +1057,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
"addr: %4.4x %8.8x length: %Zu", nodeid,
|
||||
(u16) ((addr >> 32) & 0xFFFF), (u32) (addr & 0xFFFFFFFF),
|
||||
length);
|
||||
spin_lock(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, irqflags);
|
||||
hi = find_host_info(host); /* search address-entry */
|
||||
if (hi != NULL) {
|
||||
list_for_each_entry(fi, &hi->file_info_list, list) {
|
||||
@ -1077,7 +1082,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
if (!found) {
|
||||
printk(KERN_ERR "raw1394: arm_write FAILED addr_entry not found"
|
||||
" -> rcode_address_error\n");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_ADDRESS_ERROR);
|
||||
} else {
|
||||
DBGMSG("arm_write addr_entry FOUND");
|
||||
@ -1106,7 +1111,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
req = __alloc_pending_request(SLAB_ATOMIC);
|
||||
if (!req) {
|
||||
DBGMSG("arm_write -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request my be retried */
|
||||
}
|
||||
@ -1118,7 +1123,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
if (!(req->data)) {
|
||||
free_pending_request(req);
|
||||
DBGMSG("arm_write -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
}
|
||||
@ -1165,7 +1170,7 @@ static int arm_write(struct hpsb_host *host, int nodeid, int destid,
|
||||
sizeof(struct arm_request));
|
||||
queue_complete_req(req);
|
||||
}
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (rcode);
|
||||
}
|
||||
|
||||
@ -1173,6 +1178,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode,
|
||||
u16 flags)
|
||||
{
|
||||
unsigned long irqflags;
|
||||
struct pending_request *req;
|
||||
struct host_info *hi;
|
||||
struct file_info *fi = NULL;
|
||||
@ -1198,7 +1204,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
(u32) (addr & 0xFFFFFFFF), ext_tcode & 0xFF,
|
||||
be32_to_cpu(data), be32_to_cpu(arg));
|
||||
}
|
||||
spin_lock(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, irqflags);
|
||||
hi = find_host_info(host); /* search address-entry */
|
||||
if (hi != NULL) {
|
||||
list_for_each_entry(fi, &hi->file_info_list, list) {
|
||||
@ -1224,7 +1230,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
if (!found) {
|
||||
printk(KERN_ERR "raw1394: arm_lock FAILED addr_entry not found"
|
||||
" -> rcode_address_error\n");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_ADDRESS_ERROR);
|
||||
} else {
|
||||
DBGMSG("arm_lock addr_entry FOUND");
|
||||
@ -1307,7 +1313,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
req = __alloc_pending_request(SLAB_ATOMIC);
|
||||
if (!req) {
|
||||
DBGMSG("arm_lock -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
}
|
||||
@ -1316,7 +1322,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
if (!(req->data)) {
|
||||
free_pending_request(req);
|
||||
DBGMSG("arm_lock -> rcode_conflict_error");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
}
|
||||
@ -1382,7 +1388,7 @@ static int arm_lock(struct hpsb_host *host, int nodeid, quadlet_t * store,
|
||||
sizeof(struct arm_response) + 2 * sizeof(*store));
|
||||
queue_complete_req(req);
|
||||
}
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (rcode);
|
||||
}
|
||||
|
||||
@ -1390,6 +1396,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
u64 addr, octlet_t data, octlet_t arg, int ext_tcode,
|
||||
u16 flags)
|
||||
{
|
||||
unsigned long irqflags;
|
||||
struct pending_request *req;
|
||||
struct host_info *hi;
|
||||
struct file_info *fi = NULL;
|
||||
@ -1422,7 +1429,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
(u32) ((be64_to_cpu(arg) >> 32) & 0xFFFFFFFF),
|
||||
(u32) (be64_to_cpu(arg) & 0xFFFFFFFF));
|
||||
}
|
||||
spin_lock(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, irqflags);
|
||||
hi = find_host_info(host); /* search addressentry in file_info's for host */
|
||||
if (hi != NULL) {
|
||||
list_for_each_entry(fi, &hi->file_info_list, list) {
|
||||
@ -1449,7 +1456,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
printk(KERN_ERR
|
||||
"raw1394: arm_lock64 FAILED addr_entry not found"
|
||||
" -> rcode_address_error\n");
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (RCODE_ADDRESS_ERROR);
|
||||
} else {
|
||||
DBGMSG("arm_lock64 addr_entry FOUND");
|
||||
@ -1533,7 +1540,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
DBGMSG("arm_lock64 -> entering notification-section");
|
||||
req = __alloc_pending_request(SLAB_ATOMIC);
|
||||
if (!req) {
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
DBGMSG("arm_lock64 -> rcode_conflict_error");
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
@ -1542,7 +1549,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
req->data = kmalloc(size, SLAB_ATOMIC);
|
||||
if (!(req->data)) {
|
||||
free_pending_request(req);
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
DBGMSG("arm_lock64 -> rcode_conflict_error");
|
||||
return (RCODE_CONFLICT_ERROR); /* A resource conflict was detected.
|
||||
The request may be retried */
|
||||
@ -1609,7 +1616,7 @@ static int arm_lock64(struct hpsb_host *host, int nodeid, octlet_t * store,
|
||||
sizeof(struct arm_response) + 2 * sizeof(*store));
|
||||
queue_complete_req(req);
|
||||
}
|
||||
spin_unlock(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, irqflags);
|
||||
return (rcode);
|
||||
}
|
||||
|
||||
@ -1980,6 +1987,7 @@ static int write_phypacket(struct file_info *fi, struct pending_request *req)
|
||||
struct hpsb_packet *packet = NULL;
|
||||
int retval = 0;
|
||||
quadlet_t data;
|
||||
unsigned long flags;
|
||||
|
||||
data = be32_to_cpu((u32) req->req.sendb);
|
||||
DBGMSG("write_phypacket called - quadlet 0x%8.8x ", data);
|
||||
@ -1990,9 +1998,9 @@ static int write_phypacket(struct file_info *fi, struct pending_request *req)
|
||||
req->packet = packet;
|
||||
hpsb_set_packet_complete_task(packet,
|
||||
(void (*)(void *))queue_complete_cb, req);
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
list_add_tail(&req->list, &fi->req_pending);
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
packet->generation = req->req.generation;
|
||||
retval = hpsb_send_packet(packet);
|
||||
DBGMSG("write_phypacket send_packet called => retval: %d ", retval);
|
||||
@ -2659,14 +2667,15 @@ static unsigned int raw1394_poll(struct file *file, poll_table * pt)
|
||||
{
|
||||
struct file_info *fi = file->private_data;
|
||||
unsigned int mask = POLLOUT | POLLWRNORM;
|
||||
unsigned long flags;
|
||||
|
||||
poll_wait(file, &fi->poll_wait_complete, pt);
|
||||
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
if (!list_empty(&fi->req_complete)) {
|
||||
mask |= POLLIN | POLLRDNORM;
|
||||
}
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
return mask;
|
||||
}
|
||||
@ -2710,6 +2719,7 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
struct arm_addr *arm_addr = NULL;
|
||||
int another_host;
|
||||
int csr_mod = 0;
|
||||
unsigned long flags;
|
||||
|
||||
if (fi->iso_state != RAW1394_ISO_INACTIVE)
|
||||
raw1394_iso_shutdown(fi);
|
||||
@ -2720,13 +2730,11 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
}
|
||||
}
|
||||
|
||||
spin_lock_irq(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
fi->listen_channels = 0;
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
|
||||
fail = 0;
|
||||
/* set address-entries invalid */
|
||||
spin_lock_irq(&host_info_lock);
|
||||
|
||||
while (!list_empty(&fi->addr_list)) {
|
||||
another_host = 0;
|
||||
@ -2777,14 +2785,14 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
vfree(addr->addr_space_buffer);
|
||||
kfree(addr);
|
||||
} /* while */
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
if (fail > 0) {
|
||||
printk(KERN_ERR "raw1394: during addr_list-release "
|
||||
"error(s) occurred \n");
|
||||
}
|
||||
|
||||
while (!done) {
|
||||
spin_lock_irq(&fi->reqlists_lock);
|
||||
spin_lock_irqsave(&fi->reqlists_lock, flags);
|
||||
|
||||
while (!list_empty(&fi->req_complete)) {
|
||||
lh = fi->req_complete.next;
|
||||
@ -2798,7 +2806,7 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
if (list_empty(&fi->req_pending))
|
||||
done = 1;
|
||||
|
||||
spin_unlock_irq(&fi->reqlists_lock);
|
||||
spin_unlock_irqrestore(&fi->reqlists_lock, flags);
|
||||
|
||||
if (!done)
|
||||
down_interruptible(&fi->complete_sem);
|
||||
@ -2828,9 +2836,9 @@ static int raw1394_release(struct inode *inode, struct file *file)
|
||||
fi->host->id);
|
||||
|
||||
if (fi->state == connected) {
|
||||
spin_lock_irq(&host_info_lock);
|
||||
spin_lock_irqsave(&host_info_lock, flags);
|
||||
list_del(&fi->list);
|
||||
spin_unlock_irq(&host_info_lock);
|
||||
spin_unlock_irqrestore(&host_info_lock, flags);
|
||||
|
||||
put_device(&fi->host->device);
|
||||
}
|
||||
|
@ -93,7 +93,7 @@ config KEYBOARD_LKKBD
|
||||
|
||||
config KEYBOARD_LOCOMO
|
||||
tristate "LoCoMo Keyboard Support"
|
||||
depends on SHARP_LOCOMO
|
||||
depends on SHARP_LOCOMO && INPUT_KEYBOARD
|
||||
help
|
||||
Say Y here if you are running Linux on a Sharp Zaurus Collie or Poodle based PDA
|
||||
|
||||
|
@ -53,7 +53,7 @@ static unsigned char spitzkbd_keycode[NR_SCANCODES] = {
|
||||
KEY_LEFTCTRL, KEY_1, KEY_3, KEY_5, KEY_6, KEY_7, KEY_9, KEY_0, KEY_BACKSPACE, SPITZ_KEY_EXOK, SPITZ_KEY_EXCANCEL, 0, 0, 0, 0, 0, /* 1-16 */
|
||||
0, KEY_2, KEY_4, KEY_R, KEY_Y, KEY_8, KEY_I, KEY_O, KEY_P, SPITZ_KEY_EXJOGDOWN, SPITZ_KEY_EXJOGUP, 0, 0, 0, 0, 0, /* 17-32 */
|
||||
KEY_TAB, KEY_Q, KEY_E, KEY_T, KEY_G, KEY_U, KEY_J, KEY_K, 0, 0, 0, 0, 0, 0, 0, 0, /* 33-48 */
|
||||
SPITZ_KEY_CALENDER, KEY_W, KEY_S, KEY_F, KEY_V, KEY_H, KEY_M, KEY_L, 0, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, /* 49-64 */
|
||||
SPITZ_KEY_CALENDER, KEY_W, KEY_S, KEY_F, KEY_V, KEY_H, KEY_M, KEY_L, 0, KEY_RIGHTSHIFT, 0, 0, 0, 0, 0, 0, /* 49-64 */
|
||||
SPITZ_KEY_ADDRESS, KEY_A, KEY_D, KEY_C, KEY_B, KEY_N, KEY_DOT, 0, KEY_ENTER, KEY_LEFTSHIFT, 0, 0, 0, 0, 0, 0, /* 65-80 */
|
||||
SPITZ_KEY_MAIL, KEY_Z, KEY_X, KEY_MINUS, KEY_SPACE, KEY_COMMA, 0, KEY_UP, 0, 0, SPITZ_KEY_FN, 0, 0, 0, 0, 0, /* 81-96 */
|
||||
KEY_SYSRQ, SPITZ_KEY_JAP1, SPITZ_KEY_JAP2, SPITZ_KEY_CANCEL, SPITZ_KEY_OK, SPITZ_KEY_MENU, KEY_LEFT, KEY_DOWN, KEY_RIGHT, 0, 0, 0, 0, 0, 0, 0 /* 97-112 */
|
||||
|
@ -90,11 +90,11 @@ static inline int uinput_request_reserve_slot(struct uinput_device *udev, struct
|
||||
|
||||
static void uinput_request_done(struct uinput_device *udev, struct uinput_request *request)
|
||||
{
|
||||
complete(&request->done);
|
||||
|
||||
/* Mark slot as available */
|
||||
udev->requests[request->id] = NULL;
|
||||
wake_up_interruptible(&udev->requests_waitq);
|
||||
|
||||
complete(&request->done);
|
||||
}
|
||||
|
||||
static int uinput_request_submit(struct input_dev *dev, struct uinput_request *request)
|
||||
|
@ -3063,6 +3063,7 @@ static int md_thread(void * arg)
|
||||
* many dirty RAID5 blocks.
|
||||
*/
|
||||
|
||||
allow_signal(SIGKILL);
|
||||
complete(thread->event);
|
||||
while (!kthread_should_stop()) {
|
||||
void (*run)(mddev_t *);
|
||||
@ -3111,7 +3112,7 @@ mdk_thread_t *md_register_thread(void (*run) (mddev_t *), mddev_t *mddev,
|
||||
thread->mddev = mddev;
|
||||
thread->name = name;
|
||||
thread->timeout = MAX_SCHEDULE_TIMEOUT;
|
||||
thread->tsk = kthread_run(md_thread, thread, mdname(thread->mddev));
|
||||
thread->tsk = kthread_run(md_thread, thread, name, mdname(thread->mddev));
|
||||
if (IS_ERR(thread->tsk)) {
|
||||
kfree(thread);
|
||||
return NULL;
|
||||
@ -3569,6 +3570,7 @@ static void md_do_sync(mddev_t *mddev)
|
||||
try_again:
|
||||
if (signal_pending(current)) {
|
||||
flush_signals(current);
|
||||
set_bit(MD_RECOVERY_INTR, &mddev->recovery);
|
||||
goto skip;
|
||||
}
|
||||
ITERATE_MDDEV(mddev2,tmp) {
|
||||
|
@ -543,7 +543,7 @@ static int cadet_probe(void)
|
||||
|
||||
for(i=0;i<8;i++) {
|
||||
io=iovals[i];
|
||||
if(request_region(io,2, "cadet-probe")>=0) {
|
||||
if (request_region(io, 2, "cadet-probe")) {
|
||||
cadet_setfreq(1410);
|
||||
if(cadet_getfreq()==1410) {
|
||||
release_region(io, 2);
|
||||
|
@ -203,7 +203,7 @@ static const unsigned short init_ntsc[] = {
|
||||
0x8c, 640, /* Horizontal length */
|
||||
0x8d, 640, /* Number of pixels */
|
||||
0x8f, 0xc00, /* Disable window 2 */
|
||||
0xf0, 0x173, /* 13.5 MHz transport, Forced
|
||||
0xf0, 0x73, /* 13.5 MHz transport, Forced
|
||||
* mode, latch windows */
|
||||
0xf2, 0x13, /* NTSC M, composite input */
|
||||
0xe7, 0x1e1, /* Enable vertical standard
|
||||
@ -212,38 +212,36 @@ static const unsigned short init_ntsc[] = {
|
||||
|
||||
static const unsigned short init_pal[] = {
|
||||
0x88, 23, /* Window 1 vertical begin */
|
||||
0x89, 288 + 16, /* Vertical lines in (16 lines
|
||||
0x89, 288, /* Vertical lines in (16 lines
|
||||
* skipped by the VFE) */
|
||||
0x8a, 288 + 16, /* Vertical lines out (16 lines
|
||||
0x8a, 288, /* Vertical lines out (16 lines
|
||||
* skipped by the VFE) */
|
||||
0x8b, 16, /* Horizontal begin */
|
||||
0x8c, 768, /* Horizontal length */
|
||||
0x8d, 784, /* Number of pixels
|
||||
* Must be >= Horizontal begin + Horizontal length */
|
||||
0x8f, 0xc00, /* Disable window 2 */
|
||||
0xf0, 0x177, /* 13.5 MHz transport, Forced
|
||||
0xf0, 0x77, /* 13.5 MHz transport, Forced
|
||||
* mode, latch windows */
|
||||
0xf2, 0x3d1, /* PAL B,G,H,I, composite input */
|
||||
0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines
|
||||
* change to 0x241 for 288 lines */
|
||||
0xe7, 0x241, /* PAL/SECAM set to 288 lines */
|
||||
};
|
||||
|
||||
static const unsigned short init_secam[] = {
|
||||
0x88, 23 - 16, /* Window 1 vertical begin */
|
||||
0x89, 288 + 16, /* Vertical lines in (16 lines
|
||||
0x88, 23, /* Window 1 vertical begin */
|
||||
0x89, 288, /* Vertical lines in (16 lines
|
||||
* skipped by the VFE) */
|
||||
0x8a, 288 + 16, /* Vertical lines out (16 lines
|
||||
0x8a, 288, /* Vertical lines out (16 lines
|
||||
* skipped by the VFE) */
|
||||
0x8b, 16, /* Horizontal begin */
|
||||
0x8c, 768, /* Horizontal length */
|
||||
0x8d, 784, /* Number of pixels
|
||||
* Must be >= Horizontal begin + Horizontal length */
|
||||
0x8f, 0xc00, /* Disable window 2 */
|
||||
0xf0, 0x177, /* 13.5 MHz transport, Forced
|
||||
0xf0, 0x77, /* 13.5 MHz transport, Forced
|
||||
* mode, latch windows */
|
||||
0xf2, 0x3d5, /* SECAM, composite input */
|
||||
0xe7, 0x261, /* PAL/SECAM set to 288 + 16 lines
|
||||
* change to 0x241 for 288 lines */
|
||||
0xe7, 0x241, /* PAL/SECAM set to 288 lines */
|
||||
};
|
||||
|
||||
static const unsigned char init_common[] = {
|
||||
@ -410,6 +408,12 @@ vpx3220_command (struct i2c_client *client,
|
||||
case DECODER_SET_NORM:
|
||||
{
|
||||
int *iarg = arg, data;
|
||||
int temp_input;
|
||||
|
||||
/* Here we back up the input selection because it gets
|
||||
overwritten when we fill the registers with the
|
||||
choosen video norm */
|
||||
temp_input = vpx3220_fp_read(client, 0xf2);
|
||||
|
||||
dprintk(1, KERN_DEBUG "%s: DECODER_SET_NORM %d\n",
|
||||
I2C_NAME(client), *iarg);
|
||||
@ -449,6 +453,10 @@ vpx3220_command (struct i2c_client *client,
|
||||
|
||||
}
|
||||
decoder->norm = *iarg;
|
||||
|
||||
/* And here we set the backed up video input again */
|
||||
vpx3220_fp_write(client, 0xf2, temp_input | 0x0010);
|
||||
udelay(10);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -257,8 +257,8 @@ static void mptsas_print_device_pg0(SasDevicePage0_t *pg0)
|
||||
printk("SAS Address=0x%llX\n", le64_to_cpu(sas_address));
|
||||
printk("Target ID=0x%X\n", pg0->TargetID);
|
||||
printk("Bus=0x%X\n", pg0->Bus);
|
||||
printk("PhyNum=0x%X\n", pg0->PhyNum);
|
||||
printk("AccessStatus=0x%X\n", le16_to_cpu(pg0->AccessStatus));
|
||||
printk("Parent Phy Num=0x%X\n", pg0->PhyNum);
|
||||
printk("Access Status=0x%X\n", le16_to_cpu(pg0->AccessStatus));
|
||||
printk("Device Info=0x%X\n", le32_to_cpu(pg0->DeviceInfo));
|
||||
printk("Flags=0x%X\n", le16_to_cpu(pg0->Flags));
|
||||
printk("Physical Port=0x%X\n", pg0->PhysicalPort);
|
||||
@ -270,7 +270,7 @@ static void mptsas_print_expander_pg1(SasExpanderPage1_t *pg1)
|
||||
printk("---- SAS EXPANDER PAGE 1 ------------\n");
|
||||
|
||||
printk("Physical Port=0x%X\n", pg1->PhysicalPort);
|
||||
printk("PHY Identifier=0x%X\n", pg1->Phy);
|
||||
printk("PHY Identifier=0x%X\n", pg1->PhyIdentifier);
|
||||
printk("Negotiated Link Rate=0x%X\n", pg1->NegotiatedLinkRate);
|
||||
printk("Programmed Link Rate=0x%X\n", pg1->ProgrammedLinkRate);
|
||||
printk("Hardware Link Rate=0x%X\n", pg1->HwLinkRate);
|
||||
@ -604,7 +604,7 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
|
||||
mptsas_print_expander_pg1(buffer);
|
||||
|
||||
/* save config data */
|
||||
phy_info->phy_id = buffer->Phy;
|
||||
phy_info->phy_id = buffer->PhyIdentifier;
|
||||
phy_info->port_id = buffer->PhysicalPort;
|
||||
phy_info->negotiated_link_rate = buffer->NegotiatedLinkRate;
|
||||
phy_info->programmed_link_rate = buffer->ProgrammedLinkRate;
|
||||
@ -825,6 +825,8 @@ mptsas_probe_hba_phys(MPT_ADAPTER *ioc, int *index)
|
||||
mptsas_sas_device_pg0(ioc, &port_info->phy_info[i].identify,
|
||||
(MPI_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE <<
|
||||
MPI_SAS_DEVICE_PGAD_FORM_SHIFT), handle);
|
||||
port_info->phy_info[i].identify.phy_id =
|
||||
port_info->phy_info[i].phy_id;
|
||||
handle = port_info->phy_info[i].identify.handle;
|
||||
|
||||
if (port_info->phy_info[i].attached.handle) {
|
||||
@ -881,6 +883,8 @@ mptsas_probe_expander_phys(MPT_ADAPTER *ioc, u32 *handle, int *index)
|
||||
(MPI_SAS_DEVICE_PGAD_FORM_HANDLE <<
|
||||
MPI_SAS_DEVICE_PGAD_FORM_SHIFT),
|
||||
port_info->phy_info[i].identify.handle);
|
||||
port_info->phy_info[i].identify.phy_id =
|
||||
port_info->phy_info[i].phy_id;
|
||||
}
|
||||
|
||||
if (port_info->phy_info[i].attached.handle) {
|
||||
|
@ -903,8 +903,8 @@ static void mdio_write(struct net_device *netdev, int addr, int reg, int data)
|
||||
|
||||
static void e100_get_defaults(struct nic *nic)
|
||||
{
|
||||
struct param_range rfds = { .min = 16, .max = 256, .count = 256 };
|
||||
struct param_range cbs = { .min = 64, .max = 256, .count = 128 };
|
||||
struct param_range rfds = { .min = 16, .max = 256, .count = 64 };
|
||||
struct param_range cbs = { .min = 64, .max = 256, .count = 64 };
|
||||
|
||||
pci_read_config_byte(nic->pdev, PCI_REVISION_ID, &nic->rev_id);
|
||||
/* MAC type is encoded as rev ID; exception: ICH is treated as 82559 */
|
||||
@ -1007,213 +1007,25 @@ static void e100_configure(struct nic *nic, struct cb *cb, struct sk_buff *skb)
|
||||
c[16], c[17], c[18], c[19], c[20], c[21], c[22], c[23]);
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
/* Micro code for 8086:1229 Rev 8 */
|
||||
/********************************************************/
|
||||
|
||||
/* Parameter values for the D101M B-step */
|
||||
#define D101M_CPUSAVER_TIMER_DWORD 78
|
||||
#define D101M_CPUSAVER_BUNDLE_DWORD 65
|
||||
#define D101M_CPUSAVER_MIN_SIZE_DWORD 126
|
||||
|
||||
#define D101M_B_RCVBUNDLE_UCODE \
|
||||
{\
|
||||
0x00550215, 0xFFFF0437, 0xFFFFFFFF, 0x06A70789, 0xFFFFFFFF, 0x0558FFFF, \
|
||||
0x000C0001, 0x00101312, 0x000C0008, 0x00380216, \
|
||||
0x0010009C, 0x00204056, 0x002380CC, 0x00380056, \
|
||||
0x0010009C, 0x00244C0B, 0x00000800, 0x00124818, \
|
||||
0x00380438, 0x00000000, 0x00140000, 0x00380555, \
|
||||
0x00308000, 0x00100662, 0x00100561, 0x000E0408, \
|
||||
0x00134861, 0x000C0002, 0x00103093, 0x00308000, \
|
||||
0x00100624, 0x00100561, 0x000E0408, 0x00100861, \
|
||||
0x000C007E, 0x00222C21, 0x000C0002, 0x00103093, \
|
||||
0x00380C7A, 0x00080000, 0x00103090, 0x00380C7A, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x0010009C, 0x00244C2D, 0x00010004, 0x00041000, \
|
||||
0x003A0437, 0x00044010, 0x0038078A, 0x00000000, \
|
||||
0x00100099, 0x00206C7A, 0x0010009C, 0x00244C48, \
|
||||
0x00130824, 0x000C0001, 0x00101213, 0x00260C75, \
|
||||
0x00041000, 0x00010004, 0x00130826, 0x000C0006, \
|
||||
0x002206A8, 0x0013C926, 0x00101313, 0x003806A8, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00080600, 0x00101B10, 0x00050004, 0x00100826, \
|
||||
0x00101210, 0x00380C34, 0x00000000, 0x00000000, \
|
||||
0x0021155B, 0x00100099, 0x00206559, 0x0010009C, \
|
||||
0x00244559, 0x00130836, 0x000C0000, 0x00220C62, \
|
||||
0x000C0001, 0x00101B13, 0x00229C0E, 0x00210C0E, \
|
||||
0x00226C0E, 0x00216C0E, 0x0022FC0E, 0x00215C0E, \
|
||||
0x00214C0E, 0x00380555, 0x00010004, 0x00041000, \
|
||||
0x00278C67, 0x00040800, 0x00018100, 0x003A0437, \
|
||||
0x00130826, 0x000C0001, 0x00220559, 0x00101313, \
|
||||
0x00380559, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00130831, 0x0010090B, 0x00124813, \
|
||||
0x000CFF80, 0x002606AB, 0x00041000, 0x00010004, \
|
||||
0x003806A8, 0x00000000, 0x00000000, 0x00000000, \
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
/* Micro code for 8086:1229 Rev 9 */
|
||||
/********************************************************/
|
||||
|
||||
/* Parameter values for the D101S */
|
||||
#define D101S_CPUSAVER_TIMER_DWORD 78
|
||||
#define D101S_CPUSAVER_BUNDLE_DWORD 67
|
||||
#define D101S_CPUSAVER_MIN_SIZE_DWORD 128
|
||||
|
||||
#define D101S_RCVBUNDLE_UCODE \
|
||||
{\
|
||||
0x00550242, 0xFFFF047E, 0xFFFFFFFF, 0x06FF0818, 0xFFFFFFFF, 0x05A6FFFF, \
|
||||
0x000C0001, 0x00101312, 0x000C0008, 0x00380243, \
|
||||
0x0010009C, 0x00204056, 0x002380D0, 0x00380056, \
|
||||
0x0010009C, 0x00244F8B, 0x00000800, 0x00124818, \
|
||||
0x0038047F, 0x00000000, 0x00140000, 0x003805A3, \
|
||||
0x00308000, 0x00100610, 0x00100561, 0x000E0408, \
|
||||
0x00134861, 0x000C0002, 0x00103093, 0x00308000, \
|
||||
0x00100624, 0x00100561, 0x000E0408, 0x00100861, \
|
||||
0x000C007E, 0x00222FA1, 0x000C0002, 0x00103093, \
|
||||
0x00380F90, 0x00080000, 0x00103090, 0x00380F90, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x0010009C, 0x00244FAD, 0x00010004, 0x00041000, \
|
||||
0x003A047E, 0x00044010, 0x00380819, 0x00000000, \
|
||||
0x00100099, 0x00206FFD, 0x0010009A, 0x0020AFFD, \
|
||||
0x0010009C, 0x00244FC8, 0x00130824, 0x000C0001, \
|
||||
0x00101213, 0x00260FF7, 0x00041000, 0x00010004, \
|
||||
0x00130826, 0x000C0006, 0x00220700, 0x0013C926, \
|
||||
0x00101313, 0x00380700, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00080600, 0x00101B10, 0x00050004, 0x00100826, \
|
||||
0x00101210, 0x00380FB6, 0x00000000, 0x00000000, \
|
||||
0x002115A9, 0x00100099, 0x002065A7, 0x0010009A, \
|
||||
0x0020A5A7, 0x0010009C, 0x002445A7, 0x00130836, \
|
||||
0x000C0000, 0x00220FE4, 0x000C0001, 0x00101B13, \
|
||||
0x00229F8E, 0x00210F8E, 0x00226F8E, 0x00216F8E, \
|
||||
0x0022FF8E, 0x00215F8E, 0x00214F8E, 0x003805A3, \
|
||||
0x00010004, 0x00041000, 0x00278FE9, 0x00040800, \
|
||||
0x00018100, 0x003A047E, 0x00130826, 0x000C0001, \
|
||||
0x002205A7, 0x00101313, 0x003805A7, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00130831, \
|
||||
0x0010090B, 0x00124813, 0x000CFF80, 0x00260703, \
|
||||
0x00041000, 0x00010004, 0x00380700 \
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
/* Micro code for the 8086:1229 Rev F/10 */
|
||||
/********************************************************/
|
||||
|
||||
/* Parameter values for the D102 E-step */
|
||||
#define D102_E_CPUSAVER_TIMER_DWORD 42
|
||||
#define D102_E_CPUSAVER_BUNDLE_DWORD 54
|
||||
#define D102_E_CPUSAVER_MIN_SIZE_DWORD 46
|
||||
|
||||
#define D102_E_RCVBUNDLE_UCODE \
|
||||
{\
|
||||
0x007D028F, 0x0E4204F9, 0x14ED0C85, 0x14FA14E9, 0x0EF70E36, 0x1FFF1FFF, \
|
||||
0x00E014B9, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00E014BD, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00E014D5, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00E014C1, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00E014C8, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00200600, 0x00E014EE, 0x00000000, 0x00000000, \
|
||||
0x0030FF80, 0x00940E46, 0x00038200, 0x00102000, \
|
||||
0x00E00E43, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00300006, 0x00E014FB, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000, \
|
||||
0x00906EFD, 0x00900EFD, 0x00E00EF8, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
0x00000000, 0x00000000, 0x00000000, 0x00000000, \
|
||||
}
|
||||
|
||||
static void e100_load_ucode(struct nic *nic, struct cb *cb, struct sk_buff *skb)
|
||||
{
|
||||
/* *INDENT-OFF* */
|
||||
static struct {
|
||||
u32 ucode[UCODE_SIZE + 1];
|
||||
u8 mac;
|
||||
u8 timer_dword;
|
||||
u8 bundle_dword;
|
||||
u8 min_size_dword;
|
||||
} ucode_opts[] = {
|
||||
{ D101M_B_RCVBUNDLE_UCODE,
|
||||
mac_82559_D101M,
|
||||
D101M_CPUSAVER_TIMER_DWORD,
|
||||
D101M_CPUSAVER_BUNDLE_DWORD,
|
||||
D101M_CPUSAVER_MIN_SIZE_DWORD },
|
||||
{ D101S_RCVBUNDLE_UCODE,
|
||||
mac_82559_D101S,
|
||||
D101S_CPUSAVER_TIMER_DWORD,
|
||||
D101S_CPUSAVER_BUNDLE_DWORD,
|
||||
D101S_CPUSAVER_MIN_SIZE_DWORD },
|
||||
{ D102_E_RCVBUNDLE_UCODE,
|
||||
mac_82551_F,
|
||||
D102_E_CPUSAVER_TIMER_DWORD,
|
||||
D102_E_CPUSAVER_BUNDLE_DWORD,
|
||||
D102_E_CPUSAVER_MIN_SIZE_DWORD },
|
||||
{ D102_E_RCVBUNDLE_UCODE,
|
||||
mac_82551_10,
|
||||
D102_E_CPUSAVER_TIMER_DWORD,
|
||||
D102_E_CPUSAVER_BUNDLE_DWORD,
|
||||
D102_E_CPUSAVER_MIN_SIZE_DWORD },
|
||||
{ {0}, 0, 0, 0, 0}
|
||||
}, *opts;
|
||||
/* *INDENT-ON* */
|
||||
int i;
|
||||
static const u32 ucode[UCODE_SIZE] = {
|
||||
/* NFS packets are misinterpreted as TCO packets and
|
||||
* incorrectly routed to the BMC over SMBus. This
|
||||
* microcode patch checks the fragmented IP bit in the
|
||||
* NFS/UDP header to distinguish between NFS and TCO. */
|
||||
0x0EF70E36, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF, 0x1FFF1FFF,
|
||||
0x1FFF1FFF, 0x00906E41, 0x00800E3C, 0x00E00E39, 0x00000000,
|
||||
0x00906EFD, 0x00900EFD, 0x00E00EF8,
|
||||
};
|
||||
|
||||
#define BUNDLESMALL 1
|
||||
#define BUNDLEMAX 50
|
||||
#define INTDELAY 15000
|
||||
|
||||
opts = ucode_opts;
|
||||
|
||||
/* do not load u-code for ICH devices */
|
||||
if (nic->flags & ich)
|
||||
return;
|
||||
|
||||
/* Search for ucode match against h/w rev_id */
|
||||
while (opts->mac) {
|
||||
if (nic->mac == opts->mac) {
|
||||
int i;
|
||||
u32 *ucode = opts->ucode;
|
||||
|
||||
/* Insert user-tunable settings */
|
||||
ucode[opts->timer_dword] &= 0xFFFF0000;
|
||||
ucode[opts->timer_dword] |=
|
||||
(u16) INTDELAY;
|
||||
ucode[opts->bundle_dword] &= 0xFFFF0000;
|
||||
ucode[opts->bundle_dword] |= (u16) BUNDLEMAX;
|
||||
ucode[opts->min_size_dword] &= 0xFFFF0000;
|
||||
ucode[opts->min_size_dword] |=
|
||||
(BUNDLESMALL) ? 0xFFFF : 0xFF80;
|
||||
|
||||
for(i = 0; i < UCODE_SIZE; i++)
|
||||
cb->u.ucode[i] = cpu_to_le32(ucode[i]);
|
||||
cb->command = cpu_to_le16(cb_ucode);
|
||||
return;
|
||||
}
|
||||
opts++;
|
||||
}
|
||||
|
||||
cb->command = cpu_to_le16(cb_nop);
|
||||
if(nic->mac == mac_82551_F || nic->mac == mac_82551_10) {
|
||||
for(i = 0; i < UCODE_SIZE; i++)
|
||||
cb->u.ucode[i] = cpu_to_le32(ucode[i]);
|
||||
cb->command = cpu_to_le16(cb_ucode);
|
||||
} else
|
||||
cb->command = cpu_to_le16(cb_nop);
|
||||
}
|
||||
|
||||
static void e100_setup_iaaddr(struct nic *nic, struct cb *cb,
|
||||
|
@ -243,7 +243,7 @@ config IPW_DEBUG
|
||||
|
||||
config AIRO
|
||||
tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
|
||||
depends on NET_RADIO && ISA && (PCI || BROKEN)
|
||||
depends on NET_RADIO && ISA_DMA_API && (PCI || BROKEN)
|
||||
---help---
|
||||
This is the standard Linux driver to support Cisco/Aironet ISA and
|
||||
PCI 802.11 wireless cards.
|
||||
|
@ -578,8 +578,9 @@ static int orinoco_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
txfid, NULL);
|
||||
if (err) {
|
||||
netif_start_queue(dev);
|
||||
printk(KERN_ERR "%s: Error %d transmitting packet\n",
|
||||
dev->name, err);
|
||||
if (net_ratelimit())
|
||||
printk(KERN_ERR "%s: Error %d transmitting packet\n",
|
||||
dev->name, err);
|
||||
stats->tx_errors++;
|
||||
goto fail;
|
||||
}
|
||||
|
4
drivers/pci/.gitignore
vendored
Normal file
4
drivers/pci/.gitignore
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
classlist.h
|
||||
devlist.h
|
||||
gen-devlist
|
||||
|
@ -1233,7 +1233,7 @@ static void __init quirk_alder_ioapic(struct pci_dev *pdev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_EESSC, quirk_alder_ioapic );
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SCSI_SATA
|
||||
#ifdef CONFIG_SCSI_SATA_INTEL_COMBINED
|
||||
static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
|
||||
{
|
||||
u8 prog, comb, tmp;
|
||||
@ -1310,7 +1310,7 @@ static void __devinit quirk_intel_ide_combined(struct pci_dev *pdev)
|
||||
request_region(0x170, 8, "libata"); /* port 1 */
|
||||
}
|
||||
DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, PCI_ANY_ID, quirk_intel_ide_combined );
|
||||
#endif /* CONFIG_SCSI_SATA */
|
||||
#endif /* CONFIG_SCSI_SATA_INTEL_COMBINED */
|
||||
|
||||
|
||||
int pcie_mch_quirk;
|
||||
|
@ -66,7 +66,7 @@ void soc_pcmcia_debug(struct soc_pcmcia_socket *skt, const char *func,
|
||||
if (pc_debug > lvl) {
|
||||
printk(KERN_DEBUG "skt%u: %s: ", skt->nr, func);
|
||||
va_start(args, fmt);
|
||||
printk(fmt, args);
|
||||
vprintk(fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
}
|
||||
@ -321,8 +321,6 @@ soc_common_pcmcia_get_socket(struct pcmcia_socket *sock, socket_state_t *state)
|
||||
* less punt all of this work and let the kernel handle the details
|
||||
* of power configuration, reset, &c. We also record the value of
|
||||
* `state' in order to regurgitate it to the PCMCIA core later.
|
||||
*
|
||||
* Returns: 0
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
|
||||
@ -407,7 +405,7 @@ soc_common_pcmcia_set_io_map(struct pcmcia_socket *sock, struct pccard_io_map *m
|
||||
* the map speed as requested, but override the address ranges
|
||||
* supplied by Card Services.
|
||||
*
|
||||
* Returns: 0 on success, -1 on error
|
||||
* Returns: 0 on success, -ERRNO on error
|
||||
*/
|
||||
static int
|
||||
soc_common_pcmcia_set_mem_map(struct pcmcia_socket *sock, struct pccard_mem_map *map)
|
||||
@ -655,8 +653,8 @@ static void soc_pcmcia_cpufreq_unregister(void)
|
||||
}
|
||||
|
||||
#else
|
||||
#define soc_pcmcia_cpufreq_register()
|
||||
#define soc_pcmcia_cpufreq_unregister()
|
||||
static int soc_pcmcia_cpufreq_register(void) { return 0; }
|
||||
static void soc_pcmcia_cpufreq_unregister(void) {}
|
||||
#endif
|
||||
|
||||
int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops, int first, int nr)
|
||||
@ -738,7 +736,7 @@ int soc_common_drv_pcmcia_probe(struct device *dev, struct pcmcia_low_level *ops
|
||||
goto out_err_5;
|
||||
}
|
||||
|
||||
if ( list_empty(&soc_pcmcia_sockets) )
|
||||
if (list_empty(&soc_pcmcia_sockets))
|
||||
soc_pcmcia_cpufreq_register();
|
||||
|
||||
list_add(&skt->node, &soc_pcmcia_sockets);
|
||||
@ -839,7 +837,7 @@ int soc_common_drv_pcmcia_remove(struct device *dev)
|
||||
release_resource(&skt->res_io);
|
||||
release_resource(&skt->res_skt);
|
||||
}
|
||||
if ( list_empty(&soc_pcmcia_sockets) )
|
||||
if (list_empty(&soc_pcmcia_sockets))
|
||||
soc_pcmcia_cpufreq_unregister();
|
||||
|
||||
up(&soc_pcmcia_sockets_lock);
|
||||
|
@ -553,6 +553,11 @@ config SCSI_SATA_VITESSE
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
config SCSI_SATA_INTEL_COMBINED
|
||||
bool
|
||||
depends on IDE=y && !BLK_DEV_IDE_SATA && (SCSI_SATA_AHCI || SCSI_ATA_PIIX)
|
||||
default y
|
||||
|
||||
config SCSI_BUSLOGIC
|
||||
tristate "BusLogic SCSI support"
|
||||
depends on (PCI || ISA || MCA) && SCSI && ISA_DMA_API
|
||||
|
@ -453,9 +453,9 @@ static int aac_eh_reset(struct scsi_cmnd* cmd)
|
||||
/*
|
||||
* We can exit If all the commands are complete
|
||||
*/
|
||||
spin_unlock_irq(host->host_lock);
|
||||
if (active == 0)
|
||||
return SUCCESS;
|
||||
spin_unlock_irq(host->host_lock);
|
||||
ssleep(1);
|
||||
spin_lock_irq(host->host_lock);
|
||||
}
|
||||
|
@ -1119,6 +1119,36 @@ static inline void update_can_queue(struct Scsi_Host *host, u_int in_ptr, u_int
|
||||
host->sg_tablesize = QLOGICPTI_MAX_SG(num_free);
|
||||
}
|
||||
|
||||
static unsigned int scsi_rbuf_get(struct scsi_cmnd *cmd, unsigned char **buf_out)
|
||||
{
|
||||
unsigned char *buf;
|
||||
unsigned int buflen;
|
||||
|
||||
if (cmd->use_sg) {
|
||||
struct scatterlist *sg;
|
||||
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
buf = kmap_atomic(sg->page, KM_IRQ0) + sg->offset;
|
||||
buflen = sg->length;
|
||||
} else {
|
||||
buf = cmd->request_buffer;
|
||||
buflen = cmd->request_bufflen;
|
||||
}
|
||||
|
||||
*buf_out = buf;
|
||||
return buflen;
|
||||
}
|
||||
|
||||
static void scsi_rbuf_put(struct scsi_cmnd *cmd, unsigned char *buf)
|
||||
{
|
||||
if (cmd->use_sg) {
|
||||
struct scatterlist *sg;
|
||||
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
kunmap_atomic(buf - sg->offset, KM_IRQ0);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Until we scan the entire bus with inquiries, go throught this fella...
|
||||
*/
|
||||
@ -1145,11 +1175,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
|
||||
int ok = host_byte(Cmnd->result) == DID_OK;
|
||||
if (Cmnd->cmnd[0] == 0x12 && ok) {
|
||||
unsigned char *iqd;
|
||||
unsigned int iqd_len;
|
||||
|
||||
if (Cmnd->use_sg != 0)
|
||||
BUG();
|
||||
|
||||
iqd = ((unsigned char *)Cmnd->buffer);
|
||||
iqd_len = scsi_rbuf_get(Cmnd, &iqd);
|
||||
|
||||
/* tags handled in midlayer */
|
||||
/* enable sync mode? */
|
||||
@ -1163,6 +1191,9 @@ static void ourdone(struct scsi_cmnd *Cmnd)
|
||||
if (iqd[7] & 0x20) {
|
||||
qpti->dev_param[tgt].device_flags |= 0x20;
|
||||
}
|
||||
|
||||
scsi_rbuf_put(Cmnd, iqd);
|
||||
|
||||
qpti->sbits |= (1 << tgt);
|
||||
} else if (!ok) {
|
||||
qpti->sbits |= (1 << tgt);
|
||||
|
@ -29,6 +29,8 @@
|
||||
* NV-specific details such as register offsets, SATA phy location,
|
||||
* hotplug info, etc.
|
||||
*
|
||||
* 0.09
|
||||
* - Fixed bug introduced by 0.08's MCP51 and MCP55 support.
|
||||
*
|
||||
* 0.08
|
||||
* - Added support for MCP51 and MCP55.
|
||||
@ -132,9 +134,7 @@ enum nv_host_type
|
||||
GENERIC,
|
||||
NFORCE2,
|
||||
NFORCE3,
|
||||
CK804,
|
||||
MCP51,
|
||||
MCP55
|
||||
CK804
|
||||
};
|
||||
|
||||
static struct pci_device_id nv_pci_tbl[] = {
|
||||
@ -153,13 +153,13 @@ static struct pci_device_id nv_pci_tbl[] = {
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP04_SATA2,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, CK804 },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 },
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP51_SATA2,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP51 },
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP55 },
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_DEVICE_ID_NVIDIA_NFORCE_MCP55_SATA2,
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, MCP55 },
|
||||
PCI_ANY_ID, PCI_ANY_ID, 0, 0, GENERIC },
|
||||
{ PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID,
|
||||
PCI_ANY_ID, PCI_ANY_ID,
|
||||
PCI_CLASS_STORAGE_IDE<<8, 0xffff00, GENERIC },
|
||||
|
@ -1645,6 +1645,8 @@ int scsi_error_handler(void *data)
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
}
|
||||
|
||||
__set_current_state(TASK_RUNNING);
|
||||
|
||||
SCSI_LOG_ERROR_RECOVERY(1, printk("Error handler scsi_eh_%d"
|
||||
" exiting\n",shost->host_no));
|
||||
|
||||
|
@ -272,8 +272,12 @@ static const struct pnp_device_id pnp_dev_table[] = {
|
||||
{ "SUP1421", 0 },
|
||||
/* SupraExpress 33.6 Data/Fax PnP modem */
|
||||
{ "SUP1590", 0 },
|
||||
/* SupraExpress 336i Sp ASVD */
|
||||
{ "SUP1620", 0 },
|
||||
/* SupraExpress 33.6 Data/Fax PnP modem */
|
||||
{ "SUP1760", 0 },
|
||||
/* SupraExpress 56i Sp Intl */
|
||||
{ "SUP2171", 0 },
|
||||
/* Phoebe Micro */
|
||||
/* Phoebe Micro 33.6 Data Fax 1433VQH Plug & Play */
|
||||
{ "TEX0011", 0 },
|
||||
|
@ -73,7 +73,7 @@ struct imx_port {
|
||||
struct uart_port port;
|
||||
struct timer_list timer;
|
||||
unsigned int old_status;
|
||||
int txirq,rxirq;
|
||||
int txirq,rxirq,rtsirq;
|
||||
};
|
||||
|
||||
/*
|
||||
@ -181,6 +181,22 @@ static void imx_start_tx(struct uart_port *port)
|
||||
imx_transmit_buffer(sport);
|
||||
}
|
||||
|
||||
static irqreturn_t imx_rtsint(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
struct imx_port *sport = (struct imx_port *)dev_id;
|
||||
unsigned int val = USR1((u32)sport->port.membase)&USR1_RTSS;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&sport->port.lock, flags);
|
||||
|
||||
USR1((u32)sport->port.membase) = USR1_RTSD;
|
||||
uart_handle_cts_change(&sport->port, !!val);
|
||||
wake_up_interruptible(&sport->port.info->delta_msr_wait);
|
||||
|
||||
spin_unlock_irqrestore(&sport->port.lock, flags);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static irqreturn_t imx_txint(int irq, void *dev_id, struct pt_regs *regs)
|
||||
{
|
||||
struct imx_port *sport = (struct imx_port *)dev_id;
|
||||
@ -386,15 +402,21 @@ static int imx_startup(struct uart_port *port)
|
||||
if (retval) goto error_out1;
|
||||
|
||||
retval = request_irq(sport->txirq, imx_txint, 0,
|
||||
"imx-uart", sport);
|
||||
DRIVER_NAME, sport);
|
||||
if (retval) goto error_out2;
|
||||
|
||||
retval = request_irq(sport->rtsirq, imx_rtsint, 0,
|
||||
DRIVER_NAME, sport);
|
||||
if (retval) goto error_out3;
|
||||
set_irq_type(sport->rtsirq, IRQT_BOTHEDGE);
|
||||
|
||||
/*
|
||||
* Finally, clear and enable interrupts
|
||||
*/
|
||||
|
||||
USR1((u32)sport->port.membase) = USR1_RTSD;
|
||||
UCR1((u32)sport->port.membase) |=
|
||||
(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN);
|
||||
(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN);
|
||||
|
||||
UCR2((u32)sport->port.membase) |= (UCR2_RXEN | UCR2_TXEN);
|
||||
/*
|
||||
@ -406,6 +428,8 @@ static int imx_startup(struct uart_port *port)
|
||||
|
||||
return 0;
|
||||
|
||||
error_out3:
|
||||
free_irq(sport->txirq, sport);
|
||||
error_out2:
|
||||
free_irq(sport->rxirq, sport);
|
||||
error_out1:
|
||||
@ -424,6 +448,7 @@ static void imx_shutdown(struct uart_port *port)
|
||||
/*
|
||||
* Free the interrupts
|
||||
*/
|
||||
free_irq(sport->rtsirq, sport);
|
||||
free_irq(sport->txirq, sport);
|
||||
free_irq(sport->rxirq, sport);
|
||||
|
||||
@ -432,7 +457,7 @@ static void imx_shutdown(struct uart_port *port)
|
||||
*/
|
||||
|
||||
UCR1((u32)sport->port.membase) &=
|
||||
~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_UARTEN);
|
||||
~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN | UCR1_UARTEN);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -522,7 +547,7 @@ imx_set_termios(struct uart_port *port, struct termios *termios,
|
||||
* disable interrupts and drain transmitter
|
||||
*/
|
||||
old_ucr1 = UCR1((u32)sport->port.membase);
|
||||
UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN);
|
||||
UCR1((u32)sport->port.membase) &= ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
|
||||
|
||||
while ( !(USR2((u32)sport->port.membase) & USR2_TXDC))
|
||||
barrier();
|
||||
@ -643,6 +668,7 @@ static struct imx_port imx_ports[] = {
|
||||
{
|
||||
.txirq = UART1_MINT_TX,
|
||||
.rxirq = UART1_MINT_RX,
|
||||
.rtsirq = UART1_MINT_RTS,
|
||||
.port = {
|
||||
.type = PORT_IMX,
|
||||
.iotype = SERIAL_IO_MEM,
|
||||
@ -658,6 +684,7 @@ static struct imx_port imx_ports[] = {
|
||||
}, {
|
||||
.txirq = UART2_MINT_TX,
|
||||
.rxirq = UART2_MINT_RX,
|
||||
.rtsirq = UART2_MINT_RTS,
|
||||
.port = {
|
||||
.type = PORT_IMX,
|
||||
.iotype = SERIAL_IO_MEM,
|
||||
@ -737,7 +764,7 @@ imx_console_write(struct console *co, const char *s, unsigned int count)
|
||||
|
||||
UCR1((u32)sport->port.membase) =
|
||||
(old_ucr1 | UCR1_UARTCLKEN | UCR1_UARTEN)
|
||||
& ~(UCR1_TXMPTYEN | UCR1_RRDYEN);
|
||||
& ~(UCR1_TXMPTYEN | UCR1_RRDYEN | UCR1_RTSDEN);
|
||||
UCR2((u32)sport->port.membase) = old_ucr2 | UCR2_TXEN;
|
||||
|
||||
/*
|
||||
|
@ -499,7 +499,7 @@ serial_pxa_set_termios(struct uart_port *port, struct termios *termios,
|
||||
/*
|
||||
* Update the per-port timeout.
|
||||
*/
|
||||
uart_update_timeout(port, termios->c_cflag, quot);
|
||||
uart_update_timeout(port, termios->c_cflag, baud);
|
||||
|
||||
up->port.read_status_mask = UART_LSR_OE | UART_LSR_THRE | UART_LSR_DR;
|
||||
if (termios->c_iflag & INPCK)
|
||||
|
@ -1092,8 +1092,8 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport,
|
||||
|
||||
static int probe_index = 0;
|
||||
|
||||
int s3c24xx_serial_probe(struct device *_dev,
|
||||
struct s3c24xx_uart_info *info)
|
||||
static int s3c24xx_serial_probe(struct device *_dev,
|
||||
struct s3c24xx_uart_info *info)
|
||||
{
|
||||
struct s3c24xx_uart_port *ourport;
|
||||
struct platform_device *dev = to_platform_device(_dev);
|
||||
@ -1120,7 +1120,7 @@ int s3c24xx_serial_probe(struct device *_dev,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int s3c24xx_serial_remove(struct device *_dev)
|
||||
static int s3c24xx_serial_remove(struct device *_dev)
|
||||
{
|
||||
struct uart_port *port = s3c24xx_dev_to_port(_dev);
|
||||
|
||||
@ -1134,7 +1134,8 @@ int s3c24xx_serial_remove(struct device *_dev)
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level)
|
||||
static int s3c24xx_serial_suspend(struct device *dev, pm_message_t state,
|
||||
u32 level)
|
||||
{
|
||||
struct uart_port *port = s3c24xx_dev_to_port(dev);
|
||||
|
||||
@ -1144,7 +1145,7 @@ int s3c24xx_serial_suspend(struct device *dev, pm_message_t state, u32 level)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int s3c24xx_serial_resume(struct device *dev, u32 level)
|
||||
static int s3c24xx_serial_resume(struct device *dev, u32 level)
|
||||
{
|
||||
struct uart_port *port = s3c24xx_dev_to_port(dev);
|
||||
struct s3c24xx_uart_port *ourport = to_ourport(port);
|
||||
@ -1165,8 +1166,8 @@ int s3c24xx_serial_resume(struct device *dev, u32 level)
|
||||
#define s3c24xx_serial_resume NULL
|
||||
#endif
|
||||
|
||||
int s3c24xx_serial_init(struct device_driver *drv,
|
||||
struct s3c24xx_uart_info *info)
|
||||
static int s3c24xx_serial_init(struct device_driver *drv,
|
||||
struct s3c24xx_uart_info *info)
|
||||
{
|
||||
dbg("s3c24xx_serial_init(%p,%p)\n", drv, info);
|
||||
return driver_register(drv);
|
||||
|
@ -967,7 +967,7 @@ static int sci_startup(struct uart_port *port)
|
||||
#endif
|
||||
|
||||
sci_request_irq(s);
|
||||
sci_start_tx(port, 1);
|
||||
sci_start_tx(port);
|
||||
sci_start_rx(port, 1);
|
||||
|
||||
return 0;
|
||||
|
@ -326,7 +326,8 @@ static void postproc_atl_queue(struct isp116x *isp116x)
|
||||
usb_settoggle(udev, ep->epnum,
|
||||
ep->nextpid ==
|
||||
USB_PID_OUT,
|
||||
PTD_GET_TOGGLE(ptd) ^ 1);
|
||||
PTD_GET_TOGGLE(ptd));
|
||||
urb->actual_length += PTD_GET_COUNT(ptd);
|
||||
urb->status = cc_to_error[TD_DATAUNDERRUN];
|
||||
spin_unlock(&urb->lock);
|
||||
continue;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user