Merge branch 'master' into upstream-fixes
This commit is contained in:
commit
d14b50cc60
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
What is imacfb?
|
||||||
|
===============
|
||||||
|
|
||||||
|
This is a generic EFI platform driver for Intel based Apple computers.
|
||||||
|
Imacfb is only for EFI booted Intel Macs.
|
||||||
|
|
||||||
|
Supported Hardware
|
||||||
|
==================
|
||||||
|
|
||||||
|
iMac 17"/20"
|
||||||
|
Macbook
|
||||||
|
Macbook Pro 15"/17"
|
||||||
|
MacMini
|
||||||
|
|
||||||
|
How to use it?
|
||||||
|
==============
|
||||||
|
|
||||||
|
Imacfb does not have any kind of autodetection of your machine.
|
||||||
|
You have to add the fillowing kernel parameters in your elilo.conf:
|
||||||
|
Macbook :
|
||||||
|
video=imacfb:macbook
|
||||||
|
MacMini :
|
||||||
|
video=imacfb:mini
|
||||||
|
Macbook Pro 15", iMac 17" :
|
||||||
|
video=imacfb:i17
|
||||||
|
Macbook Pro 17", iMac 20" :
|
||||||
|
video=imacfb:i20
|
||||||
|
|
||||||
|
--
|
||||||
|
Edgar Hucek <gimli@dark-green.com>
|
|
@ -247,7 +247,7 @@ the object-specific fields, which include:
|
||||||
- default_attrs: Default attributes to be exported via sysfs when the
|
- default_attrs: Default attributes to be exported via sysfs when the
|
||||||
object is registered.Note that the last attribute has to be
|
object is registered.Note that the last attribute has to be
|
||||||
initialized to NULL ! You can find a complete implementation
|
initialized to NULL ! You can find a complete implementation
|
||||||
in drivers/block/genhd.c
|
in block/genhd.c
|
||||||
|
|
||||||
|
|
||||||
Instances of struct kobj_type are not registered; only referenced by
|
Instances of struct kobj_type are not registered; only referenced by
|
||||||
|
|
|
@ -294,15 +294,15 @@ tcp_rmem - vector of 3 INTEGERs: min, default, max
|
||||||
Default: 87380*2 bytes.
|
Default: 87380*2 bytes.
|
||||||
|
|
||||||
tcp_mem - vector of 3 INTEGERs: min, pressure, max
|
tcp_mem - vector of 3 INTEGERs: min, pressure, max
|
||||||
low: below this number of pages TCP is not bothered about its
|
min: below this number of pages TCP is not bothered about its
|
||||||
memory appetite.
|
memory appetite.
|
||||||
|
|
||||||
pressure: when amount of memory allocated by TCP exceeds this number
|
pressure: when amount of memory allocated by TCP exceeds this number
|
||||||
of pages, TCP moderates its memory consumption and enters memory
|
of pages, TCP moderates its memory consumption and enters memory
|
||||||
pressure mode, which is exited when memory consumption falls
|
pressure mode, which is exited when memory consumption falls
|
||||||
under "low".
|
under "min".
|
||||||
|
|
||||||
high: number of pages allowed for queueing by all TCP sockets.
|
max: number of pages allowed for queueing by all TCP sockets.
|
||||||
|
|
||||||
Defaults are calculated at boot time from amount of available
|
Defaults are calculated at boot time from amount of available
|
||||||
memory.
|
memory.
|
||||||
|
|
|
@ -1196,7 +1196,7 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
- model : Model of the device. Can be "TSEC", "eTSEC", or "FEC"
|
- model : Model of the device. Can be "TSEC", "eTSEC", or "FEC"
|
||||||
- compatible : Should be "gianfar"
|
- compatible : Should be "gianfar"
|
||||||
- reg : Offset and length of the register set for the device
|
- reg : Offset and length of the register set for the device
|
||||||
- address : List of bytes representing the ethernet address of
|
- mac-address : List of bytes representing the ethernet address of
|
||||||
this controller
|
this controller
|
||||||
- interrupts : <a b> where a is the interrupt number and b is a
|
- interrupts : <a b> where a is the interrupt number and b is a
|
||||||
field that represents an encoding of the sense and level
|
field that represents an encoding of the sense and level
|
||||||
|
@ -1216,7 +1216,7 @@ platforms are moved over to use the flattened-device-tree model.
|
||||||
model = "TSEC";
|
model = "TSEC";
|
||||||
compatible = "gianfar";
|
compatible = "gianfar";
|
||||||
reg = <24000 1000>;
|
reg = <24000 1000>;
|
||||||
address = [ 00 E0 0C 00 73 00 ];
|
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||||
interrupts = <d 3 e 3 12 3>;
|
interrupts = <d 3 e 3 12 3>;
|
||||||
interrupt-parent = <40000>;
|
interrupt-parent = <40000>;
|
||||||
phy-handle = <2452000>
|
phy-handle = <2452000>
|
||||||
|
@ -1498,7 +1498,7 @@ not necessary as they are usually the same as the root node.
|
||||||
model = "TSEC";
|
model = "TSEC";
|
||||||
compatible = "gianfar";
|
compatible = "gianfar";
|
||||||
reg = <24000 1000>;
|
reg = <24000 1000>;
|
||||||
address = [ 00 E0 0C 00 73 00 ];
|
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||||
interrupts = <d 3 e 3 12 3>;
|
interrupts = <d 3 e 3 12 3>;
|
||||||
interrupt-parent = <40000>;
|
interrupt-parent = <40000>;
|
||||||
phy-handle = <2452000>;
|
phy-handle = <2452000>;
|
||||||
|
@ -1511,7 +1511,7 @@ not necessary as they are usually the same as the root node.
|
||||||
model = "TSEC";
|
model = "TSEC";
|
||||||
compatible = "gianfar";
|
compatible = "gianfar";
|
||||||
reg = <25000 1000>;
|
reg = <25000 1000>;
|
||||||
address = [ 00 E0 0C 00 73 01 ];
|
mac-address = [ 00 E0 0C 00 73 01 ];
|
||||||
interrupts = <13 3 14 3 18 3>;
|
interrupts = <13 3 14 3 18 3>;
|
||||||
interrupt-parent = <40000>;
|
interrupt-parent = <40000>;
|
||||||
phy-handle = <2452001>;
|
phy-handle = <2452001>;
|
||||||
|
@ -1524,7 +1524,7 @@ not necessary as they are usually the same as the root node.
|
||||||
model = "FEC";
|
model = "FEC";
|
||||||
compatible = "gianfar";
|
compatible = "gianfar";
|
||||||
reg = <26000 1000>;
|
reg = <26000 1000>;
|
||||||
address = [ 00 E0 0C 00 73 02 ];
|
mac-address = [ 00 E0 0C 00 73 02 ];
|
||||||
interrupts = <19 3>;
|
interrupts = <19 3>;
|
||||||
interrupt-parent = <40000>;
|
interrupt-parent = <40000>;
|
||||||
phy-handle = <2452002>;
|
phy-handle = <2452002>;
|
||||||
|
|
|
@ -2656,6 +2656,14 @@ M: chrisw@sous-sol.org
|
||||||
L: stable@kernel.org
|
L: stable@kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
STABLE BRANCH:
|
||||||
|
P: Greg Kroah-Hartman
|
||||||
|
M: greg@kroah.com
|
||||||
|
P: Chris Wright
|
||||||
|
M: chrisw@sous-sol.org
|
||||||
|
L: stable@kernel.org
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
TPM DEVICE DRIVER
|
TPM DEVICE DRIVER
|
||||||
P: Kylene Hall
|
P: Kylene Hall
|
||||||
M: kjhall@us.ibm.com
|
M: kjhall@us.ibm.com
|
||||||
|
|
32
Makefile
32
Makefile
|
@ -309,9 +309,6 @@ CPPFLAGS := -D__KERNEL__ $(LINUXINCLUDE)
|
||||||
|
|
||||||
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||||
-fno-strict-aliasing -fno-common
|
-fno-strict-aliasing -fno-common
|
||||||
# Force gcc to behave correct even for buggy distributions
|
|
||||||
CFLAGS += $(call cc-option, -fno-stack-protector)
|
|
||||||
|
|
||||||
AFLAGS := -D__ASSEMBLY__
|
AFLAGS := -D__ASSEMBLY__
|
||||||
|
|
||||||
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||||
|
@ -436,12 +433,13 @@ core-y := usr/
|
||||||
endif # KBUILD_EXTMOD
|
endif # KBUILD_EXTMOD
|
||||||
|
|
||||||
ifeq ($(dot-config),1)
|
ifeq ($(dot-config),1)
|
||||||
# In this section, we need .config
|
# Read in config
|
||||||
|
-include include/config/auto.conf
|
||||||
|
|
||||||
|
ifeq ($(KBUILD_EXTMOD),)
|
||||||
# Read in dependencies to all Kconfig* files, make sure to run
|
# Read in dependencies to all Kconfig* files, make sure to run
|
||||||
# oldconfig if changes are detected.
|
# oldconfig if changes are detected.
|
||||||
-include include/config/auto.conf.cmd
|
-include include/config/auto.conf.cmd
|
||||||
-include include/config/auto.conf
|
|
||||||
|
|
||||||
# To avoid any implicit rule to kick in, define an empty command
|
# To avoid any implicit rule to kick in, define an empty command
|
||||||
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
$(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
||||||
|
@ -451,16 +449,27 @@ $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;
|
||||||
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
|
# if auto.conf.cmd is missing then we are probably in a cleaned tree so
|
||||||
# we execute the config step to be sure to catch updated Kconfig files
|
# we execute the config step to be sure to catch updated Kconfig files
|
||||||
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
|
||||||
ifeq ($(KBUILD_EXTMOD),)
|
|
||||||
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
|
$(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
|
||||||
else
|
else
|
||||||
$(error kernel configuration not valid - run 'make prepare' in $(srctree) to update it)
|
# external modules needs include/linux/autoconf.h and include/config/auto.conf
|
||||||
endif
|
# but do not care if they are up-to-date. Use auto.conf to trigger the test
|
||||||
|
PHONY += include/config/auto.conf
|
||||||
|
|
||||||
|
include/config/auto.conf:
|
||||||
|
$(Q)test -e include/linux/autoconf.h -a -e $@ || ( \
|
||||||
|
echo; \
|
||||||
|
echo " ERROR: Kernel configuration is invalid."; \
|
||||||
|
echo " include/linux/autoconf.h or $@ are missing."; \
|
||||||
|
echo " Run 'make oldconfig && make prepare' on kernel src to fix it."; \
|
||||||
|
echo; \
|
||||||
|
/bin/false)
|
||||||
|
|
||||||
|
endif # KBUILD_EXTMOD
|
||||||
|
|
||||||
else
|
else
|
||||||
# Dummy target needed, because used as prerequisite
|
# Dummy target needed, because used as prerequisite
|
||||||
include/config/auto.conf: ;
|
include/config/auto.conf: ;
|
||||||
endif
|
endif # $(dot-config)
|
||||||
|
|
||||||
# The all: target is the default when no target is given on the
|
# The all: target is the default when no target is given on the
|
||||||
# command line.
|
# command line.
|
||||||
|
@ -474,6 +483,8 @@ else
|
||||||
CFLAGS += -O2
|
CFLAGS += -O2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
include $(srctree)/arch/$(ARCH)/Makefile
|
||||||
|
|
||||||
ifdef CONFIG_FRAME_POINTER
|
ifdef CONFIG_FRAME_POINTER
|
||||||
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
|
CFLAGS += -fno-omit-frame-pointer $(call cc-option,-fno-optimize-sibling-calls,)
|
||||||
else
|
else
|
||||||
|
@ -488,7 +499,8 @@ ifdef CONFIG_DEBUG_INFO
|
||||||
CFLAGS += -g
|
CFLAGS += -g
|
||||||
endif
|
endif
|
||||||
|
|
||||||
include $(srctree)/arch/$(ARCH)/Makefile
|
# Force gcc to behave correct even for buggy distributions
|
||||||
|
CFLAGS += $(call cc-option, -fno-stack-protector)
|
||||||
|
|
||||||
# arch Makefile may override CC so keep this after arch Makefile is included
|
# arch Makefile may override CC so keep this after arch Makefile is included
|
||||||
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
|
||||||
|
|
|
@ -68,6 +68,7 @@ void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc
|
||||||
rtc_time_to_tm(next_time, next);
|
rtc_time_to_tm(next_time, next);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(rtc_next_alarm_time);
|
||||||
|
|
||||||
static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm)
|
static inline int rtc_arm_read_time(struct rtc_ops *ops, struct rtc_time *tm)
|
||||||
{
|
{
|
||||||
|
|
|
@ -233,7 +233,7 @@ NORET_TYPE void die(const char *str, struct pt_regs *regs, int err)
|
||||||
spin_unlock_irq(&die_lock);
|
spin_unlock_irq(&die_lock);
|
||||||
|
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
|
|
||||||
do_exit(SIGSEGV);
|
do_exit(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
|
@ -532,8 +532,6 @@ pci_set_consistent_dma_mask(struct pci_dev *dev, u64 mask)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
EXPORT_SYMBOL(pci_set_dma_mask);
|
|
||||||
EXPORT_SYMBOL(pci_set_consistent_dma_mask);
|
|
||||||
EXPORT_SYMBOL(ixp4xx_pci_read);
|
EXPORT_SYMBOL(ixp4xx_pci_read);
|
||||||
EXPORT_SYMBOL(ixp4xx_pci_write);
|
EXPORT_SYMBOL(ixp4xx_pci_write);
|
||||||
|
|
||||||
|
|
|
@ -107,9 +107,9 @@ static struct flash_platform_data gtwx5715_flash_data = {
|
||||||
.width = 2,
|
.width = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct gtw5715_flash_resource = {
|
static struct resource gtwx5715_flash_resource = {
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}
|
};
|
||||||
|
|
||||||
static struct platform_device gtwx5715_flash = {
|
static struct platform_device gtwx5715_flash = {
|
||||||
.name = "IXP4XX-Flash",
|
.name = "IXP4XX-Flash",
|
||||||
|
@ -130,9 +130,6 @@ static void __init gtwx5715_init(void)
|
||||||
{
|
{
|
||||||
ixp4xx_sys_init();
|
ixp4xx_sys_init();
|
||||||
|
|
||||||
if (!flash_resource)
|
|
||||||
printk(KERN_ERR "Could not allocate flash resource\n");
|
|
||||||
|
|
||||||
gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
|
gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
|
||||||
gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1;
|
gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1;
|
||||||
|
|
||||||
|
|
|
@ -454,7 +454,7 @@ void die(const char * str, struct pt_regs * regs, long err)
|
||||||
panic("Fatal exception in interrupt");
|
panic("Fatal exception in interrupt");
|
||||||
|
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
|
|
||||||
oops_exit();
|
oops_exit();
|
||||||
do_exit(SIGSEGV);
|
do_exit(SIGSEGV);
|
||||||
|
|
|
@ -118,7 +118,7 @@ die (const char *str, struct pt_regs *regs, long err)
|
||||||
spin_unlock_irq(&die.lock);
|
spin_unlock_irq(&die.lock);
|
||||||
|
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
|
|
||||||
do_exit(SIGSEGV);
|
do_exit(SIGSEGV);
|
||||||
}
|
}
|
||||||
|
|
|
@ -836,9 +836,10 @@ config MCA
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config PCI
|
config PCI
|
||||||
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) \
|
bool "PCI support" if 40x || CPM2 || PPC_83xx || PPC_85xx || PPC_86xx \
|
||||||
|| MPC7448HPC2
|
|| PPC_MPC52xx || (EMBEDDED && PPC_ISERIES) || MPC7448HPC2
|
||||||
default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx && !PPC_85xx && !PPC_86xx
|
default y if !40x && !CPM2 && !8xx && !APUS && !PPC_83xx \
|
||||||
|
&& !PPC_85xx && !PPC_86xx
|
||||||
default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
|
default PCI_PERMEDIA if !4xx && !CPM2 && !8xx && APUS
|
||||||
default PCI_QSPAN if !4xx && !CPM2 && 8xx
|
default PCI_QSPAN if !4xx && !CPM2 && 8xx
|
||||||
help
|
help
|
||||||
|
|
|
@ -0,0 +1,339 @@
|
||||||
|
/*
|
||||||
|
* MPC8641 HPCN Device Tree Source
|
||||||
|
*
|
||||||
|
* Copyright 2006 Freescale Semiconductor Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the
|
||||||
|
* Free Software Foundation; either version 2 of the License, or (at your
|
||||||
|
* option) any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "MPC8641HPCN";
|
||||||
|
compatible = "mpc86xx";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
cpus {
|
||||||
|
#cpus = <2>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
PowerPC,8641@0 {
|
||||||
|
device_type = "cpu";
|
||||||
|
reg = <0>;
|
||||||
|
d-cache-line-size = <20>; // 32 bytes
|
||||||
|
i-cache-line-size = <20>; // 32 bytes
|
||||||
|
d-cache-size = <8000>; // L1, 32K
|
||||||
|
i-cache-size = <8000>; // L1, 32K
|
||||||
|
timebase-frequency = <0>; // 33 MHz, from uboot
|
||||||
|
bus-frequency = <0>; // From uboot
|
||||||
|
clock-frequency = <0>; // From uboot
|
||||||
|
32-bit;
|
||||||
|
linux,boot-cpu;
|
||||||
|
};
|
||||||
|
PowerPC,8641@1 {
|
||||||
|
device_type = "cpu";
|
||||||
|
reg = <1>;
|
||||||
|
d-cache-line-size = <20>; // 32 bytes
|
||||||
|
i-cache-line-size = <20>; // 32 bytes
|
||||||
|
d-cache-size = <8000>; // L1, 32K
|
||||||
|
i-cache-size = <8000>; // L1, 32K
|
||||||
|
timebase-frequency = <0>; // 33 MHz, from uboot
|
||||||
|
bus-frequency = <0>; // From uboot
|
||||||
|
clock-frequency = <0>; // From uboot
|
||||||
|
32-bit;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
memory {
|
||||||
|
device_type = "memory";
|
||||||
|
reg = <00000000 40000000>; // 1G at 0x0
|
||||||
|
};
|
||||||
|
|
||||||
|
soc8641@f8000000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
device_type = "soc";
|
||||||
|
ranges = <0 f8000000 00100000>;
|
||||||
|
reg = <f8000000 00100000>; // CCSRBAR 1M
|
||||||
|
bus-frequency = <0>;
|
||||||
|
|
||||||
|
i2c@3000 {
|
||||||
|
device_type = "i2c";
|
||||||
|
compatible = "fsl-i2c";
|
||||||
|
reg = <3000 100>;
|
||||||
|
interrupts = <2b 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
dfsrr;
|
||||||
|
};
|
||||||
|
|
||||||
|
i2c@3100 {
|
||||||
|
device_type = "i2c";
|
||||||
|
compatible = "fsl-i2c";
|
||||||
|
reg = <3100 100>;
|
||||||
|
interrupts = <2b 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
dfsrr;
|
||||||
|
};
|
||||||
|
|
||||||
|
mdio@24520 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
device_type = "mdio";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <24520 20>;
|
||||||
|
linux,phandle = <24520>;
|
||||||
|
ethernet-phy@0 {
|
||||||
|
linux,phandle = <2452000>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
interrupts = <4a 1>;
|
||||||
|
reg = <0>;
|
||||||
|
device_type = "ethernet-phy";
|
||||||
|
};
|
||||||
|
ethernet-phy@1 {
|
||||||
|
linux,phandle = <2452001>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
interrupts = <4a 1>;
|
||||||
|
reg = <1>;
|
||||||
|
device_type = "ethernet-phy";
|
||||||
|
};
|
||||||
|
ethernet-phy@2 {
|
||||||
|
linux,phandle = <2452002>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
interrupts = <4a 1>;
|
||||||
|
reg = <2>;
|
||||||
|
device_type = "ethernet-phy";
|
||||||
|
};
|
||||||
|
ethernet-phy@3 {
|
||||||
|
linux,phandle = <2452003>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
interrupts = <4a 1>;
|
||||||
|
reg = <3>;
|
||||||
|
device_type = "ethernet-phy";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet@24000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
device_type = "network";
|
||||||
|
model = "TSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <24000 1000>;
|
||||||
|
mac-address = [ 00 E0 0C 00 73 00 ];
|
||||||
|
interrupts = <1d 2 1e 2 22 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
phy-handle = <2452000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet@25000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
device_type = "network";
|
||||||
|
model = "TSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <25000 1000>;
|
||||||
|
mac-address = [ 00 E0 0C 00 73 01 ];
|
||||||
|
interrupts = <23 2 24 2 28 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
phy-handle = <2452001>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet@26000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
device_type = "network";
|
||||||
|
model = "TSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <26000 1000>;
|
||||||
|
mac-address = [ 00 E0 0C 00 02 FD ];
|
||||||
|
interrupts = <1F 2 20 2 21 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
phy-handle = <2452002>;
|
||||||
|
};
|
||||||
|
|
||||||
|
ethernet@27000 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
device_type = "network";
|
||||||
|
model = "TSEC";
|
||||||
|
compatible = "gianfar";
|
||||||
|
reg = <27000 1000>;
|
||||||
|
mac-address = [ 00 E0 0C 00 03 FD ];
|
||||||
|
interrupts = <25 2 26 2 27 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
phy-handle = <2452003>;
|
||||||
|
};
|
||||||
|
serial@4500 {
|
||||||
|
device_type = "serial";
|
||||||
|
compatible = "ns16550";
|
||||||
|
reg = <4500 100>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupts = <2a 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
serial@4600 {
|
||||||
|
device_type = "serial";
|
||||||
|
compatible = "ns16550";
|
||||||
|
reg = <4600 100>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupts = <1c 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pci@8000 {
|
||||||
|
compatible = "86xx";
|
||||||
|
device_type = "pci";
|
||||||
|
#interrupt-cells = <1>;
|
||||||
|
#size-cells = <2>;
|
||||||
|
#address-cells = <3>;
|
||||||
|
reg = <8000 1000>;
|
||||||
|
bus-range = <0 fe>;
|
||||||
|
ranges = <02000000 0 80000000 80000000 0 20000000
|
||||||
|
01000000 0 00000000 e2000000 0 00100000>;
|
||||||
|
clock-frequency = <1fca055>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
interrupts = <18 2>;
|
||||||
|
interrupt-map-mask = <f800 0 0 7>;
|
||||||
|
interrupt-map = <
|
||||||
|
/* IDSEL 0x11 */
|
||||||
|
8800 0 0 1 4d0 3 2
|
||||||
|
8800 0 0 2 4d0 4 2
|
||||||
|
8800 0 0 3 4d0 5 2
|
||||||
|
8800 0 0 4 4d0 6 2
|
||||||
|
|
||||||
|
/* IDSEL 0x12 */
|
||||||
|
9000 0 0 1 4d0 4 2
|
||||||
|
9000 0 0 2 4d0 5 2
|
||||||
|
9000 0 0 3 4d0 6 2
|
||||||
|
9000 0 0 4 4d0 3 2
|
||||||
|
|
||||||
|
/* IDSEL 0x13 */
|
||||||
|
9800 0 0 1 4d0 0 0
|
||||||
|
9800 0 0 2 4d0 0 0
|
||||||
|
9800 0 0 3 4d0 0 0
|
||||||
|
9800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x14 */
|
||||||
|
a000 0 0 1 4d0 0 0
|
||||||
|
a000 0 0 2 4d0 0 0
|
||||||
|
a000 0 0 3 4d0 0 0
|
||||||
|
a000 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x15 */
|
||||||
|
a800 0 0 1 4d0 0 0
|
||||||
|
a800 0 0 2 4d0 0 0
|
||||||
|
a800 0 0 3 4d0 0 0
|
||||||
|
a800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x16 */
|
||||||
|
b000 0 0 1 4d0 0 0
|
||||||
|
b000 0 0 2 4d0 0 0
|
||||||
|
b000 0 0 3 4d0 0 0
|
||||||
|
b000 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x17 */
|
||||||
|
b800 0 0 1 4d0 0 0
|
||||||
|
b800 0 0 2 4d0 0 0
|
||||||
|
b800 0 0 3 4d0 0 0
|
||||||
|
b800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x18 */
|
||||||
|
c000 0 0 1 4d0 0 0
|
||||||
|
c000 0 0 2 4d0 0 0
|
||||||
|
c000 0 0 3 4d0 0 0
|
||||||
|
c000 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x19 */
|
||||||
|
c800 0 0 1 4d0 0 0
|
||||||
|
c800 0 0 2 4d0 0 0
|
||||||
|
c800 0 0 3 4d0 0 0
|
||||||
|
c800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x1a */
|
||||||
|
d000 0 0 1 4d0 6 2
|
||||||
|
d000 0 0 2 4d0 3 2
|
||||||
|
d000 0 0 3 4d0 4 2
|
||||||
|
d000 0 0 4 4d0 5 2
|
||||||
|
|
||||||
|
|
||||||
|
/* IDSEL 0x1b */
|
||||||
|
d800 0 0 1 4d0 5 2
|
||||||
|
d800 0 0 2 4d0 0 0
|
||||||
|
d800 0 0 3 4d0 0 0
|
||||||
|
d800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x1c */
|
||||||
|
e000 0 0 1 4d0 9 2
|
||||||
|
e000 0 0 2 4d0 a 2
|
||||||
|
e000 0 0 3 4d0 c 2
|
||||||
|
e000 0 0 4 4d0 7 2
|
||||||
|
|
||||||
|
/* IDSEL 0x1d */
|
||||||
|
e800 0 0 1 4d0 9 2
|
||||||
|
e800 0 0 2 4d0 a 2
|
||||||
|
e800 0 0 3 4d0 b 2
|
||||||
|
e800 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x1e */
|
||||||
|
f000 0 0 1 4d0 c 2
|
||||||
|
f000 0 0 2 4d0 0 0
|
||||||
|
f000 0 0 3 4d0 0 0
|
||||||
|
f000 0 0 4 4d0 0 0
|
||||||
|
|
||||||
|
/* IDSEL 0x1f */
|
||||||
|
f800 0 0 1 4d0 6 2
|
||||||
|
f800 0 0 2 4d0 0 0
|
||||||
|
f800 0 0 3 4d0 0 0
|
||||||
|
f800 0 0 4 4d0 0 0
|
||||||
|
>;
|
||||||
|
i8259@4d0 {
|
||||||
|
linux,phandle = <4d0>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupt-controller;
|
||||||
|
device_type = "interrupt-controller";
|
||||||
|
#address-cells = <0>;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
built-in;
|
||||||
|
compatible = "chrp,iic";
|
||||||
|
big-endian;
|
||||||
|
interrupts = <49 2>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
pic@40000 {
|
||||||
|
linux,phandle = <40000>;
|
||||||
|
clock-frequency = <0>;
|
||||||
|
interrupt-controller;
|
||||||
|
#address-cells = <0>;
|
||||||
|
#interrupt-cells = <2>;
|
||||||
|
reg = <40000 40000>;
|
||||||
|
built-in;
|
||||||
|
compatible = "chrp,open-pic";
|
||||||
|
device_type = "open-pic";
|
||||||
|
big-endian;
|
||||||
|
interrupts = <
|
||||||
|
10 2 11 2 12 2 13 2
|
||||||
|
14 2 15 2 16 2 17 2
|
||||||
|
18 2 19 2 1a 2 1b 2
|
||||||
|
1c 2 1d 2 1e 2 1f 2
|
||||||
|
20 2 21 2 22 2 23 2
|
||||||
|
24 2 25 2 26 2 27 2
|
||||||
|
28 2 29 2 2a 2 2b 2
|
||||||
|
2c 2 2d 2 2e 2 2f 2
|
||||||
|
30 2 31 2 32 2 33 2
|
||||||
|
34 2 35 2 36 2 37 2
|
||||||
|
38 2 39 2 2a 2 3b 2
|
||||||
|
3c 2 3d 2 3e 2 3f 2
|
||||||
|
48 1 49 2 4a 1
|
||||||
|
>;
|
||||||
|
interrupt-parent = <40000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -1,16 +1,18 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.17-rc1
|
# Linux kernel version: 2.6.18-rc3
|
||||||
# Wed Apr 19 13:24:37 2006
|
# Tue Aug 8 09:12:29 2006
|
||||||
#
|
#
|
||||||
CONFIG_PPC64=y
|
CONFIG_PPC64=y
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_PPC_MERGE=y
|
CONFIG_PPC_MERGE=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_IRQ_PER_CPU=y
|
||||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||||
CONFIG_PPC=y
|
CONFIG_PPC=y
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
CONFIG_COMPAT=y
|
CONFIG_COMPAT=y
|
||||||
|
@ -33,6 +35,7 @@ CONFIG_PPC_STD_MMU=y
|
||||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=4
|
CONFIG_NR_CPUS=4
|
||||||
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
|
@ -50,6 +53,7 @@ CONFIG_SWAP=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
# CONFIG_TASKSTATS is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
# CONFIG_AUDIT is not set
|
# CONFIG_AUDIT is not set
|
||||||
CONFIG_IKCONFIG=y
|
CONFIG_IKCONFIG=y
|
||||||
|
@ -67,10 +71,12 @@ CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
CONFIG_ELF_CORE=y
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_RT_MUTEXES=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_SLAB=y
|
CONFIG_SLAB=y
|
||||||
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
|
@ -116,12 +122,16 @@ CONFIG_PPC_PMAC=y
|
||||||
CONFIG_PPC_PMAC64=y
|
CONFIG_PPC_PMAC64=y
|
||||||
# CONFIG_PPC_MAPLE is not set
|
# CONFIG_PPC_MAPLE is not set
|
||||||
# CONFIG_PPC_CELL is not set
|
# CONFIG_PPC_CELL is not set
|
||||||
|
# CONFIG_PPC_CELL_NATIVE is not set
|
||||||
|
# CONFIG_PPC_IBM_CELL_BLADE is not set
|
||||||
|
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||||
CONFIG_U3_DART=y
|
CONFIG_U3_DART=y
|
||||||
CONFIG_MPIC=y
|
CONFIG_MPIC=y
|
||||||
# CONFIG_PPC_RTAS is not set
|
# CONFIG_PPC_RTAS is not set
|
||||||
# CONFIG_MMIO_NVRAM is not set
|
# CONFIG_MMIO_NVRAM is not set
|
||||||
CONFIG_MPIC_BROKEN_U3=y
|
CONFIG_MPIC_BROKEN_U3=y
|
||||||
# CONFIG_PPC_MPC106 is not set
|
# CONFIG_PPC_MPC106 is not set
|
||||||
|
CONFIG_PPC_970_NAP=y
|
||||||
CONFIG_CPU_FREQ=y
|
CONFIG_CPU_FREQ=y
|
||||||
CONFIG_CPU_FREQ_TABLE=y
|
CONFIG_CPU_FREQ_TABLE=y
|
||||||
# CONFIG_CPU_FREQ_DEBUG is not set
|
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||||
|
@ -153,6 +163,7 @@ CONFIG_BINFMT_ELF=y
|
||||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||||
CONFIG_IOMMU_VMERGE=y
|
CONFIG_IOMMU_VMERGE=y
|
||||||
# CONFIG_HOTPLUG_CPU is not set
|
# CONFIG_HOTPLUG_CPU is not set
|
||||||
|
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
# CONFIG_CRASH_DUMP is not set
|
# CONFIG_CRASH_DUMP is not set
|
||||||
CONFIG_IRQ_ALL_CPUS=y
|
CONFIG_IRQ_ALL_CPUS=y
|
||||||
|
@ -168,6 +179,7 @@ CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
CONFIG_RESOURCES_64BIT=y
|
||||||
# CONFIG_PPC_64K_PAGES is not set
|
# CONFIG_PPC_64K_PAGES is not set
|
||||||
# CONFIG_SCHED_SMT is not set
|
# CONFIG_SCHED_SMT is not set
|
||||||
CONFIG_PROC_DEVICETREE=y
|
CONFIG_PROC_DEVICETREE=y
|
||||||
|
@ -184,6 +196,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
||||||
# CONFIG_PPC_INDIRECT_PCI is not set
|
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
CONFIG_PCI_DOMAINS=y
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
# CONFIG_PCIEPORTBUS is not set
|
||||||
# CONFIG_PCI_DEBUG is not set
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -227,6 +240,8 @@ CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_XFRM_TUNNEL=m
|
CONFIG_INET_XFRM_TUNNEL=m
|
||||||
CONFIG_INET_TUNNEL=y
|
CONFIG_INET_TUNNEL=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||||
CONFIG_INET_DIAG=y
|
CONFIG_INET_DIAG=y
|
||||||
CONFIG_INET_TCP_DIAG=y
|
CONFIG_INET_TCP_DIAG=y
|
||||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
@ -239,6 +254,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||||
# CONFIG_INET6_TUNNEL is not set
|
# CONFIG_INET6_TUNNEL is not set
|
||||||
|
# CONFIG_NETWORK_SECMARK is not set
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
# CONFIG_NETFILTER_DEBUG is not set
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
@ -263,6 +279,7 @@ CONFIG_IP_NF_TFTP=m
|
||||||
CONFIG_IP_NF_AMANDA=m
|
CONFIG_IP_NF_AMANDA=m
|
||||||
# CONFIG_IP_NF_PPTP is not set
|
# CONFIG_IP_NF_PPTP is not set
|
||||||
# CONFIG_IP_NF_H323 is not set
|
# CONFIG_IP_NF_H323 is not set
|
||||||
|
# CONFIG_IP_NF_SIP is not set
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -318,6 +335,7 @@ CONFIG_STANDALONE=y
|
||||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
CONFIG_FW_LOADER=y
|
CONFIG_FW_LOADER=y
|
||||||
# CONFIG_DEBUG_DRIVER is not set
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Connector - unified userspace <-> kernelspace linker
|
# Connector - unified userspace <-> kernelspace linker
|
||||||
|
@ -355,6 +373,7 @@ CONFIG_BLK_DEV_NBD=m
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||||
|
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
CONFIG_CDROM_PKTCDVD=m
|
CONFIG_CDROM_PKTCDVD=m
|
||||||
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
CONFIG_CDROM_PKTCDVD_BUFFERS=8
|
||||||
|
@ -417,7 +436,6 @@ CONFIG_IDEDMA_PCI_AUTO=y
|
||||||
CONFIG_BLK_DEV_IDE_PMAC=y
|
CONFIG_BLK_DEV_IDE_PMAC=y
|
||||||
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
CONFIG_BLK_DEV_IDE_PMAC_ATA100FIRST=y
|
||||||
CONFIG_BLK_DEV_IDEDMA_PMAC=y
|
CONFIG_BLK_DEV_IDEDMA_PMAC=y
|
||||||
# CONFIG_BLK_DEV_IDE_PMAC_BLINK is not set
|
|
||||||
# CONFIG_IDE_ARM is not set
|
# CONFIG_IDE_ARM is not set
|
||||||
CONFIG_BLK_DEV_IDEDMA=y
|
CONFIG_BLK_DEV_IDEDMA=y
|
||||||
# CONFIG_IDEDMA_IVB is not set
|
# CONFIG_IDEDMA_IVB is not set
|
||||||
|
@ -478,6 +496,7 @@ CONFIG_SCSI_SATA_SVW=y
|
||||||
# CONFIG_SCSI_SATA_MV is not set
|
# CONFIG_SCSI_SATA_MV is not set
|
||||||
# CONFIG_SCSI_SATA_NV is not set
|
# CONFIG_SCSI_SATA_NV is not set
|
||||||
# CONFIG_SCSI_PDC_ADMA is not set
|
# CONFIG_SCSI_PDC_ADMA is not set
|
||||||
|
# CONFIG_SCSI_HPTIOP is not set
|
||||||
# CONFIG_SCSI_SATA_QSTOR is not set
|
# CONFIG_SCSI_SATA_QSTOR is not set
|
||||||
# CONFIG_SCSI_SATA_PROMISE is not set
|
# CONFIG_SCSI_SATA_PROMISE is not set
|
||||||
# CONFIG_SCSI_SATA_SX4 is not set
|
# CONFIG_SCSI_SATA_SX4 is not set
|
||||||
|
@ -497,7 +516,6 @@ CONFIG_SCSI_SATA_SVW=y
|
||||||
# CONFIG_SCSI_INIA100 is not set
|
# CONFIG_SCSI_INIA100 is not set
|
||||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||||
# CONFIG_SCSI_IPR is not set
|
# CONFIG_SCSI_IPR is not set
|
||||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
|
||||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
# CONFIG_SCSI_QLA_FC is not set
|
# CONFIG_SCSI_QLA_FC is not set
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
|
@ -514,9 +532,7 @@ CONFIG_MD_LINEAR=y
|
||||||
CONFIG_MD_RAID0=y
|
CONFIG_MD_RAID0=y
|
||||||
CONFIG_MD_RAID1=y
|
CONFIG_MD_RAID1=y
|
||||||
CONFIG_MD_RAID10=m
|
CONFIG_MD_RAID10=m
|
||||||
CONFIG_MD_RAID5=y
|
# CONFIG_MD_RAID456 is not set
|
||||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
|
||||||
CONFIG_MD_RAID6=m
|
|
||||||
CONFIG_MD_MULTIPATH=m
|
CONFIG_MD_MULTIPATH=m
|
||||||
CONFIG_MD_FAULTY=m
|
CONFIG_MD_FAULTY=m
|
||||||
CONFIG_BLK_DEV_DM=y
|
CONFIG_BLK_DEV_DM=y
|
||||||
|
@ -559,7 +575,6 @@ CONFIG_IEEE1394_OHCI1394=y
|
||||||
#
|
#
|
||||||
CONFIG_IEEE1394_VIDEO1394=m
|
CONFIG_IEEE1394_VIDEO1394=m
|
||||||
CONFIG_IEEE1394_SBP2=m
|
CONFIG_IEEE1394_SBP2=m
|
||||||
# CONFIG_IEEE1394_SBP2_PHYS_DMA is not set
|
|
||||||
CONFIG_IEEE1394_ETH1394=m
|
CONFIG_IEEE1394_ETH1394=m
|
||||||
CONFIG_IEEE1394_DV1394=m
|
CONFIG_IEEE1394_DV1394=m
|
||||||
CONFIG_IEEE1394_RAWIO=y
|
CONFIG_IEEE1394_RAWIO=y
|
||||||
|
@ -573,6 +588,7 @@ CONFIG_IEEE1394_RAWIO=y
|
||||||
# Macintosh device drivers
|
# Macintosh device drivers
|
||||||
#
|
#
|
||||||
CONFIG_ADB_PMU=y
|
CONFIG_ADB_PMU=y
|
||||||
|
# CONFIG_ADB_PMU_LED is not set
|
||||||
CONFIG_PMAC_SMU=y
|
CONFIG_PMAC_SMU=y
|
||||||
CONFIG_THERM_PM72=y
|
CONFIG_THERM_PM72=y
|
||||||
CONFIG_WINDFARM=y
|
CONFIG_WINDFARM=y
|
||||||
|
@ -643,6 +659,7 @@ CONFIG_TIGON3=y
|
||||||
# CONFIG_CHELSIO_T1 is not set
|
# CONFIG_CHELSIO_T1 is not set
|
||||||
# CONFIG_IXGB is not set
|
# CONFIG_IXGB is not set
|
||||||
# CONFIG_S2IO is not set
|
# CONFIG_S2IO is not set
|
||||||
|
# CONFIG_MYRI10GE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Token Ring devices
|
# Token Ring devices
|
||||||
|
@ -739,6 +756,7 @@ CONFIG_SERIO=y
|
||||||
CONFIG_VT=y
|
CONFIG_VT=y
|
||||||
CONFIG_VT_CONSOLE=y
|
CONFIG_VT_CONSOLE=y
|
||||||
CONFIG_HW_CONSOLE=y
|
CONFIG_HW_CONSOLE=y
|
||||||
|
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -754,6 +772,7 @@ CONFIG_HW_CONSOLE=y
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
# CONFIG_BRIQ_PANEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IPMI
|
# IPMI
|
||||||
|
@ -764,6 +783,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# Watchdog Cards
|
# Watchdog Cards
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
CONFIG_GEN_RTC=y
|
CONFIG_GEN_RTC=y
|
||||||
# CONFIG_GEN_RTC_X is not set
|
# CONFIG_GEN_RTC_X is not set
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
|
@ -774,6 +794,7 @@ CONFIG_GEN_RTC=y
|
||||||
# Ftape, the floppy tape device driver
|
# Ftape, the floppy tape device driver
|
||||||
#
|
#
|
||||||
CONFIG_AGP=m
|
CONFIG_AGP=m
|
||||||
|
# CONFIG_AGP_SIS is not set
|
||||||
# CONFIG_AGP_VIA is not set
|
# CONFIG_AGP_VIA is not set
|
||||||
CONFIG_AGP_UNINORTH=m
|
CONFIG_AGP_UNINORTH=m
|
||||||
# CONFIG_DRM is not set
|
# CONFIG_DRM is not set
|
||||||
|
@ -813,6 +834,7 @@ CONFIG_I2C_ALGOBIT=y
|
||||||
# CONFIG_I2C_PIIX4 is not set
|
# CONFIG_I2C_PIIX4 is not set
|
||||||
CONFIG_I2C_POWERMAC=y
|
CONFIG_I2C_POWERMAC=y
|
||||||
# CONFIG_I2C_NFORCE2 is not set
|
# CONFIG_I2C_NFORCE2 is not set
|
||||||
|
# CONFIG_I2C_OCORES is not set
|
||||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
# CONFIG_I2C_PROSAVAGE is not set
|
# CONFIG_I2C_PROSAVAGE is not set
|
||||||
# CONFIG_I2C_SAVAGE4 is not set
|
# CONFIG_I2C_SAVAGE4 is not set
|
||||||
|
@ -849,7 +871,6 @@ CONFIG_I2C_POWERMAC=y
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
# CONFIG_W1 is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Hardware Monitoring support
|
# Hardware Monitoring support
|
||||||
|
@ -865,6 +886,7 @@ CONFIG_I2C_POWERMAC=y
|
||||||
# Multimedia devices
|
# Multimedia devices
|
||||||
#
|
#
|
||||||
# CONFIG_VIDEO_DEV is not set
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
CONFIG_VIDEO_V4L2=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Digital Video Broadcasting Devices
|
# Digital Video Broadcasting Devices
|
||||||
|
@ -875,22 +897,19 @@ CONFIG_I2C_POWERMAC=y
|
||||||
#
|
#
|
||||||
# Graphics support
|
# Graphics support
|
||||||
#
|
#
|
||||||
|
CONFIG_FIRMWARE_EDID=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_CFB_FILLRECT=y
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
CONFIG_FB_CFB_COPYAREA=y
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
CONFIG_FB_MACMODES=y
|
CONFIG_FB_MACMODES=y
|
||||||
CONFIG_FB_FIRMWARE_EDID=y
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
CONFIG_FB_TILEBLITTING=y
|
CONFIG_FB_TILEBLITTING=y
|
||||||
# CONFIG_FB_CIRRUS is not set
|
# CONFIG_FB_CIRRUS is not set
|
||||||
# CONFIG_FB_PM2 is not set
|
# CONFIG_FB_PM2 is not set
|
||||||
# CONFIG_FB_CYBER2000 is not set
|
# CONFIG_FB_CYBER2000 is not set
|
||||||
CONFIG_FB_OF=y
|
CONFIG_FB_OF=y
|
||||||
# CONFIG_FB_CONTROL is not set
|
|
||||||
# CONFIG_FB_PLATINUM is not set
|
|
||||||
# CONFIG_FB_VALKYRIE is not set
|
|
||||||
# CONFIG_FB_CT65550 is not set
|
|
||||||
# CONFIG_FB_ASILIANT is not set
|
# CONFIG_FB_ASILIANT is not set
|
||||||
# CONFIG_FB_IMSTT is not set
|
# CONFIG_FB_IMSTT is not set
|
||||||
# CONFIG_FB_VGA16 is not set
|
# CONFIG_FB_VGA16 is not set
|
||||||
|
@ -990,6 +1009,18 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
||||||
# CONFIG_SND_CMIPCI is not set
|
# CONFIG_SND_CMIPCI is not set
|
||||||
# CONFIG_SND_CS4281 is not set
|
# CONFIG_SND_CS4281 is not set
|
||||||
# CONFIG_SND_CS46XX is not set
|
# CONFIG_SND_CS46XX is not set
|
||||||
|
# CONFIG_SND_DARLA20 is not set
|
||||||
|
# CONFIG_SND_GINA20 is not set
|
||||||
|
# CONFIG_SND_LAYLA20 is not set
|
||||||
|
# CONFIG_SND_DARLA24 is not set
|
||||||
|
# CONFIG_SND_GINA24 is not set
|
||||||
|
# CONFIG_SND_LAYLA24 is not set
|
||||||
|
# CONFIG_SND_MONA is not set
|
||||||
|
# CONFIG_SND_MIA is not set
|
||||||
|
# CONFIG_SND_ECHO3G is not set
|
||||||
|
# CONFIG_SND_INDIGO is not set
|
||||||
|
# CONFIG_SND_INDIGOIO is not set
|
||||||
|
# CONFIG_SND_INDIGODJ is not set
|
||||||
# CONFIG_SND_EMU10K1 is not set
|
# CONFIG_SND_EMU10K1 is not set
|
||||||
# CONFIG_SND_EMU10K1X is not set
|
# CONFIG_SND_EMU10K1X is not set
|
||||||
# CONFIG_SND_ENS1370 is not set
|
# CONFIG_SND_ENS1370 is not set
|
||||||
|
@ -1026,6 +1057,17 @@ CONFIG_SND_VERBOSE_PROCFS=y
|
||||||
CONFIG_SND_POWERMAC=m
|
CONFIG_SND_POWERMAC=m
|
||||||
CONFIG_SND_POWERMAC_AUTO_DRC=y
|
CONFIG_SND_POWERMAC_AUTO_DRC=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Apple Onboard Audio driver
|
||||||
|
#
|
||||||
|
CONFIG_SND_AOA=m
|
||||||
|
CONFIG_SND_AOA_FABRIC_LAYOUT=m
|
||||||
|
CONFIG_SND_AOA_ONYX=m
|
||||||
|
CONFIG_SND_AOA_TAS=m
|
||||||
|
CONFIG_SND_AOA_TOONIE=m
|
||||||
|
CONFIG_SND_AOA_SOUNDBUS=m
|
||||||
|
CONFIG_SND_AOA_SOUNDBUS_I2S=m
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB devices
|
# USB devices
|
||||||
#
|
#
|
||||||
|
@ -1060,6 +1102,7 @@ CONFIG_USB_DEVICEFS=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||||
|
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||||
|
@ -1110,9 +1153,7 @@ CONFIG_USB_HIDDEV=y
|
||||||
# CONFIG_USB_ACECAD is not set
|
# CONFIG_USB_ACECAD is not set
|
||||||
# CONFIG_USB_KBTAB is not set
|
# CONFIG_USB_KBTAB is not set
|
||||||
# CONFIG_USB_POWERMATE is not set
|
# CONFIG_USB_POWERMATE is not set
|
||||||
# CONFIG_USB_MTOUCH is not set
|
# CONFIG_USB_TOUCHSCREEN is not set
|
||||||
# CONFIG_USB_ITMTOUCH is not set
|
|
||||||
# CONFIG_USB_EGALAX is not set
|
|
||||||
# CONFIG_USB_YEALINK is not set
|
# CONFIG_USB_YEALINK is not set
|
||||||
# CONFIG_USB_XPAD is not set
|
# CONFIG_USB_XPAD is not set
|
||||||
# CONFIG_USB_ATI_REMOTE is not set
|
# CONFIG_USB_ATI_REMOTE is not set
|
||||||
|
@ -1155,6 +1196,7 @@ CONFIG_USB_SERIAL=m
|
||||||
CONFIG_USB_SERIAL_GENERIC=y
|
CONFIG_USB_SERIAL_GENERIC=y
|
||||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||||
|
# CONFIG_USB_SERIAL_ARK3116 is not set
|
||||||
CONFIG_USB_SERIAL_BELKIN=m
|
CONFIG_USB_SERIAL_BELKIN=m
|
||||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||||
|
@ -1162,6 +1204,7 @@ CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||||
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
CONFIG_USB_SERIAL_CYPRESS_M8=m
|
||||||
CONFIG_USB_SERIAL_EMPEG=m
|
CONFIG_USB_SERIAL_EMPEG=m
|
||||||
CONFIG_USB_SERIAL_FTDI_SIO=m
|
CONFIG_USB_SERIAL_FTDI_SIO=m
|
||||||
|
# CONFIG_USB_SERIAL_FUNSOFT is not set
|
||||||
CONFIG_USB_SERIAL_VISOR=m
|
CONFIG_USB_SERIAL_VISOR=m
|
||||||
CONFIG_USB_SERIAL_IPAQ=m
|
CONFIG_USB_SERIAL_IPAQ=m
|
||||||
CONFIG_USB_SERIAL_IR=m
|
CONFIG_USB_SERIAL_IR=m
|
||||||
|
@ -1191,9 +1234,11 @@ CONFIG_USB_SERIAL_PL2303=m
|
||||||
# CONFIG_USB_SERIAL_HP4X is not set
|
# CONFIG_USB_SERIAL_HP4X is not set
|
||||||
CONFIG_USB_SERIAL_SAFE=m
|
CONFIG_USB_SERIAL_SAFE=m
|
||||||
CONFIG_USB_SERIAL_SAFE_PADDED=y
|
CONFIG_USB_SERIAL_SAFE_PADDED=y
|
||||||
|
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
|
||||||
CONFIG_USB_SERIAL_TI=m
|
CONFIG_USB_SERIAL_TI=m
|
||||||
CONFIG_USB_SERIAL_CYBERJACK=m
|
CONFIG_USB_SERIAL_CYBERJACK=m
|
||||||
CONFIG_USB_SERIAL_XIRCOM=m
|
CONFIG_USB_SERIAL_XIRCOM=m
|
||||||
|
# CONFIG_USB_SERIAL_OPTION is not set
|
||||||
CONFIG_USB_SERIAL_OMNINET=m
|
CONFIG_USB_SERIAL_OMNINET=m
|
||||||
CONFIG_USB_EZUSB=y
|
CONFIG_USB_EZUSB=y
|
||||||
|
|
||||||
|
@ -1207,10 +1252,12 @@ CONFIG_USB_EZUSB=y
|
||||||
# CONFIG_USB_LEGOTOWER is not set
|
# CONFIG_USB_LEGOTOWER is not set
|
||||||
# CONFIG_USB_LCD is not set
|
# CONFIG_USB_LCD is not set
|
||||||
# CONFIG_USB_LED is not set
|
# CONFIG_USB_LED is not set
|
||||||
|
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||||
# CONFIG_USB_CYTHERM is not set
|
# CONFIG_USB_CYTHERM is not set
|
||||||
# CONFIG_USB_PHIDGETKIT is not set
|
# CONFIG_USB_PHIDGETKIT is not set
|
||||||
# CONFIG_USB_PHIDGETSERVO is not set
|
# CONFIG_USB_PHIDGETSERVO is not set
|
||||||
# CONFIG_USB_IDMOUSE is not set
|
# CONFIG_USB_IDMOUSE is not set
|
||||||
|
CONFIG_USB_APPLEDISPLAY=m
|
||||||
# CONFIG_USB_SISUSBVGA is not set
|
# CONFIG_USB_SISUSBVGA is not set
|
||||||
# CONFIG_USB_LD is not set
|
# CONFIG_USB_LD is not set
|
||||||
# CONFIG_USB_TEST is not set
|
# CONFIG_USB_TEST is not set
|
||||||
|
@ -1234,6 +1281,14 @@ CONFIG_USB_EZUSB=y
|
||||||
#
|
#
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# LED drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# LED Triggers
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# InfiniBand support
|
# InfiniBand support
|
||||||
#
|
#
|
||||||
|
@ -1248,6 +1303,19 @@ CONFIG_USB_EZUSB=y
|
||||||
#
|
#
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Engine support
|
||||||
|
#
|
||||||
|
# CONFIG_DMA_ENGINE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Clients
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Devices
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
#
|
#
|
||||||
|
@ -1273,7 +1341,6 @@ CONFIG_REISERFS_FS_SECURITY=y
|
||||||
# CONFIG_JFS_FS is not set
|
# CONFIG_JFS_FS is not set
|
||||||
CONFIG_FS_POSIX_ACL=y
|
CONFIG_FS_POSIX_ACL=y
|
||||||
CONFIG_XFS_FS=m
|
CONFIG_XFS_FS=m
|
||||||
CONFIG_XFS_EXPORT=y
|
|
||||||
# CONFIG_XFS_QUOTA is not set
|
# CONFIG_XFS_QUOTA is not set
|
||||||
CONFIG_XFS_SECURITY=y
|
CONFIG_XFS_SECURITY=y
|
||||||
CONFIG_XFS_POSIX_ACL=y
|
CONFIG_XFS_POSIX_ACL=y
|
||||||
|
@ -1282,6 +1349,7 @@ CONFIG_XFS_POSIX_ACL=y
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
CONFIG_INOTIFY_USER=y
|
||||||
# CONFIG_QUOTA is not set
|
# CONFIG_QUOTA is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_AUTOFS_FS=m
|
CONFIG_AUTOFS_FS=m
|
||||||
|
@ -1363,7 +1431,9 @@ CONFIG_RPCSEC_GSS_KRB5=y
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
# CONFIG_CIFS_STATS is not set
|
# CONFIG_CIFS_STATS is not set
|
||||||
|
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||||
# CONFIG_CIFS_XATTR is not set
|
# CONFIG_CIFS_XATTR is not set
|
||||||
|
# CONFIG_CIFS_DEBUG2 is not set
|
||||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||||
# CONFIG_NCP_FS is not set
|
# CONFIG_NCP_FS is not set
|
||||||
# CONFIG_CODA_FS is not set
|
# CONFIG_CODA_FS is not set
|
||||||
|
@ -1444,6 +1514,9 @@ CONFIG_CRC32=y
|
||||||
CONFIG_LIBCRC32C=m
|
CONFIG_LIBCRC32C=m
|
||||||
CONFIG_ZLIB_INFLATE=y
|
CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_ZLIB_DEFLATE=m
|
CONFIG_ZLIB_DEFLATE=m
|
||||||
|
CONFIG_TEXTSEARCH=y
|
||||||
|
CONFIG_TEXTSEARCH_KMP=m
|
||||||
|
CONFIG_PLIST=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Instrumentation Support
|
# Instrumentation Support
|
||||||
|
@ -1457,14 +1530,19 @@ CONFIG_OPROFILE=y
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
CONFIG_DEBUG_MUTEXES=y
|
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||||
|
# CONFIG_RT_MUTEX_TESTER is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
CONFIG_DEBUG_MUTEXES=y
|
||||||
|
# CONFIG_DEBUG_RWSEMS is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
|
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
|
@ -1476,11 +1554,7 @@ CONFIG_FORCED_INLINING=y
|
||||||
# CONFIG_DEBUGGER is not set
|
# CONFIG_DEBUGGER is not set
|
||||||
CONFIG_IRQSTACKS=y
|
CONFIG_IRQSTACKS=y
|
||||||
CONFIG_BOOTX_TEXT=y
|
CONFIG_BOOTX_TEXT=y
|
||||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
|
|
@ -1,16 +1,18 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.17-rc1
|
# Linux kernel version: 2.6.18-rc3
|
||||||
# Wed Apr 19 11:46:44 2006
|
# Tue Aug 8 09:15:46 2006
|
||||||
#
|
#
|
||||||
CONFIG_PPC64=y
|
CONFIG_PPC64=y
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_PPC_MERGE=y
|
CONFIG_PPC_MERGE=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_IRQ_PER_CPU=y
|
||||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
CONFIG_GENERIC_FIND_NEXT_BIT=y
|
||||||
CONFIG_PPC=y
|
CONFIG_PPC=y
|
||||||
CONFIG_EARLY_PRINTK=y
|
CONFIG_EARLY_PRINTK=y
|
||||||
CONFIG_COMPAT=y
|
CONFIG_COMPAT=y
|
||||||
|
@ -34,6 +36,7 @@ CONFIG_PPC_STD_MMU=y
|
||||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=32
|
CONFIG_NR_CPUS=32
|
||||||
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
|
@ -51,6 +54,7 @@ CONFIG_SWAP=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
# CONFIG_TASKSTATS is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
CONFIG_AUDITSYSCALL=y
|
CONFIG_AUDITSYSCALL=y
|
||||||
|
@ -69,10 +73,12 @@ CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
CONFIG_ELF_CORE=y
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_RT_MUTEXES=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_SLAB=y
|
CONFIG_SLAB=y
|
||||||
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
|
@ -113,10 +119,14 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||||
CONFIG_PPC_ISERIES=y
|
CONFIG_PPC_ISERIES=y
|
||||||
# CONFIG_EMBEDDED6xx is not set
|
# CONFIG_EMBEDDED6xx is not set
|
||||||
# CONFIG_APUS is not set
|
# CONFIG_APUS is not set
|
||||||
|
# CONFIG_PPC_CELL is not set
|
||||||
|
# CONFIG_PPC_CELL_NATIVE is not set
|
||||||
|
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||||
# CONFIG_PPC_RTAS is not set
|
# CONFIG_PPC_RTAS is not set
|
||||||
# CONFIG_MMIO_NVRAM is not set
|
# CONFIG_MMIO_NVRAM is not set
|
||||||
CONFIG_IBMVIO=y
|
CONFIG_IBMVIO=y
|
||||||
# CONFIG_PPC_MPC106 is not set
|
# CONFIG_PPC_MPC106 is not set
|
||||||
|
# CONFIG_PPC_970_NAP is not set
|
||||||
# CONFIG_CPU_FREQ is not set
|
# CONFIG_CPU_FREQ is not set
|
||||||
# CONFIG_WANT_EARLY_SERIAL is not set
|
# CONFIG_WANT_EARLY_SERIAL is not set
|
||||||
|
|
||||||
|
@ -135,6 +145,7 @@ CONFIG_BINFMT_ELF=y
|
||||||
# CONFIG_BINFMT_MISC is not set
|
# CONFIG_BINFMT_MISC is not set
|
||||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||||
CONFIG_IOMMU_VMERGE=y
|
CONFIG_IOMMU_VMERGE=y
|
||||||
|
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||||
CONFIG_IRQ_ALL_CPUS=y
|
CONFIG_IRQ_ALL_CPUS=y
|
||||||
CONFIG_LPARCFG=y
|
CONFIG_LPARCFG=y
|
||||||
# CONFIG_NUMA is not set
|
# CONFIG_NUMA is not set
|
||||||
|
@ -149,6 +160,7 @@ CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
# CONFIG_SPARSEMEM_STATIC is not set
|
# CONFIG_SPARSEMEM_STATIC is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
|
CONFIG_RESOURCES_64BIT=y
|
||||||
# CONFIG_PPC_64K_PAGES is not set
|
# CONFIG_PPC_64K_PAGES is not set
|
||||||
# CONFIG_SCHED_SMT is not set
|
# CONFIG_SCHED_SMT is not set
|
||||||
CONFIG_PROC_DEVICETREE=y
|
CONFIG_PROC_DEVICETREE=y
|
||||||
|
@ -164,6 +176,7 @@ CONFIG_GENERIC_ISA_DMA=y
|
||||||
# CONFIG_PPC_INDIRECT_PCI is not set
|
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
CONFIG_PCI_DOMAINS=y
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
# CONFIG_PCIEPORTBUS is not set
|
||||||
# CONFIG_PCI_DEBUG is not set
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -207,6 +220,8 @@ CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_XFRM_TUNNEL=m
|
CONFIG_INET_XFRM_TUNNEL=m
|
||||||
CONFIG_INET_TUNNEL=y
|
CONFIG_INET_TUNNEL=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||||
CONFIG_INET_DIAG=y
|
CONFIG_INET_DIAG=y
|
||||||
CONFIG_INET_TCP_DIAG=y
|
CONFIG_INET_TCP_DIAG=y
|
||||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
@ -219,6 +234,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||||
# CONFIG_INET6_TUNNEL is not set
|
# CONFIG_INET6_TUNNEL is not set
|
||||||
|
# CONFIG_NETWORK_SECMARK is not set
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
# CONFIG_NETFILTER_DEBUG is not set
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
@ -246,9 +262,11 @@ CONFIG_NETFILTER_XT_MATCH_MARK=m
|
||||||
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
|
# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
|
||||||
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
|
# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
|
||||||
|
# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
CONFIG_NETFILTER_XT_MATCH_REALM=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_SCTP=m
|
CONFIG_NETFILTER_XT_MATCH_SCTP=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
CONFIG_NETFILTER_XT_MATCH_STATE=m
|
||||||
|
# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
|
||||||
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
CONFIG_NETFILTER_XT_MATCH_STRING=m
|
||||||
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
|
||||||
|
|
||||||
|
@ -267,6 +285,7 @@ CONFIG_IP_NF_TFTP=m
|
||||||
CONFIG_IP_NF_AMANDA=m
|
CONFIG_IP_NF_AMANDA=m
|
||||||
# CONFIG_IP_NF_PPTP is not set
|
# CONFIG_IP_NF_PPTP is not set
|
||||||
# CONFIG_IP_NF_H323 is not set
|
# CONFIG_IP_NF_H323 is not set
|
||||||
|
# CONFIG_IP_NF_SIP is not set
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
CONFIG_IP_NF_IPTABLES=m
|
CONFIG_IP_NF_IPTABLES=m
|
||||||
CONFIG_IP_NF_MATCH_IPRANGE=m
|
CONFIG_IP_NF_MATCH_IPRANGE=m
|
||||||
|
@ -360,6 +379,7 @@ CONFIG_STANDALONE=y
|
||||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
CONFIG_FW_LOADER=m
|
CONFIG_FW_LOADER=m
|
||||||
# CONFIG_DEBUG_DRIVER is not set
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Connector - unified userspace <-> kernelspace linker
|
# Connector - unified userspace <-> kernelspace linker
|
||||||
|
@ -396,6 +416,7 @@ CONFIG_BLK_DEV_NBD=m
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||||
|
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
# CONFIG_CDROM_PKTCDVD is not set
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
@ -453,6 +474,7 @@ CONFIG_SCSI_FC_ATTRS=y
|
||||||
# CONFIG_MEGARAID_LEGACY is not set
|
# CONFIG_MEGARAID_LEGACY is not set
|
||||||
# CONFIG_MEGARAID_SAS is not set
|
# CONFIG_MEGARAID_SAS is not set
|
||||||
# CONFIG_SCSI_SATA is not set
|
# CONFIG_SCSI_SATA is not set
|
||||||
|
# CONFIG_SCSI_HPTIOP is not set
|
||||||
# CONFIG_SCSI_BUSLOGIC is not set
|
# CONFIG_SCSI_BUSLOGIC is not set
|
||||||
# CONFIG_SCSI_DMX3191D is not set
|
# CONFIG_SCSI_DMX3191D is not set
|
||||||
# CONFIG_SCSI_EATA is not set
|
# CONFIG_SCSI_EATA is not set
|
||||||
|
@ -464,7 +486,6 @@ CONFIG_SCSI_IBMVSCSI=m
|
||||||
# CONFIG_SCSI_INIA100 is not set
|
# CONFIG_SCSI_INIA100 is not set
|
||||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||||
# CONFIG_SCSI_IPR is not set
|
# CONFIG_SCSI_IPR is not set
|
||||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
|
||||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
# CONFIG_SCSI_QLA_FC is not set
|
# CONFIG_SCSI_QLA_FC is not set
|
||||||
# CONFIG_SCSI_LPFC is not set
|
# CONFIG_SCSI_LPFC is not set
|
||||||
|
@ -481,9 +502,7 @@ CONFIG_MD_LINEAR=y
|
||||||
CONFIG_MD_RAID0=y
|
CONFIG_MD_RAID0=y
|
||||||
CONFIG_MD_RAID1=y
|
CONFIG_MD_RAID1=y
|
||||||
CONFIG_MD_RAID10=m
|
CONFIG_MD_RAID10=m
|
||||||
CONFIG_MD_RAID5=y
|
# CONFIG_MD_RAID456 is not set
|
||||||
# CONFIG_MD_RAID5_RESHAPE is not set
|
|
||||||
CONFIG_MD_RAID6=m
|
|
||||||
CONFIG_MD_MULTIPATH=m
|
CONFIG_MD_MULTIPATH=m
|
||||||
CONFIG_MD_FAULTY=m
|
CONFIG_MD_FAULTY=m
|
||||||
CONFIG_BLK_DEV_DM=y
|
CONFIG_BLK_DEV_DM=y
|
||||||
|
@ -596,6 +615,7 @@ CONFIG_E1000=m
|
||||||
# CONFIG_CHELSIO_T1 is not set
|
# CONFIG_CHELSIO_T1 is not set
|
||||||
# CONFIG_IXGB is not set
|
# CONFIG_IXGB is not set
|
||||||
# CONFIG_S2IO is not set
|
# CONFIG_S2IO is not set
|
||||||
|
# CONFIG_MYRI10GE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Token Ring devices
|
# Token Ring devices
|
||||||
|
@ -696,6 +716,7 @@ CONFIG_SERIAL_ICOM=m
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
# CONFIG_BRIQ_PANEL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IPMI
|
# IPMI
|
||||||
|
@ -706,6 +727,7 @@ CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# Watchdog Cards
|
# Watchdog Cards
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
CONFIG_GEN_RTC=y
|
CONFIG_GEN_RTC=y
|
||||||
# CONFIG_GEN_RTC_X is not set
|
# CONFIG_GEN_RTC_X is not set
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
|
@ -741,7 +763,6 @@ CONFIG_MAX_RAW_DEVS=256
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
# CONFIG_W1 is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Hardware Monitoring support
|
# Hardware Monitoring support
|
||||||
|
@ -757,6 +778,7 @@ CONFIG_MAX_RAW_DEVS=256
|
||||||
# Multimedia devices
|
# Multimedia devices
|
||||||
#
|
#
|
||||||
# CONFIG_VIDEO_DEV is not set
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
CONFIG_VIDEO_V4L2=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Digital Video Broadcasting Devices
|
# Digital Video Broadcasting Devices
|
||||||
|
@ -766,7 +788,9 @@ CONFIG_MAX_RAW_DEVS=256
|
||||||
#
|
#
|
||||||
# Graphics support
|
# Graphics support
|
||||||
#
|
#
|
||||||
|
CONFIG_FIRMWARE_EDID=y
|
||||||
# CONFIG_FB is not set
|
# CONFIG_FB is not set
|
||||||
|
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Sound
|
# Sound
|
||||||
|
@ -800,6 +824,14 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
#
|
#
|
||||||
# CONFIG_NEW_LEDS is not set
|
# CONFIG_NEW_LEDS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# LED drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# LED Triggers
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# InfiniBand support
|
# InfiniBand support
|
||||||
#
|
#
|
||||||
|
@ -814,6 +846,19 @@ CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
#
|
#
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Engine support
|
||||||
|
#
|
||||||
|
# CONFIG_DMA_ENGINE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Clients
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Devices
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
#
|
#
|
||||||
|
@ -843,7 +888,6 @@ CONFIG_JFS_SECURITY=y
|
||||||
# CONFIG_JFS_STATISTICS is not set
|
# CONFIG_JFS_STATISTICS is not set
|
||||||
CONFIG_FS_POSIX_ACL=y
|
CONFIG_FS_POSIX_ACL=y
|
||||||
CONFIG_XFS_FS=m
|
CONFIG_XFS_FS=m
|
||||||
CONFIG_XFS_EXPORT=y
|
|
||||||
# CONFIG_XFS_QUOTA is not set
|
# CONFIG_XFS_QUOTA is not set
|
||||||
CONFIG_XFS_SECURITY=y
|
CONFIG_XFS_SECURITY=y
|
||||||
CONFIG_XFS_POSIX_ACL=y
|
CONFIG_XFS_POSIX_ACL=y
|
||||||
|
@ -852,6 +896,7 @@ CONFIG_XFS_POSIX_ACL=y
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
CONFIG_INOTIFY_USER=y
|
||||||
# CONFIG_QUOTA is not set
|
# CONFIG_QUOTA is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
CONFIG_AUTOFS_FS=m
|
CONFIG_AUTOFS_FS=m
|
||||||
|
@ -933,8 +978,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
# CONFIG_CIFS_STATS is not set
|
# CONFIG_CIFS_STATS is not set
|
||||||
|
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||||
CONFIG_CIFS_XATTR=y
|
CONFIG_CIFS_XATTR=y
|
||||||
CONFIG_CIFS_POSIX=y
|
CONFIG_CIFS_POSIX=y
|
||||||
|
# CONFIG_CIFS_DEBUG2 is not set
|
||||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||||
# CONFIG_NCP_FS is not set
|
# CONFIG_NCP_FS is not set
|
||||||
# CONFIG_CODA_FS is not set
|
# CONFIG_CODA_FS is not set
|
||||||
|
@ -1013,10 +1060,12 @@ CONFIG_TEXTSEARCH=y
|
||||||
CONFIG_TEXTSEARCH_KMP=m
|
CONFIG_TEXTSEARCH_KMP=m
|
||||||
CONFIG_TEXTSEARCH_BM=m
|
CONFIG_TEXTSEARCH_BM=m
|
||||||
CONFIG_TEXTSEARCH_FSM=m
|
CONFIG_TEXTSEARCH_FSM=m
|
||||||
|
CONFIG_PLIST=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Instrumentation Support
|
# Instrumentation Support
|
||||||
#
|
#
|
||||||
|
# CONFIG_PROFILING is not set
|
||||||
# CONFIG_KPROBES is not set
|
# CONFIG_KPROBES is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1024,14 +1073,19 @@ CONFIG_TEXTSEARCH_FSM=m
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
# CONFIG_DEBUG_MUTEXES is not set
|
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||||
|
# CONFIG_RT_MUTEX_TESTER is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
# CONFIG_DEBUG_MUTEXES is not set
|
||||||
|
# CONFIG_DEBUG_RWSEMS is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
|
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
|
@ -1042,11 +1096,7 @@ CONFIG_DEBUG_STACKOVERFLOW=y
|
||||||
CONFIG_DEBUG_STACK_USAGE=y
|
CONFIG_DEBUG_STACK_USAGE=y
|
||||||
# CONFIG_DEBUGGER is not set
|
# CONFIG_DEBUGGER is not set
|
||||||
CONFIG_IRQSTACKS=y
|
CONFIG_IRQSTACKS=y
|
||||||
# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
|
# CONFIG_PPC_EARLY_DEBUG is not set
|
||||||
# CONFIG_PPC_EARLY_DEBUG_G5 is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_RTAS is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
|
|
||||||
# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.17-rc4
|
# Linux kernel version: 2.6.18-rc3
|
||||||
# Sun May 28 07:26:56 2006
|
# Tue Aug 8 09:14:48 2006
|
||||||
#
|
#
|
||||||
CONFIG_PPC64=y
|
CONFIG_PPC64=y
|
||||||
CONFIG_64BIT=y
|
CONFIG_64BIT=y
|
||||||
CONFIG_PPC_MERGE=y
|
CONFIG_PPC_MERGE=y
|
||||||
CONFIG_MMU=y
|
CONFIG_MMU=y
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_IRQ_PER_CPU=y
|
||||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
@ -35,6 +36,7 @@ CONFIG_PPC_STD_MMU=y
|
||||||
CONFIG_VIRT_CPU_ACCOUNTING=y
|
CONFIG_VIRT_CPU_ACCOUNTING=y
|
||||||
CONFIG_SMP=y
|
CONFIG_SMP=y
|
||||||
CONFIG_NR_CPUS=128
|
CONFIG_NR_CPUS=128
|
||||||
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
#
|
#
|
||||||
# Code maturity level options
|
# Code maturity level options
|
||||||
|
@ -52,6 +54,7 @@ CONFIG_SWAP=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_POSIX_MQUEUE=y
|
CONFIG_POSIX_MQUEUE=y
|
||||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
# CONFIG_TASKSTATS is not set
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
CONFIG_AUDIT=y
|
CONFIG_AUDIT=y
|
||||||
CONFIG_AUDITSYSCALL=y
|
CONFIG_AUDITSYSCALL=y
|
||||||
|
@ -70,10 +73,12 @@ CONFIG_PRINTK=y
|
||||||
CONFIG_BUG=y
|
CONFIG_BUG=y
|
||||||
CONFIG_ELF_CORE=y
|
CONFIG_ELF_CORE=y
|
||||||
CONFIG_BASE_FULL=y
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_RT_MUTEXES=y
|
||||||
CONFIG_FUTEX=y
|
CONFIG_FUTEX=y
|
||||||
CONFIG_EPOLL=y
|
CONFIG_EPOLL=y
|
||||||
CONFIG_SHMEM=y
|
CONFIG_SHMEM=y
|
||||||
CONFIG_SLAB=y
|
CONFIG_SLAB=y
|
||||||
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
# CONFIG_SLOB is not set
|
# CONFIG_SLOB is not set
|
||||||
|
@ -118,6 +123,9 @@ CONFIG_PPC_PSERIES=y
|
||||||
# CONFIG_PPC_PMAC is not set
|
# CONFIG_PPC_PMAC is not set
|
||||||
# CONFIG_PPC_MAPLE is not set
|
# CONFIG_PPC_MAPLE is not set
|
||||||
# CONFIG_PPC_CELL is not set
|
# CONFIG_PPC_CELL is not set
|
||||||
|
# CONFIG_PPC_CELL_NATIVE is not set
|
||||||
|
# CONFIG_PPC_IBM_CELL_BLADE is not set
|
||||||
|
# CONFIG_UDBG_RTAS_CONSOLE is not set
|
||||||
CONFIG_XICS=y
|
CONFIG_XICS=y
|
||||||
# CONFIG_U3_DART is not set
|
# CONFIG_U3_DART is not set
|
||||||
CONFIG_MPIC=y
|
CONFIG_MPIC=y
|
||||||
|
@ -149,6 +157,7 @@ CONFIG_BINFMT_MISC=m
|
||||||
CONFIG_FORCE_MAX_ZONEORDER=13
|
CONFIG_FORCE_MAX_ZONEORDER=13
|
||||||
CONFIG_IOMMU_VMERGE=y
|
CONFIG_IOMMU_VMERGE=y
|
||||||
CONFIG_HOTPLUG_CPU=y
|
CONFIG_HOTPLUG_CPU=y
|
||||||
|
CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
|
||||||
CONFIG_KEXEC=y
|
CONFIG_KEXEC=y
|
||||||
# CONFIG_CRASH_DUMP is not set
|
# CONFIG_CRASH_DUMP is not set
|
||||||
CONFIG_IRQ_ALL_CPUS=y
|
CONFIG_IRQ_ALL_CPUS=y
|
||||||
|
@ -173,6 +182,7 @@ CONFIG_SPARSEMEM_EXTREME=y
|
||||||
# CONFIG_MEMORY_HOTPLUG is not set
|
# CONFIG_MEMORY_HOTPLUG is not set
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
CONFIG_MIGRATION=y
|
CONFIG_MIGRATION=y
|
||||||
|
CONFIG_RESOURCES_64BIT=y
|
||||||
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID=y
|
||||||
# CONFIG_PPC_64K_PAGES is not set
|
# CONFIG_PPC_64K_PAGES is not set
|
||||||
CONFIG_SCHED_SMT=y
|
CONFIG_SCHED_SMT=y
|
||||||
|
@ -190,6 +200,7 @@ CONFIG_PPC_I8259=y
|
||||||
# CONFIG_PPC_INDIRECT_PCI is not set
|
# CONFIG_PPC_INDIRECT_PCI is not set
|
||||||
CONFIG_PCI=y
|
CONFIG_PCI=y
|
||||||
CONFIG_PCI_DOMAINS=y
|
CONFIG_PCI_DOMAINS=y
|
||||||
|
# CONFIG_PCIEPORTBUS is not set
|
||||||
# CONFIG_PCI_DEBUG is not set
|
# CONFIG_PCI_DEBUG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -238,6 +249,8 @@ CONFIG_INET_ESP=m
|
||||||
CONFIG_INET_IPCOMP=m
|
CONFIG_INET_IPCOMP=m
|
||||||
CONFIG_INET_XFRM_TUNNEL=m
|
CONFIG_INET_XFRM_TUNNEL=m
|
||||||
CONFIG_INET_TUNNEL=y
|
CONFIG_INET_TUNNEL=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TRANSPORT=y
|
||||||
|
CONFIG_INET_XFRM_MODE_TUNNEL=y
|
||||||
CONFIG_INET_DIAG=y
|
CONFIG_INET_DIAG=y
|
||||||
CONFIG_INET_TCP_DIAG=y
|
CONFIG_INET_TCP_DIAG=y
|
||||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
@ -250,6 +263,7 @@ CONFIG_TCP_CONG_BIC=y
|
||||||
# CONFIG_IPV6 is not set
|
# CONFIG_IPV6 is not set
|
||||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||||
# CONFIG_INET6_TUNNEL is not set
|
# CONFIG_INET6_TUNNEL is not set
|
||||||
|
# CONFIG_NETWORK_SECMARK is not set
|
||||||
CONFIG_NETFILTER=y
|
CONFIG_NETFILTER=y
|
||||||
# CONFIG_NETFILTER_DEBUG is not set
|
# CONFIG_NETFILTER_DEBUG is not set
|
||||||
|
|
||||||
|
@ -277,6 +291,7 @@ CONFIG_IP_NF_TFTP=m
|
||||||
CONFIG_IP_NF_AMANDA=m
|
CONFIG_IP_NF_AMANDA=m
|
||||||
# CONFIG_IP_NF_PPTP is not set
|
# CONFIG_IP_NF_PPTP is not set
|
||||||
# CONFIG_IP_NF_H323 is not set
|
# CONFIG_IP_NF_H323 is not set
|
||||||
|
# CONFIG_IP_NF_SIP is not set
|
||||||
CONFIG_IP_NF_QUEUE=m
|
CONFIG_IP_NF_QUEUE=m
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -316,6 +331,7 @@ CONFIG_LLC=y
|
||||||
# Network testing
|
# Network testing
|
||||||
#
|
#
|
||||||
# CONFIG_NET_PKTGEN is not set
|
# CONFIG_NET_PKTGEN is not set
|
||||||
|
# CONFIG_NET_TCPPROBE is not set
|
||||||
# CONFIG_HAMRADIO is not set
|
# CONFIG_HAMRADIO is not set
|
||||||
# CONFIG_IRDA is not set
|
# CONFIG_IRDA is not set
|
||||||
# CONFIG_BT is not set
|
# CONFIG_BT is not set
|
||||||
|
@ -332,6 +348,7 @@ CONFIG_STANDALONE=y
|
||||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
CONFIG_FW_LOADER=y
|
CONFIG_FW_LOADER=y
|
||||||
# CONFIG_DEBUG_DRIVER is not set
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Connector - unified userspace <-> kernelspace linker
|
# Connector - unified userspace <-> kernelspace linker
|
||||||
|
@ -352,6 +369,7 @@ CONFIG_PARPORT_PC=m
|
||||||
# CONFIG_PARPORT_PC_FIFO is not set
|
# CONFIG_PARPORT_PC_FIFO is not set
|
||||||
# CONFIG_PARPORT_PC_SUPERIO is not set
|
# CONFIG_PARPORT_PC_SUPERIO is not set
|
||||||
# CONFIG_PARPORT_GSC is not set
|
# CONFIG_PARPORT_GSC is not set
|
||||||
|
# CONFIG_PARPORT_AX88796 is not set
|
||||||
# CONFIG_PARPORT_1284 is not set
|
# CONFIG_PARPORT_1284 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -376,6 +394,7 @@ CONFIG_BLK_DEV_NBD=m
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||||
CONFIG_BLK_DEV_RAM_SIZE=65536
|
CONFIG_BLK_DEV_RAM_SIZE=65536
|
||||||
|
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||||
CONFIG_BLK_DEV_INITRD=y
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
# CONFIG_CDROM_PKTCDVD is not set
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
@ -487,6 +506,7 @@ CONFIG_SCSI_SAS_ATTRS=m
|
||||||
# CONFIG_MEGARAID_LEGACY is not set
|
# CONFIG_MEGARAID_LEGACY is not set
|
||||||
# CONFIG_MEGARAID_SAS is not set
|
# CONFIG_MEGARAID_SAS is not set
|
||||||
# CONFIG_SCSI_SATA is not set
|
# CONFIG_SCSI_SATA is not set
|
||||||
|
# CONFIG_SCSI_HPTIOP is not set
|
||||||
# CONFIG_SCSI_BUSLOGIC is not set
|
# CONFIG_SCSI_BUSLOGIC is not set
|
||||||
# CONFIG_SCSI_DMX3191D is not set
|
# CONFIG_SCSI_DMX3191D is not set
|
||||||
# CONFIG_SCSI_EATA is not set
|
# CONFIG_SCSI_EATA is not set
|
||||||
|
@ -508,12 +528,6 @@ CONFIG_SCSI_IPR_TRACE=y
|
||||||
CONFIG_SCSI_IPR_DUMP=y
|
CONFIG_SCSI_IPR_DUMP=y
|
||||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||||
CONFIG_SCSI_QLA_FC=m
|
CONFIG_SCSI_QLA_FC=m
|
||||||
CONFIG_SCSI_QLA2XXX_EMBEDDED_FIRMWARE=y
|
|
||||||
CONFIG_SCSI_QLA21XX=m
|
|
||||||
CONFIG_SCSI_QLA22XX=m
|
|
||||||
CONFIG_SCSI_QLA2300=m
|
|
||||||
CONFIG_SCSI_QLA2322=m
|
|
||||||
CONFIG_SCSI_QLA24XX=m
|
|
||||||
CONFIG_SCSI_LPFC=m
|
CONFIG_SCSI_LPFC=m
|
||||||
# CONFIG_SCSI_DC395x is not set
|
# CONFIG_SCSI_DC395x is not set
|
||||||
# CONFIG_SCSI_DC390T is not set
|
# CONFIG_SCSI_DC390T is not set
|
||||||
|
@ -528,9 +542,7 @@ CONFIG_MD_LINEAR=y
|
||||||
CONFIG_MD_RAID0=y
|
CONFIG_MD_RAID0=y
|
||||||
CONFIG_MD_RAID1=y
|
CONFIG_MD_RAID1=y
|
||||||
CONFIG_MD_RAID10=m
|
CONFIG_MD_RAID10=m
|
||||||
CONFIG_MD_RAID5=y
|
# CONFIG_MD_RAID456 is not set
|
||||||
CONFIG_MD_RAID5_RESHAPE=y
|
|
||||||
CONFIG_MD_RAID6=m
|
|
||||||
CONFIG_MD_MULTIPATH=m
|
CONFIG_MD_MULTIPATH=m
|
||||||
CONFIG_MD_FAULTY=m
|
CONFIG_MD_FAULTY=m
|
||||||
CONFIG_BLK_DEV_DM=y
|
CONFIG_BLK_DEV_DM=y
|
||||||
|
@ -651,6 +663,7 @@ CONFIG_IXGB=m
|
||||||
# CONFIG_IXGB_NAPI is not set
|
# CONFIG_IXGB_NAPI is not set
|
||||||
CONFIG_S2IO=m
|
CONFIG_S2IO=m
|
||||||
# CONFIG_S2IO_NAPI is not set
|
# CONFIG_S2IO_NAPI is not set
|
||||||
|
# CONFIG_MYRI10GE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Token Ring devices
|
# Token Ring devices
|
||||||
|
@ -754,6 +767,7 @@ CONFIG_SERIO_LIBPS2=y
|
||||||
CONFIG_VT=y
|
CONFIG_VT=y
|
||||||
CONFIG_VT_CONSOLE=y
|
CONFIG_VT_CONSOLE=y
|
||||||
CONFIG_HW_CONSOLE=y
|
CONFIG_HW_CONSOLE=y
|
||||||
|
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -776,6 +790,7 @@ CONFIG_SERIAL_JSM=m
|
||||||
CONFIG_UNIX98_PTYS=y
|
CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
# CONFIG_BRIQ_PANEL is not set
|
||||||
# CONFIG_PRINTER is not set
|
# CONFIG_PRINTER is not set
|
||||||
# CONFIG_PPDEV is not set
|
# CONFIG_PPDEV is not set
|
||||||
# CONFIG_TIPAR is not set
|
# CONFIG_TIPAR is not set
|
||||||
|
@ -793,6 +808,7 @@ CONFIG_HVCS=m
|
||||||
# Watchdog Cards
|
# Watchdog Cards
|
||||||
#
|
#
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
CONFIG_GEN_RTC=y
|
CONFIG_GEN_RTC=y
|
||||||
# CONFIG_GEN_RTC_X is not set
|
# CONFIG_GEN_RTC_X is not set
|
||||||
# CONFIG_DTLK is not set
|
# CONFIG_DTLK is not set
|
||||||
|
@ -839,6 +855,7 @@ CONFIG_I2C_ALGOBIT=y
|
||||||
# CONFIG_I2C_I810 is not set
|
# CONFIG_I2C_I810 is not set
|
||||||
# CONFIG_I2C_PIIX4 is not set
|
# CONFIG_I2C_PIIX4 is not set
|
||||||
# CONFIG_I2C_NFORCE2 is not set
|
# CONFIG_I2C_NFORCE2 is not set
|
||||||
|
# CONFIG_I2C_OCORES is not set
|
||||||
# CONFIG_I2C_PARPORT is not set
|
# CONFIG_I2C_PARPORT is not set
|
||||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
# CONFIG_I2C_PROSAVAGE is not set
|
# CONFIG_I2C_PROSAVAGE is not set
|
||||||
|
@ -876,7 +893,6 @@ CONFIG_I2C_ALGOBIT=y
|
||||||
#
|
#
|
||||||
# Dallas's 1-wire bus
|
# Dallas's 1-wire bus
|
||||||
#
|
#
|
||||||
# CONFIG_W1 is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Hardware Monitoring support
|
# Hardware Monitoring support
|
||||||
|
@ -892,6 +908,7 @@ CONFIG_I2C_ALGOBIT=y
|
||||||
# Multimedia devices
|
# Multimedia devices
|
||||||
#
|
#
|
||||||
# CONFIG_VIDEO_DEV is not set
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
CONFIG_VIDEO_V4L2=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Digital Video Broadcasting Devices
|
# Digital Video Broadcasting Devices
|
||||||
|
@ -902,19 +919,19 @@ CONFIG_I2C_ALGOBIT=y
|
||||||
#
|
#
|
||||||
# Graphics support
|
# Graphics support
|
||||||
#
|
#
|
||||||
|
CONFIG_FIRMWARE_EDID=y
|
||||||
CONFIG_FB=y
|
CONFIG_FB=y
|
||||||
CONFIG_FB_CFB_FILLRECT=y
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
CONFIG_FB_CFB_COPYAREA=y
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
CONFIG_FB_MACMODES=y
|
CONFIG_FB_MACMODES=y
|
||||||
CONFIG_FB_FIRMWARE_EDID=y
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
CONFIG_FB_MODE_HELPERS=y
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
CONFIG_FB_TILEBLITTING=y
|
CONFIG_FB_TILEBLITTING=y
|
||||||
# CONFIG_FB_CIRRUS is not set
|
# CONFIG_FB_CIRRUS is not set
|
||||||
# CONFIG_FB_PM2 is not set
|
# CONFIG_FB_PM2 is not set
|
||||||
# CONFIG_FB_CYBER2000 is not set
|
# CONFIG_FB_CYBER2000 is not set
|
||||||
CONFIG_FB_OF=y
|
CONFIG_FB_OF=y
|
||||||
# CONFIG_FB_CT65550 is not set
|
|
||||||
# CONFIG_FB_ASILIANT is not set
|
# CONFIG_FB_ASILIANT is not set
|
||||||
# CONFIG_FB_IMSTT is not set
|
# CONFIG_FB_IMSTT is not set
|
||||||
# CONFIG_FB_VGA16 is not set
|
# CONFIG_FB_VGA16 is not set
|
||||||
|
@ -993,6 +1010,7 @@ CONFIG_USB_DEVICEFS=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
# CONFIG_USB_EHCI_SPLIT_ISO is not set
|
||||||
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
|
||||||
|
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
# CONFIG_USB_OHCI_BIG_ENDIAN is not set
|
||||||
|
@ -1083,10 +1101,12 @@ CONFIG_USB_MON=y
|
||||||
# CONFIG_USB_LEGOTOWER is not set
|
# CONFIG_USB_LEGOTOWER is not set
|
||||||
# CONFIG_USB_LCD is not set
|
# CONFIG_USB_LCD is not set
|
||||||
# CONFIG_USB_LED is not set
|
# CONFIG_USB_LED is not set
|
||||||
|
# CONFIG_USB_CYPRESS_CY7C63 is not set
|
||||||
# CONFIG_USB_CYTHERM is not set
|
# CONFIG_USB_CYTHERM is not set
|
||||||
# CONFIG_USB_PHIDGETKIT is not set
|
# CONFIG_USB_PHIDGETKIT is not set
|
||||||
# CONFIG_USB_PHIDGETSERVO is not set
|
# CONFIG_USB_PHIDGETSERVO is not set
|
||||||
# CONFIG_USB_IDMOUSE is not set
|
# CONFIG_USB_IDMOUSE is not set
|
||||||
|
# CONFIG_USB_APPLEDISPLAY is not set
|
||||||
# CONFIG_USB_SISUSBVGA is not set
|
# CONFIG_USB_SISUSBVGA is not set
|
||||||
# CONFIG_USB_LD is not set
|
# CONFIG_USB_LD is not set
|
||||||
# CONFIG_USB_TEST is not set
|
# CONFIG_USB_TEST is not set
|
||||||
|
@ -1124,12 +1144,14 @@ CONFIG_USB_MON=y
|
||||||
CONFIG_INFINIBAND=m
|
CONFIG_INFINIBAND=m
|
||||||
CONFIG_INFINIBAND_USER_MAD=m
|
CONFIG_INFINIBAND_USER_MAD=m
|
||||||
CONFIG_INFINIBAND_USER_ACCESS=m
|
CONFIG_INFINIBAND_USER_ACCESS=m
|
||||||
|
CONFIG_INFINIBAND_ADDR_TRANS=y
|
||||||
CONFIG_INFINIBAND_MTHCA=m
|
CONFIG_INFINIBAND_MTHCA=m
|
||||||
CONFIG_INFINIBAND_MTHCA_DEBUG=y
|
CONFIG_INFINIBAND_MTHCA_DEBUG=y
|
||||||
CONFIG_INFINIBAND_IPOIB=m
|
CONFIG_INFINIBAND_IPOIB=m
|
||||||
CONFIG_INFINIBAND_IPOIB_DEBUG=y
|
CONFIG_INFINIBAND_IPOIB_DEBUG=y
|
||||||
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
|
# CONFIG_INFINIBAND_IPOIB_DEBUG_DATA is not set
|
||||||
CONFIG_INFINIBAND_SRP=m
|
CONFIG_INFINIBAND_SRP=m
|
||||||
|
# CONFIG_INFINIBAND_ISER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
|
||||||
|
@ -1140,6 +1162,19 @@ CONFIG_INFINIBAND_SRP=m
|
||||||
#
|
#
|
||||||
# CONFIG_RTC_CLASS is not set
|
# CONFIG_RTC_CLASS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Engine support
|
||||||
|
#
|
||||||
|
# CONFIG_DMA_ENGINE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Clients
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# DMA Devices
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
#
|
#
|
||||||
|
@ -1169,15 +1204,16 @@ CONFIG_JFS_SECURITY=y
|
||||||
# CONFIG_JFS_STATISTICS is not set
|
# CONFIG_JFS_STATISTICS is not set
|
||||||
CONFIG_FS_POSIX_ACL=y
|
CONFIG_FS_POSIX_ACL=y
|
||||||
CONFIG_XFS_FS=m
|
CONFIG_XFS_FS=m
|
||||||
CONFIG_XFS_EXPORT=y
|
|
||||||
# CONFIG_XFS_QUOTA is not set
|
# CONFIG_XFS_QUOTA is not set
|
||||||
CONFIG_XFS_SECURITY=y
|
CONFIG_XFS_SECURITY=y
|
||||||
CONFIG_XFS_POSIX_ACL=y
|
CONFIG_XFS_POSIX_ACL=y
|
||||||
# CONFIG_XFS_RT is not set
|
# CONFIG_XFS_RT is not set
|
||||||
CONFIG_OCFS2_FS=m
|
CONFIG_OCFS2_FS=m
|
||||||
|
CONFIG_OCFS2_DEBUG_MASKLOG=y
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
CONFIG_INOTIFY=y
|
CONFIG_INOTIFY=y
|
||||||
|
CONFIG_INOTIFY_USER=y
|
||||||
# CONFIG_QUOTA is not set
|
# CONFIG_QUOTA is not set
|
||||||
CONFIG_DNOTIFY=y
|
CONFIG_DNOTIFY=y
|
||||||
# CONFIG_AUTOFS_FS is not set
|
# CONFIG_AUTOFS_FS is not set
|
||||||
|
@ -1259,8 +1295,10 @@ CONFIG_RPCSEC_GSS_SPKM3=m
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
CONFIG_CIFS=m
|
CONFIG_CIFS=m
|
||||||
# CONFIG_CIFS_STATS is not set
|
# CONFIG_CIFS_STATS is not set
|
||||||
|
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||||
CONFIG_CIFS_XATTR=y
|
CONFIG_CIFS_XATTR=y
|
||||||
CONFIG_CIFS_POSIX=y
|
CONFIG_CIFS_POSIX=y
|
||||||
|
# CONFIG_CIFS_DEBUG2 is not set
|
||||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||||
# CONFIG_NCP_FS is not set
|
# CONFIG_NCP_FS is not set
|
||||||
# CONFIG_CODA_FS is not set
|
# CONFIG_CODA_FS is not set
|
||||||
|
@ -1326,6 +1364,9 @@ CONFIG_CRC32=y
|
||||||
CONFIG_LIBCRC32C=m
|
CONFIG_LIBCRC32C=m
|
||||||
CONFIG_ZLIB_INFLATE=y
|
CONFIG_ZLIB_INFLATE=y
|
||||||
CONFIG_ZLIB_DEFLATE=m
|
CONFIG_ZLIB_DEFLATE=m
|
||||||
|
CONFIG_TEXTSEARCH=y
|
||||||
|
CONFIG_TEXTSEARCH_KMP=m
|
||||||
|
CONFIG_PLIST=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Instrumentation Support
|
# Instrumentation Support
|
||||||
|
@ -1339,14 +1380,19 @@ CONFIG_KPROBES=y
|
||||||
#
|
#
|
||||||
# CONFIG_PRINTK_TIME is not set
|
# CONFIG_PRINTK_TIME is not set
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
CONFIG_LOG_BUF_SHIFT=17
|
CONFIG_LOG_BUF_SHIFT=17
|
||||||
CONFIG_DETECT_SOFTLOCKUP=y
|
CONFIG_DETECT_SOFTLOCKUP=y
|
||||||
# CONFIG_SCHEDSTATS is not set
|
# CONFIG_SCHEDSTATS is not set
|
||||||
# CONFIG_DEBUG_SLAB is not set
|
# CONFIG_DEBUG_SLAB is not set
|
||||||
# CONFIG_DEBUG_MUTEXES is not set
|
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||||
|
# CONFIG_RT_MUTEX_TESTER is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK is not set
|
# CONFIG_DEBUG_SPINLOCK is not set
|
||||||
|
# CONFIG_DEBUG_MUTEXES is not set
|
||||||
|
# CONFIG_DEBUG_RWSEMS is not set
|
||||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||||
|
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||||
# CONFIG_DEBUG_KOBJECT is not set
|
# CONFIG_DEBUG_KOBJECT is not set
|
||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
CONFIG_DEBUG_FS=y
|
CONFIG_DEBUG_FS=y
|
||||||
|
|
|
@ -67,9 +67,9 @@ pci64-$(CONFIG_PPC64) += pci_64.o pci_dn.o pci_iommu.o \
|
||||||
pci_direct_iommu.o iomap.o
|
pci_direct_iommu.o iomap.o
|
||||||
pci32-$(CONFIG_PPC32) := pci_32.o
|
pci32-$(CONFIG_PPC32) := pci_32.o
|
||||||
obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y)
|
obj-$(CONFIG_PCI) += $(pci64-y) $(pci32-y)
|
||||||
kexec-$(CONFIG_PPC64) := machine_kexec_64.o crash.o
|
kexec-$(CONFIG_PPC64) := machine_kexec_64.o
|
||||||
kexec-$(CONFIG_PPC32) := machine_kexec_32.o
|
kexec-$(CONFIG_PPC32) := machine_kexec_32.o
|
||||||
obj-$(CONFIG_KEXEC) += machine_kexec.o $(kexec-y)
|
obj-$(CONFIG_KEXEC) += machine_kexec.o crash.o $(kexec-y)
|
||||||
|
|
||||||
ifeq ($(CONFIG_PPC_ISERIES),y)
|
ifeq ($(CONFIG_PPC_ISERIES),y)
|
||||||
$(obj)/head_64.o: $(obj)/lparmap.s
|
$(obj)/head_64.o: $(obj)/lparmap.s
|
||||||
|
|
|
@ -76,6 +76,8 @@ _GLOBAL(__setup_cpu_ppc970)
|
||||||
mfspr r0,SPRN_HID0
|
mfspr r0,SPRN_HID0
|
||||||
li r11,5 /* clear DOZE and SLEEP */
|
li r11,5 /* clear DOZE and SLEEP */
|
||||||
rldimi r0,r11,52,8 /* set NAP and DPM */
|
rldimi r0,r11,52,8 /* set NAP and DPM */
|
||||||
|
li r11,0
|
||||||
|
rldimi r0,r11,32,31 /* clear EN_ATTN */
|
||||||
mtspr SPRN_HID0,r0
|
mtspr SPRN_HID0,r0
|
||||||
mfspr r0,SPRN_HID0
|
mfspr r0,SPRN_HID0
|
||||||
mfspr r0,SPRN_HID0
|
mfspr r0,SPRN_HID0
|
||||||
|
|
|
@ -44,6 +44,7 @@
|
||||||
/* This keeps a track of which one is crashing cpu. */
|
/* This keeps a track of which one is crashing cpu. */
|
||||||
int crashing_cpu = -1;
|
int crashing_cpu = -1;
|
||||||
static cpumask_t cpus_in_crash = CPU_MASK_NONE;
|
static cpumask_t cpus_in_crash = CPU_MASK_NONE;
|
||||||
|
cpumask_t cpus_in_sr = CPU_MASK_NONE;
|
||||||
|
|
||||||
static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
|
static u32 *append_elf_note(u32 *buf, char *name, unsigned type, void *data,
|
||||||
size_t data_len)
|
size_t data_len)
|
||||||
|
@ -139,7 +140,13 @@ void crash_ipi_callback(struct pt_regs *regs)
|
||||||
|
|
||||||
if (ppc_md.kexec_cpu_down)
|
if (ppc_md.kexec_cpu_down)
|
||||||
ppc_md.kexec_cpu_down(1, 1);
|
ppc_md.kexec_cpu_down(1, 1);
|
||||||
|
|
||||||
|
#ifdef CONFIG_PPC64
|
||||||
kexec_smp_wait();
|
kexec_smp_wait();
|
||||||
|
#else
|
||||||
|
for (;;); /* FIXME */
|
||||||
|
#endif
|
||||||
|
|
||||||
/* NOTREACHED */
|
/* NOTREACHED */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +262,11 @@ static void crash_kexec_prepare_cpus(int cpu)
|
||||||
*
|
*
|
||||||
* do this if kexec in setup.c ?
|
* do this if kexec in setup.c ?
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_PPC64
|
||||||
smp_release_cpus();
|
smp_release_cpus();
|
||||||
|
#else
|
||||||
|
/* FIXME */
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void crash_kexec_secondary(struct pt_regs *regs)
|
void crash_kexec_secondary(struct pt_regs *regs)
|
||||||
|
|
|
@ -693,7 +693,7 @@ unsigned int irq_radix_revmap(struct irq_host *host,
|
||||||
/* If not there, try to insert it */
|
/* If not there, try to insert it */
|
||||||
virq = irq_find_mapping(host, hwirq);
|
virq = irq_find_mapping(host, hwirq);
|
||||||
if (virq != NO_IRQ)
|
if (virq != NO_IRQ)
|
||||||
radix_tree_insert(tree, virq, &irq_map[virq]);
|
radix_tree_insert(tree, hwirq, &irq_map[virq]);
|
||||||
bail:
|
bail:
|
||||||
spin_unlock_irqrestore(&irq_big_lock, flags);
|
spin_unlock_irqrestore(&irq_big_lock, flags);
|
||||||
return virq;
|
return virq;
|
||||||
|
|
|
@ -61,6 +61,8 @@ int __kprobes arch_prepare_kprobe(struct kprobe *p)
|
||||||
if (!ret) {
|
if (!ret) {
|
||||||
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
memcpy(p->ainsn.insn, p->addr, MAX_INSN_SIZE * sizeof(kprobe_opcode_t));
|
||||||
p->opcode = *p->addr;
|
p->opcode = *p->addr;
|
||||||
|
flush_icache_range((unsigned long)p->ainsn.insn,
|
||||||
|
(unsigned long)p->ainsn.insn + sizeof(kprobe_opcode_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
#include <linux/reboot.h>
|
#include <linux/reboot.h>
|
||||||
#include <linux/threads.h>
|
#include <linux/threads.h>
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
|
#include <asm/lmb.h>
|
||||||
|
|
||||||
void machine_crash_shutdown(struct pt_regs *regs)
|
void machine_crash_shutdown(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
@ -59,3 +60,58 @@ NORET_TYPE void machine_kexec(struct kimage *image)
|
||||||
}
|
}
|
||||||
for(;;);
|
for(;;);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __init early_parse_crashk(char *p)
|
||||||
|
{
|
||||||
|
unsigned long size;
|
||||||
|
|
||||||
|
if (!p)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
size = memparse(p, &p);
|
||||||
|
|
||||||
|
if (*p == '@')
|
||||||
|
crashk_res.start = memparse(p + 1, &p);
|
||||||
|
else
|
||||||
|
crashk_res.start = KDUMP_KERNELBASE;
|
||||||
|
|
||||||
|
crashk_res.end = crashk_res.start + size - 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
early_param("crashkernel", early_parse_crashk);
|
||||||
|
|
||||||
|
void __init reserve_crashkernel(void)
|
||||||
|
{
|
||||||
|
unsigned long size;
|
||||||
|
|
||||||
|
if (crashk_res.start == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* We might have got these values via the command line or the
|
||||||
|
* device tree, either way sanitise them now. */
|
||||||
|
|
||||||
|
size = crashk_res.end - crashk_res.start + 1;
|
||||||
|
|
||||||
|
if (crashk_res.start != KDUMP_KERNELBASE)
|
||||||
|
printk("Crash kernel location must be 0x%x\n",
|
||||||
|
KDUMP_KERNELBASE);
|
||||||
|
|
||||||
|
crashk_res.start = KDUMP_KERNELBASE;
|
||||||
|
size = PAGE_ALIGN(size);
|
||||||
|
crashk_res.end = crashk_res.start + size - 1;
|
||||||
|
|
||||||
|
/* Crash kernel trumps memory limit */
|
||||||
|
if (memory_limit && memory_limit <= crashk_res.end) {
|
||||||
|
memory_limit = crashk_res.end + 1;
|
||||||
|
printk("Adjusted memory limit for crashkernel, now 0x%lx\n",
|
||||||
|
memory_limit);
|
||||||
|
}
|
||||||
|
|
||||||
|
lmb_reserve(crashk_res.start, size);
|
||||||
|
}
|
||||||
|
|
||||||
|
int overlaps_crashkernel(unsigned long start, unsigned long size)
|
||||||
|
{
|
||||||
|
return (start + size) > crashk_res.start && start <= crashk_res.end;
|
||||||
|
}
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#include <linux/cpumask.h>
|
|
||||||
#include <linux/kexec.h>
|
#include <linux/kexec.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/thread_info.h>
|
#include <linux/thread_info.h>
|
||||||
|
@ -21,7 +20,6 @@
|
||||||
#include <asm/machdep.h>
|
#include <asm/machdep.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/paca.h>
|
#include <asm/paca.h>
|
||||||
#include <asm/lmb.h>
|
|
||||||
#include <asm/mmu.h>
|
#include <asm/mmu.h>
|
||||||
#include <asm/sections.h> /* _end */
|
#include <asm/sections.h> /* _end */
|
||||||
#include <asm/prom.h>
|
#include <asm/prom.h>
|
||||||
|
@ -385,58 +383,3 @@ static int __init kexec_setup(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
__initcall(kexec_setup);
|
__initcall(kexec_setup);
|
||||||
|
|
||||||
static int __init early_parse_crashk(char *p)
|
|
||||||
{
|
|
||||||
unsigned long size;
|
|
||||||
|
|
||||||
if (!p)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
size = memparse(p, &p);
|
|
||||||
|
|
||||||
if (*p == '@')
|
|
||||||
crashk_res.start = memparse(p + 1, &p);
|
|
||||||
else
|
|
||||||
crashk_res.start = KDUMP_KERNELBASE;
|
|
||||||
|
|
||||||
crashk_res.end = crashk_res.start + size - 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
early_param("crashkernel", early_parse_crashk);
|
|
||||||
|
|
||||||
void __init reserve_crashkernel(void)
|
|
||||||
{
|
|
||||||
unsigned long size;
|
|
||||||
|
|
||||||
if (crashk_res.start == 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* We might have got these values via the command line or the
|
|
||||||
* device tree, either way sanitise them now. */
|
|
||||||
|
|
||||||
size = crashk_res.end - crashk_res.start + 1;
|
|
||||||
|
|
||||||
if (crashk_res.start != KDUMP_KERNELBASE)
|
|
||||||
printk("Crash kernel location must be 0x%x\n",
|
|
||||||
KDUMP_KERNELBASE);
|
|
||||||
|
|
||||||
crashk_res.start = KDUMP_KERNELBASE;
|
|
||||||
size = PAGE_ALIGN(size);
|
|
||||||
crashk_res.end = crashk_res.start + size - 1;
|
|
||||||
|
|
||||||
/* Crash kernel trumps memory limit */
|
|
||||||
if (memory_limit && memory_limit <= crashk_res.end) {
|
|
||||||
memory_limit = crashk_res.end + 1;
|
|
||||||
printk("Adjusted memory limit for crashkernel, now 0x%lx\n",
|
|
||||||
memory_limit);
|
|
||||||
}
|
|
||||||
|
|
||||||
lmb_reserve(crashk_res.start, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
int overlaps_crashkernel(unsigned long start, unsigned long size)
|
|
||||||
{
|
|
||||||
return (start + size) > crashk_res.start && start <= crashk_res.end;
|
|
||||||
}
|
|
||||||
|
|
|
@ -569,6 +569,27 @@ int rtas_set_indicator(int indicator, int index, int new_value)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(rtas_set_indicator);
|
EXPORT_SYMBOL(rtas_set_indicator);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Ignoring RTAS extended delay
|
||||||
|
*/
|
||||||
|
int rtas_set_indicator_fast(int indicator, int index, int new_value)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
int token = rtas_token("set-indicator");
|
||||||
|
|
||||||
|
if (token == RTAS_UNKNOWN_SERVICE)
|
||||||
|
return -ENOENT;
|
||||||
|
|
||||||
|
rc = rtas_call(token, 3, 1, NULL, indicator, index, new_value);
|
||||||
|
|
||||||
|
WARN_ON(rc == -2 || (rc >= 9900 && rc <= 9905));
|
||||||
|
|
||||||
|
if (rc < 0)
|
||||||
|
return rtas_error_rc(rc);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
void rtas_restart(char *cmd)
|
void rtas_restart(char *cmd)
|
||||||
{
|
{
|
||||||
if (rtas_flash_term_hook)
|
if (rtas_flash_term_hook)
|
||||||
|
|
|
@ -55,9 +55,6 @@
|
||||||
|
|
||||||
#ifdef CONFIG_PPC64 /* XXX */
|
#ifdef CONFIG_PPC64 /* XXX */
|
||||||
#define _IO_BASE pci_io_base
|
#define _IO_BASE pci_io_base
|
||||||
#ifdef CONFIG_KEXEC
|
|
||||||
cpumask_t cpus_in_sr = CPU_MASK_NONE;
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_DEBUGGER
|
#ifdef CONFIG_DEBUGGER
|
||||||
|
@ -151,7 +148,7 @@ int die(const char *str, struct pt_regs *regs, long err)
|
||||||
panic("Fatal exception in interrupt");
|
panic("Fatal exception in interrupt");
|
||||||
|
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
|
|
||||||
do_exit(err);
|
do_exit(err);
|
||||||
|
|
||||||
|
@ -211,6 +208,19 @@ void system_reset_exception(struct pt_regs *regs)
|
||||||
|
|
||||||
die("System Reset", regs, SIGABRT);
|
die("System Reset", regs, SIGABRT);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some CPUs when released from the debugger will execute this path.
|
||||||
|
* These CPUs entered the debugger via a soft-reset. If the CPU was
|
||||||
|
* hung before entering the debugger it will return to the hung
|
||||||
|
* state when exiting this function. This causes a problem in
|
||||||
|
* kdump since the hung CPU(s) will not respond to the IPI sent
|
||||||
|
* from kdump. To prevent the problem we call crash_kexec_secondary()
|
||||||
|
* here. If a kdump had not been initiated or we exit the debugger
|
||||||
|
* with the "exit and recover" command (x) crash_kexec_secondary()
|
||||||
|
* will return after 5ms and the CPU returns to its previous state.
|
||||||
|
*/
|
||||||
|
crash_kexec_secondary(regs);
|
||||||
|
|
||||||
/* Must die if the interrupt is not recoverable */
|
/* Must die if the interrupt is not recoverable */
|
||||||
if (!(regs->msr & MSR_RI))
|
if (!(regs->msr & MSR_RI))
|
||||||
panic("Unrecoverable System Reset");
|
panic("Unrecoverable System Reset");
|
||||||
|
|
|
@ -213,8 +213,6 @@ static void pseries_lpar_enable_pmcs(void)
|
||||||
{
|
{
|
||||||
unsigned long set, reset;
|
unsigned long set, reset;
|
||||||
|
|
||||||
power4_enable_pmcs();
|
|
||||||
|
|
||||||
set = 1UL << 63;
|
set = 1UL << 63;
|
||||||
reset = 0;
|
reset = 0;
|
||||||
plpar_hcall_norets(H_PERFMON, set, reset);
|
plpar_hcall_norets(H_PERFMON, set, reset);
|
||||||
|
|
|
@ -467,7 +467,7 @@ void xics_setup_cpu(void)
|
||||||
*
|
*
|
||||||
* XXX: undo of teardown on kexec needs this too, as may hotplug
|
* XXX: undo of teardown on kexec needs this too, as may hotplug
|
||||||
*/
|
*/
|
||||||
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||||
(1UL << interrupt_server_size) - 1 - default_distrib_server, 1);
|
(1UL << interrupt_server_size) - 1 - default_distrib_server, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -796,7 +796,7 @@ void xics_teardown_cpu(int secondary)
|
||||||
* so leave the master cpu in the group.
|
* so leave the master cpu in the group.
|
||||||
*/
|
*/
|
||||||
if (secondary)
|
if (secondary)
|
||||||
rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||||
(1UL << interrupt_server_size) - 1 -
|
(1UL << interrupt_server_size) - 1 -
|
||||||
default_distrib_server, 0);
|
default_distrib_server, 0);
|
||||||
}
|
}
|
||||||
|
@ -813,7 +813,7 @@ void xics_migrate_irqs_away(void)
|
||||||
xics_set_cpu_priority(cpu, 0);
|
xics_set_cpu_priority(cpu, 0);
|
||||||
|
|
||||||
/* remove ourselves from the global interrupt queue */
|
/* remove ourselves from the global interrupt queue */
|
||||||
status = rtas_set_indicator(GLOBAL_INTERRUPT_QUEUE,
|
status = rtas_set_indicator_fast(GLOBAL_INTERRUPT_QUEUE,
|
||||||
(1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
|
(1UL << interrupt_server_size) - 1 - default_distrib_server, 0);
|
||||||
WARN_ON(status < 0);
|
WARN_ON(status < 0);
|
||||||
|
|
||||||
|
|
|
@ -169,8 +169,16 @@ static int __init gfar_of_init(void)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
mac_addr = get_property(np, "address", NULL);
|
mac_addr = get_property(np, "local-mac-address", NULL);
|
||||||
memcpy(gfar_data.mac_addr, mac_addr, 6);
|
if (mac_addr == NULL)
|
||||||
|
mac_addr = get_property(np, "mac-address", NULL);
|
||||||
|
if (mac_addr == NULL) {
|
||||||
|
/* Obsolete */
|
||||||
|
mac_addr = get_property(np, "address", NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mac_addr)
|
||||||
|
memcpy(gfar_data.mac_addr, mac_addr, 6);
|
||||||
|
|
||||||
if (model && !strcasecmp(model, "TSEC"))
|
if (model && !strcasecmp(model, "TSEC"))
|
||||||
gfar_data.device_flags =
|
gfar_data.device_flags =
|
||||||
|
|
|
@ -618,7 +618,7 @@ appldata_offline_cpu(int cpu)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_HOTPLUG_CPU
|
#ifdef CONFIG_HOTPLUG_CPU
|
||||||
static int
|
static int __cpuinit
|
||||||
appldata_cpu_notify(struct notifier_block *self,
|
appldata_cpu_notify(struct notifier_block *self,
|
||||||
unsigned long action, void *hcpu)
|
unsigned long action, void *hcpu)
|
||||||
{
|
{
|
||||||
|
|
|
@ -129,7 +129,7 @@ void __init paging_init(void)
|
||||||
/*
|
/*
|
||||||
* pg_table is physical at this point
|
* pg_table is physical at this point
|
||||||
*/
|
*/
|
||||||
pg_table = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
|
pg_table = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
|
||||||
|
|
||||||
pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table));
|
pg_dir->pgd0 = (_PAGE_TABLE | __pa(pg_table));
|
||||||
pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024));
|
pg_dir->pgd1 = (_PAGE_TABLE | (__pa(pg_table)+1024));
|
||||||
|
@ -219,7 +219,7 @@ void __init paging_init(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pm_dir = (pmd_t *) alloc_bootmem_low_pages(PAGE_SIZE*4);
|
pm_dir = (pmd_t *) alloc_bootmem_pages(PAGE_SIZE * 4);
|
||||||
pgd_populate(&init_mm, pg_dir, pm_dir);
|
pgd_populate(&init_mm, pg_dir, pm_dir);
|
||||||
|
|
||||||
for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) {
|
for (j = 0 ; j < PTRS_PER_PMD ; j++,pm_dir++) {
|
||||||
|
@ -228,7 +228,7 @@ void __init paging_init(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pt_dir = (pte_t *) alloc_bootmem_low_pages(PAGE_SIZE);
|
pt_dir = (pte_t *) alloc_bootmem_pages(PAGE_SIZE);
|
||||||
pmd_populate_kernel(&init_mm, pm_dir, pt_dir);
|
pmd_populate_kernel(&init_mm, pm_dir, pt_dir);
|
||||||
|
|
||||||
for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) {
|
for (k = 0 ; k < PTRS_PER_PTE ; k++,pt_dir++) {
|
||||||
|
|
|
@ -529,7 +529,7 @@ void __kprobes oops_end(unsigned long flags)
|
||||||
/* Nest count reaches zero, release the lock. */
|
/* Nest count reaches zero, release the lock. */
|
||||||
spin_unlock_irqrestore(&die_lock, flags);
|
spin_unlock_irqrestore(&die_lock, flags);
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
}
|
}
|
||||||
|
|
||||||
void __kprobes __die(const char * str, struct pt_regs * regs, long err)
|
void __kprobes __die(const char * str, struct pt_regs * regs, long err)
|
||||||
|
|
|
@ -488,7 +488,7 @@ void die(const char * str, struct pt_regs * regs, long err)
|
||||||
panic("Fatal exception in interrupt");
|
panic("Fatal exception in interrupt");
|
||||||
|
|
||||||
if (panic_on_oops)
|
if (panic_on_oops)
|
||||||
panic("Fatal exception: panic_on_oops");
|
panic("Fatal exception");
|
||||||
|
|
||||||
do_exit(err);
|
do_exit(err);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,7 @@ config WATCHDOG_NOWAYOUT
|
||||||
comment "Watchdog Device Drivers"
|
comment "Watchdog Device Drivers"
|
||||||
depends on WATCHDOG
|
depends on WATCHDOG
|
||||||
|
|
||||||
# Architecture Independant
|
# Architecture Independent
|
||||||
|
|
||||||
config SOFT_WATCHDOG
|
config SOFT_WATCHDOG
|
||||||
tristate "Software watchdog"
|
tristate "Software watchdog"
|
||||||
|
@ -127,7 +127,7 @@ config S3C2410_WATCHDOG
|
||||||
enabled.
|
enabled.
|
||||||
|
|
||||||
The driver is limited by the speed of the system's PCLK
|
The driver is limited by the speed of the system's PCLK
|
||||||
signal, so with reasonbaly fast systems (PCLK around 50-66MHz)
|
signal, so with reasonably fast systems (PCLK around 50-66MHz)
|
||||||
then watchdog intervals of over approximately 20seconds are
|
then watchdog intervals of over approximately 20seconds are
|
||||||
unavailable.
|
unavailable.
|
||||||
|
|
||||||
|
@ -423,7 +423,7 @@ config SBC_EPX_C3_WATCHDOG
|
||||||
is no way to know if writing to its IO address will corrupt
|
is no way to know if writing to its IO address will corrupt
|
||||||
your system or have any real effect. The only way to be sure
|
your system or have any real effect. The only way to be sure
|
||||||
that this driver does what you want is to make sure you
|
that this driver does what you want is to make sure you
|
||||||
are runnning it on an EPX-C3 from Winsystems with the watchdog
|
are running it on an EPX-C3 from Winsystems with the watchdog
|
||||||
timer at IO address 0x1ee and 0x1ef. It will write to both those
|
timer at IO address 0x1ee and 0x1ef. It will write to both those
|
||||||
IO ports. Basically, the assumption is made that if you compile
|
IO ports. Basically, the assumption is made that if you compile
|
||||||
this driver into your kernel and/or load it as a module, that you
|
this driver into your kernel and/or load it as a module, that you
|
||||||
|
@ -472,7 +472,7 @@ config INDYDOG
|
||||||
tristate "Indy/I2 Hardware Watchdog"
|
tristate "Indy/I2 Hardware Watchdog"
|
||||||
depends on WATCHDOG && SGI_IP22
|
depends on WATCHDOG && SGI_IP22
|
||||||
help
|
help
|
||||||
Hardwaredriver for the Indy's/I2's watchdog. This is a
|
Hardware driver for the Indy's/I2's watchdog. This is a
|
||||||
watchdog timer that will reboot the machine after a 60 second
|
watchdog timer that will reboot the machine after a 60 second
|
||||||
timer expired and no process has written to /dev/watchdog during
|
timer expired and no process has written to /dev/watchdog during
|
||||||
that time.
|
that time.
|
||||||
|
|
|
@ -180,6 +180,36 @@ static ide_pci_device_t generic_chipsets[] __devinitdata = {
|
||||||
.channels = 2,
|
.channels = 2,
|
||||||
.autodma = AUTODMA,
|
.autodma = AUTODMA,
|
||||||
.bootable = OFF_BOARD,
|
.bootable = OFF_BOARD,
|
||||||
|
},{ /* 15 */
|
||||||
|
.name = "JMB361",
|
||||||
|
.init_hwif = init_hwif_generic,
|
||||||
|
.channels = 2,
|
||||||
|
.autodma = AUTODMA,
|
||||||
|
.bootable = OFF_BOARD,
|
||||||
|
},{ /* 16 */
|
||||||
|
.name = "JMB363",
|
||||||
|
.init_hwif = init_hwif_generic,
|
||||||
|
.channels = 2,
|
||||||
|
.autodma = AUTODMA,
|
||||||
|
.bootable = OFF_BOARD,
|
||||||
|
},{ /* 17 */
|
||||||
|
.name = "JMB365",
|
||||||
|
.init_hwif = init_hwif_generic,
|
||||||
|
.channels = 2,
|
||||||
|
.autodma = AUTODMA,
|
||||||
|
.bootable = OFF_BOARD,
|
||||||
|
},{ /* 18 */
|
||||||
|
.name = "JMB366",
|
||||||
|
.init_hwif = init_hwif_generic,
|
||||||
|
.channels = 2,
|
||||||
|
.autodma = AUTODMA,
|
||||||
|
.bootable = OFF_BOARD,
|
||||||
|
},{ /* 19 */
|
||||||
|
.name = "JMB368",
|
||||||
|
.init_hwif = init_hwif_generic,
|
||||||
|
.channels = 2,
|
||||||
|
.autodma = AUTODMA,
|
||||||
|
.bootable = OFF_BOARD,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -710,6 +710,8 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m->ti = ti;
|
||||||
|
|
||||||
r = parse_features(&as, m, ti);
|
r = parse_features(&as, m, ti);
|
||||||
if (r)
|
if (r)
|
||||||
goto bad;
|
goto bad;
|
||||||
|
@ -751,7 +753,6 @@ static int multipath_ctr(struct dm_target *ti, unsigned int argc,
|
||||||
}
|
}
|
||||||
|
|
||||||
ti->private = m;
|
ti->private = m;
|
||||||
m->ti = ti;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
|
@ -393,7 +393,7 @@ static int dst_set_bandwidth(struct dst_state *state, fe_bandwidth_t bandwidth)
|
||||||
state->bandwidth = bandwidth;
|
state->bandwidth = bandwidth;
|
||||||
|
|
||||||
if (state->dst_type != DST_TYPE_IS_TERR)
|
if (state->dst_type != DST_TYPE_IS_TERR)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
switch (bandwidth) {
|
switch (bandwidth) {
|
||||||
case BANDWIDTH_6_MHZ:
|
case BANDWIDTH_6_MHZ:
|
||||||
|
@ -462,7 +462,7 @@ static int dst_set_symbolrate(struct dst_state *state, u32 srate)
|
||||||
|
|
||||||
state->symbol_rate = srate;
|
state->symbol_rate = srate;
|
||||||
if (state->dst_type == DST_TYPE_IS_TERR) {
|
if (state->dst_type == DST_TYPE_IS_TERR) {
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
}
|
}
|
||||||
dprintk(verbose, DST_INFO, 1, "set symrate %u", srate);
|
dprintk(verbose, DST_INFO, 1, "set symrate %u", srate);
|
||||||
srate /= 1000;
|
srate /= 1000;
|
||||||
|
@ -504,7 +504,7 @@ static int dst_set_symbolrate(struct dst_state *state, u32 srate)
|
||||||
static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulation)
|
static int dst_set_modulation(struct dst_state *state, fe_modulation_t modulation)
|
||||||
{
|
{
|
||||||
if (state->dst_type != DST_TYPE_IS_CABLE)
|
if (state->dst_type != DST_TYPE_IS_CABLE)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
state->modulation = modulation;
|
state->modulation = modulation;
|
||||||
switch (modulation) {
|
switch (modulation) {
|
||||||
|
@ -1234,7 +1234,7 @@ int dst_command(struct dst_state *state, u8 *data, u8 len)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
if (write_dst(state, data, len)) {
|
if (write_dst(state, data, len)) {
|
||||||
dprintk(verbose, DST_INFO, 1, "Tring to recover.. ");
|
dprintk(verbose, DST_INFO, 1, "Trying to recover.. ");
|
||||||
if ((dst_error_recovery(state)) < 0) {
|
if ((dst_error_recovery(state)) < 0) {
|
||||||
dprintk(verbose, DST_ERROR, 1, "Recovery Failed.");
|
dprintk(verbose, DST_ERROR, 1, "Recovery Failed.");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -1328,15 +1328,13 @@ static int dst_tone_power_cmd(struct dst_state *state)
|
||||||
{
|
{
|
||||||
u8 paket[8] = { 0x00, 0x09, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00 };
|
u8 paket[8] = { 0x00, 0x09, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
if (state->dst_type == DST_TYPE_IS_TERR)
|
if (state->dst_type != DST_TYPE_IS_SAT)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
paket[4] = state->tx_tuna[4];
|
paket[4] = state->tx_tuna[4];
|
||||||
paket[2] = state->tx_tuna[2];
|
paket[2] = state->tx_tuna[2];
|
||||||
paket[3] = state->tx_tuna[3];
|
paket[3] = state->tx_tuna[3];
|
||||||
paket[7] = dst_check_sum (paket, 7);
|
paket[7] = dst_check_sum (paket, 7);
|
||||||
dst_command(state, paket, 8);
|
return dst_command(state, paket, 8);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_get_tuna(struct dst_state *state)
|
static int dst_get_tuna(struct dst_state *state)
|
||||||
|
@ -1465,7 +1463,7 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd
|
||||||
u8 paket[8] = { 0x00, 0x08, 0x04, 0xe0, 0x10, 0x38, 0xf0, 0xec };
|
u8 paket[8] = { 0x00, 0x08, 0x04, 0xe0, 0x10, 0x38, 0xf0, 0xec };
|
||||||
|
|
||||||
if (state->dst_type != DST_TYPE_IS_SAT)
|
if (state->dst_type != DST_TYPE_IS_SAT)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
if (cmd->msg_len > 0 && cmd->msg_len < 5)
|
if (cmd->msg_len > 0 && cmd->msg_len < 5)
|
||||||
memcpy(&paket[3], cmd->msg, cmd->msg_len);
|
memcpy(&paket[3], cmd->msg, cmd->msg_len);
|
||||||
else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5)
|
else if (cmd->msg_len == 5 && state->dst_hw_cap & DST_TYPE_HAS_DISEQC5)
|
||||||
|
@ -1473,18 +1471,17 @@ static int dst_set_diseqc(struct dvb_frontend *fe, struct dvb_diseqc_master_cmd
|
||||||
else
|
else
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
paket[7] = dst_check_sum(&paket[0], 7);
|
paket[7] = dst_check_sum(&paket[0], 7);
|
||||||
dst_command(state, paket, 8);
|
return dst_command(state, paket, 8);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
|
static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
|
||||||
{
|
{
|
||||||
int need_cmd;
|
int need_cmd, retval = 0;
|
||||||
struct dst_state *state = fe->demodulator_priv;
|
struct dst_state *state = fe->demodulator_priv;
|
||||||
|
|
||||||
state->voltage = voltage;
|
state->voltage = voltage;
|
||||||
if (state->dst_type != DST_TYPE_IS_SAT)
|
if (state->dst_type != DST_TYPE_IS_SAT)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
need_cmd = 0;
|
need_cmd = 0;
|
||||||
|
|
||||||
|
@ -1506,9 +1503,9 @@ static int dst_set_voltage(struct dvb_frontend *fe, fe_sec_voltage_t voltage)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (need_cmd)
|
if (need_cmd)
|
||||||
dst_tone_power_cmd(state);
|
retval = dst_tone_power_cmd(state);
|
||||||
|
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
||||||
|
@ -1517,7 +1514,7 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
||||||
|
|
||||||
state->tone = tone;
|
state->tone = tone;
|
||||||
if (state->dst_type != DST_TYPE_IS_SAT)
|
if (state->dst_type != DST_TYPE_IS_SAT)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
|
|
||||||
switch (tone) {
|
switch (tone) {
|
||||||
case SEC_TONE_OFF:
|
case SEC_TONE_OFF:
|
||||||
|
@ -1533,9 +1530,7 @@ static int dst_set_tone(struct dvb_frontend *fe, fe_sec_tone_mode_t tone)
|
||||||
default:
|
default:
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
dst_tone_power_cmd(state);
|
return dst_tone_power_cmd(state);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
|
static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
|
||||||
|
@ -1543,7 +1538,7 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
|
||||||
struct dst_state *state = fe->demodulator_priv;
|
struct dst_state *state = fe->demodulator_priv;
|
||||||
|
|
||||||
if (state->dst_type != DST_TYPE_IS_SAT)
|
if (state->dst_type != DST_TYPE_IS_SAT)
|
||||||
return 0;
|
return -EOPNOTSUPP;
|
||||||
state->minicmd = minicmd;
|
state->minicmd = minicmd;
|
||||||
switch (minicmd) {
|
switch (minicmd) {
|
||||||
case SEC_MINI_A:
|
case SEC_MINI_A:
|
||||||
|
@ -1553,9 +1548,7 @@ static int dst_send_burst(struct dvb_frontend *fe, fe_sec_mini_cmd_t minicmd)
|
||||||
state->tx_tuna[3] = 0xff;
|
state->tx_tuna[3] = 0xff;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
dst_tone_power_cmd(state);
|
return dst_tone_power_cmd(state);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1608,28 +1601,31 @@ static int dst_read_signal_strength(struct dvb_frontend *fe, u16 *strength)
|
||||||
{
|
{
|
||||||
struct dst_state *state = fe->demodulator_priv;
|
struct dst_state *state = fe->demodulator_priv;
|
||||||
|
|
||||||
dst_get_signal(state);
|
int retval = dst_get_signal(state);
|
||||||
*strength = state->decode_strength;
|
*strength = state->decode_strength;
|
||||||
|
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_read_snr(struct dvb_frontend *fe, u16 *snr)
|
static int dst_read_snr(struct dvb_frontend *fe, u16 *snr)
|
||||||
{
|
{
|
||||||
struct dst_state *state = fe->demodulator_priv;
|
struct dst_state *state = fe->demodulator_priv;
|
||||||
|
|
||||||
dst_get_signal(state);
|
int retval = dst_get_signal(state);
|
||||||
*snr = state->decode_snr;
|
*snr = state->decode_snr;
|
||||||
|
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
|
static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_parameters *p)
|
||||||
{
|
{
|
||||||
|
int retval = -EINVAL;
|
||||||
struct dst_state *state = fe->demodulator_priv;
|
struct dst_state *state = fe->demodulator_priv;
|
||||||
|
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
dst_set_freq(state, p->frequency);
|
retval = dst_set_freq(state, p->frequency);
|
||||||
|
if(retval != 0)
|
||||||
|
return retval;
|
||||||
dprintk(verbose, DST_DEBUG, 1, "Set Frequency=[%d]", p->frequency);
|
dprintk(verbose, DST_DEBUG, 1, "Set Frequency=[%d]", p->frequency);
|
||||||
|
|
||||||
if (state->dst_type == DST_TYPE_IS_SAT) {
|
if (state->dst_type == DST_TYPE_IS_SAT) {
|
||||||
|
@ -1647,10 +1643,10 @@ static int dst_set_frontend(struct dvb_frontend *fe, struct dvb_frontend_paramet
|
||||||
dst_set_symbolrate(state, p->u.qam.symbol_rate);
|
dst_set_symbolrate(state, p->u.qam.symbol_rate);
|
||||||
dst_set_modulation(state, p->u.qam.modulation);
|
dst_set_modulation(state, p->u.qam.modulation);
|
||||||
}
|
}
|
||||||
dst_write_tuna(fe);
|
retval = dst_write_tuna(fe);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int dst_tune_frontend(struct dvb_frontend* fe,
|
static int dst_tune_frontend(struct dvb_frontend* fe,
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
# Makefile for the kernel DVB device drivers.
|
# Makefile for the kernel DVB device drivers.
|
||||||
#
|
#
|
||||||
|
|
||||||
dvb-core-objs = dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
|
dvb-core-objs := dvbdev.o dmxdev.o dvb_demux.o dvb_filter.o \
|
||||||
dvb_ca_en50221.o dvb_frontend.o \
|
dvb_ca_en50221.o dvb_frontend.o \
|
||||||
dvb_net.o dvb_ringbuffer.o dvb_math.o
|
dvb_net.o dvb_ringbuffer.o dvb_math.o
|
||||||
|
|
||||||
obj-$(CONFIG_DVB_CORE) += dvb-core.o
|
obj-$(CONFIG_DVB_CORE) += dvb-core.o
|
||||||
|
|
|
@ -350,5 +350,15 @@ config RADIO_ZOLTRIX_PORT
|
||||||
help
|
help
|
||||||
Enter the I/O port of your Zoltrix radio card.
|
Enter the I/O port of your Zoltrix radio card.
|
||||||
|
|
||||||
endmenu
|
config USB_DSBR
|
||||||
|
tristate "D-Link USB FM radio support (EXPERIMENTAL)"
|
||||||
|
depends on USB && VIDEO_V4L1 && EXPERIMENTAL
|
||||||
|
---help---
|
||||||
|
Say Y here if you want to connect this type of radio to your
|
||||||
|
computer's USB port. Note that the audio is not digital, and
|
||||||
|
you must connect the line out connector to a sound card or a
|
||||||
|
set of speakers.
|
||||||
|
|
||||||
|
To compile this driver as a module, choose M here: the
|
||||||
|
module will be called dsbr100.
|
||||||
|
endmenu
|
||||||
|
|
|
@ -20,5 +20,6 @@ obj-$(CONFIG_RADIO_GEMTEK) += radio-gemtek.o
|
||||||
obj-$(CONFIG_RADIO_GEMTEK_PCI) += radio-gemtek-pci.o
|
obj-$(CONFIG_RADIO_GEMTEK_PCI) += radio-gemtek-pci.o
|
||||||
obj-$(CONFIG_RADIO_TRUST) += radio-trust.o
|
obj-$(CONFIG_RADIO_TRUST) += radio-trust.o
|
||||||
obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o
|
obj-$(CONFIG_RADIO_MAESTRO) += radio-maestro.o
|
||||||
|
obj-$(CONFIG_USB_DSBR) += dsbr100.o
|
||||||
|
|
||||||
EXTRA_CFLAGS += -Isound
|
EXTRA_CFLAGS += -Isound
|
||||||
|
|
|
@ -449,18 +449,6 @@ source "drivers/media/video/pvrusb2/Kconfig"
|
||||||
|
|
||||||
source "drivers/media/video/em28xx/Kconfig"
|
source "drivers/media/video/em28xx/Kconfig"
|
||||||
|
|
||||||
config USB_DSBR
|
|
||||||
tristate "D-Link USB FM radio support (EXPERIMENTAL)"
|
|
||||||
depends on USB && VIDEO_V4L1 && EXPERIMENTAL
|
|
||||||
---help---
|
|
||||||
Say Y here if you want to connect this type of radio to your
|
|
||||||
computer's USB port. Note that the audio is not digital, and
|
|
||||||
you must connect the line out connector to a sound card or a
|
|
||||||
set of speakers.
|
|
||||||
|
|
||||||
To compile this driver as a module, choose M here: the
|
|
||||||
module will be called dsbr100.
|
|
||||||
|
|
||||||
source "drivers/media/video/usbvideo/Kconfig"
|
source "drivers/media/video/usbvideo/Kconfig"
|
||||||
|
|
||||||
source "drivers/media/video/et61x251/Kconfig"
|
source "drivers/media/video/et61x251/Kconfig"
|
||||||
|
|
|
@ -77,7 +77,6 @@ obj-$(CONFIG_VIDEO_UPD64083) += upd64083.o
|
||||||
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
|
obj-$(CONFIG_VIDEO_CX2341X) += cx2341x.o
|
||||||
|
|
||||||
obj-$(CONFIG_USB_DABUSB) += dabusb.o
|
obj-$(CONFIG_USB_DABUSB) += dabusb.o
|
||||||
obj-$(CONFIG_USB_DSBR) += dsbr100.o
|
|
||||||
obj-$(CONFIG_USB_OV511) += ov511.o
|
obj-$(CONFIG_USB_OV511) += ov511.o
|
||||||
obj-$(CONFIG_USB_SE401) += se401.o
|
obj-$(CONFIG_USB_SE401) += se401.o
|
||||||
obj-$(CONFIG_USB_STV680) += stv680.o
|
obj-$(CONFIG_USB_STV680) += stv680.o
|
||||||
|
@ -91,6 +90,7 @@ obj-$(CONFIG_USB_ZC0301) += zc0301/
|
||||||
obj-$(CONFIG_USB_IBMCAM) += usbvideo/
|
obj-$(CONFIG_USB_IBMCAM) += usbvideo/
|
||||||
obj-$(CONFIG_USB_KONICAWC) += usbvideo/
|
obj-$(CONFIG_USB_KONICAWC) += usbvideo/
|
||||||
obj-$(CONFIG_USB_VICAM) += usbvideo/
|
obj-$(CONFIG_USB_VICAM) += usbvideo/
|
||||||
|
obj-$(CONFIG_USB_QUICKCAM_MESSENGER) += usbvideo/
|
||||||
|
|
||||||
obj-$(CONFIG_VIDEO_VIVI) += vivi.o
|
obj-$(CONFIG_VIDEO_VIVI) += vivi.o
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#ifdef CONFIG_COMPAT
|
#ifdef CONFIG_COMPAT
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
struct video_tuner32 {
|
struct video_tuner32 {
|
||||||
compat_int_t tuner;
|
compat_int_t tuner;
|
||||||
char name[32];
|
char name[32];
|
||||||
|
@ -107,6 +107,7 @@ struct video_window32 {
|
||||||
compat_caddr_t clips;
|
compat_caddr_t clips;
|
||||||
compat_int_t clipcount;
|
compat_int_t clipcount;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
|
@ -124,6 +125,7 @@ static int native_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
/* You get back everything except the clips... */
|
/* You get back everything except the clips... */
|
||||||
static int put_video_window32(struct video_window *kp, struct video_window32 __user *up)
|
static int put_video_window32(struct video_window *kp, struct video_window32 __user *up)
|
||||||
{
|
{
|
||||||
|
@ -138,6 +140,7 @@ static int put_video_window32(struct video_window *kp, struct video_window32 __u
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
struct v4l2_clip32
|
struct v4l2_clip32
|
||||||
{
|
{
|
||||||
|
@ -490,6 +493,7 @@ static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
struct video_code32
|
struct video_code32
|
||||||
{
|
{
|
||||||
char loadwhat[16]; /* name or tag of file being passed */
|
char loadwhat[16]; /* name or tag of file being passed */
|
||||||
|
@ -517,6 +521,8 @@ static inline int microcode32(struct video_code *kp, struct video_code32 __user
|
||||||
#define VIDIOCSFREQ32 _IOW('v',15, u32)
|
#define VIDIOCSFREQ32 _IOW('v',15, u32)
|
||||||
#define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32)
|
#define VIDIOCSMICROCODE32 _IOW('v',27, struct video_code32)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */
|
/* VIDIOC_ENUMINPUT32 is VIDIOC_ENUMINPUT minus 4 bytes of padding alignement */
|
||||||
#define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4)
|
#define VIDIOC_ENUMINPUT32 VIDIOC_ENUMINPUT - _IOC(0, 0, 0, 4)
|
||||||
#define VIDIOC_G_FMT32 _IOWR ('V', 4, struct v4l2_format32)
|
#define VIDIOC_G_FMT32 _IOWR ('V', 4, struct v4l2_format32)
|
||||||
|
@ -537,6 +543,7 @@ static inline int microcode32(struct video_code *kp, struct video_code32 __user
|
||||||
#define VIDIOC_S_INPUT32 _IOWR ('V', 39, compat_int_t)
|
#define VIDIOC_S_INPUT32 _IOWR ('V', 39, compat_int_t)
|
||||||
#define VIDIOC_TRY_FMT32 _IOWR ('V', 64, struct v4l2_format32)
|
#define VIDIOC_TRY_FMT32 _IOWR ('V', 64, struct v4l2_format32)
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
enum {
|
enum {
|
||||||
MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip)
|
MaxClips = (~0U-sizeof(struct video_window))/sizeof(struct video_clip)
|
||||||
};
|
};
|
||||||
|
@ -601,14 +608,17 @@ static int do_set_window(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
|
|
||||||
return native_ioctl(file, VIDIOCSWIN, (unsigned long)vw);
|
return native_ioctl(file, VIDIOCSWIN, (unsigned long)vw);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
struct video_tuner vt;
|
struct video_tuner vt;
|
||||||
struct video_buffer vb;
|
struct video_buffer vb;
|
||||||
struct video_window vw;
|
struct video_window vw;
|
||||||
struct video_code vc;
|
struct video_code vc;
|
||||||
|
#endif
|
||||||
struct v4l2_format v2f;
|
struct v4l2_format v2f;
|
||||||
struct v4l2_buffer v2b;
|
struct v4l2_buffer v2b;
|
||||||
struct v4l2_framebuffer v2fb;
|
struct v4l2_framebuffer v2fb;
|
||||||
|
@ -624,6 +634,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
|
|
||||||
/* First, convert the command. */
|
/* First, convert the command. */
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break;
|
case VIDIOCGTUNER32: cmd = VIDIOCGTUNER; break;
|
||||||
case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break;
|
case VIDIOCSTUNER32: cmd = VIDIOCSTUNER; break;
|
||||||
case VIDIOCGWIN32: cmd = VIDIOCGWIN; break;
|
case VIDIOCGWIN32: cmd = VIDIOCGWIN; break;
|
||||||
|
@ -631,6 +642,8 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break;
|
case VIDIOCSFBUF32: cmd = VIDIOCSFBUF; break;
|
||||||
case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break;
|
case VIDIOCGFREQ32: cmd = VIDIOCGFREQ; break;
|
||||||
case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break;
|
case VIDIOCSFREQ32: cmd = VIDIOCSFREQ; break;
|
||||||
|
case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break;
|
||||||
|
#endif
|
||||||
case VIDIOC_G_FMT32: cmd = VIDIOC_G_FMT; break;
|
case VIDIOC_G_FMT32: cmd = VIDIOC_G_FMT; break;
|
||||||
case VIDIOC_S_FMT32: cmd = VIDIOC_S_FMT; break;
|
case VIDIOC_S_FMT32: cmd = VIDIOC_S_FMT; break;
|
||||||
case VIDIOC_QUERYBUF32: cmd = VIDIOC_QUERYBUF; break;
|
case VIDIOC_QUERYBUF32: cmd = VIDIOC_QUERYBUF; break;
|
||||||
|
@ -647,10 +660,10 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break;
|
case VIDIOC_G_INPUT32: cmd = VIDIOC_G_INPUT; break;
|
||||||
case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break;
|
case VIDIOC_S_INPUT32: cmd = VIDIOC_S_INPUT; break;
|
||||||
case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break;
|
case VIDIOC_TRY_FMT32: cmd = VIDIOC_TRY_FMT; break;
|
||||||
case VIDIOCSMICROCODE32: cmd = VIDIOCSMICROCODE; break;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCSTUNER:
|
case VIDIOCSTUNER:
|
||||||
case VIDIOCGTUNER:
|
case VIDIOCGTUNER:
|
||||||
err = get_video_tuner32(&karg.vt, up);
|
err = get_video_tuner32(&karg.vt, up);
|
||||||
|
@ -664,6 +677,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case VIDIOCSFREQ:
|
case VIDIOCSFREQ:
|
||||||
|
#endif
|
||||||
case VIDIOC_S_INPUT:
|
case VIDIOC_S_INPUT:
|
||||||
case VIDIOC_OVERLAY:
|
case VIDIOC_OVERLAY:
|
||||||
case VIDIOC_STREAMON:
|
case VIDIOC_STREAMON:
|
||||||
|
@ -717,18 +731,21 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
compatible_arg = 0;
|
compatible_arg = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCGWIN:
|
case VIDIOCGWIN:
|
||||||
case VIDIOCGFBUF:
|
case VIDIOCGFBUF:
|
||||||
case VIDIOCGFREQ:
|
case VIDIOCGFREQ:
|
||||||
|
#endif
|
||||||
case VIDIOC_G_FBUF:
|
case VIDIOC_G_FBUF:
|
||||||
case VIDIOC_G_INPUT:
|
case VIDIOC_G_INPUT:
|
||||||
compatible_arg = 0;
|
compatible_arg = 0;
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCSMICROCODE:
|
case VIDIOCSMICROCODE:
|
||||||
err = microcode32(&karg.vc, up);
|
err = microcode32(&karg.vc, up);
|
||||||
compatible_arg = 0;
|
compatible_arg = 0;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
if(err)
|
if(err)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -743,6 +760,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
}
|
}
|
||||||
if(err == 0) {
|
if(err == 0) {
|
||||||
switch(cmd) {
|
switch(cmd) {
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCGTUNER:
|
case VIDIOCGTUNER:
|
||||||
err = put_video_tuner32(&karg.vt, up);
|
err = put_video_tuner32(&karg.vt, up);
|
||||||
break;
|
break;
|
||||||
|
@ -754,7 +772,7 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
case VIDIOCGFBUF:
|
case VIDIOCGFBUF:
|
||||||
err = put_video_buffer32(&karg.vb, up);
|
err = put_video_buffer32(&karg.vb, up);
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
case VIDIOC_G_FBUF:
|
case VIDIOC_G_FBUF:
|
||||||
err = put_v4l2_framebuffer32(&karg.v2fb, up);
|
err = put_v4l2_framebuffer32(&karg.v2fb, up);
|
||||||
break;
|
break;
|
||||||
|
@ -792,7 +810,9 @@ static int do_video_ioctl(struct file *file, unsigned int cmd, unsigned long arg
|
||||||
err = put_v4l2_input32(&karg.v2i, up);
|
err = put_v4l2_input32(&karg.v2i, up);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCGFREQ:
|
case VIDIOCGFREQ:
|
||||||
|
#endif
|
||||||
case VIDIOC_G_INPUT:
|
case VIDIOC_G_INPUT:
|
||||||
err = put_user(((u32)karg.vx), (u32 __user *)up);
|
err = put_user(((u32)karg.vx), (u32 __user *)up);
|
||||||
break;
|
break;
|
||||||
|
@ -810,6 +830,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCSWIN32:
|
case VIDIOCSWIN32:
|
||||||
ret = do_set_window(file, cmd, arg);
|
ret = do_set_window(file, cmd, arg);
|
||||||
break;
|
break;
|
||||||
|
@ -820,6 +841,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
case VIDIOCSFBUF32:
|
case VIDIOCSFBUF32:
|
||||||
case VIDIOCGFREQ32:
|
case VIDIOCGFREQ32:
|
||||||
case VIDIOCSFREQ32:
|
case VIDIOCSFREQ32:
|
||||||
|
#endif
|
||||||
case VIDIOC_QUERYCAP:
|
case VIDIOC_QUERYCAP:
|
||||||
case VIDIOC_ENUM_FMT:
|
case VIDIOC_ENUM_FMT:
|
||||||
case VIDIOC_G_FMT32:
|
case VIDIOC_G_FMT32:
|
||||||
|
@ -851,6 +873,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
ret = do_video_ioctl(file, cmd, arg);
|
ret = do_video_ioctl(file, cmd, arg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
/* Little v, the video4linux ioctls (conflict?) */
|
/* Little v, the video4linux ioctls (conflict?) */
|
||||||
case VIDIOCGCAP:
|
case VIDIOCGCAP:
|
||||||
case VIDIOCGCHAN:
|
case VIDIOCGCHAN:
|
||||||
|
@ -879,6 +902,7 @@ long v4l_compat_ioctl32(struct file *file, unsigned int cmd, unsigned long arg)
|
||||||
case _IOR('v' , BASE_VIDIOCPRIVATE+7, int):
|
case _IOR('v' , BASE_VIDIOCPRIVATE+7, int):
|
||||||
ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
|
ret = native_ioctl(file, cmd, (unsigned long)compat_ptr(arg));
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
v4l_print_ioctl("compat_ioctl32", cmd);
|
v4l_print_ioctl("compat_ioctl32", cmd);
|
||||||
}
|
}
|
||||||
|
|
|
@ -104,8 +104,8 @@ u32 cx25840_read4(struct i2c_client * client, u16 addr)
|
||||||
if (i2c_master_recv(client, buffer, 4) < 4)
|
if (i2c_master_recv(client, buffer, 4) < 4)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
return (buffer[0] << 24) | (buffer[1] << 16) |
|
return (buffer[3] << 24) | (buffer[2] << 16) |
|
||||||
(buffer[2] << 8) | buffer[3];
|
(buffer[1] << 8) | buffer[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
|
int cx25840_and_or(struct i2c_client *client, u16 addr, unsigned and_mask,
|
||||||
|
|
|
@ -1225,7 +1225,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
|
||||||
struct v4l2_format *f = arg;
|
struct v4l2_format *f = arg;
|
||||||
return cx8800_try_fmt(dev,fh,f);
|
return cx8800_try_fmt(dev,fh,f);
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
/* --- streaming capture ------------------------------------- */
|
/* --- streaming capture ------------------------------------- */
|
||||||
case VIDIOCGMBUF:
|
case VIDIOCGMBUF:
|
||||||
{
|
{
|
||||||
|
@ -1584,7 +1584,7 @@ static int radio_do_ioctl(struct inode *inode, struct file *file,
|
||||||
*id = 0;
|
*id = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCSTUNER:
|
case VIDIOCSTUNER:
|
||||||
{
|
{
|
||||||
struct video_tuner *v = arg;
|
struct video_tuner *v = arg;
|
||||||
|
|
|
@ -961,10 +961,10 @@ int msp34xxg_thread(void *data)
|
||||||
/* setup the chip*/
|
/* setup the chip*/
|
||||||
msp34xxg_reset(client);
|
msp34xxg_reset(client);
|
||||||
state->std = state->radio ? 0x40 : msp_standard;
|
state->std = state->radio ? 0x40 : msp_standard;
|
||||||
if (state->std != 1)
|
|
||||||
goto unmute;
|
|
||||||
/* start autodetect */
|
/* start autodetect */
|
||||||
msp_write_dem(client, 0x20, state->std);
|
msp_write_dem(client, 0x20, state->std);
|
||||||
|
if (state->std != 1)
|
||||||
|
goto unmute;
|
||||||
|
|
||||||
/* watch autodetect */
|
/* watch autodetect */
|
||||||
v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n");
|
v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n");
|
||||||
|
|
|
@ -30,7 +30,7 @@ config USB_PWC
|
||||||
|
|
||||||
config USB_PWC_DEBUG
|
config USB_PWC_DEBUG
|
||||||
bool "USB Philips Cameras verbose debug"
|
bool "USB Philips Cameras verbose debug"
|
||||||
depends USB_PWC
|
depends on USB_PWC
|
||||||
help
|
help
|
||||||
Say Y here in order to have the pwc driver generate verbose debugging
|
Say Y here in order to have the pwc driver generate verbose debugging
|
||||||
messages.
|
messages.
|
||||||
|
|
|
@ -160,6 +160,7 @@ static struct file_operations pwc_fops = {
|
||||||
.poll = pwc_video_poll,
|
.poll = pwc_video_poll,
|
||||||
.mmap = pwc_video_mmap,
|
.mmap = pwc_video_mmap,
|
||||||
.ioctl = pwc_video_ioctl,
|
.ioctl = pwc_video_ioctl,
|
||||||
|
.compat_ioctl = v4l_compat_ioctl32,
|
||||||
.llseek = no_llseek,
|
.llseek = no_llseek,
|
||||||
};
|
};
|
||||||
static struct video_device pwc_template = {
|
static struct video_device pwc_template = {
|
||||||
|
|
|
@ -2087,7 +2087,7 @@ static int video_do_ioctl(struct inode *inode, struct file *file,
|
||||||
struct v4l2_format *f = arg;
|
struct v4l2_format *f = arg;
|
||||||
return saa7134_try_fmt(dev,fh,f);
|
return saa7134_try_fmt(dev,fh,f);
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case VIDIOCGMBUF:
|
case VIDIOCGMBUF:
|
||||||
{
|
{
|
||||||
struct video_mbuf *mbuf = arg;
|
struct video_mbuf *mbuf = arg;
|
||||||
|
|
|
@ -1027,10 +1027,11 @@ static struct tuner_params tuner_tnf_5335mf_params[] = {
|
||||||
/* 70-79 */
|
/* 70-79 */
|
||||||
/* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */
|
/* ------------ TUNER_SAMSUNG_TCPN_2121P30A - Samsung NTSC ------------ */
|
||||||
|
|
||||||
|
/* '+ 4' turns on the Low Noise Amplifier */
|
||||||
static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = {
|
static struct tuner_range tuner_samsung_tcpn_2121p30a_ntsc_ranges[] = {
|
||||||
{ 16 * 130.00 /*MHz*/, 0xce, 0x01, },
|
{ 16 * 130.00 /*MHz*/, 0xce, 0x01 + 4, },
|
||||||
{ 16 * 364.50 /*MHz*/, 0xce, 0x02, },
|
{ 16 * 364.50 /*MHz*/, 0xce, 0x02 + 4, },
|
||||||
{ 16 * 999.99 , 0xce, 0x08, },
|
{ 16 * 999.99 , 0xce, 0x08 + 4, },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = {
|
static struct tuner_params tuner_samsung_tcpn_2121p30a_params[] = {
|
||||||
|
@ -1060,10 +1061,11 @@ static struct tuner_params tuner_thomson_fe6600_params[] = {
|
||||||
|
|
||||||
/* ------------ TUNER_SAMSUNG_TCPG_6121P30A - Samsung PAL ------------ */
|
/* ------------ TUNER_SAMSUNG_TCPG_6121P30A - Samsung PAL ------------ */
|
||||||
|
|
||||||
|
/* '+ 4' turns on the Low Noise Amplifier */
|
||||||
static struct tuner_range tuner_samsung_tcpg_6121p30a_pal_ranges[] = {
|
static struct tuner_range tuner_samsung_tcpg_6121p30a_pal_ranges[] = {
|
||||||
{ 16 * 146.25 /*MHz*/, 0xce, 0x01, },
|
{ 16 * 146.25 /*MHz*/, 0xce, 0x01 + 4, },
|
||||||
{ 16 * 428.50 /*MHz*/, 0xce, 0x02, },
|
{ 16 * 428.50 /*MHz*/, 0xce, 0x02 + 4, },
|
||||||
{ 16 * 999.99 , 0xce, 0x08, },
|
{ 16 * 999.99 , 0xce, 0x08 + 4, },
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = {
|
static struct tuner_params tuner_samsung_tcpg_6121p30a_params[] = {
|
||||||
|
|
|
@ -599,6 +599,10 @@ v4l_compat_translate_ioctl(struct inode *inode,
|
||||||
dprintk("VIDIOCGPICT / VIDIOC_G_FMT: %d\n",err);
|
dprintk("VIDIOCGPICT / VIDIOC_G_FMT: %d\n",err);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pict->depth = ((fmt2->fmt.pix.bytesperline<<3)
|
||||||
|
+ (fmt2->fmt.pix.width-1) )
|
||||||
|
/fmt2->fmt.pix.width;
|
||||||
pict->palette = pixelformat_to_palette(
|
pict->palette = pixelformat_to_palette(
|
||||||
fmt2->fmt.pix.pixelformat);
|
fmt2->fmt.pix.pixelformat);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -202,7 +202,7 @@ static char *v4l2_memory_names[] = {
|
||||||
/* ------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------ */
|
||||||
/* debug help functions */
|
/* debug help functions */
|
||||||
|
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
static const char *v4l1_ioctls[] = {
|
static const char *v4l1_ioctls[] = {
|
||||||
[_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
|
[_IOC_NR(VIDIOCGCAP)] = "VIDIOCGCAP",
|
||||||
[_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
|
[_IOC_NR(VIDIOCGCHAN)] = "VIDIOCGCHAN",
|
||||||
|
@ -301,7 +301,7 @@ static const char *v4l2_ioctls[] = {
|
||||||
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
|
#define V4L2_IOCTLS ARRAY_SIZE(v4l2_ioctls)
|
||||||
|
|
||||||
static const char *v4l2_int_ioctls[] = {
|
static const char *v4l2_int_ioctls[] = {
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
[_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
|
[_IOC_NR(DECODER_GET_CAPABILITIES)] = "DECODER_GET_CAPABILITIES",
|
||||||
[_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
|
[_IOC_NR(DECODER_GET_STATUS)] = "DECODER_GET_STATUS",
|
||||||
[_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
|
[_IOC_NR(DECODER_SET_NORM)] = "DECODER_SET_NORM",
|
||||||
|
@ -367,7 +367,7 @@ void v4l_printk_ioctl(unsigned int cmd)
|
||||||
(_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
|
(_IOC_NR(cmd) < V4L2_INT_IOCTLS) ?
|
||||||
v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
|
v4l2_int_ioctls[_IOC_NR(cmd)] : "UNKNOWN", dir, cmd);
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
case 'v':
|
case 'v':
|
||||||
printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
|
printk("v4l1 ioctl %s, dir=%s (0x%08x)\n",
|
||||||
(_IOC_NR(cmd) < V4L1_IOCTLS) ?
|
(_IOC_NR(cmd) < V4L1_IOCTLS) ?
|
||||||
|
|
|
@ -760,7 +760,7 @@ static int __video_do_ioctl(struct inode *inode, struct file *file,
|
||||||
ret=vfd->vidioc_overlay(file, fh, *i);
|
ret=vfd->vidioc_overlay(file, fh, *i);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
/* --- streaming capture ------------------------------------- */
|
/* --- streaming capture ------------------------------------- */
|
||||||
case VIDIOCGMBUF:
|
case VIDIOCGMBUF:
|
||||||
{
|
{
|
||||||
|
|
|
@ -986,7 +986,7 @@ static int vidioc_dqbuf (struct file *file, void *priv, struct v4l2_buffer *p)
|
||||||
file->f_flags & O_NONBLOCK));
|
file->f_flags & O_NONBLOCK));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf)
|
static int vidiocgmbuf (struct file *file, void *priv, struct video_mbuf *mbuf)
|
||||||
{
|
{
|
||||||
struct vivi_fh *fh=priv;
|
struct vivi_fh *fh=priv;
|
||||||
|
@ -1328,7 +1328,7 @@ static struct video_device vivi = {
|
||||||
.vidioc_s_ctrl = vidioc_s_ctrl,
|
.vidioc_s_ctrl = vidioc_s_ctrl,
|
||||||
.vidioc_streamon = vidioc_streamon,
|
.vidioc_streamon = vidioc_streamon,
|
||||||
.vidioc_streamoff = vidioc_streamoff,
|
.vidioc_streamoff = vidioc_streamoff,
|
||||||
#ifdef CONFIG_V4L1_COMPAT
|
#ifdef CONFIG_VIDEO_V4L1_COMPAT
|
||||||
.vidiocgmbuf = vidiocgmbuf,
|
.vidiocgmbuf = vidiocgmbuf,
|
||||||
#endif
|
#endif
|
||||||
.tvnorms = tvnorms,
|
.tvnorms = tvnorms,
|
||||||
|
|
|
@ -79,7 +79,8 @@ static int mmc_queue_thread(void *d)
|
||||||
spin_lock_irq(q->queue_lock);
|
spin_lock_irq(q->queue_lock);
|
||||||
set_current_state(TASK_INTERRUPTIBLE);
|
set_current_state(TASK_INTERRUPTIBLE);
|
||||||
if (!blk_queue_plugged(q))
|
if (!blk_queue_plugged(q))
|
||||||
mq->req = req = elv_next_request(q);
|
req = elv_next_request(q);
|
||||||
|
mq->req = req;
|
||||||
spin_unlock_irq(q->queue_lock);
|
spin_unlock_irq(q->queue_lock);
|
||||||
|
|
||||||
if (!req) {
|
if (!req) {
|
||||||
|
|
|
@ -41,7 +41,7 @@
|
||||||
#include "wbsd.h"
|
#include "wbsd.h"
|
||||||
|
|
||||||
#define DRIVER_NAME "wbsd"
|
#define DRIVER_NAME "wbsd"
|
||||||
#define DRIVER_VERSION "1.5"
|
#define DRIVER_VERSION "1.6"
|
||||||
|
|
||||||
#define DBG(x...) \
|
#define DBG(x...) \
|
||||||
pr_debug(DRIVER_NAME ": " x)
|
pr_debug(DRIVER_NAME ": " x)
|
||||||
|
@ -1439,13 +1439,13 @@ static int __devinit wbsd_scan(struct wbsd_host *host)
|
||||||
|
|
||||||
static int __devinit wbsd_request_region(struct wbsd_host *host, int base)
|
static int __devinit wbsd_request_region(struct wbsd_host *host, int base)
|
||||||
{
|
{
|
||||||
if (io & 0x7)
|
if (base & 0x7)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (!request_region(base, 8, DRIVER_NAME))
|
if (!request_region(base, 8, DRIVER_NAME))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
|
|
||||||
host->base = io;
|
host->base = base;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1773,7 +1773,7 @@ static int __devinit wbsd_init(struct device *dev, int base, int irq, int dma,
|
||||||
/*
|
/*
|
||||||
* Request resources.
|
* Request resources.
|
||||||
*/
|
*/
|
||||||
ret = wbsd_request_resources(host, io, irq, dma);
|
ret = wbsd_request_resources(host, base, irq, dma);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
wbsd_release_resources(host);
|
wbsd_release_resources(host);
|
||||||
wbsd_free_mmc(dev);
|
wbsd_free_mmc(dev);
|
||||||
|
@ -1861,6 +1861,7 @@ static void __devexit wbsd_shutdown(struct device *dev, int pnp)
|
||||||
|
|
||||||
static int __devinit wbsd_probe(struct platform_device *dev)
|
static int __devinit wbsd_probe(struct platform_device *dev)
|
||||||
{
|
{
|
||||||
|
/* Use the module parameters for resources */
|
||||||
return wbsd_init(&dev->dev, io, irq, dma, 0);
|
return wbsd_init(&dev->dev, io, irq, dma, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@
|
||||||
|
|
||||||
#define DRV_MODULE_NAME "bnx2"
|
#define DRV_MODULE_NAME "bnx2"
|
||||||
#define PFX DRV_MODULE_NAME ": "
|
#define PFX DRV_MODULE_NAME ": "
|
||||||
#define DRV_MODULE_VERSION "1.4.43"
|
#define DRV_MODULE_VERSION "1.4.44"
|
||||||
#define DRV_MODULE_RELDATE "June 28, 2006"
|
#define DRV_MODULE_RELDATE "August 10, 2006"
|
||||||
|
|
||||||
#define RUN_AT(x) (jiffies + (x))
|
#define RUN_AT(x) (jiffies + (x))
|
||||||
|
|
||||||
|
@ -209,8 +209,10 @@ MODULE_DEVICE_TABLE(pci, bnx2_pci_tbl);
|
||||||
|
|
||||||
static inline u32 bnx2_tx_avail(struct bnx2 *bp)
|
static inline u32 bnx2_tx_avail(struct bnx2 *bp)
|
||||||
{
|
{
|
||||||
u32 diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons);
|
u32 diff;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
|
diff = TX_RING_IDX(bp->tx_prod) - TX_RING_IDX(bp->tx_cons);
|
||||||
if (diff > MAX_TX_DESC_CNT)
|
if (diff > MAX_TX_DESC_CNT)
|
||||||
diff = (diff & MAX_TX_DESC_CNT) - 1;
|
diff = (diff & MAX_TX_DESC_CNT) - 1;
|
||||||
return (bp->tx_ring_size - diff);
|
return (bp->tx_ring_size - diff);
|
||||||
|
@ -1569,7 +1571,7 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index)
|
||||||
struct rx_bd *rxbd = &bp->rx_desc_ring[RX_RING(index)][RX_IDX(index)];
|
struct rx_bd *rxbd = &bp->rx_desc_ring[RX_RING(index)][RX_IDX(index)];
|
||||||
unsigned long align;
|
unsigned long align;
|
||||||
|
|
||||||
skb = dev_alloc_skb(bp->rx_buf_size);
|
skb = netdev_alloc_skb(bp->dev, bp->rx_buf_size);
|
||||||
if (skb == NULL) {
|
if (skb == NULL) {
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
@ -1578,7 +1580,6 @@ bnx2_alloc_rx_skb(struct bnx2 *bp, u16 index)
|
||||||
skb_reserve(skb, 8 - align);
|
skb_reserve(skb, 8 - align);
|
||||||
}
|
}
|
||||||
|
|
||||||
skb->dev = bp->dev;
|
|
||||||
mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size,
|
mapping = pci_map_single(bp->pdev, skb->data, bp->rx_buf_use_size,
|
||||||
PCI_DMA_FROMDEVICE);
|
PCI_DMA_FROMDEVICE);
|
||||||
|
|
||||||
|
@ -1686,15 +1687,20 @@ bnx2_tx_int(struct bnx2 *bp)
|
||||||
}
|
}
|
||||||
|
|
||||||
bp->tx_cons = sw_cons;
|
bp->tx_cons = sw_cons;
|
||||||
|
/* Need to make the tx_cons update visible to bnx2_start_xmit()
|
||||||
|
* before checking for netif_queue_stopped(). Without the
|
||||||
|
* memory barrier, there is a small possibility that bnx2_start_xmit()
|
||||||
|
* will miss it and cause the queue to be stopped forever.
|
||||||
|
*/
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
if (unlikely(netif_queue_stopped(bp->dev))) {
|
if (unlikely(netif_queue_stopped(bp->dev)) &&
|
||||||
spin_lock(&bp->tx_lock);
|
(bnx2_tx_avail(bp) > bp->tx_wake_thresh)) {
|
||||||
|
netif_tx_lock(bp->dev);
|
||||||
if ((netif_queue_stopped(bp->dev)) &&
|
if ((netif_queue_stopped(bp->dev)) &&
|
||||||
(bnx2_tx_avail(bp) > MAX_SKB_FRAGS)) {
|
(bnx2_tx_avail(bp) > bp->tx_wake_thresh))
|
||||||
|
|
||||||
netif_wake_queue(bp->dev);
|
netif_wake_queue(bp->dev);
|
||||||
}
|
netif_tx_unlock(bp->dev);
|
||||||
spin_unlock(&bp->tx_lock);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1786,7 +1792,7 @@ bnx2_rx_int(struct bnx2 *bp, int budget)
|
||||||
if ((bp->dev->mtu > 1500) && (len <= RX_COPY_THRESH)) {
|
if ((bp->dev->mtu > 1500) && (len <= RX_COPY_THRESH)) {
|
||||||
struct sk_buff *new_skb;
|
struct sk_buff *new_skb;
|
||||||
|
|
||||||
new_skb = dev_alloc_skb(len + 2);
|
new_skb = netdev_alloc_skb(bp->dev, len + 2);
|
||||||
if (new_skb == NULL)
|
if (new_skb == NULL)
|
||||||
goto reuse_rx;
|
goto reuse_rx;
|
||||||
|
|
||||||
|
@ -1797,7 +1803,6 @@ bnx2_rx_int(struct bnx2 *bp, int budget)
|
||||||
|
|
||||||
skb_reserve(new_skb, 2);
|
skb_reserve(new_skb, 2);
|
||||||
skb_put(new_skb, len);
|
skb_put(new_skb, len);
|
||||||
new_skb->dev = bp->dev;
|
|
||||||
|
|
||||||
bnx2_reuse_rx_skb(bp, skb,
|
bnx2_reuse_rx_skb(bp, skb,
|
||||||
sw_ring_cons, sw_ring_prod);
|
sw_ring_cons, sw_ring_prod);
|
||||||
|
@ -3503,6 +3508,8 @@ bnx2_init_tx_ring(struct bnx2 *bp)
|
||||||
struct tx_bd *txbd;
|
struct tx_bd *txbd;
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
bp->tx_wake_thresh = bp->tx_ring_size / 2;
|
||||||
|
|
||||||
txbd = &bp->tx_desc_ring[MAX_TX_DESC_CNT];
|
txbd = &bp->tx_desc_ring[MAX_TX_DESC_CNT];
|
||||||
|
|
||||||
txbd->tx_bd_haddr_hi = (u64) bp->tx_desc_mapping >> 32;
|
txbd->tx_bd_haddr_hi = (u64) bp->tx_desc_mapping >> 32;
|
||||||
|
@ -3952,7 +3959,7 @@ bnx2_run_loopback(struct bnx2 *bp, int loopback_mode)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
pkt_size = 1514;
|
pkt_size = 1514;
|
||||||
skb = dev_alloc_skb(pkt_size);
|
skb = netdev_alloc_skb(bp->dev, pkt_size);
|
||||||
if (!skb)
|
if (!skb)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
packet = skb_put(skb, pkt_size);
|
packet = skb_put(skb, pkt_size);
|
||||||
|
@ -4390,10 +4397,8 @@ bnx2_vlan_rx_kill_vid(struct net_device *dev, uint16_t vid)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Called with netif_tx_lock.
|
/* Called with netif_tx_lock.
|
||||||
* hard_start_xmit is pseudo-lockless - a lock is only required when
|
* bnx2_tx_int() runs without netif_tx_lock unless it needs to call
|
||||||
* the tx queue is full. This way, we get the benefit of lockless
|
* netif_wake_queue().
|
||||||
* operations most of the time without the complexities to handle
|
|
||||||
* netif_stop_queue/wake_queue race conditions.
|
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
|
@ -4512,12 +4517,9 @@ bnx2_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
dev->trans_start = jiffies;
|
dev->trans_start = jiffies;
|
||||||
|
|
||||||
if (unlikely(bnx2_tx_avail(bp) <= MAX_SKB_FRAGS)) {
|
if (unlikely(bnx2_tx_avail(bp) <= MAX_SKB_FRAGS)) {
|
||||||
spin_lock(&bp->tx_lock);
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
if (bnx2_tx_avail(bp) > bp->tx_wake_thresh)
|
||||||
if (bnx2_tx_avail(bp) > MAX_SKB_FRAGS)
|
|
||||||
netif_wake_queue(dev);
|
netif_wake_queue(dev);
|
||||||
spin_unlock(&bp->tx_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return NETDEV_TX_OK;
|
return NETDEV_TX_OK;
|
||||||
|
@ -5628,7 +5630,6 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||||
bp->pdev = pdev;
|
bp->pdev = pdev;
|
||||||
|
|
||||||
spin_lock_init(&bp->phy_lock);
|
spin_lock_init(&bp->phy_lock);
|
||||||
spin_lock_init(&bp->tx_lock);
|
|
||||||
INIT_WORK(&bp->reset_task, bnx2_reset_task, bp);
|
INIT_WORK(&bp->reset_task, bnx2_reset_task, bp);
|
||||||
|
|
||||||
dev->base_addr = dev->mem_start = pci_resource_start(pdev, 0);
|
dev->base_addr = dev->mem_start = pci_resource_start(pdev, 0);
|
||||||
|
@ -5751,7 +5752,7 @@ bnx2_init_board(struct pci_dev *pdev, struct net_device *dev)
|
||||||
bp->mac_addr[5] = (u8) reg;
|
bp->mac_addr[5] = (u8) reg;
|
||||||
|
|
||||||
bp->tx_ring_size = MAX_TX_DESC_CNT;
|
bp->tx_ring_size = MAX_TX_DESC_CNT;
|
||||||
bnx2_set_rx_ring_size(bp, 100);
|
bnx2_set_rx_ring_size(bp, 255);
|
||||||
|
|
||||||
bp->rx_csum = 1;
|
bp->rx_csum = 1;
|
||||||
|
|
||||||
|
|
|
@ -3890,10 +3890,6 @@ struct bnx2 {
|
||||||
u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES)));
|
u32 tx_prod_bseq __attribute__((aligned(L1_CACHE_BYTES)));
|
||||||
u16 tx_prod;
|
u16 tx_prod;
|
||||||
|
|
||||||
struct tx_bd *tx_desc_ring;
|
|
||||||
struct sw_bd *tx_buf_ring;
|
|
||||||
int tx_ring_size;
|
|
||||||
|
|
||||||
u16 tx_cons __attribute__((aligned(L1_CACHE_BYTES)));
|
u16 tx_cons __attribute__((aligned(L1_CACHE_BYTES)));
|
||||||
u16 hw_tx_cons;
|
u16 hw_tx_cons;
|
||||||
|
|
||||||
|
@ -3916,9 +3912,11 @@ struct bnx2 {
|
||||||
struct sw_bd *rx_buf_ring;
|
struct sw_bd *rx_buf_ring;
|
||||||
struct rx_bd *rx_desc_ring[MAX_RX_RINGS];
|
struct rx_bd *rx_desc_ring[MAX_RX_RINGS];
|
||||||
|
|
||||||
/* Only used to synchronize netif_stop_queue/wake_queue when tx */
|
/* TX constants */
|
||||||
/* ring is full */
|
struct tx_bd *tx_desc_ring;
|
||||||
spinlock_t tx_lock;
|
struct sw_bd *tx_buf_ring;
|
||||||
|
int tx_ring_size;
|
||||||
|
u32 tx_wake_thresh;
|
||||||
|
|
||||||
/* End of fields used in the performance code paths. */
|
/* End of fields used in the performance code paths. */
|
||||||
|
|
||||||
|
|
|
@ -2425,7 +2425,7 @@ static int myri10ge_resume(struct pci_dev *pdev)
|
||||||
}
|
}
|
||||||
|
|
||||||
myri10ge_reset(mgp);
|
myri10ge_reset(mgp);
|
||||||
myri10ge_dummy_rdma(mgp, mgp->tx.boundary != 4096);
|
myri10ge_dummy_rdma(mgp, 1);
|
||||||
|
|
||||||
/* Save configuration space to be restored if the
|
/* Save configuration space to be restored if the
|
||||||
* nic resets due to a parity error */
|
* nic resets due to a parity error */
|
||||||
|
|
|
@ -192,7 +192,7 @@ struct cardmap {
|
||||||
void *ptr[CARDMAP_WIDTH];
|
void *ptr[CARDMAP_WIDTH];
|
||||||
};
|
};
|
||||||
static void *cardmap_get(struct cardmap *map, unsigned int nr);
|
static void *cardmap_get(struct cardmap *map, unsigned int nr);
|
||||||
static void cardmap_set(struct cardmap **map, unsigned int nr, void *ptr);
|
static int cardmap_set(struct cardmap **map, unsigned int nr, void *ptr);
|
||||||
static unsigned int cardmap_find_first_free(struct cardmap *map);
|
static unsigned int cardmap_find_first_free(struct cardmap *map);
|
||||||
static void cardmap_destroy(struct cardmap **map);
|
static void cardmap_destroy(struct cardmap **map);
|
||||||
|
|
||||||
|
@ -1995,10 +1995,9 @@ ppp_register_channel(struct ppp_channel *chan)
|
||||||
{
|
{
|
||||||
struct channel *pch;
|
struct channel *pch;
|
||||||
|
|
||||||
pch = kmalloc(sizeof(struct channel), GFP_KERNEL);
|
pch = kzalloc(sizeof(struct channel), GFP_KERNEL);
|
||||||
if (pch == 0)
|
if (pch == 0)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
memset(pch, 0, sizeof(struct channel));
|
|
||||||
pch->ppp = NULL;
|
pch->ppp = NULL;
|
||||||
pch->chan = chan;
|
pch->chan = chan;
|
||||||
chan->ppp = pch;
|
chan->ppp = pch;
|
||||||
|
@ -2408,13 +2407,12 @@ ppp_create_interface(int unit, int *retp)
|
||||||
int ret = -ENOMEM;
|
int ret = -ENOMEM;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
ppp = kmalloc(sizeof(struct ppp), GFP_KERNEL);
|
ppp = kzalloc(sizeof(struct ppp), GFP_KERNEL);
|
||||||
if (!ppp)
|
if (!ppp)
|
||||||
goto out;
|
goto out;
|
||||||
dev = alloc_netdev(0, "", ppp_setup);
|
dev = alloc_netdev(0, "", ppp_setup);
|
||||||
if (!dev)
|
if (!dev)
|
||||||
goto out1;
|
goto out1;
|
||||||
memset(ppp, 0, sizeof(struct ppp));
|
|
||||||
|
|
||||||
ppp->mru = PPP_MRU;
|
ppp->mru = PPP_MRU;
|
||||||
init_ppp_file(&ppp->file, INTERFACE);
|
init_ppp_file(&ppp->file, INTERFACE);
|
||||||
|
@ -2454,11 +2452,16 @@ ppp_create_interface(int unit, int *retp)
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic_inc(&ppp_unit_count);
|
atomic_inc(&ppp_unit_count);
|
||||||
cardmap_set(&all_ppp_units, unit, ppp);
|
ret = cardmap_set(&all_ppp_units, unit, ppp);
|
||||||
|
if (ret != 0)
|
||||||
|
goto out3;
|
||||||
|
|
||||||
mutex_unlock(&all_ppp_mutex);
|
mutex_unlock(&all_ppp_mutex);
|
||||||
*retp = 0;
|
*retp = 0;
|
||||||
return ppp;
|
return ppp;
|
||||||
|
|
||||||
|
out3:
|
||||||
|
atomic_dec(&ppp_unit_count);
|
||||||
out2:
|
out2:
|
||||||
mutex_unlock(&all_ppp_mutex);
|
mutex_unlock(&all_ppp_mutex);
|
||||||
free_netdev(dev);
|
free_netdev(dev);
|
||||||
|
@ -2695,7 +2698,7 @@ static void *cardmap_get(struct cardmap *map, unsigned int nr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
static int cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||||
{
|
{
|
||||||
struct cardmap *p;
|
struct cardmap *p;
|
||||||
int i;
|
int i;
|
||||||
|
@ -2704,8 +2707,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||||
if (p == NULL || (nr >> p->shift) >= CARDMAP_WIDTH) {
|
if (p == NULL || (nr >> p->shift) >= CARDMAP_WIDTH) {
|
||||||
do {
|
do {
|
||||||
/* need a new top level */
|
/* need a new top level */
|
||||||
struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL);
|
struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL);
|
||||||
memset(np, 0, sizeof(*np));
|
if (!np)
|
||||||
|
goto enomem;
|
||||||
np->ptr[0] = p;
|
np->ptr[0] = p;
|
||||||
if (p != NULL) {
|
if (p != NULL) {
|
||||||
np->shift = p->shift + CARDMAP_ORDER;
|
np->shift = p->shift + CARDMAP_ORDER;
|
||||||
|
@ -2719,8 +2723,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||||
while (p->shift > 0) {
|
while (p->shift > 0) {
|
||||||
i = (nr >> p->shift) & CARDMAP_MASK;
|
i = (nr >> p->shift) & CARDMAP_MASK;
|
||||||
if (p->ptr[i] == NULL) {
|
if (p->ptr[i] == NULL) {
|
||||||
struct cardmap *np = kmalloc(sizeof(*np), GFP_KERNEL);
|
struct cardmap *np = kzalloc(sizeof(*np), GFP_KERNEL);
|
||||||
memset(np, 0, sizeof(*np));
|
if (!np)
|
||||||
|
goto enomem;
|
||||||
np->shift = p->shift - CARDMAP_ORDER;
|
np->shift = p->shift - CARDMAP_ORDER;
|
||||||
np->parent = p;
|
np->parent = p;
|
||||||
p->ptr[i] = np;
|
p->ptr[i] = np;
|
||||||
|
@ -2735,6 +2740,9 @@ static void cardmap_set(struct cardmap **pmap, unsigned int nr, void *ptr)
|
||||||
set_bit(i, &p->inuse);
|
set_bit(i, &p->inuse);
|
||||||
else
|
else
|
||||||
clear_bit(i, &p->inuse);
|
clear_bit(i, &p->inuse);
|
||||||
|
return 0;
|
||||||
|
enomem:
|
||||||
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned int cardmap_find_first_free(struct cardmap *map)
|
static unsigned int cardmap_find_first_free(struct cardmap *map)
|
||||||
|
|
|
@ -68,8 +68,8 @@
|
||||||
|
|
||||||
#define DRV_MODULE_NAME "tg3"
|
#define DRV_MODULE_NAME "tg3"
|
||||||
#define PFX DRV_MODULE_NAME ": "
|
#define PFX DRV_MODULE_NAME ": "
|
||||||
#define DRV_MODULE_VERSION "3.64"
|
#define DRV_MODULE_VERSION "3.65"
|
||||||
#define DRV_MODULE_RELDATE "July 31, 2006"
|
#define DRV_MODULE_RELDATE "August 07, 2006"
|
||||||
|
|
||||||
#define TG3_DEF_MAC_MODE 0
|
#define TG3_DEF_MAC_MODE 0
|
||||||
#define TG3_DEF_RX_MODE 0
|
#define TG3_DEF_RX_MODE 0
|
||||||
|
@ -123,9 +123,6 @@
|
||||||
TG3_RX_RCB_RING_SIZE(tp))
|
TG3_RX_RCB_RING_SIZE(tp))
|
||||||
#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
|
#define TG3_TX_RING_BYTES (sizeof(struct tg3_tx_buffer_desc) * \
|
||||||
TG3_TX_RING_SIZE)
|
TG3_TX_RING_SIZE)
|
||||||
#define TX_BUFFS_AVAIL(TP) \
|
|
||||||
((TP)->tx_pending - \
|
|
||||||
(((TP)->tx_prod - (TP)->tx_cons) & (TG3_TX_RING_SIZE - 1)))
|
|
||||||
#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
|
#define NEXT_TX(N) (((N) + 1) & (TG3_TX_RING_SIZE - 1))
|
||||||
|
|
||||||
#define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
|
#define RX_PKT_BUF_SZ (1536 + tp->rx_offset + 64)
|
||||||
|
@ -2987,6 +2984,13 @@ static void tg3_tx_recover(struct tg3 *tp)
|
||||||
spin_unlock(&tp->lock);
|
spin_unlock(&tp->lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline u32 tg3_tx_avail(struct tg3 *tp)
|
||||||
|
{
|
||||||
|
smp_mb();
|
||||||
|
return (tp->tx_pending -
|
||||||
|
((tp->tx_prod - tp->tx_cons) & (TG3_TX_RING_SIZE - 1)));
|
||||||
|
}
|
||||||
|
|
||||||
/* Tigon3 never reports partial packet sends. So we do not
|
/* Tigon3 never reports partial packet sends. So we do not
|
||||||
* need special logic to handle SKBs that have not had all
|
* need special logic to handle SKBs that have not had all
|
||||||
* of their frags sent yet, like SunGEM does.
|
* of their frags sent yet, like SunGEM does.
|
||||||
|
@ -3038,12 +3042,20 @@ static void tg3_tx(struct tg3 *tp)
|
||||||
|
|
||||||
tp->tx_cons = sw_idx;
|
tp->tx_cons = sw_idx;
|
||||||
|
|
||||||
if (unlikely(netif_queue_stopped(tp->dev))) {
|
/* Need to make the tx_cons update visible to tg3_start_xmit()
|
||||||
spin_lock(&tp->tx_lock);
|
* before checking for netif_queue_stopped(). Without the
|
||||||
|
* memory barrier, there is a small possibility that tg3_start_xmit()
|
||||||
|
* will miss it and cause the queue to be stopped forever.
|
||||||
|
*/
|
||||||
|
smp_mb();
|
||||||
|
|
||||||
|
if (unlikely(netif_queue_stopped(tp->dev) &&
|
||||||
|
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH))) {
|
||||||
|
netif_tx_lock(tp->dev);
|
||||||
if (netif_queue_stopped(tp->dev) &&
|
if (netif_queue_stopped(tp->dev) &&
|
||||||
(TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH))
|
(tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH))
|
||||||
netif_wake_queue(tp->dev);
|
netif_wake_queue(tp->dev);
|
||||||
spin_unlock(&tp->tx_lock);
|
netif_tx_unlock(tp->dev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3101,7 +3113,6 @@ static int tg3_alloc_rx_skb(struct tg3 *tp, u32 opaque_key,
|
||||||
if (skb == NULL)
|
if (skb == NULL)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
skb->dev = tp->dev;
|
|
||||||
skb_reserve(skb, tp->rx_offset);
|
skb_reserve(skb, tp->rx_offset);
|
||||||
|
|
||||||
mapping = pci_map_single(tp->pdev, skb->data,
|
mapping = pci_map_single(tp->pdev, skb->data,
|
||||||
|
@ -3274,7 +3285,6 @@ static int tg3_rx(struct tg3 *tp, int budget)
|
||||||
if (copy_skb == NULL)
|
if (copy_skb == NULL)
|
||||||
goto drop_it_no_recycle;
|
goto drop_it_no_recycle;
|
||||||
|
|
||||||
copy_skb->dev = tp->dev;
|
|
||||||
skb_reserve(copy_skb, 2);
|
skb_reserve(copy_skb, 2);
|
||||||
skb_put(copy_skb, len);
|
skb_put(copy_skb, len);
|
||||||
pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
|
pci_dma_sync_single_for_cpu(tp->pdev, dma_addr, len, PCI_DMA_FROMDEVICE);
|
||||||
|
@ -3797,7 +3807,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
* interrupt. Furthermore, IRQ processing runs lockless so we have
|
* interrupt. Furthermore, IRQ processing runs lockless so we have
|
||||||
* no IRQ context deadlocks to worry about either. Rejoice!
|
* no IRQ context deadlocks to worry about either. Rejoice!
|
||||||
*/
|
*/
|
||||||
if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
|
if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
|
||||||
if (!netif_queue_stopped(dev)) {
|
if (!netif_queue_stopped(dev)) {
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
|
@ -3893,12 +3903,10 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||||
tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
|
tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
|
||||||
|
|
||||||
tp->tx_prod = entry;
|
tp->tx_prod = entry;
|
||||||
if (unlikely(TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1))) {
|
if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
|
||||||
spin_lock(&tp->tx_lock);
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)
|
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH)
|
||||||
netif_wake_queue(tp->dev);
|
netif_wake_queue(tp->dev);
|
||||||
spin_unlock(&tp->tx_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
|
@ -3920,7 +3928,7 @@ static int tg3_tso_bug(struct tg3 *tp, struct sk_buff *skb)
|
||||||
struct sk_buff *segs, *nskb;
|
struct sk_buff *segs, *nskb;
|
||||||
|
|
||||||
/* Estimate the number of fragments in the worst case */
|
/* Estimate the number of fragments in the worst case */
|
||||||
if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->gso_segs * 3))) {
|
if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->gso_segs * 3))) {
|
||||||
netif_stop_queue(tp->dev);
|
netif_stop_queue(tp->dev);
|
||||||
return NETDEV_TX_BUSY;
|
return NETDEV_TX_BUSY;
|
||||||
}
|
}
|
||||||
|
@ -3960,7 +3968,7 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
|
||||||
* interrupt. Furthermore, IRQ processing runs lockless so we have
|
* interrupt. Furthermore, IRQ processing runs lockless so we have
|
||||||
* no IRQ context deadlocks to worry about either. Rejoice!
|
* no IRQ context deadlocks to worry about either. Rejoice!
|
||||||
*/
|
*/
|
||||||
if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
|
if (unlikely(tg3_tx_avail(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
|
||||||
if (!netif_queue_stopped(dev)) {
|
if (!netif_queue_stopped(dev)) {
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
|
|
||||||
|
@ -4110,12 +4118,10 @@ static int tg3_start_xmit_dma_bug(struct sk_buff *skb, struct net_device *dev)
|
||||||
tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
|
tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
|
||||||
|
|
||||||
tp->tx_prod = entry;
|
tp->tx_prod = entry;
|
||||||
if (unlikely(TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1))) {
|
if (unlikely(tg3_tx_avail(tp) <= (MAX_SKB_FRAGS + 1))) {
|
||||||
spin_lock(&tp->tx_lock);
|
|
||||||
netif_stop_queue(dev);
|
netif_stop_queue(dev);
|
||||||
if (TX_BUFFS_AVAIL(tp) > TG3_TX_WAKEUP_THRESH)
|
if (tg3_tx_avail(tp) > TG3_TX_WAKEUP_THRESH)
|
||||||
netif_wake_queue(tp->dev);
|
netif_wake_queue(tp->dev);
|
||||||
spin_unlock(&tp->tx_lock);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out_unlock:
|
out_unlock:
|
||||||
|
@ -11474,7 +11480,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
|
||||||
tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
|
tp->grc_mode |= GRC_MODE_BSWAP_NONFRM_DATA;
|
||||||
#endif
|
#endif
|
||||||
spin_lock_init(&tp->lock);
|
spin_lock_init(&tp->lock);
|
||||||
spin_lock_init(&tp->tx_lock);
|
|
||||||
spin_lock_init(&tp->indirect_lock);
|
spin_lock_init(&tp->indirect_lock);
|
||||||
INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
|
INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
|
||||||
|
|
||||||
|
|
|
@ -2079,9 +2079,9 @@ struct tg3 {
|
||||||
* lock: Held during reset, PHY access, timer, and when
|
* lock: Held during reset, PHY access, timer, and when
|
||||||
* updating tg3_flags and tg3_flags2.
|
* updating tg3_flags and tg3_flags2.
|
||||||
*
|
*
|
||||||
* tx_lock: Held during tg3_start_xmit and tg3_tx only
|
* netif_tx_lock: Held during tg3_start_xmit. tg3_tx holds
|
||||||
* when calling netif_[start|stop]_queue.
|
* netif_tx_lock when it needs to call
|
||||||
* tg3_start_xmit is protected by netif_tx_lock.
|
* netif_wake_queue.
|
||||||
*
|
*
|
||||||
* Both of these locks are to be held with BH safety.
|
* Both of these locks are to be held with BH safety.
|
||||||
*
|
*
|
||||||
|
@ -2118,8 +2118,6 @@ struct tg3 {
|
||||||
u32 tx_cons;
|
u32 tx_cons;
|
||||||
u32 tx_pending;
|
u32 tx_pending;
|
||||||
|
|
||||||
spinlock_t tx_lock;
|
|
||||||
|
|
||||||
struct tg3_tx_buffer_desc *tx_ring;
|
struct tg3_tx_buffer_desc *tx_ring;
|
||||||
struct tx_ring_info *tx_buffers;
|
struct tx_ring_info *tx_buffers;
|
||||||
dma_addr_t tx_desc_mapping;
|
dma_addr_t tx_desc_mapping;
|
||||||
|
|
|
@ -153,13 +153,6 @@ config HOTPLUG_PCI_SHPC_POLL_EVENT_MODE
|
||||||
|
|
||||||
When in doubt, say N.
|
When in doubt, say N.
|
||||||
|
|
||||||
config HOTPLUG_PCI_SHPC_PHPRM_LEGACY
|
|
||||||
bool "For AMD SHPC only: Use $HRT for resource/configuration"
|
|
||||||
depends on HOTPLUG_PCI_SHPC && !ACPI
|
|
||||||
help
|
|
||||||
Say Y here for AMD SHPC. You have to select this option if you are
|
|
||||||
using this driver on platform with AMD SHPC.
|
|
||||||
|
|
||||||
config HOTPLUG_PCI_RPA
|
config HOTPLUG_PCI_RPA
|
||||||
tristate "RPA PCI Hotplug driver"
|
tristate "RPA PCI Hotplug driver"
|
||||||
depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE
|
depends on HOTPLUG_PCI && PPC_PSERIES && PPC64 && !HOTPLUG_PCI_FAKE
|
||||||
|
|
|
@ -279,6 +279,11 @@ struct hpc_ops {
|
||||||
|
|
||||||
|
|
||||||
#ifdef CONFIG_ACPI
|
#ifdef CONFIG_ACPI
|
||||||
|
#include <acpi/acpi.h>
|
||||||
|
#include <acpi/acpi_bus.h>
|
||||||
|
#include <acpi/actypes.h>
|
||||||
|
#include <linux/pci-acpi.h>
|
||||||
|
|
||||||
#define pciehp_get_hp_hw_control_from_firmware(dev) \
|
#define pciehp_get_hp_hw_control_from_firmware(dev) \
|
||||||
pciehp_acpi_get_hp_hw_control_from_firmware(dev)
|
pciehp_acpi_get_hp_hw_control_from_firmware(dev)
|
||||||
static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
|
static inline int pciehp_get_hp_params_from_firmware(struct pci_dev *dev,
|
||||||
|
|
|
@ -38,10 +38,6 @@
|
||||||
|
|
||||||
#include "../pci.h"
|
#include "../pci.h"
|
||||||
#include "pciehp.h"
|
#include "pciehp.h"
|
||||||
#include <acpi/acpi.h>
|
|
||||||
#include <acpi/acpi_bus.h>
|
|
||||||
#include <acpi/actypes.h>
|
|
||||||
#include <linux/pci-acpi.h>
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
#define DBG_K_TRACE_ENTRY ((unsigned int)0x00000001) /* On function entry */
|
#define DBG_K_TRACE_ENTRY ((unsigned int)0x00000001) /* On function entry */
|
||||||
#define DBG_K_TRACE_EXIT ((unsigned int)0x00000002) /* On function exit */
|
#define DBG_K_TRACE_EXIT ((unsigned int)0x00000002) /* On function exit */
|
||||||
|
|
|
@ -1730,8 +1730,8 @@ dasd_flush_request_queue(struct dasd_device * device)
|
||||||
req = elv_next_request(device->request_queue);
|
req = elv_next_request(device->request_queue);
|
||||||
if (req == NULL)
|
if (req == NULL)
|
||||||
break;
|
break;
|
||||||
dasd_end_request(req, 0);
|
|
||||||
blkdev_dequeue_request(req);
|
blkdev_dequeue_request(req);
|
||||||
|
dasd_end_request(req, 0);
|
||||||
}
|
}
|
||||||
spin_unlock_irq(&device->request_queue_lock);
|
spin_unlock_irq(&device->request_queue_lock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,18 +48,20 @@ struct dasd_devmap {
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* dasd_servermap is used to store the server_id of all storage servers
|
* dasd_server_ssid_map contains a globally unique storage server subsystem ID.
|
||||||
* accessed by DASD device driver.
|
* dasd_server_ssid_list contains the list of all subsystem IDs accessed by
|
||||||
|
* the DASD device driver.
|
||||||
*/
|
*/
|
||||||
struct dasd_servermap {
|
struct dasd_server_ssid_map {
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
struct server_id {
|
struct server_id {
|
||||||
char vendor[4];
|
char vendor[4];
|
||||||
char serial[15];
|
char serial[15];
|
||||||
} sid;
|
} sid;
|
||||||
|
__u16 ssid;
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct list_head dasd_serverlist;
|
static struct list_head dasd_server_ssid_list;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Parameter parsing functions for dasd= parameter. The syntax is:
|
* Parameter parsing functions for dasd= parameter. The syntax is:
|
||||||
|
@ -89,7 +91,7 @@ static char *dasd[256];
|
||||||
module_param_array(dasd, charp, NULL, 0);
|
module_param_array(dasd, charp, NULL, 0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Single spinlock to protect devmap structures and lists.
|
* Single spinlock to protect devmap and servermap structures and lists.
|
||||||
*/
|
*/
|
||||||
static DEFINE_SPINLOCK(dasd_devmap_lock);
|
static DEFINE_SPINLOCK(dasd_devmap_lock);
|
||||||
|
|
||||||
|
@ -264,8 +266,9 @@ dasd_parse_keyword( char *parsestring ) {
|
||||||
if (dasd_page_cache)
|
if (dasd_page_cache)
|
||||||
return residual_str;
|
return residual_str;
|
||||||
dasd_page_cache =
|
dasd_page_cache =
|
||||||
kmem_cache_create("dasd_page_cache", PAGE_SIZE, 0,
|
kmem_cache_create("dasd_page_cache", PAGE_SIZE,
|
||||||
SLAB_CACHE_DMA, NULL, NULL );
|
PAGE_SIZE, SLAB_CACHE_DMA,
|
||||||
|
NULL, NULL );
|
||||||
if (!dasd_page_cache)
|
if (!dasd_page_cache)
|
||||||
MESSAGE(KERN_WARNING, "%s", "Failed to create slab, "
|
MESSAGE(KERN_WARNING, "%s", "Failed to create slab, "
|
||||||
"fixed buffer mode disabled.");
|
"fixed buffer mode disabled.");
|
||||||
|
@ -858,39 +861,6 @@ static struct attribute_group dasd_attr_group = {
|
||||||
.attrs = dasd_attrs,
|
.attrs = dasd_attrs,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
|
||||||
* Check if the related storage server is already contained in the
|
|
||||||
* dasd_serverlist. If server is not contained, create new entry.
|
|
||||||
* Return 0 if server was already in serverlist,
|
|
||||||
* 1 if the server was added successfully
|
|
||||||
* <0 in case of error.
|
|
||||||
*/
|
|
||||||
static int
|
|
||||||
dasd_add_server(struct dasd_uid *uid)
|
|
||||||
{
|
|
||||||
struct dasd_servermap *new, *tmp;
|
|
||||||
|
|
||||||
/* check if server is already contained */
|
|
||||||
list_for_each_entry(tmp, &dasd_serverlist, list)
|
|
||||||
// normale cmp?
|
|
||||||
if (strncmp(tmp->sid.vendor, uid->vendor,
|
|
||||||
sizeof(tmp->sid.vendor)) == 0
|
|
||||||
&& strncmp(tmp->sid.serial, uid->serial,
|
|
||||||
sizeof(tmp->sid.serial)) == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
new = (struct dasd_servermap *)
|
|
||||||
kzalloc(sizeof(struct dasd_servermap), GFP_KERNEL);
|
|
||||||
if (!new)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
strncpy(new->sid.vendor, uid->vendor, sizeof(new->sid.vendor));
|
|
||||||
strncpy(new->sid.serial, uid->serial, sizeof(new->sid.serial));
|
|
||||||
list_add(&new->list, &dasd_serverlist);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return copy of the device unique identifier.
|
* Return copy of the device unique identifier.
|
||||||
*/
|
*/
|
||||||
|
@ -910,6 +880,9 @@ dasd_get_uid(struct ccw_device *cdev, struct dasd_uid *uid)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register the given device unique identifier into devmap struct.
|
* Register the given device unique identifier into devmap struct.
|
||||||
|
* In addition check if the related storage server subsystem ID is already
|
||||||
|
* contained in the dasd_server_ssid_list. If subsystem ID is not contained,
|
||||||
|
* create new entry.
|
||||||
* Return 0 if server was already in serverlist,
|
* Return 0 if server was already in serverlist,
|
||||||
* 1 if the server was added successful
|
* 1 if the server was added successful
|
||||||
* <0 in case of error.
|
* <0 in case of error.
|
||||||
|
@ -918,16 +891,39 @@ int
|
||||||
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
|
dasd_set_uid(struct ccw_device *cdev, struct dasd_uid *uid)
|
||||||
{
|
{
|
||||||
struct dasd_devmap *devmap;
|
struct dasd_devmap *devmap;
|
||||||
int rc;
|
struct dasd_server_ssid_map *srv, *tmp;
|
||||||
|
|
||||||
devmap = dasd_find_busid(cdev->dev.bus_id);
|
devmap = dasd_find_busid(cdev->dev.bus_id);
|
||||||
if (IS_ERR(devmap))
|
if (IS_ERR(devmap))
|
||||||
return PTR_ERR(devmap);
|
return PTR_ERR(devmap);
|
||||||
|
|
||||||
|
/* generate entry for server_ssid_map */
|
||||||
|
srv = (struct dasd_server_ssid_map *)
|
||||||
|
kzalloc(sizeof(struct dasd_server_ssid_map), GFP_KERNEL);
|
||||||
|
if (!srv)
|
||||||
|
return -ENOMEM;
|
||||||
|
strncpy(srv->sid.vendor, uid->vendor, sizeof(srv->sid.vendor) - 1);
|
||||||
|
strncpy(srv->sid.serial, uid->serial, sizeof(srv->sid.serial) - 1);
|
||||||
|
srv->ssid = uid->ssid;
|
||||||
|
|
||||||
|
/* server is already contained ? */
|
||||||
spin_lock(&dasd_devmap_lock);
|
spin_lock(&dasd_devmap_lock);
|
||||||
devmap->uid = *uid;
|
devmap->uid = *uid;
|
||||||
rc = dasd_add_server(uid);
|
list_for_each_entry(tmp, &dasd_server_ssid_list, list) {
|
||||||
|
if (!memcmp(&srv->sid, &tmp->sid,
|
||||||
|
sizeof(struct dasd_server_ssid_map))) {
|
||||||
|
kfree(srv);
|
||||||
|
srv = NULL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add servermap to serverlist */
|
||||||
|
if (srv)
|
||||||
|
list_add(&srv->list, &dasd_server_ssid_list);
|
||||||
spin_unlock(&dasd_devmap_lock);
|
spin_unlock(&dasd_devmap_lock);
|
||||||
return rc;
|
|
||||||
|
return (srv ? 1 : 0);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dasd_set_uid);
|
EXPORT_SYMBOL_GPL(dasd_set_uid);
|
||||||
|
|
||||||
|
@ -995,7 +991,7 @@ dasd_devmap_init(void)
|
||||||
INIT_LIST_HEAD(&dasd_hashlists[i]);
|
INIT_LIST_HEAD(&dasd_hashlists[i]);
|
||||||
|
|
||||||
/* Initialize servermap structure. */
|
/* Initialize servermap structure. */
|
||||||
INIT_LIST_HEAD(&dasd_serverlist);
|
INIT_LIST_HEAD(&dasd_server_ssid_list);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -468,11 +468,11 @@ dasd_eckd_generate_uid(struct dasd_device *device, struct dasd_uid *uid)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
memset(uid, 0, sizeof(struct dasd_uid));
|
memset(uid, 0, sizeof(struct dasd_uid));
|
||||||
strncpy(uid->vendor, confdata->ned1.HDA_manufacturer,
|
memcpy(uid->vendor, confdata->ned1.HDA_manufacturer,
|
||||||
sizeof(uid->vendor) - 1);
|
sizeof(uid->vendor) - 1);
|
||||||
EBCASC(uid->vendor, sizeof(uid->vendor) - 1);
|
EBCASC(uid->vendor, sizeof(uid->vendor) - 1);
|
||||||
strncpy(uid->serial, confdata->ned1.HDA_location,
|
memcpy(uid->serial, confdata->ned1.HDA_location,
|
||||||
sizeof(uid->serial) - 1);
|
sizeof(uid->serial) - 1);
|
||||||
EBCASC(uid->serial, sizeof(uid->serial) - 1);
|
EBCASC(uid->serial, sizeof(uid->serial) - 1);
|
||||||
uid->ssid = confdata->neq.subsystemID;
|
uid->ssid = confdata->neq.subsystemID;
|
||||||
if (confdata->ned2.sneq.flags == 0x40) {
|
if (confdata->ned2.sneq.flags == 0x40) {
|
||||||
|
|
|
@ -48,15 +48,6 @@
|
||||||
#define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x)
|
#define PRINT_ERR(x...) printk(KERN_ERR XPRAM_NAME " error:" x)
|
||||||
|
|
||||||
|
|
||||||
static struct sysdev_class xpram_sysclass = {
|
|
||||||
set_kset_name("xpram"),
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct sys_device xpram_sys_device = {
|
|
||||||
.id = 0,
|
|
||||||
.cls = &xpram_sysclass,
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
unsigned int size; /* size of xpram segment in pages */
|
unsigned int size; /* size of xpram segment in pages */
|
||||||
unsigned int offset; /* start page of xpram segment */
|
unsigned int offset; /* start page of xpram segment */
|
||||||
|
@ -451,8 +442,6 @@ static void __exit xpram_exit(void)
|
||||||
}
|
}
|
||||||
unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME);
|
unregister_blkdev(XPRAM_MAJOR, XPRAM_NAME);
|
||||||
blk_cleanup_queue(xpram_queue);
|
blk_cleanup_queue(xpram_queue);
|
||||||
sysdev_unregister(&xpram_sys_device);
|
|
||||||
sysdev_class_unregister(&xpram_sysclass);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init xpram_init(void)
|
static int __init xpram_init(void)
|
||||||
|
@ -470,19 +459,7 @@ static int __init xpram_init(void)
|
||||||
rc = xpram_setup_sizes(xpram_pages);
|
rc = xpram_setup_sizes(xpram_pages);
|
||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
rc = sysdev_class_register(&xpram_sysclass);
|
return xpram_setup_blkdev();
|
||||||
if (rc)
|
|
||||||
return rc;
|
|
||||||
|
|
||||||
rc = sysdev_register(&xpram_sys_device);
|
|
||||||
if (rc) {
|
|
||||||
sysdev_class_unregister(&xpram_sysclass);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
rc = xpram_setup_blkdev();
|
|
||||||
if (rc)
|
|
||||||
sysdev_unregister(&xpram_sys_device);
|
|
||||||
return rc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(xpram_init);
|
module_init(xpram_init);
|
||||||
|
|
|
@ -76,7 +76,7 @@ struct tape_class_device *register_tape_dev(
|
||||||
device,
|
device,
|
||||||
"%s", tcd->device_name
|
"%s", tcd->device_name
|
||||||
);
|
);
|
||||||
rc = PTR_ERR(tcd->class_device);
|
rc = IS_ERR(tcd->class_device) ? PTR_ERR(tcd->class_device) : 0;
|
||||||
if (rc)
|
if (rc)
|
||||||
goto fail_with_cdev;
|
goto fail_with_cdev;
|
||||||
rc = sysfs_create_link(
|
rc = sysfs_create_link(
|
||||||
|
|
|
@ -772,6 +772,7 @@ ccw_device_online_verify(struct ccw_device *cdev, enum dev_event dev_event)
|
||||||
stsch(sch->schid, &sch->schib);
|
stsch(sch->schid, &sch->schib);
|
||||||
|
|
||||||
if (sch->schib.scsw.actl != 0 ||
|
if (sch->schib.scsw.actl != 0 ||
|
||||||
|
(sch->schib.scsw.stctl & SCSW_STCTL_STATUS_PEND) ||
|
||||||
(cdev->private->irb.scsw.stctl & SCSW_STCTL_STATUS_PEND)) {
|
(cdev->private->irb.scsw.stctl & SCSW_STCTL_STATUS_PEND)) {
|
||||||
/*
|
/*
|
||||||
* No final status yet or final status not yet delivered
|
* No final status yet or final status not yet delivered
|
||||||
|
|
|
@ -263,6 +263,9 @@ ccw_device_wake_up(struct ccw_device *cdev, unsigned long ip, struct irb *irb)
|
||||||
/* Abuse intparm for error reporting. */
|
/* Abuse intparm for error reporting. */
|
||||||
if (IS_ERR(irb))
|
if (IS_ERR(irb))
|
||||||
cdev->private->intparm = -EIO;
|
cdev->private->intparm = -EIO;
|
||||||
|
else if (irb->scsw.cc == 1)
|
||||||
|
/* Retry for deferred condition code. */
|
||||||
|
cdev->private->intparm = -EAGAIN;
|
||||||
else if ((irb->scsw.dstat !=
|
else if ((irb->scsw.dstat !=
|
||||||
(DEV_STAT_CHN_END|DEV_STAT_DEV_END)) ||
|
(DEV_STAT_CHN_END|DEV_STAT_DEV_END)) ||
|
||||||
(irb->scsw.cstat != 0)) {
|
(irb->scsw.cstat != 0)) {
|
||||||
|
|
|
@ -69,6 +69,7 @@ comment "The following drivers are not fully supported"
|
||||||
config SCSI_CUMANA_1
|
config SCSI_CUMANA_1
|
||||||
tristate "CumanaSCSI I support (EXPERIMENTAL)"
|
tristate "CumanaSCSI I support (EXPERIMENTAL)"
|
||||||
depends on ARCH_ACORN && EXPERIMENTAL && SCSI
|
depends on ARCH_ACORN && EXPERIMENTAL && SCSI
|
||||||
|
select SCSI_SPI_ATTRS
|
||||||
help
|
help
|
||||||
This enables support for the Cumana SCSI I card. If you have an
|
This enables support for the Cumana SCSI I card. If you have an
|
||||||
Acorn system with one of these, say Y. If unsure, say N.
|
Acorn system with one of these, say Y. If unsure, say N.
|
||||||
|
@ -76,6 +77,7 @@ config SCSI_CUMANA_1
|
||||||
config SCSI_ECOSCSI
|
config SCSI_ECOSCSI
|
||||||
tristate "EcoScsi support (EXPERIMENTAL)"
|
tristate "EcoScsi support (EXPERIMENTAL)"
|
||||||
depends on ARCH_ACORN && EXPERIMENTAL && (ARCH_ARC || ARCH_A5K) && SCSI
|
depends on ARCH_ACORN && EXPERIMENTAL && (ARCH_ARC || ARCH_A5K) && SCSI
|
||||||
|
select SCSI_SPI_ATTRS
|
||||||
help
|
help
|
||||||
This enables support for the EcoSCSI card -- a small card that sits
|
This enables support for the EcoSCSI card -- a small card that sits
|
||||||
in the Econet socket. If you have an Acorn system with one of these,
|
in the Econet socket. If you have an Acorn system with one of these,
|
||||||
|
@ -84,6 +86,7 @@ config SCSI_ECOSCSI
|
||||||
config SCSI_OAK1
|
config SCSI_OAK1
|
||||||
tristate "Oak SCSI support (EXPERIMENTAL)"
|
tristate "Oak SCSI support (EXPERIMENTAL)"
|
||||||
depends on ARCH_ACORN && EXPERIMENTAL && SCSI
|
depends on ARCH_ACORN && EXPERIMENTAL && SCSI
|
||||||
|
select SCSI_SPI_ATTRS
|
||||||
help
|
help
|
||||||
This enables support for the Oak SCSI card. If you have an Acorn
|
This enables support for the Oak SCSI card. If you have an Acorn
|
||||||
system with one of these, say Y. If unsure, say N.
|
system with one of these, say Y. If unsure, say N.
|
||||||
|
|
|
@ -74,7 +74,7 @@ static inline void init_SCp(Scsi_Cmnd *SCpnt)
|
||||||
unsigned long len = 0;
|
unsigned long len = 0;
|
||||||
int buf;
|
int buf;
|
||||||
|
|
||||||
SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->buffer;
|
SCpnt->SCp.buffer = (struct scatterlist *) SCpnt->request_buffer;
|
||||||
SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1;
|
SCpnt->SCp.buffers_residual = SCpnt->use_sg - 1;
|
||||||
SCpnt->SCp.ptr = (char *)
|
SCpnt->SCp.ptr = (char *)
|
||||||
(page_address(SCpnt->SCp.buffer->page) +
|
(page_address(SCpnt->SCp.buffer->page) +
|
||||||
|
|
|
@ -110,7 +110,6 @@ static void au1xxx_start_ohc(struct platform_device *dev)
|
||||||
|
|
||||||
printk(KERN_DEBUG __FILE__
|
printk(KERN_DEBUG __FILE__
|
||||||
": Clock to USB host has been enabled \n");
|
": Clock to USB host has been enabled \n");
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void au1xxx_stop_ohc(struct platform_device *dev)
|
static void au1xxx_stop_ohc(struct platform_device *dev)
|
||||||
|
|
|
@ -597,9 +597,9 @@ static void atp_disconnect(struct usb_interface *iface)
|
||||||
if (dev) {
|
if (dev) {
|
||||||
usb_kill_urb(dev->urb);
|
usb_kill_urb(dev->urb);
|
||||||
input_unregister_device(dev->input);
|
input_unregister_device(dev->input);
|
||||||
usb_free_urb(dev->urb);
|
|
||||||
usb_buffer_free(dev->udev, dev->datalen,
|
usb_buffer_free(dev->udev, dev->datalen,
|
||||||
dev->data, dev->urb->transfer_dma);
|
dev->data, dev->urb->transfer_dma);
|
||||||
|
usb_free_urb(dev->urb);
|
||||||
kfree(dev);
|
kfree(dev);
|
||||||
}
|
}
|
||||||
printk(KERN_INFO "input: appletouch disconnected\n");
|
printk(KERN_INFO "input: appletouch disconnected\n");
|
||||||
|
|
|
@ -1242,11 +1242,12 @@ done:
|
||||||
static int ctrl_out (struct usbtest_dev *dev,
|
static int ctrl_out (struct usbtest_dev *dev,
|
||||||
unsigned count, unsigned length, unsigned vary)
|
unsigned count, unsigned length, unsigned vary)
|
||||||
{
|
{
|
||||||
unsigned i, j, len, retval;
|
unsigned i, j, len;
|
||||||
|
int retval;
|
||||||
u8 *buf;
|
u8 *buf;
|
||||||
char *what = "?";
|
char *what = "?";
|
||||||
struct usb_device *udev;
|
struct usb_device *udev;
|
||||||
|
|
||||||
if (length < 1 || length > 0xffff || vary >= length)
|
if (length < 1 || length > 0xffff || vary >= length)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
|
|
@ -306,6 +306,8 @@ static struct ftdi_sio_quirk ftdi_HE_TIRA1_quirk = {
|
||||||
|
|
||||||
|
|
||||||
static struct usb_device_id id_table_combined [] = {
|
static struct usb_device_id id_table_combined [] = {
|
||||||
|
{ USB_DEVICE(FTDI_VID, FTDI_AMC232_PID) },
|
||||||
|
{ USB_DEVICE(FTDI_VID, FTDI_CANUSB_PID) },
|
||||||
{ USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
|
{ USB_DEVICE(FTDI_VID, FTDI_ACTZWAVE_PID) },
|
||||||
{ USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
|
{ USB_DEVICE(FTDI_VID, FTDI_IRTRANS_PID) },
|
||||||
{ USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
|
{ USB_DEVICE(FTDI_VID, FTDI_IPLUS_PID) },
|
||||||
|
|
|
@ -32,6 +32,12 @@
|
||||||
#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
|
#define FTDI_NF_RIC_PID 0x0001 /* Product Id */
|
||||||
|
|
||||||
|
|
||||||
|
/* www.canusb.com Lawicel CANUSB device */
|
||||||
|
#define FTDI_CANUSB_PID 0xFFA8 /* Product Id */
|
||||||
|
|
||||||
|
/* AlphaMicro Components AMC-232USB01 device */
|
||||||
|
#define FTDI_AMC232_PID 0xFF00 /* Product Id */
|
||||||
|
|
||||||
/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */
|
/* ACT Solutions HomePro ZWave interface (http://www.act-solutions.com/HomePro.htm) */
|
||||||
#define FTDI_ACTZWAVE_PID 0xF2D0
|
#define FTDI_ACTZWAVE_PID 0xF2D0
|
||||||
|
|
||||||
|
|
|
@ -251,6 +251,8 @@ static struct usb_device_id ipaq_id_table [] = {
|
||||||
{ USB_DEVICE(0x04C5, 0x1079) }, /* FUJITSU USB Sync */
|
{ USB_DEVICE(0x04C5, 0x1079) }, /* FUJITSU USB Sync */
|
||||||
{ USB_DEVICE(0x04DA, 0x2500) }, /* Panasonic USB Sync */
|
{ USB_DEVICE(0x04DA, 0x2500) }, /* Panasonic USB Sync */
|
||||||
{ USB_DEVICE(0x04DD, 0x9102) }, /* SHARP WS003SH USB Modem */
|
{ USB_DEVICE(0x04DD, 0x9102) }, /* SHARP WS003SH USB Modem */
|
||||||
|
{ USB_DEVICE(0x04DD, 0x9121) }, /* SHARP WS004SH USB Modem */
|
||||||
|
{ USB_DEVICE(0x04DD, 0x9123) }, /* SHARP WS007SH USB Modem */
|
||||||
{ USB_DEVICE(0x04E8, 0x5F00) }, /* Samsung NEXiO USB Sync */
|
{ USB_DEVICE(0x04E8, 0x5F00) }, /* Samsung NEXiO USB Sync */
|
||||||
{ USB_DEVICE(0x04E8, 0x5F01) }, /* Samsung NEXiO USB Sync */
|
{ USB_DEVICE(0x04E8, 0x5F01) }, /* Samsung NEXiO USB Sync */
|
||||||
{ USB_DEVICE(0x04E8, 0x5F02) }, /* Samsung NEXiO USB Sync */
|
{ USB_DEVICE(0x04E8, 0x5F02) }, /* Samsung NEXiO USB Sync */
|
||||||
|
|
|
@ -1240,6 +1240,16 @@ UNUSUAL_DEV( 0x0ed1, 0x7636, 0x0103, 0x0103,
|
||||||
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64),
|
US_FL_IGNORE_RESIDUE | US_FL_GO_SLOW | US_FL_MAX_SECTORS_64),
|
||||||
|
|
||||||
|
/* David Kuehling <dvdkhlng@gmx.de>:
|
||||||
|
* for MP3-Player AVOX WSX-300ER (bought in Japan). Reports lots of SCSI
|
||||||
|
* errors when trying to write.
|
||||||
|
*/
|
||||||
|
UNUSUAL_DEV( 0x0f19, 0x0105, 0x0100, 0x0100,
|
||||||
|
"C-MEX",
|
||||||
|
"A-VOX",
|
||||||
|
US_SC_DEVICE, US_PR_DEVICE, NULL,
|
||||||
|
US_FL_IGNORE_RESIDUE ),
|
||||||
|
|
||||||
/* Reported by Michael Stattmann <michael@stattmann.com> */
|
/* Reported by Michael Stattmann <michael@stattmann.com> */
|
||||||
UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
|
UNUSUAL_DEV( 0x0fce, 0xd008, 0x0000, 0x0000,
|
||||||
"Sony Ericsson",
|
"Sony Ericsson",
|
||||||
|
|
|
@ -554,7 +554,7 @@ config FB_VESA
|
||||||
|
|
||||||
config FB_IMAC
|
config FB_IMAC
|
||||||
bool "Intel-based Macintosh Framebuffer Support"
|
bool "Intel-based Macintosh Framebuffer Support"
|
||||||
depends on (FB = y) && X86
|
depends on (FB = y) && X86 && EFI
|
||||||
select FB_CFB_FILLRECT
|
select FB_CFB_FILLRECT
|
||||||
select FB_CFB_COPYAREA
|
select FB_CFB_COPYAREA
|
||||||
select FB_CFB_IMAGEBLIT
|
select FB_CFB_IMAGEBLIT
|
||||||
|
|
|
@ -18,6 +18,8 @@
|
||||||
#include <linux/screen_info.h>
|
#include <linux/screen_info.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
#include <linux/dmi.h>
|
||||||
|
#include <linux/efi.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
|
|
||||||
|
@ -28,7 +30,7 @@ typedef enum _MAC_TYPE {
|
||||||
M_I20,
|
M_I20,
|
||||||
M_MINI,
|
M_MINI,
|
||||||
M_MACBOOK,
|
M_MACBOOK,
|
||||||
M_NEW
|
M_UNKNOWN
|
||||||
} MAC_TYPE;
|
} MAC_TYPE;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
@ -52,10 +54,36 @@ static struct fb_fix_screeninfo imacfb_fix __initdata = {
|
||||||
};
|
};
|
||||||
|
|
||||||
static int inverse;
|
static int inverse;
|
||||||
static int model = M_NEW;
|
static int model = M_UNKNOWN;
|
||||||
static int manual_height;
|
static int manual_height;
|
||||||
static int manual_width;
|
static int manual_width;
|
||||||
|
|
||||||
|
static int set_system(struct dmi_system_id *id)
|
||||||
|
{
|
||||||
|
printk(KERN_INFO "imacfb: %s detected - set system to %ld\n",
|
||||||
|
id->ident, (long)id->driver_data);
|
||||||
|
|
||||||
|
model = (long)id->driver_data;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct dmi_system_id __initdata dmi_system_table[] = {
|
||||||
|
{ set_system, "iMac4,1", {
|
||||||
|
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||||
|
DMI_MATCH(DMI_BIOS_VERSION,"iMac4,1") }, (void*)M_I17},
|
||||||
|
{ set_system, "MacBookPro1,1", {
|
||||||
|
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||||
|
DMI_MATCH(DMI_BIOS_VERSION,"MacBookPro1,1") }, (void*)M_I17},
|
||||||
|
{ set_system, "MacBook1,1", {
|
||||||
|
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME,"MacBook1,1")}, (void *)M_MACBOOK},
|
||||||
|
{ set_system, "Macmini1,1", {
|
||||||
|
DMI_MATCH(DMI_BIOS_VENDOR,"Apple Computer, Inc."),
|
||||||
|
DMI_MATCH(DMI_PRODUCT_NAME,"Macmini1,1")}, (void *)M_MINI},
|
||||||
|
{},
|
||||||
|
};
|
||||||
|
|
||||||
#define DEFAULT_FB_MEM 1024*1024*16
|
#define DEFAULT_FB_MEM 1024*1024*16
|
||||||
|
|
||||||
/* --------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------- */
|
||||||
|
@ -149,7 +177,6 @@ static int __init imacfb_probe(struct platform_device *dev)
|
||||||
screen_info.lfb_linelength = 1472 * 4;
|
screen_info.lfb_linelength = 1472 * 4;
|
||||||
screen_info.lfb_base = 0x80010000;
|
screen_info.lfb_base = 0x80010000;
|
||||||
break;
|
break;
|
||||||
case M_NEW:
|
|
||||||
case M_I20:
|
case M_I20:
|
||||||
screen_info.lfb_width = 1680;
|
screen_info.lfb_width = 1680;
|
||||||
screen_info.lfb_height = 1050;
|
screen_info.lfb_height = 1050;
|
||||||
|
@ -207,6 +234,10 @@ static int __init imacfb_probe(struct platform_device *dev)
|
||||||
size_remap = size_total;
|
size_remap = size_total;
|
||||||
imacfb_fix.smem_len = size_remap;
|
imacfb_fix.smem_len = size_remap;
|
||||||
|
|
||||||
|
#ifndef __i386__
|
||||||
|
screen_info.imacpm_seg = 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) {
|
if (!request_mem_region(imacfb_fix.smem_start, size_total, "imacfb")) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"imacfb: cannot reserve video memory at 0x%lx\n",
|
"imacfb: cannot reserve video memory at 0x%lx\n",
|
||||||
|
@ -324,8 +355,16 @@ static int __init imacfb_init(void)
|
||||||
int ret;
|
int ret;
|
||||||
char *option = NULL;
|
char *option = NULL;
|
||||||
|
|
||||||
/* ignore error return of fb_get_options */
|
if (!efi_enabled)
|
||||||
fb_get_options("imacfb", &option);
|
return -ENODEV;
|
||||||
|
if (!dmi_check_system(dmi_system_table))
|
||||||
|
return -ENODEV;
|
||||||
|
if (model == M_UNKNOWN)
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (fb_get_options("imacfb", &option))
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
imacfb_setup(option);
|
imacfb_setup(option);
|
||||||
ret = platform_driver_register(&imacfb_driver);
|
ret = platform_driver_register(&imacfb_driver);
|
||||||
|
|
||||||
|
|
|
@ -308,7 +308,7 @@ static struct adfs_discmap *adfs_read_map(struct super_block *sb, struct adfs_di
|
||||||
if (adfs_checkmap(sb, dm))
|
if (adfs_checkmap(sb, dm))
|
||||||
return dm;
|
return dm;
|
||||||
|
|
||||||
adfs_error(sb, NULL, "map corrupted");
|
adfs_error(sb, "map corrupted");
|
||||||
|
|
||||||
error_free:
|
error_free:
|
||||||
while (--zone >= 0)
|
while (--zone >= 0)
|
||||||
|
|
|
@ -395,14 +395,16 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
||||||
struct fuse_readpages_data data;
|
struct fuse_readpages_data data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
err = -EIO;
|
||||||
if (is_bad_inode(inode))
|
if (is_bad_inode(inode))
|
||||||
return -EIO;
|
goto clean_pages_up;
|
||||||
|
|
||||||
data.file = file;
|
data.file = file;
|
||||||
data.inode = inode;
|
data.inode = inode;
|
||||||
data.req = fuse_get_req(fc);
|
data.req = fuse_get_req(fc);
|
||||||
|
err = PTR_ERR(data.req);
|
||||||
if (IS_ERR(data.req))
|
if (IS_ERR(data.req))
|
||||||
return PTR_ERR(data.req);
|
goto clean_pages_up;
|
||||||
|
|
||||||
err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
|
err = read_cache_pages(mapping, pages, fuse_readpages_fill, &data);
|
||||||
if (!err) {
|
if (!err) {
|
||||||
|
@ -412,6 +414,10 @@ static int fuse_readpages(struct file *file, struct address_space *mapping,
|
||||||
fuse_put_request(fc, data.req);
|
fuse_put_request(fc, data.req);
|
||||||
}
|
}
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
clean_pages_up:
|
||||||
|
put_pages_list(pages);
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t fuse_send_write(struct fuse_req *req, struct file *file,
|
static size_t fuse_send_write(struct fuse_req *req, struct file *file,
|
||||||
|
|
|
@ -168,16 +168,15 @@ void jfs_dirty_inode(struct inode *inode)
|
||||||
set_cflag(COMMIT_Dirty, inode);
|
set_cflag(COMMIT_Dirty, inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
int jfs_get_block(struct inode *ip, sector_t lblock,
|
||||||
jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks,
|
struct buffer_head *bh_result, int create)
|
||||||
struct buffer_head *bh_result, int create)
|
|
||||||
{
|
{
|
||||||
s64 lblock64 = lblock;
|
s64 lblock64 = lblock;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
xad_t xad;
|
xad_t xad;
|
||||||
s64 xaddr;
|
s64 xaddr;
|
||||||
int xflag;
|
int xflag;
|
||||||
s32 xlen = max_blocks;
|
s32 xlen = bh_result->b_size >> ip->i_blkbits;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Take appropriate lock on inode
|
* Take appropriate lock on inode
|
||||||
|
@ -188,7 +187,7 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks,
|
||||||
IREAD_LOCK(ip);
|
IREAD_LOCK(ip);
|
||||||
|
|
||||||
if (((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size) &&
|
if (((lblock64 << ip->i_sb->s_blocksize_bits) < ip->i_size) &&
|
||||||
(!xtLookup(ip, lblock64, max_blocks, &xflag, &xaddr, &xlen, 0)) &&
|
(!xtLookup(ip, lblock64, xlen, &xflag, &xaddr, &xlen, 0)) &&
|
||||||
xaddr) {
|
xaddr) {
|
||||||
if (xflag & XAD_NOTRECORDED) {
|
if (xflag & XAD_NOTRECORDED) {
|
||||||
if (!create)
|
if (!create)
|
||||||
|
@ -255,13 +254,6 @@ jfs_get_blocks(struct inode *ip, sector_t lblock, unsigned long max_blocks,
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int jfs_get_block(struct inode *ip, sector_t lblock,
|
|
||||||
struct buffer_head *bh_result, int create)
|
|
||||||
{
|
|
||||||
return jfs_get_blocks(ip, lblock, bh_result->b_size >> ip->i_blkbits,
|
|
||||||
bh_result, create);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int jfs_writepage(struct page *page, struct writeback_control *wbc)
|
static int jfs_writepage(struct page *page, struct writeback_control *wbc)
|
||||||
{
|
{
|
||||||
return nobh_writepage(page, jfs_get_block, wbc);
|
return nobh_writepage(page, jfs_get_block, wbc);
|
||||||
|
|
|
@ -32,6 +32,7 @@ extern void jfs_truncate_nolock(struct inode *, loff_t);
|
||||||
extern void jfs_free_zero_link(struct inode *);
|
extern void jfs_free_zero_link(struct inode *);
|
||||||
extern struct dentry *jfs_get_parent(struct dentry *dentry);
|
extern struct dentry *jfs_get_parent(struct dentry *dentry);
|
||||||
extern void jfs_set_inode_flags(struct inode *);
|
extern void jfs_set_inode_flags(struct inode *);
|
||||||
|
extern int jfs_get_block(struct inode *, sector_t, struct buffer_head *, int);
|
||||||
|
|
||||||
extern const struct address_space_operations jfs_aops;
|
extern const struct address_space_operations jfs_aops;
|
||||||
extern struct inode_operations jfs_dir_inode_operations;
|
extern struct inode_operations jfs_dir_inode_operations;
|
||||||
|
|
118
fs/jfs/super.c
118
fs/jfs/super.c
|
@ -26,6 +26,7 @@
|
||||||
#include <linux/moduleparam.h>
|
#include <linux/moduleparam.h>
|
||||||
#include <linux/kthread.h>
|
#include <linux/kthread.h>
|
||||||
#include <linux/posix_acl.h>
|
#include <linux/posix_acl.h>
|
||||||
|
#include <linux/buffer_head.h>
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
|
|
||||||
|
@ -298,7 +299,7 @@ static int parse_options(char *options, struct super_block *sb, s64 *newLVSize,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_QUOTA)
|
#ifdef CONFIG_QUOTA
|
||||||
case Opt_quota:
|
case Opt_quota:
|
||||||
case Opt_usrquota:
|
case Opt_usrquota:
|
||||||
*flag |= JFS_USRQUOTA;
|
*flag |= JFS_USRQUOTA;
|
||||||
|
@ -597,7 +598,7 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
|
||||||
if (sbi->flag & JFS_NOINTEGRITY)
|
if (sbi->flag & JFS_NOINTEGRITY)
|
||||||
seq_puts(seq, ",nointegrity");
|
seq_puts(seq, ",nointegrity");
|
||||||
|
|
||||||
#if defined(CONFIG_QUOTA)
|
#ifdef CONFIG_QUOTA
|
||||||
if (sbi->flag & JFS_USRQUOTA)
|
if (sbi->flag & JFS_USRQUOTA)
|
||||||
seq_puts(seq, ",usrquota");
|
seq_puts(seq, ",usrquota");
|
||||||
|
|
||||||
|
@ -608,6 +609,113 @@ static int jfs_show_options(struct seq_file *seq, struct vfsmount *vfs)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_QUOTA
|
||||||
|
|
||||||
|
/* Read data from quotafile - avoid pagecache and such because we cannot afford
|
||||||
|
* acquiring the locks... As quota files are never truncated and quota code
|
||||||
|
* itself serializes the operations (and noone else should touch the files)
|
||||||
|
* we don't have to be afraid of races */
|
||||||
|
static ssize_t jfs_quota_read(struct super_block *sb, int type, char *data,
|
||||||
|
size_t len, loff_t off)
|
||||||
|
{
|
||||||
|
struct inode *inode = sb_dqopt(sb)->files[type];
|
||||||
|
sector_t blk = off >> sb->s_blocksize_bits;
|
||||||
|
int err = 0;
|
||||||
|
int offset = off & (sb->s_blocksize - 1);
|
||||||
|
int tocopy;
|
||||||
|
size_t toread;
|
||||||
|
struct buffer_head tmp_bh;
|
||||||
|
struct buffer_head *bh;
|
||||||
|
loff_t i_size = i_size_read(inode);
|
||||||
|
|
||||||
|
if (off > i_size)
|
||||||
|
return 0;
|
||||||
|
if (off+len > i_size)
|
||||||
|
len = i_size-off;
|
||||||
|
toread = len;
|
||||||
|
while (toread > 0) {
|
||||||
|
tocopy = sb->s_blocksize - offset < toread ?
|
||||||
|
sb->s_blocksize - offset : toread;
|
||||||
|
|
||||||
|
tmp_bh.b_state = 0;
|
||||||
|
tmp_bh.b_size = 1 << inode->i_blkbits;
|
||||||
|
err = jfs_get_block(inode, blk, &tmp_bh, 0);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
if (!buffer_mapped(&tmp_bh)) /* A hole? */
|
||||||
|
memset(data, 0, tocopy);
|
||||||
|
else {
|
||||||
|
bh = sb_bread(sb, tmp_bh.b_blocknr);
|
||||||
|
if (!bh)
|
||||||
|
return -EIO;
|
||||||
|
memcpy(data, bh->b_data+offset, tocopy);
|
||||||
|
brelse(bh);
|
||||||
|
}
|
||||||
|
offset = 0;
|
||||||
|
toread -= tocopy;
|
||||||
|
data += tocopy;
|
||||||
|
blk++;
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Write to quotafile */
|
||||||
|
static ssize_t jfs_quota_write(struct super_block *sb, int type,
|
||||||
|
const char *data, size_t len, loff_t off)
|
||||||
|
{
|
||||||
|
struct inode *inode = sb_dqopt(sb)->files[type];
|
||||||
|
sector_t blk = off >> sb->s_blocksize_bits;
|
||||||
|
int err = 0;
|
||||||
|
int offset = off & (sb->s_blocksize - 1);
|
||||||
|
int tocopy;
|
||||||
|
size_t towrite = len;
|
||||||
|
struct buffer_head tmp_bh;
|
||||||
|
struct buffer_head *bh;
|
||||||
|
|
||||||
|
mutex_lock(&inode->i_mutex);
|
||||||
|
while (towrite > 0) {
|
||||||
|
tocopy = sb->s_blocksize - offset < towrite ?
|
||||||
|
sb->s_blocksize - offset : towrite;
|
||||||
|
|
||||||
|
tmp_bh.b_state = 0;
|
||||||
|
tmp_bh.b_size = 1 << inode->i_blkbits;
|
||||||
|
err = jfs_get_block(inode, blk, &tmp_bh, 1);
|
||||||
|
if (err)
|
||||||
|
goto out;
|
||||||
|
if (offset || tocopy != sb->s_blocksize)
|
||||||
|
bh = sb_bread(sb, tmp_bh.b_blocknr);
|
||||||
|
else
|
||||||
|
bh = sb_getblk(sb, tmp_bh.b_blocknr);
|
||||||
|
if (!bh) {
|
||||||
|
err = -EIO;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
lock_buffer(bh);
|
||||||
|
memcpy(bh->b_data+offset, data, tocopy);
|
||||||
|
flush_dcache_page(bh->b_page);
|
||||||
|
set_buffer_uptodate(bh);
|
||||||
|
mark_buffer_dirty(bh);
|
||||||
|
unlock_buffer(bh);
|
||||||
|
brelse(bh);
|
||||||
|
offset = 0;
|
||||||
|
towrite -= tocopy;
|
||||||
|
data += tocopy;
|
||||||
|
blk++;
|
||||||
|
}
|
||||||
|
out:
|
||||||
|
if (len == towrite)
|
||||||
|
return err;
|
||||||
|
if (inode->i_size < off+len-towrite)
|
||||||
|
i_size_write(inode, off+len-towrite);
|
||||||
|
inode->i_version++;
|
||||||
|
inode->i_mtime = inode->i_ctime = CURRENT_TIME;
|
||||||
|
mark_inode_dirty(inode);
|
||||||
|
mutex_unlock(&inode->i_mutex);
|
||||||
|
return len - towrite;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
static struct super_operations jfs_super_operations = {
|
static struct super_operations jfs_super_operations = {
|
||||||
.alloc_inode = jfs_alloc_inode,
|
.alloc_inode = jfs_alloc_inode,
|
||||||
.destroy_inode = jfs_destroy_inode,
|
.destroy_inode = jfs_destroy_inode,
|
||||||
|
@ -621,7 +729,11 @@ static struct super_operations jfs_super_operations = {
|
||||||
.unlockfs = jfs_unlockfs,
|
.unlockfs = jfs_unlockfs,
|
||||||
.statfs = jfs_statfs,
|
.statfs = jfs_statfs,
|
||||||
.remount_fs = jfs_remount,
|
.remount_fs = jfs_remount,
|
||||||
.show_options = jfs_show_options
|
.show_options = jfs_show_options,
|
||||||
|
#ifdef CONFIG_QUOTA
|
||||||
|
.quota_read = jfs_quota_read,
|
||||||
|
.quota_write = jfs_quota_write,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct export_operations jfs_export_operations = {
|
static struct export_operations jfs_export_operations = {
|
||||||
|
|
|
@ -1421,8 +1421,9 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
||||||
if (!leases_enable)
|
if (!leases_enable)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
error = lease_alloc(filp, arg, &fl);
|
error = -ENOMEM;
|
||||||
if (error)
|
fl = locks_alloc_lock();
|
||||||
|
if (fl == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
locks_copy_lock(fl, lease);
|
locks_copy_lock(fl, lease);
|
||||||
|
@ -1430,6 +1431,7 @@ static int __setlease(struct file *filp, long arg, struct file_lock **flp)
|
||||||
locks_insert_lock(before, fl);
|
locks_insert_lock(before, fl);
|
||||||
|
|
||||||
*flp = fl;
|
*flp = fl;
|
||||||
|
error = 0;
|
||||||
out:
|
out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
|
@ -2375,7 +2375,6 @@ leave:
|
||||||
mlog(0, "returning %d\n", ret);
|
mlog(0, "returning %d\n", ret);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(dlm_migrate_lockres);
|
|
||||||
|
|
||||||
int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock)
|
int dlm_lock_basts_flushed(struct dlm_ctxt *dlm, struct dlm_lock *lock)
|
||||||
{
|
{
|
||||||
|
|
|
@ -155,7 +155,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
|
||||||
else
|
else
|
||||||
status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions);
|
status = dlm_get_unlock_actions(dlm, res, lock, lksb, &actions);
|
||||||
|
|
||||||
if (status != DLM_NORMAL)
|
if (status != DLM_NORMAL && (status != DLM_CANCELGRANT || !master_node))
|
||||||
goto leave;
|
goto leave;
|
||||||
|
|
||||||
/* By now this has been masked out of cancel requests. */
|
/* By now this has been masked out of cancel requests. */
|
||||||
|
@ -183,8 +183,7 @@ static enum dlm_status dlmunlock_common(struct dlm_ctxt *dlm,
|
||||||
spin_lock(&lock->spinlock);
|
spin_lock(&lock->spinlock);
|
||||||
/* if the master told us the lock was already granted,
|
/* if the master told us the lock was already granted,
|
||||||
* let the ast handle all of these actions */
|
* let the ast handle all of these actions */
|
||||||
if (status == DLM_NORMAL &&
|
if (status == DLM_CANCELGRANT) {
|
||||||
lksb->status == DLM_CANCELGRANT) {
|
|
||||||
actions &= ~(DLM_UNLOCK_REMOVE_LOCK|
|
actions &= ~(DLM_UNLOCK_REMOVE_LOCK|
|
||||||
DLM_UNLOCK_REGRANT_LOCK|
|
DLM_UNLOCK_REGRANT_LOCK|
|
||||||
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
||||||
|
@ -349,14 +348,9 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm,
|
||||||
vec, veclen, owner, &status);
|
vec, veclen, owner, &status);
|
||||||
if (tmpret >= 0) {
|
if (tmpret >= 0) {
|
||||||
// successfully sent and received
|
// successfully sent and received
|
||||||
if (status == DLM_CANCELGRANT)
|
if (status == DLM_FORWARD)
|
||||||
ret = DLM_NORMAL;
|
|
||||||
else if (status == DLM_FORWARD) {
|
|
||||||
mlog(0, "master was in-progress. retry\n");
|
mlog(0, "master was in-progress. retry\n");
|
||||||
ret = DLM_FORWARD;
|
ret = status;
|
||||||
} else
|
|
||||||
ret = status;
|
|
||||||
lksb->status = status;
|
|
||||||
} else {
|
} else {
|
||||||
mlog_errno(tmpret);
|
mlog_errno(tmpret);
|
||||||
if (dlm_is_host_down(tmpret)) {
|
if (dlm_is_host_down(tmpret)) {
|
||||||
|
@ -372,7 +366,6 @@ static enum dlm_status dlm_send_remote_unlock_request(struct dlm_ctxt *dlm,
|
||||||
/* something bad. this will BUG in ocfs2 */
|
/* something bad. this will BUG in ocfs2 */
|
||||||
ret = dlm_err_to_dlm_status(tmpret);
|
ret = dlm_err_to_dlm_status(tmpret);
|
||||||
}
|
}
|
||||||
lksb->status = ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -483,6 +476,10 @@ int dlm_unlock_lock_handler(struct o2net_msg *msg, u32 len, void *data)
|
||||||
|
|
||||||
/* lock was found on queue */
|
/* lock was found on queue */
|
||||||
lksb = lock->lksb;
|
lksb = lock->lksb;
|
||||||
|
if (flags & (LKM_VALBLK|LKM_PUT_LVB) &&
|
||||||
|
lock->ml.type != LKM_EXMODE)
|
||||||
|
flags &= ~(LKM_VALBLK|LKM_PUT_LVB);
|
||||||
|
|
||||||
/* unlockast only called on originating node */
|
/* unlockast only called on originating node */
|
||||||
if (flags & LKM_PUT_LVB) {
|
if (flags & LKM_PUT_LVB) {
|
||||||
lksb->flags |= DLM_LKSB_PUT_LVB;
|
lksb->flags |= DLM_LKSB_PUT_LVB;
|
||||||
|
@ -507,11 +504,8 @@ not_found:
|
||||||
"cookie=%u:%llu\n",
|
"cookie=%u:%llu\n",
|
||||||
dlm_get_lock_cookie_node(unlock->cookie),
|
dlm_get_lock_cookie_node(unlock->cookie),
|
||||||
dlm_get_lock_cookie_seq(unlock->cookie));
|
dlm_get_lock_cookie_seq(unlock->cookie));
|
||||||
else {
|
else
|
||||||
/* send the lksb->status back to the other node */
|
|
||||||
status = lksb->status;
|
|
||||||
dlm_lock_put(lock);
|
dlm_lock_put(lock);
|
||||||
}
|
|
||||||
|
|
||||||
leave:
|
leave:
|
||||||
if (res)
|
if (res)
|
||||||
|
@ -533,26 +527,22 @@ static enum dlm_status dlm_get_cancel_actions(struct dlm_ctxt *dlm,
|
||||||
|
|
||||||
if (dlm_lock_on_list(&res->blocked, lock)) {
|
if (dlm_lock_on_list(&res->blocked, lock)) {
|
||||||
/* cancel this outright */
|
/* cancel this outright */
|
||||||
lksb->status = DLM_NORMAL;
|
|
||||||
status = DLM_NORMAL;
|
status = DLM_NORMAL;
|
||||||
*actions = (DLM_UNLOCK_CALL_AST |
|
*actions = (DLM_UNLOCK_CALL_AST |
|
||||||
DLM_UNLOCK_REMOVE_LOCK);
|
DLM_UNLOCK_REMOVE_LOCK);
|
||||||
} else if (dlm_lock_on_list(&res->converting, lock)) {
|
} else if (dlm_lock_on_list(&res->converting, lock)) {
|
||||||
/* cancel the request, put back on granted */
|
/* cancel the request, put back on granted */
|
||||||
lksb->status = DLM_NORMAL;
|
|
||||||
status = DLM_NORMAL;
|
status = DLM_NORMAL;
|
||||||
*actions = (DLM_UNLOCK_CALL_AST |
|
*actions = (DLM_UNLOCK_CALL_AST |
|
||||||
DLM_UNLOCK_REMOVE_LOCK |
|
DLM_UNLOCK_REMOVE_LOCK |
|
||||||
DLM_UNLOCK_REGRANT_LOCK |
|
DLM_UNLOCK_REGRANT_LOCK |
|
||||||
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
DLM_UNLOCK_CLEAR_CONVERT_TYPE);
|
||||||
} else if (dlm_lock_on_list(&res->granted, lock)) {
|
} else if (dlm_lock_on_list(&res->granted, lock)) {
|
||||||
/* too late, already granted. DLM_CANCELGRANT */
|
/* too late, already granted. */
|
||||||
lksb->status = DLM_CANCELGRANT;
|
status = DLM_CANCELGRANT;
|
||||||
status = DLM_NORMAL;
|
|
||||||
*actions = DLM_UNLOCK_CALL_AST;
|
*actions = DLM_UNLOCK_CALL_AST;
|
||||||
} else {
|
} else {
|
||||||
mlog(ML_ERROR, "lock to cancel is not on any list!\n");
|
mlog(ML_ERROR, "lock to cancel is not on any list!\n");
|
||||||
lksb->status = DLM_IVLOCKID;
|
|
||||||
status = DLM_IVLOCKID;
|
status = DLM_IVLOCKID;
|
||||||
*actions = 0;
|
*actions = 0;
|
||||||
}
|
}
|
||||||
|
@ -569,13 +559,11 @@ static enum dlm_status dlm_get_unlock_actions(struct dlm_ctxt *dlm,
|
||||||
|
|
||||||
/* unlock request */
|
/* unlock request */
|
||||||
if (!dlm_lock_on_list(&res->granted, lock)) {
|
if (!dlm_lock_on_list(&res->granted, lock)) {
|
||||||
lksb->status = DLM_DENIED;
|
|
||||||
status = DLM_DENIED;
|
status = DLM_DENIED;
|
||||||
dlm_error(status);
|
dlm_error(status);
|
||||||
*actions = 0;
|
*actions = 0;
|
||||||
} else {
|
} else {
|
||||||
/* unlock granted lock */
|
/* unlock granted lock */
|
||||||
lksb->status = DLM_NORMAL;
|
|
||||||
status = DLM_NORMAL;
|
status = DLM_NORMAL;
|
||||||
*actions = (DLM_UNLOCK_FREE_LOCK |
|
*actions = (DLM_UNLOCK_FREE_LOCK |
|
||||||
DLM_UNLOCK_CALL_AST |
|
DLM_UNLOCK_CALL_AST |
|
||||||
|
@ -632,6 +620,8 @@ retry:
|
||||||
|
|
||||||
spin_lock(&res->spinlock);
|
spin_lock(&res->spinlock);
|
||||||
is_master = (res->owner == dlm->node_num);
|
is_master = (res->owner == dlm->node_num);
|
||||||
|
if (flags & LKM_VALBLK && lock->ml.type != LKM_EXMODE)
|
||||||
|
flags &= ~LKM_VALBLK;
|
||||||
spin_unlock(&res->spinlock);
|
spin_unlock(&res->spinlock);
|
||||||
|
|
||||||
if (is_master) {
|
if (is_master) {
|
||||||
|
@ -665,7 +655,7 @@ retry:
|
||||||
}
|
}
|
||||||
|
|
||||||
if (call_ast) {
|
if (call_ast) {
|
||||||
mlog(0, "calling unlockast(%p, %d)\n", data, lksb->status);
|
mlog(0, "calling unlockast(%p, %d)\n", data, status);
|
||||||
if (is_master) {
|
if (is_master) {
|
||||||
/* it is possible that there is one last bast
|
/* it is possible that there is one last bast
|
||||||
* pending. make sure it is flushed, then
|
* pending. make sure it is flushed, then
|
||||||
|
@ -677,9 +667,12 @@ retry:
|
||||||
wait_event(dlm->ast_wq,
|
wait_event(dlm->ast_wq,
|
||||||
dlm_lock_basts_flushed(dlm, lock));
|
dlm_lock_basts_flushed(dlm, lock));
|
||||||
}
|
}
|
||||||
(*unlockast)(data, lksb->status);
|
(*unlockast)(data, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (status == DLM_CANCELGRANT)
|
||||||
|
status = DLM_NORMAL;
|
||||||
|
|
||||||
if (status == DLM_NORMAL) {
|
if (status == DLM_NORMAL) {
|
||||||
mlog(0, "kicking the thread\n");
|
mlog(0, "kicking the thread\n");
|
||||||
dlm_kick_thread(dlm, res);
|
dlm_kick_thread(dlm, res);
|
||||||
|
|
|
@ -840,6 +840,12 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
|
||||||
|
|
||||||
mlog(0, "Allocating %u clusters for a new window.\n",
|
mlog(0, "Allocating %u clusters for a new window.\n",
|
||||||
ocfs2_local_alloc_window_bits(osb));
|
ocfs2_local_alloc_window_bits(osb));
|
||||||
|
|
||||||
|
/* Instruct the allocation code to try the most recently used
|
||||||
|
* cluster group. We'll re-record the group used this pass
|
||||||
|
* below. */
|
||||||
|
ac->ac_last_group = osb->la_last_gd;
|
||||||
|
|
||||||
/* we used the generic suballoc reserve function, but we set
|
/* we used the generic suballoc reserve function, but we set
|
||||||
* everything up nicely, so there's no reason why we can't use
|
* everything up nicely, so there's no reason why we can't use
|
||||||
* the more specific cluster api to claim bits. */
|
* the more specific cluster api to claim bits. */
|
||||||
|
@ -852,6 +858,8 @@ static int ocfs2_local_alloc_new_window(struct ocfs2_super *osb,
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
osb->la_last_gd = ac->ac_last_group;
|
||||||
|
|
||||||
la->la_bm_off = cpu_to_le32(cluster_off);
|
la->la_bm_off = cpu_to_le32(cluster_off);
|
||||||
alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
|
alloc->id1.bitmap1.i_total = cpu_to_le32(cluster_count);
|
||||||
/* just in case... In the future when we find space ourselves,
|
/* just in case... In the future when we find space ourselves,
|
||||||
|
|
|
@ -197,7 +197,6 @@ struct ocfs2_super
|
||||||
struct ocfs2_node_map recovery_map;
|
struct ocfs2_node_map recovery_map;
|
||||||
struct ocfs2_node_map umount_map;
|
struct ocfs2_node_map umount_map;
|
||||||
|
|
||||||
u32 num_clusters;
|
|
||||||
u64 root_blkno;
|
u64 root_blkno;
|
||||||
u64 system_dir_blkno;
|
u64 system_dir_blkno;
|
||||||
u64 bitmap_blkno;
|
u64 bitmap_blkno;
|
||||||
|
@ -237,6 +236,7 @@ struct ocfs2_super
|
||||||
|
|
||||||
enum ocfs2_local_alloc_state local_alloc_state;
|
enum ocfs2_local_alloc_state local_alloc_state;
|
||||||
struct buffer_head *local_alloc_bh;
|
struct buffer_head *local_alloc_bh;
|
||||||
|
u64 la_last_gd;
|
||||||
|
|
||||||
/* Next two fields are for local node slot recovery during
|
/* Next two fields are for local node slot recovery during
|
||||||
* mount. */
|
* mount. */
|
||||||
|
|
|
@ -70,12 +70,6 @@ static int ocfs2_block_group_search(struct inode *inode,
|
||||||
struct buffer_head *group_bh,
|
struct buffer_head *group_bh,
|
||||||
u32 bits_wanted, u32 min_bits,
|
u32 bits_wanted, u32 min_bits,
|
||||||
u16 *bit_off, u16 *bits_found);
|
u16 *bit_off, u16 *bits_found);
|
||||||
static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
|
||||||
u32 bits_wanted,
|
|
||||||
u32 min_bits,
|
|
||||||
u16 *bit_off,
|
|
||||||
unsigned int *num_bits,
|
|
||||||
u64 *bg_blkno);
|
|
||||||
static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
struct ocfs2_alloc_context *ac,
|
struct ocfs2_alloc_context *ac,
|
||||||
u32 bits_wanted,
|
u32 bits_wanted,
|
||||||
|
@ -85,11 +79,6 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
u64 *bg_blkno);
|
u64 *bg_blkno);
|
||||||
static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh,
|
static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh,
|
||||||
int nr);
|
int nr);
|
||||||
static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
|
||||||
struct buffer_head *bg_bh,
|
|
||||||
unsigned int bits_wanted,
|
|
||||||
u16 *bit_off,
|
|
||||||
u16 *bits_found);
|
|
||||||
static inline int ocfs2_block_group_set_bits(struct ocfs2_journal_handle *handle,
|
static inline int ocfs2_block_group_set_bits(struct ocfs2_journal_handle *handle,
|
||||||
struct inode *alloc_inode,
|
struct inode *alloc_inode,
|
||||||
struct ocfs2_group_desc *bg,
|
struct ocfs2_group_desc *bg,
|
||||||
|
@ -143,6 +132,64 @@ static u32 ocfs2_bits_per_group(struct ocfs2_chain_list *cl)
|
||||||
return (u32)le16_to_cpu(cl->cl_cpg) * (u32)le16_to_cpu(cl->cl_bpc);
|
return (u32)le16_to_cpu(cl->cl_cpg) * (u32)le16_to_cpu(cl->cl_bpc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* somewhat more expensive than our other checks, so use sparingly. */
|
||||||
|
static int ocfs2_check_group_descriptor(struct super_block *sb,
|
||||||
|
struct ocfs2_dinode *di,
|
||||||
|
struct ocfs2_group_desc *gd)
|
||||||
|
{
|
||||||
|
unsigned int max_bits;
|
||||||
|
|
||||||
|
if (!OCFS2_IS_VALID_GROUP_DESC(gd)) {
|
||||||
|
OCFS2_RO_ON_INVALID_GROUP_DESC(sb, gd);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (di->i_blkno != gd->bg_parent_dinode) {
|
||||||
|
ocfs2_error(sb, "Group descriptor # %llu has bad parent "
|
||||||
|
"pointer (%llu, expected %llu)",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_parent_dinode),
|
||||||
|
(unsigned long long)le64_to_cpu(di->i_blkno));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
max_bits = le16_to_cpu(di->id2.i_chain.cl_cpg) * le16_to_cpu(di->id2.i_chain.cl_bpc);
|
||||||
|
if (le16_to_cpu(gd->bg_bits) > max_bits) {
|
||||||
|
ocfs2_error(sb, "Group descriptor # %llu has bit count of %u",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
le16_to_cpu(gd->bg_bits));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (le16_to_cpu(gd->bg_chain) >=
|
||||||
|
le16_to_cpu(di->id2.i_chain.cl_next_free_rec)) {
|
||||||
|
ocfs2_error(sb, "Group descriptor # %llu has bad chain %u",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
le16_to_cpu(gd->bg_chain));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (le16_to_cpu(gd->bg_free_bits_count) > le16_to_cpu(gd->bg_bits)) {
|
||||||
|
ocfs2_error(sb, "Group descriptor # %llu has bit count %u but "
|
||||||
|
"claims that %u are free",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
le16_to_cpu(gd->bg_bits),
|
||||||
|
le16_to_cpu(gd->bg_free_bits_count));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (le16_to_cpu(gd->bg_bits) > (8 * le16_to_cpu(gd->bg_size))) {
|
||||||
|
ocfs2_error(sb, "Group descriptor # %llu has bit count %u but "
|
||||||
|
"max bitmap bits of %u",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
le16_to_cpu(gd->bg_bits),
|
||||||
|
8 * le16_to_cpu(gd->bg_size));
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int ocfs2_block_group_fill(struct ocfs2_journal_handle *handle,
|
static int ocfs2_block_group_fill(struct ocfs2_journal_handle *handle,
|
||||||
struct inode *alloc_inode,
|
struct inode *alloc_inode,
|
||||||
struct buffer_head *bg_bh,
|
struct buffer_head *bg_bh,
|
||||||
|
@ -663,6 +710,7 @@ static int ocfs2_test_bg_bit_allocatable(struct buffer_head *bg_bh,
|
||||||
static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
||||||
struct buffer_head *bg_bh,
|
struct buffer_head *bg_bh,
|
||||||
unsigned int bits_wanted,
|
unsigned int bits_wanted,
|
||||||
|
unsigned int total_bits,
|
||||||
u16 *bit_off,
|
u16 *bit_off,
|
||||||
u16 *bits_found)
|
u16 *bits_found)
|
||||||
{
|
{
|
||||||
|
@ -679,10 +727,8 @@ static int ocfs2_block_group_find_clear_bits(struct ocfs2_super *osb,
|
||||||
found = start = best_offset = best_size = 0;
|
found = start = best_offset = best_size = 0;
|
||||||
bitmap = bg->bg_bitmap;
|
bitmap = bg->bg_bitmap;
|
||||||
|
|
||||||
while((offset = ocfs2_find_next_zero_bit(bitmap,
|
while((offset = ocfs2_find_next_zero_bit(bitmap, total_bits, start)) != -1) {
|
||||||
le16_to_cpu(bg->bg_bits),
|
if (offset == total_bits)
|
||||||
start)) != -1) {
|
|
||||||
if (offset == le16_to_cpu(bg->bg_bits))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (!ocfs2_test_bg_bit_allocatable(bg_bh, offset)) {
|
if (!ocfs2_test_bg_bit_allocatable(bg_bh, offset)) {
|
||||||
|
@ -911,14 +957,35 @@ static int ocfs2_cluster_group_search(struct inode *inode,
|
||||||
{
|
{
|
||||||
int search = -ENOSPC;
|
int search = -ENOSPC;
|
||||||
int ret;
|
int ret;
|
||||||
struct ocfs2_group_desc *bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
struct ocfs2_group_desc *gd = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||||
u16 tmp_off, tmp_found;
|
u16 tmp_off, tmp_found;
|
||||||
|
unsigned int max_bits, gd_cluster_off;
|
||||||
|
|
||||||
BUG_ON(!ocfs2_is_cluster_bitmap(inode));
|
BUG_ON(!ocfs2_is_cluster_bitmap(inode));
|
||||||
|
|
||||||
if (bg->bg_free_bits_count) {
|
if (gd->bg_free_bits_count) {
|
||||||
|
max_bits = le16_to_cpu(gd->bg_bits);
|
||||||
|
|
||||||
|
/* Tail groups in cluster bitmaps which aren't cpg
|
||||||
|
* aligned are prone to partial extention by a failed
|
||||||
|
* fs resize. If the file system resize never got to
|
||||||
|
* update the dinode cluster count, then we don't want
|
||||||
|
* to trust any clusters past it, regardless of what
|
||||||
|
* the group descriptor says. */
|
||||||
|
gd_cluster_off = ocfs2_blocks_to_clusters(inode->i_sb,
|
||||||
|
le64_to_cpu(gd->bg_blkno));
|
||||||
|
if ((gd_cluster_off + max_bits) >
|
||||||
|
OCFS2_I(inode)->ip_clusters) {
|
||||||
|
max_bits = OCFS2_I(inode)->ip_clusters - gd_cluster_off;
|
||||||
|
mlog(0, "Desc %llu, bg_bits %u, clusters %u, use %u\n",
|
||||||
|
(unsigned long long)le64_to_cpu(gd->bg_blkno),
|
||||||
|
le16_to_cpu(gd->bg_bits),
|
||||||
|
OCFS2_I(inode)->ip_clusters, max_bits);
|
||||||
|
}
|
||||||
|
|
||||||
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
||||||
group_bh, bits_wanted,
|
group_bh, bits_wanted,
|
||||||
|
max_bits,
|
||||||
&tmp_off, &tmp_found);
|
&tmp_off, &tmp_found);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -951,17 +1018,109 @@ static int ocfs2_block_group_search(struct inode *inode,
|
||||||
if (bg->bg_free_bits_count)
|
if (bg->bg_free_bits_count)
|
||||||
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
ret = ocfs2_block_group_find_clear_bits(OCFS2_SB(inode->i_sb),
|
||||||
group_bh, bits_wanted,
|
group_bh, bits_wanted,
|
||||||
|
le16_to_cpu(bg->bg_bits),
|
||||||
bit_off, bits_found);
|
bit_off, bits_found);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int ocfs2_alloc_dinode_update_counts(struct inode *inode,
|
||||||
|
struct ocfs2_journal_handle *handle,
|
||||||
|
struct buffer_head *di_bh,
|
||||||
|
u32 num_bits,
|
||||||
|
u16 chain)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
u32 tmp_used;
|
||||||
|
struct ocfs2_dinode *di = (struct ocfs2_dinode *) di_bh->b_data;
|
||||||
|
struct ocfs2_chain_list *cl = (struct ocfs2_chain_list *) &di->id2.i_chain;
|
||||||
|
|
||||||
|
ret = ocfs2_journal_access(handle, inode, di_bh,
|
||||||
|
OCFS2_JOURNAL_ACCESS_WRITE);
|
||||||
|
if (ret < 0) {
|
||||||
|
mlog_errno(ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
tmp_used = le32_to_cpu(di->id1.bitmap1.i_used);
|
||||||
|
di->id1.bitmap1.i_used = cpu_to_le32(num_bits + tmp_used);
|
||||||
|
le32_add_cpu(&cl->cl_recs[chain].c_free, -num_bits);
|
||||||
|
|
||||||
|
ret = ocfs2_journal_dirty(handle, di_bh);
|
||||||
|
if (ret < 0)
|
||||||
|
mlog_errno(ret);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ocfs2_search_one_group(struct ocfs2_alloc_context *ac,
|
||||||
|
u32 bits_wanted,
|
||||||
|
u32 min_bits,
|
||||||
|
u16 *bit_off,
|
||||||
|
unsigned int *num_bits,
|
||||||
|
u64 gd_blkno,
|
||||||
|
u16 *bits_left)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
u16 found;
|
||||||
|
struct buffer_head *group_bh = NULL;
|
||||||
|
struct ocfs2_group_desc *gd;
|
||||||
|
struct inode *alloc_inode = ac->ac_inode;
|
||||||
|
struct ocfs2_journal_handle *handle = ac->ac_handle;
|
||||||
|
|
||||||
|
ret = ocfs2_read_block(OCFS2_SB(alloc_inode->i_sb), gd_blkno,
|
||||||
|
&group_bh, OCFS2_BH_CACHED, alloc_inode);
|
||||||
|
if (ret < 0) {
|
||||||
|
mlog_errno(ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
gd = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||||
|
if (!OCFS2_IS_VALID_GROUP_DESC(gd)) {
|
||||||
|
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, gd);
|
||||||
|
ret = -EIO;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ac->ac_group_search(alloc_inode, group_bh, bits_wanted, min_bits,
|
||||||
|
bit_off, &found);
|
||||||
|
if (ret < 0) {
|
||||||
|
if (ret != -ENOSPC)
|
||||||
|
mlog_errno(ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
*num_bits = found;
|
||||||
|
|
||||||
|
ret = ocfs2_alloc_dinode_update_counts(alloc_inode, handle, ac->ac_bh,
|
||||||
|
*num_bits,
|
||||||
|
le16_to_cpu(gd->bg_chain));
|
||||||
|
if (ret < 0) {
|
||||||
|
mlog_errno(ret);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = ocfs2_block_group_set_bits(handle, alloc_inode, gd, group_bh,
|
||||||
|
*bit_off, *num_bits);
|
||||||
|
if (ret < 0)
|
||||||
|
mlog_errno(ret);
|
||||||
|
|
||||||
|
*bits_left = le16_to_cpu(gd->bg_free_bits_count);
|
||||||
|
|
||||||
|
out:
|
||||||
|
brelse(group_bh);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||||
u32 bits_wanted,
|
u32 bits_wanted,
|
||||||
u32 min_bits,
|
u32 min_bits,
|
||||||
u16 *bit_off,
|
u16 *bit_off,
|
||||||
unsigned int *num_bits,
|
unsigned int *num_bits,
|
||||||
u64 *bg_blkno)
|
u64 *bg_blkno,
|
||||||
|
u16 *bits_left)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
u16 chain, tmp_bits;
|
u16 chain, tmp_bits;
|
||||||
|
@ -988,9 +1147,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||||
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) {
|
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg);
|
||||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg);
|
if (status) {
|
||||||
status = -EIO;
|
mlog_errno(status);
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1018,9 +1177,9 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
bg = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||||
if (!OCFS2_IS_VALID_GROUP_DESC(bg)) {
|
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, bg);
|
||||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, bg);
|
if (status) {
|
||||||
status = -EIO;
|
mlog_errno(status);
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1099,6 +1258,7 @@ static int ocfs2_search_chain(struct ocfs2_alloc_context *ac,
|
||||||
(unsigned long long)fe->i_blkno);
|
(unsigned long long)fe->i_blkno);
|
||||||
|
|
||||||
*bg_blkno = le64_to_cpu(bg->bg_blkno);
|
*bg_blkno = le64_to_cpu(bg->bg_blkno);
|
||||||
|
*bits_left = le16_to_cpu(bg->bg_free_bits_count);
|
||||||
bail:
|
bail:
|
||||||
if (group_bh)
|
if (group_bh)
|
||||||
brelse(group_bh);
|
brelse(group_bh);
|
||||||
|
@ -1120,6 +1280,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
u16 victim, i;
|
u16 victim, i;
|
||||||
|
u16 bits_left = 0;
|
||||||
|
u64 hint_blkno = ac->ac_last_group;
|
||||||
struct ocfs2_chain_list *cl;
|
struct ocfs2_chain_list *cl;
|
||||||
struct ocfs2_dinode *fe;
|
struct ocfs2_dinode *fe;
|
||||||
|
|
||||||
|
@ -1146,6 +1308,28 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hint_blkno) {
|
||||||
|
/* Attempt to short-circuit the usual search mechanism
|
||||||
|
* by jumping straight to the most recently used
|
||||||
|
* allocation group. This helps us mantain some
|
||||||
|
* contiguousness across allocations. */
|
||||||
|
status = ocfs2_search_one_group(ac, bits_wanted, min_bits,
|
||||||
|
bit_off, num_bits,
|
||||||
|
hint_blkno, &bits_left);
|
||||||
|
if (!status) {
|
||||||
|
/* Be careful to update *bg_blkno here as the
|
||||||
|
* caller is expecting it to be filled in, and
|
||||||
|
* ocfs2_search_one_group() won't do that for
|
||||||
|
* us. */
|
||||||
|
*bg_blkno = hint_blkno;
|
||||||
|
goto set_hint;
|
||||||
|
}
|
||||||
|
if (status < 0 && status != -ENOSPC) {
|
||||||
|
mlog_errno(status);
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
cl = (struct ocfs2_chain_list *) &fe->id2.i_chain;
|
cl = (struct ocfs2_chain_list *) &fe->id2.i_chain;
|
||||||
|
|
||||||
victim = ocfs2_find_victim_chain(cl);
|
victim = ocfs2_find_victim_chain(cl);
|
||||||
|
@ -1153,9 +1337,9 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
ac->ac_allow_chain_relink = 1;
|
ac->ac_allow_chain_relink = 1;
|
||||||
|
|
||||||
status = ocfs2_search_chain(ac, bits_wanted, min_bits, bit_off,
|
status = ocfs2_search_chain(ac, bits_wanted, min_bits, bit_off,
|
||||||
num_bits, bg_blkno);
|
num_bits, bg_blkno, &bits_left);
|
||||||
if (!status)
|
if (!status)
|
||||||
goto bail;
|
goto set_hint;
|
||||||
if (status < 0 && status != -ENOSPC) {
|
if (status < 0 && status != -ENOSPC) {
|
||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
goto bail;
|
goto bail;
|
||||||
|
@ -1177,8 +1361,8 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
|
|
||||||
ac->ac_chain = i;
|
ac->ac_chain = i;
|
||||||
status = ocfs2_search_chain(ac, bits_wanted, min_bits,
|
status = ocfs2_search_chain(ac, bits_wanted, min_bits,
|
||||||
bit_off, num_bits,
|
bit_off, num_bits, bg_blkno,
|
||||||
bg_blkno);
|
&bits_left);
|
||||||
if (!status)
|
if (!status)
|
||||||
break;
|
break;
|
||||||
if (status < 0 && status != -ENOSPC) {
|
if (status < 0 && status != -ENOSPC) {
|
||||||
|
@ -1186,8 +1370,19 @@ static int ocfs2_claim_suballoc_bits(struct ocfs2_super *osb,
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bail:
|
|
||||||
|
|
||||||
|
set_hint:
|
||||||
|
if (status != -ENOSPC) {
|
||||||
|
/* If the next search of this group is not likely to
|
||||||
|
* yield a suitable extent, then we reset the last
|
||||||
|
* group hint so as to not waste a disk read */
|
||||||
|
if (bits_left < min_bits)
|
||||||
|
ac->ac_last_group = 0;
|
||||||
|
else
|
||||||
|
ac->ac_last_group = *bg_blkno;
|
||||||
|
}
|
||||||
|
|
||||||
|
bail:
|
||||||
mlog_exit(status);
|
mlog_exit(status);
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
@ -1341,7 +1536,7 @@ int ocfs2_claim_clusters(struct ocfs2_super *osb,
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given;
|
unsigned int bits_wanted = ac->ac_bits_wanted - ac->ac_bits_given;
|
||||||
u64 bg_blkno;
|
u64 bg_blkno = 0;
|
||||||
u16 bg_bit_off;
|
u16 bg_bit_off;
|
||||||
|
|
||||||
mlog_entry_void();
|
mlog_entry_void();
|
||||||
|
@ -1494,9 +1689,9 @@ static int ocfs2_free_suballoc_bits(struct ocfs2_journal_handle *handle,
|
||||||
}
|
}
|
||||||
|
|
||||||
group = (struct ocfs2_group_desc *) group_bh->b_data;
|
group = (struct ocfs2_group_desc *) group_bh->b_data;
|
||||||
if (!OCFS2_IS_VALID_GROUP_DESC(group)) {
|
status = ocfs2_check_group_descriptor(alloc_inode->i_sb, fe, group);
|
||||||
OCFS2_RO_ON_INVALID_GROUP_DESC(alloc_inode->i_sb, group);
|
if (status) {
|
||||||
status = -EIO;
|
mlog_errno(status);
|
||||||
goto bail;
|
goto bail;
|
||||||
}
|
}
|
||||||
BUG_ON((count + start_bit) > le16_to_cpu(group->bg_bits));
|
BUG_ON((count + start_bit) > le16_to_cpu(group->bg_bits));
|
||||||
|
|
|
@ -49,6 +49,8 @@ struct ocfs2_alloc_context {
|
||||||
u16 ac_chain;
|
u16 ac_chain;
|
||||||
int ac_allow_chain_relink;
|
int ac_allow_chain_relink;
|
||||||
group_search_t *ac_group_search;
|
group_search_t *ac_group_search;
|
||||||
|
|
||||||
|
u64 ac_last_group;
|
||||||
};
|
};
|
||||||
|
|
||||||
void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac);
|
void ocfs2_free_alloc_context(struct ocfs2_alloc_context *ac);
|
||||||
|
|
|
@ -1442,8 +1442,13 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
||||||
|
|
||||||
osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
|
osb->bitmap_blkno = OCFS2_I(inode)->ip_blkno;
|
||||||
|
|
||||||
|
/* We don't have a cluster lock on the bitmap here because
|
||||||
|
* we're only interested in static information and the extra
|
||||||
|
* complexity at mount time isn't worht it. Don't pass the
|
||||||
|
* inode in to the read function though as we don't want it to
|
||||||
|
* be put in the cache. */
|
||||||
status = ocfs2_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0,
|
status = ocfs2_read_block(osb, osb->bitmap_blkno, &bitmap_bh, 0,
|
||||||
inode);
|
NULL);
|
||||||
iput(inode);
|
iput(inode);
|
||||||
if (status < 0) {
|
if (status < 0) {
|
||||||
mlog_errno(status);
|
mlog_errno(status);
|
||||||
|
@ -1452,7 +1457,6 @@ static int ocfs2_initialize_super(struct super_block *sb,
|
||||||
|
|
||||||
di = (struct ocfs2_dinode *) bitmap_bh->b_data;
|
di = (struct ocfs2_dinode *) bitmap_bh->b_data;
|
||||||
osb->bitmap_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg);
|
osb->bitmap_cpg = le16_to_cpu(di->id2.i_chain.cl_cpg);
|
||||||
osb->num_clusters = le32_to_cpu(di->id1.bitmap1.i_total);
|
|
||||||
brelse(bitmap_bh);
|
brelse(bitmap_bh);
|
||||||
mlog(0, "cluster bitmap inode: %llu, clusters per group: %u\n",
|
mlog(0, "cluster bitmap inode: %llu, clusters per group: %u\n",
|
||||||
(unsigned long long)osb->bitmap_blkno, osb->bitmap_cpg);
|
(unsigned long long)osb->bitmap_blkno, osb->bitmap_cpg);
|
||||||
|
|
|
@ -115,6 +115,13 @@ static struct inode *udf_alloc_inode(struct super_block *sb)
|
||||||
ei = (struct udf_inode_info *)kmem_cache_alloc(udf_inode_cachep, SLAB_KERNEL);
|
ei = (struct udf_inode_info *)kmem_cache_alloc(udf_inode_cachep, SLAB_KERNEL);
|
||||||
if (!ei)
|
if (!ei)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
ei->i_unique = 0;
|
||||||
|
ei->i_lenExtents = 0;
|
||||||
|
ei->i_next_alloc_block = 0;
|
||||||
|
ei->i_next_alloc_goal = 0;
|
||||||
|
ei->i_strat4096 = 0;
|
||||||
|
|
||||||
return &ei->vfs_inode;
|
return &ei->vfs_inode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1835,40 +1835,47 @@ xfs_alloc_fix_freelist(
|
||||||
&agbp)))
|
&agbp)))
|
||||||
return error;
|
return error;
|
||||||
if (!pag->pagf_init) {
|
if (!pag->pagf_init) {
|
||||||
|
ASSERT(flags & XFS_ALLOC_FLAG_TRYLOCK);
|
||||||
|
ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING));
|
||||||
args->agbp = NULL;
|
args->agbp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
agbp = NULL;
|
agbp = NULL;
|
||||||
|
|
||||||
/* If this is a metadata preferred pag and we are user data
|
/*
|
||||||
|
* If this is a metadata preferred pag and we are user data
|
||||||
* then try somewhere else if we are not being asked to
|
* then try somewhere else if we are not being asked to
|
||||||
* try harder at this point
|
* try harder at this point
|
||||||
*/
|
*/
|
||||||
if (pag->pagf_metadata && args->userdata && flags) {
|
if (pag->pagf_metadata && args->userdata &&
|
||||||
|
(flags & XFS_ALLOC_FLAG_TRYLOCK)) {
|
||||||
|
ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING));
|
||||||
args->agbp = NULL;
|
args->agbp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
need = XFS_MIN_FREELIST_PAG(pag, mp);
|
if (!(flags & XFS_ALLOC_FLAG_FREEING)) {
|
||||||
delta = need > pag->pagf_flcount ? need - pag->pagf_flcount : 0;
|
need = XFS_MIN_FREELIST_PAG(pag, mp);
|
||||||
/*
|
delta = need > pag->pagf_flcount ? need - pag->pagf_flcount : 0;
|
||||||
* If it looks like there isn't a long enough extent, or enough
|
/*
|
||||||
* total blocks, reject it.
|
* If it looks like there isn't a long enough extent, or enough
|
||||||
*/
|
* total blocks, reject it.
|
||||||
longest = (pag->pagf_longest > delta) ?
|
*/
|
||||||
(pag->pagf_longest - delta) :
|
longest = (pag->pagf_longest > delta) ?
|
||||||
(pag->pagf_flcount > 0 || pag->pagf_longest > 0);
|
(pag->pagf_longest - delta) :
|
||||||
if (args->minlen + args->alignment + args->minalignslop - 1 > longest ||
|
(pag->pagf_flcount > 0 || pag->pagf_longest > 0);
|
||||||
(!(flags & XFS_ALLOC_FLAG_FREEING) &&
|
if ((args->minlen + args->alignment + args->minalignslop - 1) >
|
||||||
(int)(pag->pagf_freeblks + pag->pagf_flcount -
|
longest ||
|
||||||
need - args->total) <
|
((int)(pag->pagf_freeblks + pag->pagf_flcount -
|
||||||
(int)args->minleft)) {
|
need - args->total) < (int)args->minleft)) {
|
||||||
if (agbp)
|
if (agbp)
|
||||||
xfs_trans_brelse(tp, agbp);
|
xfs_trans_brelse(tp, agbp);
|
||||||
args->agbp = NULL;
|
args->agbp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Get the a.g. freespace buffer.
|
* Get the a.g. freespace buffer.
|
||||||
* Can fail if we're not blocking on locks, and it's held.
|
* Can fail if we're not blocking on locks, and it's held.
|
||||||
|
@ -1878,6 +1885,8 @@ xfs_alloc_fix_freelist(
|
||||||
&agbp)))
|
&agbp)))
|
||||||
return error;
|
return error;
|
||||||
if (agbp == NULL) {
|
if (agbp == NULL) {
|
||||||
|
ASSERT(flags & XFS_ALLOC_FLAG_TRYLOCK);
|
||||||
|
ASSERT(!(flags & XFS_ALLOC_FLAG_FREEING));
|
||||||
args->agbp = NULL;
|
args->agbp = NULL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1887,22 +1896,24 @@ xfs_alloc_fix_freelist(
|
||||||
*/
|
*/
|
||||||
agf = XFS_BUF_TO_AGF(agbp);
|
agf = XFS_BUF_TO_AGF(agbp);
|
||||||
need = XFS_MIN_FREELIST(agf, mp);
|
need = XFS_MIN_FREELIST(agf, mp);
|
||||||
delta = need > be32_to_cpu(agf->agf_flcount) ?
|
|
||||||
(need - be32_to_cpu(agf->agf_flcount)) : 0;
|
|
||||||
/*
|
/*
|
||||||
* If there isn't enough total or single-extent, reject it.
|
* If there isn't enough total or single-extent, reject it.
|
||||||
*/
|
*/
|
||||||
longest = be32_to_cpu(agf->agf_longest);
|
if (!(flags & XFS_ALLOC_FLAG_FREEING)) {
|
||||||
longest = (longest > delta) ? (longest - delta) :
|
delta = need > be32_to_cpu(agf->agf_flcount) ?
|
||||||
(be32_to_cpu(agf->agf_flcount) > 0 || longest > 0);
|
(need - be32_to_cpu(agf->agf_flcount)) : 0;
|
||||||
if (args->minlen + args->alignment + args->minalignslop - 1 > longest ||
|
longest = be32_to_cpu(agf->agf_longest);
|
||||||
(!(flags & XFS_ALLOC_FLAG_FREEING) &&
|
longest = (longest > delta) ? (longest - delta) :
|
||||||
(int)(be32_to_cpu(agf->agf_freeblks) +
|
(be32_to_cpu(agf->agf_flcount) > 0 || longest > 0);
|
||||||
be32_to_cpu(agf->agf_flcount) - need - args->total) <
|
if ((args->minlen + args->alignment + args->minalignslop - 1) >
|
||||||
(int)args->minleft)) {
|
longest ||
|
||||||
xfs_trans_brelse(tp, agbp);
|
((int)(be32_to_cpu(agf->agf_freeblks) +
|
||||||
args->agbp = NULL;
|
be32_to_cpu(agf->agf_flcount) - need - args->total) <
|
||||||
return 0;
|
(int)args->minleft)) {
|
||||||
|
xfs_trans_brelse(tp, agbp);
|
||||||
|
args->agbp = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Make the freelist shorter if it's too long.
|
* Make the freelist shorter if it's too long.
|
||||||
|
@ -1950,12 +1961,11 @@ xfs_alloc_fix_freelist(
|
||||||
* on a completely full ag.
|
* on a completely full ag.
|
||||||
*/
|
*/
|
||||||
if (targs.agbno == NULLAGBLOCK) {
|
if (targs.agbno == NULLAGBLOCK) {
|
||||||
if (!(flags & XFS_ALLOC_FLAG_FREEING)) {
|
if (flags & XFS_ALLOC_FLAG_FREEING)
|
||||||
xfs_trans_brelse(tp, agflbp);
|
break;
|
||||||
args->agbp = NULL;
|
xfs_trans_brelse(tp, agflbp);
|
||||||
return 0;
|
args->agbp = NULL;
|
||||||
}
|
return 0;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Put each allocated block on the list.
|
* Put each allocated block on the list.
|
||||||
|
@ -2442,31 +2452,26 @@ xfs_free_extent(
|
||||||
xfs_fsblock_t bno, /* starting block number of extent */
|
xfs_fsblock_t bno, /* starting block number of extent */
|
||||||
xfs_extlen_t len) /* length of extent */
|
xfs_extlen_t len) /* length of extent */
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
xfs_alloc_arg_t args;
|
||||||
xfs_agf_t *agf; /* a.g. freespace header */
|
|
||||||
#endif
|
|
||||||
xfs_alloc_arg_t args; /* allocation argument structure */
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
ASSERT(len != 0);
|
ASSERT(len != 0);
|
||||||
|
memset(&args, 0, sizeof(xfs_alloc_arg_t));
|
||||||
args.tp = tp;
|
args.tp = tp;
|
||||||
args.mp = tp->t_mountp;
|
args.mp = tp->t_mountp;
|
||||||
args.agno = XFS_FSB_TO_AGNO(args.mp, bno);
|
args.agno = XFS_FSB_TO_AGNO(args.mp, bno);
|
||||||
ASSERT(args.agno < args.mp->m_sb.sb_agcount);
|
ASSERT(args.agno < args.mp->m_sb.sb_agcount);
|
||||||
args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno);
|
args.agbno = XFS_FSB_TO_AGBNO(args.mp, bno);
|
||||||
args.alignment = 1;
|
|
||||||
args.minlen = args.minleft = args.minalignslop = 0;
|
|
||||||
down_read(&args.mp->m_peraglock);
|
down_read(&args.mp->m_peraglock);
|
||||||
args.pag = &args.mp->m_perag[args.agno];
|
args.pag = &args.mp->m_perag[args.agno];
|
||||||
if ((error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING)))
|
if ((error = xfs_alloc_fix_freelist(&args, XFS_ALLOC_FLAG_FREEING)))
|
||||||
goto error0;
|
goto error0;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
ASSERT(args.agbp != NULL);
|
ASSERT(args.agbp != NULL);
|
||||||
agf = XFS_BUF_TO_AGF(args.agbp);
|
ASSERT((args.agbno + len) <=
|
||||||
ASSERT(args.agbno + len <= be32_to_cpu(agf->agf_length));
|
be32_to_cpu(XFS_BUF_TO_AGF(args.agbp)->agf_length));
|
||||||
#endif
|
#endif
|
||||||
error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno,
|
error = xfs_free_ag_extent(tp, args.agbp, args.agno, args.agbno, len, 0);
|
||||||
len, 0);
|
|
||||||
error0:
|
error0:
|
||||||
up_read(&args.mp->m_peraglock);
|
up_read(&args.mp->m_peraglock);
|
||||||
return error;
|
return error;
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
#include <linux/cpumask.h>
|
||||||
|
|
||||||
#ifdef CONFIG_KEXEC
|
#ifdef CONFIG_KEXEC
|
||||||
|
|
||||||
|
@ -109,7 +110,6 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
|
||||||
|
|
||||||
#define MAX_NOTE_BYTES 1024
|
#define MAX_NOTE_BYTES 1024
|
||||||
|
|
||||||
#ifdef __powerpc64__
|
|
||||||
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
|
extern void kexec_smp_wait(void); /* get and clear naca physid, wait for
|
||||||
master to copy new code to 0 */
|
master to copy new code to 0 */
|
||||||
extern int crashing_cpu;
|
extern int crashing_cpu;
|
||||||
|
@ -119,7 +119,6 @@ static inline int kexec_sr_activated(int cpu)
|
||||||
{
|
{
|
||||||
return cpu_isset(cpu,cpus_in_sr);
|
return cpu_isset(cpu,cpus_in_sr);
|
||||||
}
|
}
|
||||||
#endif /* __powerpc64 __ */
|
|
||||||
|
|
||||||
struct kimage;
|
struct kimage;
|
||||||
struct pt_regs;
|
struct pt_regs;
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue