Merge git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Signed-off-by: David Woodhouse <dwmw2@infradead.org>
This commit is contained in:
commit
18594822fc
19
CREDITS
19
CREDITS
|
@ -1194,15 +1194,9 @@ S: Brecksville, OH 44141-1334
|
|||
S: USA
|
||||
|
||||
N: Tristan Greaves
|
||||
E: Tristan.Greaves@icl.com
|
||||
E: tmg296@ecs.soton.ac.uk
|
||||
W: http://www.ecs.soton.ac.uk/~tmg296
|
||||
E: tristan@extricate.org
|
||||
W: http://www.extricate.org/
|
||||
D: Miscellaneous ipv4 sysctl patches
|
||||
S: 15 Little Mead
|
||||
S: Denmead
|
||||
S: Hampshire
|
||||
S: PO7 6HS
|
||||
S: United Kingdom
|
||||
|
||||
N: Michael A. Griffith
|
||||
E: grif@cs.ucr.edu
|
||||
|
@ -3247,14 +3241,9 @@ S: 12725 SW Millikan Way, Suite 400
|
|||
S: Beaverton, Oregon 97005
|
||||
S: USA
|
||||
|
||||
N: Marcelo W. Tosatti
|
||||
E: marcelo.tosatti@cyclades.com
|
||||
D: Miscellaneous kernel hacker
|
||||
N: Marcelo Tosatti
|
||||
E: marcelo@kvack.org
|
||||
D: v2.4 kernel maintainer
|
||||
D: Current pc300/cyclades maintainer
|
||||
S: Cyclades Corporation
|
||||
S: Av Cristovao Colombo, 462. Floresta.
|
||||
S: Porto Alegre
|
||||
S: Brazil
|
||||
|
||||
N: Stefan Traby
|
||||
|
|
|
@ -1721,11 +1721,6 @@ Your cooperation is appreciated.
|
|||
These devices support the same API as the generic SCSI
|
||||
devices.
|
||||
|
||||
97 block Packet writing for CD/DVD devices
|
||||
0 = /dev/pktcdvd0 First packet-writing module
|
||||
1 = /dev/pktcdvd1 Second packet-writing module
|
||||
...
|
||||
|
||||
98 char Control and Measurement Device (comedi)
|
||||
0 = /dev/comedi0 First comedi device
|
||||
1 = /dev/comedi1 Second comedi device
|
||||
|
|
|
@ -1031,7 +1031,7 @@ conflict on any particular lock.
|
|||
LOCKS VS MEMORY ACCESSES
|
||||
------------------------
|
||||
|
||||
Consider the following: the system has a pair of spinlocks (N) and (Q), and
|
||||
Consider the following: the system has a pair of spinlocks (M) and (Q), and
|
||||
three CPUs; then should the following sequence of events occur:
|
||||
|
||||
CPU 1 CPU 2
|
||||
|
@ -1678,7 +1678,7 @@ CPU's caches by some other cache event:
|
|||
smp_wmb();
|
||||
<A:modify v=2> <C:busy>
|
||||
<C:queue v=2>
|
||||
p = &b; q = p;
|
||||
p = &v; q = p;
|
||||
<D:request p>
|
||||
<B:modify p=&v> <D:commit p=&v>
|
||||
<D:read p>
|
||||
|
|
|
@ -0,0 +1,161 @@
|
|||
|
||||
1. Introduction
|
||||
|
||||
Linux distinguishes between administrative and operational state of an
|
||||
interface. Admininstrative state is the result of "ip link set dev
|
||||
<dev> up or down" and reflects whether the administrator wants to use
|
||||
the device for traffic.
|
||||
|
||||
However, an interface is not usable just because the admin enabled it
|
||||
- ethernet requires to be plugged into the switch and, depending on
|
||||
a site's networking policy and configuration, an 802.1X authentication
|
||||
to be performed before user data can be transferred. Operational state
|
||||
shows the ability of an interface to transmit this user data.
|
||||
|
||||
Thanks to 802.1X, userspace must be granted the possibility to
|
||||
influence operational state. To accommodate this, operational state is
|
||||
split into two parts: Two flags that can be set by the driver only, and
|
||||
a RFC2863 compatible state that is derived from these flags, a policy,
|
||||
and changeable from userspace under certain rules.
|
||||
|
||||
|
||||
2. Querying from userspace
|
||||
|
||||
Both admin and operational state can be queried via the netlink
|
||||
operation RTM_GETLINK. It is also possible to subscribe to RTMGRP_LINK
|
||||
to be notified of updates. This is important for setting from userspace.
|
||||
|
||||
These values contain interface state:
|
||||
|
||||
ifinfomsg::if_flags & IFF_UP:
|
||||
Interface is admin up
|
||||
ifinfomsg::if_flags & IFF_RUNNING:
|
||||
Interface is in RFC2863 operational state UP or UNKNOWN. This is for
|
||||
backward compatibility, routing daemons, dhcp clients can use this
|
||||
flag to determine whether they should use the interface.
|
||||
ifinfomsg::if_flags & IFF_LOWER_UP:
|
||||
Driver has signaled netif_carrier_on()
|
||||
ifinfomsg::if_flags & IFF_DORMANT:
|
||||
Driver has signaled netif_dormant_on()
|
||||
|
||||
These interface flags can also be queried without netlink using the
|
||||
SIOCGIFFLAGS ioctl.
|
||||
|
||||
TLV IFLA_OPERSTATE
|
||||
|
||||
contains RFC2863 state of the interface in numeric representation:
|
||||
|
||||
IF_OPER_UNKNOWN (0):
|
||||
Interface is in unknown state, neither driver nor userspace has set
|
||||
operational state. Interface must be considered for user data as
|
||||
setting operational state has not been implemented in every driver.
|
||||
IF_OPER_NOTPRESENT (1):
|
||||
Unused in current kernel (notpresent interfaces normally disappear),
|
||||
just a numerical placeholder.
|
||||
IF_OPER_DOWN (2):
|
||||
Interface is unable to transfer data on L1, f.e. ethernet is not
|
||||
plugged or interface is ADMIN down.
|
||||
IF_OPER_LOWERLAYERDOWN (3):
|
||||
Interfaces stacked on an interface that is IF_OPER_DOWN show this
|
||||
state (f.e. VLAN).
|
||||
IF_OPER_TESTING (4):
|
||||
Unused in current kernel.
|
||||
IF_OPER_DORMANT (5):
|
||||
Interface is L1 up, but waiting for an external event, f.e. for a
|
||||
protocol to establish. (802.1X)
|
||||
IF_OPER_UP (6):
|
||||
Interface is operational up and can be used.
|
||||
|
||||
This TLV can also be queried via sysfs.
|
||||
|
||||
TLV IFLA_LINKMODE
|
||||
|
||||
contains link policy. This is needed for userspace interaction
|
||||
described below.
|
||||
|
||||
This TLV can also be queried via sysfs.
|
||||
|
||||
|
||||
3. Kernel driver API
|
||||
|
||||
Kernel drivers have access to two flags that map to IFF_LOWER_UP and
|
||||
IFF_DORMANT. These flags can be set from everywhere, even from
|
||||
interrupts. It is guaranteed that only the driver has write access,
|
||||
however, if different layers of the driver manipulate the same flag,
|
||||
the driver has to provide the synchronisation needed.
|
||||
|
||||
__LINK_STATE_NOCARRIER, maps to !IFF_LOWER_UP:
|
||||
|
||||
The driver uses netif_carrier_on() to clear and netif_carrier_off() to
|
||||
set this flag. On netif_carrier_off(), the scheduler stops sending
|
||||
packets. The name 'carrier' and the inversion are historical, think of
|
||||
it as lower layer.
|
||||
|
||||
netif_carrier_ok() can be used to query that bit.
|
||||
|
||||
__LINK_STATE_DORMANT, maps to IFF_DORMANT:
|
||||
|
||||
Set by the driver to express that the device cannot yet be used
|
||||
because some driver controlled protocol establishment has to
|
||||
complete. Corresponding functions are netif_dormant_on() to set the
|
||||
flag, netif_dormant_off() to clear it and netif_dormant() to query.
|
||||
|
||||
On device allocation, networking core sets the flags equivalent to
|
||||
netif_carrier_ok() and !netif_dormant().
|
||||
|
||||
|
||||
Whenever the driver CHANGES one of these flags, a workqueue event is
|
||||
scheduled to translate the flag combination to IFLA_OPERSTATE as
|
||||
follows:
|
||||
|
||||
!netif_carrier_ok():
|
||||
IF_OPER_LOWERLAYERDOWN if the interface is stacked, IF_OPER_DOWN
|
||||
otherwise. Kernel can recognise stacked interfaces because their
|
||||
ifindex != iflink.
|
||||
|
||||
netif_carrier_ok() && netif_dormant():
|
||||
IF_OPER_DORMANT
|
||||
|
||||
netif_carrier_ok() && !netif_dormant():
|
||||
IF_OPER_UP if userspace interaction is disabled. Otherwise
|
||||
IF_OPER_DORMANT with the possibility for userspace to initiate the
|
||||
IF_OPER_UP transition afterwards.
|
||||
|
||||
|
||||
4. Setting from userspace
|
||||
|
||||
Applications have to use the netlink interface to influence the
|
||||
RFC2863 operational state of an interface. Setting IFLA_LINKMODE to 1
|
||||
via RTM_SETLINK instructs the kernel that an interface should go to
|
||||
IF_OPER_DORMANT instead of IF_OPER_UP when the combination
|
||||
netif_carrier_ok() && !netif_dormant() is set by the
|
||||
driver. Afterwards, the userspace application can set IFLA_OPERSTATE
|
||||
to IF_OPER_DORMANT or IF_OPER_UP as long as the driver does not set
|
||||
netif_carrier_off() or netif_dormant_on(). Changes made by userspace
|
||||
are multicasted on the netlink group RTMGRP_LINK.
|
||||
|
||||
So basically a 802.1X supplicant interacts with the kernel like this:
|
||||
|
||||
-subscribe to RTMGRP_LINK
|
||||
-set IFLA_LINKMODE to 1 via RTM_SETLINK
|
||||
-query RTM_GETLINK once to get initial state
|
||||
-if initial flags are not (IFF_LOWER_UP && !IFF_DORMANT), wait until
|
||||
netlink multicast signals this state
|
||||
-do 802.1X, eventually abort if flags go down again
|
||||
-send RTM_SETLINK to set operstate to IF_OPER_UP if authentication
|
||||
succeeds, IF_OPER_DORMANT otherwise
|
||||
-see how operstate and IFF_RUNNING is echoed via netlink multicast
|
||||
-set interface back to IF_OPER_DORMANT if 802.1X reauthentication
|
||||
fails
|
||||
-restart if kernel changes IFF_LOWER_UP or IFF_DORMANT flag
|
||||
|
||||
if supplicant goes down, bring back IFLA_LINKMODE to 0 and
|
||||
IFLA_OPERSTATE to a sane value.
|
||||
|
||||
A routing daemon or dhcp client just needs to care for IFF_RUNNING or
|
||||
waiting for operstate to go IF_OPER_UP/IF_OPER_UNKNOWN before
|
||||
considering the interface / querying a DHCP address.
|
||||
|
||||
|
||||
For technical questions and/or comments please e-mail to Stefan Rompf
|
||||
(stefan at loplof.de).
|
|
@ -1,3 +1,28 @@
|
|||
Release Date : Mon Apr 11 12:27:22 EST 2006 - Seokmann Ju <sju@lsil.com>
|
||||
Current Version : 2.20.4.8 (scsi module), 2.20.2.6 (cmm module)
|
||||
Older Version : 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)
|
||||
|
||||
1. Fixed a bug in megaraid_reset_handler().
|
||||
Customer reported "Unable to handle kernel NULL pointer dereference
|
||||
at virtual address 00000000" when system goes to reset condition
|
||||
for some reason. It happened randomly.
|
||||
Root Cause: in the megaraid_reset_handler(), there is possibility not
|
||||
returning pending packets in the pend_list if there are multiple
|
||||
pending packets.
|
||||
Fix: Made the change in the driver so that it will return all packets
|
||||
in the pend_list.
|
||||
|
||||
2. Added change request.
|
||||
As found in the following URL, rmb() only didn't help the
|
||||
problem. I had to increase the loop counter to 0xFFFFFF. (6 F's)
|
||||
http://marc.theaimsgroup.com/?l=linux-scsi&m=110971060502497&w=2
|
||||
|
||||
I attached a patch for your reference, too.
|
||||
Could you check and get this fix in your driver?
|
||||
|
||||
Best Regards,
|
||||
Jun'ichi Nomura
|
||||
|
||||
Release Date : Fri Nov 11 12:27:22 EST 2005 - Seokmann Ju <sju@lsil.com>
|
||||
Current Version : 2.20.4.7 (scsi module), 2.20.2.6 (cmm module)
|
||||
Older Version : 2.20.4.6 (scsi module), 2.20.2.6 (cmm module)
|
||||
|
|
12
MAINTAINERS
12
MAINTAINERS
|
@ -1480,10 +1480,11 @@ L: netdev@vger.kernel.org
|
|||
S: Maintained
|
||||
|
||||
IRDA SUBSYSTEM
|
||||
P: Jean Tourrilhes
|
||||
P: Samuel Ortiz
|
||||
M: samuel@sortiz.org
|
||||
L: irda-users@lists.sourceforge.net (subscribers-only)
|
||||
W: http://irda.sourceforge.net/
|
||||
S: Odd Fixes
|
||||
S: Maintained
|
||||
|
||||
ISAPNP
|
||||
P: Jaroslav Kysela
|
||||
|
@ -1602,6 +1603,11 @@ M: James.Bottomley@HansenPartnership.com
|
|||
L: linux-scsi@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
LED SUBSYSTEM
|
||||
P: Richard Purdie
|
||||
M: rpurdie@rpsys.net
|
||||
S: Maintained
|
||||
|
||||
LEGO USB Tower driver
|
||||
P: Juergen Stuber
|
||||
M: starblue@users.sourceforge.net
|
||||
|
@ -1661,7 +1667,7 @@ S: Maintained
|
|||
|
||||
LINUX FOR POWERPC EMBEDDED PPC8XX
|
||||
P: Marcelo Tosatti
|
||||
M: marcelo.tosatti@cyclades.com
|
||||
M: marcelo@kvack.org
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-embedded@ozlabs.org
|
||||
S: Maintained
|
||||
|
|
22
Makefile
22
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 17
|
||||
EXTRAVERSION =-rc3
|
||||
EXTRAVERSION =-rc4
|
||||
NAME=Sliding Snow Leopard
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
@ -344,16 +344,14 @@ scripts_basic:
|
|||
scripts/basic/%: scripts_basic ;
|
||||
|
||||
PHONY += outputmakefile
|
||||
# outputmakefile generate a Makefile to be placed in output directory, if
|
||||
# using a seperate output directory. This allows convinient use
|
||||
# of make in output directory
|
||||
# outputmakefile generates a Makefile in the output directory, if using a
|
||||
# separate output directory. This allows convenient use of make in the
|
||||
# output directory.
|
||||
outputmakefile:
|
||||
$(Q)if test ! $(srctree) -ef $(objtree); then \
|
||||
$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
|
||||
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL) \
|
||||
> $(objtree)/Makefile; \
|
||||
echo ' GEN $(objtree)/Makefile'; \
|
||||
fi
|
||||
ifneq ($(KBUILD_SRC),)
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkmakefile \
|
||||
$(srctree) $(objtree) $(VERSION) $(PATCHLEVEL)
|
||||
endif
|
||||
|
||||
# To make sure we do not include .config for any of the *config targets
|
||||
# catch them early, and hand them over to scripts/kconfig/Makefile
|
||||
|
@ -796,8 +794,8 @@ prepare2: prepare3 outputmakefile
|
|||
prepare1: prepare2 include/linux/version.h include/asm \
|
||||
include/config/MARKER
|
||||
ifneq ($(KBUILD_MODULES),)
|
||||
$(Q)rm -rf $(MODVERDIR)
|
||||
$(Q)mkdir -p $(MODVERDIR)
|
||||
$(Q)rm -f $(MODVERDIR)/*
|
||||
endif
|
||||
|
||||
archprepare: prepare1 scripts_basic
|
||||
|
@ -1086,8 +1084,8 @@ else # KBUILD_EXTMOD
|
|||
KBUILD_MODULES := 1
|
||||
PHONY += crmodverdir
|
||||
crmodverdir:
|
||||
$(Q)rm -rf $(MODVERDIR)
|
||||
$(Q)mkdir -p $(MODVERDIR)
|
||||
$(Q)rm -f $(MODVERDIR)/*
|
||||
|
||||
PHONY += $(objtree)/Module.symvers
|
||||
$(objtree)/Module.symvers:
|
||||
|
|
|
@ -150,8 +150,6 @@ config ARCH_IOP3XX
|
|||
|
||||
config ARCH_IXP4XX
|
||||
bool "IXP4xx-based"
|
||||
select DMABOUNCE
|
||||
select PCI
|
||||
help
|
||||
Support for Intel's IXP4XX (XScale) family of processors.
|
||||
|
||||
|
|
|
@ -38,10 +38,10 @@ static void icedcc_putc(int ch)
|
|||
if (--i < 0)
|
||||
return;
|
||||
|
||||
asm("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));
|
||||
asm volatile ("mrc p14, 0, %0, c0, c0, 0" : "=r" (status));
|
||||
} while (status & 2);
|
||||
|
||||
asm("mcr p15, 0, %0, c1, c0, 0" : : "r" (ch));
|
||||
asm("mcr p14, 0, %0, c1, c0, 0" : : "r" (ch));
|
||||
}
|
||||
|
||||
#define putc(ch) icedcc_putc(ch)
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc3
|
||||
# Sun Oct 9 16:55:14 2005
|
||||
# Linux kernel version: 2.6.17-rc1
|
||||
# Fri Apr 14 19:09:52 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ARCH_MTD_XIP=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
|
@ -23,45 +23,58 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
|||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
CONFIG_SWAP=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
# CONFIG_BSD_PROCESS_ACCT_V3 is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_BASE_FULL is not set
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_DOUBLEFAULT=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
CONFIG_BASE_SMALL=1
|
||||
CONFIG_SLOB=y
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
# CONFIG_MODULES is not set
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
CONFIG_DEFAULT_AS=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
|
||||
#
|
||||
# System Type
|
||||
|
@ -70,11 +83,13 @@ CONFIG_KMOD=y
|
|||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -84,9 +99,11 @@ CONFIG_ARCH_SA1100=y
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
|
||||
#
|
||||
# SA11x0 Implementations
|
||||
|
@ -128,20 +145,32 @@ CONFIG_SHARP_SCOOP=y
|
|||
# Bus support
|
||||
#
|
||||
CONFIG_ISA=y
|
||||
CONFIG_ISA_DMA_API=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
CONFIG_PCCARD=y
|
||||
CONFIG_PCMCIA_DEBUG=y
|
||||
CONFIG_PCMCIA=y
|
||||
CONFIG_PCMCIA_LOAD_CIS=y
|
||||
CONFIG_PCMCIA_IOCTL=y
|
||||
|
||||
#
|
||||
# PC-card bridges
|
||||
#
|
||||
# CONFIG_I82365 is not set
|
||||
# CONFIG_TCIC is not set
|
||||
CONFIG_PCMCIA_SA1100=y
|
||||
|
||||
#
|
||||
# Kernel Features
|
||||
#
|
||||
# CONFIG_SMP is not set
|
||||
CONFIG_PREEMPT=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_NO_IDLE_HZ is not set
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_AEABI is not set
|
||||
CONFIG_ARCH_DISCONTIGMEM_ENABLE=y
|
||||
CONFIG_NODES_SHIFT=2
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
# CONFIG_FLATMEM_MANUAL is not set
|
||||
CONFIG_DISCONTIGMEM_MANUAL=y
|
||||
|
@ -150,6 +179,7 @@ CONFIG_DISCONTIGMEM=y
|
|||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
CONFIG_NEED_MULTIPLE_NODES=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
# CONFIG_LEDS is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
|
@ -158,7 +188,7 @@ CONFIG_ALIGNMENT_TRAP=y
|
|||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyS0,115200n8 console=tty1 noinitrd root=/dev/mtdblock2 rootfstype=jffs2 debug"
|
||||
CONFIG_CMDLINE="noinitrd root=/dev/mtdblock2 rootfstype=jffs2 fbcon=rotate:1"
|
||||
# CONFIG_XIP_KERNEL is not set
|
||||
|
||||
#
|
||||
|
@ -181,14 +211,16 @@ CONFIG_FPE_NWFPE=y
|
|||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
CONFIG_BINFMT_AOUT=m
|
||||
CONFIG_BINFMT_MISC=m
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
# CONFIG_ARTHUR is not set
|
||||
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_LEGACY=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
CONFIG_APM=y
|
||||
|
||||
#
|
||||
|
@ -199,6 +231,7 @@ CONFIG_NET=y
|
|||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
|
@ -211,16 +244,19 @@ CONFIG_IP_FIB_HASH=y
|
|||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
CONFIG_SYN_COOKIES=y
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
CONFIG_INET_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
|
@ -232,6 +268,11 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
|
@ -244,8 +285,11 @@ CONFIG_TCP_CONG_BIC=y
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
|
@ -265,9 +309,14 @@ CONFIG_TCP_CONG_BIC=y
|
|||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
CONFIG_FW_LOADER=m
|
||||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -287,32 +336,49 @@ CONFIG_MTD_BLOCK=y
|
|||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
# CONFIG_MTD_CFI is not set
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_JEDECPROBE=y
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
CONFIG_MTD_CFI_ADV_OPTIONS=y
|
||||
CONFIG_MTD_CFI_NOSWAP=y
|
||||
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
|
||||
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
|
||||
CONFIG_MTD_CFI_GEOMETRY=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||
CONFIG_MTD_CFI_I1=y
|
||||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I1 is not set
|
||||
# CONFIG_MTD_CFI_I2 is not set
|
||||
CONFIG_MTD_CFI_I4=y
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_OTP is not set
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
CONFIG_MTD_OBSOLETE_CHIPS=y
|
||||
CONFIG_MTD_SHARP=y
|
||||
# CONFIG_MTD_XIP is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
# CONFIG_MTD_ARM_INTEGRATOR is not set
|
||||
CONFIG_MTD_SA1100=y
|
||||
# CONFIG_MTD_IMPA7 is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
|
@ -321,7 +387,6 @@ CONFIG_MTD_SHARP=y
|
|||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLKMTD is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
|
@ -336,6 +401,11 @@ CONFIG_MTD_SHARP=y
|
|||
#
|
||||
# CONFIG_MTD_NAND is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
|
@ -349,7 +419,6 @@ CONFIG_MTD_SHARP=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
|
@ -359,20 +428,35 @@ CONFIG_BLK_DEV_RAM_COUNT=16
|
|||
CONFIG_BLK_DEV_RAM_SIZE=1024
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_ATA_OVER_ETH=m
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
# CONFIG_IDE is not set
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||
#
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
CONFIG_BLK_DEV_IDEDISK=y
|
||||
CONFIG_IDEDISK_MULTI_MODE=y
|
||||
CONFIG_BLK_DEV_IDECS=y
|
||||
# CONFIG_BLK_DEV_IDECD is not set
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||
# CONFIG_IDE_TASK_IOCTL is not set
|
||||
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
CONFIG_IDE_GENERIC=y
|
||||
# CONFIG_IDE_ARM is not set
|
||||
# CONFIG_IDE_CHIPSETS is not set
|
||||
# CONFIG_BLK_DEV_IDEDMA is not set
|
||||
# CONFIG_IDEDMA_AUTO is not set
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
|
@ -402,6 +486,39 @@ CONFIG_ATA_OVER_ETH=m
|
|||
# Network device support
|
||||
#
|
||||
# CONFIG_NETDEVICES is not set
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
# CONFIG_NET_ETHERNET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
#
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
CONFIG_PPP=y
|
||||
# CONFIG_PPP_MULTILINK is not set
|
||||
# CONFIG_PPP_FILTER is not set
|
||||
CONFIG_PPP_ASYNC=y
|
||||
# CONFIG_PPP_SYNC_TTY is not set
|
||||
# CONFIG_PPP_DEFLATE is not set
|
||||
# CONFIG_PPP_BSDCOMP is not set
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
# CONFIG_PPPOE is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
|
@ -424,7 +541,7 @@ CONFIG_INPUT_TSDEV=y
|
|||
CONFIG_INPUT_TSDEV_SCREEN_X=240
|
||||
CONFIG_INPUT_TSDEV_SCREEN_Y=320
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_EVBUG=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
|
@ -438,7 +555,11 @@ CONFIG_KEYBOARD_LOCOMO=y
|
|||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
|
@ -461,7 +582,16 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
# Serial drivers
|
||||
#
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
CONFIG_SERIAL_8250=y
|
||||
# CONFIG_SERIAL_8250_CONSOLE is not set
|
||||
CONFIG_SERIAL_8250_CS=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
# CONFIG_SERIAL_8250_MANY_PORTS is not set
|
||||
# CONFIG_SERIAL_8250_SHARE_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
# CONFIG_SERIAL_8250_RSA is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
|
@ -483,94 +613,48 @@ CONFIG_UNIX98_PTYS=y
|
|||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
|
||||
#
|
||||
# PCMCIA character devices
|
||||
#
|
||||
# CONFIG_SYNCLINK_CS is not set
|
||||
# CONFIG_CARDMAN_4000 is not set
|
||||
# CONFIG_CARDMAN_4040 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
CONFIG_I2C=m
|
||||
# CONFIG_I2C_CHARDEV is not set
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# I2C Algorithms
|
||||
# SPI support
|
||||
#
|
||||
CONFIG_I2C_ALGOBIT=m
|
||||
# CONFIG_I2C_ALGOPCF is not set
|
||||
# CONFIG_I2C_ALGOPCA is not set
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# I2C Hardware Bus support
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_I2C_ELEKTOR is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
|
||||
#
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_DS1374 is not set
|
||||
# CONFIG_SENSORS_EEPROM is not set
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ADM9240 is not set
|
||||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_ATXP1 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
# CONFIG_SENSORS_LM77 is not set
|
||||
# CONFIG_SENSORS_LM78 is not set
|
||||
# CONFIG_SENSORS_LM80 is not set
|
||||
# CONFIG_SENSORS_LM83 is not set
|
||||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_LM92 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83792D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
|
@ -579,42 +663,33 @@ CONFIG_HWMON=y
|
|||
#
|
||||
# Multimedia Capabilities Port drivers
|
||||
#
|
||||
# CONFIG_MCP_SA11X0 is not set
|
||||
CONFIG_MCP=y
|
||||
CONFIG_MCP_SA11X0=y
|
||||
CONFIG_MCP_UCB1200=y
|
||||
CONFIG_MCP_UCB1200_TS=y
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
CONFIG_LEDS_LOCOMO=y
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
CONFIG_LEDS_TRIGGERS=y
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_IDE_DISK=y
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
CONFIG_VIDEO_DEV=m
|
||||
|
||||
#
|
||||
# Video For Linux
|
||||
#
|
||||
|
||||
#
|
||||
# Video Adapters
|
||||
#
|
||||
# CONFIG_VIDEO_PMS is not set
|
||||
# CONFIG_VIDEO_CPIA is not set
|
||||
# CONFIG_VIDEO_SAA5246A is not set
|
||||
# CONFIG_VIDEO_SAA5249 is not set
|
||||
# CONFIG_TUNER_3036 is not set
|
||||
# CONFIG_VIDEO_OVCAMCHIP is not set
|
||||
|
||||
#
|
||||
# Radio Adapters
|
||||
#
|
||||
# CONFIG_RADIO_CADET is not set
|
||||
# CONFIG_RADIO_RTRACK is not set
|
||||
# CONFIG_RADIO_RTRACK2 is not set
|
||||
# CONFIG_RADIO_AZTECH is not set
|
||||
# CONFIG_RADIO_GEMTEK is not set
|
||||
# CONFIG_RADIO_MAESTRO is not set
|
||||
# CONFIG_RADIO_SF16FMI is not set
|
||||
# CONFIG_RADIO_SF16FMR2 is not set
|
||||
# CONFIG_RADIO_TERRATEC is not set
|
||||
# CONFIG_RADIO_TRUST is not set
|
||||
# CONFIG_RADIO_TYPHOON is not set
|
||||
# CONFIG_RADIO_ZOLTRIX is not set
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
|
@ -628,8 +703,8 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_FIRMWARE_EDID is not set
|
||||
CONFIG_FB_MODE_HELPERS=y
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
CONFIG_FB_SA1100=y
|
||||
|
@ -643,14 +718,15 @@ CONFIG_FB_SA1100=y
|
|||
# CONFIG_MDA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
# CONFIG_FONT_8x8 is not set
|
||||
# CONFIG_FONT_8x16 is not set
|
||||
# CONFIG_FONT_6x11 is not set
|
||||
# CONFIG_FONT_7x14 is not set
|
||||
# CONFIG_FONT_PEARL_8x8 is not set
|
||||
# CONFIG_FONT_ACORN_8x8 is not set
|
||||
# CONFIG_FONT_MINI_4x6 is not set
|
||||
CONFIG_FONT_MINI_4x6=y
|
||||
# CONFIG_FONT_SUN8x16 is not set
|
||||
# CONFIG_FONT_SUN12x22 is not set
|
||||
# CONFIG_FONT_10x18 is not set
|
||||
|
@ -659,7 +735,11 @@ CONFIG_FONT_8x8=y
|
|||
# Logo configuration
|
||||
#
|
||||
# CONFIG_LOGO is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
CONFIG_BACKLIGHT_DEVICE=y
|
||||
CONFIG_LCD_CLASS_DEVICE=y
|
||||
CONFIG_LCD_DEVICE=y
|
||||
|
||||
#
|
||||
# Sound
|
||||
|
@ -671,44 +751,42 @@ CONFIG_FONT_8x8=y
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
CONFIG_USB_GADGET=y
|
||||
# CONFIG_USB_GADGET_DEBUG_FILES is not set
|
||||
# CONFIG_USB_GADGET_NET2280 is not set
|
||||
# CONFIG_USB_GADGET_PXA2XX is not set
|
||||
# CONFIG_USB_GADGET_GOKU is not set
|
||||
# CONFIG_USB_GADGET_LH7A40X is not set
|
||||
# CONFIG_USB_GADGET_OMAP is not set
|
||||
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
||||
# CONFIG_USB_GADGET_DUALSPEED is not set
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# MMC/SD Card support
|
||||
#
|
||||
# CONFIG_MMC is not set
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT2_FS_POSIX_ACL=y
|
||||
CONFIG_EXT2_FS_SECURITY=y
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
# CONFIG_EXT2_FS is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_JBD is not set
|
||||
CONFIG_FS_MBCACHE=y
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
# CONFIG_INOTIFY is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
|
@ -725,7 +803,7 @@ CONFIG_INOTIFY=y
|
|||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
CONFIG_FAT_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
|
@ -739,7 +817,7 @@ CONFIG_SYSFS=y
|
|||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_RELAYFS_FS is not set
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -755,11 +833,12 @@ CONFIG_RAMFS=y
|
|||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
|
@ -789,7 +868,7 @@ CONFIG_MSDOS_PARTITION=y
|
|||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="cp437"
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
|
@ -813,7 +892,7 @@ CONFIG_NLS_CODEPAGE_437=m
|
|||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
CONFIG_NLS_ISO8859_1=m
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
|
@ -826,7 +905,7 @@ CONFIG_NLS_ISO8859_1=m
|
|||
# CONFIG_NLS_ISO8859_15 is not set
|
||||
# CONFIG_NLS_KOI8_R is not set
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
CONFIG_NLS_UTF8=m
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
|
@ -837,20 +916,23 @@ CONFIG_NLS_UTF8=m
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_DETECT_SOFTLOCKUP is not set
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
CONFIG_DEBUG_PREEMPT=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
# CONFIG_DEBUG_BUGVERBOSE is not set
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
|
@ -874,7 +956,7 @@ CONFIG_DEBUG_ERRORS=y
|
|||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC_CCITT=y
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
|
|
|
@ -1,50 +1,55 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.12-rc1-bk2
|
||||
# Mon Mar 28 00:20:50 2005
|
||||
# Linux kernel version: 2.6.17-rc3
|
||||
# Mon May 8 20:15:57 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_UID16=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_GENERIC_IOMAP=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_KOBJECT_UEVENT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_UID16=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_CC_ALIGN_FUNCTIONS=0
|
||||
CONFIG_CC_ALIGN_LABELS=0
|
||||
CONFIG_CC_ALIGN_LOOPS=0
|
||||
CONFIG_CC_ALIGN_JUMPS=0
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
CONFIG_OBSOLETE_INTERMODULE=y
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
|
@ -52,11 +57,28 @@ CONFIG_BASE_SMALL=0
|
|||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_DEFAULT_AS=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
|
||||
#
|
||||
# System Type
|
||||
#
|
||||
|
@ -64,11 +86,13 @@ CONFIG_KMOD=y
|
|||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_CO285 is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_IOP3XX is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
|
@ -78,14 +102,17 @@ CONFIG_KMOD=y
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
CONFIG_ARCH_VERSATILE=y
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_AT91RM9200 is not set
|
||||
|
||||
#
|
||||
# Versatile platform type
|
||||
#
|
||||
CONFIG_ARCH_VERSATILE_PB=y
|
||||
# CONFIG_MACH_VERSATILE_AB is not set
|
||||
CONFIG_MACH_VERSATILE_AB=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
|
@ -106,12 +133,14 @@ CONFIG_ARM_THUMB=y
|
|||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
|
||||
CONFIG_ARM_VIC=y
|
||||
CONFIG_ICST307=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
#
|
||||
CONFIG_ARM_AMBA=y
|
||||
# CONFIG_PCI is not set
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
|
@ -122,6 +151,18 @@ CONFIG_ARM_AMBA=y
|
|||
# Kernel Features
|
||||
#
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_NO_IDLE_HZ is not set
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_AEABI is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_LEDS=y
|
||||
CONFIG_LEDS_TIMER=y
|
||||
CONFIG_LEDS_CPU=y
|
||||
|
@ -145,7 +186,7 @@ CONFIG_CMDLINE="root=1f03 mem=32M"
|
|||
CONFIG_FPE_NWFPE=y
|
||||
# CONFIG_FPE_NWFPE_XP is not set
|
||||
# CONFIG_FPE_FASTFPE is not set
|
||||
# CONFIG_VFP is not set
|
||||
CONFIG_VFP=y
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
|
@ -159,8 +200,91 @@ CONFIG_BINFMT_ELF=y
|
|||
# Power management options
|
||||
#
|
||||
CONFIG_PM=y
|
||||
CONFIG_PM_LEGACY=y
|
||||
# CONFIG_PM_DEBUG is not set
|
||||
# CONFIG_APM is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_FIB_HASH=y
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
# CONFIG_INET_DIAG is not set
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
@ -173,6 +297,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -192,6 +321,7 @@ CONFIG_MTD_BLOCK=y
|
|||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
|
@ -214,6 +344,7 @@ CONFIG_MTD_CFI_I1=y
|
|||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_OTP is not set
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
# CONFIG_MTD_CFI_AMDSTD is not set
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
|
@ -221,7 +352,7 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
# CONFIG_MTD_XIP is not set
|
||||
# CONFIG_MTD_OBSOLETE_CHIPS is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
|
@ -229,7 +360,7 @@ CONFIG_MTD_CFI_UTIL=y
|
|||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
CONFIG_MTD_ARM_INTEGRATOR=y
|
||||
# CONFIG_MTD_EDB7312 is not set
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
|
@ -237,7 +368,6 @@ CONFIG_MTD_ARM_INTEGRATOR=y
|
|||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLKMTD is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
|
@ -252,6 +382,11 @@ CONFIG_MTD_ARM_INTEGRATOR=y
|
|||
#
|
||||
# CONFIG_MTD_NAND is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
|
@ -264,7 +399,6 @@ CONFIG_MTD_ARM_INTEGRATOR=y
|
|||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_FD is not set
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
|
@ -272,21 +406,13 @@ CONFIG_BLK_DEV_RAM=y
|
|||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
|
||||
#
|
||||
|
@ -297,6 +423,7 @@ CONFIG_IOSCHED_CFQ=y
|
|||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
|
@ -307,83 +434,26 @@ CONFIG_IOSCHED_CFQ=y
|
|||
#
|
||||
|
||||
#
|
||||
# Networking support
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_PACKET_MMAP=y
|
||||
# CONFIG_NETLINK_DEV is not set
|
||||
CONFIG_UNIX=y
|
||||
# CONFIG_NET_KEY is not set
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
CONFIG_IP_PNP=y
|
||||
# CONFIG_IP_PNP_DHCP is not set
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
# CONFIG_IP_PNP_RARP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
# CONFIG_INET_AH is not set
|
||||
# CONFIG_INET_ESP is not set
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
# CONFIG_IP_TCPDIAG is not set
|
||||
# CONFIG_IP_TCPDIAG_IPV6 is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
|
@ -410,6 +480,8 @@ CONFIG_SMC91X=y
|
|||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
|
@ -459,7 +531,6 @@ CONFIG_SERIO_AMBAKMI=y
|
|||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
|
||||
#
|
||||
# Character devices
|
||||
|
@ -474,17 +545,16 @@ CONFIG_HW_CONSOLE=y
|
|||
#
|
||||
CONFIG_SERIAL_8250=m
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
|
||||
CONFIG_SERIAL_8250_EXTENDED=y
|
||||
CONFIG_SERIAL_8250_MANY_PORTS=y
|
||||
CONFIG_SERIAL_8250_SHARE_IRQ=y
|
||||
# CONFIG_SERIAL_8250_DETECT_IRQ is not set
|
||||
CONFIG_SERIAL_8250_MULTIPORT=y
|
||||
CONFIG_SERIAL_8250_RSA=y
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_AMBA_PL010 is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
|
@ -503,20 +573,19 @@ CONFIG_LEGACY_PTY_COUNT=16
|
|||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_RTC is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -534,59 +603,59 @@ CONFIG_I2C_ALGOBIT=y
|
|||
#
|
||||
# I2C Hardware Bus support
|
||||
#
|
||||
# CONFIG_I2C_ISA is not set
|
||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||
# CONFIG_I2C_STUB is not set
|
||||
# CONFIG_I2C_PCA_ISA is not set
|
||||
|
||||
#
|
||||
# Hardware Sensors Chip support
|
||||
#
|
||||
CONFIG_I2C_SENSOR=m
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
# CONFIG_SENSORS_ADM1025 is not set
|
||||
# CONFIG_SENSORS_ADM1026 is not set
|
||||
# CONFIG_SENSORS_ADM1031 is not set
|
||||
# CONFIG_SENSORS_ASB100 is not set
|
||||
# CONFIG_SENSORS_DS1621 is not set
|
||||
# CONFIG_SENSORS_FSCHER is not set
|
||||
# CONFIG_SENSORS_FSCPOS is not set
|
||||
# CONFIG_SENSORS_GL518SM is not set
|
||||
# CONFIG_SENSORS_GL520SM is not set
|
||||
# CONFIG_SENSORS_IT87 is not set
|
||||
# CONFIG_SENSORS_LM63 is not set
|
||||
# CONFIG_SENSORS_LM75 is not set
|
||||
# CONFIG_SENSORS_LM77 is not set
|
||||
# CONFIG_SENSORS_LM78 is not set
|
||||
# CONFIG_SENSORS_LM80 is not set
|
||||
# CONFIG_SENSORS_LM83 is not set
|
||||
# CONFIG_SENSORS_LM85 is not set
|
||||
# CONFIG_SENSORS_LM87 is not set
|
||||
# CONFIG_SENSORS_LM90 is not set
|
||||
# CONFIG_SENSORS_MAX1619 is not set
|
||||
# CONFIG_SENSORS_PC87360 is not set
|
||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||
# CONFIG_SENSORS_SMSC47M1 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83L785TS is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
|
||||
#
|
||||
# Other I2C Chip support
|
||||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_SENSORS_DS1337 is not set
|
||||
# CONFIG_SENSORS_DS1374 is not set
|
||||
CONFIG_SENSORS_EEPROM=m
|
||||
# CONFIG_SENSORS_PCF8574 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
@ -604,27 +673,31 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_FONTS=y
|
||||
# CONFIG_FONT_8x8 is not set
|
||||
# CONFIG_FONT_8x16 is not set
|
||||
# CONFIG_FONT_6x11 is not set
|
||||
# CONFIG_FONT_7x14 is not set
|
||||
# CONFIG_FONT_PEARL_8x8 is not set
|
||||
CONFIG_FONT_ACORN_8x8=y
|
||||
# CONFIG_FONT_MINI_4x6 is not set
|
||||
# CONFIG_FONT_SUN8x16 is not set
|
||||
# CONFIG_FONT_SUN12x22 is not set
|
||||
# CONFIG_FONT_10x18 is not set
|
||||
|
||||
#
|
||||
# Logo configuration
|
||||
|
@ -647,12 +720,18 @@ CONFIG_SND_PCM=m
|
|||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=m
|
||||
CONFIG_SND_PCM_OSS=m
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_AC97_CODEC=m
|
||||
CONFIG_SND_AC97_BUS=m
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
|
@ -661,6 +740,7 @@ CONFIG_SND_PCM_OSS=m
|
|||
#
|
||||
# ALSA ARM devices
|
||||
#
|
||||
CONFIG_SND_ARMAACI=m
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
|
@ -672,8 +752,13 @@ CONFIG_SND_PCM_OSS=m
|
|||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
|
@ -687,26 +772,32 @@ CONFIG_MMC=y
|
|||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_ARMMMCI=m
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_JBD is not set
|
||||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
|
||||
#
|
||||
# XFS support
|
||||
#
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
CONFIG_MINIX_FS=y
|
||||
CONFIG_ROMFS_FS=y
|
||||
# CONFIG_INOTIFY is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
|
@ -729,11 +820,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
|||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
# CONFIG_TMPFS is not set
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
# CONFIG_CONFIGFS_FS is not set
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
|
@ -748,8 +838,8 @@ CONFIG_RAMFS=y
|
|||
# CONFIG_JFFS_FS is not set
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
# CONFIG_JFFS2_FS_NAND is not set
|
||||
# CONFIG_JFFS2_FS_NOR_ECC is not set
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -766,16 +856,19 @@ CONFIG_CRAMFS=y
|
|||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
CONFIG_NFSD=y
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V3_ACL is not set
|
||||
# CONFIG_NFSD_V4 is not set
|
||||
# CONFIG_NFSD_TCP is not set
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
|
@ -784,6 +877,7 @@ CONFIG_SUNRPC=y
|
|||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
|
@ -803,6 +897,7 @@ CONFIG_MSDOS_PARTITION=y
|
|||
# CONFIG_SGI_PARTITION is not set
|
||||
# CONFIG_ULTRIX_PARTITION is not set
|
||||
# CONFIG_SUN_PARTITION is not set
|
||||
# CONFIG_KARMA_PARTITION is not set
|
||||
# CONFIG_EFI_PARTITION is not set
|
||||
|
||||
#
|
||||
|
@ -858,18 +953,24 @@ CONFIG_NLS_ISO8859_1=m
|
|||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
|
@ -895,6 +996,7 @@ CONFIG_DEBUG_LL=y
|
|||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
|
|
|
@ -95,5 +95,11 @@ int main(void)
|
|||
DEFINE(SYS_ERROR0, 0x9f0000);
|
||||
BLANK();
|
||||
DEFINE(SIZEOF_MACHINE_DESC, sizeof(struct machine_desc));
|
||||
DEFINE(MACHINFO_TYPE, offsetof(struct machine_desc, nr));
|
||||
DEFINE(MACHINFO_NAME, offsetof(struct machine_desc, name));
|
||||
DEFINE(MACHINFO_PHYSIO, offsetof(struct machine_desc, phys_io));
|
||||
DEFINE(MACHINFO_PGOFFIO, offsetof(struct machine_desc, io_pg_offst));
|
||||
DEFINE(PROCINFO_INITFUNC, offsetof(struct proc_info_list, __cpu_flush));
|
||||
DEFINE(PROCINFO_MMUFLAGS, offsetof(struct proc_info_list, __cpu_mmu_flags));
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -20,12 +20,10 @@
|
|||
#include <asm/mach-types.h>
|
||||
#include <asm/procinfo.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#define PROCINFO_INITFUNC 12
|
||||
#define MACHINFO_TYPE 0
|
||||
|
||||
/*
|
||||
* Kernel startup entry point.
|
||||
* ---------------------------
|
||||
|
|
|
@ -24,14 +24,6 @@
|
|||
#include <asm/thread_info.h>
|
||||
#include <asm/system.h>
|
||||
|
||||
#define PROCINFO_MMUFLAGS 8
|
||||
#define PROCINFO_INITFUNC 12
|
||||
|
||||
#define MACHINFO_TYPE 0
|
||||
#define MACHINFO_PHYSIO 4
|
||||
#define MACHINFO_PGOFFIO 8
|
||||
#define MACHINFO_NAME 12
|
||||
|
||||
#define KERNEL_RAM_ADDR (PAGE_OFFSET + TEXT_OFFSET)
|
||||
|
||||
/*
|
||||
|
|
|
@ -264,8 +264,12 @@ void show_fpregs(struct user_fp *regs)
|
|||
/*
|
||||
* Task structure and kernel stack allocation.
|
||||
*/
|
||||
static unsigned long *thread_info_head;
|
||||
static unsigned int nr_thread_info;
|
||||
struct thread_info_list {
|
||||
unsigned long *head;
|
||||
unsigned int nr;
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU(struct thread_info_list, thread_info_list) = { NULL, 0 };
|
||||
|
||||
#define EXTRA_TASK_STRUCT 4
|
||||
|
||||
|
@ -274,12 +278,15 @@ struct thread_info *alloc_thread_info(struct task_struct *task)
|
|||
struct thread_info *thread = NULL;
|
||||
|
||||
if (EXTRA_TASK_STRUCT) {
|
||||
unsigned long *p = thread_info_head;
|
||||
struct thread_info_list *th = &get_cpu_var(thread_info_list);
|
||||
unsigned long *p = th->head;
|
||||
|
||||
if (p) {
|
||||
thread_info_head = (unsigned long *)p[0];
|
||||
nr_thread_info -= 1;
|
||||
th->head = (unsigned long *)p[0];
|
||||
th->nr -= 1;
|
||||
}
|
||||
put_cpu_var(thread_info_list);
|
||||
|
||||
thread = (struct thread_info *)p;
|
||||
}
|
||||
|
||||
|
@ -300,13 +307,19 @@ struct thread_info *alloc_thread_info(struct task_struct *task)
|
|||
|
||||
void free_thread_info(struct thread_info *thread)
|
||||
{
|
||||
if (EXTRA_TASK_STRUCT && nr_thread_info < EXTRA_TASK_STRUCT) {
|
||||
unsigned long *p = (unsigned long *)thread;
|
||||
p[0] = (unsigned long)thread_info_head;
|
||||
thread_info_head = p;
|
||||
nr_thread_info += 1;
|
||||
} else
|
||||
free_pages((unsigned long)thread, THREAD_SIZE_ORDER);
|
||||
if (EXTRA_TASK_STRUCT) {
|
||||
struct thread_info_list *th = &get_cpu_var(thread_info_list);
|
||||
if (th->nr < EXTRA_TASK_STRUCT) {
|
||||
unsigned long *p = (unsigned long *)thread;
|
||||
p[0] = th->head;
|
||||
th->head = p;
|
||||
th->nr += 1;
|
||||
put_cpu_var(thread_info_list);
|
||||
return;
|
||||
}
|
||||
put_cpu_var(thread_info_list);
|
||||
}
|
||||
free_pages((unsigned long)thread, THREAD_SIZE_ORDER);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -79,7 +79,12 @@ static void __init aaed2000_init(void)
|
|||
}
|
||||
|
||||
static struct map_desc aaed2000_io_desc[] __initdata = {
|
||||
{ EXT_GPIO_VBASE, EXT_GPIO_PBASE, EXT_GPIO_LENGTH, MT_DEVICE }, /* Ext GPIO */
|
||||
{
|
||||
.virtual = EXT_GPIO_VBASE,
|
||||
.pfn = __phys_to_pfn(EXT_GPIO_PBASE),
|
||||
.length = EXT_GPIO_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
static void __init aaed2000_map_io(void)
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/amba/bus.h>
|
||||
|
||||
#include <asm/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
|
@ -50,12 +49,12 @@
|
|||
static struct map_desc standard_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = VIO_APB_BASE,
|
||||
.physical = __phys_to_pfn(PIO_APB_BASE),
|
||||
.pfn = __phys_to_pfn(PIO_APB_BASE),
|
||||
.length = IO_APB_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VIO_AHB_BASE,
|
||||
.physical = __phys_to_pfn(PIO_AHB_BASE),
|
||||
.pfn = __phys_to_pfn(PIO_AHB_BASE),
|
||||
.length = IO_AHB_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
|
||||
struct sys_timer;
|
||||
|
|
|
@ -195,56 +195,6 @@ void __init imx_set_mmc_info(struct imxmmc_platform_data *info)
|
|||
}
|
||||
EXPORT_SYMBOL(imx_set_mmc_info);
|
||||
|
||||
static struct resource imx_uart1_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00206000,
|
||||
.end = 0x002060FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART1_MINT_RX),
|
||||
.end = (UART1_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART1_MINT_TX),
|
||||
.end = (UART1_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart1_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(imx_uart1_resources),
|
||||
.resource = imx_uart1_resources,
|
||||
};
|
||||
|
||||
static struct resource imx_uart2_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00207000,
|
||||
.end = 0x002070FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART2_MINT_RX),
|
||||
.end = (UART2_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART2_MINT_TX),
|
||||
.end = (UART2_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart2_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(imx_uart2_resources),
|
||||
.resource = imx_uart2_resources,
|
||||
};
|
||||
|
||||
static struct imxfb_mach_info imx_fb_info;
|
||||
|
||||
void __init set_imx_fb_info(struct imxfb_mach_info *hard_imx_fb_info)
|
||||
|
@ -283,8 +233,6 @@ static struct platform_device imxfb_device = {
|
|||
static struct platform_device *devices[] __initdata = {
|
||||
&imx_mmc_device,
|
||||
&imxfb_device,
|
||||
&imx_uart1_device,
|
||||
&imx_uart2_device,
|
||||
};
|
||||
|
||||
static struct map_desc imx_io_desc[] __initdata = {
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/arch/mmc.h>
|
||||
#include <asm/arch/imx-uart.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include "generic.h"
|
||||
|
||||
|
@ -48,8 +49,70 @@ static struct platform_device cs89x0_device = {
|
|||
.resource = cs89x0_resources,
|
||||
};
|
||||
|
||||
static struct imxuart_platform_data uart_pdata = {
|
||||
.flags = IMXUART_HAVE_RTSCTS,
|
||||
};
|
||||
|
||||
static struct resource imx_uart1_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00206000,
|
||||
.end = 0x002060FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART1_MINT_RX),
|
||||
.end = (UART1_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART1_MINT_TX),
|
||||
.end = (UART1_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart1_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(imx_uart1_resources),
|
||||
.resource = imx_uart1_resources,
|
||||
.dev = {
|
||||
.platform_data = &uart_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
static struct resource imx_uart2_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x00207000,
|
||||
.end = 0x002070FF,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = (UART2_MINT_RX),
|
||||
.end = (UART2_MINT_RX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
[2] = {
|
||||
.start = (UART2_MINT_TX),
|
||||
.end = (UART2_MINT_TX),
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device imx_uart2_device = {
|
||||
.name = "imx-uart",
|
||||
.id = 1,
|
||||
.num_resources = ARRAY_SIZE(imx_uart2_resources),
|
||||
.resource = imx_uart2_resources,
|
||||
.dev = {
|
||||
.platform_data = &uart_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&cs89x0_device,
|
||||
&imx_uart1_device,
|
||||
&imx_uart2_device,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MMC_IMX
|
||||
|
@ -75,6 +138,17 @@ mx1ads_init(void)
|
|||
imx_gpio_mode(GPIO_PORTB | GPIO_GIUS | GPIO_IN | 20);
|
||||
imx_set_mmc_info(&mx1ads_mmc_info);
|
||||
#endif
|
||||
|
||||
imx_gpio_mode(PC9_PF_UART1_CTS);
|
||||
imx_gpio_mode(PC10_PF_UART1_RTS);
|
||||
imx_gpio_mode(PC11_PF_UART1_TXD);
|
||||
imx_gpio_mode(PC12_PF_UART1_RXD);
|
||||
|
||||
imx_gpio_mode(PB28_PF_UART2_CTS);
|
||||
imx_gpio_mode(PB29_PF_UART2_RTS);
|
||||
imx_gpio_mode(PB30_PF_UART2_TXD);
|
||||
imx_gpio_mode(PB31_PF_UART2_RXD);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
|
@ -87,7 +161,7 @@ mx1ads_map_io(void)
|
|||
MACHINE_START(MX1ADS, "Motorola MX1ADS")
|
||||
/* Maintainer: Sascha Hauer, Pengutronix */
|
||||
.phys_io = 0x00200000,
|
||||
.io_pg_offst = ((0xe0200000) >> 18) & 0xfffc,
|
||||
.io_pg_offst = ((0xe0000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0x08000100,
|
||||
.map_io = mx1ads_map_io,
|
||||
.init_irq = imx_init_irq,
|
||||
|
|
|
@ -11,6 +11,7 @@ comment "IXP4xx Platforms"
|
|||
config MACH_NSLU2
|
||||
bool
|
||||
prompt "Linksys NSLU2"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Linksys's
|
||||
NSLU2 NAS device. For more information on this platform,
|
||||
|
@ -18,6 +19,7 @@ config MACH_NSLU2
|
|||
|
||||
config ARCH_AVILA
|
||||
bool "Avila"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support the Gateworks
|
||||
Avila Network Platform. For more information on this platform,
|
||||
|
@ -25,6 +27,7 @@ config ARCH_AVILA
|
|||
|
||||
config ARCH_ADI_COYOTE
|
||||
bool "Coyote"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support the ADI
|
||||
Engineering Coyote Gateway Reference Platform. For more
|
||||
|
@ -32,6 +35,7 @@ config ARCH_ADI_COYOTE
|
|||
|
||||
config ARCH_IXDP425
|
||||
bool "IXDP425"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDP425 Development Platform (Also known as Richfield).
|
||||
|
@ -39,6 +43,7 @@ config ARCH_IXDP425
|
|||
|
||||
config MACH_IXDPG425
|
||||
bool "IXDPG425"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDPG425 Development Platform (Also known as Montajade).
|
||||
|
@ -46,6 +51,7 @@ config MACH_IXDPG425
|
|||
|
||||
config MACH_IXDP465
|
||||
bool "IXDP465"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Intel's
|
||||
IXDP465 Development Platform (Also known as BMP).
|
||||
|
@ -72,6 +78,7 @@ config ARCH_PRPMC1100
|
|||
config MACH_NAS100D
|
||||
bool
|
||||
prompt "NAS100D"
|
||||
select PCI
|
||||
help
|
||||
Say 'Y' here if you want your kernel to support Iomega's
|
||||
NAS 100d device. For more information on this platform,
|
||||
|
@ -96,6 +103,7 @@ config CPU_IXP46X
|
|||
config MACH_GTWX5715
|
||||
bool "Gemtek WX5715 (Linksys WRV54G)"
|
||||
depends on ARCH_IXP4XX
|
||||
select PCI
|
||||
help
|
||||
This board is currently inside the Linksys WRV54G Gateways.
|
||||
|
||||
|
@ -110,11 +118,16 @@ config MACH_GTWX5715
|
|||
"High Speed" UART is n/c (as far as I can tell)
|
||||
20 Pin ARM/Xscale JTAG interface on J2
|
||||
|
||||
|
||||
comment "IXP4xx Options"
|
||||
|
||||
config DMABOUNCE
|
||||
bool
|
||||
default y
|
||||
depends on PCI
|
||||
|
||||
config IXP4XX_INDIRECT_PCI
|
||||
bool "Use indirect PCI memory access"
|
||||
depends on PCI
|
||||
help
|
||||
IXP4xx provides two methods of accessing PCI memory space:
|
||||
|
||||
|
|
|
@ -2,8 +2,9 @@
|
|||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
obj-y += common.o common-pci.o
|
||||
obj-y += common.o
|
||||
|
||||
obj-$(CONFIG_PCI) += common-pci.o
|
||||
obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o ixdp425-setup.o
|
||||
obj-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o coyote-setup.o
|
||||
obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o coyote-setup.o
|
||||
|
|
|
@ -45,23 +45,16 @@ int pxa_request_dma (char *name, pxa_dma_prio prio,
|
|||
|
||||
local_irq_save(flags);
|
||||
|
||||
/* try grabbing a DMA channel with the requested priority */
|
||||
for (i = prio; i < prio + PXA_DMA_NBCH(prio); i++) {
|
||||
if (!dma_channels[i].name) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
/* requested prio group is full, try hier priorities */
|
||||
for (i = prio-1; i >= 0; i--) {
|
||||
do {
|
||||
/* try grabbing a DMA channel with the requested priority */
|
||||
pxa_for_each_dma_prio (i, prio) {
|
||||
if (!dma_channels[i].name) {
|
||||
found = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
/* if requested prio group is full, try a hier priority */
|
||||
} while (!found && prio--);
|
||||
|
||||
if (found) {
|
||||
DCSR(i) = DCSR_STARTINTR|DCSR_ENDINTR|DCSR_BUSERR;
|
||||
|
|
|
@ -199,10 +199,26 @@ static void sa1100_unmask_irq(unsigned int irq)
|
|||
ICMR |= (1 << irq);
|
||||
}
|
||||
|
||||
/*
|
||||
* Apart form GPIOs, only the RTC alarm can be a wakeup event.
|
||||
*/
|
||||
static int sa1100_set_wake(unsigned int irq, unsigned int on)
|
||||
{
|
||||
if (irq == IRQ_RTCAlrm) {
|
||||
if (on)
|
||||
PWER |= PWER_RTC;
|
||||
else
|
||||
PWER &= ~PWER_RTC;
|
||||
return 0;
|
||||
}
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static struct irqchip sa1100_normal_chip = {
|
||||
.ack = sa1100_mask_irq,
|
||||
.mask = sa1100_mask_irq,
|
||||
.unmask = sa1100_unmask_irq,
|
||||
.set_wake = sa1100_set_wake,
|
||||
};
|
||||
|
||||
static struct resource irq_resource = {
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Mon Feb 20 10:18:02 2006
|
||||
# Last update: Mon May 8 20:11:05 2006
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
|
@ -566,8 +566,8 @@ switchgrass MACH_SWITCHGRASS SWITCHGRASS 549
|
|||
ens_cmu MACH_ENS_CMU ENS_CMU 550
|
||||
mm6_sdb MACH_MM6_SDB MM6_SDB 551
|
||||
saturn MACH_SATURN SATURN 552
|
||||
argonplusevb MACH_ARGONPLUSEVB ARGONPLUSEVB 553
|
||||
scma11evb MACH_SCMA11EVB SCMA11EVB 554
|
||||
i30030evb MACH_ARGONPLUSEVB ARGONPLUSEVB 553
|
||||
mxc27530evb MACH_SCMA11EVB SCMA11EVB 554
|
||||
smdk2800 MACH_SMDK2800 SMDK2800 555
|
||||
mtwilson MACH_MTWILSON MTWILSON 556
|
||||
ziti MACH_ZITI ZITI 557
|
||||
|
@ -647,7 +647,7 @@ sendt MACH_SENDT SENDT 630
|
|||
mx2jazz MACH_MX2JAZZ MX2JAZZ 631
|
||||
multiio MACH_MULTIIO MULTIIO 632
|
||||
hrdisplay MACH_HRDISPLAY HRDISPLAY 633
|
||||
scma11bb MACH_SCMA11BB SCMA11BB 634
|
||||
mxc27530ads MACH_SCMA11BB SCMA11BB 634
|
||||
trizeps3 MACH_TRIZEPS3 TRIZEPS3 635
|
||||
zefeerdza MACH_ZEFEERDZA ZEFEERDZA 636
|
||||
zefeerdzb MACH_ZEFEERDZB ZEFEERDZB 637
|
||||
|
@ -721,7 +721,7 @@ gp32 MACH_GP32 GP32 706
|
|||
gem MACH_GEM GEM 707
|
||||
i858 MACH_I858 I858 708
|
||||
hx2750 MACH_HX2750 HX2750 709
|
||||
zeusevb MACH_ZEUSEVB ZEUSEVB 710
|
||||
mxc91131evb MACH_ZEUSEVB ZEUSEVB 710
|
||||
p700 MACH_P700 P700 711
|
||||
cpe MACH_CPE CPE 712
|
||||
spitz MACH_SPITZ SPITZ 713
|
||||
|
@ -802,7 +802,7 @@ cpuat91 MACH_CPUAT91 CPUAT91 787
|
|||
rea9200 MACH_REA9200 REA9200 788
|
||||
acts_pune_sa1110 MACH_ACTS_PUNE_SA1110 ACTS_PUNE_SA1110 789
|
||||
ixp425 MACH_IXP425 IXP425 790
|
||||
argonplusodyssey MACH_ARGONPLUSODYSSEY ARGONPLUSODYSSEY 791
|
||||
i30030ads MACH_ARGONPLUSODYSSEY ARGONPLUSODYSSEY 791
|
||||
perch MACH_PERCH PERCH 792
|
||||
eis05r1 MACH_EIS05R1 EIS05R1 793
|
||||
pepperpad MACH_PEPPERPAD PEPPERPAD 794
|
||||
|
@ -827,7 +827,7 @@ micro9l MACH_MICRO9L MICRO9L 812
|
|||
uc5471dsp MACH_UC5471DSP UC5471DSP 813
|
||||
sj5471eng MACH_SJ5471ENG SJ5471ENG 814
|
||||
none MACH_CMPXA26X CMPXA26X 815
|
||||
nc MACH_NC NC 816
|
||||
nc1 MACH_NC NC 816
|
||||
omap_palmte MACH_OMAP_PALMTE OMAP_PALMTE 817
|
||||
ajax52x MACH_AJAX52X AJAX52X 818
|
||||
siriustar MACH_SIRIUSTAR SIRIUSTAR 819
|
||||
|
@ -930,7 +930,7 @@ netclient MACH_NETCLIENT NETCLIENT 916
|
|||
xscale_palmtt5 MACH_XSCALE_PALMTT5 XSCALE_PALMTT5 917
|
||||
xscale_palmtc MACH_OMAP_PALMTC OMAP_PALMTC 918
|
||||
omap_apollon MACH_OMAP_APOLLON OMAP_APOLLON 919
|
||||
argonlvevb MACH_ARGONLVEVB ARGONLVEVB 920
|
||||
mxc30030evb MACH_ARGONLVEVB ARGONLVEVB 920
|
||||
rea_2d MACH_REA_2D REA_2D 921
|
||||
eti3e524 MACH_TI3E524 TI3E524 922
|
||||
ateb9200 MACH_ATEB9200 ATEB9200 923
|
||||
|
@ -965,7 +965,78 @@ sisteron MACH_SISTERON SISTERON 951
|
|||
rx1950 MACH_RX1950 RX1950 952
|
||||
tsc_venus MACH_TSC_VENUS TSC_VENUS 953
|
||||
ds101j MACH_DS101J DS101J 954
|
||||
mxc300_30ads MACH_MXC30030ADS MXC30030ADS 955
|
||||
mxc30030ads MACH_MXC30030ADS MXC30030ADS 955
|
||||
fujitsu_wimaxsoc MACH_FUJITSU_WIMAXSOC FUJITSU_WIMAXSOC 956
|
||||
dualpcmodem MACH_DUALPCMODEM DUALPCMODEM 957
|
||||
gesbc9312 MACH_GESBC9312 GESBC9312 958
|
||||
htcapache MACH_HTCAPACHE HTCAPACHE 959
|
||||
ixdp435 MACH_IXDP435 IXDP435 960
|
||||
catprovt100 MACH_CATPROVT100 CATPROVT100 961
|
||||
picotux1xx MACH_PICOTUX1XX PICOTUX1XX 962
|
||||
picotux2xx MACH_PICOTUX2XX PICOTUX2XX 963
|
||||
dsmg600 MACH_DSMG600 DSMG600 964
|
||||
empc2 MACH_EMPC2 EMPC2 965
|
||||
ventura MACH_VENTURA VENTURA 966
|
||||
phidget_sbc MACH_PHIDGET_SBC PHIDGET_SBC 967
|
||||
ij3k MACH_IJ3K IJ3K 968
|
||||
pisgah MACH_PISGAH PISGAH 969
|
||||
omap_fsample MACH_OMAP_FSAMPLE OMAP_FSAMPLE 970
|
||||
sg720 MACH_SG720 SG720 971
|
||||
redfox MACH_REDFOX REDFOX 972
|
||||
mysh_ep9315_1 MACH_MYSH_EP9315_1 MYSH_EP9315_1 973
|
||||
tpf106 MACH_TPF106 TPF106 974
|
||||
at91rm9200kg MACH_AT91RM9200KG AT91RM9200KG 975
|
||||
racemt2 MACH_SLEDB SLEDB 976
|
||||
ontrack MACH_ONTRACK ONTRACK 977
|
||||
pm1200 MACH_PM1200 PM1200 978
|
||||
ess24562 MACH_ESS24XXX ESS24XXX 979
|
||||
coremp7 MACH_COREMP7 COREMP7 980
|
||||
nexcoder_6446 MACH_NEXCODER_6446 NEXCODER_6446 981
|
||||
stvc8380 MACH_STVC8380 STVC8380 982
|
||||
teklynx MACH_TEKLYNX TEKLYNX 983
|
||||
carbonado MACH_CARBONADO CARBONADO 984
|
||||
sysmos_mp730 MACH_SYSMOS_MP730 SYSMOS_MP730 985
|
||||
snapper_cl15 MACH_SNAPPER_CL15 SNAPPER_CL15 986
|
||||
pgigim MACH_PGIGIM PGIGIM 987
|
||||
ptx9160p2 MACH_PTX9160P2 PTX9160P2 988
|
||||
dcore1 MACH_DCORE1 DCORE1 989
|
||||
victorpxa MACH_VICTORPXA VICTORPXA 990
|
||||
mx2dtb MACH_MX2DTB MX2DTB 991
|
||||
pxa_irex_er0100 MACH_PXA_IREX_ER0100 PXA_IREX_ER0100 992
|
||||
omap_palmz71 MACH_OMAP_PALMZ71 OMAP_PALMZ71 993
|
||||
bartec_deg MACH_BARTEC_DEG BARTEC_DEG 994
|
||||
hw50251 MACH_HW50251 HW50251 995
|
||||
ibox MACH_IBOX IBOX 996
|
||||
atlaslh7a404 MACH_ATLASLH7A404 ATLASLH7A404 997
|
||||
pt2026 MACH_PT2026 PT2026 998
|
||||
htcalpine MACH_HTCALPINE HTCALPINE 999
|
||||
bartec_vtu MACH_BARTEC_VTU BARTEC_VTU 1000
|
||||
vcoreii MACH_VCOREII VCOREII 1001
|
||||
pdnb3 MACH_PDNB3 PDNB3 1002
|
||||
htcbeetles MACH_HTCBEETLES HTCBEETLES 1003
|
||||
s3c6400 MACH_S3C6400 S3C6400 1004
|
||||
s3c2443 MACH_S3C2443 S3C2443 1005
|
||||
omap_ldk MACH_OMAP_LDK OMAP_LDK 1006
|
||||
smdk2460 MACH_SMDK2460 SMDK2460 1007
|
||||
smdk2440 MACH_SMDK2440 SMDK2440 1008
|
||||
smdk2412 MACH_SMDK2412 SMDK2412 1009
|
||||
webbox MACH_WEBBOX WEBBOX 1010
|
||||
cwwndp MACH_CWWNDP CWWNDP 1011
|
||||
dragon MACH_DRAGON DRAGON 1012
|
||||
opendo_cpu_board MACH_OPENDO_CPU_BOARD OPENDO_CPU_BOARD 1013
|
||||
ccm2200 MACH_CCM2200 CCM2200 1014
|
||||
etwarm MACH_ETWARM ETWARM 1015
|
||||
m93030 MACH_M93030 M93030 1016
|
||||
cc7u MACH_CC7U CC7U 1017
|
||||
mtt_ranger MACH_MTT_RANGER MTT_RANGER 1018
|
||||
nexus MACH_NEXUS NEXUS 1019
|
||||
desman MACH_DESMAN DESMAN 1020
|
||||
bkde303 MACH_BKDE303 BKDE303 1021
|
||||
smdk2413 MACH_SMDK2413 SMDK2413 1022
|
||||
aml_m7200 MACH_AML_M7200 AML_M7200 1023
|
||||
aml_m5900 MACH_AML_M5900 AML_M5900 1024
|
||||
sg640 MACH_SG640 SG640 1025
|
||||
edg79524 MACH_EDG79524 EDG79524 1026
|
||||
ai2410 MACH_AI2410 AI2410 1027
|
||||
ixp465 MACH_IXP465 IXP465 1028
|
||||
balloon3 MACH_BALLOON3 BALLOON3 1029
|
||||
|
|
|
@ -245,7 +245,7 @@ void VFP9_bounce(u32 trigger, u32 fpexc, struct pt_regs *regs)
|
|||
*/
|
||||
barrier();
|
||||
trigger = fmrx(FPINST2);
|
||||
fpscr = fmrx(FPSCR);
|
||||
orig_fpscr = fpscr = fmrx(FPSCR);
|
||||
|
||||
emulate:
|
||||
exceptions = vfp_emulate_instruction(trigger, fpscr, regs);
|
||||
|
|
|
@ -758,10 +758,10 @@ config HOTPLUG_CPU
|
|||
bool "Support for hot-pluggable CPUs (EXPERIMENTAL)"
|
||||
depends on SMP && HOTPLUG && EXPERIMENTAL && !X86_VOYAGER
|
||||
---help---
|
||||
Say Y here to experiment with turning CPUs off and on. CPUs
|
||||
can be controlled through /sys/devices/system/cpu.
|
||||
Say Y here to experiment with turning CPUs off and on, and to
|
||||
enable suspend on SMP systems. CPUs can be controlled through
|
||||
/sys/devices/system/cpu.
|
||||
|
||||
Say N.
|
||||
|
||||
endmenu
|
||||
|
||||
|
|
|
@ -1102,9 +1102,6 @@ int __init acpi_boot_table_init(void)
|
|||
dmi_check_system(acpi_dmi_table);
|
||||
#endif
|
||||
|
||||
if (!cpu_has_apic)
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* If acpi_disabled, bail out
|
||||
* One exception: acpi=ht continues far enough to enumerate LAPICs
|
||||
|
@ -1151,9 +1148,6 @@ int __init acpi_boot_init(void)
|
|||
|
||||
acpi_table_parse(ACPI_BOOT, acpi_parse_sbf);
|
||||
|
||||
if (!cpu_has_apic)
|
||||
return -ENODEV;
|
||||
|
||||
/*
|
||||
* set sci_int and PM timer address
|
||||
*/
|
||||
|
|
|
@ -2238,6 +2238,8 @@ static inline void unlock_ExtINT_logic(void)
|
|||
spin_unlock_irqrestore(&ioapic_lock, flags);
|
||||
}
|
||||
|
||||
int timer_uses_ioapic_pin_0;
|
||||
|
||||
/*
|
||||
* This code may look a bit paranoid, but it's supposed to cooperate with
|
||||
* a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
|
||||
|
@ -2274,6 +2276,9 @@ static inline void check_timer(void)
|
|||
pin2 = ioapic_i8259.pin;
|
||||
apic2 = ioapic_i8259.apic;
|
||||
|
||||
if (pin1 == 0)
|
||||
timer_uses_ioapic_pin_0 = 1;
|
||||
|
||||
printk(KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
|
||||
vector, apic1, pin1, apic2, pin2);
|
||||
|
||||
|
|
|
@ -1130,7 +1130,17 @@ int mp_register_gsi (u32 gsi, int triggering, int polarity)
|
|||
*/
|
||||
int irq = gsi;
|
||||
if (gsi < MAX_GSI_NUM) {
|
||||
if (gsi > 15)
|
||||
/*
|
||||
* Retain the VIA chipset work-around (gsi > 15), but
|
||||
* avoid a problem where the 8254 timer (IRQ0) is setup
|
||||
* via an override (so it's not on pin 0 of the ioapic),
|
||||
* and at the same time, the pin 0 interrupt is a PCI
|
||||
* type. The gsi > 15 test could cause these two pins
|
||||
* to be shared as IRQ0, and they are not shareable.
|
||||
* So test for this condition, and if necessary, avoid
|
||||
* the pin collision.
|
||||
*/
|
||||
if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
|
||||
gsi = pci_irq++;
|
||||
/*
|
||||
* Don't assign IRQ used by ACPI SCI
|
||||
|
|
|
@ -1320,6 +1320,8 @@ legacy_init_iomem_resources(struct resource *code_resource, struct resource *dat
|
|||
probe_roms();
|
||||
for (i = 0; i < e820.nr_map; i++) {
|
||||
struct resource *res;
|
||||
if (e820.map[i].addr + e820.map[i].size > 0x100000000ULL)
|
||||
continue;
|
||||
res = kzalloc(sizeof(struct resource), GFP_ATOMIC);
|
||||
switch (e820.map[i].type) {
|
||||
case E820_RAM: res->name = "System RAM"; break;
|
||||
|
|
|
@ -332,10 +332,11 @@ static int __init ppro_init(char ** cpu_type)
|
|||
{
|
||||
__u8 cpu_model = boot_cpu_data.x86_model;
|
||||
|
||||
if (cpu_model > 0xd)
|
||||
if (cpu_model == 14)
|
||||
*cpu_type = "i386/core";
|
||||
else if (cpu_model > 0xd)
|
||||
return 0;
|
||||
|
||||
if (cpu_model == 9) {
|
||||
else if (cpu_model == 9) {
|
||||
*cpu_type = "i386/p6_mobile";
|
||||
} else if (cpu_model > 5) {
|
||||
*cpu_type = "i386/piii";
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
* in1: source address
|
||||
* in2: number of bytes to copy
|
||||
* Output:
|
||||
* 0 if success, or number of byte NOT copied if error occurred.
|
||||
* for memcpy: return dest
|
||||
* for copy_user: return 0 if success,
|
||||
* or number of byte NOT copied if error occurred.
|
||||
*
|
||||
* Copyright (C) 2002 Intel Corp.
|
||||
* Copyright (C) 2002 Ken Chen <kenneth.w.chen@intel.com>
|
||||
|
@ -73,6 +75,7 @@ GLOBAL_ENTRY(memcpy)
|
|||
and r28=0x7,in0
|
||||
and r29=0x7,in1
|
||||
mov f6=f0
|
||||
mov retval=in0
|
||||
br.cond.sptk .common_code
|
||||
;;
|
||||
END(memcpy)
|
||||
|
@ -84,7 +87,7 @@ GLOBAL_ENTRY(__copy_user)
|
|||
mov f6=f1
|
||||
mov saved_in0=in0 // save dest pointer
|
||||
mov saved_in1=in1 // save src pointer
|
||||
mov saved_in2=in2 // save len
|
||||
mov retval=r0 // initialize return value
|
||||
;;
|
||||
.common_code:
|
||||
cmp.gt p15,p0=8,in2 // check for small size
|
||||
|
@ -92,7 +95,7 @@ GLOBAL_ENTRY(__copy_user)
|
|||
cmp.ne p14,p0=0,r29 // check src alignment
|
||||
add src0=0,in1
|
||||
sub r30=8,r28 // for .align_dest
|
||||
mov retval=r0 // initialize return value
|
||||
mov saved_in2=in2 // save len
|
||||
;;
|
||||
add dst0=0,in0
|
||||
add dst1=1,in0 // dest odd index
|
||||
|
|
|
@ -90,15 +90,15 @@ void __kprobes arch_remove_kprobe(struct kprobe *p)
|
|||
|
||||
static void __kprobes prepare_singlestep(struct kprobe *p, struct pt_regs *regs)
|
||||
{
|
||||
kprobe_opcode_t insn = *p->ainsn.insn;
|
||||
|
||||
regs->msr |= MSR_SE;
|
||||
|
||||
/* single step inline if it is a trap variant */
|
||||
if (is_trap(insn))
|
||||
regs->nip = (unsigned long)p->addr;
|
||||
else
|
||||
regs->nip = (unsigned long)p->ainsn.insn;
|
||||
/*
|
||||
* On powerpc we should single step on the original
|
||||
* instruction even if the probed insn is a trap
|
||||
* variant as values in regs could play a part in
|
||||
* if the trap is taken or not
|
||||
*/
|
||||
regs->nip = (unsigned long)p->ainsn.insn;
|
||||
}
|
||||
|
||||
static void __kprobes save_previous_kprobe(struct kprobe_ctlblk *kcb)
|
||||
|
|
|
@ -885,6 +885,74 @@ void __init unflatten_device_tree(void)
|
|||
DBG(" <- unflatten_device_tree()\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* ibm,pa-features is a per-cpu property that contains a string of
|
||||
* attribute descriptors, each of which has a 2 byte header plus up
|
||||
* to 254 bytes worth of processor attribute bits. First header
|
||||
* byte specifies the number of bytes following the header.
|
||||
* Second header byte is an "attribute-specifier" type, of which
|
||||
* zero is the only currently-defined value.
|
||||
* Implementation: Pass in the byte and bit offset for the feature
|
||||
* that we are interested in. The function will return -1 if the
|
||||
* pa-features property is missing, or a 1/0 to indicate if the feature
|
||||
* is supported/not supported. Note that the bit numbers are
|
||||
* big-endian to match the definition in PAPR.
|
||||
*/
|
||||
static struct ibm_pa_feature {
|
||||
unsigned long cpu_features; /* CPU_FTR_xxx bit */
|
||||
unsigned int cpu_user_ftrs; /* PPC_FEATURE_xxx bit */
|
||||
unsigned char pabyte; /* byte number in ibm,pa-features */
|
||||
unsigned char pabit; /* bit number (big-endian) */
|
||||
unsigned char invert; /* if 1, pa bit set => clear feature */
|
||||
} ibm_pa_features[] __initdata = {
|
||||
{0, PPC_FEATURE_HAS_MMU, 0, 0, 0},
|
||||
{0, PPC_FEATURE_HAS_FPU, 0, 1, 0},
|
||||
{CPU_FTR_SLB, 0, 0, 2, 0},
|
||||
{CPU_FTR_CTRL, 0, 0, 3, 0},
|
||||
{CPU_FTR_NOEXECUTE, 0, 0, 6, 0},
|
||||
{CPU_FTR_NODSISRALIGN, 0, 1, 1, 1},
|
||||
{CPU_FTR_CI_LARGE_PAGE, 0, 1, 2, 0},
|
||||
};
|
||||
|
||||
static void __init check_cpu_pa_features(unsigned long node)
|
||||
{
|
||||
unsigned char *pa_ftrs;
|
||||
unsigned long len, tablelen, i, bit;
|
||||
|
||||
pa_ftrs = of_get_flat_dt_prop(node, "ibm,pa-features", &tablelen);
|
||||
if (pa_ftrs == NULL)
|
||||
return;
|
||||
|
||||
/* find descriptor with type == 0 */
|
||||
for (;;) {
|
||||
if (tablelen < 3)
|
||||
return;
|
||||
len = 2 + pa_ftrs[0];
|
||||
if (tablelen < len)
|
||||
return; /* descriptor 0 not found */
|
||||
if (pa_ftrs[1] == 0)
|
||||
break;
|
||||
tablelen -= len;
|
||||
pa_ftrs += len;
|
||||
}
|
||||
|
||||
/* loop over bits we know about */
|
||||
for (i = 0; i < ARRAY_SIZE(ibm_pa_features); ++i) {
|
||||
struct ibm_pa_feature *fp = &ibm_pa_features[i];
|
||||
|
||||
if (fp->pabyte >= pa_ftrs[0])
|
||||
continue;
|
||||
bit = (pa_ftrs[2 + fp->pabyte] >> (7 - fp->pabit)) & 1;
|
||||
if (bit ^ fp->invert) {
|
||||
cur_cpu_spec->cpu_features |= fp->cpu_features;
|
||||
cur_cpu_spec->cpu_user_features |= fp->cpu_user_ftrs;
|
||||
} else {
|
||||
cur_cpu_spec->cpu_features &= ~fp->cpu_features;
|
||||
cur_cpu_spec->cpu_user_features &= ~fp->cpu_user_ftrs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int __init early_init_dt_scan_cpus(unsigned long node,
|
||||
const char *uname, int depth,
|
||||
void *data)
|
||||
|
@ -969,6 +1037,8 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
|
|||
}
|
||||
#endif /* CONFIG_ALTIVEC */
|
||||
|
||||
check_cpu_pa_features(node);
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
if (nthreads > 1)
|
||||
cur_cpu_spec->cpu_features |= CPU_FTR_SMT;
|
||||
|
|
|
@ -118,7 +118,15 @@ int eeh_send_failure_event (struct device_node *dn,
|
|||
{
|
||||
unsigned long flags;
|
||||
struct eeh_event *event;
|
||||
char *location;
|
||||
|
||||
if (!mem_init_done) {
|
||||
printk(KERN_ERR "EEH: event during early boot not handled\n");
|
||||
location = (char *) get_property(dn, "ibm,loc-code", NULL);
|
||||
printk(KERN_ERR "EEH: device node = %s\n", dn->full_name);
|
||||
printk(KERN_ERR "EEH: PCI location = %s\n", location);
|
||||
return 1;
|
||||
}
|
||||
event = kmalloc(sizeof(*event), GFP_ATOMIC);
|
||||
if (event == NULL) {
|
||||
printk (KERN_ERR "EEH: out of memory, event not handled\n");
|
||||
|
|
|
@ -355,9 +355,7 @@ InstructionTLBMiss:
|
|||
|
||||
. = 0x1200
|
||||
DataStoreTLBMiss:
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
stw r3, 8(r0)
|
||||
#endif
|
||||
DO_8xx_CPU6(0x3f80, r3)
|
||||
mtspr SPRN_M_TW, r10 /* Save a couple of working registers */
|
||||
mfcr r10
|
||||
|
@ -417,9 +415,7 @@ DataStoreTLBMiss:
|
|||
lwz r11, 0(r0)
|
||||
mtcr r11
|
||||
lwz r11, 4(r0)
|
||||
#ifdef CONFIG_8xx_CPU6
|
||||
lwz r3, 8(r0)
|
||||
#endif
|
||||
rfi
|
||||
|
||||
/* This is an instruction TLB error on the MPC8xx. This could be due
|
||||
|
|
|
@ -378,7 +378,7 @@ int __init mpc866ads_init(void)
|
|||
ppc_sys_device_setfunc(MPC8xx_CPM_SMC1, PPC_SYS_FUNC_UART);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SERIAL_CPM_SMCer
|
||||
#ifdef CONFIG_SERIAL_CPM_SMC
|
||||
ppc_sys_device_enable(MPC8xx_CPM_SMC2);
|
||||
ppc_sys_device_setfunc(MPC8xx_CPM_SMC2, PPC_SYS_FUNC_UART);
|
||||
#endif
|
||||
|
|
|
@ -1650,3 +1650,11 @@ sys_tee_wrapper:
|
|||
llgfr %r4,%r4 # size_t
|
||||
llgfr %r5,%r5 # unsigned int
|
||||
jg sys_tee
|
||||
|
||||
.globl compat_sys_vmsplice_wrapper
|
||||
compat_sys_vmsplice_wrapper:
|
||||
lgfr %r2,%r2 # int
|
||||
llgtr %r3,%r3 # compat_iovec *
|
||||
llgfr %r4,%r4 # unsigned int
|
||||
llgfr %r5,%r5 # unsigned int
|
||||
jg compat_sys_vmsplice
|
||||
|
|
|
@ -317,3 +317,4 @@ SYSCALL(sys_get_robust_list,sys_get_robust_list,compat_sys_get_robust_list_wrapp
|
|||
SYSCALL(sys_splice,sys_splice,sys_splice_wrapper)
|
||||
SYSCALL(sys_sync_file_range,sys_sync_file_range,sys_sync_file_range_wrapper)
|
||||
SYSCALL(sys_tee,sys_tee,sys_tee_wrapper)
|
||||
SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper)
|
||||
|
|
|
@ -249,18 +249,19 @@ static inline void stop_hz_timer(void)
|
|||
unsigned long flags;
|
||||
unsigned long seq, next;
|
||||
__u64 timer, todval;
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
if (sysctl_hz_timer != 0)
|
||||
return;
|
||||
|
||||
cpu_set(smp_processor_id(), nohz_cpu_mask);
|
||||
cpu_set(cpu, nohz_cpu_mask);
|
||||
|
||||
/*
|
||||
* Leave the clock comparator set up for the next timer
|
||||
* tick if either rcu or a softirq is pending.
|
||||
*/
|
||||
if (rcu_pending(smp_processor_id()) || local_softirq_pending()) {
|
||||
cpu_clear(smp_processor_id(), nohz_cpu_mask);
|
||||
if (rcu_needs_cpu(cpu) || local_softirq_pending()) {
|
||||
cpu_clear(cpu, nohz_cpu_mask);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -274,6 +274,11 @@ void *sbus_alloc_consistent(struct sbus_dev *sdev, long len, u32 *dma_addrp)
|
|||
if (mmu_map_dma_area(dma_addrp, va, res->start, len_total) != 0)
|
||||
goto err_noiommu;
|
||||
|
||||
/* Set the resource name, if known. */
|
||||
if (sdev) {
|
||||
res->name = sdev->prom_name;
|
||||
}
|
||||
|
||||
return (void *)res->start;
|
||||
|
||||
err_noiommu:
|
||||
|
|
|
@ -113,6 +113,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs,
|
|||
|
||||
switch (ELF32_R_TYPE(rel[i].r_info)) {
|
||||
case R_SPARC_32:
|
||||
case R_SPARC_UA32:
|
||||
location[0] = v >> 24;
|
||||
location[1] = v >> 16;
|
||||
location[2] = v >> 8;
|
||||
|
|
|
@ -251,19 +251,9 @@ EXPORT_SYMBOL(__prom_getchild);
|
|||
EXPORT_SYMBOL(__prom_getsibling);
|
||||
|
||||
/* sparc library symbols */
|
||||
EXPORT_SYMBOL(memchr);
|
||||
EXPORT_SYMBOL(memscan);
|
||||
EXPORT_SYMBOL(strlen);
|
||||
EXPORT_SYMBOL(strnlen);
|
||||
EXPORT_SYMBOL(strcpy);
|
||||
EXPORT_SYMBOL(strncpy);
|
||||
EXPORT_SYMBOL(strcat);
|
||||
EXPORT_SYMBOL(strncat);
|
||||
EXPORT_SYMBOL(strcmp);
|
||||
EXPORT_SYMBOL(strncmp);
|
||||
EXPORT_SYMBOL(strchr);
|
||||
EXPORT_SYMBOL(strrchr);
|
||||
EXPORT_SYMBOL(strstr);
|
||||
EXPORT_SYMBOL(page_kernel);
|
||||
|
||||
/* Special internal versions of library functions. */
|
||||
|
@ -317,6 +307,3 @@ EXPORT_SYMBOL(do_BUG);
|
|||
|
||||
/* Sun Power Management Idle Handler */
|
||||
EXPORT_SYMBOL(pm_idle);
|
||||
|
||||
/* Binfmt_misc needs this */
|
||||
EXPORT_SYMBOL(sys_close);
|
||||
|
|
|
@ -23,7 +23,7 @@ sys_call_table:
|
|||
/*10*/ .long sys_unlink, sunos_execv, sys_chdir, sys_chown16, sys_mknod
|
||||
/*15*/ .long sys_chmod, sys_lchown16, sparc_brk, sys_nis_syscall, sys_lseek
|
||||
/*20*/ .long sys_getpid, sys_capget, sys_capset, sys_setuid16, sys_getuid16
|
||||
/*25*/ .long sys_time, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause
|
||||
/*25*/ .long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause
|
||||
/*30*/ .long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice
|
||||
/*35*/ .long sys_chown, sys_sync, sys_kill, sys_newstat, sys_sendfile
|
||||
/*40*/ .long sys_newlstat, sys_dup, sys_pipe, sys_times, sys_getuid
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.16
|
||||
# Sun Apr 2 19:31:04 2006
|
||||
# Linux kernel version: 2.6.17-rc3
|
||||
# Fri May 12 12:43:49 2006
|
||||
#
|
||||
CONFIG_SPARC=y
|
||||
CONFIG_SPARC64=y
|
||||
|
@ -114,6 +114,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
|
|||
CONFIG_HUGETLB_PAGE_SIZE_4MB=y
|
||||
# CONFIG_HUGETLB_PAGE_SIZE_512K is not set
|
||||
# CONFIG_HUGETLB_PAGE_SIZE_64K is not set
|
||||
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_ARCH_SPARSEMEM_ENABLE=y
|
||||
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
|
||||
CONFIG_LARGE_ALLOCS=y
|
||||
|
@ -430,7 +431,6 @@ CONFIG_ISCSI_TCP=m
|
|||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 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_QLOGICPTI is not set
|
||||
# CONFIG_SCSI_QLA_FC is not set
|
||||
|
@ -1042,9 +1042,7 @@ CONFIG_USB_HIDDEV=y
|
|||
# CONFIG_USB_ACECAD is not set
|
||||
# CONFIG_USB_KBTAB is not set
|
||||
# CONFIG_USB_POWERMATE is not set
|
||||
# CONFIG_USB_MTOUCH is not set
|
||||
# CONFIG_USB_ITMTOUCH is not set
|
||||
# CONFIG_USB_EGALAX is not set
|
||||
# CONFIG_USB_TOUCHSCREEN is not set
|
||||
# CONFIG_USB_YEALINK is not set
|
||||
# CONFIG_USB_XPAD is not set
|
||||
# CONFIG_USB_ATI_REMOTE is not set
|
||||
|
@ -1114,6 +1112,14 @@ CONFIG_USB_HIDDEV=y
|
|||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# InfiniBand support
|
||||
#
|
||||
|
@ -1303,6 +1309,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
|
|
@ -143,6 +143,11 @@ int apply_relocate_add(Elf64_Shdr *sechdrs,
|
|||
location[3] = v >> 0;
|
||||
break;
|
||||
|
||||
case R_SPARC_DISP32:
|
||||
v -= (Elf64_Addr) location;
|
||||
*loc32 = v;
|
||||
break;
|
||||
|
||||
case R_SPARC_WDISP30:
|
||||
v -= (Elf64_Addr) location;
|
||||
*loc32 = (*loc32 & ~0x3fffffff) |
|
||||
|
|
|
@ -139,6 +139,7 @@ SIGN3(sys32_ioprio_set, sys_ioprio_set, %o0, %o1, %o2)
|
|||
SIGN2(sys32_splice, sys_splice, %o0, %o1)
|
||||
SIGN2(sys32_sync_file_range, compat_sync_file_range, %o0, %o5)
|
||||
SIGN2(sys32_tee, sys_tee, %o0, %o1)
|
||||
SIGN1(sys32_vmsplice, compat_sys_vmsplice, %o0)
|
||||
|
||||
.globl sys32_mmap2
|
||||
sys32_mmap2:
|
||||
|
|
|
@ -25,7 +25,7 @@ sys_call_table32:
|
|||
/*10*/ .word sys_unlink, sunos_execv, sys_chdir, sys32_chown16, sys32_mknod
|
||||
/*15*/ .word sys_chmod, sys32_lchown16, sparc_brk, sys32_perfctr, sys32_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys32_setuid16, sys32_getuid16
|
||||
/*25*/ .word compat_sys_time, sys_ptrace, sys_alarm, sys32_sigaltstack, sys32_pause
|
||||
/*25*/ .word sys32_vmsplice, sys_ptrace, sys_alarm, sys32_sigaltstack, sys32_pause
|
||||
/*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice
|
||||
.word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile
|
||||
/*40*/ .word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid
|
||||
|
@ -94,7 +94,7 @@ sys_call_table:
|
|||
/*10*/ .word sys_unlink, sys_nis_syscall, sys_chdir, sys_chown, sys_mknod
|
||||
/*15*/ .word sys_chmod, sys_lchown, sparc_brk, sys_perfctr, sys_lseek
|
||||
/*20*/ .word sys_getpid, sys_capget, sys_capset, sys_setuid, sys_getuid
|
||||
/*25*/ .word sys_nis_syscall, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall
|
||||
/*25*/ .word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall
|
||||
/*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice
|
||||
.word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile64
|
||||
/*40*/ .word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall
|
||||
|
|
|
@ -209,4 +209,4 @@ int __init timer_init(void)
|
|||
return(0);
|
||||
}
|
||||
|
||||
__initcall(timer_init);
|
||||
arch_initcall(timer_init);
|
||||
|
|
|
@ -76,6 +76,12 @@ static inline int bad_addr(unsigned long *addrp, unsigned long size)
|
|||
*addrp = __pa_symbol(&_end);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (last >= ebda_addr && addr < ebda_addr + ebda_size) {
|
||||
*addrp = ebda_addr + ebda_size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* XXX ramdisk image here? */
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1777,6 +1777,8 @@ static inline void unlock_ExtINT_logic(void)
|
|||
spin_unlock_irqrestore(&ioapic_lock, flags);
|
||||
}
|
||||
|
||||
int timer_uses_ioapic_pin_0;
|
||||
|
||||
/*
|
||||
* This code may look a bit paranoid, but it's supposed to cooperate with
|
||||
* a wide range of boards and BIOS bugs. Fortunately only the timer IRQ
|
||||
|
@ -1814,6 +1816,9 @@ static inline void check_timer(void)
|
|||
pin2 = ioapic_i8259.pin;
|
||||
apic2 = ioapic_i8259.apic;
|
||||
|
||||
if (pin1 == 0)
|
||||
timer_uses_ioapic_pin_0 = 1;
|
||||
|
||||
apic_printk(APIC_VERBOSE,KERN_INFO "..TIMER: vector=0x%02X apic1=%d pin1=%d apic2=%d pin2=%d\n",
|
||||
vector, apic1, pin1, apic2, pin2);
|
||||
|
||||
|
|
|
@ -968,7 +968,17 @@ int mp_register_gsi(u32 gsi, int triggering, int polarity)
|
|||
*/
|
||||
int irq = gsi;
|
||||
if (gsi < MAX_GSI_NUM) {
|
||||
if (gsi > 15)
|
||||
/*
|
||||
* Retain the VIA chipset work-around (gsi > 15), but
|
||||
* avoid a problem where the 8254 timer (IRQ0) is setup
|
||||
* via an override (so it's not on pin 0 of the ioapic),
|
||||
* and at the same time, the pin 0 interrupt is a PCI
|
||||
* type. The gsi > 15 test could cause these two pins
|
||||
* to be shared as IRQ0, and they are not shareable.
|
||||
* So test for this condition, and if necessary, avoid
|
||||
* the pin collision.
|
||||
*/
|
||||
if (gsi > 15 || (gsi == 0 && !timer_uses_ioapic_pin_0))
|
||||
gsi = pci_irq++;
|
||||
/*
|
||||
* Don't assign IRQ used by ACPI SCI
|
||||
|
|
|
@ -639,6 +639,14 @@ static int __init pci_iommu_init(void)
|
|||
return -1;
|
||||
}
|
||||
|
||||
i = 0;
|
||||
for_all_nb(dev)
|
||||
i++;
|
||||
if (i > MAX_NB) {
|
||||
printk(KERN_ERR "PCI-GART: Too many northbridges (%ld). Disabled\n", i);
|
||||
return -1;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "PCI-DMA: using GART IOMMU.\n");
|
||||
aper_size = info.aper_size * 1024 * 1024;
|
||||
iommu_size = check_iommu_size(info.aper_base, aper_size);
|
||||
|
|
|
@ -571,17 +571,28 @@ static inline void copy_edd(void)
|
|||
#endif
|
||||
|
||||
#define EBDA_ADDR_POINTER 0x40E
|
||||
static void __init reserve_ebda_region(void)
|
||||
|
||||
unsigned __initdata ebda_addr;
|
||||
unsigned __initdata ebda_size;
|
||||
|
||||
static void discover_ebda(void)
|
||||
{
|
||||
unsigned int addr;
|
||||
/**
|
||||
/*
|
||||
* there is a real-mode segmented pointer pointing to the
|
||||
* 4K EBDA area at 0x40E
|
||||
*/
|
||||
addr = *(unsigned short *)phys_to_virt(EBDA_ADDR_POINTER);
|
||||
addr <<= 4;
|
||||
if (addr)
|
||||
reserve_bootmem_generic(addr, PAGE_SIZE);
|
||||
ebda_addr = *(unsigned short *)EBDA_ADDR_POINTER;
|
||||
ebda_addr <<= 4;
|
||||
|
||||
ebda_size = *(unsigned short *)(unsigned long)ebda_addr;
|
||||
|
||||
/* Round EBDA up to pages */
|
||||
if (ebda_size == 0)
|
||||
ebda_size = 1;
|
||||
ebda_size <<= 10;
|
||||
ebda_size = round_up(ebda_size + (ebda_addr & ~PAGE_MASK), PAGE_SIZE);
|
||||
if (ebda_size > 64*1024)
|
||||
ebda_size = 64*1024;
|
||||
}
|
||||
|
||||
void __init setup_arch(char **cmdline_p)
|
||||
|
@ -627,6 +638,8 @@ void __init setup_arch(char **cmdline_p)
|
|||
|
||||
check_efer();
|
||||
|
||||
discover_ebda();
|
||||
|
||||
init_memory_mapping(0, (end_pfn_map << PAGE_SHIFT));
|
||||
|
||||
dmi_scan_machine();
|
||||
|
@ -669,7 +682,8 @@ void __init setup_arch(char **cmdline_p)
|
|||
reserve_bootmem_generic(0, PAGE_SIZE);
|
||||
|
||||
/* reserve ebda region */
|
||||
reserve_ebda_region();
|
||||
if (ebda_addr)
|
||||
reserve_bootmem_generic(ebda_addr, ebda_size);
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
/*
|
||||
|
|
|
@ -385,6 +385,7 @@ void out_of_line_bug(void)
|
|||
|
||||
static DEFINE_SPINLOCK(die_lock);
|
||||
static int die_owner = -1;
|
||||
static unsigned int die_nest_count;
|
||||
|
||||
unsigned __kprobes long oops_begin(void)
|
||||
{
|
||||
|
@ -399,6 +400,7 @@ unsigned __kprobes long oops_begin(void)
|
|||
else
|
||||
spin_lock(&die_lock);
|
||||
}
|
||||
die_nest_count++;
|
||||
die_owner = cpu;
|
||||
console_verbose();
|
||||
bust_spinlocks(1);
|
||||
|
@ -409,7 +411,13 @@ void __kprobes oops_end(unsigned long flags)
|
|||
{
|
||||
die_owner = -1;
|
||||
bust_spinlocks(0);
|
||||
spin_unlock_irqrestore(&die_lock, flags);
|
||||
die_nest_count--;
|
||||
if (die_nest_count)
|
||||
/* We still own the lock */
|
||||
local_irq_restore(flags);
|
||||
else
|
||||
/* Nest count reaches zero, release the lock. */
|
||||
spin_unlock_irqrestore(&die_lock, flags);
|
||||
if (panic_on_oops)
|
||||
panic("Oops");
|
||||
}
|
||||
|
@ -464,6 +472,8 @@ void __kprobes die_nmi(char *str, struct pt_regs *regs)
|
|||
panic("nmi watchdog");
|
||||
printk("console shuts up ...\n");
|
||||
oops_end(flags);
|
||||
nmi_exit();
|
||||
local_irq_enable();
|
||||
do_exit(SIGSEGV);
|
||||
}
|
||||
|
||||
|
|
|
@ -333,6 +333,7 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
|
|||
{
|
||||
struct list_head *pos;
|
||||
unsigned ordseq;
|
||||
int unplug_it = 1;
|
||||
|
||||
blk_add_trace_rq(q, rq, BLK_TA_INSERT);
|
||||
|
||||
|
@ -399,6 +400,11 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
|
|||
}
|
||||
|
||||
list_add_tail(&rq->queuelist, pos);
|
||||
/*
|
||||
* most requeues happen because of a busy condition, don't
|
||||
* force unplug of the queue for that case.
|
||||
*/
|
||||
unplug_it = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -407,7 +413,7 @@ void elv_insert(request_queue_t *q, struct request *rq, int where)
|
|||
BUG();
|
||||
}
|
||||
|
||||
if (blk_queue_plugged(q)) {
|
||||
if (unplug_it && blk_queue_plugged(q)) {
|
||||
int nrq = q->rq.count[READ] + q->rq.count[WRITE]
|
||||
- q->in_flight;
|
||||
|
||||
|
|
|
@ -1732,8 +1732,21 @@ void blk_run_queue(struct request_queue *q)
|
|||
|
||||
spin_lock_irqsave(q->queue_lock, flags);
|
||||
blk_remove_plug(q);
|
||||
if (!elv_queue_empty(q))
|
||||
q->request_fn(q);
|
||||
|
||||
/*
|
||||
* Only recurse once to avoid overrunning the stack, let the unplug
|
||||
* handling reinvoke the handler shortly if we already got there.
|
||||
*/
|
||||
if (!elv_queue_empty(q)) {
|
||||
if (!test_and_set_bit(QUEUE_FLAG_REENTER, &q->queue_flags)) {
|
||||
q->request_fn(q);
|
||||
clear_bit(QUEUE_FLAG_REENTER, &q->queue_flags);
|
||||
} else {
|
||||
blk_plug_device(q);
|
||||
kblockd_schedule_work(&q->unplug_work);
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(q->queue_lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(blk_run_queue);
|
||||
|
|
|
@ -456,6 +456,35 @@ static void class_device_remove_attrs(struct class_device * cd)
|
|||
}
|
||||
}
|
||||
|
||||
static int class_device_add_groups(struct class_device * cd)
|
||||
{
|
||||
int i;
|
||||
int error = 0;
|
||||
|
||||
if (cd->groups) {
|
||||
for (i = 0; cd->groups[i]; i++) {
|
||||
error = sysfs_create_group(&cd->kobj, cd->groups[i]);
|
||||
if (error) {
|
||||
while (--i >= 0)
|
||||
sysfs_remove_group(&cd->kobj, cd->groups[i]);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
out:
|
||||
return error;
|
||||
}
|
||||
|
||||
static void class_device_remove_groups(struct class_device * cd)
|
||||
{
|
||||
int i;
|
||||
if (cd->groups) {
|
||||
for (i = 0; cd->groups[i]; i++) {
|
||||
sysfs_remove_group(&cd->kobj, cd->groups[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static ssize_t show_dev(struct class_device *class_dev, char *buf)
|
||||
{
|
||||
return print_dev_t(buf, class_dev->devt);
|
||||
|
@ -559,6 +588,8 @@ int class_device_add(struct class_device *class_dev)
|
|||
class_name);
|
||||
}
|
||||
|
||||
class_device_add_groups(class_dev);
|
||||
|
||||
kobject_uevent(&class_dev->kobj, KOBJ_ADD);
|
||||
|
||||
/* notify any interfaces this device is now here */
|
||||
|
@ -672,6 +703,7 @@ void class_device_del(struct class_device *class_dev)
|
|||
if (class_dev->devt_attr)
|
||||
class_device_remove_file(class_dev, class_dev->devt_attr);
|
||||
class_device_remove_attrs(class_dev);
|
||||
class_device_remove_groups(class_dev);
|
||||
|
||||
kobject_uevent(&class_dev->kobj, KOBJ_REMOVE);
|
||||
kobject_del(&class_dev->kobj);
|
||||
|
|
|
@ -536,6 +536,9 @@ static void ub_cleanup(struct ub_dev *sc)
|
|||
kfree(lun);
|
||||
}
|
||||
|
||||
usb_set_intfdata(sc->intf, NULL);
|
||||
usb_put_intf(sc->intf);
|
||||
usb_put_dev(sc->dev);
|
||||
kfree(sc);
|
||||
}
|
||||
|
||||
|
@ -2221,7 +2224,12 @@ static int ub_probe(struct usb_interface *intf,
|
|||
// sc->ifnum = intf->cur_altsetting->desc.bInterfaceNumber;
|
||||
usb_set_intfdata(intf, sc);
|
||||
usb_get_dev(sc->dev);
|
||||
// usb_get_intf(sc->intf); /* Do we need this? */
|
||||
/*
|
||||
* Since we give the interface struct to the block level through
|
||||
* disk->driverfs_dev, we have to pin it. Otherwise, block_uevent
|
||||
* oopses on close after a disconnect (kernels 2.6.16 and up).
|
||||
*/
|
||||
usb_get_intf(sc->intf);
|
||||
|
||||
snprintf(sc->name, 12, DRV_NAME "(%d.%d)",
|
||||
sc->dev->bus->busnum, sc->dev->devnum);
|
||||
|
@ -2286,7 +2294,7 @@ static int ub_probe(struct usb_interface *intf,
|
|||
|
||||
err_dev_desc:
|
||||
usb_set_intfdata(intf, NULL);
|
||||
// usb_put_intf(sc->intf);
|
||||
usb_put_intf(sc->intf);
|
||||
usb_put_dev(sc->dev);
|
||||
kfree(sc);
|
||||
err_core:
|
||||
|
@ -2461,12 +2469,6 @@ static void ub_disconnect(struct usb_interface *intf)
|
|||
* and no URBs left in transit.
|
||||
*/
|
||||
|
||||
usb_set_intfdata(intf, NULL);
|
||||
// usb_put_intf(sc->intf);
|
||||
sc->intf = NULL;
|
||||
usb_put_dev(sc->dev);
|
||||
sc->dev = NULL;
|
||||
|
||||
ub_put(sc);
|
||||
}
|
||||
|
||||
|
|
|
@ -291,7 +291,7 @@ config SX
|
|||
|
||||
config RIO
|
||||
tristate "Specialix RIO system support"
|
||||
depends on SERIAL_NONSTANDARD && !64BIT
|
||||
depends on SERIAL_NONSTANDARD
|
||||
help
|
||||
This is a driver for the Specialix RIO, a smart serial card which
|
||||
drives an outboard box that can support up to 128 ports. Product
|
||||
|
|
|
@ -1981,10 +1981,6 @@ static int __init cmm_init(void)
|
|||
if (!cmm_class)
|
||||
return -1;
|
||||
|
||||
rc = pcmcia_register_driver(&cm4000_driver);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
major = register_chrdev(0, DEVICE_NAME, &cm4000_fops);
|
||||
if (major < 0) {
|
||||
printk(KERN_WARNING MODULE_NAME
|
||||
|
@ -1992,6 +1988,12 @@ static int __init cmm_init(void)
|
|||
return -1;
|
||||
}
|
||||
|
||||
rc = pcmcia_register_driver(&cm4000_driver);
|
||||
if (rc < 0) {
|
||||
unregister_chrdev(major, DEVICE_NAME);
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -724,16 +724,19 @@ static int __init cm4040_init(void)
|
|||
if (!cmx_class)
|
||||
return -1;
|
||||
|
||||
rc = pcmcia_register_driver(&reader_driver);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
major = register_chrdev(0, DEVICE_NAME, &reader_fops);
|
||||
if (major < 0) {
|
||||
printk(KERN_WARNING MODULE_NAME
|
||||
": could not get major number\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = pcmcia_register_driver(&reader_driver);
|
||||
if (rc < 0) {
|
||||
unregister_chrdev(major, DEVICE_NAME);
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -33,12 +33,6 @@
|
|||
#ifndef __rio_host_h__
|
||||
#define __rio_host_h__
|
||||
|
||||
#ifdef SCCS_LABELS
|
||||
#ifndef lint
|
||||
static char *_host_h_sccs_ = "@(#)host.h 1.2";
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
** the host structure - one per host card in the system.
|
||||
*/
|
||||
|
@ -77,9 +71,6 @@ struct Host {
|
|||
#define RC_STARTUP 1
|
||||
#define RC_RUNNING 2
|
||||
#define RC_STUFFED 3
|
||||
#define RC_SOMETHING 4
|
||||
#define RC_SOMETHING_NEW 5
|
||||
#define RC_SOMETHING_ELSE 6
|
||||
#define RC_READY 7
|
||||
#define RUN_STATE 7
|
||||
/*
|
||||
|
|
|
@ -34,6 +34,7 @@
|
|||
#include <linux/slab.h>
|
||||
#include <linux/termios.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <linux/generic_serial.h>
|
||||
#include <linux/errno.h>
|
||||
|
|
|
@ -1394,14 +1394,17 @@ int RIOPreemptiveCmd(struct rio_info *p, struct Port *PortP, u8 Cmd)
|
|||
return RIO_FAIL;
|
||||
}
|
||||
|
||||
if (((int) ((char) PortP->InUse) == -1) || !(CmdBlkP = RIOGetCmdBlk())) {
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Cannot allocate command block for command %d on port %d\n", Cmd, PortP->PortNum);
|
||||
if ((PortP->InUse == (typeof(PortP->InUse))-1) ||
|
||||
!(CmdBlkP = RIOGetCmdBlk())) {
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Cannot allocate command block "
|
||||
"for command %d on port %d\n", Cmd, PortP->PortNum);
|
||||
return RIO_FAIL;
|
||||
}
|
||||
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Command blk %p - InUse now %d\n", CmdBlkP, PortP->InUse);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Command blk %p - InUse now %d\n",
|
||||
CmdBlkP, PortP->InUse);
|
||||
|
||||
PktCmdP = (struct PktCmd_M *) &CmdBlkP->Packet.data[0];
|
||||
PktCmdP = (struct PktCmd_M *)&CmdBlkP->Packet.data[0];
|
||||
|
||||
CmdBlkP->Packet.src_unit = 0;
|
||||
if (PortP->SecondBlock)
|
||||
|
@ -1425,38 +1428,46 @@ int RIOPreemptiveCmd(struct rio_info *p, struct Port *PortP, u8 Cmd)
|
|||
|
||||
switch (Cmd) {
|
||||
case MEMDUMP:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MEMDUMP command blk %p (addr 0x%x)\n", CmdBlkP, (int) SubCmd.Addr);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MEMDUMP command blk %p "
|
||||
"(addr 0x%x)\n", CmdBlkP, (int) SubCmd.Addr);
|
||||
PktCmdP->SubCommand = MEMDUMP;
|
||||
PktCmdP->SubAddr = SubCmd.Addr;
|
||||
break;
|
||||
case FCLOSE:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue FCLOSE command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue FCLOSE command blk %p\n",
|
||||
CmdBlkP);
|
||||
break;
|
||||
case READ_REGISTER:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) command blk %p\n", (int) SubCmd.Addr, CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue READ_REGISTER (0x%x) "
|
||||
"command blk %p\n", (int) SubCmd.Addr, CmdBlkP);
|
||||
PktCmdP->SubCommand = READ_REGISTER;
|
||||
PktCmdP->SubAddr = SubCmd.Addr;
|
||||
break;
|
||||
case RESUME:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue RESUME command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue RESUME command blk %p\n",
|
||||
CmdBlkP);
|
||||
break;
|
||||
case RFLUSH:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue RFLUSH command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue RFLUSH command blk %p\n",
|
||||
CmdBlkP);
|
||||
CmdBlkP->PostFuncP = RIORFlushEnable;
|
||||
break;
|
||||
case SUSPEND:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue SUSPEND command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue SUSPEND command blk %p\n",
|
||||
CmdBlkP);
|
||||
break;
|
||||
|
||||
case MGET:
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MGET command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MGET command blk %p\n",
|
||||
CmdBlkP);
|
||||
break;
|
||||
|
||||
case MSET:
|
||||
case MBIC:
|
||||
case MBIS:
|
||||
CmdBlkP->Packet.data[4] = (char) PortP->ModemLines;
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue MSET/MBIC/MBIS command "
|
||||
"blk %p\n", CmdBlkP);
|
||||
break;
|
||||
|
||||
case WFLUSH:
|
||||
|
@ -1465,12 +1476,14 @@ int RIOPreemptiveCmd(struct rio_info *p, struct Port *PortP, u8 Cmd)
|
|||
** allowed then we should not bother sending any more to the
|
||||
** RTA.
|
||||
*/
|
||||
if ((int) ((char) PortP->WflushFlag) == (int) -1) {
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Trashed WFLUSH, WflushFlag about to wrap!");
|
||||
if (PortP->WflushFlag == (typeof(PortP->WflushFlag))-1) {
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Trashed WFLUSH, "
|
||||
"WflushFlag about to wrap!");
|
||||
RIOFreeCmdBlk(CmdBlkP);
|
||||
return (RIO_FAIL);
|
||||
} else {
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue WFLUSH command blk %p\n", CmdBlkP);
|
||||
rio_dprintk(RIO_DEBUG_CTRL, "Queue WFLUSH command "
|
||||
"blk %p\n", CmdBlkP);
|
||||
CmdBlkP->PostFuncP = RIOWFlushMark;
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -33,10 +33,6 @@
|
|||
#ifndef __rioioctl_h__
|
||||
#define __rioioctl_h__
|
||||
|
||||
#ifdef SCCS_LABELS
|
||||
static char *_rioioctl_h_sccs_ = "@(#)rioioctl.h 1.2";
|
||||
#endif
|
||||
|
||||
/*
|
||||
** RIO device driver - user ioctls and associated structures.
|
||||
*/
|
||||
|
@ -44,55 +40,13 @@ static char *_rioioctl_h_sccs_ = "@(#)rioioctl.h 1.2";
|
|||
struct portStats {
|
||||
int port;
|
||||
int gather;
|
||||
ulong txchars;
|
||||
ulong rxchars;
|
||||
ulong opens;
|
||||
ulong closes;
|
||||
ulong ioctls;
|
||||
unsigned long txchars;
|
||||
unsigned long rxchars;
|
||||
unsigned long opens;
|
||||
unsigned long closes;
|
||||
unsigned long ioctls;
|
||||
};
|
||||
|
||||
|
||||
#define rIOC ('r'<<8)
|
||||
#define TCRIOSTATE (rIOC | 1)
|
||||
#define TCRIOXPON (rIOC | 2)
|
||||
#define TCRIOXPOFF (rIOC | 3)
|
||||
#define TCRIOXPCPS (rIOC | 4)
|
||||
#define TCRIOXPRINT (rIOC | 5)
|
||||
#define TCRIOIXANYON (rIOC | 6)
|
||||
#define TCRIOIXANYOFF (rIOC | 7)
|
||||
#define TCRIOIXONON (rIOC | 8)
|
||||
#define TCRIOIXONOFF (rIOC | 9)
|
||||
#define TCRIOMBIS (rIOC | 10)
|
||||
#define TCRIOMBIC (rIOC | 11)
|
||||
#define TCRIOTRIAD (rIOC | 12)
|
||||
#define TCRIOTSTATE (rIOC | 13)
|
||||
|
||||
/*
|
||||
** 15.10.1998 ARG - ESIL 0761 part fix
|
||||
** Add RIO ioctls for manipulating RTS and CTS flow control, (as LynxOS
|
||||
** appears to not support hardware flow control).
|
||||
*/
|
||||
#define TCRIOCTSFLOWEN (rIOC | 14) /* enable CTS flow control */
|
||||
#define TCRIOCTSFLOWDIS (rIOC | 15) /* disable CTS flow control */
|
||||
#define TCRIORTSFLOWEN (rIOC | 16) /* enable RTS flow control */
|
||||
#define TCRIORTSFLOWDIS (rIOC | 17) /* disable RTS flow control */
|
||||
|
||||
/*
|
||||
** 09.12.1998 ARG - ESIL 0776 part fix
|
||||
** Definition for 'RIOC' also appears in daemon.h, so we'd better do a
|
||||
** #ifndef here first.
|
||||
** 'RIO_QUICK_CHECK' also #define'd here as this ioctl is now
|
||||
** allowed to be used by customers.
|
||||
**
|
||||
** 05.02.1999 ARG -
|
||||
** This is what I've decied to do with ioctls etc., which are intended to be
|
||||
** invoked from users applications :
|
||||
** Anything that needs to be defined here will be removed from daemon.h, that
|
||||
** way it won't end up having to be defined/maintained in two places. The only
|
||||
** consequence of this is that this file should now be #include'd by daemon.h
|
||||
**
|
||||
** 'stats' ioctls now #define'd here as they are to be used by customers.
|
||||
*/
|
||||
#define RIOC ('R'<<8)|('i'<<16)|('o'<<24)
|
||||
|
||||
#define RIO_QUICK_CHECK (RIOC | 105)
|
||||
|
|
|
@ -22,7 +22,7 @@ config TCG_TPM
|
|||
|
||||
config TCG_TIS
|
||||
tristate "TPM Interface Specification 1.2 Interface"
|
||||
depends on TCG_TPM
|
||||
depends on TCG_TPM && PNPACPI
|
||||
---help---
|
||||
If you have a TPM security chip that is compliant with the
|
||||
TCG TIS 1.2 TPM specification say Yes and it will be accessible
|
||||
|
|
|
@ -140,7 +140,7 @@ extern int tpm_pm_resume(struct device *);
|
|||
extern struct dentry ** tpm_bios_log_setup(char *);
|
||||
extern void tpm_bios_log_teardown(struct dentry **);
|
||||
#else
|
||||
static inline struct dentry* tpm_bios_log_setup(char *name)
|
||||
static inline struct dentry ** tpm_bios_log_setup(char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -55,7 +55,7 @@ enum tis_int_flags {
|
|||
};
|
||||
|
||||
enum tis_defaults {
|
||||
TIS_MEM_BASE = 0xFED4000,
|
||||
TIS_MEM_BASE = 0xFED40000,
|
||||
TIS_MEM_LEN = 0x5000,
|
||||
TIS_SHORT_TIMEOUT = 750, /* ms */
|
||||
TIS_LONG_TIMEOUT = 2000, /* 2 sec */
|
||||
|
|
|
@ -74,6 +74,8 @@ static unsigned int dbs_enable; /* number of CPUs using this policy */
|
|||
static DEFINE_MUTEX (dbs_mutex);
|
||||
static DECLARE_WORK (dbs_work, do_dbs_timer, NULL);
|
||||
|
||||
static struct workqueue_struct *dbs_workq;
|
||||
|
||||
struct dbs_tuners {
|
||||
unsigned int sampling_rate;
|
||||
unsigned int sampling_down_factor;
|
||||
|
@ -364,23 +366,29 @@ static void do_dbs_timer(void *data)
|
|||
mutex_lock(&dbs_mutex);
|
||||
for_each_online_cpu(i)
|
||||
dbs_check_cpu(i);
|
||||
schedule_delayed_work(&dbs_work,
|
||||
usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
|
||||
queue_delayed_work(dbs_workq, &dbs_work,
|
||||
usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
|
||||
mutex_unlock(&dbs_mutex);
|
||||
}
|
||||
|
||||
static inline void dbs_timer_init(void)
|
||||
{
|
||||
INIT_WORK(&dbs_work, do_dbs_timer, NULL);
|
||||
schedule_delayed_work(&dbs_work,
|
||||
usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
|
||||
if (!dbs_workq)
|
||||
dbs_workq = create_singlethread_workqueue("ondemand");
|
||||
if (!dbs_workq) {
|
||||
printk(KERN_ERR "ondemand: Cannot initialize kernel thread\n");
|
||||
return;
|
||||
}
|
||||
queue_delayed_work(dbs_workq, &dbs_work,
|
||||
usecs_to_jiffies(dbs_tuners_ins.sampling_rate));
|
||||
return;
|
||||
}
|
||||
|
||||
static inline void dbs_timer_exit(void)
|
||||
{
|
||||
cancel_delayed_work(&dbs_work);
|
||||
return;
|
||||
if (dbs_workq)
|
||||
cancel_rearming_delayed_workqueue(dbs_workq, &dbs_work);
|
||||
}
|
||||
|
||||
static int cpufreq_governor_dbs(struct cpufreq_policy *policy,
|
||||
|
@ -489,8 +497,12 @@ static int __init cpufreq_gov_dbs_init(void)
|
|||
|
||||
static void __exit cpufreq_gov_dbs_exit(void)
|
||||
{
|
||||
/* Make sure that the scheduled work is indeed not running */
|
||||
flush_scheduled_work();
|
||||
/* Make sure that the scheduled work is indeed not running.
|
||||
Assumes the timer has been cancelled first. */
|
||||
if (dbs_workq) {
|
||||
flush_workqueue(dbs_workq);
|
||||
destroy_workqueue(dbs_workq);
|
||||
}
|
||||
|
||||
cpufreq_unregister_governor(&cpufreq_gov_dbs);
|
||||
}
|
||||
|
|
|
@ -25,6 +25,8 @@
|
|||
#include <linux/slab.h>
|
||||
#include "edac_mc.h"
|
||||
|
||||
static int force_function_unhide;
|
||||
|
||||
#define e752x_printk(level, fmt, arg...) \
|
||||
edac_printk(level, "e752x", fmt, ##arg)
|
||||
|
||||
|
@ -782,8 +784,16 @@ static int e752x_probe1(struct pci_dev *pdev, int dev_idx)
|
|||
debugf0("%s(): mci\n", __func__);
|
||||
debugf0("Starting Probe1\n");
|
||||
|
||||
/* enable device 0 function 1 */
|
||||
/* check to see if device 0 function 1 is enabled; if it isn't, we
|
||||
* assume the BIOS has reserved it for a reason and is expecting
|
||||
* exclusive access, we take care not to violate that assumption and
|
||||
* fail the probe. */
|
||||
pci_read_config_byte(pdev, E752X_DEVPRES1, &stat8);
|
||||
if (!force_function_unhide && !(stat8 & (1 << 5))) {
|
||||
printk(KERN_INFO "Contact your BIOS vendor to see if the "
|
||||
"E752x error registers can be safely un-hidden\n");
|
||||
goto fail;
|
||||
}
|
||||
stat8 |= (1 << 5);
|
||||
pci_write_config_byte(pdev, E752X_DEVPRES1, stat8);
|
||||
|
||||
|
@ -1063,3 +1073,8 @@ module_exit(e752x_exit);
|
|||
MODULE_LICENSE("GPL");
|
||||
MODULE_AUTHOR("Linux Networx (http://lnxi.com) Tom Zimmerman\n");
|
||||
MODULE_DESCRIPTION("MC support for Intel e752x memory controllers");
|
||||
|
||||
module_param(force_function_unhide, int, 0444);
|
||||
MODULE_PARM_DESC(force_function_unhide, "if BIOS sets Dev0:Fun1 up as hidden:"
|
||||
" 1=force unhide and hope BIOS doesn't fight driver for Dev0:Fun1 access");
|
||||
|
||||
|
|
|
@ -133,6 +133,9 @@ static void scx200_acb_machine(struct scx200_acb_iface *iface, u8 status)
|
|||
|
||||
outb(inb(ACBCTL1) | ACBCTL1_STOP, ACBCTL1);
|
||||
outb(ACBST_STASTR | ACBST_NEGACK, ACBST);
|
||||
|
||||
/* Reset the status register */
|
||||
outb(0, ACBST);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -228,6 +231,10 @@ static void scx200_acb_poll(struct scx200_acb_iface *iface)
|
|||
timeout = jiffies + POLL_TIMEOUT;
|
||||
while (time_before(jiffies, timeout)) {
|
||||
status = inb(ACBST);
|
||||
|
||||
/* Reset the status register to avoid the hang */
|
||||
outb(0, ACBST);
|
||||
|
||||
if ((status & (ACBST_SDAST|ACBST_BER|ACBST_NEGACK)) != 0) {
|
||||
scx200_acb_machine(iface, status);
|
||||
return;
|
||||
|
@ -415,7 +422,6 @@ static int __init scx200_acb_create(const char *text, int base, int index)
|
|||
struct scx200_acb_iface *iface;
|
||||
struct i2c_adapter *adapter;
|
||||
int rc;
|
||||
char description[64];
|
||||
|
||||
iface = kzalloc(sizeof(*iface), GFP_KERNEL);
|
||||
if (!iface) {
|
||||
|
@ -434,10 +440,7 @@ static int __init scx200_acb_create(const char *text, int base, int index)
|
|||
|
||||
mutex_init(&iface->mutex);
|
||||
|
||||
snprintf(description, sizeof(description), "%s ACCESS.bus [%s]",
|
||||
text, adapter->name);
|
||||
|
||||
if (request_region(base, 8, description) == 0) {
|
||||
if (!request_region(base, 8, adapter->name)) {
|
||||
printk(KERN_ERR NAME ": can't allocate io 0x%x-0x%x\n",
|
||||
base, base + 8-1);
|
||||
rc = -EBUSY;
|
||||
|
@ -524,6 +527,9 @@ static int __init scx200_acb_init(void)
|
|||
} else if (pci_dev_present(divil_pci))
|
||||
rc = scx200_add_cs553x();
|
||||
|
||||
/* If at least one bus was created, init must succeed */
|
||||
if (scx200_acb_list)
|
||||
return 0;
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -392,6 +392,7 @@ static struct pcmcia_device_id ide_ids[] = {
|
|||
PCMCIA_DEVICE_PROD_ID12("FREECOM", "PCCARD-IDE", 0x5714cbf7, 0x48e0ab8e),
|
||||
PCMCIA_DEVICE_PROD_ID12("HITACHI", "FLASH", 0xf4f43949, 0x9eb86aae),
|
||||
PCMCIA_DEVICE_PROD_ID12("HITACHI", "microdrive", 0xf4f43949, 0xa6d76178),
|
||||
PCMCIA_DEVICE_PROD_ID12("IBM", "microdrive", 0xb569a6e5, 0xa6d76178),
|
||||
PCMCIA_DEVICE_PROD_ID12("IBM", "IBM17JSSFP20", 0xb569a6e5, 0xf2508753),
|
||||
PCMCIA_DEVICE_PROD_ID12("IO DATA", "CBIDE2 ", 0x547e66dc, 0x8671043b),
|
||||
PCMCIA_DEVICE_PROD_ID12("IO DATA", "PCIDE", 0x547e66dc, 0x5c5ab149),
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
*
|
||||
* $Id: cm.c 2821 2005-07-08 17:07:28Z sean.hefty $
|
||||
*/
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/idr.h>
|
||||
|
@ -122,7 +124,7 @@ struct cm_id_private {
|
|||
struct rb_node service_node;
|
||||
struct rb_node sidr_id_node;
|
||||
spinlock_t lock; /* Do not acquire inside cm.lock */
|
||||
wait_queue_head_t wait;
|
||||
struct completion comp;
|
||||
atomic_t refcount;
|
||||
|
||||
struct ib_mad_send_buf *msg;
|
||||
|
@ -159,7 +161,7 @@ static void cm_work_handler(void *data);
|
|||
static inline void cm_deref_id(struct cm_id_private *cm_id_priv)
|
||||
{
|
||||
if (atomic_dec_and_test(&cm_id_priv->refcount))
|
||||
wake_up(&cm_id_priv->wait);
|
||||
complete(&cm_id_priv->comp);
|
||||
}
|
||||
|
||||
static int cm_alloc_msg(struct cm_id_private *cm_id_priv,
|
||||
|
@ -559,7 +561,7 @@ struct ib_cm_id *ib_create_cm_id(struct ib_device *device,
|
|||
goto error;
|
||||
|
||||
spin_lock_init(&cm_id_priv->lock);
|
||||
init_waitqueue_head(&cm_id_priv->wait);
|
||||
init_completion(&cm_id_priv->comp);
|
||||
INIT_LIST_HEAD(&cm_id_priv->work_list);
|
||||
atomic_set(&cm_id_priv->work_count, -1);
|
||||
atomic_set(&cm_id_priv->refcount, 1);
|
||||
|
@ -724,8 +726,8 @@ retest:
|
|||
}
|
||||
|
||||
cm_free_id(cm_id->local_id);
|
||||
atomic_dec(&cm_id_priv->refcount);
|
||||
wait_event(cm_id_priv->wait, !atomic_read(&cm_id_priv->refcount));
|
||||
cm_deref_id(cm_id_priv);
|
||||
wait_for_completion(&cm_id_priv->comp);
|
||||
while ((work = cm_dequeue_work(cm_id_priv)) != NULL)
|
||||
cm_free_work(work);
|
||||
if (cm_id_priv->private_data && cm_id_priv->private_data_len)
|
||||
|
|
|
@ -352,7 +352,7 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
|
|||
INIT_WORK(&mad_agent_priv->local_work, local_completions,
|
||||
mad_agent_priv);
|
||||
atomic_set(&mad_agent_priv->refcount, 1);
|
||||
init_waitqueue_head(&mad_agent_priv->wait);
|
||||
init_completion(&mad_agent_priv->comp);
|
||||
|
||||
return &mad_agent_priv->agent;
|
||||
|
||||
|
@ -467,7 +467,7 @@ struct ib_mad_agent *ib_register_mad_snoop(struct ib_device *device,
|
|||
mad_snoop_priv->agent.qp = port_priv->qp_info[qpn].qp;
|
||||
mad_snoop_priv->agent.port_num = port_num;
|
||||
mad_snoop_priv->mad_snoop_flags = mad_snoop_flags;
|
||||
init_waitqueue_head(&mad_snoop_priv->wait);
|
||||
init_completion(&mad_snoop_priv->comp);
|
||||
mad_snoop_priv->snoop_index = register_snoop_agent(
|
||||
&port_priv->qp_info[qpn],
|
||||
mad_snoop_priv);
|
||||
|
@ -486,6 +486,18 @@ error1:
|
|||
}
|
||||
EXPORT_SYMBOL(ib_register_mad_snoop);
|
||||
|
||||
static inline void deref_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
|
||||
{
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
complete(&mad_agent_priv->comp);
|
||||
}
|
||||
|
||||
static inline void deref_snoop_agent(struct ib_mad_snoop_private *mad_snoop_priv)
|
||||
{
|
||||
if (atomic_dec_and_test(&mad_snoop_priv->refcount))
|
||||
complete(&mad_snoop_priv->comp);
|
||||
}
|
||||
|
||||
static void unregister_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
|
||||
{
|
||||
struct ib_mad_port_private *port_priv;
|
||||
|
@ -509,9 +521,8 @@ static void unregister_mad_agent(struct ib_mad_agent_private *mad_agent_priv)
|
|||
flush_workqueue(port_priv->wq);
|
||||
ib_cancel_rmpp_recvs(mad_agent_priv);
|
||||
|
||||
atomic_dec(&mad_agent_priv->refcount);
|
||||
wait_event(mad_agent_priv->wait,
|
||||
!atomic_read(&mad_agent_priv->refcount));
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
wait_for_completion(&mad_agent_priv->comp);
|
||||
|
||||
kfree(mad_agent_priv->reg_req);
|
||||
ib_dereg_mr(mad_agent_priv->agent.mr);
|
||||
|
@ -529,9 +540,8 @@ static void unregister_mad_snoop(struct ib_mad_snoop_private *mad_snoop_priv)
|
|||
atomic_dec(&qp_info->snoop_count);
|
||||
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
|
||||
|
||||
atomic_dec(&mad_snoop_priv->refcount);
|
||||
wait_event(mad_snoop_priv->wait,
|
||||
!atomic_read(&mad_snoop_priv->refcount));
|
||||
deref_snoop_agent(mad_snoop_priv);
|
||||
wait_for_completion(&mad_snoop_priv->comp);
|
||||
|
||||
kfree(mad_snoop_priv);
|
||||
}
|
||||
|
@ -600,8 +610,7 @@ static void snoop_send(struct ib_mad_qp_info *qp_info,
|
|||
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
|
||||
mad_snoop_priv->agent.snoop_handler(&mad_snoop_priv->agent,
|
||||
send_buf, mad_send_wc);
|
||||
if (atomic_dec_and_test(&mad_snoop_priv->refcount))
|
||||
wake_up(&mad_snoop_priv->wait);
|
||||
deref_snoop_agent(mad_snoop_priv);
|
||||
spin_lock_irqsave(&qp_info->snoop_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
|
||||
|
@ -626,8 +635,7 @@ static void snoop_recv(struct ib_mad_qp_info *qp_info,
|
|||
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
|
||||
mad_snoop_priv->agent.recv_handler(&mad_snoop_priv->agent,
|
||||
mad_recv_wc);
|
||||
if (atomic_dec_and_test(&mad_snoop_priv->refcount))
|
||||
wake_up(&mad_snoop_priv->wait);
|
||||
deref_snoop_agent(mad_snoop_priv);
|
||||
spin_lock_irqsave(&qp_info->snoop_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&qp_info->snoop_lock, flags);
|
||||
|
@ -968,8 +976,7 @@ void ib_free_send_mad(struct ib_mad_send_buf *send_buf)
|
|||
|
||||
free_send_rmpp_list(mad_send_wr);
|
||||
kfree(send_buf->mad);
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
wake_up(&mad_agent_priv->wait);
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
}
|
||||
EXPORT_SYMBOL(ib_free_send_mad);
|
||||
|
||||
|
@ -1757,8 +1764,7 @@ static void ib_mad_complete_recv(struct ib_mad_agent_private *mad_agent_priv,
|
|||
mad_recv_wc = ib_process_rmpp_recv_wc(mad_agent_priv,
|
||||
mad_recv_wc);
|
||||
if (!mad_recv_wc) {
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
wake_up(&mad_agent_priv->wait);
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1770,8 +1776,7 @@ static void ib_mad_complete_recv(struct ib_mad_agent_private *mad_agent_priv,
|
|||
if (!mad_send_wr) {
|
||||
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
|
||||
ib_free_recv_mad(mad_recv_wc);
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
wake_up(&mad_agent_priv->wait);
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
return;
|
||||
}
|
||||
ib_mark_mad_done(mad_send_wr);
|
||||
|
@ -1790,8 +1795,7 @@ static void ib_mad_complete_recv(struct ib_mad_agent_private *mad_agent_priv,
|
|||
} else {
|
||||
mad_agent_priv->agent.recv_handler(&mad_agent_priv->agent,
|
||||
mad_recv_wc);
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
wake_up(&mad_agent_priv->wait);
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2021,8 +2025,7 @@ void ib_mad_complete_send_wr(struct ib_mad_send_wr_private *mad_send_wr,
|
|||
mad_send_wc);
|
||||
|
||||
/* Release reference on agent taken when sending */
|
||||
if (atomic_dec_and_test(&mad_agent_priv->refcount))
|
||||
wake_up(&mad_agent_priv->wait);
|
||||
deref_mad_agent(mad_agent_priv);
|
||||
return;
|
||||
done:
|
||||
spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
|
||||
|
|
|
@ -37,6 +37,7 @@
|
|||
#ifndef __IB_MAD_PRIV_H__
|
||||
#define __IB_MAD_PRIV_H__
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/workqueue.h>
|
||||
|
@ -108,7 +109,7 @@ struct ib_mad_agent_private {
|
|||
struct list_head rmpp_list;
|
||||
|
||||
atomic_t refcount;
|
||||
wait_queue_head_t wait;
|
||||
struct completion comp;
|
||||
};
|
||||
|
||||
struct ib_mad_snoop_private {
|
||||
|
@ -117,7 +118,7 @@ struct ib_mad_snoop_private {
|
|||
int snoop_index;
|
||||
int mad_snoop_flags;
|
||||
atomic_t refcount;
|
||||
wait_queue_head_t wait;
|
||||
struct completion comp;
|
||||
};
|
||||
|
||||
struct ib_mad_send_wr_private {
|
||||
|
|
|
@ -49,7 +49,7 @@ struct mad_rmpp_recv {
|
|||
struct list_head list;
|
||||
struct work_struct timeout_work;
|
||||
struct work_struct cleanup_work;
|
||||
wait_queue_head_t wait;
|
||||
struct completion comp;
|
||||
enum rmpp_state state;
|
||||
spinlock_t lock;
|
||||
atomic_t refcount;
|
||||
|
@ -69,10 +69,16 @@ struct mad_rmpp_recv {
|
|||
u8 method;
|
||||
};
|
||||
|
||||
static inline void deref_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
|
||||
{
|
||||
if (atomic_dec_and_test(&rmpp_recv->refcount))
|
||||
complete(&rmpp_recv->comp);
|
||||
}
|
||||
|
||||
static void destroy_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
|
||||
{
|
||||
atomic_dec(&rmpp_recv->refcount);
|
||||
wait_event(rmpp_recv->wait, !atomic_read(&rmpp_recv->refcount));
|
||||
deref_rmpp_recv(rmpp_recv);
|
||||
wait_for_completion(&rmpp_recv->comp);
|
||||
ib_destroy_ah(rmpp_recv->ah);
|
||||
kfree(rmpp_recv);
|
||||
}
|
||||
|
@ -253,7 +259,7 @@ create_rmpp_recv(struct ib_mad_agent_private *agent,
|
|||
goto error;
|
||||
|
||||
rmpp_recv->agent = agent;
|
||||
init_waitqueue_head(&rmpp_recv->wait);
|
||||
init_completion(&rmpp_recv->comp);
|
||||
INIT_WORK(&rmpp_recv->timeout_work, recv_timeout_handler, rmpp_recv);
|
||||
INIT_WORK(&rmpp_recv->cleanup_work, recv_cleanup_handler, rmpp_recv);
|
||||
spin_lock_init(&rmpp_recv->lock);
|
||||
|
@ -279,12 +285,6 @@ error: kfree(rmpp_recv);
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static inline void deref_rmpp_recv(struct mad_rmpp_recv *rmpp_recv)
|
||||
{
|
||||
if (atomic_dec_and_test(&rmpp_recv->refcount))
|
||||
wake_up(&rmpp_recv->wait);
|
||||
}
|
||||
|
||||
static struct mad_rmpp_recv *
|
||||
find_rmpp_recv(struct ib_mad_agent_private *agent,
|
||||
struct ib_mad_recv_wc *mad_recv_wc)
|
||||
|
|
|
@ -336,7 +336,7 @@ static ssize_t show_pma_counter(struct ib_port *p, struct port_attribute *attr,
|
|||
switch (width) {
|
||||
case 4:
|
||||
ret = sprintf(buf, "%u\n", (out_mad->data[40 + offset / 8] >>
|
||||
(offset % 4)) & 0xf);
|
||||
(4 - (offset % 8))) & 0xf);
|
||||
break;
|
||||
case 8:
|
||||
ret = sprintf(buf, "%u\n", out_mad->data[40 + offset / 8]);
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
*
|
||||
* $Id: ucm.c 2594 2005-06-13 19:46:02Z libor $
|
||||
*/
|
||||
|
||||
#include <linux/completion.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/module.h>
|
||||
|
@ -72,7 +74,7 @@ struct ib_ucm_file {
|
|||
|
||||
struct ib_ucm_context {
|
||||
int id;
|
||||
wait_queue_head_t wait;
|
||||
struct completion comp;
|
||||
atomic_t ref;
|
||||
int events_reported;
|
||||
|
||||
|
@ -138,7 +140,7 @@ static struct ib_ucm_context *ib_ucm_ctx_get(struct ib_ucm_file *file, int id)
|
|||
static void ib_ucm_ctx_put(struct ib_ucm_context *ctx)
|
||||
{
|
||||
if (atomic_dec_and_test(&ctx->ref))
|
||||
wake_up(&ctx->wait);
|
||||
complete(&ctx->comp);
|
||||
}
|
||||
|
||||
static inline int ib_ucm_new_cm_id(int event)
|
||||
|
@ -178,7 +180,7 @@ static struct ib_ucm_context *ib_ucm_ctx_alloc(struct ib_ucm_file *file)
|
|||
return NULL;
|
||||
|
||||
atomic_set(&ctx->ref, 1);
|
||||
init_waitqueue_head(&ctx->wait);
|
||||
init_completion(&ctx->comp);
|
||||
ctx->file = file;
|
||||
INIT_LIST_HEAD(&ctx->events);
|
||||
|
||||
|
@ -586,8 +588,8 @@ static ssize_t ib_ucm_destroy_id(struct ib_ucm_file *file,
|
|||
if (IS_ERR(ctx))
|
||||
return PTR_ERR(ctx);
|
||||
|
||||
atomic_dec(&ctx->ref);
|
||||
wait_event(ctx->wait, !atomic_read(&ctx->ref));
|
||||
ib_ucm_ctx_put(ctx);
|
||||
wait_for_completion(&ctx->comp);
|
||||
|
||||
/* No new events will be generated after destroying the cm_id. */
|
||||
ib_destroy_cm_id(ctx->cm_id);
|
||||
|
|
|
@ -116,10 +116,9 @@ static int __devinit ipath_init_one(struct pci_dev *,
|
|||
#define PCI_DEVICE_ID_INFINIPATH_PE800 0x10
|
||||
|
||||
static const struct pci_device_id ipath_pci_tbl[] = {
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE,
|
||||
PCI_DEVICE_ID_INFINIPATH_HT)},
|
||||
{PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE,
|
||||
PCI_DEVICE_ID_INFINIPATH_PE800)},
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_INFINIPATH_HT) },
|
||||
{ PCI_DEVICE(PCI_VENDOR_ID_PATHSCALE, PCI_DEVICE_ID_INFINIPATH_PE800) },
|
||||
{ 0, }
|
||||
};
|
||||
|
||||
MODULE_DEVICE_TABLE(pci, ipath_pci_tbl);
|
||||
|
|
|
@ -238,9 +238,9 @@ void mthca_cq_event(struct mthca_dev *dev, u32 cqn,
|
|||
spin_lock(&dev->cq_table.lock);
|
||||
|
||||
cq = mthca_array_get(&dev->cq_table.cq, cqn & (dev->limits.num_cqs - 1));
|
||||
|
||||
if (cq)
|
||||
atomic_inc(&cq->refcount);
|
||||
++cq->refcount;
|
||||
|
||||
spin_unlock(&dev->cq_table.lock);
|
||||
|
||||
if (!cq) {
|
||||
|
@ -254,8 +254,10 @@ void mthca_cq_event(struct mthca_dev *dev, u32 cqn,
|
|||
if (cq->ibcq.event_handler)
|
||||
cq->ibcq.event_handler(&event, cq->ibcq.cq_context);
|
||||
|
||||
if (atomic_dec_and_test(&cq->refcount))
|
||||
spin_lock(&dev->cq_table.lock);
|
||||
if (!--cq->refcount)
|
||||
wake_up(&cq->wait);
|
||||
spin_unlock(&dev->cq_table.lock);
|
||||
}
|
||||
|
||||
static inline int is_recv_cqe(struct mthca_cqe *cqe)
|
||||
|
@ -267,23 +269,13 @@ static inline int is_recv_cqe(struct mthca_cqe *cqe)
|
|||
return !(cqe->is_send & 0x80);
|
||||
}
|
||||
|
||||
void mthca_cq_clean(struct mthca_dev *dev, u32 cqn, u32 qpn,
|
||||
void mthca_cq_clean(struct mthca_dev *dev, struct mthca_cq *cq, u32 qpn,
|
||||
struct mthca_srq *srq)
|
||||
{
|
||||
struct mthca_cq *cq;
|
||||
struct mthca_cqe *cqe;
|
||||
u32 prod_index;
|
||||
int nfreed = 0;
|
||||
|
||||
spin_lock_irq(&dev->cq_table.lock);
|
||||
cq = mthca_array_get(&dev->cq_table.cq, cqn & (dev->limits.num_cqs - 1));
|
||||
if (cq)
|
||||
atomic_inc(&cq->refcount);
|
||||
spin_unlock_irq(&dev->cq_table.lock);
|
||||
|
||||
if (!cq)
|
||||
return;
|
||||
|
||||
spin_lock_irq(&cq->lock);
|
||||
|
||||
/*
|
||||
|
@ -301,7 +293,7 @@ void mthca_cq_clean(struct mthca_dev *dev, u32 cqn, u32 qpn,
|
|||
|
||||
if (0)
|
||||
mthca_dbg(dev, "Cleaning QPN %06x from CQN %06x; ci %d, pi %d\n",
|
||||
qpn, cqn, cq->cons_index, prod_index);
|
||||
qpn, cq->cqn, cq->cons_index, prod_index);
|
||||
|
||||
/*
|
||||
* Now sweep backwards through the CQ, removing CQ entries
|
||||
|
@ -325,8 +317,6 @@ void mthca_cq_clean(struct mthca_dev *dev, u32 cqn, u32 qpn,
|
|||
}
|
||||
|
||||
spin_unlock_irq(&cq->lock);
|
||||
if (atomic_dec_and_test(&cq->refcount))
|
||||
wake_up(&cq->wait);
|
||||
}
|
||||
|
||||
void mthca_cq_resize_copy_cqes(struct mthca_cq *cq)
|
||||
|
@ -821,7 +811,7 @@ int mthca_init_cq(struct mthca_dev *dev, int nent,
|
|||
}
|
||||
|
||||
spin_lock_init(&cq->lock);
|
||||
atomic_set(&cq->refcount, 1);
|
||||
cq->refcount = 1;
|
||||
init_waitqueue_head(&cq->wait);
|
||||
|
||||
memset(cq_context, 0, sizeof *cq_context);
|
||||
|
@ -896,6 +886,17 @@ err_out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static inline int get_cq_refcount(struct mthca_dev *dev, struct mthca_cq *cq)
|
||||
{
|
||||
int c;
|
||||
|
||||
spin_lock_irq(&dev->cq_table.lock);
|
||||
c = cq->refcount;
|
||||
spin_unlock_irq(&dev->cq_table.lock);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
void mthca_free_cq(struct mthca_dev *dev,
|
||||
struct mthca_cq *cq)
|
||||
{
|
||||
|
@ -929,6 +930,7 @@ void mthca_free_cq(struct mthca_dev *dev,
|
|||
spin_lock_irq(&dev->cq_table.lock);
|
||||
mthca_array_clear(&dev->cq_table.cq,
|
||||
cq->cqn & (dev->limits.num_cqs - 1));
|
||||
--cq->refcount;
|
||||
spin_unlock_irq(&dev->cq_table.lock);
|
||||
|
||||
if (dev->mthca_flags & MTHCA_FLAG_MSI_X)
|
||||
|
@ -936,8 +938,7 @@ void mthca_free_cq(struct mthca_dev *dev,
|
|||
else
|
||||
synchronize_irq(dev->pdev->irq);
|
||||
|
||||
atomic_dec(&cq->refcount);
|
||||
wait_event(cq->wait, !atomic_read(&cq->refcount));
|
||||
wait_event(cq->wait, !get_cq_refcount(dev, cq));
|
||||
|
||||
if (cq->is_kernel) {
|
||||
mthca_free_cq_buf(dev, &cq->buf, cq->ibcq.cqe);
|
||||
|
|
|
@ -496,7 +496,7 @@ void mthca_free_cq(struct mthca_dev *dev,
|
|||
void mthca_cq_completion(struct mthca_dev *dev, u32 cqn);
|
||||
void mthca_cq_event(struct mthca_dev *dev, u32 cqn,
|
||||
enum ib_event_type event_type);
|
||||
void mthca_cq_clean(struct mthca_dev *dev, u32 cqn, u32 qpn,
|
||||
void mthca_cq_clean(struct mthca_dev *dev, struct mthca_cq *cq, u32 qpn,
|
||||
struct mthca_srq *srq);
|
||||
void mthca_cq_resize_copy_cqes(struct mthca_cq *cq);
|
||||
int mthca_alloc_cq_buf(struct mthca_dev *dev, struct mthca_cq_buf *buf, int nent);
|
||||
|
|
|
@ -761,6 +761,7 @@ void mthca_arbel_fmr_unmap(struct mthca_dev *dev, struct mthca_fmr *fmr)
|
|||
|
||||
int __devinit mthca_init_mr_table(struct mthca_dev *dev)
|
||||
{
|
||||
unsigned long addr;
|
||||
int err, i;
|
||||
|
||||
err = mthca_alloc_init(&dev->mr_table.mpt_alloc,
|
||||
|
@ -796,9 +797,12 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev)
|
|||
goto err_fmr_mpt;
|
||||
}
|
||||
|
||||
addr = pci_resource_start(dev->pdev, 4) +
|
||||
((pci_resource_len(dev->pdev, 4) - 1) &
|
||||
dev->mr_table.mpt_base);
|
||||
|
||||
dev->mr_table.tavor_fmr.mpt_base =
|
||||
ioremap(dev->mr_table.mpt_base,
|
||||
(1 << i) * sizeof (struct mthca_mpt_entry));
|
||||
ioremap(addr, (1 << i) * sizeof(struct mthca_mpt_entry));
|
||||
|
||||
if (!dev->mr_table.tavor_fmr.mpt_base) {
|
||||
mthca_warn(dev, "MPT ioremap for FMR failed.\n");
|
||||
|
@ -806,9 +810,12 @@ int __devinit mthca_init_mr_table(struct mthca_dev *dev)
|
|||
goto err_fmr_mpt;
|
||||
}
|
||||
|
||||
addr = pci_resource_start(dev->pdev, 4) +
|
||||
((pci_resource_len(dev->pdev, 4) - 1) &
|
||||
dev->mr_table.mtt_base);
|
||||
|
||||
dev->mr_table.tavor_fmr.mtt_base =
|
||||
ioremap(dev->mr_table.mtt_base,
|
||||
(1 << i) * MTHCA_MTT_SEG_SIZE);
|
||||
ioremap(addr, (1 << i) * MTHCA_MTT_SEG_SIZE);
|
||||
if (!dev->mr_table.tavor_fmr.mtt_base) {
|
||||
mthca_warn(dev, "MTT ioremap for FMR failed.\n");
|
||||
err = -ENOMEM;
|
||||
|
|
|
@ -139,11 +139,12 @@ struct mthca_ah {
|
|||
* a qp may be locked, with the send cq locked first. No other
|
||||
* nesting should be done.
|
||||
*
|
||||
* Each struct mthca_cq/qp also has an atomic_t ref count. The
|
||||
* pointer from the cq/qp_table to the struct counts as one reference.
|
||||
* This reference also is good for access through the consumer API, so
|
||||
* modifying the CQ/QP etc doesn't need to take another reference.
|
||||
* Access because of a completion being polled does need a reference.
|
||||
* Each struct mthca_cq/qp also has an ref count, protected by the
|
||||
* corresponding table lock. The pointer from the cq/qp_table to the
|
||||
* struct counts as one reference. This reference also is good for
|
||||
* access through the consumer API, so modifying the CQ/QP etc doesn't
|
||||
* need to take another reference. Access to a QP because of a
|
||||
* completion being polled does not need a reference either.
|
||||
*
|
||||
* Finally, each struct mthca_cq/qp has a wait_queue_head_t for the
|
||||
* destroy function to sleep on.
|
||||
|
@ -159,8 +160,9 @@ struct mthca_ah {
|
|||
* - decrement ref count; if zero, wake up waiters
|
||||
*
|
||||
* To destroy a CQ/QP, we can do the following:
|
||||
* - lock cq/qp_table, remove pointer, unlock cq/qp_table lock
|
||||
* - decrement ref count
|
||||
* - lock cq/qp_table
|
||||
* - remove pointer and decrement ref count
|
||||
* - unlock cq/qp_table lock
|
||||
* - wait_event until ref count is zero
|
||||
*
|
||||
* It is the consumer's responsibilty to make sure that no QP
|
||||
|
@ -197,7 +199,7 @@ struct mthca_cq_resize {
|
|||
struct mthca_cq {
|
||||
struct ib_cq ibcq;
|
||||
spinlock_t lock;
|
||||
atomic_t refcount;
|
||||
int refcount;
|
||||
int cqn;
|
||||
u32 cons_index;
|
||||
struct mthca_cq_buf buf;
|
||||
|
@ -217,7 +219,7 @@ struct mthca_cq {
|
|||
struct mthca_srq {
|
||||
struct ib_srq ibsrq;
|
||||
spinlock_t lock;
|
||||
atomic_t refcount;
|
||||
int refcount;
|
||||
int srqn;
|
||||
int max;
|
||||
int max_gs;
|
||||
|
@ -254,7 +256,7 @@ struct mthca_wq {
|
|||
|
||||
struct mthca_qp {
|
||||
struct ib_qp ibqp;
|
||||
atomic_t refcount;
|
||||
int refcount;
|
||||
u32 qpn;
|
||||
int is_direct;
|
||||
u8 port; /* for SQP and memfree use only */
|
||||
|
|
|
@ -240,7 +240,7 @@ void mthca_qp_event(struct mthca_dev *dev, u32 qpn,
|
|||
spin_lock(&dev->qp_table.lock);
|
||||
qp = mthca_array_get(&dev->qp_table.qp, qpn & (dev->limits.num_qps - 1));
|
||||
if (qp)
|
||||
atomic_inc(&qp->refcount);
|
||||
++qp->refcount;
|
||||
spin_unlock(&dev->qp_table.lock);
|
||||
|
||||
if (!qp) {
|
||||
|
@ -257,8 +257,10 @@ void mthca_qp_event(struct mthca_dev *dev, u32 qpn,
|
|||
if (qp->ibqp.event_handler)
|
||||
qp->ibqp.event_handler(&event, qp->ibqp.qp_context);
|
||||
|
||||
if (atomic_dec_and_test(&qp->refcount))
|
||||
spin_lock(&dev->qp_table.lock);
|
||||
if (!--qp->refcount)
|
||||
wake_up(&qp->wait);
|
||||
spin_unlock(&dev->qp_table.lock);
|
||||
}
|
||||
|
||||
static int to_mthca_state(enum ib_qp_state ib_state)
|
||||
|
@ -833,10 +835,10 @@ int mthca_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr, int attr_mask)
|
|||
* entries and reinitialize the QP.
|
||||
*/
|
||||
if (new_state == IB_QPS_RESET && !qp->ibqp.uobject) {
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.send_cq)->cqn, qp->qpn,
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.send_cq), qp->qpn,
|
||||
qp->ibqp.srq ? to_msrq(qp->ibqp.srq) : NULL);
|
||||
if (qp->ibqp.send_cq != qp->ibqp.recv_cq)
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.recv_cq)->cqn, qp->qpn,
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.recv_cq), qp->qpn,
|
||||
qp->ibqp.srq ? to_msrq(qp->ibqp.srq) : NULL);
|
||||
|
||||
mthca_wq_init(&qp->sq);
|
||||
|
@ -1096,7 +1098,7 @@ static int mthca_alloc_qp_common(struct mthca_dev *dev,
|
|||
int ret;
|
||||
int i;
|
||||
|
||||
atomic_set(&qp->refcount, 1);
|
||||
qp->refcount = 1;
|
||||
init_waitqueue_head(&qp->wait);
|
||||
qp->state = IB_QPS_RESET;
|
||||
qp->atomic_rd_en = 0;
|
||||
|
@ -1318,6 +1320,17 @@ int mthca_alloc_sqp(struct mthca_dev *dev,
|
|||
return err;
|
||||
}
|
||||
|
||||
static inline int get_qp_refcount(struct mthca_dev *dev, struct mthca_qp *qp)
|
||||
{
|
||||
int c;
|
||||
|
||||
spin_lock_irq(&dev->qp_table.lock);
|
||||
c = qp->refcount;
|
||||
spin_unlock_irq(&dev->qp_table.lock);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
void mthca_free_qp(struct mthca_dev *dev,
|
||||
struct mthca_qp *qp)
|
||||
{
|
||||
|
@ -1339,14 +1352,14 @@ void mthca_free_qp(struct mthca_dev *dev,
|
|||
spin_lock(&dev->qp_table.lock);
|
||||
mthca_array_clear(&dev->qp_table.qp,
|
||||
qp->qpn & (dev->limits.num_qps - 1));
|
||||
--qp->refcount;
|
||||
spin_unlock(&dev->qp_table.lock);
|
||||
|
||||
if (send_cq != recv_cq)
|
||||
spin_unlock(&recv_cq->lock);
|
||||
spin_unlock_irq(&send_cq->lock);
|
||||
|
||||
atomic_dec(&qp->refcount);
|
||||
wait_event(qp->wait, !atomic_read(&qp->refcount));
|
||||
wait_event(qp->wait, !get_qp_refcount(dev, qp));
|
||||
|
||||
if (qp->state != IB_QPS_RESET)
|
||||
mthca_MODIFY_QP(dev, qp->state, IB_QPS_RESET, qp->qpn, 0,
|
||||
|
@ -1358,10 +1371,10 @@ void mthca_free_qp(struct mthca_dev *dev,
|
|||
* unref the mem-free tables and free the QPN in our table.
|
||||
*/
|
||||
if (!qp->ibqp.uobject) {
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.send_cq)->cqn, qp->qpn,
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.send_cq), qp->qpn,
|
||||
qp->ibqp.srq ? to_msrq(qp->ibqp.srq) : NULL);
|
||||
if (qp->ibqp.send_cq != qp->ibqp.recv_cq)
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.recv_cq)->cqn, qp->qpn,
|
||||
mthca_cq_clean(dev, to_mcq(qp->ibqp.recv_cq), qp->qpn,
|
||||
qp->ibqp.srq ? to_msrq(qp->ibqp.srq) : NULL);
|
||||
|
||||
mthca_free_memfree(dev, qp);
|
||||
|
|
|
@ -241,7 +241,7 @@ int mthca_alloc_srq(struct mthca_dev *dev, struct mthca_pd *pd,
|
|||
goto err_out_mailbox;
|
||||
|
||||
spin_lock_init(&srq->lock);
|
||||
atomic_set(&srq->refcount, 1);
|
||||
srq->refcount = 1;
|
||||
init_waitqueue_head(&srq->wait);
|
||||
|
||||
if (mthca_is_memfree(dev))
|
||||
|
@ -308,6 +308,17 @@ err_out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static inline int get_srq_refcount(struct mthca_dev *dev, struct mthca_srq *srq)
|
||||
{
|
||||
int c;
|
||||
|
||||
spin_lock_irq(&dev->srq_table.lock);
|
||||
c = srq->refcount;
|
||||
spin_unlock_irq(&dev->srq_table.lock);
|
||||
|
||||
return c;
|
||||
}
|
||||
|
||||
void mthca_free_srq(struct mthca_dev *dev, struct mthca_srq *srq)
|
||||
{
|
||||
struct mthca_mailbox *mailbox;
|
||||
|
@ -329,10 +340,10 @@ void mthca_free_srq(struct mthca_dev *dev, struct mthca_srq *srq)
|
|||
spin_lock_irq(&dev->srq_table.lock);
|
||||
mthca_array_clear(&dev->srq_table.srq,
|
||||
srq->srqn & (dev->limits.num_srqs - 1));
|
||||
--srq->refcount;
|
||||
spin_unlock_irq(&dev->srq_table.lock);
|
||||
|
||||
atomic_dec(&srq->refcount);
|
||||
wait_event(srq->wait, !atomic_read(&srq->refcount));
|
||||
wait_event(srq->wait, !get_srq_refcount(dev, srq));
|
||||
|
||||
if (!srq->ibsrq.uobject) {
|
||||
mthca_free_srq_buf(dev, srq);
|
||||
|
@ -414,7 +425,7 @@ void mthca_srq_event(struct mthca_dev *dev, u32 srqn,
|
|||
spin_lock(&dev->srq_table.lock);
|
||||
srq = mthca_array_get(&dev->srq_table.srq, srqn & (dev->limits.num_srqs - 1));
|
||||
if (srq)
|
||||
atomic_inc(&srq->refcount);
|
||||
++srq->refcount;
|
||||
spin_unlock(&dev->srq_table.lock);
|
||||
|
||||
if (!srq) {
|
||||
|
@ -431,8 +442,10 @@ void mthca_srq_event(struct mthca_dev *dev, u32 srqn,
|
|||
srq->ibsrq.event_handler(&event, srq->ibsrq.srq_context);
|
||||
|
||||
out:
|
||||
if (atomic_dec_and_test(&srq->refcount))
|
||||
spin_lock(&dev->srq_table.lock);
|
||||
if (!--srq->refcount)
|
||||
wake_up(&srq->wait);
|
||||
spin_unlock(&dev->srq_table.lock);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
@ -158,10 +158,8 @@ int ipoib_vlan_delete(struct net_device *pdev, unsigned short pkey)
|
|||
if (priv->pkey == pkey) {
|
||||
unregister_netdev(priv->dev);
|
||||
ipoib_dev_cleanup(priv->dev);
|
||||
|
||||
list_del(&priv->list);
|
||||
|
||||
kfree(priv);
|
||||
free_netdev(priv->dev);
|
||||
|
||||
ret = 0;
|
||||
break;
|
||||
|
|
|
@ -409,6 +409,34 @@ static int srp_connect_target(struct srp_target_port *target)
|
|||
}
|
||||
}
|
||||
|
||||
static void srp_unmap_data(struct scsi_cmnd *scmnd,
|
||||
struct srp_target_port *target,
|
||||
struct srp_request *req)
|
||||
{
|
||||
struct scatterlist *scat;
|
||||
int nents;
|
||||
|
||||
if (!scmnd->request_buffer ||
|
||||
(scmnd->sc_data_direction != DMA_TO_DEVICE &&
|
||||
scmnd->sc_data_direction != DMA_FROM_DEVICE))
|
||||
return;
|
||||
|
||||
/*
|
||||
* This handling of non-SG commands can be killed when the
|
||||
* SCSI midlayer no longer generates non-SG commands.
|
||||
*/
|
||||
if (likely(scmnd->use_sg)) {
|
||||
nents = scmnd->use_sg;
|
||||
scat = scmnd->request_buffer;
|
||||
} else {
|
||||
nents = 1;
|
||||
scat = &req->fake_sg;
|
||||
}
|
||||
|
||||
dma_unmap_sg(target->srp_host->dev->dma_device, scat, nents,
|
||||
scmnd->sc_data_direction);
|
||||
}
|
||||
|
||||
static int srp_reconnect_target(struct srp_target_port *target)
|
||||
{
|
||||
struct ib_cm_id *new_cm_id;
|
||||
|
@ -455,16 +483,16 @@ static int srp_reconnect_target(struct srp_target_port *target)
|
|||
list_for_each_entry(req, &target->req_queue, list) {
|
||||
req->scmnd->result = DID_RESET << 16;
|
||||
req->scmnd->scsi_done(req->scmnd);
|
||||
srp_unmap_data(req->scmnd, target, req);
|
||||
}
|
||||
|
||||
target->rx_head = 0;
|
||||
target->tx_head = 0;
|
||||
target->tx_tail = 0;
|
||||
target->req_head = 0;
|
||||
for (i = 0; i < SRP_SQ_SIZE - 1; ++i)
|
||||
target->req_ring[i].next = i + 1;
|
||||
target->req_ring[SRP_SQ_SIZE - 1].next = -1;
|
||||
INIT_LIST_HEAD(&target->free_reqs);
|
||||
INIT_LIST_HEAD(&target->req_queue);
|
||||
for (i = 0; i < SRP_SQ_SIZE; ++i)
|
||||
list_add_tail(&target->req_ring[i].list, &target->free_reqs);
|
||||
|
||||
ret = srp_connect_target(target);
|
||||
if (ret)
|
||||
|
@ -589,40 +617,10 @@ static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_target_port *target,
|
|||
return len;
|
||||
}
|
||||
|
||||
static void srp_unmap_data(struct scsi_cmnd *scmnd,
|
||||
struct srp_target_port *target,
|
||||
struct srp_request *req)
|
||||
static void srp_remove_req(struct srp_target_port *target, struct srp_request *req)
|
||||
{
|
||||
struct scatterlist *scat;
|
||||
int nents;
|
||||
|
||||
if (!scmnd->request_buffer ||
|
||||
(scmnd->sc_data_direction != DMA_TO_DEVICE &&
|
||||
scmnd->sc_data_direction != DMA_FROM_DEVICE))
|
||||
return;
|
||||
|
||||
/*
|
||||
* This handling of non-SG commands can be killed when the
|
||||
* SCSI midlayer no longer generates non-SG commands.
|
||||
*/
|
||||
if (likely(scmnd->use_sg)) {
|
||||
nents = scmnd->use_sg;
|
||||
scat = scmnd->request_buffer;
|
||||
} else {
|
||||
nents = 1;
|
||||
scat = &req->fake_sg;
|
||||
}
|
||||
|
||||
dma_unmap_sg(target->srp_host->dev->dma_device, scat, nents,
|
||||
scmnd->sc_data_direction);
|
||||
}
|
||||
|
||||
static void srp_remove_req(struct srp_target_port *target, struct srp_request *req,
|
||||
int index)
|
||||
{
|
||||
list_del(&req->list);
|
||||
req->next = target->req_head;
|
||||
target->req_head = index;
|
||||
srp_unmap_data(req->scmnd, target, req);
|
||||
list_move_tail(&req->list, &target->free_reqs);
|
||||
}
|
||||
|
||||
static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
|
||||
|
@ -647,7 +645,7 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
|
|||
req->tsk_status = rsp->data[3];
|
||||
complete(&req->done);
|
||||
} else {
|
||||
scmnd = req->scmnd;
|
||||
scmnd = req->scmnd;
|
||||
if (!scmnd)
|
||||
printk(KERN_ERR "Null scmnd for RSP w/tag %016llx\n",
|
||||
(unsigned long long) rsp->tag);
|
||||
|
@ -665,14 +663,11 @@ static void srp_process_rsp(struct srp_target_port *target, struct srp_rsp *rsp)
|
|||
else if (rsp->flags & (SRP_RSP_FLAG_DIOVER | SRP_RSP_FLAG_DIUNDER))
|
||||
scmnd->resid = be32_to_cpu(rsp->data_in_res_cnt);
|
||||
|
||||
srp_unmap_data(scmnd, target, req);
|
||||
|
||||
if (!req->tsk_mgmt) {
|
||||
req->scmnd = NULL;
|
||||
scmnd->host_scribble = (void *) -1L;
|
||||
scmnd->scsi_done(scmnd);
|
||||
|
||||
srp_remove_req(target, req, rsp->tag & ~SRP_TAG_TSK_MGMT);
|
||||
srp_remove_req(target, req);
|
||||
} else
|
||||
req->cmd_done = 1;
|
||||
}
|
||||
|
@ -859,7 +854,6 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd,
|
|||
struct srp_request *req;
|
||||
struct srp_iu *iu;
|
||||
struct srp_cmd *cmd;
|
||||
long req_index;
|
||||
int len;
|
||||
|
||||
if (target->state == SRP_TARGET_CONNECTING)
|
||||
|
@ -879,22 +873,20 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd,
|
|||
dma_sync_single_for_cpu(target->srp_host->dev->dma_device, iu->dma,
|
||||
SRP_MAX_IU_LEN, DMA_TO_DEVICE);
|
||||
|
||||
req_index = target->req_head;
|
||||
req = list_entry(target->free_reqs.next, struct srp_request, list);
|
||||
|
||||
scmnd->scsi_done = done;
|
||||
scmnd->result = 0;
|
||||
scmnd->host_scribble = (void *) req_index;
|
||||
scmnd->host_scribble = (void *) (long) req->index;
|
||||
|
||||
cmd = iu->buf;
|
||||
memset(cmd, 0, sizeof *cmd);
|
||||
|
||||
cmd->opcode = SRP_CMD;
|
||||
cmd->lun = cpu_to_be64((u64) scmnd->device->lun << 48);
|
||||
cmd->tag = req_index;
|
||||
cmd->tag = req->index;
|
||||
memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
|
||||
|
||||
req = &target->req_ring[req_index];
|
||||
|
||||
req->scmnd = scmnd;
|
||||
req->cmd = iu;
|
||||
req->cmd_done = 0;
|
||||
|
@ -919,8 +911,7 @@ static int srp_queuecommand(struct scsi_cmnd *scmnd,
|
|||
goto err_unmap;
|
||||
}
|
||||
|
||||
target->req_head = req->next;
|
||||
list_add_tail(&req->list, &target->req_queue);
|
||||
list_move_tail(&req->list, &target->req_queue);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -1143,30 +1134,20 @@ static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func)
|
||||
static int srp_send_tsk_mgmt(struct srp_target_port *target,
|
||||
struct srp_request *req, u8 func)
|
||||
{
|
||||
struct srp_target_port *target = host_to_target(scmnd->device->host);
|
||||
struct srp_request *req;
|
||||
struct srp_iu *iu;
|
||||
struct srp_tsk_mgmt *tsk_mgmt;
|
||||
int req_index;
|
||||
int ret = FAILED;
|
||||
|
||||
spin_lock_irq(target->scsi_host->host_lock);
|
||||
|
||||
if (target->state == SRP_TARGET_DEAD ||
|
||||
target->state == SRP_TARGET_REMOVED) {
|
||||
scmnd->result = DID_BAD_TARGET << 16;
|
||||
req->scmnd->result = DID_BAD_TARGET << 16;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (scmnd->host_scribble == (void *) -1L)
|
||||
goto out;
|
||||
|
||||
req_index = (long) scmnd->host_scribble;
|
||||
printk(KERN_ERR "Abort for req_index %d\n", req_index);
|
||||
|
||||
req = &target->req_ring[req_index];
|
||||
init_completion(&req->done);
|
||||
|
||||
iu = __srp_get_tx_iu(target);
|
||||
|
@ -1177,10 +1158,10 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func)
|
|||
memset(tsk_mgmt, 0, sizeof *tsk_mgmt);
|
||||
|
||||
tsk_mgmt->opcode = SRP_TSK_MGMT;
|
||||
tsk_mgmt->lun = cpu_to_be64((u64) scmnd->device->lun << 48);
|
||||
tsk_mgmt->tag = req_index | SRP_TAG_TSK_MGMT;
|
||||
tsk_mgmt->lun = cpu_to_be64((u64) req->scmnd->device->lun << 48);
|
||||
tsk_mgmt->tag = req->index | SRP_TAG_TSK_MGMT;
|
||||
tsk_mgmt->tsk_mgmt_func = func;
|
||||
tsk_mgmt->task_tag = req_index;
|
||||
tsk_mgmt->task_tag = req->index;
|
||||
|
||||
if (__srp_post_send(target, iu, sizeof *tsk_mgmt))
|
||||
goto out;
|
||||
|
@ -1188,37 +1169,85 @@ static int srp_send_tsk_mgmt(struct scsi_cmnd *scmnd, u8 func)
|
|||
req->tsk_mgmt = iu;
|
||||
|
||||
spin_unlock_irq(target->scsi_host->host_lock);
|
||||
|
||||
if (!wait_for_completion_timeout(&req->done,
|
||||
msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)))
|
||||
return FAILED;
|
||||
spin_lock_irq(target->scsi_host->host_lock);
|
||||
return -1;
|
||||
|
||||
if (req->cmd_done) {
|
||||
srp_remove_req(target, req, req_index);
|
||||
scmnd->scsi_done(scmnd);
|
||||
} else if (!req->tsk_status) {
|
||||
srp_remove_req(target, req, req_index);
|
||||
scmnd->result = DID_ABORT << 16;
|
||||
ret = SUCCESS;
|
||||
}
|
||||
return 0;
|
||||
|
||||
out:
|
||||
spin_unlock_irq(target->scsi_host->host_lock);
|
||||
return ret;
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int srp_find_req(struct srp_target_port *target,
|
||||
struct scsi_cmnd *scmnd,
|
||||
struct srp_request **req)
|
||||
{
|
||||
if (scmnd->host_scribble == (void *) -1L)
|
||||
return -1;
|
||||
|
||||
*req = &target->req_ring[(long) scmnd->host_scribble];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int srp_abort(struct scsi_cmnd *scmnd)
|
||||
{
|
||||
struct srp_target_port *target = host_to_target(scmnd->device->host);
|
||||
struct srp_request *req;
|
||||
int ret = SUCCESS;
|
||||
|
||||
printk(KERN_ERR "SRP abort called\n");
|
||||
|
||||
return srp_send_tsk_mgmt(scmnd, SRP_TSK_ABORT_TASK);
|
||||
if (srp_find_req(target, scmnd, &req))
|
||||
return FAILED;
|
||||
if (srp_send_tsk_mgmt(target, req, SRP_TSK_ABORT_TASK))
|
||||
return FAILED;
|
||||
|
||||
spin_lock_irq(target->scsi_host->host_lock);
|
||||
|
||||
if (req->cmd_done) {
|
||||
srp_remove_req(target, req);
|
||||
scmnd->scsi_done(scmnd);
|
||||
} else if (!req->tsk_status) {
|
||||
srp_remove_req(target, req);
|
||||
scmnd->result = DID_ABORT << 16;
|
||||
} else
|
||||
ret = FAILED;
|
||||
|
||||
spin_unlock_irq(target->scsi_host->host_lock);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int srp_reset_device(struct scsi_cmnd *scmnd)
|
||||
{
|
||||
struct srp_target_port *target = host_to_target(scmnd->device->host);
|
||||
struct srp_request *req, *tmp;
|
||||
|
||||
printk(KERN_ERR "SRP reset_device called\n");
|
||||
|
||||
return srp_send_tsk_mgmt(scmnd, SRP_TSK_LUN_RESET);
|
||||
if (srp_find_req(target, scmnd, &req))
|
||||
return FAILED;
|
||||
if (srp_send_tsk_mgmt(target, req, SRP_TSK_LUN_RESET))
|
||||
return FAILED;
|
||||
if (req->tsk_status)
|
||||
return FAILED;
|
||||
|
||||
spin_lock_irq(target->scsi_host->host_lock);
|
||||
|
||||
list_for_each_entry_safe(req, tmp, &target->req_queue, list)
|
||||
if (req->scmnd->device == scmnd->device) {
|
||||
req->scmnd->result = DID_RESET << 16;
|
||||
scmnd->scsi_done(scmnd);
|
||||
srp_remove_req(target, req);
|
||||
}
|
||||
|
||||
spin_unlock_irq(target->scsi_host->host_lock);
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
static int srp_reset_host(struct scsi_cmnd *scmnd)
|
||||
|
@ -1518,10 +1547,12 @@ static ssize_t srp_create_target(struct class_device *class_dev,
|
|||
|
||||
INIT_WORK(&target->work, srp_reconnect_work, target);
|
||||
|
||||
for (i = 0; i < SRP_SQ_SIZE - 1; ++i)
|
||||
target->req_ring[i].next = i + 1;
|
||||
target->req_ring[SRP_SQ_SIZE - 1].next = -1;
|
||||
INIT_LIST_HEAD(&target->free_reqs);
|
||||
INIT_LIST_HEAD(&target->req_queue);
|
||||
for (i = 0; i < SRP_SQ_SIZE; ++i) {
|
||||
target->req_ring[i].index = i;
|
||||
list_add_tail(&target->req_ring[i].list, &target->free_reqs);
|
||||
}
|
||||
|
||||
ret = srp_parse_options(buf, target);
|
||||
if (ret)
|
||||
|
|
|
@ -101,7 +101,7 @@ struct srp_request {
|
|||
*/
|
||||
struct scatterlist fake_sg;
|
||||
struct completion done;
|
||||
short next;
|
||||
short index;
|
||||
u8 cmd_done;
|
||||
u8 tsk_status;
|
||||
};
|
||||
|
@ -133,7 +133,7 @@ struct srp_target_port {
|
|||
unsigned tx_tail;
|
||||
struct srp_iu *tx_ring[SRP_SQ_SIZE + 1];
|
||||
|
||||
int req_head;
|
||||
struct list_head free_reqs;
|
||||
struct list_head req_queue;
|
||||
struct srp_request req_ring[SRP_SQ_SIZE];
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/slab.h>
|
||||
#include <asm/irq.h>
|
||||
//#include <asm/irq.h>
|
||||
|
||||
#include <asm/arch/sharpsl.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
|
|
@ -1499,7 +1499,6 @@ static int __init capi_init(void)
|
|||
printk(KERN_ERR "capi20: unable to get major %d\n", capi_major);
|
||||
return major_ret;
|
||||
}
|
||||
capi_major = major_ret;
|
||||
capi_class = class_create(THIS_MODULE, "capi");
|
||||
if (IS_ERR(capi_class)) {
|
||||
unregister_chrdev(capi_major, "capi20");
|
||||
|
|
|
@ -710,8 +710,8 @@ static int gigaset_probe(struct usb_interface *interface,
|
|||
retval = -ENODEV; //FIXME
|
||||
|
||||
/* See if the device offered us matches what we can accept */
|
||||
if ((le16_to_cpu(udev->descriptor.idVendor != USB_M105_VENDOR_ID)) ||
|
||||
(le16_to_cpu(udev->descriptor.idProduct != USB_M105_PRODUCT_ID)))
|
||||
if ((le16_to_cpu(udev->descriptor.idVendor) != USB_M105_VENDOR_ID) ||
|
||||
(le16_to_cpu(udev->descriptor.idProduct) != USB_M105_PRODUCT_ID))
|
||||
return -ENODEV;
|
||||
|
||||
/* this starts to become ascii art... */
|
||||
|
|
|
@ -4,8 +4,11 @@ menu "LED devices"
|
|||
config NEW_LEDS
|
||||
bool "LED Support"
|
||||
help
|
||||
Say Y to enable Linux LED support. This is not related to standard
|
||||
keyboard LEDs which are controlled via the input system.
|
||||
Say Y to enable Linux LED support. This allows control of supported
|
||||
LEDs from both userspace and optionally, by kernel events (triggers).
|
||||
|
||||
This is not related to standard keyboard LEDs which are controlled
|
||||
via the input system.
|
||||
|
||||
config LEDS_CLASS
|
||||
tristate "LED Class Support"
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <linux/sysdev.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/leds.h>
|
||||
#include "leds.h"
|
||||
|
||||
|
@ -43,9 +44,13 @@ static ssize_t led_brightness_store(struct class_device *dev,
|
|||
ssize_t ret = -EINVAL;
|
||||
char *after;
|
||||
unsigned long state = simple_strtoul(buf, &after, 10);
|
||||
size_t count = after - buf;
|
||||
|
||||
if (after - buf > 0) {
|
||||
ret = after - buf;
|
||||
if (*after && isspace(*after))
|
||||
count++;
|
||||
|
||||
if (count == size) {
|
||||
ret = count;
|
||||
led_set_brightness(led_cdev, state);
|
||||
}
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <linux/device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/leds.h>
|
||||
#include "leds.h"
|
||||
|
||||
|
@ -69,11 +70,15 @@ static ssize_t led_delay_on_store(struct class_device *dev, const char *buf,
|
|||
int ret = -EINVAL;
|
||||
char *after;
|
||||
unsigned long state = simple_strtoul(buf, &after, 10);
|
||||
size_t count = after - buf;
|
||||
|
||||
if (after - buf > 0) {
|
||||
if (*after && isspace(*after))
|
||||
count++;
|
||||
|
||||
if (count == size) {
|
||||
timer_data->delay_on = state;
|
||||
mod_timer(&timer_data->timer, jiffies + 1);
|
||||
ret = after - buf;
|
||||
ret = count;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -97,11 +102,15 @@ static ssize_t led_delay_off_store(struct class_device *dev, const char *buf,
|
|||
int ret = -EINVAL;
|
||||
char *after;
|
||||
unsigned long state = simple_strtoul(buf, &after, 10);
|
||||
size_t count = after - buf;
|
||||
|
||||
if (after - buf > 0) {
|
||||
if (*after && isspace(*after))
|
||||
count++;
|
||||
|
||||
if (count == size) {
|
||||
timer_data->delay_off = state;
|
||||
mod_timer(&timer_data->timer, jiffies + 1);
|
||||
ret = after - buf;
|
||||
ret = count;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -1189,7 +1189,6 @@ mpt_attach(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
ioc->diagPending = 0;
|
||||
spin_lock_init(&ioc->diagLock);
|
||||
spin_lock_init(&ioc->fc_rescan_work_lock);
|
||||
spin_lock_init(&ioc->fc_rport_lock);
|
||||
spin_lock_init(&ioc->initializing_hba_lock);
|
||||
|
||||
/* Initialize the event logging.
|
||||
|
@ -5736,11 +5735,13 @@ mpt_HardResetHandler(MPT_ADAPTER *ioc, int sleepFlag)
|
|||
return rc;
|
||||
}
|
||||
|
||||
# define EVENT_DESCR_STR_SZ 100
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
static void
|
||||
EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
||||
{
|
||||
char *ds;
|
||||
char *ds = NULL;
|
||||
|
||||
switch(event) {
|
||||
case MPI_EVENT_NONE:
|
||||
|
@ -5777,9 +5778,9 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
|||
if (evData0 == MPI_EVENT_LOOP_STATE_CHANGE_LIP)
|
||||
ds = "Loop State(LIP) Change";
|
||||
else if (evData0 == MPI_EVENT_LOOP_STATE_CHANGE_LPE)
|
||||
ds = "Loop State(LPE) Change"; /* ??? */
|
||||
ds = "Loop State(LPE) Change"; /* ??? */
|
||||
else
|
||||
ds = "Loop State(LPB) Change"; /* ??? */
|
||||
ds = "Loop State(LPB) Change"; /* ??? */
|
||||
break;
|
||||
case MPI_EVENT_LOGOUT:
|
||||
ds = "Logout";
|
||||
|
@ -5841,27 +5842,32 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
|||
break;
|
||||
case MPI_EVENT_SAS_DEVICE_STATUS_CHANGE:
|
||||
{
|
||||
char buf[50];
|
||||
u8 id = (u8)(evData0);
|
||||
u8 ReasonCode = (u8)(evData0 >> 16);
|
||||
switch (ReasonCode) {
|
||||
case MPI_EVENT_SAS_DEV_STAT_RC_ADDED:
|
||||
sprintf(buf,"SAS Device Status Change: Added: id=%d", id);
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS Device Status Change: Added: id=%d", id);
|
||||
break;
|
||||
case MPI_EVENT_SAS_DEV_STAT_RC_NOT_RESPONDING:
|
||||
sprintf(buf,"SAS Device Status Change: Deleted: id=%d", id);
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS Device Status Change: Deleted: id=%d", id);
|
||||
break;
|
||||
case MPI_EVENT_SAS_DEV_STAT_RC_SMART_DATA:
|
||||
sprintf(buf,"SAS Device Status Change: SMART Data: id=%d", id);
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS Device Status Change: SMART Data: id=%d",
|
||||
id);
|
||||
break;
|
||||
case MPI_EVENT_SAS_DEV_STAT_RC_NO_PERSIST_ADDED:
|
||||
sprintf(buf,"SAS Device Status Change: No Persistancy Added: id=%d", id);
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS Device Status Change: No Persistancy "
|
||||
"Added: id=%d", id);
|
||||
break;
|
||||
default:
|
||||
sprintf(buf,"SAS Device Status Change: Unknown: id=%d", id);
|
||||
break;
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS Device Status Change: Unknown: id=%d", id);
|
||||
break;
|
||||
}
|
||||
ds = buf;
|
||||
break;
|
||||
}
|
||||
case MPI_EVENT_ON_BUS_TIMER_EXPIRED:
|
||||
|
@ -5878,41 +5884,46 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
|||
break;
|
||||
case MPI_EVENT_SAS_PHY_LINK_STATUS:
|
||||
{
|
||||
char buf[50];
|
||||
u8 LinkRates = (u8)(evData0 >> 8);
|
||||
u8 PhyNumber = (u8)(evData0);
|
||||
LinkRates = (LinkRates & MPI_EVENT_SAS_PLS_LR_CURRENT_MASK) >>
|
||||
MPI_EVENT_SAS_PLS_LR_CURRENT_SHIFT;
|
||||
switch (LinkRates) {
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_UNKNOWN:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Rate Unknown",PhyNumber);
|
||||
break;
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_PHY_DISABLED:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Phy Disabled",PhyNumber);
|
||||
break;
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_FAILED_SPEED_NEGOTIATION:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Failed Speed Nego",PhyNumber);
|
||||
break;
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_SATA_OOB_COMPLETE:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Sata OOB Completed",PhyNumber);
|
||||
break;
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_1_5:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Rate 1.5 Gbps",PhyNumber);
|
||||
break;
|
||||
case MPI_EVENT_SAS_PLS_LR_RATE_3_0:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d:"
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d:"
|
||||
" Rate 3.0 Gpbs",PhyNumber);
|
||||
break;
|
||||
default:
|
||||
sprintf(buf,"SAS PHY Link Status: Phy=%d", PhyNumber);
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"SAS PHY Link Status: Phy=%d", PhyNumber);
|
||||
break;
|
||||
}
|
||||
ds = buf;
|
||||
break;
|
||||
}
|
||||
case MPI_EVENT_SAS_DISCOVERY_ERROR:
|
||||
|
@ -5921,9 +5932,8 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
|||
case MPI_EVENT_IR_RESYNC_UPDATE:
|
||||
{
|
||||
u8 resync_complete = (u8)(evData0 >> 16);
|
||||
char buf[40];
|
||||
sprintf(buf,"IR Resync Update: Complete = %d:",resync_complete);
|
||||
ds = buf;
|
||||
snprintf(evStr, EVENT_DESCR_STR_SZ,
|
||||
"IR Resync Update: Complete = %d:",resync_complete);
|
||||
break;
|
||||
}
|
||||
case MPI_EVENT_IR2:
|
||||
|
@ -5976,7 +5986,8 @@ EventDescriptionStr(u8 event, u32 evData0, char *evStr)
|
|||
ds = "Unknown";
|
||||
break;
|
||||
}
|
||||
strcpy(evStr,ds);
|
||||
if (ds)
|
||||
strncpy(evStr, ds, EVENT_DESCR_STR_SZ);
|
||||
}
|
||||
|
||||
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
|
||||
|
@ -5998,7 +6009,7 @@ ProcessEventNotification(MPT_ADAPTER *ioc, EventNotificationReply_t *pEventReply
|
|||
int ii;
|
||||
int r = 0;
|
||||
int handlers = 0;
|
||||
char evStr[100];
|
||||
char evStr[EVENT_DESCR_STR_SZ];
|
||||
u8 event;
|
||||
|
||||
/*
|
||||
|
|
|
@ -76,8 +76,8 @@
|
|||
#define COPYRIGHT "Copyright (c) 1999-2005 " MODULEAUTHOR
|
||||
#endif
|
||||
|
||||
#define MPT_LINUX_VERSION_COMMON "3.03.08"
|
||||
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.08"
|
||||
#define MPT_LINUX_VERSION_COMMON "3.03.09"
|
||||
#define MPT_LINUX_PACKAGE_NAME "@(#)mptlinux-3.03.09"
|
||||
#define WHAT_MAGIC_STRING "@" "(" "#" ")"
|
||||
|
||||
#define show_mptmod_ver(s,ver) \
|
||||
|
@ -489,7 +489,6 @@ typedef struct _RaidCfgData {
|
|||
|
||||
#define MPT_RPORT_INFO_FLAGS_REGISTERED 0x01 /* rport registered */
|
||||
#define MPT_RPORT_INFO_FLAGS_MISSING 0x02 /* missing from DevPage0 scan */
|
||||
#define MPT_RPORT_INFO_FLAGS_MAPPED_VDEV 0x04 /* target mapped in vdev */
|
||||
|
||||
/*
|
||||
* data allocated for each fc rport device
|
||||
|
@ -501,7 +500,6 @@ struct mptfc_rport_info
|
|||
struct scsi_target *starget;
|
||||
FCDevicePage0_t pg0;
|
||||
u8 flags;
|
||||
u8 remap_needed;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -628,11 +626,11 @@ typedef struct _MPT_ADAPTER
|
|||
struct work_struct mptscsih_persistTask;
|
||||
|
||||
struct list_head fc_rports;
|
||||
spinlock_t fc_rport_lock; /* list and ri flags */
|
||||
spinlock_t fc_rescan_work_lock;
|
||||
int fc_rescan_work_count;
|
||||
struct work_struct fc_rescan_work;
|
||||
|
||||
char fc_rescan_work_q_name[KOBJ_NAME_LEN];
|
||||
struct workqueue_struct *fc_rescan_work_q;
|
||||
} MPT_ADAPTER;
|
||||
|
||||
/*
|
||||
|
|
|
@ -341,9 +341,6 @@ mptfc_generate_rport_ids(FCDevicePage0_t *pg0, struct fc_rport_identifiers *rid)
|
|||
rid->port_name = ((u64)pg0->WWPN.High) << 32 | (u64)pg0->WWPN.Low;
|
||||
rid->port_id = pg0->PortIdentifier;
|
||||
rid->roles = FC_RPORT_ROLE_UNKNOWN;
|
||||
rid->roles |= FC_RPORT_ROLE_FCP_TARGET;
|
||||
if (pg0->Protocol & MPI_FC_DEVICE_PAGE0_PROT_FCP_INITIATOR)
|
||||
rid->roles |= FC_RPORT_ROLE_FCP_INITIATOR;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -355,15 +352,18 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|||
struct fc_rport *rport;
|
||||
struct mptfc_rport_info *ri;
|
||||
int new_ri = 1;
|
||||
u64 pn;
|
||||
unsigned long flags;
|
||||
u64 pn, nn;
|
||||
VirtTarget *vtarget;
|
||||
u32 roles = FC_RPORT_ROLE_UNKNOWN;
|
||||
|
||||
if (mptfc_generate_rport_ids(pg0, &rport_ids) < 0)
|
||||
return;
|
||||
|
||||
roles |= FC_RPORT_ROLE_FCP_TARGET;
|
||||
if (pg0->Protocol & MPI_FC_DEVICE_PAGE0_PROT_FCP_INITIATOR)
|
||||
roles |= FC_RPORT_ROLE_FCP_INITIATOR;
|
||||
|
||||
/* scan list looking for a match */
|
||||
spin_lock_irqsave(&ioc->fc_rport_lock, flags);
|
||||
list_for_each_entry(ri, &ioc->fc_rports, list) {
|
||||
pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
|
||||
if (pn == rport_ids.port_name) { /* match */
|
||||
|
@ -373,11 +373,9 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|||
}
|
||||
}
|
||||
if (new_ri) { /* allocate one */
|
||||
spin_unlock_irqrestore(&ioc->fc_rport_lock, flags);
|
||||
ri = kzalloc(sizeof(struct mptfc_rport_info), GFP_KERNEL);
|
||||
if (!ri)
|
||||
return;
|
||||
spin_lock_irqsave(&ioc->fc_rport_lock, flags);
|
||||
list_add_tail(&ri->list, &ioc->fc_rports);
|
||||
}
|
||||
|
||||
|
@ -387,14 +385,11 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|||
/* MPT_RPORT_INFO_FLAGS_REGISTERED - rport not previously deleted */
|
||||
if (!(ri->flags & MPT_RPORT_INFO_FLAGS_REGISTERED)) {
|
||||
ri->flags |= MPT_RPORT_INFO_FLAGS_REGISTERED;
|
||||
spin_unlock_irqrestore(&ioc->fc_rport_lock, flags);
|
||||
rport = fc_remote_port_add(ioc->sh, channel, &rport_ids);
|
||||
spin_lock_irqsave(&ioc->fc_rport_lock, flags);
|
||||
if (rport) {
|
||||
ri->rport = rport;
|
||||
if (new_ri) /* may have been reset by user */
|
||||
rport->dev_loss_tmo = mptfc_dev_loss_tmo;
|
||||
*((struct mptfc_rport_info **)rport->dd_data) = ri;
|
||||
/*
|
||||
* if already mapped, remap here. If not mapped,
|
||||
* target_alloc will allocate vtarget and map,
|
||||
|
@ -406,16 +401,21 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|||
vtarget->target_id = pg0->CurrentTargetID;
|
||||
vtarget->bus_id = pg0->CurrentBus;
|
||||
}
|
||||
ri->remap_needed = 0;
|
||||
}
|
||||
*((struct mptfc_rport_info **)rport->dd_data) = ri;
|
||||
/* scan will be scheduled once rport becomes a target */
|
||||
fc_remote_port_rolechg(rport,roles);
|
||||
|
||||
pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
|
||||
nn = (u64)ri->pg0.WWNN.High << 32 | (u64)ri->pg0.WWNN.Low;
|
||||
dfcprintk ((MYIOC_s_INFO_FMT
|
||||
"mptfc_reg_dev.%d: %x, %llx / %llx, tid %d, "
|
||||
"rport tid %d, tmo %d\n",
|
||||
ioc->name,
|
||||
ioc->sh->host_no,
|
||||
pg0->PortIdentifier,
|
||||
pg0->WWNN,
|
||||
pg0->WWPN,
|
||||
(unsigned long long)nn,
|
||||
(unsigned long long)pn,
|
||||
pg0->CurrentTargetID,
|
||||
ri->rport->scsi_target_id,
|
||||
ri->rport->dev_loss_tmo));
|
||||
|
@ -425,8 +425,6 @@ mptfc_register_dev(MPT_ADAPTER *ioc, int channel, FCDevicePage0_t *pg0)
|
|||
ri = NULL;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&ioc->fc_rport_lock,flags);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -476,7 +474,6 @@ mptfc_target_alloc(struct scsi_target *starget)
|
|||
vtarget->target_id = ri->pg0.CurrentTargetID;
|
||||
vtarget->bus_id = ri->pg0.CurrentBus;
|
||||
ri->starget = starget;
|
||||
ri->remap_needed = 0;
|
||||
rc = 0;
|
||||
}
|
||||
}
|
||||
|
@ -502,10 +499,10 @@ mptfc_slave_alloc(struct scsi_device *sdev)
|
|||
VirtDevice *vdev;
|
||||
struct scsi_target *starget;
|
||||
struct fc_rport *rport;
|
||||
unsigned long flags;
|
||||
|
||||
|
||||
rport = starget_to_rport(scsi_target(sdev));
|
||||
starget = scsi_target(sdev);
|
||||
rport = starget_to_rport(starget);
|
||||
|
||||
if (!rport || fc_remote_port_chkready(rport))
|
||||
return -ENXIO;
|
||||
|
@ -519,10 +516,8 @@ mptfc_slave_alloc(struct scsi_device *sdev)
|
|||
return -ENOMEM;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&hd->ioc->fc_rport_lock,flags);
|
||||
|
||||
sdev->hostdata = vdev;
|
||||
starget = scsi_target(sdev);
|
||||
vtarget = starget->hostdata;
|
||||
|
||||
if (vtarget->num_luns == 0) {
|
||||
|
@ -535,14 +530,16 @@ mptfc_slave_alloc(struct scsi_device *sdev)
|
|||
vdev->vtarget = vtarget;
|
||||
vdev->lun = sdev->lun;
|
||||
|
||||
spin_unlock_irqrestore(&hd->ioc->fc_rport_lock,flags);
|
||||
|
||||
vtarget->num_luns++;
|
||||
|
||||
|
||||
#ifdef DMPT_DEBUG_FC
|
||||
{
|
||||
{
|
||||
u64 nn, pn;
|
||||
struct mptfc_rport_info *ri;
|
||||
ri = *((struct mptfc_rport_info **)rport->dd_data);
|
||||
pn = (u64)ri->pg0.WWPN.High << 32 | (u64)ri->pg0.WWPN.Low;
|
||||
nn = (u64)ri->pg0.WWNN.High << 32 | (u64)ri->pg0.WWNN.Low;
|
||||
dfcprintk ((MYIOC_s_INFO_FMT
|
||||
"mptfc_slv_alloc.%d: num_luns %d, sdev.id %d, "
|
||||
"CurrentTargetID %d, %x %llx %llx\n",
|
||||
|
@ -550,7 +547,9 @@ mptfc_slave_alloc(struct scsi_device *sdev)
|
|||
sdev->host->host_no,
|
||||
vtarget->num_luns,
|
||||
sdev->id, ri->pg0.CurrentTargetID,
|
||||
ri->pg0.PortIdentifier, ri->pg0.WWPN, ri->pg0.WWNN));
|
||||
ri->pg0.PortIdentifier,
|
||||
(unsigned long long)pn,
|
||||
(unsigned long long)nn));
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -570,11 +569,31 @@ mptfc_qcmd(struct scsi_cmnd *SCpnt, void (*done)(struct scsi_cmnd *))
|
|||
done(SCpnt);
|
||||
return 0;
|
||||
}
|
||||
ri = *((struct mptfc_rport_info **)rport->dd_data);
|
||||
if (unlikely(ri->remap_needed))
|
||||
return SCSI_MLQUEUE_HOST_BUSY;
|
||||
|
||||
return mptscsih_qcmd(SCpnt,done);
|
||||
/* dd_data is null until finished adding target */
|
||||
ri = *((struct mptfc_rport_info **)rport->dd_data);
|
||||
if (unlikely(!ri)) {
|
||||
dfcprintk ((MYIOC_s_INFO_FMT
|
||||
"mptfc_qcmd.%d: %d:%d, dd_data is null.\n",
|
||||
((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name,
|
||||
((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no,
|
||||
SCpnt->device->id,SCpnt->device->lun));
|
||||
SCpnt->result = DID_IMM_RETRY << 16;
|
||||
done(SCpnt);
|
||||
return 0;
|
||||
}
|
||||
|
||||
err = mptscsih_qcmd(SCpnt,done);
|
||||
#ifdef DMPT_DEBUG_FC
|
||||
if (unlikely(err)) {
|
||||
dfcprintk ((MYIOC_s_INFO_FMT
|
||||
"mptfc_qcmd.%d: %d:%d, mptscsih_qcmd returns non-zero.\n",
|
||||
((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->name,
|
||||
((MPT_SCSI_HOST *) SCpnt->device->host->hostdata)->ioc->sh->host_no,
|
||||
SCpnt->device->id,SCpnt->device->lun));
|
||||
}
|
||||
#endif
|
||||
return err;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -615,18 +634,17 @@ mptfc_rescan_devices(void *arg)
|
|||
MPT_ADAPTER *ioc = (MPT_ADAPTER *)arg;
|
||||
int ii;
|
||||
int work_to_do;
|
||||
u64 pn;
|
||||
unsigned long flags;
|
||||
struct mptfc_rport_info *ri;
|
||||
|
||||
do {
|
||||
/* start by tagging all ports as missing */
|
||||
spin_lock_irqsave(&ioc->fc_rport_lock,flags);
|
||||
list_for_each_entry(ri, &ioc->fc_rports, list) {
|
||||
if (ri->flags & MPT_RPORT_INFO_FLAGS_REGISTERED) {
|
||||
ri->flags |= MPT_RPORT_INFO_FLAGS_MISSING;
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&ioc->fc_rport_lock,flags);
|
||||
|
||||
/*
|
||||
* now rescan devices known to adapter,
|
||||
|
@ -639,33 +657,24 @@ mptfc_rescan_devices(void *arg)
|
|||
}
|
||||
|
||||
/* delete devices still missing */
|
||||
spin_lock_irqsave(&ioc->fc_rport_lock, flags);
|
||||
list_for_each_entry(ri, &ioc->fc_rports, list) {
|
||||
/* if newly missing, delete it */
|
||||
if ((ri->flags & (MPT_RPORT_INFO_FLAGS_REGISTERED |
|
||||
MPT_RPORT_INFO_FLAGS_MISSING))
|
||||
== (MPT_RPORT_INFO_FLAGS_REGISTERED |
|
||||
MPT_RPORT_INFO_FLAGS_MISSING)) {
|
||||
if (ri->flags & MPT_RPORT_INFO_FLAGS_MISSING) {
|
||||
|
||||
ri->flags &= ~(MPT_RPORT_INFO_FLAGS_REGISTERED|
|
||||
MPT_RPORT_INFO_FLAGS_MISSING);
|
||||
ri->remap_needed = 1;
|
||||
fc_remote_port_delete(ri->rport);
|
||||
/*
|
||||
* remote port not really deleted 'cause
|
||||
* binding is by WWPN and driver only
|
||||
* registers FCP_TARGETs but cannot trust
|
||||
* data structures.
|
||||
*/
|
||||
fc_remote_port_delete(ri->rport); /* won't sleep */
|
||||
ri->rport = NULL;
|
||||
|
||||
pn = (u64)ri->pg0.WWPN.High << 32 |
|
||||
(u64)ri->pg0.WWPN.Low;
|
||||
dfcprintk ((MYIOC_s_INFO_FMT
|
||||
"mptfc_rescan.%d: %llx deleted\n",
|
||||
ioc->name,
|
||||
ioc->sh->host_no,
|
||||
ri->pg0.WWPN));
|
||||
(unsigned long long)pn));
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&ioc->fc_rport_lock,flags);
|
||||
|
||||
/*
|
||||
* allow multiple passes as target state
|
||||
|
@ -870,10 +879,23 @@ mptfc_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
goto out_mptfc_probe;
|
||||
}
|
||||
|
||||
for (ii=0; ii < ioc->facts.NumberOfPorts; ii++) {
|
||||
mptfc_init_host_attr(ioc,ii);
|
||||
mptfc_GetFcDevPage0(ioc,ii,mptfc_register_dev);
|
||||
}
|
||||
/* initialize workqueue */
|
||||
|
||||
snprintf(ioc->fc_rescan_work_q_name, KOBJ_NAME_LEN, "mptfc_wq_%d",
|
||||
sh->host_no);
|
||||
ioc->fc_rescan_work_q =
|
||||
create_singlethread_workqueue(ioc->fc_rescan_work_q_name);
|
||||
if (!ioc->fc_rescan_work_q)
|
||||
goto out_mptfc_probe;
|
||||
|
||||
/*
|
||||
* scan for rports -
|
||||
* by doing it via the workqueue, some locking is eliminated
|
||||
*/
|
||||
|
||||
ioc->fc_rescan_work_count = 1;
|
||||
queue_work(ioc->fc_rescan_work_q, &ioc->fc_rescan_work);
|
||||
flush_workqueue(ioc->fc_rescan_work_q);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -949,8 +971,18 @@ mptfc_init(void)
|
|||
static void __devexit
|
||||
mptfc_remove(struct pci_dev *pdev)
|
||||
{
|
||||
MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
|
||||
struct mptfc_rport_info *p, *n;
|
||||
MPT_ADAPTER *ioc = pci_get_drvdata(pdev);
|
||||
struct mptfc_rport_info *p, *n;
|
||||
struct workqueue_struct *work_q;
|
||||
unsigned long flags;
|
||||
|
||||
/* destroy workqueue */
|
||||
if ((work_q=ioc->fc_rescan_work_q)) {
|
||||
spin_lock_irqsave(&ioc->fc_rescan_work_lock, flags);
|
||||
ioc->fc_rescan_work_q = NULL;
|
||||
spin_unlock_irqrestore(&ioc->fc_rescan_work_lock, flags);
|
||||
destroy_workqueue(work_q);
|
||||
}
|
||||
|
||||
fc_remove_host(ioc->sh);
|
||||
|
||||
|
|
|
@ -91,6 +91,7 @@ enum mptsas_hotplug_action {
|
|||
MPTSAS_DEL_DEVICE,
|
||||
MPTSAS_ADD_RAID,
|
||||
MPTSAS_DEL_RAID,
|
||||
MPTSAS_IGNORE_EVENT,
|
||||
};
|
||||
|
||||
struct mptsas_hotplug_event {
|
||||
|
@ -298,6 +299,26 @@ mptsas_find_portinfo_by_handle(MPT_ADAPTER *ioc, u16 handle)
|
|||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if there is a scsi end device
|
||||
*/
|
||||
static inline int
|
||||
mptsas_is_end_device(struct mptsas_devinfo * attached)
|
||||
{
|
||||
if ((attached->handle) &&
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_END_DEVICE) &&
|
||||
((attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_SSP_TARGET) |
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_STP_TARGET) |
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_SATA_DEVICE)))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
mptsas_sas_enclosure_pg0(MPT_ADAPTER *ioc, struct mptsas_enclosure *enclosure,
|
||||
u32 form, u32 form_specific)
|
||||
|
@ -872,7 +893,11 @@ mptsas_sas_device_pg0(MPT_ADAPTER *ioc, struct mptsas_devinfo *device_info,
|
|||
SasDevicePage0_t *buffer;
|
||||
dma_addr_t dma_handle;
|
||||
__le64 sas_address;
|
||||
int error;
|
||||
int error=0;
|
||||
|
||||
if (ioc->sas_discovery_runtime &&
|
||||
mptsas_is_end_device(device_info))
|
||||
goto out;
|
||||
|
||||
hdr.PageVersion = MPI_SASDEVICE0_PAGEVERSION;
|
||||
hdr.ExtPageLength = 0;
|
||||
|
@ -1009,7 +1034,11 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
|
|||
CONFIGPARMS cfg;
|
||||
SasExpanderPage1_t *buffer;
|
||||
dma_addr_t dma_handle;
|
||||
int error;
|
||||
int error=0;
|
||||
|
||||
if (ioc->sas_discovery_runtime &&
|
||||
mptsas_is_end_device(&phy_info->attached))
|
||||
goto out;
|
||||
|
||||
hdr.PageVersion = MPI_SASEXPANDER0_PAGEVERSION;
|
||||
hdr.ExtPageLength = 0;
|
||||
|
@ -1068,26 +1097,6 @@ mptsas_sas_expander_pg1(MPT_ADAPTER *ioc, struct mptsas_phyinfo *phy_info,
|
|||
return error;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns true if there is a scsi end device
|
||||
*/
|
||||
static inline int
|
||||
mptsas_is_end_device(struct mptsas_devinfo * attached)
|
||||
{
|
||||
if ((attached->handle) &&
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_END_DEVICE) &&
|
||||
((attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_SSP_TARGET) |
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_STP_TARGET) |
|
||||
(attached->device_info &
|
||||
MPI_SAS_DEVICE_INFO_SATA_DEVICE)))
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
mptsas_parse_device_info(struct sas_identify *identify,
|
||||
struct mptsas_devinfo *device_info)
|
||||
|
@ -1737,6 +1746,9 @@ mptsas_hotplug_work(void *arg)
|
|||
break;
|
||||
case MPTSAS_ADD_DEVICE:
|
||||
|
||||
if (ev->phys_disk_num_valid)
|
||||
mpt_findImVolumes(ioc);
|
||||
|
||||
/*
|
||||
* Refresh sas device pg0 data
|
||||
*/
|
||||
|
@ -1868,6 +1880,9 @@ mptsas_hotplug_work(void *arg)
|
|||
scsi_device_put(sdev);
|
||||
mpt_findImVolumes(ioc);
|
||||
break;
|
||||
case MPTSAS_IGNORE_EVENT:
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
kfree(ev);
|
||||
|
@ -1940,7 +1955,8 @@ mptscsih_send_raid_event(MPT_ADAPTER *ioc,
|
|||
EVENT_DATA_RAID *raid_event_data)
|
||||
{
|
||||
struct mptsas_hotplug_event *ev;
|
||||
RAID_VOL0_STATUS * volumeStatus;
|
||||
int status = le32_to_cpu(raid_event_data->SettingsStatus);
|
||||
int state = (status >> 8) & 0xff;
|
||||
|
||||
if (ioc->bus_type != SAS)
|
||||
return;
|
||||
|
@ -1955,6 +1971,7 @@ mptscsih_send_raid_event(MPT_ADAPTER *ioc,
|
|||
INIT_WORK(&ev->work, mptsas_hotplug_work, ev);
|
||||
ev->ioc = ioc;
|
||||
ev->id = raid_event_data->VolumeID;
|
||||
ev->event_type = MPTSAS_IGNORE_EVENT;
|
||||
|
||||
switch (raid_event_data->ReasonCode) {
|
||||
case MPI_EVENT_RAID_RC_PHYSDISK_DELETED:
|
||||
|
@ -1966,6 +1983,25 @@ mptscsih_send_raid_event(MPT_ADAPTER *ioc,
|
|||
ev->phys_disk_num = raid_event_data->PhysDiskNum;
|
||||
ev->event_type = MPTSAS_DEL_DEVICE;
|
||||
break;
|
||||
case MPI_EVENT_RAID_RC_PHYSDISK_STATUS_CHANGED:
|
||||
switch (state) {
|
||||
case MPI_PD_STATE_ONLINE:
|
||||
ioc->raid_data.isRaid = 1;
|
||||
ev->phys_disk_num_valid = 1;
|
||||
ev->phys_disk_num = raid_event_data->PhysDiskNum;
|
||||
ev->event_type = MPTSAS_ADD_DEVICE;
|
||||
break;
|
||||
case MPI_PD_STATE_MISSING:
|
||||
case MPI_PD_STATE_NOT_COMPATIBLE:
|
||||
case MPI_PD_STATE_OFFLINE_AT_HOST_REQUEST:
|
||||
case MPI_PD_STATE_FAILED_AT_HOST_REQUEST:
|
||||
case MPI_PD_STATE_OFFLINE_FOR_ANOTHER_REASON:
|
||||
ev->event_type = MPTSAS_DEL_DEVICE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case MPI_EVENT_RAID_RC_VOLUME_DELETED:
|
||||
ev->event_type = MPTSAS_DEL_RAID;
|
||||
break;
|
||||
|
@ -1973,11 +2009,18 @@ mptscsih_send_raid_event(MPT_ADAPTER *ioc,
|
|||
ev->event_type = MPTSAS_ADD_RAID;
|
||||
break;
|
||||
case MPI_EVENT_RAID_RC_VOLUME_STATUS_CHANGED:
|
||||
volumeStatus = (RAID_VOL0_STATUS *) &
|
||||
raid_event_data->SettingsStatus;
|
||||
ev->event_type = (volumeStatus->State ==
|
||||
MPI_RAIDVOL0_STATUS_STATE_FAILED) ?
|
||||
MPTSAS_DEL_RAID : MPTSAS_ADD_RAID;
|
||||
switch (state) {
|
||||
case MPI_RAIDVOL0_STATUS_STATE_FAILED:
|
||||
case MPI_RAIDVOL0_STATUS_STATE_MISSING:
|
||||
ev->event_type = MPTSAS_DEL_RAID;
|
||||
break;
|
||||
case MPI_RAIDVOL0_STATUS_STATE_OPTIMAL:
|
||||
case MPI_RAIDVOL0_STATUS_STATE_DEGRADED:
|
||||
ev->event_type = MPTSAS_ADD_RAID;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue