mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 08:44:21 +08:00
Merge branch 'linus' into x86/memory-corruption-check
This commit is contained in:
commit
a9b9e81c91
2
.mailmap
2
.mailmap
@ -96,4 +96,6 @@ Tejun Heo <htejun@gmail.com>
|
|||||||
Thomas Graf <tgraf@suug.ch>
|
Thomas Graf <tgraf@suug.ch>
|
||||||
Tony Luck <tony.luck@intel.com>
|
Tony Luck <tony.luck@intel.com>
|
||||||
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
Tsuneo Yoshioka <Tsuneo.Yoshioka@f-secure.com>
|
||||||
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
|
Uwe Kleine-König <ukleinek@informatik.uni-freiburg.de>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
|
@ -251,8 +251,6 @@ mono.txt
|
|||||||
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
|
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
|
||||||
moxa-smartio
|
moxa-smartio
|
||||||
- file with info on installing/using Moxa multiport serial driver.
|
- file with info on installing/using Moxa multiport serial driver.
|
||||||
mtrr.txt
|
|
||||||
- how to use PPro Memory Type Range Registers to increase performance.
|
|
||||||
mutex-design.txt
|
mutex-design.txt
|
||||||
- info on the generic mutex subsystem.
|
- info on the generic mutex subsystem.
|
||||||
namespaces/
|
namespaces/
|
||||||
|
26
Documentation/ABI/testing/sysfs-gpio
Normal file
26
Documentation/ABI/testing/sysfs-gpio
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
What: /sys/class/gpio/
|
||||||
|
Date: July 2008
|
||||||
|
KernelVersion: 2.6.27
|
||||||
|
Contact: David Brownell <dbrownell@users.sourceforge.net>
|
||||||
|
Description:
|
||||||
|
|
||||||
|
As a Kconfig option, individual GPIO signals may be accessed from
|
||||||
|
userspace. GPIOs are only made available to userspace by an explicit
|
||||||
|
"export" operation. If a given GPIO is not claimed for use by
|
||||||
|
kernel code, it may be exported by userspace (and unexported later).
|
||||||
|
Kernel code may export it for complete or partial access.
|
||||||
|
|
||||||
|
GPIOs are identified as they are inside the kernel, using integers in
|
||||||
|
the range 0..INT_MAX. See Documentation/gpio.txt for more information.
|
||||||
|
|
||||||
|
/sys/class/gpio
|
||||||
|
/export ... asks the kernel to export a GPIO to userspace
|
||||||
|
/unexport ... to return a GPIO to the kernel
|
||||||
|
/gpioN ... for each exported GPIO #N
|
||||||
|
/value ... always readable, writes fail for input GPIOs
|
||||||
|
/direction ... r/w as: in, out (default low); write: high, low
|
||||||
|
/gpiochipN ... for each gpiochip; #N is its first GPIO
|
||||||
|
/base ... (r/o) same as N
|
||||||
|
/label ... (r/o) descriptive, not necessarily unique
|
||||||
|
/ngpio ... (r/o) number of GPIOs; numbered N to N + (ngpio - 1)
|
||||||
|
|
@ -337,7 +337,7 @@ With scatterlists, you use the resulting mapping like this:
|
|||||||
int i, count = dma_map_sg(dev, sglist, nents, direction);
|
int i, count = dma_map_sg(dev, sglist, nents, direction);
|
||||||
struct scatterlist *sg;
|
struct scatterlist *sg;
|
||||||
|
|
||||||
for (i = 0, sg = sglist; i < count; i++, sg++) {
|
for_each_sg(sglist, sg, count, i) {
|
||||||
hw_address[i] = sg_dma_address(sg);
|
hw_address[i] = sg_dma_address(sg);
|
||||||
hw_len[i] = sg_dma_len(sg);
|
hw_len[i] = sg_dma_len(sg);
|
||||||
}
|
}
|
||||||
|
@ -740,7 +740,7 @@ failure can be determined by:
|
|||||||
dma_addr_t dma_handle;
|
dma_addr_t dma_handle;
|
||||||
|
|
||||||
dma_handle = pci_map_single(pdev, addr, size, direction);
|
dma_handle = pci_map_single(pdev, addr, size, direction);
|
||||||
if (pci_dma_mapping_error(dma_handle)) {
|
if (pci_dma_mapping_error(pdev, dma_handle)) {
|
||||||
/*
|
/*
|
||||||
* reduce current DMA mapping usage,
|
* reduce current DMA mapping usage,
|
||||||
* delay and try again later or
|
* delay and try again later or
|
||||||
|
@ -283,6 +283,7 @@ X!Earch/x86/kernel/mca_32.c
|
|||||||
<chapter id="security">
|
<chapter id="security">
|
||||||
<title>Security Framework</title>
|
<title>Security Framework</title>
|
||||||
!Isecurity/security.c
|
!Isecurity/security.c
|
||||||
|
!Esecurity/inode.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="audit">
|
<chapter id="audit">
|
||||||
@ -364,6 +365,10 @@ X!Edrivers/pnp/system.c
|
|||||||
!Eblock/blk-barrier.c
|
!Eblock/blk-barrier.c
|
||||||
!Eblock/blk-tag.c
|
!Eblock/blk-tag.c
|
||||||
!Iblock/blk-tag.c
|
!Iblock/blk-tag.c
|
||||||
|
!Eblock/blk-integrity.c
|
||||||
|
!Iblock/blktrace.c
|
||||||
|
!Iblock/genhd.c
|
||||||
|
!Eblock/genhd.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="chrdev">
|
<chapter id="chrdev">
|
||||||
|
@ -145,7 +145,6 @@ usage should require reading the full document.
|
|||||||
this though and the recommendation to allow only a single
|
this though and the recommendation to allow only a single
|
||||||
interface in STA mode at first!
|
interface in STA mode at first!
|
||||||
</para>
|
</para>
|
||||||
!Finclude/net/mac80211.h ieee80211_if_types
|
|
||||||
!Finclude/net/mac80211.h ieee80211_if_init_conf
|
!Finclude/net/mac80211.h ieee80211_if_init_conf
|
||||||
!Finclude/net/mac80211.h ieee80211_if_conf
|
!Finclude/net/mac80211.h ieee80211_if_conf
|
||||||
</chapter>
|
</chapter>
|
||||||
@ -177,8 +176,7 @@ usage should require reading the full document.
|
|||||||
<title>functions/definitions</title>
|
<title>functions/definitions</title>
|
||||||
!Finclude/net/mac80211.h ieee80211_rx_status
|
!Finclude/net/mac80211.h ieee80211_rx_status
|
||||||
!Finclude/net/mac80211.h mac80211_rx_flags
|
!Finclude/net/mac80211.h mac80211_rx_flags
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_control
|
!Finclude/net/mac80211.h ieee80211_tx_info
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_status_flags
|
|
||||||
!Finclude/net/mac80211.h ieee80211_rx
|
!Finclude/net/mac80211.h ieee80211_rx
|
||||||
!Finclude/net/mac80211.h ieee80211_rx_irqsafe
|
!Finclude/net/mac80211.h ieee80211_rx_irqsafe
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_status
|
!Finclude/net/mac80211.h ieee80211_tx_status
|
||||||
@ -189,12 +187,11 @@ usage should require reading the full document.
|
|||||||
!Finclude/net/mac80211.h ieee80211_ctstoself_duration
|
!Finclude/net/mac80211.h ieee80211_ctstoself_duration
|
||||||
!Finclude/net/mac80211.h ieee80211_generic_frame_duration
|
!Finclude/net/mac80211.h ieee80211_generic_frame_duration
|
||||||
!Finclude/net/mac80211.h ieee80211_get_hdrlen_from_skb
|
!Finclude/net/mac80211.h ieee80211_get_hdrlen_from_skb
|
||||||
!Finclude/net/mac80211.h ieee80211_get_hdrlen
|
!Finclude/net/mac80211.h ieee80211_hdrlen
|
||||||
!Finclude/net/mac80211.h ieee80211_wake_queue
|
!Finclude/net/mac80211.h ieee80211_wake_queue
|
||||||
!Finclude/net/mac80211.h ieee80211_stop_queue
|
!Finclude/net/mac80211.h ieee80211_stop_queue
|
||||||
!Finclude/net/mac80211.h ieee80211_start_queues
|
|
||||||
!Finclude/net/mac80211.h ieee80211_stop_queues
|
|
||||||
!Finclude/net/mac80211.h ieee80211_wake_queues
|
!Finclude/net/mac80211.h ieee80211_wake_queues
|
||||||
|
!Finclude/net/mac80211.h ieee80211_stop_queues
|
||||||
</sect1>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
@ -230,8 +227,7 @@ usage should require reading the full document.
|
|||||||
<title>Multiple queues and QoS support</title>
|
<title>Multiple queues and QoS support</title>
|
||||||
<para>TBD</para>
|
<para>TBD</para>
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_queue_params
|
!Finclude/net/mac80211.h ieee80211_tx_queue_params
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_queue_stats_data
|
!Finclude/net/mac80211.h ieee80211_tx_queue_stats
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_queue
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="AP">
|
<chapter id="AP">
|
||||||
|
@ -77,7 +77,8 @@ documentation files are also added which explain how to use the feature.
|
|||||||
When a kernel change causes the interface that the kernel exposes to
|
When a kernel change causes the interface that the kernel exposes to
|
||||||
userspace to change, it is recommended that you send the information or
|
userspace to change, it is recommended that you send the information or
|
||||||
a patch to the manual pages explaining the change to the manual pages
|
a patch to the manual pages explaining the change to the manual pages
|
||||||
maintainer at mtk.manpages@gmail.com.
|
maintainer at mtk.manpages@gmail.com, and CC the list
|
||||||
|
linux-api@vger.kernel.org.
|
||||||
|
|
||||||
Here is a list of files that are in the kernel source tree that are
|
Here is a list of files that are in the kernel source tree that are
|
||||||
required reading:
|
required reading:
|
||||||
|
@ -210,7 +210,7 @@ over a rather long period of time, but improvements are always welcome!
|
|||||||
number of updates per grace period.
|
number of updates per grace period.
|
||||||
|
|
||||||
9. All RCU list-traversal primitives, which include
|
9. All RCU list-traversal primitives, which include
|
||||||
rcu_dereference(), list_for_each_rcu(), list_for_each_entry_rcu(),
|
rcu_dereference(), list_for_each_entry_rcu(),
|
||||||
list_for_each_continue_rcu(), and list_for_each_safe_rcu(),
|
list_for_each_continue_rcu(), and list_for_each_safe_rcu(),
|
||||||
must be either within an RCU read-side critical section or
|
must be either within an RCU read-side critical section or
|
||||||
must be protected by appropriate update-side locks. RCU
|
must be protected by appropriate update-side locks. RCU
|
||||||
|
@ -29,9 +29,9 @@ release_referenced() delete()
|
|||||||
}
|
}
|
||||||
|
|
||||||
If this list/array is made lock free using RCU as in changing the
|
If this list/array is made lock free using RCU as in changing the
|
||||||
write_lock() in add() and delete() to spin_lock and changing read_lock
|
write_lock() in add() and delete() to spin_lock() and changing read_lock()
|
||||||
in search_and_reference to rcu_read_lock(), the atomic_get in
|
in search_and_reference() to rcu_read_lock(), the atomic_inc() in
|
||||||
search_and_reference could potentially hold reference to an element which
|
search_and_reference() could potentially hold reference to an element which
|
||||||
has already been deleted from the list/array. Use atomic_inc_not_zero()
|
has already been deleted from the list/array. Use atomic_inc_not_zero()
|
||||||
in this scenario as follows:
|
in this scenario as follows:
|
||||||
|
|
||||||
@ -40,20 +40,20 @@ add() search_and_reference()
|
|||||||
{ {
|
{ {
|
||||||
alloc_object rcu_read_lock();
|
alloc_object rcu_read_lock();
|
||||||
... search_for_element
|
... search_for_element
|
||||||
atomic_set(&el->rc, 1); if (atomic_inc_not_zero(&el->rc)) {
|
atomic_set(&el->rc, 1); if (!atomic_inc_not_zero(&el->rc)) {
|
||||||
write_lock(&list_lock); rcu_read_unlock();
|
spin_lock(&list_lock); rcu_read_unlock();
|
||||||
return FAIL;
|
return FAIL;
|
||||||
add_element }
|
add_element }
|
||||||
... ...
|
... ...
|
||||||
write_unlock(&list_lock); rcu_read_unlock();
|
spin_unlock(&list_lock); rcu_read_unlock();
|
||||||
} }
|
} }
|
||||||
3. 4.
|
3. 4.
|
||||||
release_referenced() delete()
|
release_referenced() delete()
|
||||||
{ {
|
{ {
|
||||||
... write_lock(&list_lock);
|
... spin_lock(&list_lock);
|
||||||
if (atomic_dec_and_test(&el->rc)) ...
|
if (atomic_dec_and_test(&el->rc)) ...
|
||||||
call_rcu(&el->head, el_free); delete_element
|
call_rcu(&el->head, el_free); delete_element
|
||||||
... write_unlock(&list_lock);
|
... spin_unlock(&list_lock);
|
||||||
} ...
|
} ...
|
||||||
if (atomic_dec_and_test(&el->rc))
|
if (atomic_dec_and_test(&el->rc))
|
||||||
call_rcu(&el->head, el_free);
|
call_rcu(&el->head, el_free);
|
||||||
|
@ -786,8 +786,6 @@ RCU pointer/list traversal:
|
|||||||
list_for_each_entry_rcu
|
list_for_each_entry_rcu
|
||||||
hlist_for_each_entry_rcu
|
hlist_for_each_entry_rcu
|
||||||
|
|
||||||
list_for_each_rcu (to be deprecated in favor of
|
|
||||||
list_for_each_entry_rcu)
|
|
||||||
list_for_each_continue_rcu (to be deprecated in favor of new
|
list_for_each_continue_rcu (to be deprecated in favor of new
|
||||||
list_for_each_entry_continue_rcu)
|
list_for_each_entry_continue_rcu)
|
||||||
|
|
||||||
|
27
Documentation/SELinux.txt
Normal file
27
Documentation/SELinux.txt
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
If you want to use SELinux, chances are you will want
|
||||||
|
to use the distro-provided policies, or install the
|
||||||
|
latest reference policy release from
|
||||||
|
http://oss.tresys.com/projects/refpolicy
|
||||||
|
|
||||||
|
However, if you want to install a dummy policy for
|
||||||
|
testing, you can do using 'mdp' provided under
|
||||||
|
scripts/selinux. Note that this requires the selinux
|
||||||
|
userspace to be installed - in particular you will
|
||||||
|
need checkpolicy to compile a kernel, and setfiles and
|
||||||
|
fixfiles to label the filesystem.
|
||||||
|
|
||||||
|
1. Compile the kernel with selinux enabled.
|
||||||
|
2. Type 'make' to compile mdp.
|
||||||
|
3. Make sure that you are not running with
|
||||||
|
SELinux enabled and a real policy. If
|
||||||
|
you are, reboot with selinux disabled
|
||||||
|
before continuing.
|
||||||
|
4. Run install_policy.sh:
|
||||||
|
cd scripts/selinux
|
||||||
|
sh install_policy.sh
|
||||||
|
|
||||||
|
Step 4 will create a new dummy policy valid for your
|
||||||
|
kernel, with a single selinux user, role, and type.
|
||||||
|
It will compile the policy, will set your SELINUXTYPE to
|
||||||
|
dummy in /etc/selinux/config, install the compiled policy
|
||||||
|
as 'dummy', and relabel your filesystem.
|
@ -67,6 +67,8 @@ kernel patches.
|
|||||||
|
|
||||||
19: All new userspace interfaces are documented in Documentation/ABI/.
|
19: All new userspace interfaces are documented in Documentation/ABI/.
|
||||||
See Documentation/ABI/README for more information.
|
See Documentation/ABI/README for more information.
|
||||||
|
Patches that change userspace interfaces should be CCed to
|
||||||
|
linux-api@vger.kernel.org.
|
||||||
|
|
||||||
20: Check that it all passes `make headers_check'.
|
20: Check that it all passes `make headers_check'.
|
||||||
|
|
||||||
|
@ -30,12 +30,18 @@ write_expire (in ms)
|
|||||||
Similar to read_expire mentioned above, but for writes.
|
Similar to read_expire mentioned above, but for writes.
|
||||||
|
|
||||||
|
|
||||||
fifo_batch
|
fifo_batch (number of requests)
|
||||||
----------
|
----------
|
||||||
|
|
||||||
When a read request expires its deadline, we must move some requests from
|
Requests are grouped into ``batches'' of a particular data direction (read or
|
||||||
the sorted io scheduler list to the block device dispatch queue. fifo_batch
|
write) which are serviced in increasing sector order. To limit extra seeking,
|
||||||
controls how many requests we move.
|
deadline expiries are only checked between batches. fifo_batch controls the
|
||||||
|
maximum number of requests per batch.
|
||||||
|
|
||||||
|
This parameter tunes the balance between per-request latency and aggregate
|
||||||
|
throughput. When low latency is the primary concern, smaller is better (where
|
||||||
|
a value of 1 yields first-come first-served behaviour). Increasing fifo_batch
|
||||||
|
generally improves throughput, at the cost of latency variation.
|
||||||
|
|
||||||
|
|
||||||
writes_starved (number of dispatches)
|
writes_starved (number of dispatches)
|
||||||
|
@ -145,8 +145,7 @@ useful for reading photocds.
|
|||||||
|
|
||||||
To play an audio CD, you should first unmount and remove any data
|
To play an audio CD, you should first unmount and remove any data
|
||||||
CDROM. Any of the CDROM player programs should then work (workman,
|
CDROM. Any of the CDROM player programs should then work (workman,
|
||||||
workbone, cdplayer, etc.). Lacking anything else, you could use the
|
workbone, cdplayer, etc.).
|
||||||
cdtester program in Documentation/cdrom/sbpcd.
|
|
||||||
|
|
||||||
On a few drives, you can read digital audio directly using a program
|
On a few drives, you can read digital audio directly using a program
|
||||||
such as cdda2wav. The only types of drive which I've heard support
|
such as cdda2wav. The only types of drive which I've heard support
|
||||||
|
@ -35,11 +35,9 @@ Mailing List
|
|||||||
------------
|
------------
|
||||||
There is a CPU frequency changing CVS commit and general list where
|
There is a CPU frequency changing CVS commit and general list where
|
||||||
you can report bugs, problems or submit patches. To post a message,
|
you can report bugs, problems or submit patches. To post a message,
|
||||||
send an email to cpufreq@lists.linux.org.uk, to subscribe go to
|
send an email to cpufreq@vger.kernel.org, to subscribe go to
|
||||||
http://lists.linux.org.uk/mailman/listinfo/cpufreq. Previous post to the
|
http://vger.kernel.org/vger-lists.html#cpufreq and follow the
|
||||||
mailing list are available to subscribers at
|
instructions there.
|
||||||
http://lists.linux.org.uk/mailman/private/cpufreq/.
|
|
||||||
|
|
||||||
|
|
||||||
Links
|
Links
|
||||||
-----
|
-----
|
||||||
@ -50,7 +48,7 @@ how to access the CVS repository:
|
|||||||
* http://cvs.arm.linux.org.uk/
|
* http://cvs.arm.linux.org.uk/
|
||||||
|
|
||||||
the CPUFreq Mailing list:
|
the CPUFreq Mailing list:
|
||||||
* http://lists.linux.org.uk/mailman/listinfo/cpufreq
|
* http://vger.kernel.org/vger-lists.html#cpufreq
|
||||||
|
|
||||||
Clock and voltage scaling for the SA-1100:
|
Clock and voltage scaling for the SA-1100:
|
||||||
* http://www.lartmaker.nl/projects/scaling
|
* http://www.lartmaker.nl/projects/scaling
|
||||||
|
@ -635,14 +635,16 @@ prior 'mems' setting, will not be moved.
|
|||||||
|
|
||||||
There is an exception to the above. If hotplug functionality is used
|
There is an exception to the above. If hotplug functionality is used
|
||||||
to remove all the CPUs that are currently assigned to a cpuset,
|
to remove all the CPUs that are currently assigned to a cpuset,
|
||||||
then the kernel will automatically update the cpus_allowed of all
|
then all the tasks in that cpuset will be moved to the nearest ancestor
|
||||||
tasks attached to CPUs in that cpuset to allow all CPUs. When memory
|
with non-empty cpus. But the moving of some (or all) tasks might fail if
|
||||||
hotplug functionality for removing Memory Nodes is available, a
|
cpuset is bound with another cgroup subsystem which has some restrictions
|
||||||
similar exception is expected to apply there as well. In general,
|
on task attaching. In this failing case, those tasks will stay
|
||||||
the kernel prefers to violate cpuset placement, over starving a task
|
in the original cpuset, and the kernel will automatically update
|
||||||
that has had all its allowed CPUs or Memory Nodes taken offline. User
|
their cpus_allowed to allow all online CPUs. When memory hotplug
|
||||||
code should reconfigure cpusets to only refer to online CPUs and Memory
|
functionality for removing Memory Nodes is available, a similar exception
|
||||||
Nodes when using hotplug to add or remove such resources.
|
is expected to apply there as well. In general, the kernel prefers to
|
||||||
|
violate cpuset placement, over starving a task that has had all
|
||||||
|
its allowed CPUs or Memory Nodes taken offline.
|
||||||
|
|
||||||
There is a second exception to the above. GFP_ATOMIC requests are
|
There is a second exception to the above. GFP_ATOMIC requests are
|
||||||
kernel internal allocations that must be satisfied, immediately.
|
kernel internal allocations that must be satisfied, immediately.
|
||||||
|
@ -6,6 +6,24 @@ be removed from this file.
|
|||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: old static regulatory information and ieee80211_regdom module parameter
|
||||||
|
When: 2.6.29
|
||||||
|
Why: The old regulatory infrastructure has been replaced with a new one
|
||||||
|
which does not require statically defined regulatory domains. We do
|
||||||
|
not want to keep static regulatory domains in the kernel due to the
|
||||||
|
the dynamic nature of regulatory law and localization. We kept around
|
||||||
|
the old static definitions for the regulatory domains of:
|
||||||
|
* US
|
||||||
|
* JP
|
||||||
|
* EU
|
||||||
|
and used by default the US when CONFIG_WIRELESS_OLD_REGULATORY was
|
||||||
|
set. We also kept around the ieee80211_regdom module parameter in case
|
||||||
|
some applications were relying on it. Changing regulatory domains
|
||||||
|
can now be done instead by using nl80211, as is done with iw.
|
||||||
|
Who: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
What: dev->power.power_state
|
What: dev->power.power_state
|
||||||
When: July 2007
|
When: July 2007
|
||||||
Why: Broken design for runtime control over driver power states, confusing
|
Why: Broken design for runtime control over driver power states, confusing
|
||||||
@ -232,6 +250,9 @@ What (Why):
|
|||||||
- xt_mark match revision 0
|
- xt_mark match revision 0
|
||||||
(superseded by xt_mark match revision 1)
|
(superseded by xt_mark match revision 1)
|
||||||
|
|
||||||
|
- xt_recent: the old ipt_recent proc dir
|
||||||
|
(superseded by /proc/net/xt_recent)
|
||||||
|
|
||||||
When: January 2009 or Linux 2.7.0, whichever comes first
|
When: January 2009 or Linux 2.7.0, whichever comes first
|
||||||
Why: Superseded by newer revisions or modules
|
Why: Superseded by newer revisions or modules
|
||||||
Who: Jan Engelhardt <jengelh@computergmbh.de>
|
Who: Jan Engelhardt <jengelh@computergmbh.de>
|
||||||
@ -322,3 +343,11 @@ Why: Accounting can now be enabled/disabled without kernel recompilation.
|
|||||||
controlled by a kernel/module/sysfs/sysctl parameter.
|
controlled by a kernel/module/sysfs/sysctl parameter.
|
||||||
Who: Krzysztof Piotr Oledzki <ole@ans.pl>
|
Who: Krzysztof Piotr Oledzki <ole@ans.pl>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: ide-scsi (BLK_DEV_IDESCSI)
|
||||||
|
When: 2.6.29
|
||||||
|
Why: The 2.6 kernel supports direct writing to ide CD drives, which
|
||||||
|
eliminates the need for ide-scsi. The new method is more
|
||||||
|
efficient in every way.
|
||||||
|
Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||||
|
@ -32,9 +32,9 @@ Mailing list: linux-ext4@vger.kernel.org
|
|||||||
you will need to merge your changes with the version from e2fsprogs
|
you will need to merge your changes with the version from e2fsprogs
|
||||||
1.41.x.
|
1.41.x.
|
||||||
|
|
||||||
- Create a new filesystem using the ext4dev filesystem type:
|
- Create a new filesystem using the ext4 filesystem type:
|
||||||
|
|
||||||
# mke2fs -t ext4dev /dev/hda1
|
# mke2fs -t ext4 /dev/hda1
|
||||||
|
|
||||||
Or configure an existing ext3 filesystem to support extents and set
|
Or configure an existing ext3 filesystem to support extents and set
|
||||||
the test_fs flag to indicate that it's ok for an in-development
|
the test_fs flag to indicate that it's ok for an in-development
|
||||||
@ -47,13 +47,13 @@ Mailing list: linux-ext4@vger.kernel.org
|
|||||||
|
|
||||||
# tune2fs -I 256 /dev/hda1
|
# tune2fs -I 256 /dev/hda1
|
||||||
|
|
||||||
(Note: we currently do not have tools to convert an ext4dev
|
(Note: we currently do not have tools to convert an ext4
|
||||||
filesystem back to ext3; so please do not do try this on production
|
filesystem back to ext3; so please do not do try this on production
|
||||||
filesystems.)
|
filesystems.)
|
||||||
|
|
||||||
- Mounting:
|
- Mounting:
|
||||||
|
|
||||||
# mount -t ext4dev /dev/hda1 /wherever
|
# mount -t ext4 /dev/hda1 /wherever
|
||||||
|
|
||||||
- When comparing performance with other filesystems, remember that
|
- When comparing performance with other filesystems, remember that
|
||||||
ext3/4 by default offers higher data integrity guarantees than most.
|
ext3/4 by default offers higher data integrity guarantees than most.
|
||||||
@ -177,6 +177,11 @@ barrier=<0|1(*)> This enables/disables the use of write barriers in
|
|||||||
your disks are battery-backed in one way or another,
|
your disks are battery-backed in one way or another,
|
||||||
disabling barriers may safely improve performance.
|
disabling barriers may safely improve performance.
|
||||||
|
|
||||||
|
inode_readahead=n This tuning parameter controls the maximum
|
||||||
|
number of inode table blocks that ext4's inode
|
||||||
|
table readahead algorithm will pre-read into
|
||||||
|
the buffer cache. The default value is 32 blocks.
|
||||||
|
|
||||||
orlov (*) This enables the new Orlov block allocator. It is
|
orlov (*) This enables the new Orlov block allocator. It is
|
||||||
enabled by default.
|
enabled by default.
|
||||||
|
|
||||||
@ -252,6 +257,7 @@ stripe=n Number of filesystem blocks that mballoc will try
|
|||||||
delalloc (*) Deferring block allocation until write-out time.
|
delalloc (*) Deferring block allocation until write-out time.
|
||||||
nodelalloc Disable delayed allocation. Blocks are allocation
|
nodelalloc Disable delayed allocation. Blocks are allocation
|
||||||
when data is copied from user to page cache.
|
when data is copied from user to page cache.
|
||||||
|
|
||||||
Data Mode
|
Data Mode
|
||||||
=========
|
=========
|
||||||
There are 3 different data modes:
|
There are 3 different data modes:
|
||||||
|
228
Documentation/filesystems/fiemap.txt
Normal file
228
Documentation/filesystems/fiemap.txt
Normal file
@ -0,0 +1,228 @@
|
|||||||
|
============
|
||||||
|
Fiemap Ioctl
|
||||||
|
============
|
||||||
|
|
||||||
|
The fiemap ioctl is an efficient method for userspace to get file
|
||||||
|
extent mappings. Instead of block-by-block mapping (such as bmap), fiemap
|
||||||
|
returns a list of extents.
|
||||||
|
|
||||||
|
|
||||||
|
Request Basics
|
||||||
|
--------------
|
||||||
|
|
||||||
|
A fiemap request is encoded within struct fiemap:
|
||||||
|
|
||||||
|
struct fiemap {
|
||||||
|
__u64 fm_start; /* logical offset (inclusive) at
|
||||||
|
* which to start mapping (in) */
|
||||||
|
__u64 fm_length; /* logical length of mapping which
|
||||||
|
* userspace cares about (in) */
|
||||||
|
__u32 fm_flags; /* FIEMAP_FLAG_* flags for request (in/out) */
|
||||||
|
__u32 fm_mapped_extents; /* number of extents that were
|
||||||
|
* mapped (out) */
|
||||||
|
__u32 fm_extent_count; /* size of fm_extents array (in) */
|
||||||
|
__u32 fm_reserved;
|
||||||
|
struct fiemap_extent fm_extents[0]; /* array of mapped extents (out) */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
fm_start, and fm_length specify the logical range within the file
|
||||||
|
which the process would like mappings for. Extents returned mirror
|
||||||
|
those on disk - that is, the logical offset of the 1st returned extent
|
||||||
|
may start before fm_start, and the range covered by the last returned
|
||||||
|
extent may end after fm_length. All offsets and lengths are in bytes.
|
||||||
|
|
||||||
|
Certain flags to modify the way in which mappings are looked up can be
|
||||||
|
set in fm_flags. If the kernel doesn't understand some particular
|
||||||
|
flags, it will return EBADR and the contents of fm_flags will contain
|
||||||
|
the set of flags which caused the error. If the kernel is compatible
|
||||||
|
with all flags passed, the contents of fm_flags will be unmodified.
|
||||||
|
It is up to userspace to determine whether rejection of a particular
|
||||||
|
flag is fatal to it's operation. This scheme is intended to allow the
|
||||||
|
fiemap interface to grow in the future but without losing
|
||||||
|
compatibility with old software.
|
||||||
|
|
||||||
|
fm_extent_count specifies the number of elements in the fm_extents[] array
|
||||||
|
that can be used to return extents. If fm_extent_count is zero, then the
|
||||||
|
fm_extents[] array is ignored (no extents will be returned), and the
|
||||||
|
fm_mapped_extents count will hold the number of extents needed in
|
||||||
|
fm_extents[] to hold the file's current mapping. Note that there is
|
||||||
|
nothing to prevent the file from changing between calls to FIEMAP.
|
||||||
|
|
||||||
|
The following flags can be set in fm_flags:
|
||||||
|
|
||||||
|
* FIEMAP_FLAG_SYNC
|
||||||
|
If this flag is set, the kernel will sync the file before mapping extents.
|
||||||
|
|
||||||
|
* FIEMAP_FLAG_XATTR
|
||||||
|
If this flag is set, the extents returned will describe the inodes
|
||||||
|
extended attribute lookup tree, instead of it's data tree.
|
||||||
|
|
||||||
|
|
||||||
|
Extent Mapping
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Extent information is returned within the embedded fm_extents array
|
||||||
|
which userspace must allocate along with the fiemap structure. The
|
||||||
|
number of elements in the fiemap_extents[] array should be passed via
|
||||||
|
fm_extent_count. The number of extents mapped by kernel will be
|
||||||
|
returned via fm_mapped_extents. If the number of fiemap_extents
|
||||||
|
allocated is less than would be required to map the requested range,
|
||||||
|
the maximum number of extents that can be mapped in the fm_extent[]
|
||||||
|
array will be returned and fm_mapped_extents will be equal to
|
||||||
|
fm_extent_count. In that case, the last extent in the array will not
|
||||||
|
complete the requested range and will not have the FIEMAP_EXTENT_LAST
|
||||||
|
flag set (see the next section on extent flags).
|
||||||
|
|
||||||
|
Each extent is described by a single fiemap_extent structure as
|
||||||
|
returned in fm_extents.
|
||||||
|
|
||||||
|
struct fiemap_extent {
|
||||||
|
__u64 fe_logical; /* logical offset in bytes for the start of
|
||||||
|
* the extent */
|
||||||
|
__u64 fe_physical; /* physical offset in bytes for the start
|
||||||
|
* of the extent */
|
||||||
|
__u64 fe_length; /* length in bytes for the extent */
|
||||||
|
__u64 fe_reserved64[2];
|
||||||
|
__u32 fe_flags; /* FIEMAP_EXTENT_* flags for this extent */
|
||||||
|
__u32 fe_reserved[3];
|
||||||
|
};
|
||||||
|
|
||||||
|
All offsets and lengths are in bytes and mirror those on disk. It is valid
|
||||||
|
for an extents logical offset to start before the request or it's logical
|
||||||
|
length to extend past the request. Unless FIEMAP_EXTENT_NOT_ALIGNED is
|
||||||
|
returned, fe_logical, fe_physical, and fe_length will be aligned to the
|
||||||
|
block size of the file system. With the exception of extents flagged as
|
||||||
|
FIEMAP_EXTENT_MERGED, adjacent extents will not be merged.
|
||||||
|
|
||||||
|
The fe_flags field contains flags which describe the extent returned.
|
||||||
|
A special flag, FIEMAP_EXTENT_LAST is always set on the last extent in
|
||||||
|
the file so that the process making fiemap calls can determine when no
|
||||||
|
more extents are available, without having to call the ioctl again.
|
||||||
|
|
||||||
|
Some flags are intentionally vague and will always be set in the
|
||||||
|
presence of other more specific flags. This way a program looking for
|
||||||
|
a general property does not have to know all existing and future flags
|
||||||
|
which imply that property.
|
||||||
|
|
||||||
|
For example, if FIEMAP_EXTENT_DATA_INLINE or FIEMAP_EXTENT_DATA_TAIL
|
||||||
|
are set, FIEMAP_EXTENT_NOT_ALIGNED will also be set. A program looking
|
||||||
|
for inline or tail-packed data can key on the specific flag. Software
|
||||||
|
which simply cares not to try operating on non-aligned extents
|
||||||
|
however, can just key on FIEMAP_EXTENT_NOT_ALIGNED, and not have to
|
||||||
|
worry about all present and future flags which might imply unaligned
|
||||||
|
data. Note that the opposite is not true - it would be valid for
|
||||||
|
FIEMAP_EXTENT_NOT_ALIGNED to appear alone.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_LAST
|
||||||
|
This is the last extent in the file. A mapping attempt past this
|
||||||
|
extent will return nothing.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_UNKNOWN
|
||||||
|
The location of this extent is currently unknown. This may indicate
|
||||||
|
the data is stored on an inaccessible volume or that no storage has
|
||||||
|
been allocated for the file yet.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_DELALLOC
|
||||||
|
- This will also set FIEMAP_EXTENT_UNKNOWN.
|
||||||
|
Delayed allocation - while there is data for this extent, it's
|
||||||
|
physical location has not been allocated yet.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_ENCODED
|
||||||
|
This extent does not consist of plain filesystem blocks but is
|
||||||
|
encoded (e.g. encrypted or compressed). Reading the data in this
|
||||||
|
extent via I/O to the block device will have undefined results.
|
||||||
|
|
||||||
|
Note that it is *always* undefined to try to update the data
|
||||||
|
in-place by writing to the indicated location without the
|
||||||
|
assistance of the filesystem, or to access the data using the
|
||||||
|
information returned by the FIEMAP interface while the filesystem
|
||||||
|
is mounted. In other words, user applications may only read the
|
||||||
|
extent data via I/O to the block device while the filesystem is
|
||||||
|
unmounted, and then only if the FIEMAP_EXTENT_ENCODED flag is
|
||||||
|
clear; user applications must not try reading or writing to the
|
||||||
|
filesystem via the block device under any other circumstances.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_DATA_ENCRYPTED
|
||||||
|
- This will also set FIEMAP_EXTENT_ENCODED
|
||||||
|
The data in this extent has been encrypted by the file system.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_NOT_ALIGNED
|
||||||
|
Extent offsets and length are not guaranteed to be block aligned.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_DATA_INLINE
|
||||||
|
This will also set FIEMAP_EXTENT_NOT_ALIGNED
|
||||||
|
Data is located within a meta data block.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_DATA_TAIL
|
||||||
|
This will also set FIEMAP_EXTENT_NOT_ALIGNED
|
||||||
|
Data is packed into a block with data from other files.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_UNWRITTEN
|
||||||
|
Unwritten extent - the extent is allocated but it's data has not been
|
||||||
|
initialized. This indicates the extent's data will be all zero if read
|
||||||
|
through the filesystem but the contents are undefined if read directly from
|
||||||
|
the device.
|
||||||
|
|
||||||
|
* FIEMAP_EXTENT_MERGED
|
||||||
|
This will be set when a file does not support extents, i.e., it uses a block
|
||||||
|
based addressing scheme. Since returning an extent for each block back to
|
||||||
|
userspace would be highly inefficient, the kernel will try to merge most
|
||||||
|
adjacent blocks into 'extents'.
|
||||||
|
|
||||||
|
|
||||||
|
VFS -> File System Implementation
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
File systems wishing to support fiemap must implement a ->fiemap callback on
|
||||||
|
their inode_operations structure. The fs ->fiemap call is responsible for
|
||||||
|
defining it's set of supported fiemap flags, and calling a helper function on
|
||||||
|
each discovered extent:
|
||||||
|
|
||||||
|
struct inode_operations {
|
||||||
|
...
|
||||||
|
|
||||||
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
||||||
|
u64 len);
|
||||||
|
|
||||||
|
->fiemap is passed struct fiemap_extent_info which describes the
|
||||||
|
fiemap request:
|
||||||
|
|
||||||
|
struct fiemap_extent_info {
|
||||||
|
unsigned int fi_flags; /* Flags as passed from user */
|
||||||
|
unsigned int fi_extents_mapped; /* Number of mapped extents */
|
||||||
|
unsigned int fi_extents_max; /* Size of fiemap_extent array */
|
||||||
|
struct fiemap_extent *fi_extents_start; /* Start of fiemap_extent array */
|
||||||
|
};
|
||||||
|
|
||||||
|
It is intended that the file system should not need to access any of this
|
||||||
|
structure directly.
|
||||||
|
|
||||||
|
|
||||||
|
Flag checking should be done at the beginning of the ->fiemap callback via the
|
||||||
|
fiemap_check_flags() helper:
|
||||||
|
|
||||||
|
int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags);
|
||||||
|
|
||||||
|
The struct fieinfo should be passed in as recieved from ioctl_fiemap(). The
|
||||||
|
set of fiemap flags which the fs understands should be passed via fs_flags. If
|
||||||
|
fiemap_check_flags finds invalid user flags, it will place the bad values in
|
||||||
|
fieinfo->fi_flags and return -EBADR. If the file system gets -EBADR, from
|
||||||
|
fiemap_check_flags(), it should immediately exit, returning that error back to
|
||||||
|
ioctl_fiemap().
|
||||||
|
|
||||||
|
|
||||||
|
For each extent in the request range, the file system should call
|
||||||
|
the helper function, fiemap_fill_next_extent():
|
||||||
|
|
||||||
|
int fiemap_fill_next_extent(struct fiemap_extent_info *info, u64 logical,
|
||||||
|
u64 phys, u64 len, u32 flags, u32 dev);
|
||||||
|
|
||||||
|
fiemap_fill_next_extent() will use the passed values to populate the
|
||||||
|
next free extent in the fm_extents array. 'General' extent flags will
|
||||||
|
automatically be set from specific flags on behalf of the calling file
|
||||||
|
system so that the userspace API is not broken.
|
||||||
|
|
||||||
|
fiemap_fill_next_extent() returns 0 on success, and 1 when the
|
||||||
|
user-supplied fm_extents array is full. If an error is encountered
|
||||||
|
while copying the extent to user memory, -EFAULT will be returned.
|
@ -923,45 +923,44 @@ CPUs.
|
|||||||
The "procs_blocked" line gives the number of processes currently blocked,
|
The "procs_blocked" line gives the number of processes currently blocked,
|
||||||
waiting for I/O to complete.
|
waiting for I/O to complete.
|
||||||
|
|
||||||
|
|
||||||
1.9 Ext4 file system parameters
|
1.9 Ext4 file system parameters
|
||||||
------------------------------
|
------------------------------
|
||||||
Ext4 file system have one directory per partition under /proc/fs/ext4/
|
|
||||||
# ls /proc/fs/ext4/hdc/
|
|
||||||
group_prealloc max_to_scan mb_groups mb_history min_to_scan order2_req
|
|
||||||
stats stream_req
|
|
||||||
|
|
||||||
mb_groups:
|
Information about mounted ext4 file systems can be found in
|
||||||
This file gives the details of multiblock allocator buddy cache of free blocks
|
/proc/fs/ext4. Each mounted filesystem will have a directory in
|
||||||
|
/proc/fs/ext4 based on its device name (i.e., /proc/fs/ext4/hdc or
|
||||||
|
/proc/fs/ext4/dm-0). The files in each per-device directory are shown
|
||||||
|
in Table 1-10, below.
|
||||||
|
|
||||||
mb_history:
|
Table 1-10: Files in /proc/fs/ext4/<devname>
|
||||||
Multiblock allocation history.
|
..............................................................................
|
||||||
|
File Content
|
||||||
|
mb_groups details of multiblock allocator buddy cache of free blocks
|
||||||
|
mb_history multiblock allocation history
|
||||||
|
stats controls whether the multiblock allocator should start
|
||||||
|
collecting statistics, which are shown during the unmount
|
||||||
|
group_prealloc the multiblock allocator will round up allocation
|
||||||
|
requests to a multiple of this tuning parameter if the
|
||||||
|
stripe size is not set in the ext4 superblock
|
||||||
|
max_to_scan The maximum number of extents the multiblock allocator
|
||||||
|
will search to find the best extent
|
||||||
|
min_to_scan The minimum number of extents the multiblock allocator
|
||||||
|
will search to find the best extent
|
||||||
|
order2_req Tuning parameter which controls the minimum size for
|
||||||
|
requests (as a power of 2) where the buddy cache is
|
||||||
|
used
|
||||||
|
stream_req Files which have fewer blocks than this tunable
|
||||||
|
parameter will have their blocks allocated out of a
|
||||||
|
block group specific preallocation pool, so that small
|
||||||
|
files are packed closely together. Each large file
|
||||||
|
will have its blocks allocated out of its own unique
|
||||||
|
preallocation pool.
|
||||||
|
inode_readahead Tuning parameter which controls the maximum number of
|
||||||
|
inode table blocks that ext4's inode table readahead
|
||||||
|
algorithm will pre-read into the buffer cache
|
||||||
|
..............................................................................
|
||||||
|
|
||||||
stats:
|
|
||||||
This file indicate whether the multiblock allocator should start collecting
|
|
||||||
statistics. The statistics are shown during unmount
|
|
||||||
|
|
||||||
group_prealloc:
|
|
||||||
The multiblock allocator normalize the block allocation request to
|
|
||||||
group_prealloc filesystem blocks if we don't have strip value set.
|
|
||||||
The stripe value can be specified at mount time or during mke2fs.
|
|
||||||
|
|
||||||
max_to_scan:
|
|
||||||
How long multiblock allocator can look for a best extent (in found extents)
|
|
||||||
|
|
||||||
min_to_scan:
|
|
||||||
How long multiblock allocator must look for a best extent
|
|
||||||
|
|
||||||
order2_req:
|
|
||||||
Multiblock allocator use 2^N search using buddies only for requests greater
|
|
||||||
than or equal to order2_req. The request size is specfied in file system
|
|
||||||
blocks. A value of 2 indicate only if the requests are greater than or equal
|
|
||||||
to 4 blocks.
|
|
||||||
|
|
||||||
stream_req:
|
|
||||||
Files smaller than stream_req are served by the stream allocator, whose
|
|
||||||
purpose is to pack requests as close each to other as possible to
|
|
||||||
produce smooth I/O traffic. Avalue of 16 indicate that file smaller than 16
|
|
||||||
filesystem block size will use group based preallocation.
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
Summary
|
Summary
|
||||||
@ -2413,6 +2412,8 @@ The following 4 memory types are supported:
|
|||||||
- (bit 1) anonymous shared memory
|
- (bit 1) anonymous shared memory
|
||||||
- (bit 2) file-backed private memory
|
- (bit 2) file-backed private memory
|
||||||
- (bit 3) file-backed shared memory
|
- (bit 3) file-backed shared memory
|
||||||
|
- (bit 4) ELF header pages in file-backed private memory areas (it is
|
||||||
|
effective only if the bit 2 is cleared)
|
||||||
|
|
||||||
Note that MMIO pages such as frame buffer are never dumped and vDSO pages
|
Note that MMIO pages such as frame buffer are never dumped and vDSO pages
|
||||||
are always dumped regardless of the bitmask status.
|
are always dumped regardless of the bitmask status.
|
||||||
|
@ -14,14 +14,14 @@ Description
|
|||||||
|
|
||||||
This driver implements support for the Analog Devices ADT7473 chip family.
|
This driver implements support for the Analog Devices ADT7473 chip family.
|
||||||
|
|
||||||
The LM85 uses the 2-wire interface compatible with the SMBUS 2.0
|
The ADT7473 uses the 2-wire interface compatible with the SMBUS 2.0
|
||||||
specification. Using an analog to digital converter it measures three (3)
|
specification. Using an analog to digital converter it measures three (3)
|
||||||
temperatures and two (2) voltages. It has three (3) 16-bit counters for
|
temperatures and two (2) voltages. It has four (4) 16-bit counters for
|
||||||
measuring fan speed. There are three (3) PWM outputs that can be used
|
measuring fan speed. There are three (3) PWM outputs that can be used
|
||||||
to control fan speed.
|
to control fan speed.
|
||||||
|
|
||||||
A sophisticated control system for the PWM outputs is designed into the
|
A sophisticated control system for the PWM outputs is designed into the
|
||||||
LM85 that allows fan speed to be adjusted automatically based on any of the
|
ADT7473 that allows fan speed to be adjusted automatically based on any of the
|
||||||
three temperature sensors. Each PWM output is individually adjustable and
|
three temperature sensors. Each PWM output is individually adjustable and
|
||||||
programmable. Once configured, the ADT7473 will adjust the PWM outputs in
|
programmable. Once configured, the ADT7473 will adjust the PWM outputs in
|
||||||
response to the measured temperatures without further host intervention.
|
response to the measured temperatures without further host intervention.
|
||||||
@ -46,14 +46,6 @@ from the raw value to get the temperature value.
|
|||||||
The Analog Devices datasheet is very detailed and describes a procedure for
|
The Analog Devices datasheet is very detailed and describes a procedure for
|
||||||
determining an optimal configuration for the automatic PWM control.
|
determining an optimal configuration for the automatic PWM control.
|
||||||
|
|
||||||
Hardware Configurations
|
|
||||||
-----------------------
|
|
||||||
|
|
||||||
The ADT7473 chips have an optional SMBALERT output that can be used to
|
|
||||||
signal the chipset in case a limit is exceeded or the temperature sensors
|
|
||||||
fail. Individual sensor interrupts can be masked so they won't trigger
|
|
||||||
SMBALERT. The SMBALERT output if configured replaces the PWM2 function.
|
|
||||||
|
|
||||||
Configuration Notes
|
Configuration Notes
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
@ -61,8 +53,8 @@ Besides standard interfaces driver adds the following:
|
|||||||
|
|
||||||
* PWM Control
|
* PWM Control
|
||||||
|
|
||||||
* pwm#_auto_point1_pwm and pwm#_auto_point1_temp and
|
* pwm#_auto_point1_pwm and temp#_auto_point1_temp and
|
||||||
* pwm#_auto_point2_pwm and pwm#_auto_point2_temp -
|
* pwm#_auto_point2_pwm and temp#_auto_point2_temp -
|
||||||
|
|
||||||
point1: Set the pwm speed at a lower temperature bound.
|
point1: Set the pwm speed at a lower temperature bound.
|
||||||
point2: Set the pwm speed at a higher temperature bound.
|
point2: Set the pwm speed at a higher temperature bound.
|
||||||
|
@ -329,6 +329,10 @@ power[1-*]_average Average power use
|
|||||||
Unit: microWatt
|
Unit: microWatt
|
||||||
RO
|
RO
|
||||||
|
|
||||||
|
power[1-*]_average_interval Power use averaging interval
|
||||||
|
Unit: milliseconds
|
||||||
|
RW
|
||||||
|
|
||||||
power[1-*]_average_highest Historical average maximum power use
|
power[1-*]_average_highest Historical average maximum power use
|
||||||
Unit: microWatt
|
Unit: microWatt
|
||||||
RO
|
RO
|
||||||
@ -353,6 +357,14 @@ power[1-*]_reset_history Reset input_highest, input_lowest,
|
|||||||
average_highest and average_lowest.
|
average_highest and average_lowest.
|
||||||
WO
|
WO
|
||||||
|
|
||||||
|
**********
|
||||||
|
* Energy *
|
||||||
|
**********
|
||||||
|
|
||||||
|
energy[1-*]_input Cumulative energy use
|
||||||
|
Unit: microJoule
|
||||||
|
RO
|
||||||
|
|
||||||
**********
|
**********
|
||||||
* Alarms *
|
* Alarms *
|
||||||
**********
|
**********
|
||||||
|
@ -271,14 +271,14 @@ CDROMCLOSETRAY pendant of CDROMEJECT
|
|||||||
|
|
||||||
usage:
|
usage:
|
||||||
|
|
||||||
ioctl(fd, CDROMEJECT, 0);
|
ioctl(fd, CDROMCLOSETRAY, 0);
|
||||||
|
|
||||||
inputs: none
|
inputs: none
|
||||||
|
|
||||||
outputs: none
|
outputs: none
|
||||||
|
|
||||||
error returns:
|
error returns:
|
||||||
ENOSYS cd drive not capable of ejecting
|
ENOSYS cd drive not capable of closing the tray
|
||||||
EBUSY other processes are accessing drive, or door is locked
|
EBUSY other processes are accessing drive, or door is locked
|
||||||
|
|
||||||
notes:
|
notes:
|
||||||
|
@ -168,10 +168,10 @@ if ($#ARGV < 0) {
|
|||||||
mkdir $ARGV[0],0777;
|
mkdir $ARGV[0],0777;
|
||||||
$state = 0;
|
$state = 0;
|
||||||
while (<STDIN>) {
|
while (<STDIN>) {
|
||||||
if (/^\.TH \"[^\"]*\" 4 \"([^\"]*)\"/) {
|
if (/^\.TH \"[^\"]*\" 9 \"([^\"]*)\"/) {
|
||||||
if ($state == 1) { close OUT }
|
if ($state == 1) { close OUT }
|
||||||
$state = 1;
|
$state = 1;
|
||||||
$fn = "$ARGV[0]/$1.4";
|
$fn = "$ARGV[0]/$1.9";
|
||||||
print STDERR "Creating $fn\n";
|
print STDERR "Creating $fn\n";
|
||||||
open OUT, ">$fn" or die "can't open $fn: $!\n";
|
open OUT, ">$fn" or die "can't open $fn: $!\n";
|
||||||
print OUT $_;
|
print OUT $_;
|
||||||
|
@ -284,6 +284,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
isolate - enable device isolation (each device, as far
|
isolate - enable device isolation (each device, as far
|
||||||
as possible, will get its own protection
|
as possible, will get its own protection
|
||||||
domain)
|
domain)
|
||||||
|
fullflush - enable flushing of IO/TLB entries when
|
||||||
|
they are unmapped. Otherwise they are
|
||||||
|
flushed before they will be reused, which
|
||||||
|
is a lot of faster
|
||||||
|
|
||||||
amd_iommu_size= [HW,X86-64]
|
amd_iommu_size= [HW,X86-64]
|
||||||
Define the size of the aperture for the AMD IOMMU
|
Define the size of the aperture for the AMD IOMMU
|
||||||
driver. Possible values are:
|
driver. Possible values are:
|
||||||
@ -463,12 +468,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
Range: 0 - 8192
|
Range: 0 - 8192
|
||||||
Default: 64
|
Default: 64
|
||||||
|
|
||||||
disable_8254_timer
|
|
||||||
enable_8254_timer
|
|
||||||
[IA32/X86_64] Disable/Enable interrupt 0 timer routing
|
|
||||||
over the 8254 in addition to over the IO-APIC. The
|
|
||||||
kernel tries to set a sensible default.
|
|
||||||
|
|
||||||
hpet= [X86-32,HPET] option to control HPET usage
|
hpet= [X86-32,HPET] option to control HPET usage
|
||||||
Format: { enable (default) | disable | force }
|
Format: { enable (default) | disable | force }
|
||||||
disable: disable HPET and use PIT instead
|
disable: disable HPET and use PIT instead
|
||||||
@ -1020,6 +1019,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
(only serial suported for now)
|
(only serial suported for now)
|
||||||
Format: <serial_device>[,baud]
|
Format: <serial_device>[,baud]
|
||||||
|
|
||||||
|
kmac= [MIPS] korina ethernet MAC address.
|
||||||
|
Configure the RouterBoard 532 series on-chip
|
||||||
|
Ethernet adapter MAC address.
|
||||||
|
|
||||||
l2cr= [PPC]
|
l2cr= [PPC]
|
||||||
|
|
||||||
l3cr= [PPC]
|
l3cr= [PPC]
|
||||||
@ -1448,6 +1451,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
|
|
||||||
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
||||||
|
|
||||||
|
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
||||||
|
|
||||||
|
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
||||||
|
default x2apic cluster mode on platforms
|
||||||
|
supporting x2apic.
|
||||||
|
|
||||||
noltlbs [PPC] Do not use large page/tlb entries for kernel
|
noltlbs [PPC] Do not use large page/tlb entries for kernel
|
||||||
lowmem mapping on PPC40x.
|
lowmem mapping on PPC40x.
|
||||||
|
|
||||||
@ -1905,6 +1914,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
|||||||
shapers= [NET]
|
shapers= [NET]
|
||||||
Maximal number of shapers.
|
Maximal number of shapers.
|
||||||
|
|
||||||
|
show_msr= [x86] show boot-time MSR settings
|
||||||
|
Format: { <integer> }
|
||||||
|
Show boot-time (BIOS-initialized) MSR settings.
|
||||||
|
The parameter means the number of CPUs to show,
|
||||||
|
for example 1 means boot CPU only.
|
||||||
|
|
||||||
sim710= [SCSI,HW]
|
sim710= [SCSI,HW]
|
||||||
See header of drivers/scsi/sim710.c.
|
See header of drivers/scsi/sim710.c.
|
||||||
|
|
||||||
|
46
Documentation/networking/LICENSE.qlge
Normal file
46
Documentation/networking/LICENSE.qlge
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
Copyright (c) 2003-2008 QLogic Corporation
|
||||||
|
QLogic Linux Networking HBA Driver
|
||||||
|
|
||||||
|
This program includes a device driver for Linux 2.6 that may be
|
||||||
|
distributed with QLogic hardware specific firmware binary file.
|
||||||
|
You may modify and redistribute the device driver code under the
|
||||||
|
GNU General Public License as published by the Free Software
|
||||||
|
Foundation (version 2 or a later version).
|
||||||
|
|
||||||
|
You may redistribute the hardware specific firmware binary file
|
||||||
|
under the following terms:
|
||||||
|
|
||||||
|
1. Redistribution of source code (only if applicable),
|
||||||
|
must retain the above copyright notice, this list of
|
||||||
|
conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistribution in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
3. The name of QLogic Corporation may not be used to
|
||||||
|
endorse or promote products derived from this software
|
||||||
|
without specific prior written permission
|
||||||
|
|
||||||
|
REGARDLESS OF WHAT LICENSING MECHANISM IS USED OR APPLICABLE,
|
||||||
|
THIS PROGRAM IS PROVIDED BY QLOGIC CORPORATION "AS IS'' AND ANY
|
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR
|
||||||
|
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||||
|
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||||
|
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
USER ACKNOWLEDGES AND AGREES THAT USE OF THIS PROGRAM WILL NOT
|
||||||
|
CREATE OR GIVE GROUNDS FOR A LICENSE BY IMPLICATION, ESTOPPEL, OR
|
||||||
|
OTHERWISE IN ANY INTELLECTUAL PROPERTY RIGHTS (PATENT, COPYRIGHT,
|
||||||
|
TRADE SECRET, MASK WORK, OR OTHER PROPRIETARY RIGHT) EMBODIED IN
|
||||||
|
ANY OTHER QLOGIC HARDWARE OR SOFTWARE EITHER SOLELY OR IN
|
||||||
|
COMBINATION WITH THIS PROGRAM.
|
||||||
|
|
@ -35,8 +35,9 @@ This file contains
|
|||||||
6.1 general settings
|
6.1 general settings
|
||||||
6.2 local loopback of sent frames
|
6.2 local loopback of sent frames
|
||||||
6.3 CAN controller hardware filters
|
6.3 CAN controller hardware filters
|
||||||
6.4 currently supported CAN hardware
|
6.4 The virtual CAN driver (vcan)
|
||||||
6.5 todo
|
6.5 currently supported CAN hardware
|
||||||
|
6.6 todo
|
||||||
|
|
||||||
7 Credits
|
7 Credits
|
||||||
|
|
||||||
@ -584,7 +585,42 @@ solution for a couple of reasons:
|
|||||||
@133MHz with four SJA1000 CAN controllers from 2002 under heavy bus
|
@133MHz with four SJA1000 CAN controllers from 2002 under heavy bus
|
||||||
load without any problems ...
|
load without any problems ...
|
||||||
|
|
||||||
6.4 currently supported CAN hardware (September 2007)
|
6.4 The virtual CAN driver (vcan)
|
||||||
|
|
||||||
|
Similar to the network loopback devices, vcan offers a virtual local
|
||||||
|
CAN interface. A full qualified address on CAN consists of
|
||||||
|
|
||||||
|
- a unique CAN Identifier (CAN ID)
|
||||||
|
- the CAN bus this CAN ID is transmitted on (e.g. can0)
|
||||||
|
|
||||||
|
so in common use cases more than one virtual CAN interface is needed.
|
||||||
|
|
||||||
|
The virtual CAN interfaces allow the transmission and reception of CAN
|
||||||
|
frames without real CAN controller hardware. Virtual CAN network
|
||||||
|
devices are usually named 'vcanX', like vcan0 vcan1 vcan2 ...
|
||||||
|
When compiled as a module the virtual CAN driver module is called vcan.ko
|
||||||
|
|
||||||
|
Since Linux Kernel version 2.6.24 the vcan driver supports the Kernel
|
||||||
|
netlink interface to create vcan network devices. The creation and
|
||||||
|
removal of vcan network devices can be managed with the ip(8) tool:
|
||||||
|
|
||||||
|
- Create a virtual CAN network interface:
|
||||||
|
ip link add type vcan
|
||||||
|
|
||||||
|
- Create a virtual CAN network interface with a specific name 'vcan42':
|
||||||
|
ip link add dev vcan42 type vcan
|
||||||
|
|
||||||
|
- Remove a (virtual CAN) network interface 'vcan42':
|
||||||
|
ip link del vcan42
|
||||||
|
|
||||||
|
The tool 'vcan' from the SocketCAN SVN repository on BerliOS is obsolete.
|
||||||
|
|
||||||
|
Virtual CAN network device creation in older Kernels:
|
||||||
|
In Linux Kernel versions < 2.6.24 the vcan driver creates 4 vcan
|
||||||
|
netdevices at module load time by default. This value can be changed
|
||||||
|
with the module parameter 'numdev'. E.g. 'modprobe vcan numdev=8'
|
||||||
|
|
||||||
|
6.5 currently supported CAN hardware
|
||||||
|
|
||||||
On the project website http://developer.berlios.de/projects/socketcan
|
On the project website http://developer.berlios.de/projects/socketcan
|
||||||
there are different drivers available:
|
there are different drivers available:
|
||||||
@ -603,7 +639,7 @@ solution for a couple of reasons:
|
|||||||
|
|
||||||
Please check the Mailing Lists on the berlios OSS project website.
|
Please check the Mailing Lists on the berlios OSS project website.
|
||||||
|
|
||||||
6.5 todo (September 2007)
|
6.6 todo
|
||||||
|
|
||||||
The configuration interface for CAN network drivers is still an open
|
The configuration interface for CAN network drivers is still an open
|
||||||
issue that has not been finalized in the socketcan project. Also the
|
issue that has not been finalized in the socketcan project. Also the
|
||||||
|
@ -24,4 +24,56 @@ netif_{start|stop|wake}_subqueue() functions to manage each queue while the
|
|||||||
device is still operational. netdev->queue_lock is still used when the device
|
device is still operational. netdev->queue_lock is still used when the device
|
||||||
comes online or when it's completely shut down (unregister_netdev(), etc.).
|
comes online or when it's completely shut down (unregister_netdev(), etc.).
|
||||||
|
|
||||||
Author: Peter P. Waskiewicz Jr. <peter.p.waskiewicz.jr@intel.com>
|
|
||||||
|
Section 2: Qdisc support for multiqueue devices
|
||||||
|
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Currently two qdiscs are optimized for multiqueue devices. The first is the
|
||||||
|
default pfifo_fast qdisc. This qdisc supports one qdisc per hardware queue.
|
||||||
|
A new round-robin qdisc, sch_multiq also supports multiple hardware queues. The
|
||||||
|
qdisc is responsible for classifying the skb's and then directing the skb's to
|
||||||
|
bands and queues based on the value in skb->queue_mapping. Use this field in
|
||||||
|
the base driver to determine which queue to send the skb to.
|
||||||
|
|
||||||
|
sch_multiq has been added for hardware that wishes to avoid head-of-line
|
||||||
|
blocking. It will cycle though the bands and verify that the hardware queue
|
||||||
|
associated with the band is not stopped prior to dequeuing a packet.
|
||||||
|
|
||||||
|
On qdisc load, the number of bands is based on the number of queues on the
|
||||||
|
hardware. Once the association is made, any skb with skb->queue_mapping set,
|
||||||
|
will be queued to the band associated with the hardware queue.
|
||||||
|
|
||||||
|
|
||||||
|
Section 3: Brief howto using MULTIQ for multiqueue devices
|
||||||
|
---------------------------------------------------------------
|
||||||
|
|
||||||
|
The userspace command 'tc,' part of the iproute2 package, is used to configure
|
||||||
|
qdiscs. To add the MULTIQ qdisc to your network device, assuming the device
|
||||||
|
is called eth0, run the following command:
|
||||||
|
|
||||||
|
# tc qdisc add dev eth0 root handle 1: multiq
|
||||||
|
|
||||||
|
The qdisc will allocate the number of bands to equal the number of queues that
|
||||||
|
the device reports, and bring the qdisc online. Assuming eth0 has 4 Tx
|
||||||
|
queues, the band mapping would look like:
|
||||||
|
|
||||||
|
band 0 => queue 0
|
||||||
|
band 1 => queue 1
|
||||||
|
band 2 => queue 2
|
||||||
|
band 3 => queue 3
|
||||||
|
|
||||||
|
Traffic will begin flowing through each queue based on either the simple_tx_hash
|
||||||
|
function or based on netdev->select_queue() if you have it defined.
|
||||||
|
|
||||||
|
The behavior of tc filters remains the same. However a new tc action,
|
||||||
|
skbedit, has been added. Assuming you wanted to route all traffic to a
|
||||||
|
specific host, for example 192.168.0.3, through a specific queue you could use
|
||||||
|
this action and establish a filter such as:
|
||||||
|
|
||||||
|
tc filter add dev eth0 parent 1: protocol ip prio 1 u32 \
|
||||||
|
match ip dst 192.168.0.3 \
|
||||||
|
action skbedit queue_mapping 3
|
||||||
|
|
||||||
|
Author: Alexander Duyck <alexander.h.duyck@intel.com>
|
||||||
|
Original Author: Peter P. Waskiewicz Jr. <peter.p.waskiewicz.jr@intel.com>
|
||||||
|
175
Documentation/networking/phonet.txt
Normal file
175
Documentation/networking/phonet.txt
Normal file
@ -0,0 +1,175 @@
|
|||||||
|
Linux Phonet protocol family
|
||||||
|
============================
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
------------
|
||||||
|
|
||||||
|
Phonet is a packet protocol used by Nokia cellular modems for both IPC
|
||||||
|
and RPC. With the Linux Phonet socket family, Linux host processes can
|
||||||
|
receive and send messages from/to the modem, or any other external
|
||||||
|
device attached to the modem. The modem takes care of routing.
|
||||||
|
|
||||||
|
Phonet packets can be exchanged through various hardware connections
|
||||||
|
depending on the device, such as:
|
||||||
|
- USB with the CDC Phonet interface,
|
||||||
|
- infrared,
|
||||||
|
- Bluetooth,
|
||||||
|
- an RS232 serial port (with a dedicated "FBUS" line discipline),
|
||||||
|
- the SSI bus with some TI OMAP processors.
|
||||||
|
|
||||||
|
|
||||||
|
Packets format
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Phonet packets have a common header as follows:
|
||||||
|
|
||||||
|
struct phonethdr {
|
||||||
|
uint8_t pn_media; /* Media type (link-layer identifier) */
|
||||||
|
uint8_t pn_rdev; /* Receiver device ID */
|
||||||
|
uint8_t pn_sdev; /* Sender device ID */
|
||||||
|
uint8_t pn_res; /* Resource ID or function */
|
||||||
|
uint16_t pn_length; /* Big-endian message byte length (minus 6) */
|
||||||
|
uint8_t pn_robj; /* Receiver object ID */
|
||||||
|
uint8_t pn_sobj; /* Sender object ID */
|
||||||
|
};
|
||||||
|
|
||||||
|
On Linux, the link-layer header includes the pn_media byte (see below).
|
||||||
|
The next 7 bytes are part of the network-layer header.
|
||||||
|
|
||||||
|
The device ID is split: the 6 higher-order bits consitute the device
|
||||||
|
address, while the 2 lower-order bits are used for multiplexing, as are
|
||||||
|
the 8-bit object identifiers. As such, Phonet can be considered as a
|
||||||
|
network layer with 6 bits of address space and 10 bits for transport
|
||||||
|
protocol (much like port numbers in IP world).
|
||||||
|
|
||||||
|
The modem always has address number zero. All other device have a their
|
||||||
|
own 6-bit address.
|
||||||
|
|
||||||
|
|
||||||
|
Link layer
|
||||||
|
----------
|
||||||
|
|
||||||
|
Phonet links are always point-to-point links. The link layer header
|
||||||
|
consists of a single Phonet media type byte. It uniquely identifies the
|
||||||
|
link through which the packet is transmitted, from the modem's
|
||||||
|
perspective. Each Phonet network device shall prepend and set the media
|
||||||
|
type byte as appropriate. For convenience, a common phonet_header_ops
|
||||||
|
link-layer header operations structure is provided. It sets the
|
||||||
|
media type according to the network device hardware address.
|
||||||
|
|
||||||
|
Linux Phonet network interfaces support a dedicated link layer packets
|
||||||
|
type (ETH_P_PHONET) which is out of the Ethernet type range. They can
|
||||||
|
only send and receive Phonet packets.
|
||||||
|
|
||||||
|
The virtual TUN tunnel device driver can also be used for Phonet. This
|
||||||
|
requires IFF_TUN mode, _without_ the IFF_NO_PI flag. In this case,
|
||||||
|
there is no link-layer header, so there is no Phonet media type byte.
|
||||||
|
|
||||||
|
Note that Phonet interfaces are not allowed to re-order packets, so
|
||||||
|
only the (default) Linux FIFO qdisc should be used with them.
|
||||||
|
|
||||||
|
|
||||||
|
Network layer
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The Phonet socket address family maps the Phonet packet header:
|
||||||
|
|
||||||
|
struct sockaddr_pn {
|
||||||
|
sa_family_t spn_family; /* AF_PHONET */
|
||||||
|
uint8_t spn_obj; /* Object ID */
|
||||||
|
uint8_t spn_dev; /* Device ID */
|
||||||
|
uint8_t spn_resource; /* Resource or function */
|
||||||
|
uint8_t spn_zero[...]; /* Padding */
|
||||||
|
};
|
||||||
|
|
||||||
|
The resource field is only used when sending and receiving;
|
||||||
|
It is ignored by bind() and getsockname().
|
||||||
|
|
||||||
|
|
||||||
|
Low-level datagram protocol
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Applications can send Phonet messages using the Phonet datagram socket
|
||||||
|
protocol from the PF_PHONET family. Each socket is bound to one of the
|
||||||
|
2^10 object IDs available, and can send and receive packets with any
|
||||||
|
other peer.
|
||||||
|
|
||||||
|
struct sockaddr_pn addr = { .spn_family = AF_PHONET, };
|
||||||
|
ssize_t len;
|
||||||
|
socklen_t addrlen = sizeof(addr);
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
fd = socket(PF_PHONET, SOCK_DGRAM, 0);
|
||||||
|
bind(fd, (struct sockaddr *)&addr, sizeof(addr));
|
||||||
|
/* ... */
|
||||||
|
|
||||||
|
sendto(fd, msg, msglen, 0, (struct sockaddr *)&addr, sizeof(addr));
|
||||||
|
len = recvfrom(fd, buf, sizeof(buf), 0,
|
||||||
|
(struct sockaddr *)&addr, &addrlen);
|
||||||
|
|
||||||
|
This protocol follows the SOCK_DGRAM connection-less semantics.
|
||||||
|
However, connect() and getpeername() are not supported, as they did
|
||||||
|
not seem useful with Phonet usages (could be added easily).
|
||||||
|
|
||||||
|
|
||||||
|
Phonet Pipe protocol
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The Phonet Pipe protocol is a simple sequenced packets protocol
|
||||||
|
with end-to-end congestion control. It uses the passive listening
|
||||||
|
socket paradigm. The listening socket is bound to an unique free object
|
||||||
|
ID. Each listening socket can handle up to 255 simultaneous
|
||||||
|
connections, one per accept()'d socket.
|
||||||
|
|
||||||
|
int lfd, cfd;
|
||||||
|
|
||||||
|
lfd = socket(PF_PHONET, SOCK_SEQPACKET, PN_PROTO_PIPE);
|
||||||
|
listen (lfd, INT_MAX);
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
cfd = accept(lfd, NULL, NULL);
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
char buf[...];
|
||||||
|
ssize_t len = read(cfd, buf, sizeof(buf));
|
||||||
|
|
||||||
|
/* ... */
|
||||||
|
|
||||||
|
write(cfd, msg, msglen);
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections are established between two endpoints by a "third party"
|
||||||
|
application. This means that both endpoints are passive; so connect()
|
||||||
|
is not possible.
|
||||||
|
|
||||||
|
WARNING:
|
||||||
|
When polling a connected pipe socket for writability, there is an
|
||||||
|
intrinsic race condition whereby writability might be lost between the
|
||||||
|
polling and the writing system calls. In this case, the socket will
|
||||||
|
block until write because possible again, unless non-blocking mode
|
||||||
|
becomes enabled.
|
||||||
|
|
||||||
|
|
||||||
|
The pipe protocol provides two socket options at the SOL_PNPIPE level:
|
||||||
|
|
||||||
|
PNPIPE_ENCAP accepts one integer value (int) of:
|
||||||
|
|
||||||
|
PNPIPE_ENCAP_NONE: The socket operates normally (default).
|
||||||
|
|
||||||
|
PNPIPE_ENCAP_IP: The socket is used as a backend for a virtual IP
|
||||||
|
interface. This requires CAP_NET_ADMIN capability. GPRS data
|
||||||
|
support on Nokia modems can use this. Note that the socket cannot
|
||||||
|
be reliably poll()'d or read() from while in this mode.
|
||||||
|
|
||||||
|
PNPIPE_IFINDEX is a read-only integer value. It contains the
|
||||||
|
interface index of the network interface created by PNPIPE_ENCAP,
|
||||||
|
or zero if encapsulation is off.
|
||||||
|
|
||||||
|
|
||||||
|
Authors
|
||||||
|
-------
|
||||||
|
|
||||||
|
Linux Phonet was initially written by Sakari Ailus.
|
||||||
|
Other contributors include Mikä Liljeberg, Andras Domokos,
|
||||||
|
Carlos Chinea and Rémi Denis-Courmont.
|
||||||
|
Copyright (C) 2008 Nokia Corporation.
|
194
Documentation/networking/regulatory.txt
Normal file
194
Documentation/networking/regulatory.txt
Normal file
@ -0,0 +1,194 @@
|
|||||||
|
Linux wireless regulatory documentation
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
This document gives a brief review over how the Linux wireless
|
||||||
|
regulatory infrastructure works.
|
||||||
|
|
||||||
|
More up to date information can be obtained at the project's web page:
|
||||||
|
|
||||||
|
http://wireless.kernel.org/en/developers/Regulatory
|
||||||
|
|
||||||
|
Keeping regulatory domains in userspace
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
Due to the dynamic nature of regulatory domains we keep them
|
||||||
|
in userspace and provide a framework for userspace to upload
|
||||||
|
to the kernel one regulatory domain to be used as the central
|
||||||
|
core regulatory domain all wireless devices should adhere to.
|
||||||
|
|
||||||
|
How to get regulatory domains to the kernel
|
||||||
|
-------------------------------------------
|
||||||
|
|
||||||
|
Userspace gets a regulatory domain in the kernel by having
|
||||||
|
a userspace agent build it and send it via nl80211. Only
|
||||||
|
expected regulatory domains will be respected by the kernel.
|
||||||
|
|
||||||
|
A currently available userspace agent which can accomplish this
|
||||||
|
is CRDA - central regulatory domain agent. Its documented here:
|
||||||
|
|
||||||
|
http://wireless.kernel.org/en/developers/Regulatory/CRDA
|
||||||
|
|
||||||
|
Essentially the kernel will send a udev event when it knows
|
||||||
|
it needs a new regulatory domain. A udev rule can be put in place
|
||||||
|
to trigger crda to send the respective regulatory domain for a
|
||||||
|
specific ISO/IEC 3166 alpha2.
|
||||||
|
|
||||||
|
Below is an example udev rule which can be used:
|
||||||
|
|
||||||
|
# Example file, should be put in /etc/udev/rules.d/regulatory.rules
|
||||||
|
KERNEL=="regulatory*", ACTION=="change", SUBSYSTEM=="platform", RUN+="/sbin/crda"
|
||||||
|
|
||||||
|
The alpha2 is passed as an environment variable under the variable COUNTRY.
|
||||||
|
|
||||||
|
Who asks for regulatory domains?
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
* Users
|
||||||
|
|
||||||
|
Users can use iw:
|
||||||
|
|
||||||
|
http://wireless.kernel.org/en/users/Documentation/iw
|
||||||
|
|
||||||
|
An example:
|
||||||
|
|
||||||
|
# set regulatory domain to "Costa Rica"
|
||||||
|
iw reg set CR
|
||||||
|
|
||||||
|
This will request the kernel to set the regulatory domain to
|
||||||
|
the specificied alpha2. The kernel in turn will then ask userspace
|
||||||
|
to provide a regulatory domain for the alpha2 specified by the user
|
||||||
|
by sending a uevent.
|
||||||
|
|
||||||
|
* Wireless subsystems for Country Information elements
|
||||||
|
|
||||||
|
The kernel will send a uevent to inform userspace a new
|
||||||
|
regulatory domain is required. More on this to be added
|
||||||
|
as its integration is added.
|
||||||
|
|
||||||
|
* Drivers
|
||||||
|
|
||||||
|
If drivers determine they need a specific regulatory domain
|
||||||
|
set they can inform the wireless core using regulatory_hint().
|
||||||
|
They have two options -- they either provide an alpha2 so that
|
||||||
|
crda can provide back a regulatory domain for that country or
|
||||||
|
they can build their own regulatory domain based on internal
|
||||||
|
custom knowledge so the wireless core can respect it.
|
||||||
|
|
||||||
|
*Most* drivers will rely on the first mechanism of providing a
|
||||||
|
regulatory hint with an alpha2. For these drivers there is an additional
|
||||||
|
check that can be used to ensure compliance based on custom EEPROM
|
||||||
|
regulatory data. This additional check can be used by drivers by
|
||||||
|
registering on its struct wiphy a reg_notifier() callback. This notifier
|
||||||
|
is called when the core's regulatory domain has been changed. The driver
|
||||||
|
can use this to review the changes made and also review who made them
|
||||||
|
(driver, user, country IE) and determine what to allow based on its
|
||||||
|
internal EEPROM data. Devices drivers wishing to be capable of world
|
||||||
|
roaming should use this callback. More on world roaming will be
|
||||||
|
added to this document when its support is enabled.
|
||||||
|
|
||||||
|
Device drivers who provide their own built regulatory domain
|
||||||
|
do not need a callback as the channels registered by them are
|
||||||
|
the only ones that will be allowed and therefore *additional*
|
||||||
|
cannels cannot be enabled.
|
||||||
|
|
||||||
|
Example code - drivers hinting an alpha2:
|
||||||
|
------------------------------------------
|
||||||
|
|
||||||
|
This example comes from the zd1211rw device driver. You can start
|
||||||
|
by having a mapping of your device's EEPROM country/regulatory
|
||||||
|
domain value to to a specific alpha2 as follows:
|
||||||
|
|
||||||
|
static struct zd_reg_alpha2_map reg_alpha2_map[] = {
|
||||||
|
{ ZD_REGDOMAIN_FCC, "US" },
|
||||||
|
{ ZD_REGDOMAIN_IC, "CA" },
|
||||||
|
{ ZD_REGDOMAIN_ETSI, "DE" }, /* Generic ETSI, use most restrictive */
|
||||||
|
{ ZD_REGDOMAIN_JAPAN, "JP" },
|
||||||
|
{ ZD_REGDOMAIN_JAPAN_ADD, "JP" },
|
||||||
|
{ ZD_REGDOMAIN_SPAIN, "ES" },
|
||||||
|
{ ZD_REGDOMAIN_FRANCE, "FR" },
|
||||||
|
|
||||||
|
Then you can define a routine to map your read EEPROM value to an alpha2,
|
||||||
|
as follows:
|
||||||
|
|
||||||
|
static int zd_reg2alpha2(u8 regdomain, char *alpha2)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
struct zd_reg_alpha2_map *reg_map;
|
||||||
|
for (i = 0; i < ARRAY_SIZE(reg_alpha2_map); i++) {
|
||||||
|
reg_map = ®_alpha2_map[i];
|
||||||
|
if (regdomain == reg_map->reg) {
|
||||||
|
alpha2[0] = reg_map->alpha2[0];
|
||||||
|
alpha2[1] = reg_map->alpha2[1];
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Lastly, you can then hint to the core of your discovered alpha2, if a match
|
||||||
|
was found. You need to do this after you have registered your wiphy. You
|
||||||
|
are expected to do this during initialization.
|
||||||
|
|
||||||
|
r = zd_reg2alpha2(mac->regdomain, alpha2);
|
||||||
|
if (!r)
|
||||||
|
regulatory_hint(hw->wiphy, alpha2, NULL);
|
||||||
|
|
||||||
|
Example code - drivers providing a built in regulatory domain:
|
||||||
|
--------------------------------------------------------------
|
||||||
|
|
||||||
|
If you have regulatory information you can obtain from your
|
||||||
|
driver and you *need* to use this we let you build a regulatory domain
|
||||||
|
structure and pass it to the wireless core. To do this you should
|
||||||
|
kmalloc() a structure big enough to hold your regulatory domain
|
||||||
|
structure and you should then fill it with your data. Finally you simply
|
||||||
|
call regulatory_hint() with the regulatory domain structure in it.
|
||||||
|
|
||||||
|
Bellow is a simple example, with a regulatory domain cached using the stack.
|
||||||
|
Your implementation may vary (read EEPROM cache instead, for example).
|
||||||
|
|
||||||
|
Example cache of some regulatory domain
|
||||||
|
|
||||||
|
struct ieee80211_regdomain mydriver_jp_regdom = {
|
||||||
|
.n_reg_rules = 3,
|
||||||
|
.alpha2 = "JP",
|
||||||
|
//.alpha2 = "99", /* If I have no alpha2 to map it to */
|
||||||
|
.reg_rules = {
|
||||||
|
/* IEEE 802.11b/g, channels 1..14 */
|
||||||
|
REG_RULE(2412-20, 2484+20, 40, 6, 20, 0),
|
||||||
|
/* IEEE 802.11a, channels 34..48 */
|
||||||
|
REG_RULE(5170-20, 5240+20, 40, 6, 20,
|
||||||
|
NL80211_RRF_PASSIVE_SCAN),
|
||||||
|
/* IEEE 802.11a, channels 52..64 */
|
||||||
|
REG_RULE(5260-20, 5320+20, 40, 6, 20,
|
||||||
|
NL80211_RRF_NO_IBSS |
|
||||||
|
NL80211_RRF_DFS),
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
Then in some part of your code after your wiphy has been registered:
|
||||||
|
|
||||||
|
int r;
|
||||||
|
struct ieee80211_regdomain *rd;
|
||||||
|
int size_of_regd;
|
||||||
|
int num_rules = mydriver_jp_regdom.n_reg_rules;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
size_of_regd = sizeof(struct ieee80211_regdomain) +
|
||||||
|
(num_rules * sizeof(struct ieee80211_reg_rule));
|
||||||
|
|
||||||
|
rd = kzalloc(size_of_regd, GFP_KERNEL);
|
||||||
|
if (!rd)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
memcpy(rd, &mydriver_jp_regdom, sizeof(struct ieee80211_regdomain));
|
||||||
|
|
||||||
|
for (i=0; i < num_rules; i++) {
|
||||||
|
memcpy(&rd->reg_rules[i], &mydriver_jp_regdom.reg_rules[i],
|
||||||
|
sizeof(struct ieee80211_reg_rule));
|
||||||
|
}
|
||||||
|
r = regulatory_hint(hw->wiphy, NULL, rd);
|
||||||
|
if (r) {
|
||||||
|
kfree(rd);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
85
Documentation/networking/tproxy.txt
Normal file
85
Documentation/networking/tproxy.txt
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
Transparent proxy support
|
||||||
|
=========================
|
||||||
|
|
||||||
|
This feature adds Linux 2.2-like transparent proxy support to current kernels.
|
||||||
|
To use it, enable NETFILTER_TPROXY, the socket match and the TPROXY target in
|
||||||
|
your kernel config. You will need policy routing too, so be sure to enable that
|
||||||
|
as well.
|
||||||
|
|
||||||
|
|
||||||
|
1. Making non-local sockets work
|
||||||
|
================================
|
||||||
|
|
||||||
|
The idea is that you identify packets with destination address matching a local
|
||||||
|
socket on your box, set the packet mark to a certain value, and then match on that
|
||||||
|
value using policy routing to have those packets delivered locally:
|
||||||
|
|
||||||
|
# iptables -t mangle -N DIVERT
|
||||||
|
# iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
|
||||||
|
# iptables -t mangle -A DIVERT -j MARK --set-mark 1
|
||||||
|
# iptables -t mangle -A DIVERT -j ACCEPT
|
||||||
|
|
||||||
|
# ip rule add fwmark 1 lookup 100
|
||||||
|
# ip route add local 0.0.0.0/0 dev lo table 100
|
||||||
|
|
||||||
|
Because of certain restrictions in the IPv4 routing output code you'll have to
|
||||||
|
modify your application to allow it to send datagrams _from_ non-local IP
|
||||||
|
addresses. All you have to do is enable the (SOL_IP, IP_TRANSPARENT) socket
|
||||||
|
option before calling bind:
|
||||||
|
|
||||||
|
fd = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
/* - 8< -*/
|
||||||
|
int value = 1;
|
||||||
|
setsockopt(fd, SOL_IP, IP_TRANSPARENT, &value, sizeof(value));
|
||||||
|
/* - 8< -*/
|
||||||
|
name.sin_family = AF_INET;
|
||||||
|
name.sin_port = htons(0xCAFE);
|
||||||
|
name.sin_addr.s_addr = htonl(0xDEADBEEF);
|
||||||
|
bind(fd, &name, sizeof(name));
|
||||||
|
|
||||||
|
A trivial patch for netcat is available here:
|
||||||
|
http://people.netfilter.org/hidden/tproxy/netcat-ip_transparent-support.patch
|
||||||
|
|
||||||
|
|
||||||
|
2. Redirecting traffic
|
||||||
|
======================
|
||||||
|
|
||||||
|
Transparent proxying often involves "intercepting" traffic on a router. This is
|
||||||
|
usually done with the iptables REDIRECT target; however, there are serious
|
||||||
|
limitations of that method. One of the major issues is that it actually
|
||||||
|
modifies the packets to change the destination address -- which might not be
|
||||||
|
acceptable in certain situations. (Think of proxying UDP for example: you won't
|
||||||
|
be able to find out the original destination address. Even in case of TCP
|
||||||
|
getting the original destination address is racy.)
|
||||||
|
|
||||||
|
The 'TPROXY' target provides similar functionality without relying on NAT. Simply
|
||||||
|
add rules like this to the iptables ruleset above:
|
||||||
|
|
||||||
|
# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \
|
||||||
|
--tproxy-mark 0x1/0x1 --on-port 50080
|
||||||
|
|
||||||
|
Note that for this to work you'll have to modify the proxy to enable (SOL_IP,
|
||||||
|
IP_TRANSPARENT) for the listening socket.
|
||||||
|
|
||||||
|
|
||||||
|
3. Iptables extensions
|
||||||
|
======================
|
||||||
|
|
||||||
|
To use tproxy you'll need to have the 'socket' and 'TPROXY' modules
|
||||||
|
compiled for iptables. A patched version of iptables is available
|
||||||
|
here: http://git.balabit.hu/?p=bazsi/iptables-tproxy.git
|
||||||
|
|
||||||
|
|
||||||
|
4. Application support
|
||||||
|
======================
|
||||||
|
|
||||||
|
4.1. Squid
|
||||||
|
----------
|
||||||
|
|
||||||
|
Squid 3.HEAD has support built-in. To use it, pass
|
||||||
|
'--enable-linux-netfilter' to configure and set the 'tproxy' option on
|
||||||
|
the HTTP listener you redirect traffic to with the TPROXY iptables
|
||||||
|
target.
|
||||||
|
|
||||||
|
For more information please consult the following page on the Squid
|
||||||
|
wiki: http://wiki.squid-cache.org/Features/Tproxy4
|
@ -341,6 +341,8 @@ key that does nothing by itself, as well as any hot key that is type-specific
|
|||||||
3.1 Guidelines for wireless device drivers
|
3.1 Guidelines for wireless device drivers
|
||||||
------------------------------------------
|
------------------------------------------
|
||||||
|
|
||||||
|
(in this text, rfkill->foo means the foo field of struct rfkill).
|
||||||
|
|
||||||
1. Each independent transmitter in a wireless device (usually there is only one
|
1. Each independent transmitter in a wireless device (usually there is only one
|
||||||
transmitter per device) should have a SINGLE rfkill class attached to it.
|
transmitter per device) should have a SINGLE rfkill class attached to it.
|
||||||
|
|
||||||
@ -363,10 +365,32 @@ This rule exists because users of the rfkill subsystem expect to get (and set,
|
|||||||
when possible) the overall transmitter rfkill state, not of a particular rfkill
|
when possible) the overall transmitter rfkill state, not of a particular rfkill
|
||||||
line.
|
line.
|
||||||
|
|
||||||
5. During suspend, the rfkill class will attempt to soft-block the radio
|
5. The wireless device driver MUST NOT leave the transmitter enabled during
|
||||||
through a call to rfkill->toggle_radio, and will try to restore its previous
|
suspend and hibernation unless:
|
||||||
state during resume. After a rfkill class is suspended, it will *not* call
|
|
||||||
rfkill->toggle_radio until it is resumed.
|
5.1. The transmitter has to be enabled for some sort of functionality
|
||||||
|
like wake-on-wireless-packet or autonomous packed forwarding in a mesh
|
||||||
|
network, and that functionality is enabled for this suspend/hibernation
|
||||||
|
cycle.
|
||||||
|
|
||||||
|
AND
|
||||||
|
|
||||||
|
5.2. The device was not on a user-requested BLOCKED state before
|
||||||
|
the suspend (i.e. the driver must NOT unblock a device, not even
|
||||||
|
to support wake-on-wireless-packet or remain in the mesh).
|
||||||
|
|
||||||
|
In other words, there is absolutely no allowed scenario where a driver can
|
||||||
|
automatically take action to unblock a rfkill controller (obviously, this deals
|
||||||
|
with scenarios where soft-blocking or both soft and hard blocking is happening.
|
||||||
|
Scenarios where hardware rfkill lines are the only ones blocking the
|
||||||
|
transmitter are outside of this rule, since the wireless device driver does not
|
||||||
|
control its input hardware rfkill lines in the first place).
|
||||||
|
|
||||||
|
6. During resume, rfkill will try to restore its previous state.
|
||||||
|
|
||||||
|
7. After a rfkill class is suspended, it will *not* call rfkill->toggle_radio
|
||||||
|
until it is resumed.
|
||||||
|
|
||||||
|
|
||||||
Example of a WLAN wireless driver connected to the rfkill subsystem:
|
Example of a WLAN wireless driver connected to the rfkill subsystem:
|
||||||
--------------------------------------------------------------------
|
--------------------------------------------------------------------
|
||||||
|
@ -70,13 +70,19 @@ Command line parameters
|
|||||||
|
|
||||||
Note: While already known devices can be added to the list of devices to be
|
Note: While already known devices can be added to the list of devices to be
|
||||||
ignored, there will be no effect on then. However, if such a device
|
ignored, there will be no effect on then. However, if such a device
|
||||||
disappears and then reappears, it will then be ignored.
|
disappears and then reappears, it will then be ignored. To make
|
||||||
|
known devices go away, you need the "purge" command (see below).
|
||||||
|
|
||||||
For example,
|
For example,
|
||||||
"echo add 0.0.a000-0.0.accc, 0.0.af00-0.0.afff > /proc/cio_ignore"
|
"echo add 0.0.a000-0.0.accc, 0.0.af00-0.0.afff > /proc/cio_ignore"
|
||||||
will add 0.0.a000-0.0.accc and 0.0.af00-0.0.afff to the list of ignored
|
will add 0.0.a000-0.0.accc and 0.0.af00-0.0.afff to the list of ignored
|
||||||
devices.
|
devices.
|
||||||
|
|
||||||
|
You can remove already known but now ignored devices via
|
||||||
|
"echo purge > /proc/cio_ignore"
|
||||||
|
All devices ignored but still registered and not online (= not in use)
|
||||||
|
will be deregistered and thus removed from the system.
|
||||||
|
|
||||||
The devices can be specified either by bus id (0.x.abcd) or, for 2.4 backward
|
The devices can be specified either by bus id (0.x.abcd) or, for 2.4 backward
|
||||||
compatibility, by the device number in hexadecimal (0xabcd or abcd). Device
|
compatibility, by the device number in hexadecimal (0xabcd or abcd). Device
|
||||||
numbers given as 0xabcd will be interpreted as 0.0.abcd.
|
numbers given as 0xabcd will be interpreted as 0.0.abcd.
|
||||||
@ -98,8 +104,7 @@ debugfs entries
|
|||||||
handling).
|
handling).
|
||||||
|
|
||||||
- /sys/kernel/debug/s390dbf/cio_msg/sprintf
|
- /sys/kernel/debug/s390dbf/cio_msg/sprintf
|
||||||
Various debug messages from the common I/O-layer, including messages
|
Various debug messages from the common I/O-layer.
|
||||||
printed when cio_msg=yes.
|
|
||||||
|
|
||||||
- /sys/kernel/debug/s390dbf/cio_trace/hex_ascii
|
- /sys/kernel/debug/s390dbf/cio_trace/hex_ascii
|
||||||
Logs the calling of functions in the common I/O-layer and, if applicable,
|
Logs the calling of functions in the common I/O-layer and, if applicable,
|
||||||
|
@ -1,151 +1,242 @@
|
|||||||
|
=============
|
||||||
|
CFS Scheduler
|
||||||
|
=============
|
||||||
|
|
||||||
This is the CFS scheduler.
|
|
||||||
|
|
||||||
80% of CFS's design can be summed up in a single sentence: CFS basically
|
1. OVERVIEW
|
||||||
models an "ideal, precise multi-tasking CPU" on real hardware.
|
|
||||||
|
|
||||||
"Ideal multi-tasking CPU" is a (non-existent :-)) CPU that has 100%
|
CFS stands for "Completely Fair Scheduler," and is the new "desktop" process
|
||||||
physical power and which can run each task at precise equal speed, in
|
scheduler implemented by Ingo Molnar and merged in Linux 2.6.23. It is the
|
||||||
parallel, each at 1/nr_running speed. For example: if there are 2 tasks
|
replacement for the previous vanilla scheduler's SCHED_OTHER interactivity
|
||||||
running then it runs each at 50% physical power - totally in parallel.
|
code.
|
||||||
|
|
||||||
On real hardware, we can run only a single task at once, so while that
|
80% of CFS's design can be summed up in a single sentence: CFS basically models
|
||||||
one task runs, the other tasks that are waiting for the CPU are at a
|
an "ideal, precise multi-tasking CPU" on real hardware.
|
||||||
disadvantage - the current task gets an unfair amount of CPU time. In
|
|
||||||
CFS this fairness imbalance is expressed and tracked via the per-task
|
|
||||||
p->wait_runtime (nanosec-unit) value. "wait_runtime" is the amount of
|
|
||||||
time the task should now run on the CPU for it to become completely fair
|
|
||||||
and balanced.
|
|
||||||
|
|
||||||
( small detail: on 'ideal' hardware, the p->wait_runtime value would
|
"Ideal multi-tasking CPU" is a (non-existent :-)) CPU that has 100% physical
|
||||||
always be zero - no task would ever get 'out of balance' from the
|
power and which can run each task at precise equal speed, in parallel, each at
|
||||||
'ideal' share of CPU time. )
|
1/nr_running speed. For example: if there are 2 tasks running, then it runs
|
||||||
|
each at 50% physical power --- i.e., actually in parallel.
|
||||||
|
|
||||||
CFS's task picking logic is based on this p->wait_runtime value and it
|
On real hardware, we can run only a single task at once, so we have to
|
||||||
is thus very simple: it always tries to run the task with the largest
|
introduce the concept of "virtual runtime." The virtual runtime of a task
|
||||||
p->wait_runtime value. In other words, CFS tries to run the task with
|
specifies when its next timeslice would start execution on the ideal
|
||||||
the 'gravest need' for more CPU time. So CFS always tries to split up
|
multi-tasking CPU described above. In practice, the virtual runtime of a task
|
||||||
CPU time between runnable tasks as close to 'ideal multitasking
|
is its actual runtime normalized to the total number of running tasks.
|
||||||
hardware' as possible.
|
|
||||||
|
|
||||||
Most of the rest of CFS's design just falls out of this really simple
|
|
||||||
concept, with a few add-on embellishments like nice levels,
|
|
||||||
multiprocessing and various algorithm variants to recognize sleepers.
|
|
||||||
|
|
||||||
In practice it works like this: the system runs a task a bit, and when
|
|
||||||
the task schedules (or a scheduler tick happens) the task's CPU usage is
|
|
||||||
'accounted for': the (small) time it just spent using the physical CPU
|
|
||||||
is deducted from p->wait_runtime. [minus the 'fair share' it would have
|
|
||||||
gotten anyway]. Once p->wait_runtime gets low enough so that another
|
|
||||||
task becomes the 'leftmost task' of the time-ordered rbtree it maintains
|
|
||||||
(plus a small amount of 'granularity' distance relative to the leftmost
|
|
||||||
task so that we do not over-schedule tasks and trash the cache) then the
|
|
||||||
new leftmost task is picked and the current task is preempted.
|
|
||||||
|
|
||||||
The rq->fair_clock value tracks the 'CPU time a runnable task would have
|
2. FEW IMPLEMENTATION DETAILS
|
||||||
fairly gotten, had it been runnable during that time'. So by using
|
|
||||||
rq->fair_clock values we can accurately timestamp and measure the
|
|
||||||
'expected CPU time' a task should have gotten. All runnable tasks are
|
|
||||||
sorted in the rbtree by the "rq->fair_clock - p->wait_runtime" key, and
|
|
||||||
CFS picks the 'leftmost' task and sticks to it. As the system progresses
|
|
||||||
forwards, newly woken tasks are put into the tree more and more to the
|
|
||||||
right - slowly but surely giving a chance for every task to become the
|
|
||||||
'leftmost task' and thus get on the CPU within a deterministic amount of
|
|
||||||
time.
|
|
||||||
|
|
||||||
Some implementation details:
|
In CFS the virtual runtime is expressed and tracked via the per-task
|
||||||
|
p->se.vruntime (nanosec-unit) value. This way, it's possible to accurately
|
||||||
|
timestamp and measure the "expected CPU time" a task should have gotten.
|
||||||
|
|
||||||
- the introduction of Scheduling Classes: an extensible hierarchy of
|
[ small detail: on "ideal" hardware, at any time all tasks would have the same
|
||||||
scheduler modules. These modules encapsulate scheduling policy
|
p->se.vruntime value --- i.e., tasks would execute simultaneously and no task
|
||||||
details and are handled by the scheduler core without the core
|
would ever get "out of balance" from the "ideal" share of CPU time. ]
|
||||||
code assuming about them too much.
|
|
||||||
|
|
||||||
- sched_fair.c implements the 'CFS desktop scheduler': it is a
|
CFS's task picking logic is based on this p->se.vruntime value and it is thus
|
||||||
replacement for the vanilla scheduler's SCHED_OTHER interactivity
|
very simple: it always tries to run the task with the smallest p->se.vruntime
|
||||||
code.
|
value (i.e., the task which executed least so far). CFS always tries to split
|
||||||
|
up CPU time between runnable tasks as close to "ideal multitasking hardware" as
|
||||||
|
possible.
|
||||||
|
|
||||||
I'd like to give credit to Con Kolivas for the general approach here:
|
Most of the rest of CFS's design just falls out of this really simple concept,
|
||||||
he has proven via RSDL/SD that 'fair scheduling' is possible and that
|
with a few add-on embellishments like nice levels, multiprocessing and various
|
||||||
it results in better desktop scheduling. Kudos Con!
|
algorithm variants to recognize sleepers.
|
||||||
|
|
||||||
The CFS patch uses a completely different approach and implementation
|
|
||||||
from RSDL/SD. My goal was to make CFS's interactivity quality exceed
|
|
||||||
that of RSDL/SD, which is a high standard to meet :-) Testing
|
|
||||||
feedback is welcome to decide this one way or another. [ and, in any
|
|
||||||
case, all of SD's logic could be added via a kernel/sched_sd.c module
|
|
||||||
as well, if Con is interested in such an approach. ]
|
|
||||||
|
|
||||||
CFS's design is quite radical: it does not use runqueues, it uses a
|
|
||||||
time-ordered rbtree to build a 'timeline' of future task execution,
|
|
||||||
and thus has no 'array switch' artifacts (by which both the vanilla
|
|
||||||
scheduler and RSDL/SD are affected).
|
|
||||||
|
|
||||||
CFS uses nanosecond granularity accounting and does not rely on any
|
3. THE RBTREE
|
||||||
jiffies or other HZ detail. Thus the CFS scheduler has no notion of
|
|
||||||
'timeslices' and has no heuristics whatsoever. There is only one
|
CFS's design is quite radical: it does not use the old data structures for the
|
||||||
central tunable (you have to switch on CONFIG_SCHED_DEBUG):
|
runqueues, but it uses a time-ordered rbtree to build a "timeline" of future
|
||||||
|
task execution, and thus has no "array switch" artifacts (by which both the
|
||||||
|
previous vanilla scheduler and RSDL/SD are affected).
|
||||||
|
|
||||||
|
CFS also maintains the rq->cfs.min_vruntime value, which is a monotonic
|
||||||
|
increasing value tracking the smallest vruntime among all tasks in the
|
||||||
|
runqueue. The total amount of work done by the system is tracked using
|
||||||
|
min_vruntime; that value is used to place newly activated entities on the left
|
||||||
|
side of the tree as much as possible.
|
||||||
|
|
||||||
|
The total number of running tasks in the runqueue is accounted through the
|
||||||
|
rq->cfs.load value, which is the sum of the weights of the tasks queued on the
|
||||||
|
runqueue.
|
||||||
|
|
||||||
|
CFS maintains a time-ordered rbtree, where all runnable tasks are sorted by the
|
||||||
|
p->se.vruntime key (there is a subtraction using rq->cfs.min_vruntime to
|
||||||
|
account for possible wraparounds). CFS picks the "leftmost" task from this
|
||||||
|
tree and sticks to it.
|
||||||
|
As the system progresses forwards, the executed tasks are put into the tree
|
||||||
|
more and more to the right --- slowly but surely giving a chance for every task
|
||||||
|
to become the "leftmost task" and thus get on the CPU within a deterministic
|
||||||
|
amount of time.
|
||||||
|
|
||||||
|
Summing up, CFS works like this: it runs a task a bit, and when the task
|
||||||
|
schedules (or a scheduler tick happens) the task's CPU usage is "accounted
|
||||||
|
for": the (small) time it just spent using the physical CPU is added to
|
||||||
|
p->se.vruntime. Once p->se.vruntime gets high enough so that another task
|
||||||
|
becomes the "leftmost task" of the time-ordered rbtree it maintains (plus a
|
||||||
|
small amount of "granularity" distance relative to the leftmost task so that we
|
||||||
|
do not over-schedule tasks and trash the cache), then the new leftmost task is
|
||||||
|
picked and the current task is preempted.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
4. SOME FEATURES OF CFS
|
||||||
|
|
||||||
|
CFS uses nanosecond granularity accounting and does not rely on any jiffies or
|
||||||
|
other HZ detail. Thus the CFS scheduler has no notion of "timeslices" in the
|
||||||
|
way the previous scheduler had, and has no heuristics whatsoever. There is
|
||||||
|
only one central tunable (you have to switch on CONFIG_SCHED_DEBUG):
|
||||||
|
|
||||||
/proc/sys/kernel/sched_granularity_ns
|
/proc/sys/kernel/sched_granularity_ns
|
||||||
|
|
||||||
which can be used to tune the scheduler from 'desktop' (low
|
which can be used to tune the scheduler from "desktop" (i.e., low latencies) to
|
||||||
latencies) to 'server' (good batching) workloads. It defaults to a
|
"server" (i.e., good batching) workloads. It defaults to a setting suitable
|
||||||
setting suitable for desktop workloads. SCHED_BATCH is handled by the
|
for desktop workloads. SCHED_BATCH is handled by the CFS scheduler module too.
|
||||||
CFS scheduler module too.
|
|
||||||
|
|
||||||
Due to its design, the CFS scheduler is not prone to any of the
|
Due to its design, the CFS scheduler is not prone to any of the "attacks" that
|
||||||
'attacks' that exist today against the heuristics of the stock
|
exist today against the heuristics of the stock scheduler: fiftyp.c, thud.c,
|
||||||
scheduler: fiftyp.c, thud.c, chew.c, ring-test.c, massive_intr.c all
|
chew.c, ring-test.c, massive_intr.c all work fine and do not impact
|
||||||
work fine and do not impact interactivity and produce the expected
|
interactivity and produce the expected behavior.
|
||||||
behavior.
|
|
||||||
|
|
||||||
the CFS scheduler has a much stronger handling of nice levels and
|
The CFS scheduler has a much stronger handling of nice levels and SCHED_BATCH
|
||||||
SCHED_BATCH: both types of workloads should be isolated much more
|
than the previous vanilla scheduler: both types of workloads are isolated much
|
||||||
agressively than under the vanilla scheduler.
|
more aggressively.
|
||||||
|
|
||||||
( another detail: due to nanosec accounting and timeline sorting,
|
SMP load-balancing has been reworked/sanitized: the runqueue-walking
|
||||||
sched_yield() support is very simple under CFS, and in fact under
|
assumptions are gone from the load-balancing code now, and iterators of the
|
||||||
CFS sched_yield() behaves much better than under any other
|
scheduling modules are used. The balancing code got quite a bit simpler as a
|
||||||
scheduler i have tested so far. )
|
result.
|
||||||
|
|
||||||
- sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler
|
|
||||||
way than the vanilla scheduler does. It uses 100 runqueues (for all
|
|
||||||
100 RT priority levels, instead of 140 in the vanilla scheduler)
|
|
||||||
and it needs no expired array.
|
|
||||||
|
|
||||||
- reworked/sanitized SMP load-balancing: the runqueue-walking
|
|
||||||
assumptions are gone from the load-balancing code now, and
|
|
||||||
iterators of the scheduling modules are used. The balancing code got
|
|
||||||
quite a bit simpler as a result.
|
|
||||||
|
|
||||||
|
|
||||||
Group scheduler extension to CFS
|
|
||||||
================================
|
|
||||||
|
|
||||||
Normally the scheduler operates on individual tasks and strives to provide
|
5. Scheduling policies
|
||||||
fair CPU time to each task. Sometimes, it may be desirable to group tasks
|
|
||||||
and provide fair CPU time to each such task group. For example, it may
|
|
||||||
be desirable to first provide fair CPU time to each user on the system
|
|
||||||
and then to each task belonging to a user.
|
|
||||||
|
|
||||||
CONFIG_FAIR_GROUP_SCHED strives to achieve exactly that. It lets
|
CFS implements three scheduling policies:
|
||||||
SCHED_NORMAL/BATCH tasks be be grouped and divides CPU time fairly among such
|
|
||||||
groups. At present, there are two (mutually exclusive) mechanisms to group
|
|
||||||
tasks for CPU bandwidth control purpose:
|
|
||||||
|
|
||||||
- Based on user id (CONFIG_FAIR_USER_SCHED)
|
- SCHED_NORMAL (traditionally called SCHED_OTHER): The scheduling
|
||||||
In this option, tasks are grouped according to their user id.
|
policy that is used for regular tasks.
|
||||||
- Based on "cgroup" pseudo filesystem (CONFIG_FAIR_CGROUP_SCHED)
|
|
||||||
This options lets the administrator create arbitrary groups
|
- SCHED_BATCH: Does not preempt nearly as often as regular tasks
|
||||||
of tasks, using the "cgroup" pseudo filesystem. See
|
would, thereby allowing tasks to run longer and make better use of
|
||||||
Documentation/cgroups.txt for more information about this
|
caches but at the cost of interactivity. This is well suited for
|
||||||
filesystem.
|
batch jobs.
|
||||||
|
|
||||||
|
- SCHED_IDLE: This is even weaker than nice 19, but its not a true
|
||||||
|
idle timer scheduler in order to avoid to get into priority
|
||||||
|
inversion problems which would deadlock the machine.
|
||||||
|
|
||||||
|
SCHED_FIFO/_RR are implemented in sched_rt.c and are as specified by
|
||||||
|
POSIX.
|
||||||
|
|
||||||
|
The command chrt from util-linux-ng 2.13.1.1 can set all of these except
|
||||||
|
SCHED_IDLE.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
6. SCHEDULING CLASSES
|
||||||
|
|
||||||
|
The new CFS scheduler has been designed in such a way to introduce "Scheduling
|
||||||
|
Classes," an extensible hierarchy of scheduler modules. These modules
|
||||||
|
encapsulate scheduling policy details and are handled by the scheduler core
|
||||||
|
without the core code assuming too much about them.
|
||||||
|
|
||||||
|
sched_fair.c implements the CFS scheduler described above.
|
||||||
|
|
||||||
|
sched_rt.c implements SCHED_FIFO and SCHED_RR semantics, in a simpler way than
|
||||||
|
the previous vanilla scheduler did. It uses 100 runqueues (for all 100 RT
|
||||||
|
priority levels, instead of 140 in the previous scheduler) and it needs no
|
||||||
|
expired array.
|
||||||
|
|
||||||
|
Scheduling classes are implemented through the sched_class structure, which
|
||||||
|
contains hooks to functions that must be called whenever an interesting event
|
||||||
|
occurs.
|
||||||
|
|
||||||
|
This is the (partial) list of the hooks:
|
||||||
|
|
||||||
|
- enqueue_task(...)
|
||||||
|
|
||||||
|
Called when a task enters a runnable state.
|
||||||
|
It puts the scheduling entity (task) into the red-black tree and
|
||||||
|
increments the nr_running variable.
|
||||||
|
|
||||||
|
- dequeue_tree(...)
|
||||||
|
|
||||||
|
When a task is no longer runnable, this function is called to keep the
|
||||||
|
corresponding scheduling entity out of the red-black tree. It decrements
|
||||||
|
the nr_running variable.
|
||||||
|
|
||||||
|
- yield_task(...)
|
||||||
|
|
||||||
|
This function is basically just a dequeue followed by an enqueue, unless the
|
||||||
|
compat_yield sysctl is turned on; in that case, it places the scheduling
|
||||||
|
entity at the right-most end of the red-black tree.
|
||||||
|
|
||||||
|
- check_preempt_curr(...)
|
||||||
|
|
||||||
|
This function checks if a task that entered the runnable state should
|
||||||
|
preempt the currently running task.
|
||||||
|
|
||||||
|
- pick_next_task(...)
|
||||||
|
|
||||||
|
This function chooses the most appropriate task eligible to run next.
|
||||||
|
|
||||||
|
- set_curr_task(...)
|
||||||
|
|
||||||
|
This function is called when a task changes its scheduling class or changes
|
||||||
|
its task group.
|
||||||
|
|
||||||
|
- task_tick(...)
|
||||||
|
|
||||||
|
This function is mostly called from time tick functions; it might lead to
|
||||||
|
process switch. This drives the running preemption.
|
||||||
|
|
||||||
|
- task_new(...)
|
||||||
|
|
||||||
|
The core scheduler gives the scheduling module an opportunity to manage new
|
||||||
|
task startup. The CFS scheduling module uses it for group scheduling, while
|
||||||
|
the scheduling module for a real-time task does not use it.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
7. GROUP SCHEDULER EXTENSIONS TO CFS
|
||||||
|
|
||||||
|
Normally, the scheduler operates on individual tasks and strives to provide
|
||||||
|
fair CPU time to each task. Sometimes, it may be desirable to group tasks and
|
||||||
|
provide fair CPU time to each such task group. For example, it may be
|
||||||
|
desirable to first provide fair CPU time to each user on the system and then to
|
||||||
|
each task belonging to a user.
|
||||||
|
|
||||||
|
CONFIG_GROUP_SCHED strives to achieve exactly that. It lets tasks to be
|
||||||
|
grouped and divides CPU time fairly among such groups.
|
||||||
|
|
||||||
|
CONFIG_RT_GROUP_SCHED permits to group real-time (i.e., SCHED_FIFO and
|
||||||
|
SCHED_RR) tasks.
|
||||||
|
|
||||||
|
CONFIG_FAIR_GROUP_SCHED permits to group CFS (i.e., SCHED_NORMAL and
|
||||||
|
SCHED_BATCH) tasks.
|
||||||
|
|
||||||
|
At present, there are two (mutually exclusive) mechanisms to group tasks for
|
||||||
|
CPU bandwidth control purposes:
|
||||||
|
|
||||||
|
- Based on user id (CONFIG_USER_SCHED)
|
||||||
|
|
||||||
|
With this option, tasks are grouped according to their user id.
|
||||||
|
|
||||||
|
- Based on "cgroup" pseudo filesystem (CONFIG_CGROUP_SCHED)
|
||||||
|
|
||||||
|
This options needs CONFIG_CGROUPS to be defined, and lets the administrator
|
||||||
|
create arbitrary groups of tasks, using the "cgroup" pseudo filesystem. See
|
||||||
|
Documentation/cgroups.txt for more information about this filesystem.
|
||||||
|
|
||||||
Only one of these options to group tasks can be chosen and not both.
|
Only one of these options to group tasks can be chosen and not both.
|
||||||
|
|
||||||
Group scheduler tunables:
|
When CONFIG_USER_SCHED is defined, a directory is created in sysfs for each new
|
||||||
|
user and a "cpu_share" file is added in that directory.
|
||||||
When CONFIG_FAIR_USER_SCHED is defined, a directory is created in sysfs for
|
|
||||||
each new user and a "cpu_share" file is added in that directory.
|
|
||||||
|
|
||||||
# cd /sys/kernel/uids
|
# cd /sys/kernel/uids
|
||||||
# cat 512/cpu_share # Display user 512's CPU share
|
# cat 512/cpu_share # Display user 512's CPU share
|
||||||
@ -155,16 +246,14 @@ each new user and a "cpu_share" file is added in that directory.
|
|||||||
2048
|
2048
|
||||||
#
|
#
|
||||||
|
|
||||||
CPU bandwidth between two users are divided in the ratio of their CPU shares.
|
CPU bandwidth between two users is divided in the ratio of their CPU shares.
|
||||||
For ex: if you would like user "root" to get twice the bandwidth of user
|
For example: if you would like user "root" to get twice the bandwidth of user
|
||||||
"guest", then set the cpu_share for both the users such that "root"'s
|
"guest," then set the cpu_share for both the users such that "root"'s cpu_share
|
||||||
cpu_share is twice "guest"'s cpu_share
|
is twice "guest"'s cpu_share.
|
||||||
|
|
||||||
|
When CONFIG_CGROUP_SCHED is defined, a "cpu.shares" file is created for each
|
||||||
When CONFIG_FAIR_CGROUP_SCHED is defined, a "cpu.shares" file is created
|
group created using the pseudo filesystem. See example steps below to create
|
||||||
for each group created using the pseudo filesystem. See example steps
|
task groups and modify their CPU share using the "cgroups" pseudo filesystem.
|
||||||
below to create task groups and modify their CPU share using the "cgroups"
|
|
||||||
pseudo filesystem
|
|
||||||
|
|
||||||
# mkdir /dev/cpuctl
|
# mkdir /dev/cpuctl
|
||||||
# mount -t cgroup -ocpu none /dev/cpuctl
|
# mount -t cgroup -ocpu none /dev/cpuctl
|
||||||
|
@ -436,6 +436,42 @@ Other:
|
|||||||
was updated to remove all vports for the fc_host as well.
|
was updated to remove all vports for the fc_host as well.
|
||||||
|
|
||||||
|
|
||||||
|
Transport supplied functions
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
The following functions are supplied by the FC-transport for use by LLDs.
|
||||||
|
|
||||||
|
fc_vport_create - create a vport
|
||||||
|
fc_vport_terminate - detach and remove a vport
|
||||||
|
|
||||||
|
Details:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fc_vport_create - Admin App or LLDD requests creation of a vport
|
||||||
|
* @shost: scsi host the virtual port is connected to.
|
||||||
|
* @ids: The world wide names, FC4 port roles, etc for
|
||||||
|
* the virtual port.
|
||||||
|
*
|
||||||
|
* Notes:
|
||||||
|
* This routine assumes no locks are held on entry.
|
||||||
|
*/
|
||||||
|
struct fc_vport *
|
||||||
|
fc_vport_create(struct Scsi_Host *shost, struct fc_vport_identifiers *ids)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fc_vport_terminate - Admin App or LLDD requests termination of a vport
|
||||||
|
* @vport: fc_vport to be terminated
|
||||||
|
*
|
||||||
|
* Calls the LLDD vport_delete() function, then deallocates and removes
|
||||||
|
* the vport from the shost and object tree.
|
||||||
|
*
|
||||||
|
* Notes:
|
||||||
|
* This routine assumes no locks are held on entry.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
fc_vport_terminate(struct fc_vport *vport)
|
||||||
|
|
||||||
|
|
||||||
Credits
|
Credits
|
||||||
=======
|
=======
|
||||||
The following people have contributed to this document:
|
The following people have contributed to this document:
|
||||||
|
@ -746,8 +746,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
Module snd-hda-intel
|
Module snd-hda-intel
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8),
|
Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8, ICH9, ICH10,
|
||||||
ATI SB450, SB600, RS600,
|
PCH, SCH),
|
||||||
|
ATI SB450, SB600, R600, RS600, RS690, RS780, RV610, RV620,
|
||||||
|
RV630, RV635, RV670, RV770,
|
||||||
VIA VT8251/VT8237A,
|
VIA VT8251/VT8237A,
|
||||||
SIS966, ULI M5461
|
SIS966, ULI M5461
|
||||||
|
|
||||||
@ -807,6 +809,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
ALC260
|
ALC260
|
||||||
hp HP machines
|
hp HP machines
|
||||||
hp-3013 HP machines (3013-variant)
|
hp-3013 HP machines (3013-variant)
|
||||||
|
hp-dc7600 HP DC7600
|
||||||
fujitsu Fujitsu S7020
|
fujitsu Fujitsu S7020
|
||||||
acer Acer TravelMate
|
acer Acer TravelMate
|
||||||
will Will laptops (PB V7900)
|
will Will laptops (PB V7900)
|
||||||
@ -828,8 +831,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
hippo Hippo (ATI) with jack detection, Sony UX-90s
|
hippo Hippo (ATI) with jack detection, Sony UX-90s
|
||||||
hippo_1 Hippo (Benq) with jack detection
|
hippo_1 Hippo (Benq) with jack detection
|
||||||
sony-assamd Sony ASSAMD
|
sony-assamd Sony ASSAMD
|
||||||
|
toshiba-s06 Toshiba S06
|
||||||
|
toshiba-rx1 Toshiba RX1
|
||||||
ultra Samsung Q1 Ultra Vista model
|
ultra Samsung Q1 Ultra Vista model
|
||||||
lenovo-3000 Lenovo 3000 y410
|
lenovo-3000 Lenovo 3000 y410
|
||||||
|
nec NEC Versa S9100
|
||||||
basic fixed pin assignment w/o SPDIF
|
basic fixed pin assignment w/o SPDIF
|
||||||
auto auto-config reading BIOS (default)
|
auto auto-config reading BIOS (default)
|
||||||
|
|
||||||
@ -838,6 +844,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
3stack 3-stack model
|
3stack 3-stack model
|
||||||
toshiba Toshiba A205
|
toshiba Toshiba A205
|
||||||
acer Acer laptops
|
acer Acer laptops
|
||||||
|
acer-aspire Acer Aspire One
|
||||||
dell Dell OEM laptops (Vostro 1200)
|
dell Dell OEM laptops (Vostro 1200)
|
||||||
zepto Zepto laptops
|
zepto Zepto laptops
|
||||||
test for testing/debugging purpose, almost all controls can
|
test for testing/debugging purpose, almost all controls can
|
||||||
@ -847,6 +854,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
|
|
||||||
ALC269
|
ALC269
|
||||||
basic Basic preset
|
basic Basic preset
|
||||||
|
quanta Quanta FL1
|
||||||
|
eeepc-p703 ASUS Eeepc P703 P900A
|
||||||
|
eeepc-p901 ASUS Eeepc P901 S101
|
||||||
|
|
||||||
ALC662/663
|
ALC662/663
|
||||||
3stack-dig 3-stack (2-channel) with SPDIF
|
3stack-dig 3-stack (2-channel) with SPDIF
|
||||||
@ -856,10 +866,17 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
lenovo-101e Lenovo laptop
|
lenovo-101e Lenovo laptop
|
||||||
eeepc-p701 ASUS Eeepc P701
|
eeepc-p701 ASUS Eeepc P701
|
||||||
eeepc-ep20 ASUS Eeepc EP20
|
eeepc-ep20 ASUS Eeepc EP20
|
||||||
|
ecs ECS/Foxconn mobo
|
||||||
m51va ASUS M51VA
|
m51va ASUS M51VA
|
||||||
g71v ASUS G71V
|
g71v ASUS G71V
|
||||||
h13 ASUS H13
|
h13 ASUS H13
|
||||||
g50v ASUS G50V
|
g50v ASUS G50V
|
||||||
|
asus-mode1 ASUS
|
||||||
|
asus-mode2 ASUS
|
||||||
|
asus-mode3 ASUS
|
||||||
|
asus-mode4 ASUS
|
||||||
|
asus-mode5 ASUS
|
||||||
|
asus-mode6 ASUS
|
||||||
auto auto-config reading BIOS (default)
|
auto auto-config reading BIOS (default)
|
||||||
|
|
||||||
ALC882/885
|
ALC882/885
|
||||||
@ -891,12 +908,14 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
lenovo-101e Lenovo 101E
|
lenovo-101e Lenovo 101E
|
||||||
lenovo-nb0763 Lenovo NB0763
|
lenovo-nb0763 Lenovo NB0763
|
||||||
lenovo-ms7195-dig Lenovo MS7195
|
lenovo-ms7195-dig Lenovo MS7195
|
||||||
|
lenovo-sky Lenovo Sky
|
||||||
haier-w66 Haier W66
|
haier-w66 Haier W66
|
||||||
3stack-hp HP machines with 3stack (Lucknow, Samba boards)
|
3stack-hp HP machines with 3stack (Lucknow, Samba boards)
|
||||||
6stack-dell Dell machines with 6stack (Inspiron 530)
|
6stack-dell Dell machines with 6stack (Inspiron 530)
|
||||||
mitac Mitac 8252D
|
mitac Mitac 8252D
|
||||||
clevo-m720 Clevo M720 laptop series
|
clevo-m720 Clevo M720 laptop series
|
||||||
fujitsu-pi2515 Fujitsu AMILO Pi2515
|
fujitsu-pi2515 Fujitsu AMILO Pi2515
|
||||||
|
3stack-6ch-intel Intel DG33* boards
|
||||||
auto auto-config reading BIOS (default)
|
auto auto-config reading BIOS (default)
|
||||||
|
|
||||||
ALC861/660
|
ALC861/660
|
||||||
@ -929,7 +948,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
allout 5-jack in back, 2-jack in front, SPDIF out
|
allout 5-jack in back, 2-jack in front, SPDIF out
|
||||||
auto auto-config reading BIOS (default)
|
auto auto-config reading BIOS (default)
|
||||||
|
|
||||||
AD1882
|
AD1882 / AD1882A
|
||||||
3stack 3-stack mode (default)
|
3stack 3-stack mode (default)
|
||||||
6stack 6-stack mode
|
6stack 6-stack mode
|
||||||
|
|
||||||
@ -1079,7 +1098,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
register value without FIFO size correction as the current
|
register value without FIFO size correction as the current
|
||||||
DMA pointer. position_fix=2 will make the driver to use
|
DMA pointer. position_fix=2 will make the driver to use
|
||||||
the position buffer instead of reading SD_LPIB register.
|
the position buffer instead of reading SD_LPIB register.
|
||||||
(Usually SD_LPLIB register is more accurate than the
|
(Usually SD_LPIB register is more accurate than the
|
||||||
position buffer.)
|
position buffer.)
|
||||||
|
|
||||||
NB: If you get many "azx_get_response timeout" messages at
|
NB: If you get many "azx_get_response timeout" messages at
|
||||||
@ -1166,6 +1185,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
* Event Electronics, EZ8
|
* Event Electronics, EZ8
|
||||||
* Digigram VX442
|
* Digigram VX442
|
||||||
* Lionstracs, Mediastaton
|
* Lionstracs, Mediastaton
|
||||||
|
* Terrasoniq TS 88
|
||||||
|
|
||||||
model - Use the given board model, one of the following:
|
model - Use the given board model, one of the following:
|
||||||
delta1010, dio2496, delta66, delta44, audiophile, delta410,
|
delta1010, dio2496, delta66, delta44, audiophile, delta410,
|
||||||
@ -1200,7 +1220,10 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
* TerraTec Phase 22
|
* TerraTec Phase 22
|
||||||
* TerraTec Phase 28
|
* TerraTec Phase 28
|
||||||
* AudioTrak Prodigy 7.1
|
* AudioTrak Prodigy 7.1
|
||||||
* AudioTrak Prodigy 7.1LT
|
* AudioTrak Prodigy 7.1 LT
|
||||||
|
* AudioTrak Prodigy 7.1 XT
|
||||||
|
* AudioTrak Prodigy 7.1 HIFI
|
||||||
|
* AudioTrak Prodigy 7.1 HD2
|
||||||
* AudioTrak Prodigy 192
|
* AudioTrak Prodigy 192
|
||||||
* Pontis MS300
|
* Pontis MS300
|
||||||
* Albatron K8X800 Pro II
|
* Albatron K8X800 Pro II
|
||||||
@ -1211,12 +1234,16 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
* Shuttle SN25P
|
* Shuttle SN25P
|
||||||
* Onkyo SE-90PCI
|
* Onkyo SE-90PCI
|
||||||
* Onkyo SE-200PCI
|
* Onkyo SE-200PCI
|
||||||
|
* ESI Juli@
|
||||||
|
* Hercules Fortissimo IV
|
||||||
|
* EGO-SYS WaveTerminal 192M
|
||||||
|
|
||||||
model - Use the given board model, one of the following:
|
model - Use the given board model, one of the following:
|
||||||
revo51, revo71, amp2000, prodigy71, prodigy71lt,
|
revo51, revo71, amp2000, prodigy71, prodigy71lt,
|
||||||
prodigy192, aureon51, aureon71, universe, ap192,
|
prodigy71xt, prodigy71hifi, prodigyhd2, prodigy192,
|
||||||
k8x800, phase22, phase28, ms300, av710, se200pci,
|
juli, aureon51, aureon71, universe, ap192, k8x800,
|
||||||
se90pci
|
phase22, phase28, ms300, av710, se200pci, se90pci,
|
||||||
|
fortissimo4, sn25p, WT192M
|
||||||
|
|
||||||
This module supports multiple cards and autoprobe.
|
This module supports multiple cards and autoprobe.
|
||||||
|
|
||||||
@ -1255,7 +1282,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
|
|
||||||
Module for AC'97 motherboards from Intel and compatibles.
|
Module for AC'97 motherboards from Intel and compatibles.
|
||||||
* Intel i810/810E, i815, i820, i830, i84x, MX440
|
* Intel i810/810E, i815, i820, i830, i84x, MX440
|
||||||
ICH5, ICH6, ICH7, ESB2
|
ICH5, ICH6, ICH7, 6300ESB, ESB2
|
||||||
* SiS 7012 (SiS 735)
|
* SiS 7012 (SiS 735)
|
||||||
* NVidia NForce, NForce2, NForce3, MCP04, CK804
|
* NVidia NForce, NForce2, NForce3, MCP04, CK804
|
||||||
CK8, CK8S, MCP501
|
CK8, CK8S, MCP501
|
||||||
@ -1951,6 +1978,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
* CHIC True Sound 4Dwave
|
* CHIC True Sound 4Dwave
|
||||||
* Shark Predator4D-PCI
|
* Shark Predator4D-PCI
|
||||||
* Jaton SonicWave 4D
|
* Jaton SonicWave 4D
|
||||||
|
* SiS SI7018 PCI Audio
|
||||||
|
* Hoontech SoundTrack Digital 4DWave NX
|
||||||
|
|
||||||
pcm_channels - max channels (voices) reserved for PCM
|
pcm_channels - max channels (voices) reserved for PCM
|
||||||
wavetable_size - max wavetable size in kB (4-?kb)
|
wavetable_size - max wavetable size in kB (4-?kb)
|
||||||
@ -1966,12 +1995,25 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
|
|
||||||
vid - Vendor ID for the device (optional)
|
vid - Vendor ID for the device (optional)
|
||||||
pid - Product ID for the device (optional)
|
pid - Product ID for the device (optional)
|
||||||
|
nrpacks - Max. number of packets per URB (default: 8)
|
||||||
|
async_unlink - Use async unlink mode (default: yes)
|
||||||
device_setup - Device specific magic number (optional)
|
device_setup - Device specific magic number (optional)
|
||||||
- Influence depends on the device
|
- Influence depends on the device
|
||||||
- Default: 0x0000
|
- Default: 0x0000
|
||||||
|
ignore_ctl_error - Ignore any USB-controller regarding mixer
|
||||||
|
interface (default: no)
|
||||||
|
|
||||||
This module supports multiple devices, autoprobe and hotplugging.
|
This module supports multiple devices, autoprobe and hotplugging.
|
||||||
|
|
||||||
|
NB: nrpacks parameter can be modified dynamically via sysfs.
|
||||||
|
Don't put the value over 20. Changing via sysfs has no sanity
|
||||||
|
check.
|
||||||
|
NB: async_unlink=0 would cause Oops. It remains just for
|
||||||
|
debugging purpose (if any).
|
||||||
|
NB: ignore_ctl_error=1 may help when you get an error at accessing
|
||||||
|
the mixer element such as URB error -22. This happens on some
|
||||||
|
buggy USB device or the controller.
|
||||||
|
|
||||||
Module snd-usb-caiaq
|
Module snd-usb-caiaq
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
@ -2078,7 +2120,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
|||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Module for sound cards based on the Asus AV100/AV200 chips,
|
Module for sound cards based on the Asus AV100/AV200 chips,
|
||||||
i.e., Xonar D1, DX, D2 and D2X.
|
i.e., Xonar D1, DX, D2, D2X and HDAV1.3 (Deluxe).
|
||||||
|
|
||||||
This module supports autoprobe and multiple cards.
|
This module supports autoprobe and multiple cards.
|
||||||
|
|
||||||
|
@ -6135,44 +6135,58 @@ struct _snd_pcm_runtime {
|
|||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section id="useful-functions-snd-assert">
|
|
||||||
<title><function>snd_assert()</function></title>
|
|
||||||
<para>
|
|
||||||
<function>snd_assert()</function> macro is similar with the
|
|
||||||
normal <function>assert()</function> macro. For example,
|
|
||||||
|
|
||||||
<informalexample>
|
|
||||||
<programlisting>
|
|
||||||
<![CDATA[
|
|
||||||
snd_assert(pointer != NULL, return -EINVAL);
|
|
||||||
]]>
|
|
||||||
</programlisting>
|
|
||||||
</informalexample>
|
|
||||||
</para>
|
|
||||||
|
|
||||||
<para>
|
|
||||||
The first argument is the expression to evaluate, and the
|
|
||||||
second argument is the action if it fails. When
|
|
||||||
<constant>CONFIG_SND_DEBUG</constant>, is set, it will show an
|
|
||||||
error message such as <computeroutput>BUG? (xxx)</computeroutput>
|
|
||||||
together with stack trace.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
When no debug flag is set, this macro is ignored.
|
|
||||||
</para>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section id="useful-functions-snd-bug">
|
<section id="useful-functions-snd-bug">
|
||||||
<title><function>snd_BUG()</function></title>
|
<title><function>snd_BUG()</function></title>
|
||||||
<para>
|
<para>
|
||||||
It shows the <computeroutput>BUG?</computeroutput> message and
|
It shows the <computeroutput>BUG?</computeroutput> message and
|
||||||
stack trace as well as <function>snd_assert</function> at the point.
|
stack trace as well as <function>snd_BUG_ON</function> at the point.
|
||||||
It's useful to show that a fatal error happens there.
|
It's useful to show that a fatal error happens there.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
When no debug flag is set, this macro is ignored.
|
When no debug flag is set, this macro is ignored.
|
||||||
</para>
|
</para>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
<section id="useful-functions-snd-bug-on">
|
||||||
|
<title><function>snd_BUG_ON()</function></title>
|
||||||
|
<para>
|
||||||
|
<function>snd_BUG_ON()</function> macro is similar with
|
||||||
|
<function>WARN_ON()</function> macro. For example,
|
||||||
|
|
||||||
|
<informalexample>
|
||||||
|
<programlisting>
|
||||||
|
<![CDATA[
|
||||||
|
snd_BUG_ON(!pointer);
|
||||||
|
]]>
|
||||||
|
</programlisting>
|
||||||
|
</informalexample>
|
||||||
|
|
||||||
|
or it can be used as the condition,
|
||||||
|
<informalexample>
|
||||||
|
<programlisting>
|
||||||
|
<![CDATA[
|
||||||
|
if (snd_BUG_ON(non_zero_is_bug))
|
||||||
|
return -EINVAL;
|
||||||
|
]]>
|
||||||
|
</programlisting>
|
||||||
|
</informalexample>
|
||||||
|
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The macro takes an conditional expression to evaluate.
|
||||||
|
When <constant>CONFIG_SND_DEBUG</constant>, is set, the
|
||||||
|
expression is actually evaluated. If it's non-zero, it shows
|
||||||
|
the warning message such as
|
||||||
|
<computeroutput>BUG? (xxx)</computeroutput>
|
||||||
|
normally followed by stack trace. It returns the evaluated
|
||||||
|
value.
|
||||||
|
When no <constant>CONFIG_SND_DEBUG</constant> is set, this
|
||||||
|
macro always returns zero.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
|
||||||
|
@ -135,11 +135,7 @@ when the Mic is inserted:-
|
|||||||
|
|
||||||
static int spitz_mic_bias(struct snd_soc_dapm_widget* w, int event)
|
static int spitz_mic_bias(struct snd_soc_dapm_widget* w, int event)
|
||||||
{
|
{
|
||||||
if(SND_SOC_DAPM_EVENT_ON(event))
|
gpio_set_value(SPITZ_GPIO_MIC_BIAS, SND_SOC_DAPM_EVENT_ON(event));
|
||||||
set_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_MIC_BIAS);
|
|
||||||
else
|
|
||||||
reset_scoop_gpio(&spitzscoop2_device.dev, SPITZ_SCP2_MIC_BIAS);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -269,11 +265,7 @@ powered only when the spk is in use.
|
|||||||
/* turn speaker amplifier on/off depending on use */
|
/* turn speaker amplifier on/off depending on use */
|
||||||
static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
|
static int corgi_amp_event(struct snd_soc_dapm_widget *w, int event)
|
||||||
{
|
{
|
||||||
if (SND_SOC_DAPM_EVENT_ON(event))
|
gpio_set_value(CORGI_GPIO_APM_ON, SND_SOC_DAPM_EVENT_ON(event));
|
||||||
set_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
|
|
||||||
else
|
|
||||||
reset_scoop_gpio(&corgiscoop_device.dev, CORGI_SCP_APM_ON);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -351,9 +351,10 @@ kernel. This value defaults to SHMMAX.
|
|||||||
|
|
||||||
softlockup_thresh:
|
softlockup_thresh:
|
||||||
|
|
||||||
This value can be used to lower the softlockup tolerance
|
This value can be used to lower the softlockup tolerance threshold. The
|
||||||
threshold. The default threshold is 10s. If a cpu is locked up
|
default threshold is 60 seconds. If a cpu is locked up for 60 seconds,
|
||||||
for 10s, the kernel complains. Valid values are 1-60s.
|
the kernel complains. Valid values are 1-60 seconds. Setting this
|
||||||
|
tunable to zero will disable the softlockup detection altogether.
|
||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
@ -42,9 +42,21 @@ This function kills all URBs associated with an anchor. The URBs
|
|||||||
are called in the reverse temporal order they were submitted.
|
are called in the reverse temporal order they were submitted.
|
||||||
This way no data can be reordered.
|
This way no data can be reordered.
|
||||||
|
|
||||||
|
usb_unlink_anchored_urbs()
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This function unlinks all URBs associated with an anchor. The URBs
|
||||||
|
are processed in the reverse temporal order they were submitted.
|
||||||
|
This is similar to usb_kill_anchored_urbs(), but it will not sleep.
|
||||||
|
Therefore no guarantee is made that the URBs have been unlinked when
|
||||||
|
the call returns. They may be unlinked later but will be unlinked in
|
||||||
|
finite time.
|
||||||
|
|
||||||
usb_wait_anchor_empty_timeout()
|
usb_wait_anchor_empty_timeout()
|
||||||
-------------------------------
|
-------------------------------
|
||||||
|
|
||||||
This function waits for all URBs associated with an anchor to finish
|
This function waits for all URBs associated with an anchor to finish
|
||||||
or a timeout, whichever comes first. Its return value will tell you
|
or a timeout, whichever comes first. Its return value will tell you
|
||||||
whether the timeout was reached.
|
whether the timeout was reached.
|
||||||
|
|
||||||
|
|
||||||
|
@ -46,7 +46,7 @@
|
|||||||
45 -> Pinnacle PCTV DVB-T (em2870)
|
45 -> Pinnacle PCTV DVB-T (em2870)
|
||||||
46 -> Compro, VideoMate U3 (em2870) [185b:2870]
|
46 -> Compro, VideoMate U3 (em2870) [185b:2870]
|
||||||
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]
|
47 -> KWorld DVB-T 305U (em2880) [eb1a:e305]
|
||||||
48 -> KWorld DVB-T 310U (em2880)
|
48 -> KWorld DVB-T 310U (em2880) [eb1a:e310]
|
||||||
49 -> MSI DigiVox A/D (em2880) [eb1a:e310]
|
49 -> MSI DigiVox A/D (em2880) [eb1a:e310]
|
||||||
50 -> MSI DigiVox A/D II (em2880) [eb1a:e320]
|
50 -> MSI DigiVox A/D II (em2880) [eb1a:e320]
|
||||||
51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c]
|
51 -> Terratec Hybrid XS Secam (em2880) [0ccd:004c]
|
||||||
|
@ -190,6 +190,7 @@ pac7311 093a:260f SnakeCam
|
|||||||
pac7311 093a:2621 PAC731x
|
pac7311 093a:2621 PAC731x
|
||||||
pac7311 093a:2624 PAC7302
|
pac7311 093a:2624 PAC7302
|
||||||
pac7311 093a:2626 Labtec 2200
|
pac7311 093a:2626 Labtec 2200
|
||||||
|
pac7311 093a:262a Webcam 300k
|
||||||
zc3xx 0ac8:0302 Z-star Vimicro zc0302
|
zc3xx 0ac8:0302 Z-star Vimicro zc0302
|
||||||
vc032x 0ac8:0321 Vimicro generic vc0321
|
vc032x 0ac8:0321 Vimicro generic vc0321
|
||||||
vc032x 0ac8:0323 Vimicro Vc0323
|
vc032x 0ac8:0323 Vimicro Vc0323
|
||||||
|
4
Documentation/x86/00-INDEX
Normal file
4
Documentation/x86/00-INDEX
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
00-INDEX
|
||||||
|
- this file
|
||||||
|
mtrr.txt
|
||||||
|
- how to use x86 Memory Type Range Registers to increase performance
|
@ -308,7 +308,7 @@ Protocol: 2.00+
|
|||||||
|
|
||||||
Field name: start_sys
|
Field name: start_sys
|
||||||
Type: read
|
Type: read
|
||||||
Offset/size: 0x20c/4
|
Offset/size: 0x20c/2
|
||||||
Protocol: 2.00+
|
Protocol: 2.00+
|
||||||
|
|
||||||
The load low segment (0x1000). Obsolete.
|
The load low segment (0x1000). Obsolete.
|
@ -14,6 +14,10 @@ PAT allows for different types of memory attributes. The most commonly used
|
|||||||
ones that will be supported at this time are Write-back, Uncached,
|
ones that will be supported at this time are Write-back, Uncached,
|
||||||
Write-combined and Uncached Minus.
|
Write-combined and Uncached Minus.
|
||||||
|
|
||||||
|
|
||||||
|
PAT APIs
|
||||||
|
--------
|
||||||
|
|
||||||
There are many different APIs in the kernel that allows setting of memory
|
There are many different APIs in the kernel that allows setting of memory
|
||||||
attributes at the page level. In order to avoid aliasing, these interfaces
|
attributes at the page level. In order to avoid aliasing, these interfaces
|
||||||
should be used thoughtfully. Below is a table of interfaces available,
|
should be used thoughtfully. Below is a table of interfaces available,
|
||||||
@ -26,38 +30,38 @@ address range to avoid any aliasing.
|
|||||||
API | RAM | ACPI,... | Reserved/Holes |
|
API | RAM | ACPI,... | Reserved/Holes |
|
||||||
-----------------------|----------|------------|------------------|
|
-----------------------|----------|------------|------------------|
|
||||||
| | | |
|
| | | |
|
||||||
ioremap | -- | UC | UC |
|
ioremap | -- | UC- | UC- |
|
||||||
| | | |
|
| | | |
|
||||||
ioremap_cache | -- | WB | WB |
|
ioremap_cache | -- | WB | WB |
|
||||||
| | | |
|
| | | |
|
||||||
ioremap_nocache | -- | UC | UC |
|
ioremap_nocache | -- | UC- | UC- |
|
||||||
| | | |
|
| | | |
|
||||||
ioremap_wc | -- | -- | WC |
|
ioremap_wc | -- | -- | WC |
|
||||||
| | | |
|
| | | |
|
||||||
set_memory_uc | UC | -- | -- |
|
set_memory_uc | UC- | -- | -- |
|
||||||
set_memory_wb | | | |
|
set_memory_wb | | | |
|
||||||
| | | |
|
| | | |
|
||||||
set_memory_wc | WC | -- | -- |
|
set_memory_wc | WC | -- | -- |
|
||||||
set_memory_wb | | | |
|
set_memory_wb | | | |
|
||||||
| | | |
|
| | | |
|
||||||
pci sysfs resource | -- | -- | UC |
|
pci sysfs resource | -- | -- | UC- |
|
||||||
| | | |
|
| | | |
|
||||||
pci sysfs resource_wc | -- | -- | WC |
|
pci sysfs resource_wc | -- | -- | WC |
|
||||||
is IORESOURCE_PREFETCH| | | |
|
is IORESOURCE_PREFETCH| | | |
|
||||||
| | | |
|
| | | |
|
||||||
pci proc | -- | -- | UC |
|
pci proc | -- | -- | UC- |
|
||||||
!PCIIOC_WRITE_COMBINE | | | |
|
!PCIIOC_WRITE_COMBINE | | | |
|
||||||
| | | |
|
| | | |
|
||||||
pci proc | -- | -- | WC |
|
pci proc | -- | -- | WC |
|
||||||
PCIIOC_WRITE_COMBINE | | | |
|
PCIIOC_WRITE_COMBINE | | | |
|
||||||
| | | |
|
| | | |
|
||||||
/dev/mem | -- | UC | UC |
|
/dev/mem | -- | WB/WC/UC- | WB/WC/UC- |
|
||||||
read-write | | | |
|
read-write | | | |
|
||||||
| | | |
|
| | | |
|
||||||
/dev/mem | -- | UC | UC |
|
/dev/mem | -- | UC- | UC- |
|
||||||
mmap SYNC flag | | | |
|
mmap SYNC flag | | | |
|
||||||
| | | |
|
| | | |
|
||||||
/dev/mem | -- | WB/WC/UC | WB/WC/UC |
|
/dev/mem | -- | WB/WC/UC- | WB/WC/UC- |
|
||||||
mmap !SYNC flag | |(from exist-| (from exist- |
|
mmap !SYNC flag | |(from exist-| (from exist- |
|
||||||
and | | ing alias)| ing alias) |
|
and | | ing alias)| ing alias) |
|
||||||
any alias to this area| | | |
|
any alias to this area| | | |
|
||||||
@ -68,7 +72,7 @@ pci proc | -- | -- | WC |
|
|||||||
and | | | |
|
and | | | |
|
||||||
MTRR says WB | | | |
|
MTRR says WB | | | |
|
||||||
| | | |
|
| | | |
|
||||||
/dev/mem | -- | -- | UC_MINUS |
|
/dev/mem | -- | -- | UC- |
|
||||||
mmap !SYNC flag | | | |
|
mmap !SYNC flag | | | |
|
||||||
no alias to this area | | | |
|
no alias to this area | | | |
|
||||||
and | | | |
|
and | | | |
|
||||||
@ -98,3 +102,35 @@ types.
|
|||||||
|
|
||||||
Drivers should use set_memory_[uc|wc] to set access type for RAM ranges.
|
Drivers should use set_memory_[uc|wc] to set access type for RAM ranges.
|
||||||
|
|
||||||
|
|
||||||
|
PAT debugging
|
||||||
|
-------------
|
||||||
|
|
||||||
|
With CONFIG_DEBUG_FS enabled, PAT memtype list can be examined by
|
||||||
|
|
||||||
|
# mount -t debugfs debugfs /sys/kernel/debug
|
||||||
|
# cat /sys/kernel/debug/x86/pat_memtype_list
|
||||||
|
PAT memtype list:
|
||||||
|
uncached-minus @ 0x7fadf000-0x7fae0000
|
||||||
|
uncached-minus @ 0x7fb19000-0x7fb1a000
|
||||||
|
uncached-minus @ 0x7fb1a000-0x7fb1b000
|
||||||
|
uncached-minus @ 0x7fb1b000-0x7fb1c000
|
||||||
|
uncached-minus @ 0x7fb1c000-0x7fb1d000
|
||||||
|
uncached-minus @ 0x7fb1d000-0x7fb1e000
|
||||||
|
uncached-minus @ 0x7fb1e000-0x7fb25000
|
||||||
|
uncached-minus @ 0x7fb25000-0x7fb26000
|
||||||
|
uncached-minus @ 0x7fb26000-0x7fb27000
|
||||||
|
uncached-minus @ 0x7fb27000-0x7fb28000
|
||||||
|
uncached-minus @ 0x7fb28000-0x7fb2e000
|
||||||
|
uncached-minus @ 0x7fb2e000-0x7fb2f000
|
||||||
|
uncached-minus @ 0x7fb2f000-0x7fb30000
|
||||||
|
uncached-minus @ 0x7fb31000-0x7fb32000
|
||||||
|
uncached-minus @ 0x80000000-0x90000000
|
||||||
|
|
||||||
|
This list shows physical address ranges and various PAT settings used to
|
||||||
|
access those physical address ranges.
|
||||||
|
|
||||||
|
Another, more verbose way of getting PAT related debug messages is with
|
||||||
|
"debugpat" boot parameter. With this parameter, various debug messages are
|
||||||
|
printed to dmesg log.
|
||||||
|
|
||||||
|
@ -54,10 +54,6 @@ APICs
|
|||||||
apicmaintimer. Useful when your PIT timer is totally
|
apicmaintimer. Useful when your PIT timer is totally
|
||||||
broken.
|
broken.
|
||||||
|
|
||||||
disable_8254_timer / enable_8254_timer
|
|
||||||
Enable interrupt 0 timer routing over the 8254 in addition to over
|
|
||||||
the IO-APIC. The kernel tries to set a sensible default.
|
|
||||||
|
|
||||||
Early Console
|
Early Console
|
||||||
|
|
||||||
syntax: earlyprintk=vga
|
syntax: earlyprintk=vga
|
||||||
|
77
MAINTAINERS
77
MAINTAINERS
@ -387,6 +387,7 @@ AMD IOMMU (AMD-VI)
|
|||||||
P: Joerg Roedel
|
P: Joerg Roedel
|
||||||
M: joerg.roedel@amd.com
|
M: joerg.roedel@amd.com
|
||||||
L: iommu@lists.linux-foundation.org
|
L: iommu@lists.linux-foundation.org
|
||||||
|
T: git://git.kernel.org/pub/scm/linux/kernel/git/joro/linux-2.6-iommu.git
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
AMS (Apple Motion Sensor) DRIVER
|
AMS (Apple Motion Sensor) DRIVER
|
||||||
@ -466,6 +467,12 @@ M: kernel@wantstofly.org
|
|||||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
ARM/AFEB9260 MACHINE SUPPORT
|
||||||
|
P: Sergey Lapin
|
||||||
|
M: slapin@ossfans.org
|
||||||
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
ARM/AJECO 1ARM MACHINE SUPPORT
|
ARM/AJECO 1ARM MACHINE SUPPORT
|
||||||
P: Lennert Buytenhek
|
P: Lennert Buytenhek
|
||||||
M: kernel@wantstofly.org
|
M: kernel@wantstofly.org
|
||||||
@ -491,7 +498,7 @@ M: kernel@wantstofly.org
|
|||||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/COMPULAB CM-X270/EM-X270 MACHINE SUPPORT
|
ARM/COMPULAB CM-X270/EM-X270 and CM-X300 MACHINE SUPPORT
|
||||||
P: Mike Rapoport
|
P: Mike Rapoport
|
||||||
M: mike@compulab.co.il
|
M: mike@compulab.co.il
|
||||||
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
L: linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
|
||||||
@ -623,6 +630,12 @@ M: marek.vasut@gmail.com
|
|||||||
W: http://hackndev.com
|
W: http://hackndev.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
ARM/PALMZ72 SUPPORT
|
||||||
|
P: Sergey Lapin
|
||||||
|
M: slapin@ossfans.org
|
||||||
|
W: http://hackndev.com
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
ARM/PLEB SUPPORT
|
ARM/PLEB SUPPORT
|
||||||
P: Peter Chubb
|
P: Peter Chubb
|
||||||
M: pleb@gelato.unsw.edu.au
|
M: pleb@gelato.unsw.edu.au
|
||||||
@ -1048,6 +1061,13 @@ L: cbe-oss-dev@ozlabs.org
|
|||||||
W: http://www.ibm.com/developerworks/power/cell/
|
W: http://www.ibm.com/developerworks/power/cell/
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
CISCO 10G ETHERNET DRIVER
|
||||||
|
P: Scott Feldman
|
||||||
|
M: scofeldm@cisco.com
|
||||||
|
P: Joe Eykholt
|
||||||
|
M: jeykholt@cisco.com
|
||||||
|
S: Supported
|
||||||
|
|
||||||
CFAG12864B LCD DRIVER
|
CFAG12864B LCD DRIVER
|
||||||
P: Miguel Ojeda Sandonis
|
P: Miguel Ojeda Sandonis
|
||||||
M: miguel.ojeda.sandonis@gmail.com
|
M: miguel.ojeda.sandonis@gmail.com
|
||||||
@ -1198,9 +1218,7 @@ M: hpa@zytor.com
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
CPUSETS
|
CPUSETS
|
||||||
P: Paul Jackson
|
|
||||||
P: Paul Menage
|
P: Paul Menage
|
||||||
M: pj@sgi.com
|
|
||||||
M: menage@google.com
|
M: menage@google.com
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
W: http://www.bullopensource.org/cpuset/
|
W: http://www.bullopensource.org/cpuset/
|
||||||
@ -1359,7 +1377,7 @@ P: Digi International, Inc
|
|||||||
M: Eng.Linux@digi.com
|
M: Eng.Linux@digi.com
|
||||||
L: Eng.Linux@digi.com
|
L: Eng.Linux@digi.com
|
||||||
W: http://www.digi.com
|
W: http://www.digi.com
|
||||||
S: Orphaned
|
S: Orphan
|
||||||
|
|
||||||
DIRECTORY NOTIFICATION
|
DIRECTORY NOTIFICATION
|
||||||
P: Stephen Rothwell
|
P: Stephen Rothwell
|
||||||
@ -1641,9 +1659,10 @@ L: linux-ext4@vger.kernel.org
|
|||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
EXT4 FILE SYSTEM
|
EXT4 FILE SYSTEM
|
||||||
P: Stephen Tweedie, Andrew Morton
|
P: Theodore Ts'o
|
||||||
M: sct@redhat.com, akpm@linux-foundation.org, adilger@sun.com
|
M: tytso@mit.edu, adilger@sun.com
|
||||||
L: linux-ext4@vger.kernel.org
|
L: linux-ext4@vger.kernel.org
|
||||||
|
W: http://ext4.wiki.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
F71805F HARDWARE MONITORING DRIVER
|
F71805F HARDWARE MONITORING DRIVER
|
||||||
@ -1797,7 +1816,7 @@ FUTURE DOMAIN TMC-16x0 SCSI DRIVER (16-bit)
|
|||||||
P: Rik Faith
|
P: Rik Faith
|
||||||
M: faith@cs.unc.edu
|
M: faith@cs.unc.edu
|
||||||
L: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
S: Odd fixes (e.g., new signatures)
|
S: Odd Fixes (e.g., new signatures)
|
||||||
|
|
||||||
GDT SCSI DISK ARRAY CONTROLLER DRIVER
|
GDT SCSI DISK ARRAY CONTROLLER DRIVER
|
||||||
P: Achim Leubner
|
P: Achim Leubner
|
||||||
@ -1838,10 +1857,10 @@ S: Maintained
|
|||||||
HARDWARE MONITORING
|
HARDWARE MONITORING
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
W: http://www.lm-sensors.org/
|
W: http://www.lm-sensors.org/
|
||||||
S: Orphaned
|
S: Orphan
|
||||||
|
|
||||||
HARDWARE RANDOM NUMBER GENERATOR CORE
|
HARDWARE RANDOM NUMBER GENERATOR CORE
|
||||||
S: Orphaned
|
S: Orphan
|
||||||
|
|
||||||
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
|
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
|
||||||
P: Robert Love
|
P: Robert Love
|
||||||
@ -1984,7 +2003,7 @@ S: Maintained
|
|||||||
I2C/SMBUS STUB DRIVER
|
I2C/SMBUS STUB DRIVER
|
||||||
P: Mark M. Hoffman
|
P: Mark M. Hoffman
|
||||||
M: mhoffman@lightlink.com
|
M: mhoffman@lightlink.com
|
||||||
L: lm-sensors@lm-sensors.org
|
L: i2c@lm-sensors.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
I2C SUBSYSTEM
|
I2C SUBSYSTEM
|
||||||
@ -2321,6 +2340,12 @@ L: video4linux-list@redhat.com
|
|||||||
W: http://www.ivtvdriver.org
|
W: http://www.ivtvdriver.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
|
JME NETWORK DRIVER
|
||||||
|
P: Guo-Fu Tseng
|
||||||
|
M: cooldavid@cooldavid.org
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
|
||||||
JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
|
JOURNALLING FLASH FILE SYSTEM V2 (JFFS2)
|
||||||
P: David Woodhouse
|
P: David Woodhouse
|
||||||
M: dwmw2@infradead.org
|
M: dwmw2@infradead.org
|
||||||
@ -2706,6 +2731,7 @@ MAN-PAGES: MANUAL PAGES FOR LINUX -- Sections 2, 3, 4, 5, and 7
|
|||||||
P: Michael Kerrisk
|
P: Michael Kerrisk
|
||||||
M: mtk.manpages@gmail.com
|
M: mtk.manpages@gmail.com
|
||||||
W: http://www.kernel.org/doc/man-pages
|
W: http://www.kernel.org/doc/man-pages
|
||||||
|
L: linux-man@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
MARVELL LIBERTAS WIRELESS DRIVER
|
MARVELL LIBERTAS WIRELESS DRIVER
|
||||||
@ -2735,7 +2761,7 @@ S: Maintained
|
|||||||
MEGARAID SCSI DRIVERS
|
MEGARAID SCSI DRIVERS
|
||||||
P: Neela Syam Kolli
|
P: Neela Syam Kolli
|
||||||
M: megaraidlinux@lsi.com
|
M: megaraidlinux@lsi.com
|
||||||
S: linux-scsi@vger.kernel.org
|
L: linux-scsi@vger.kernel.org
|
||||||
W: http://megaraid.lsilogic.com
|
W: http://megaraid.lsilogic.com
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
@ -2853,7 +2879,7 @@ MULTIMEDIA CARD (MMC) ETC. OVER SPI
|
|||||||
P: David Brownell
|
P: David Brownell
|
||||||
M: dbrownell@users.sourceforge.net
|
M: dbrownell@users.sourceforge.net
|
||||||
L: linux-kernel@vger.kernel.org
|
L: linux-kernel@vger.kernel.org
|
||||||
S: Odd fixes
|
S: Odd Fixes
|
||||||
|
|
||||||
MULTISOUND SOUND DRIVER
|
MULTISOUND SOUND DRIVER
|
||||||
P: Andrew Veliath
|
P: Andrew Veliath
|
||||||
@ -3385,6 +3411,13 @@ M: linux-driver@qlogic.com
|
|||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||||
|
P: Ron Mercer
|
||||||
|
M: linux-driver@qlogic.com
|
||||||
|
M: ron.mercer@qlogic.com
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
|
||||||
QNX4 FILESYSTEM
|
QNX4 FILESYSTEM
|
||||||
P: Anders Larsen
|
P: Anders Larsen
|
||||||
M: al@alarsen.net
|
M: al@alarsen.net
|
||||||
@ -3651,7 +3684,8 @@ P: Eric Paris
|
|||||||
M: eparis@parisplace.org
|
M: eparis@parisplace.org
|
||||||
L: linux-kernel@vger.kernel.org (kernel issues)
|
L: linux-kernel@vger.kernel.org (kernel issues)
|
||||||
L: selinux@tycho.nsa.gov (subscribers-only, general discussion)
|
L: selinux@tycho.nsa.gov (subscribers-only, general discussion)
|
||||||
W: http://www.nsa.gov/selinux
|
W: http://selinuxproject.org
|
||||||
|
T: git kernel.org:pub/scm/linux/kernel/git/jmorris/security-testing-2.6.git
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
SENSABLE PHANTOM
|
SENSABLE PHANTOM
|
||||||
@ -3726,7 +3760,7 @@ S: Maintained
|
|||||||
SIS 96X I2C/SMBUS DRIVER
|
SIS 96X I2C/SMBUS DRIVER
|
||||||
P: Mark M. Hoffman
|
P: Mark M. Hoffman
|
||||||
M: mhoffman@lightlink.com
|
M: mhoffman@lightlink.com
|
||||||
L: lm-sensors@lm-sensors.org
|
L: i2c@lm-sensors.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
SIS FRAMEBUFFER DRIVER
|
SIS FRAMEBUFFER DRIVER
|
||||||
@ -3828,16 +3862,19 @@ S: Maintained
|
|||||||
SOUND
|
SOUND
|
||||||
P: Jaroslav Kysela
|
P: Jaroslav Kysela
|
||||||
M: perex@perex.cz
|
M: perex@perex.cz
|
||||||
|
P: Takashi Iwai
|
||||||
|
M: tiwai@suse.de
|
||||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT
|
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT
|
||||||
P: Liam Girdwood
|
P: Liam Girdwood
|
||||||
M: liam.girdwood@wolfsonmicro.com
|
M: lrg@slimlogic.co.uk
|
||||||
P: Mark Brown
|
P: Mark Brown
|
||||||
M: broonie@opensource.wolfsonmicro.com
|
M: broonie@opensource.wolfsonmicro.com
|
||||||
T: git opensource.wolfsonmicro.com/linux-2.6-asoc
|
T: git opensource.wolfsonmicro.com/linux-2.6-asoc
|
||||||
L: alsa-devel@alsa-project.org (subscribers-only)
|
L: alsa-devel@alsa-project.org (subscribers-only)
|
||||||
|
W: http://alsa-project.org/main/index.php/ASoC
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
SPI SUBSYSTEM
|
SPI SUBSYSTEM
|
||||||
@ -3925,7 +3962,7 @@ S: Maintained
|
|||||||
|
|
||||||
STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
|
STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
|
||||||
W: http://mosquitonet.Stanford.EDU/strip.html
|
W: http://mosquitonet.Stanford.EDU/strip.html
|
||||||
S: Unsupported ?
|
S: Orphan
|
||||||
|
|
||||||
STRADIS MPEG-2 DECODER DRIVER
|
STRADIS MPEG-2 DECODER DRIVER
|
||||||
P: Nathan Laredo
|
P: Nathan Laredo
|
||||||
@ -4333,6 +4370,12 @@ L: linux-usb@vger.kernel.org
|
|||||||
W: http://www.connecttech.com
|
W: http://www.connecttech.com
|
||||||
S: Supported
|
S: Supported
|
||||||
|
|
||||||
|
USB SMSC95XX ETHERNET DRIVER
|
||||||
|
P: Steve Glendinning
|
||||||
|
M: steve.glendinning@smsc.com
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
|
||||||
USB SN9C1xx DRIVER
|
USB SN9C1xx DRIVER
|
||||||
P: Luca Risolia
|
P: Luca Risolia
|
||||||
M: luca.risolia@studio.unibo.it
|
M: luca.risolia@studio.unibo.it
|
||||||
@ -4365,7 +4408,7 @@ S: Maintained
|
|||||||
USB VIDEO CLASS
|
USB VIDEO CLASS
|
||||||
P: Laurent Pinchart
|
P: Laurent Pinchart
|
||||||
M: laurent.pinchart@skynet.be
|
M: laurent.pinchart@skynet.be
|
||||||
L: linx-uvc-devel@berlios.de
|
L: linux-uvc-devel@lists.berlios.de
|
||||||
L: video4linux-list@redhat.com
|
L: video4linux-list@redhat.com
|
||||||
W: http://linux-uvc.berlios.de
|
W: http://linux-uvc.berlios.de
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 27
|
SUBLEVEL = 27
|
||||||
EXTRAVERSION = -rc6
|
EXTRAVERSION =
|
||||||
NAME = Rotary Wombat
|
NAME = Rotary Wombat
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -149,6 +149,9 @@ smp_callin(void)
|
|||||||
atomic_inc(&init_mm.mm_count);
|
atomic_inc(&init_mm.mm_count);
|
||||||
current->active_mm = &init_mm;
|
current->active_mm = &init_mm;
|
||||||
|
|
||||||
|
/* inform the notifiers about the new cpu */
|
||||||
|
notify_cpu_starting(cpuid);
|
||||||
|
|
||||||
/* Must have completely accurate bogos. */
|
/* Must have completely accurate bogos. */
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
|
|
||||||
|
@ -148,7 +148,6 @@ config ARCH_MAY_HAVE_PC_FDC
|
|||||||
|
|
||||||
config ZONE_DMA
|
config ZONE_DMA
|
||||||
bool
|
bool
|
||||||
default y
|
|
||||||
|
|
||||||
config GENERIC_ISA_DMA
|
config GENERIC_ISA_DMA
|
||||||
bool
|
bool
|
||||||
@ -178,6 +177,11 @@ config OPROFILE_MPCORE
|
|||||||
config OPROFILE_ARM11_CORE
|
config OPROFILE_ARM11_CORE
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config OPROFILE_ARMV7
|
||||||
|
def_bool y
|
||||||
|
depends on CPU_V7 && !SMP
|
||||||
|
bool
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
config VECTORS_BASE
|
config VECTORS_BASE
|
||||||
@ -245,6 +249,7 @@ config ARCH_CLPS7500
|
|||||||
select TIMER_ACORN
|
select TIMER_ACORN
|
||||||
select ISA
|
select ISA
|
||||||
select NO_IOPORT
|
select NO_IOPORT
|
||||||
|
select ARCH_SPARSEMEM_ENABLE
|
||||||
help
|
help
|
||||||
Support for the Cirrus Logic PS7500FE system-on-a-chip.
|
Support for the Cirrus Logic PS7500FE system-on-a-chip.
|
||||||
|
|
||||||
@ -306,6 +311,7 @@ config ARCH_IOP13XX
|
|||||||
select PLAT_IOP
|
select PLAT_IOP
|
||||||
select PCI
|
select PCI
|
||||||
select ARCH_SUPPORTS_MSI
|
select ARCH_SUPPORTS_MSI
|
||||||
|
select VMSPLIT_1G
|
||||||
help
|
help
|
||||||
Support for Intel's IOP13XX (XScale) family of processors.
|
Support for Intel's IOP13XX (XScale) family of processors.
|
||||||
|
|
||||||
@ -350,6 +356,7 @@ config ARCH_IXP4XX
|
|||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
|
select ZONE_DMA if PCI
|
||||||
help
|
help
|
||||||
Support for Intel's IXP4XX (XScale) family of processors.
|
Support for Intel's IXP4XX (XScale) family of processors.
|
||||||
|
|
||||||
@ -434,7 +441,7 @@ config ARCH_ORION5X
|
|||||||
help
|
help
|
||||||
Support for the following Marvell Orion 5x series SoCs:
|
Support for the following Marvell Orion 5x series SoCs:
|
||||||
Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
|
Orion-1 (5181), Orion-VoIP (5181L), Orion-NAS (5182),
|
||||||
Orion-2 (5281).
|
Orion-2 (5281), Orion-1-90 (6183).
|
||||||
|
|
||||||
config ARCH_PNX4008
|
config ARCH_PNX4008
|
||||||
bool "Philips Nexperia PNX4008 Mobile"
|
bool "Philips Nexperia PNX4008 Mobile"
|
||||||
@ -464,6 +471,7 @@ config ARCH_RPC
|
|||||||
select HAVE_PATA_PLATFORM
|
select HAVE_PATA_PLATFORM
|
||||||
select ISA_DMA_API
|
select ISA_DMA_API
|
||||||
select NO_IOPORT
|
select NO_IOPORT
|
||||||
|
select ARCH_SPARSEMEM_ENABLE
|
||||||
help
|
help
|
||||||
On the Acorn Risc-PC, Linux can support the internal IDE disk and
|
On the Acorn Risc-PC, Linux can support the internal IDE disk and
|
||||||
CD-ROM interface, serial and parallel port, and the floppy drive.
|
CD-ROM interface, serial and parallel port, and the floppy drive.
|
||||||
@ -471,9 +479,7 @@ config ARCH_RPC
|
|||||||
config ARCH_SA1100
|
config ARCH_SA1100
|
||||||
bool "SA1100-based"
|
bool "SA1100-based"
|
||||||
select ISA
|
select ISA
|
||||||
select ARCH_DISCONTIGMEM_ENABLE
|
|
||||||
select ARCH_SPARSEMEM_ENABLE
|
select ARCH_SPARSEMEM_ENABLE
|
||||||
select ARCH_SELECT_MEMORY_MODEL
|
|
||||||
select ARCH_MTD_XIP
|
select ARCH_MTD_XIP
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
@ -497,6 +503,7 @@ config ARCH_SHARK
|
|||||||
bool "Shark"
|
bool "Shark"
|
||||||
select ISA
|
select ISA
|
||||||
select ISA_DMA
|
select ISA_DMA
|
||||||
|
select ZONE_DMA
|
||||||
select PCI
|
select PCI
|
||||||
help
|
help
|
||||||
Support for the StrongARM based Digital DNARD machine, also known
|
Support for the StrongARM based Digital DNARD machine, also known
|
||||||
@ -504,6 +511,8 @@ config ARCH_SHARK
|
|||||||
|
|
||||||
config ARCH_LH7A40X
|
config ARCH_LH7A40X
|
||||||
bool "Sharp LH7A40X"
|
bool "Sharp LH7A40X"
|
||||||
|
select ARCH_DISCONTIGMEM_ENABLE if !LH7A40X_CONTIGMEM
|
||||||
|
select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
|
||||||
help
|
help
|
||||||
Say Y here for systems based on one of the Sharp LH7A40X
|
Say Y here for systems based on one of the Sharp LH7A40X
|
||||||
System on a Chip processors. These CPUs include an ARM922T
|
System on a Chip processors. These CPUs include an ARM922T
|
||||||
@ -515,7 +524,9 @@ config ARCH_DAVINCI
|
|||||||
select GENERIC_TIME
|
select GENERIC_TIME
|
||||||
select GENERIC_CLOCKEVENTS
|
select GENERIC_CLOCKEVENTS
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
|
select ARCH_REQUIRE_GPIOLIB
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select ZONE_DMA
|
||||||
help
|
help
|
||||||
Support for TI's DaVinci platform.
|
Support for TI's DaVinci platform.
|
||||||
|
|
||||||
@ -734,6 +745,29 @@ config SMP
|
|||||||
|
|
||||||
If you don't know what to do here, say N.
|
If you don't know what to do here, say N.
|
||||||
|
|
||||||
|
choice
|
||||||
|
prompt "Memory split"
|
||||||
|
default VMSPLIT_3G
|
||||||
|
help
|
||||||
|
Select the desired split between kernel and user memory.
|
||||||
|
|
||||||
|
If you are not absolutely sure what you are doing, leave this
|
||||||
|
option alone!
|
||||||
|
|
||||||
|
config VMSPLIT_3G
|
||||||
|
bool "3G/1G user/kernel split"
|
||||||
|
config VMSPLIT_2G
|
||||||
|
bool "2G/2G user/kernel split"
|
||||||
|
config VMSPLIT_1G
|
||||||
|
bool "1G/3G user/kernel split"
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
config PAGE_OFFSET
|
||||||
|
hex
|
||||||
|
default 0x40000000 if VMSPLIT_1G
|
||||||
|
default 0x80000000 if VMSPLIT_2G
|
||||||
|
default 0xC0000000
|
||||||
|
|
||||||
config NR_CPUS
|
config NR_CPUS
|
||||||
int "Maximum number of CPUs (2-32)"
|
int "Maximum number of CPUs (2-32)"
|
||||||
range 2 32
|
range 2 32
|
||||||
@ -815,20 +849,18 @@ config ARCH_FLATMEM_HAS_HOLES
|
|||||||
default y
|
default y
|
||||||
depends on FLATMEM
|
depends on FLATMEM
|
||||||
|
|
||||||
|
# Discontigmem is deprecated
|
||||||
config ARCH_DISCONTIGMEM_ENABLE
|
config ARCH_DISCONTIGMEM_ENABLE
|
||||||
bool
|
bool
|
||||||
default (ARCH_LH7A40X && !LH7A40X_CONTIGMEM)
|
|
||||||
help
|
|
||||||
Say Y to support efficient handling of discontiguous physical memory,
|
|
||||||
for architectures which are either NUMA (Non-Uniform Memory Access)
|
|
||||||
or have huge holes in the physical address space for other reasons.
|
|
||||||
See <file:Documentation/vm/numa> for more.
|
|
||||||
|
|
||||||
config ARCH_SPARSEMEM_ENABLE
|
config ARCH_SPARSEMEM_ENABLE
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config ARCH_SPARSEMEM_DEFAULT
|
||||||
|
def_bool ARCH_SPARSEMEM_ENABLE
|
||||||
|
|
||||||
config ARCH_SELECT_MEMORY_MODEL
|
config ARCH_SELECT_MEMORY_MODEL
|
||||||
bool
|
def_bool ARCH_DISCONTIGMEM_ENABLE && ARCH_SPARSEMEM_ENABLE
|
||||||
|
|
||||||
config NODES_SHIFT
|
config NODES_SHIFT
|
||||||
int
|
int
|
||||||
@ -845,7 +877,7 @@ config LEDS
|
|||||||
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
|
ARCH_LUBBOCK || MACH_MAINSTONE || ARCH_NETWINDER || \
|
||||||
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
|
ARCH_OMAP || ARCH_P720T || ARCH_PXA_IDP || \
|
||||||
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
|
ARCH_SA1100 || ARCH_SHARK || ARCH_VERSATILE || \
|
||||||
ARCH_AT91 || MACH_TRIZEPS4 || ARCH_DAVINCI || \
|
ARCH_AT91 || ARCH_DAVINCI || \
|
||||||
ARCH_KS8695 || MACH_RD88F5182
|
ARCH_KS8695 || MACH_RD88F5182
|
||||||
help
|
help
|
||||||
If you say Y here, the LEDs on your machine will be used
|
If you say Y here, the LEDs on your machine will be used
|
||||||
@ -1005,9 +1037,9 @@ config ATAGS_PROC
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
|
menu "CPU Power Management"
|
||||||
|
|
||||||
menu "CPU Frequency scaling"
|
if (ARCH_SA1100 || ARCH_INTEGRATOR || ARCH_OMAP || ARCH_IMX || ARCH_PXA)
|
||||||
|
|
||||||
source "drivers/cpufreq/Kconfig"
|
source "drivers/cpufreq/Kconfig"
|
||||||
|
|
||||||
@ -1047,10 +1079,12 @@ config CPU_FREQ_PXA
|
|||||||
default y
|
default y
|
||||||
select CPU_FREQ_DEFAULT_GOV_USERSPACE
|
select CPU_FREQ_DEFAULT_GOV_USERSPACE
|
||||||
|
|
||||||
endmenu
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
source "drivers/cpuidle/Kconfig"
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
|
||||||
menu "Floating point emulation"
|
menu "Floating point emulation"
|
||||||
|
|
||||||
comment "At least one emulation must be selected"
|
comment "At least one emulation must be selected"
|
||||||
@ -1202,6 +1236,8 @@ source "drivers/power/Kconfig"
|
|||||||
|
|
||||||
source "drivers/hwmon/Kconfig"
|
source "drivers/hwmon/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/thermal/Kconfig"
|
||||||
|
|
||||||
source "drivers/watchdog/Kconfig"
|
source "drivers/watchdog/Kconfig"
|
||||||
|
|
||||||
source "drivers/ssb/Kconfig"
|
source "drivers/ssb/Kconfig"
|
||||||
@ -1222,6 +1258,10 @@ source "drivers/usb/Kconfig"
|
|||||||
|
|
||||||
source "drivers/mmc/Kconfig"
|
source "drivers/mmc/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/memstick/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/accessibility/Kconfig"
|
||||||
|
|
||||||
source "drivers/leds/Kconfig"
|
source "drivers/leds/Kconfig"
|
||||||
|
|
||||||
source "drivers/rtc/Kconfig"
|
source "drivers/rtc/Kconfig"
|
||||||
@ -1230,6 +1270,8 @@ source "drivers/dma/Kconfig"
|
|||||||
|
|
||||||
source "drivers/dca/Kconfig"
|
source "drivers/dca/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/auxdisplay/Kconfig"
|
||||||
|
|
||||||
source "drivers/regulator/Kconfig"
|
source "drivers/regulator/Kconfig"
|
||||||
|
|
||||||
source "drivers/uio/Kconfig"
|
source "drivers/uio/Kconfig"
|
||||||
|
@ -47,7 +47,7 @@ comma = ,
|
|||||||
# Note that GCC does not numerically define an architecture version
|
# Note that GCC does not numerically define an architecture version
|
||||||
# macro, but instead defines a whole series of macros which makes
|
# macro, but instead defines a whole series of macros which makes
|
||||||
# testing for a specific architecture or later rather impossible.
|
# testing for a specific architecture or later rather impossible.
|
||||||
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7a,-march=armv5t -Wa$(comma)-march=armv7a)
|
arch-$(CONFIG_CPU_32v7) :=-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a)
|
||||||
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
|
arch-$(CONFIG_CPU_32v6) :=-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6)
|
||||||
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
# Only override the compiler option if ARMv6. The ARMv6K extensions are
|
||||||
# always available in ARMv7
|
# always available in ARMv7
|
||||||
|
@ -76,7 +76,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_CFLAGS := -fpic -fno-builtin
|
EXTRA_CFLAGS := -fpic -fno-builtin
|
||||||
EXTRA_AFLAGS :=
|
EXTRA_AFLAGS := -Wa,-march=all
|
||||||
|
|
||||||
# Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via
|
# Supply ZRELADDR, INITRD_PHYS and PARAMS_PHYS to the decompressor via
|
||||||
# linker symbols. We only define initrd_phys and params_phys if the
|
# linker symbols. We only define initrd_phys and params_phys if the
|
||||||
|
@ -421,6 +421,7 @@ __setup_mmu: sub r3, r4, #16384 @ Page directory size
|
|||||||
add r1, r1, #1048576
|
add r1, r1, #1048576
|
||||||
str r1, [r0]
|
str r1, [r0]
|
||||||
mov pc, lr
|
mov pc, lr
|
||||||
|
ENDPROC(__setup_mmu)
|
||||||
|
|
||||||
__armv4_mmu_cache_on:
|
__armv4_mmu_cache_on:
|
||||||
mov r12, lr
|
mov r12, lr
|
||||||
@ -801,7 +802,7 @@ loop1:
|
|||||||
add r2, r2, #4 @ add 4 (line length offset)
|
add r2, r2, #4 @ add 4 (line length offset)
|
||||||
ldr r4, =0x3ff
|
ldr r4, =0x3ff
|
||||||
ands r4, r4, r1, lsr #3 @ find maximum number on the way size
|
ands r4, r4, r1, lsr #3 @ find maximum number on the way size
|
||||||
.word 0xe16f5f14 @ clz r5, r4 - find bit position of way size increment
|
clz r5, r4 @ find bit position of way size increment
|
||||||
ldr r7, =0x7fff
|
ldr r7, =0x7fff
|
||||||
ands r7, r7, r1, lsr #13 @ extract max number of the index size
|
ands r7, r7, r1, lsr #13 @ extract max number of the index size
|
||||||
loop2:
|
loop2:
|
||||||
|
@ -12,7 +12,8 @@ config ICST307
|
|||||||
|
|
||||||
config SA1111
|
config SA1111
|
||||||
bool
|
bool
|
||||||
select DMABOUNCE
|
select DMABOUNCE if !ARCH_PXA
|
||||||
|
select ZONE_DMA if !ARCH_PXA
|
||||||
|
|
||||||
config DMABOUNCE
|
config DMABOUNCE
|
||||||
bool
|
bool
|
||||||
|
@ -154,9 +154,7 @@ alloc_safe_buffer(struct dmabounce_device_info *device_info, void *ptr,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
write_lock_irqsave(&device_info->lock, flags);
|
write_lock_irqsave(&device_info->lock, flags);
|
||||||
|
|
||||||
list_add(&buf->node, &device_info->safe_buffers);
|
list_add(&buf->node, &device_info->safe_buffers);
|
||||||
|
|
||||||
write_unlock_irqrestore(&device_info->lock, flags);
|
write_unlock_irqrestore(&device_info->lock, flags);
|
||||||
|
|
||||||
return buf;
|
return buf;
|
||||||
@ -205,8 +203,22 @@ free_safe_buffer(struct dmabounce_device_info *device_info, struct safe_buffer *
|
|||||||
|
|
||||||
/* ************************************************** */
|
/* ************************************************** */
|
||||||
|
|
||||||
static inline dma_addr_t
|
static struct safe_buffer *find_safe_buffer_dev(struct device *dev,
|
||||||
map_single(struct device *dev, void *ptr, size_t size,
|
dma_addr_t dma_addr, const char *where)
|
||||||
|
{
|
||||||
|
if (!dev || !dev->archdata.dmabounce)
|
||||||
|
return NULL;
|
||||||
|
if (dma_mapping_error(dev, dma_addr)) {
|
||||||
|
if (dev)
|
||||||
|
dev_err(dev, "Trying to %s invalid mapping\n", where);
|
||||||
|
else
|
||||||
|
pr_err("unknown device: Trying to %s invalid mapping\n", where);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
return find_safe_buffer(dev->archdata.dmabounce, dma_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline dma_addr_t map_single(struct device *dev, void *ptr, size_t size,
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
||||||
@ -270,33 +282,21 @@ map_single(struct device *dev, void *ptr, size_t size,
|
|||||||
return dma_addr;
|
return dma_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
|
||||||
unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
size_t size, enum dma_data_direction dir)
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
{
|
||||||
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
struct safe_buffer *buf = find_safe_buffer_dev(dev, dma_addr, "unmap");
|
||||||
struct safe_buffer *buf = NULL;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Trying to unmap an invalid mapping
|
|
||||||
*/
|
|
||||||
if (dma_mapping_error(dev, dma_addr)) {
|
|
||||||
dev_err(dev, "Trying to unmap invalid mapping\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (device_info)
|
|
||||||
buf = find_safe_buffer(device_info, dma_addr);
|
|
||||||
|
|
||||||
if (buf) {
|
if (buf) {
|
||||||
BUG_ON(buf->size != size);
|
BUG_ON(buf->size != size);
|
||||||
|
BUG_ON(buf->direction != dir);
|
||||||
|
|
||||||
dev_dbg(dev,
|
dev_dbg(dev,
|
||||||
"%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
|
"%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
|
||||||
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
|
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
|
||||||
buf->safe, buf->safe_dma_addr);
|
buf->safe, buf->safe_dma_addr);
|
||||||
|
|
||||||
DO_STATS ( device_info->bounce_count++ );
|
DO_STATS(dev->archdata.dmabounce->bounce_count++);
|
||||||
|
|
||||||
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
|
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
|
||||||
void *ptr = buf->ptr;
|
void *ptr = buf->ptr;
|
||||||
@ -317,74 +317,7 @@ unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
|||||||
dmac_clean_range(ptr, ptr + size);
|
dmac_clean_range(ptr, ptr + size);
|
||||||
outer_clean_range(__pa(ptr), __pa(ptr) + size);
|
outer_clean_range(__pa(ptr), __pa(ptr) + size);
|
||||||
}
|
}
|
||||||
free_safe_buffer(device_info, buf);
|
free_safe_buffer(dev->archdata.dmabounce, buf);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int sync_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
|
||||||
struct safe_buffer *buf = NULL;
|
|
||||||
|
|
||||||
if (device_info)
|
|
||||||
buf = find_safe_buffer(device_info, dma_addr);
|
|
||||||
|
|
||||||
if (buf) {
|
|
||||||
/*
|
|
||||||
* Both of these checks from original code need to be
|
|
||||||
* commented out b/c some drivers rely on the following:
|
|
||||||
*
|
|
||||||
* 1) Drivers may map a large chunk of memory into DMA space
|
|
||||||
* but only sync a small portion of it. Good example is
|
|
||||||
* allocating a large buffer, mapping it, and then
|
|
||||||
* breaking it up into small descriptors. No point
|
|
||||||
* in syncing the whole buffer if you only have to
|
|
||||||
* touch one descriptor.
|
|
||||||
*
|
|
||||||
* 2) Buffers that are mapped as DMA_BIDIRECTIONAL are
|
|
||||||
* usually only synced in one dir at a time.
|
|
||||||
*
|
|
||||||
* See drivers/net/eepro100.c for examples of both cases.
|
|
||||||
*
|
|
||||||
* -ds
|
|
||||||
*
|
|
||||||
* BUG_ON(buf->size != size);
|
|
||||||
* BUG_ON(buf->direction != dir);
|
|
||||||
*/
|
|
||||||
|
|
||||||
dev_dbg(dev,
|
|
||||||
"%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
|
|
||||||
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
|
|
||||||
buf->safe, buf->safe_dma_addr);
|
|
||||||
|
|
||||||
DO_STATS ( device_info->bounce_count++ );
|
|
||||||
|
|
||||||
switch (dir) {
|
|
||||||
case DMA_FROM_DEVICE:
|
|
||||||
dev_dbg(dev,
|
|
||||||
"%s: copy back safe %p to unsafe %p size %d\n",
|
|
||||||
__func__, buf->safe, buf->ptr, size);
|
|
||||||
memcpy(buf->ptr, buf->safe, size);
|
|
||||||
break;
|
|
||||||
case DMA_TO_DEVICE:
|
|
||||||
dev_dbg(dev,
|
|
||||||
"%s: copy out unsafe %p to safe %p, size %d\n",
|
|
||||||
__func__,buf->ptr, buf->safe, size);
|
|
||||||
memcpy(buf->safe, buf->ptr, size);
|
|
||||||
break;
|
|
||||||
case DMA_BIDIRECTIONAL:
|
|
||||||
BUG(); /* is this allowed? what does it mean? */
|
|
||||||
default:
|
|
||||||
BUG();
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* No need to sync the safe buffer - it was allocated
|
|
||||||
* via the coherent allocators.
|
|
||||||
*/
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,21 +329,29 @@ static int sync_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
|||||||
* substitute the safe buffer for the unsafe one.
|
* substitute the safe buffer for the unsafe one.
|
||||||
* (basically move the buffer from an unsafe area to a safe one)
|
* (basically move the buffer from an unsafe area to a safe one)
|
||||||
*/
|
*/
|
||||||
dma_addr_t
|
dma_addr_t dma_map_single(struct device *dev, void *ptr, size_t size,
|
||||||
dma_map_single(struct device *dev, void *ptr, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dma_addr_t dma_addr;
|
|
||||||
|
|
||||||
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
||||||
__func__, ptr, size, dir);
|
__func__, ptr, size, dir);
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
dma_addr = map_single(dev, ptr, size, dir);
|
return map_single(dev, ptr, size, dir);
|
||||||
|
|
||||||
return dma_addr;
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dma_map_single);
|
||||||
|
|
||||||
|
dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
||||||
|
unsigned long offset, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
dev_dbg(dev, "%s(page=%p,off=%#lx,size=%zx,dir=%x)\n",
|
||||||
|
__func__, page, offset, size, dir);
|
||||||
|
|
||||||
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
|
return map_single(dev, page_address(page) + offset, size, dir);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(dma_map_page);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* see if a mapped address was really a "safe" buffer and if so, copy
|
* see if a mapped address was really a "safe" buffer and if so, copy
|
||||||
@ -419,126 +360,76 @@ dma_map_single(struct device *dev, void *ptr, size_t size,
|
|||||||
* should be)
|
* should be)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void
|
void dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
||||||
dma_unmap_single(struct device *dev, dma_addr_t dma_addr, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
enum dma_data_direction dir)
|
||||||
{
|
{
|
||||||
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(ptr=%p,size=%d,dir=%x)\n",
|
||||||
__func__, (void *) dma_addr, size, dir);
|
__func__, (void *) dma_addr, size, dir);
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
|
||||||
|
|
||||||
unmap_single(dev, dma_addr, size, dir);
|
unmap_single(dev, dma_addr, size, dir);
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dma_unmap_single);
|
||||||
|
|
||||||
int
|
int dmabounce_sync_for_cpu(struct device *dev, dma_addr_t addr,
|
||||||
dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
unsigned long off, size_t sz, enum dma_data_direction dir)
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
{
|
||||||
int i;
|
struct safe_buffer *buf;
|
||||||
|
|
||||||
dev_dbg(dev, "%s(sg=%p,nents=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(dma=%#x,off=%#lx,sz=%zx,dir=%x)\n",
|
||||||
__func__, sg, nents, dir);
|
__func__, addr, off, sz, dir);
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
buf = find_safe_buffer_dev(dev, addr, __func__);
|
||||||
|
if (!buf)
|
||||||
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
BUG_ON(buf->direction != dir);
|
||||||
struct page *page = sg_page(sg);
|
|
||||||
unsigned int offset = sg->offset;
|
|
||||||
unsigned int length = sg->length;
|
|
||||||
void *ptr = page_address(page) + offset;
|
|
||||||
|
|
||||||
sg->dma_address =
|
dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
|
||||||
map_single(dev, ptr, length, dir);
|
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
|
||||||
|
buf->safe, buf->safe_dma_addr);
|
||||||
|
|
||||||
|
DO_STATS(dev->archdata.dmabounce->bounce_count++);
|
||||||
|
|
||||||
|
if (dir == DMA_FROM_DEVICE || dir == DMA_BIDIRECTIONAL) {
|
||||||
|
dev_dbg(dev, "%s: copy back safe %p to unsafe %p size %d\n",
|
||||||
|
__func__, buf->safe + off, buf->ptr + off, sz);
|
||||||
|
memcpy(buf->ptr + off, buf->safe + off, sz);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
return nents;
|
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dmabounce_sync_for_cpu);
|
||||||
|
|
||||||
void
|
int dmabounce_sync_for_device(struct device *dev, dma_addr_t addr,
|
||||||
dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
|
unsigned long off, size_t sz, enum dma_data_direction dir)
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
{
|
||||||
int i;
|
struct safe_buffer *buf;
|
||||||
|
|
||||||
dev_dbg(dev, "%s(sg=%p,nents=%d,dir=%x)\n",
|
dev_dbg(dev, "%s(dma=%#x,off=%#lx,sz=%zx,dir=%x)\n",
|
||||||
__func__, sg, nents, dir);
|
__func__, addr, off, sz, dir);
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
buf = find_safe_buffer_dev(dev, addr, __func__);
|
||||||
|
if (!buf)
|
||||||
|
return 1;
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
BUG_ON(buf->direction != dir);
|
||||||
dma_addr_t dma_addr = sg->dma_address;
|
|
||||||
unsigned int length = sg->length;
|
|
||||||
|
|
||||||
unmap_single(dev, dma_addr, length, dir);
|
dev_dbg(dev, "%s: unsafe buffer %p (dma=%#x) mapped to %p (dma=%#x)\n",
|
||||||
|
__func__, buf->ptr, virt_to_dma(dev, buf->ptr),
|
||||||
|
buf->safe, buf->safe_dma_addr);
|
||||||
|
|
||||||
|
DO_STATS(dev->archdata.dmabounce->bounce_count++);
|
||||||
|
|
||||||
|
if (dir == DMA_TO_DEVICE || dir == DMA_BIDIRECTIONAL) {
|
||||||
|
dev_dbg(dev, "%s: copy out unsafe %p to safe %p, size %d\n",
|
||||||
|
__func__,buf->ptr + off, buf->safe + off, sz);
|
||||||
|
memcpy(buf->safe + off, buf->ptr + off, sz);
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dmabounce_sync_for_device);
|
||||||
|
|
||||||
void dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t dma_addr,
|
static int dmabounce_init_pool(struct dmabounce_pool *pool, struct device *dev,
|
||||||
unsigned long offset, size_t size,
|
const char *name, unsigned long size)
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n",
|
|
||||||
__func__, dma_addr, offset, size, dir);
|
|
||||||
|
|
||||||
if (sync_single(dev, dma_addr, offset + size, dir))
|
|
||||||
dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(dma_sync_single_range_for_cpu);
|
|
||||||
|
|
||||||
void dma_sync_single_range_for_device(struct device *dev, dma_addr_t dma_addr,
|
|
||||||
unsigned long offset, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
dev_dbg(dev, "%s(dma=%#x,off=%#lx,size=%zx,dir=%x)\n",
|
|
||||||
__func__, dma_addr, offset, size, dir);
|
|
||||||
|
|
||||||
if (sync_single(dev, dma_addr, offset + size, dir))
|
|
||||||
dma_cache_maint(dma_to_virt(dev, dma_addr) + offset, size, dir);
|
|
||||||
}
|
|
||||||
EXPORT_SYMBOL(dma_sync_single_range_for_device);
|
|
||||||
|
|
||||||
void
|
|
||||||
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
dev_dbg(dev, "%s(sg=%p,nents=%d,dir=%x)\n",
|
|
||||||
__func__, sg, nents, dir);
|
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
|
||||||
dma_addr_t dma_addr = sg->dma_address;
|
|
||||||
unsigned int length = sg->length;
|
|
||||||
|
|
||||||
sync_single(dev, dma_addr, length, dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
dev_dbg(dev, "%s(sg=%p,nents=%d,dir=%x)\n",
|
|
||||||
__func__, sg, nents, dir);
|
|
||||||
|
|
||||||
BUG_ON(dir == DMA_NONE);
|
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
|
||||||
dma_addr_t dma_addr = sg->dma_address;
|
|
||||||
unsigned int length = sg->length;
|
|
||||||
|
|
||||||
sync_single(dev, dma_addr, length, dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
dmabounce_init_pool(struct dmabounce_pool *pool, struct device *dev, const char *name,
|
|
||||||
unsigned long size)
|
|
||||||
{
|
{
|
||||||
pool->size = size;
|
pool->size = size;
|
||||||
DO_STATS(pool->allocs = 0);
|
DO_STATS(pool->allocs = 0);
|
||||||
@ -549,8 +440,7 @@ dmabounce_init_pool(struct dmabounce_pool *pool, struct device *dev, const char
|
|||||||
return pool->pool ? 0 : -ENOMEM;
|
return pool->pool ? 0 : -ENOMEM;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size,
|
||||||
dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size,
|
|
||||||
unsigned long large_buffer_size)
|
unsigned long large_buffer_size)
|
||||||
{
|
{
|
||||||
struct dmabounce_device_info *device_info;
|
struct dmabounce_device_info *device_info;
|
||||||
@ -607,9 +497,9 @@ dmabounce_register_dev(struct device *dev, unsigned long small_buffer_size,
|
|||||||
kfree(device_info);
|
kfree(device_info);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
EXPORT_SYMBOL(dmabounce_register_dev);
|
||||||
|
|
||||||
void
|
void dmabounce_unregister_dev(struct device *dev)
|
||||||
dmabounce_unregister_dev(struct device *dev)
|
|
||||||
{
|
{
|
||||||
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
struct dmabounce_device_info *device_info = dev->archdata.dmabounce;
|
||||||
|
|
||||||
@ -642,15 +532,6 @@ dmabounce_unregister_dev(struct device *dev)
|
|||||||
|
|
||||||
dev_info(dev, "dmabounce: device unregistered\n");
|
dev_info(dev, "dmabounce: device unregistered\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
EXPORT_SYMBOL(dma_map_single);
|
|
||||||
EXPORT_SYMBOL(dma_unmap_single);
|
|
||||||
EXPORT_SYMBOL(dma_map_sg);
|
|
||||||
EXPORT_SYMBOL(dma_unmap_sg);
|
|
||||||
EXPORT_SYMBOL(dma_sync_sg_for_cpu);
|
|
||||||
EXPORT_SYMBOL(dma_sync_sg_for_device);
|
|
||||||
EXPORT_SYMBOL(dmabounce_register_dev);
|
|
||||||
EXPORT_SYMBOL(dmabounce_unregister_dev);
|
EXPORT_SYMBOL(dmabounce_unregister_dev);
|
||||||
|
|
||||||
MODULE_AUTHOR("Christopher Hoover <ch@hpl.hp.com>, Deepak Saxena <dsaxena@plexity.net>");
|
MODULE_AUTHOR("Christopher Hoover <ch@hpl.hp.com>, Deepak Saxena <dsaxena@plexity.net>");
|
||||||
|
@ -27,9 +27,9 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/smp.h>
|
#include <linux/smp.h>
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
#include <asm/hardware/gic.h>
|
#include <asm/hardware/gic.h>
|
||||||
|
|
||||||
|
@ -66,14 +66,6 @@ static void it8152_unmask_irq(unsigned int irq)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void it8152_irq(int irq)
|
|
||||||
{
|
|
||||||
struct irq_desc *desc;
|
|
||||||
|
|
||||||
desc = irq_desc + irq;
|
|
||||||
desc_handle_irq(irq, desc);
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct irq_chip it8152_irq_chip = {
|
static struct irq_chip it8152_irq_chip = {
|
||||||
.name = "it8152",
|
.name = "it8152",
|
||||||
.ack = it8152_mask_irq,
|
.ack = it8152_mask_irq,
|
||||||
@ -128,21 +120,21 @@ void it8152_irq_demux(unsigned int irq, struct irq_desc *desc)
|
|||||||
bits_pd &= ((1 << IT8152_PD_IRQ_COUNT) - 1);
|
bits_pd &= ((1 << IT8152_PD_IRQ_COUNT) - 1);
|
||||||
while (bits_pd) {
|
while (bits_pd) {
|
||||||
i = __ffs(bits_pd);
|
i = __ffs(bits_pd);
|
||||||
it8152_irq(IT8152_PD_IRQ(i));
|
generic_handle_irq(IT8152_PD_IRQ(i));
|
||||||
bits_pd &= ~(1 << i);
|
bits_pd &= ~(1 << i);
|
||||||
}
|
}
|
||||||
|
|
||||||
bits_lp &= ((1 << IT8152_LP_IRQ_COUNT) - 1);
|
bits_lp &= ((1 << IT8152_LP_IRQ_COUNT) - 1);
|
||||||
while (bits_lp) {
|
while (bits_lp) {
|
||||||
i = __ffs(bits_lp);
|
i = __ffs(bits_lp);
|
||||||
it8152_irq(IT8152_LP_IRQ(i));
|
generic_handle_irq(IT8152_LP_IRQ(i));
|
||||||
bits_lp &= ~(1 << i);
|
bits_lp &= ~(1 << i);
|
||||||
}
|
}
|
||||||
|
|
||||||
bits_ld &= ((1 << IT8152_LD_IRQ_COUNT) - 1);
|
bits_ld &= ((1 << IT8152_LD_IRQ_COUNT) - 1);
|
||||||
while (bits_ld) {
|
while (bits_ld) {
|
||||||
i = __ffs(bits_ld);
|
i = __ffs(bits_ld);
|
||||||
it8152_irq(IT8152_LD_IRQ(i));
|
generic_handle_irq(IT8152_LD_IRQ(i));
|
||||||
bits_ld &= ~(1 << i);
|
bits_ld &= ~(1 << i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,9 +24,9 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
|
||||||
@ -169,7 +169,6 @@ static struct locomo_dev_info locomo_devices[] = {
|
|||||||
static void locomo_handler(unsigned int irq, struct irq_desc *desc)
|
static void locomo_handler(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
int req, i;
|
int req, i;
|
||||||
struct irq_desc *d;
|
|
||||||
void __iomem *mapbase = get_irq_chip_data(irq);
|
void __iomem *mapbase = get_irq_chip_data(irq);
|
||||||
|
|
||||||
/* Acknowledge the parent IRQ */
|
/* Acknowledge the parent IRQ */
|
||||||
@ -181,10 +180,9 @@ static void locomo_handler(unsigned int irq, struct irq_desc *desc)
|
|||||||
if (req) {
|
if (req) {
|
||||||
/* generate the next interrupt(s) */
|
/* generate the next interrupt(s) */
|
||||||
irq = LOCOMO_IRQ_START;
|
irq = LOCOMO_IRQ_START;
|
||||||
d = irq_desc + irq;
|
for (i = 0; i <= 3; i++, irq++) {
|
||||||
for (i = 0; i <= 3; i++, d++, irq++) {
|
|
||||||
if (req & (0x0100 << i)) {
|
if (req & (0x0100 << i)) {
|
||||||
desc_handle_irq(irq, d);
|
generic_handle_irq(irq);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -222,12 +220,10 @@ static struct irq_chip locomo_chip = {
|
|||||||
|
|
||||||
static void locomo_key_handler(unsigned int irq, struct irq_desc *desc)
|
static void locomo_key_handler(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
struct irq_desc *d;
|
|
||||||
void __iomem *mapbase = get_irq_chip_data(irq);
|
void __iomem *mapbase = get_irq_chip_data(irq);
|
||||||
|
|
||||||
if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) {
|
if (locomo_readl(mapbase + LOCOMO_KEYBOARD + LOCOMO_KIC) & 0x0001) {
|
||||||
d = irq_desc + LOCOMO_IRQ_KEY_START;
|
generic_handle_irq(LOCOMO_IRQ_KEY_START);
|
||||||
desc_handle_irq(LOCOMO_IRQ_KEY_START, d);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -268,7 +264,6 @@ static struct irq_chip locomo_key_chip = {
|
|||||||
static void locomo_gpio_handler(unsigned int irq, struct irq_desc *desc)
|
static void locomo_gpio_handler(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
int req, i;
|
int req, i;
|
||||||
struct irq_desc *d;
|
|
||||||
void __iomem *mapbase = get_irq_chip_data(irq);
|
void __iomem *mapbase = get_irq_chip_data(irq);
|
||||||
|
|
||||||
req = locomo_readl(mapbase + LOCOMO_GIR) &
|
req = locomo_readl(mapbase + LOCOMO_GIR) &
|
||||||
@ -277,10 +272,9 @@ static void locomo_gpio_handler(unsigned int irq, struct irq_desc *desc)
|
|||||||
|
|
||||||
if (req) {
|
if (req) {
|
||||||
irq = LOCOMO_IRQ_GPIO_START;
|
irq = LOCOMO_IRQ_GPIO_START;
|
||||||
d = irq_desc + LOCOMO_IRQ_GPIO_START;
|
for (i = 0; i <= 15; i++, irq++) {
|
||||||
for (i = 0; i <= 15; i++, irq++, d++) {
|
|
||||||
if (req & (0x0001 << i)) {
|
if (req & (0x0001 << i)) {
|
||||||
desc_handle_irq(irq, d);
|
generic_handle_irq(irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -361,12 +355,10 @@ static struct irq_chip locomo_gpio_chip = {
|
|||||||
|
|
||||||
static void locomo_lt_handler(unsigned int irq, struct irq_desc *desc)
|
static void locomo_lt_handler(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
struct irq_desc *d;
|
|
||||||
void __iomem *mapbase = get_irq_chip_data(irq);
|
void __iomem *mapbase = get_irq_chip_data(irq);
|
||||||
|
|
||||||
if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) {
|
if (locomo_readl(mapbase + LOCOMO_LTINT) & 0x0001) {
|
||||||
d = irq_desc + LOCOMO_IRQ_LT_START;
|
generic_handle_irq(LOCOMO_IRQ_LT_START);
|
||||||
desc_handle_irq(LOCOMO_IRQ_LT_START, d);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -407,17 +399,15 @@ static struct irq_chip locomo_lt_chip = {
|
|||||||
static void locomo_spi_handler(unsigned int irq, struct irq_desc *desc)
|
static void locomo_spi_handler(unsigned int irq, struct irq_desc *desc)
|
||||||
{
|
{
|
||||||
int req, i;
|
int req, i;
|
||||||
struct irq_desc *d;
|
|
||||||
void __iomem *mapbase = get_irq_chip_data(irq);
|
void __iomem *mapbase = get_irq_chip_data(irq);
|
||||||
|
|
||||||
req = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIR) & 0x000F;
|
req = locomo_readl(mapbase + LOCOMO_SPI + LOCOMO_SPIIR) & 0x000F;
|
||||||
if (req) {
|
if (req) {
|
||||||
irq = LOCOMO_IRQ_SPI_START;
|
irq = LOCOMO_IRQ_SPI_START;
|
||||||
d = irq_desc + irq;
|
|
||||||
|
|
||||||
for (i = 0; i <= 3; i++, irq++, d++) {
|
for (i = 0; i <= 3; i++, irq++) {
|
||||||
if (req & (0x0001 << i)) {
|
if (req & (0x0001 << i)) {
|
||||||
desc_handle_irq(irq, d);
|
generic_handle_irq(irq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,10 @@
|
|||||||
#include <linux/spinlock.h>
|
#include <linux/spinlock.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/clk.h>
|
#include <linux/clk.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <asm/io.h>
|
#include <linux/io.h>
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
#include <asm/hardware/scoop.h>
|
#include <asm/hardware/scoop.h>
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/module.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <asm/mach/sharpsl_param.h>
|
#include <asm/mach/sharpsl_param.h>
|
||||||
|
|
||||||
@ -36,6 +37,7 @@
|
|||||||
#define PHAD_MAGIC MAGIC_CHG('P','H','A','D')
|
#define PHAD_MAGIC MAGIC_CHG('P','H','A','D')
|
||||||
|
|
||||||
struct sharpsl_param_info sharpsl_param;
|
struct sharpsl_param_info sharpsl_param;
|
||||||
|
EXPORT_SYMBOL(sharpsl_param);
|
||||||
|
|
||||||
void sharpsl_save_param(void)
|
void sharpsl_save_param(void)
|
||||||
{
|
{
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/hardware/ioc.h>
|
#include <asm/hardware/ioc.h>
|
||||||
|
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
|
@ -16,9 +16,9 @@
|
|||||||
#include <linux/slab.h>
|
#include <linux/slab.h>
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
|
#include <linux/io.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/hardware/uengine.h>
|
#include <asm/hardware/uengine.h>
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_IXP2000)
|
#if defined(CONFIG_ARCH_IXP2000)
|
||||||
#define IXP_UENGINE_CSR_VIRT_BASE IXP2000_UENGINE_CSR_VIRT_BASE
|
#define IXP_UENGINE_CSR_VIRT_BASE IXP2000_UENGINE_CSR_VIRT_BASE
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
#include <asm/mach/pci.h>
|
#include <asm/mach/pci.h>
|
||||||
|
@ -20,8 +20,8 @@
|
|||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
#include <asm/hardware/vic.h>
|
#include <asm/hardware/vic.h>
|
||||||
|
|
||||||
|
1259
arch/arm/configs/afeb9260_defconfig
Normal file
1259
arch/arm/configs/afeb9260_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -496,6 +496,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||||||
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
||||||
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
||||||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||||
|
CONFIG_TOUCHSCREEN_ATMEL_TSADCC=y
|
||||||
# CONFIG_TOUCHSCREEN_UCB1400 is not set
|
# CONFIG_TOUCHSCREEN_UCB1400 is not set
|
||||||
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
|
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
|
||||||
# CONFIG_INPUT_MISC is not set
|
# CONFIG_INPUT_MISC is not set
|
||||||
|
1466
arch/arm/configs/cm_x300_defconfig
Normal file
1466
arch/arm/configs/cm_x300_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -176,14 +176,17 @@ CONFIG_MACH_KUROBOX_PRO=y
|
|||||||
CONFIG_MACH_DNS323=y
|
CONFIG_MACH_DNS323=y
|
||||||
CONFIG_MACH_TS209=y
|
CONFIG_MACH_TS209=y
|
||||||
CONFIG_MACH_LINKSTATION_PRO=y
|
CONFIG_MACH_LINKSTATION_PRO=y
|
||||||
|
CONFIG_MACH_LINKSTATION_MINI=y
|
||||||
CONFIG_MACH_TS409=y
|
CONFIG_MACH_TS409=y
|
||||||
CONFIG_MACH_WRT350N_V2=y
|
CONFIG_MACH_WRT350N_V2=y
|
||||||
CONFIG_MACH_TS78XX=y
|
CONFIG_MACH_TS78XX=y
|
||||||
CONFIG_MACH_MV2120=y
|
CONFIG_MACH_MV2120=y
|
||||||
|
CONFIG_MACH_EDMINI_V2=y
|
||||||
CONFIG_MACH_MSS2=y
|
CONFIG_MACH_MSS2=y
|
||||||
CONFIG_MACH_WNR854T=y
|
CONFIG_MACH_WNR854T=y
|
||||||
CONFIG_MACH_RD88F5181L_GE=y
|
CONFIG_MACH_RD88F5181L_GE=y
|
||||||
CONFIG_MACH_RD88F5181L_FXO=y
|
CONFIG_MACH_RD88F5181L_FXO=y
|
||||||
|
CONFIG_MACH_RD88F6183AP_GE=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# Boot options
|
# Boot options
|
||||||
|
951
arch/arm/configs/palmz72_defconfig
Normal file
951
arch/arm/configs/palmz72_defconfig
Normal file
@ -0,0 +1,951 @@
|
|||||||
|
#
|
||||||
|
# Automatically generated make config: don't edit
|
||||||
|
# Linux kernel version: 2.6.27-rc4
|
||||||
|
# Sun Aug 24 02:29:27 2008
|
||||||
|
#
|
||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_HAVE_PWM=y
|
||||||
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
|
CONFIG_GENERIC_GPIO=y
|
||||||
|
CONFIG_GENERIC_TIME=y
|
||||||
|
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||||
|
CONFIG_MMU=y
|
||||||
|
# CONFIG_NO_IOPORT is not set
|
||||||
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
|
CONFIG_STACKTRACE_SUPPORT=y
|
||||||
|
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||||
|
CONFIG_LOCKDEP_SUPPORT=y
|
||||||
|
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||||
|
CONFIG_HARDIRQS_SW_RESEND=y
|
||||||
|
CONFIG_GENERIC_IRQ_PROBE=y
|
||||||
|
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||||
|
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
|
||||||
|
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||||
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
|
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||||
|
CONFIG_ZONE_DMA=y
|
||||||
|
CONFIG_ARCH_MTD_XIP=y
|
||||||
|
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||||
|
CONFIG_VECTORS_BASE=0xffff0000
|
||||||
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
|
#
|
||||||
|
# General setup
|
||||||
|
#
|
||||||
|
CONFIG_EXPERIMENTAL=y
|
||||||
|
CONFIG_BROKEN_ON_SMP=y
|
||||||
|
CONFIG_LOCK_KERNEL=y
|
||||||
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
|
CONFIG_LOCALVERSION=""
|
||||||
|
# CONFIG_LOCALVERSION_AUTO is not set
|
||||||
|
CONFIG_SWAP=y
|
||||||
|
CONFIG_SYSVIPC=y
|
||||||
|
CONFIG_SYSVIPC_SYSCTL=y
|
||||||
|
# CONFIG_POSIX_MQUEUE is not set
|
||||||
|
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||||
|
# CONFIG_TASKSTATS is not set
|
||||||
|
# CONFIG_AUDIT is not set
|
||||||
|
# CONFIG_IKCONFIG is not set
|
||||||
|
CONFIG_LOG_BUF_SHIFT=14
|
||||||
|
# CONFIG_CGROUPS is not set
|
||||||
|
# CONFIG_GROUP_SCHED is not set
|
||||||
|
CONFIG_SYSFS_DEPRECATED=y
|
||||||
|
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||||
|
# CONFIG_RELAY is not set
|
||||||
|
CONFIG_NAMESPACES=y
|
||||||
|
# CONFIG_UTS_NS is not set
|
||||||
|
# CONFIG_IPC_NS is not set
|
||||||
|
# CONFIG_USER_NS is not set
|
||||||
|
# CONFIG_PID_NS is not set
|
||||||
|
CONFIG_BLK_DEV_INITRD=y
|
||||||
|
CONFIG_INITRAMFS_SOURCE=""
|
||||||
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
|
CONFIG_SYSCTL=y
|
||||||
|
# CONFIG_EMBEDDED is not set
|
||||||
|
CONFIG_UID16=y
|
||||||
|
CONFIG_SYSCTL_SYSCALL=y
|
||||||
|
CONFIG_KALLSYMS=y
|
||||||
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
|
CONFIG_HOTPLUG=y
|
||||||
|
CONFIG_PRINTK=y
|
||||||
|
CONFIG_BUG=y
|
||||||
|
CONFIG_ELF_CORE=y
|
||||||
|
CONFIG_COMPAT_BRK=y
|
||||||
|
CONFIG_BASE_FULL=y
|
||||||
|
CONFIG_FUTEX=y
|
||||||
|
CONFIG_ANON_INODES=y
|
||||||
|
CONFIG_EPOLL=y
|
||||||
|
CONFIG_SIGNALFD=y
|
||||||
|
CONFIG_TIMERFD=y
|
||||||
|
CONFIG_EVENTFD=y
|
||||||
|
CONFIG_SHMEM=y
|
||||||
|
CONFIG_VM_EVENT_COUNTERS=y
|
||||||
|
CONFIG_SLAB=y
|
||||||
|
# CONFIG_SLUB is not set
|
||||||
|
# CONFIG_SLOB is not set
|
||||||
|
# CONFIG_PROFILING is not set
|
||||||
|
# CONFIG_MARKERS is not set
|
||||||
|
CONFIG_HAVE_OPROFILE=y
|
||||||
|
# CONFIG_KPROBES is not set
|
||||||
|
# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
|
||||||
|
# CONFIG_HAVE_IOREMAP_PROT is not set
|
||||||
|
CONFIG_HAVE_KPROBES=y
|
||||||
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
|
# CONFIG_HAVE_ARCH_TRACEHOOK is not set
|
||||||
|
# CONFIG_HAVE_DMA_ATTRS is not set
|
||||||
|
# CONFIG_USE_GENERIC_SMP_HELPERS is not set
|
||||||
|
CONFIG_HAVE_CLK=y
|
||||||
|
CONFIG_PROC_PAGE_MONITOR=y
|
||||||
|
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||||
|
CONFIG_SLABINFO=y
|
||||||
|
CONFIG_RT_MUTEXES=y
|
||||||
|
# CONFIG_TINY_SHMEM is not set
|
||||||
|
CONFIG_BASE_SMALL=0
|
||||||
|
CONFIG_MODULES=y
|
||||||
|
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||||
|
CONFIG_MODULE_UNLOAD=y
|
||||||
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
|
# CONFIG_MODVERSIONS is not set
|
||||||
|
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||||
|
CONFIG_KMOD=y
|
||||||
|
CONFIG_BLOCK=y
|
||||||
|
# CONFIG_LBD is not set
|
||||||
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
|
# CONFIG_LSF is not set
|
||||||
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
# CONFIG_BLK_DEV_INTEGRITY 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"
|
||||||
|
CONFIG_CLASSIC_RCU=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# System Type
|
||||||
|
#
|
||||||
|
# CONFIG_ARCH_AAEC2000 is not set
|
||||||
|
# CONFIG_ARCH_INTEGRATOR is not set
|
||||||
|
# CONFIG_ARCH_REALVIEW is not set
|
||||||
|
# CONFIG_ARCH_VERSATILE is not set
|
||||||
|
# CONFIG_ARCH_AT91 is not set
|
||||||
|
# CONFIG_ARCH_CLPS7500 is not set
|
||||||
|
# CONFIG_ARCH_CLPS711X is not set
|
||||||
|
# CONFIG_ARCH_EBSA110 is not set
|
||||||
|
# CONFIG_ARCH_EP93XX is not set
|
||||||
|
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||||
|
# CONFIG_ARCH_NETX is not set
|
||||||
|
# CONFIG_ARCH_H720X is not set
|
||||||
|
# CONFIG_ARCH_IMX is not set
|
||||||
|
# CONFIG_ARCH_IOP13XX is not set
|
||||||
|
# CONFIG_ARCH_IOP32X is not set
|
||||||
|
# CONFIG_ARCH_IOP33X is not set
|
||||||
|
# CONFIG_ARCH_IXP23XX is not set
|
||||||
|
# CONFIG_ARCH_IXP2000 is not set
|
||||||
|
# CONFIG_ARCH_IXP4XX is not set
|
||||||
|
# CONFIG_ARCH_L7200 is not set
|
||||||
|
# CONFIG_ARCH_KIRKWOOD is not set
|
||||||
|
# CONFIG_ARCH_KS8695 is not set
|
||||||
|
# CONFIG_ARCH_NS9XXX is not set
|
||||||
|
# CONFIG_ARCH_LOKI is not set
|
||||||
|
# CONFIG_ARCH_MV78XX0 is not set
|
||||||
|
# CONFIG_ARCH_MXC is not set
|
||||||
|
# CONFIG_ARCH_ORION5X is not set
|
||||||
|
# CONFIG_ARCH_PNX4008 is not set
|
||||||
|
CONFIG_ARCH_PXA=y
|
||||||
|
# CONFIG_ARCH_RPC is not set
|
||||||
|
# CONFIG_ARCH_SA1100 is not set
|
||||||
|
# CONFIG_ARCH_S3C2410 is not set
|
||||||
|
# CONFIG_ARCH_SHARK is not set
|
||||||
|
# CONFIG_ARCH_LH7A40X is not set
|
||||||
|
# CONFIG_ARCH_DAVINCI is not set
|
||||||
|
# CONFIG_ARCH_OMAP is not set
|
||||||
|
# CONFIG_ARCH_MSM7X00A is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Intel PXA2xx/PXA3xx Implementations
|
||||||
|
#
|
||||||
|
# CONFIG_ARCH_GUMSTIX is not set
|
||||||
|
# CONFIG_ARCH_LUBBOCK is not set
|
||||||
|
# CONFIG_MACH_LOGICPD_PXA270 is not set
|
||||||
|
# CONFIG_MACH_MAINSTONE is not set
|
||||||
|
# CONFIG_ARCH_PXA_IDP is not set
|
||||||
|
# CONFIG_PXA_SHARPSL is not set
|
||||||
|
# CONFIG_ARCH_PXA_ESERIES is not set
|
||||||
|
# CONFIG_MACH_TRIZEPS4 is not set
|
||||||
|
# CONFIG_MACH_EM_X270 is not set
|
||||||
|
# CONFIG_MACH_COLIBRI is not set
|
||||||
|
# CONFIG_MACH_ZYLONITE is not set
|
||||||
|
# CONFIG_MACH_LITTLETON is not set
|
||||||
|
# CONFIG_MACH_TAVOREVB is not set
|
||||||
|
# CONFIG_MACH_SAAR is not set
|
||||||
|
# CONFIG_MACH_ARMCORE is not set
|
||||||
|
# CONFIG_MACH_MAGICIAN is not set
|
||||||
|
# CONFIG_MACH_PCM027 is not set
|
||||||
|
CONFIG_ARCH_PXA_PALM=y
|
||||||
|
# CONFIG_MACH_PALMTX is not set
|
||||||
|
CONFIG_MACH_PALMZ72=y
|
||||||
|
# CONFIG_PXA_EZX is not set
|
||||||
|
CONFIG_PXA27x=y
|
||||||
|
CONFIG_PXA_PWM=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Boot options
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Power management
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Processor Type
|
||||||
|
#
|
||||||
|
CONFIG_CPU_32=y
|
||||||
|
CONFIG_CPU_XSCALE=y
|
||||||
|
CONFIG_CPU_32v5=y
|
||||||
|
CONFIG_CPU_ABRT_EV5T=y
|
||||||
|
CONFIG_CPU_PABRT_NOIFAR=y
|
||||||
|
CONFIG_CPU_CACHE_VIVT=y
|
||||||
|
CONFIG_CPU_TLB_V4WBI=y
|
||||||
|
CONFIG_CPU_CP15=y
|
||||||
|
CONFIG_CPU_CP15_MMU=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Processor Features
|
||||||
|
#
|
||||||
|
CONFIG_ARM_THUMB=y
|
||||||
|
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||||
|
# CONFIG_OUTER_CACHE is not set
|
||||||
|
CONFIG_IWMMXT=y
|
||||||
|
CONFIG_XSCALE_PMU=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bus support
|
||||||
|
#
|
||||||
|
# CONFIG_PCI_SYSCALL is not set
|
||||||
|
# CONFIG_ARCH_SUPPORTS_MSI is not set
|
||||||
|
# CONFIG_PCCARD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kernel Features
|
||||||
|
#
|
||||||
|
CONFIG_TICK_ONESHOT=y
|
||||||
|
# CONFIG_NO_HZ is not set
|
||||||
|
# CONFIG_HIGH_RES_TIMERS is not set
|
||||||
|
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||||
|
CONFIG_PREEMPT=y
|
||||||
|
CONFIG_HZ=100
|
||||||
|
CONFIG_AEABI=y
|
||||||
|
CONFIG_OABI_COMPAT=y
|
||||||
|
# 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_SPARSEMEM_VMEMMAP_ENABLE is not set
|
||||||
|
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||||
|
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||||
|
# CONFIG_RESOURCES_64BIT is not set
|
||||||
|
CONFIG_ZONE_DMA_FLAG=1
|
||||||
|
CONFIG_BOUNCE=y
|
||||||
|
CONFIG_VIRT_TO_BUS=y
|
||||||
|
CONFIG_ALIGNMENT_TRAP=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Boot options
|
||||||
|
#
|
||||||
|
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||||
|
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||||
|
CONFIG_CMDLINE="mem=32M console=tty root=/dev/mmcblk0"
|
||||||
|
# CONFIG_XIP_KERNEL is not set
|
||||||
|
# CONFIG_KEXEC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# CPU Frequency scaling
|
||||||
|
#
|
||||||
|
# CONFIG_CPU_FREQ is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Floating point emulation
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# At least one emulation must be selected
|
||||||
|
#
|
||||||
|
CONFIG_FPE_NWFPE=y
|
||||||
|
# CONFIG_FPE_NWFPE_XP is not set
|
||||||
|
# CONFIG_FPE_FASTFPE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Userspace binary formats
|
||||||
|
#
|
||||||
|
CONFIG_BINFMT_ELF=y
|
||||||
|
# CONFIG_BINFMT_AOUT is not set
|
||||||
|
# CONFIG_BINFMT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Power management options
|
||||||
|
#
|
||||||
|
CONFIG_PM=y
|
||||||
|
# CONFIG_PM_DEBUG is not set
|
||||||
|
CONFIG_PM_SLEEP=y
|
||||||
|
CONFIG_SUSPEND=y
|
||||||
|
CONFIG_SUSPEND_FREEZER=y
|
||||||
|
CONFIG_APM_EMULATION=y
|
||||||
|
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||||
|
CONFIG_NET=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Networking options
|
||||||
|
#
|
||||||
|
CONFIG_PACKET=y
|
||||||
|
# CONFIG_PACKET_MMAP is not set
|
||||||
|
CONFIG_UNIX=y
|
||||||
|
# CONFIG_NET_KEY is not set
|
||||||
|
CONFIG_INET=y
|
||||||
|
# CONFIG_IP_MULTICAST is not set
|
||||||
|
# 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_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_XFRM_MODE_TRANSPORT is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||||
|
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||||
|
# CONFIG_INET_LRO is not set
|
||||||
|
CONFIG_INET_DIAG=y
|
||||||
|
CONFIG_INET_TCP_DIAG=y
|
||||||
|
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||||
|
CONFIG_TCP_CONG_CUBIC=y
|
||||||
|
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||||
|
# CONFIG_TCP_MD5SIG is not set
|
||||||
|
# CONFIG_IPV6 is not set
|
||||||
|
# CONFIG_NETWORK_SECMARK is not set
|
||||||
|
# CONFIG_NETFILTER is not set
|
||||||
|
# CONFIG_IP_DCCP is not set
|
||||||
|
# CONFIG_IP_SCTP is not set
|
||||||
|
# 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_ECONET is not set
|
||||||
|
# CONFIG_WAN_ROUTER is not set
|
||||||
|
# CONFIG_NET_SCHED is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Network testing
|
||||||
|
#
|
||||||
|
# CONFIG_NET_PKTGEN is not set
|
||||||
|
# CONFIG_HAMRADIO is not set
|
||||||
|
# CONFIG_CAN is not set
|
||||||
|
# CONFIG_IRDA is not set
|
||||||
|
# CONFIG_BT is not set
|
||||||
|
# CONFIG_AF_RXRPC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Wireless
|
||||||
|
#
|
||||||
|
# CONFIG_CFG80211 is not set
|
||||||
|
# CONFIG_WIRELESS_EXT is not set
|
||||||
|
# CONFIG_MAC80211 is not set
|
||||||
|
# CONFIG_IEEE80211 is not set
|
||||||
|
# CONFIG_RFKILL is not set
|
||||||
|
# CONFIG_NET_9P is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Device Drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Generic Driver Options
|
||||||
|
#
|
||||||
|
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||||
|
CONFIG_STANDALONE=y
|
||||||
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
|
CONFIG_FW_LOADER=y
|
||||||
|
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||||
|
CONFIG_EXTRA_FIRMWARE=""
|
||||||
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
|
# CONFIG_CONNECTOR is not set
|
||||||
|
# CONFIG_MTD is not set
|
||||||
|
# CONFIG_PARPORT is not set
|
||||||
|
CONFIG_BLK_DEV=y
|
||||||
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
|
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||||
|
# CONFIG_BLK_DEV_NBD is not set
|
||||||
|
# CONFIG_BLK_DEV_RAM is not set
|
||||||
|
# CONFIG_CDROM_PKTCDVD is not set
|
||||||
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
|
# CONFIG_MISC_DEVICES is not set
|
||||||
|
CONFIG_HAVE_IDE=y
|
||||||
|
# CONFIG_IDE is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCSI device support
|
||||||
|
#
|
||||||
|
# CONFIG_RAID_ATTRS is not set
|
||||||
|
# CONFIG_SCSI is not set
|
||||||
|
# CONFIG_SCSI_DMA is not set
|
||||||
|
# CONFIG_SCSI_NETLINK is not set
|
||||||
|
# CONFIG_ATA is not set
|
||||||
|
# CONFIG_MD is not set
|
||||||
|
# CONFIG_NETDEVICES is not set
|
||||||
|
# CONFIG_ISDN is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input device support
|
||||||
|
#
|
||||||
|
CONFIG_INPUT=y
|
||||||
|
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||||
|
# CONFIG_INPUT_POLLDEV is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Userland interfaces
|
||||||
|
#
|
||||||
|
CONFIG_INPUT_MOUSEDEV=y
|
||||||
|
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||||
|
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||||
|
# CONFIG_INPUT_JOYDEV is not set
|
||||||
|
CONFIG_INPUT_EVDEV=y
|
||||||
|
# CONFIG_INPUT_EVBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Input Device Drivers
|
||||||
|
#
|
||||||
|
CONFIG_INPUT_KEYBOARD=y
|
||||||
|
# CONFIG_KEYBOARD_ATKBD is not set
|
||||||
|
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||||
|
# CONFIG_KEYBOARD_LKKBD is not set
|
||||||
|
# CONFIG_KEYBOARD_XTKBD is not set
|
||||||
|
# CONFIG_KEYBOARD_NEWTON is not set
|
||||||
|
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||||
|
CONFIG_KEYBOARD_PXA27x=y
|
||||||
|
# CONFIG_KEYBOARD_GPIO is not set
|
||||||
|
# CONFIG_KEYBOARD_MATRIX is not set
|
||||||
|
# CONFIG_INPUT_MOUSE is not set
|
||||||
|
# CONFIG_INPUT_JOYSTICK is not set
|
||||||
|
# CONFIG_INPUT_TABLET is not set
|
||||||
|
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||||
|
# CONFIG_INPUT_MISC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Hardware I/O ports
|
||||||
|
#
|
||||||
|
# CONFIG_SERIO is not set
|
||||||
|
# CONFIG_GAMEPORT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Character devices
|
||||||
|
#
|
||||||
|
CONFIG_VT=y
|
||||||
|
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||||
|
CONFIG_VT_CONSOLE=y
|
||||||
|
CONFIG_HW_CONSOLE=y
|
||||||
|
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||||
|
CONFIG_DEVKMEM=y
|
||||||
|
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Serial drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SERIAL_8250 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Non-8250 serial port support
|
||||||
|
#
|
||||||
|
# CONFIG_SERIAL_PXA is not set
|
||||||
|
CONFIG_UNIX98_PTYS=y
|
||||||
|
CONFIG_LEGACY_PTYS=y
|
||||||
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
|
# CONFIG_HW_RANDOM is not set
|
||||||
|
# CONFIG_NVRAM is not set
|
||||||
|
# CONFIG_R3964 is not set
|
||||||
|
# CONFIG_RAW_DRIVER is not set
|
||||||
|
# CONFIG_TCG_TPM is not set
|
||||||
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_BOARDINFO=y
|
||||||
|
# CONFIG_I2C_CHARDEV is not set
|
||||||
|
CONFIG_I2C_HELPER_AUTO=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Hardware Bus support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_GPIO is not set
|
||||||
|
# CONFIG_I2C_OCORES is not set
|
||||||
|
CONFIG_I2C_PXA=y
|
||||||
|
# CONFIG_I2C_PXA_SLAVE is not set
|
||||||
|
# CONFIG_I2C_SIMTEC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# External I2C/SMBus adapter drivers
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
|
# CONFIG_I2C_TAOS_EVM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Other I2C/SMBus bus drivers
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_PCA_PLATFORM is not set
|
||||||
|
# CONFIG_I2C_STUB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous I2C Chip support
|
||||||
|
#
|
||||||
|
# CONFIG_DS1682 is not set
|
||||||
|
# CONFIG_AT24 is not set
|
||||||
|
# CONFIG_SENSORS_EEPROM is not set
|
||||||
|
# CONFIG_SENSORS_PCF8574 is not set
|
||||||
|
# CONFIG_PCF8575 is not set
|
||||||
|
# CONFIG_SENSORS_PCA9539 is not set
|
||||||
|
# CONFIG_SENSORS_PCF8591 is not set
|
||||||
|
# CONFIG_TPS65010 is not set
|
||||||
|
# CONFIG_SENSORS_MAX6875 is not set
|
||||||
|
# CONFIG_SENSORS_TSL2550 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_SPI=y
|
||||||
|
CONFIG_SPI_MASTER=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI Master Controller Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SPI_BITBANG is not set
|
||||||
|
# CONFIG_SPI_PXA2XX is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI Protocol Masters
|
||||||
|
#
|
||||||
|
# CONFIG_SPI_AT25 is not set
|
||||||
|
CONFIG_SPI_SPIDEV=y
|
||||||
|
# CONFIG_SPI_TLE62X0 is not set
|
||||||
|
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||||
|
CONFIG_GPIOLIB=y
|
||||||
|
CONFIG_GPIO_SYSFS=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C GPIO expanders:
|
||||||
|
#
|
||||||
|
# CONFIG_GPIO_MAX732X is not set
|
||||||
|
# CONFIG_GPIO_PCA953X is not set
|
||||||
|
# CONFIG_GPIO_PCF857X is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI GPIO expanders:
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI GPIO expanders:
|
||||||
|
#
|
||||||
|
# CONFIG_GPIO_MAX7301 is not set
|
||||||
|
# CONFIG_GPIO_MCP23S08 is not set
|
||||||
|
# CONFIG_W1 is not set
|
||||||
|
CONFIG_POWER_SUPPLY=y
|
||||||
|
# CONFIG_POWER_SUPPLY_DEBUG is not set
|
||||||
|
CONFIG_PDA_POWER=y
|
||||||
|
# CONFIG_APM_POWER is not set
|
||||||
|
# CONFIG_BATTERY_DS2760 is not set
|
||||||
|
# CONFIG_HWMON is not set
|
||||||
|
# CONFIG_WATCHDOG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sonics Silicon Backplane
|
||||||
|
#
|
||||||
|
CONFIG_SSB_POSSIBLE=y
|
||||||
|
# CONFIG_SSB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multifunction device drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MFD_CORE is not set
|
||||||
|
# CONFIG_MFD_SM501 is not set
|
||||||
|
# CONFIG_HTC_EGPIO is not set
|
||||||
|
# CONFIG_HTC_PASIC3 is not set
|
||||||
|
# CONFIG_MFD_TMIO is not set
|
||||||
|
# CONFIG_MFD_T7L66XB is not set
|
||||||
|
# CONFIG_MFD_TC6387XB is not set
|
||||||
|
# CONFIG_MFD_TC6393XB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multimedia devices
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multimedia core support
|
||||||
|
#
|
||||||
|
# CONFIG_VIDEO_DEV is not set
|
||||||
|
# CONFIG_DVB_CORE is not set
|
||||||
|
# CONFIG_VIDEO_MEDIA is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Multimedia drivers
|
||||||
|
#
|
||||||
|
# CONFIG_DAB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Graphics support
|
||||||
|
#
|
||||||
|
# CONFIG_VGASTATE is not set
|
||||||
|
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||||
|
CONFIG_FB=y
|
||||||
|
# CONFIG_FIRMWARE_EDID is not set
|
||||||
|
# CONFIG_FB_DDC is not set
|
||||||
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
|
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||||
|
# CONFIG_FB_SYS_FILLRECT is not set
|
||||||
|
# CONFIG_FB_SYS_COPYAREA is not set
|
||||||
|
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||||
|
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||||
|
# CONFIG_FB_SYS_FOPS is not set
|
||||||
|
# CONFIG_FB_SVGALIB is not set
|
||||||
|
# CONFIG_FB_MACMODES is not set
|
||||||
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
|
# CONFIG_FB_MODE_HELPERS is not set
|
||||||
|
# CONFIG_FB_TILEBLITTING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Frame buffer hardware drivers
|
||||||
|
#
|
||||||
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
|
CONFIG_FB_PXA=y
|
||||||
|
# CONFIG_FB_PXA_SMARTPANEL is not set
|
||||||
|
# CONFIG_FB_PXA_PARAMETERS is not set
|
||||||
|
# CONFIG_FB_MBX is not set
|
||||||
|
# CONFIG_FB_W100 is not set
|
||||||
|
# CONFIG_FB_AM200EPD is not set
|
||||||
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
|
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||||
|
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||||
|
# CONFIG_BACKLIGHT_CORGI is not set
|
||||||
|
CONFIG_BACKLIGHT_PWM=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Display device support
|
||||||
|
#
|
||||||
|
CONFIG_DISPLAY_SUPPORT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Display hardware drivers
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Console display driver support
|
||||||
|
#
|
||||||
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
|
||||||
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
|
CONFIG_FONTS=y
|
||||||
|
CONFIG_FONT_8x8=y
|
||||||
|
# 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_SUN8x16 is not set
|
||||||
|
# CONFIG_FONT_SUN12x22 is not set
|
||||||
|
# CONFIG_FONT_10x18 is not set
|
||||||
|
# CONFIG_LOGO is not set
|
||||||
|
# CONFIG_SOUND is not set
|
||||||
|
# CONFIG_HID_SUPPORT is not set
|
||||||
|
# CONFIG_USB_SUPPORT is not set
|
||||||
|
CONFIG_MMC=y
|
||||||
|
CONFIG_MMC_DEBUG=y
|
||||||
|
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# MMC/SD Card Drivers
|
||||||
|
#
|
||||||
|
CONFIG_MMC_BLOCK=y
|
||||||
|
CONFIG_MMC_BLOCK_BOUNCE=y
|
||||||
|
# CONFIG_SDIO_UART is not set
|
||||||
|
# CONFIG_MMC_TEST is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# MMC/SD Host Controller Drivers
|
||||||
|
#
|
||||||
|
CONFIG_MMC_PXA=y
|
||||||
|
# CONFIG_MMC_SDHCI is not set
|
||||||
|
# CONFIG_MMC_SPI is not set
|
||||||
|
# CONFIG_NEW_LEDS is not set
|
||||||
|
CONFIG_RTC_LIB=y
|
||||||
|
CONFIG_RTC_CLASS=y
|
||||||
|
CONFIG_RTC_HCTOSYS=y
|
||||||
|
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
|
||||||
|
# CONFIG_RTC_DEBUG is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# RTC interfaces
|
||||||
|
#
|
||||||
|
CONFIG_RTC_INTF_SYSFS=y
|
||||||
|
CONFIG_RTC_INTF_PROC=y
|
||||||
|
CONFIG_RTC_INTF_DEV=y
|
||||||
|
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
|
||||||
|
# CONFIG_RTC_DRV_TEST is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C RTC drivers
|
||||||
|
#
|
||||||
|
# CONFIG_RTC_DRV_DS1307 is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1374 is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1672 is not set
|
||||||
|
# CONFIG_RTC_DRV_MAX6900 is not set
|
||||||
|
# CONFIG_RTC_DRV_RS5C372 is not set
|
||||||
|
# CONFIG_RTC_DRV_ISL1208 is not set
|
||||||
|
# CONFIG_RTC_DRV_X1205 is not set
|
||||||
|
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||||
|
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||||
|
# CONFIG_RTC_DRV_M41T80 is not set
|
||||||
|
# CONFIG_RTC_DRV_S35390A is not set
|
||||||
|
# CONFIG_RTC_DRV_FM3130 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# SPI RTC drivers
|
||||||
|
#
|
||||||
|
# CONFIG_RTC_DRV_M41T94 is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1305 is not set
|
||||||
|
# CONFIG_RTC_DRV_MAX6902 is not set
|
||||||
|
# CONFIG_RTC_DRV_R9701 is not set
|
||||||
|
# CONFIG_RTC_DRV_RS5C348 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Platform RTC drivers
|
||||||
|
#
|
||||||
|
# CONFIG_RTC_DRV_CMOS is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1511 is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1553 is not set
|
||||||
|
# CONFIG_RTC_DRV_DS1742 is not set
|
||||||
|
# CONFIG_RTC_DRV_STK17TA8 is not set
|
||||||
|
# CONFIG_RTC_DRV_M48T86 is not set
|
||||||
|
# CONFIG_RTC_DRV_M48T59 is not set
|
||||||
|
# CONFIG_RTC_DRV_V3020 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# on-CPU RTC drivers
|
||||||
|
#
|
||||||
|
CONFIG_RTC_DRV_SA1100=y
|
||||||
|
# CONFIG_DMADEVICES is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Voltage and Current regulators
|
||||||
|
#
|
||||||
|
# CONFIG_REGULATOR is not set
|
||||||
|
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||||
|
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||||
|
# CONFIG_REGULATOR_BQ24022 is not set
|
||||||
|
# CONFIG_UIO 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=y
|
||||||
|
CONFIG_EXT3_FS_XATTR=y
|
||||||
|
# CONFIG_EXT3_FS_POSIX_ACL is not set
|
||||||
|
# CONFIG_EXT3_FS_SECURITY is not set
|
||||||
|
# CONFIG_EXT4DEV_FS is not set
|
||||||
|
CONFIG_JBD=y
|
||||||
|
CONFIG_FS_MBCACHE=y
|
||||||
|
# CONFIG_REISERFS_FS is not set
|
||||||
|
# CONFIG_JFS_FS is not set
|
||||||
|
# CONFIG_FS_POSIX_ACL is not set
|
||||||
|
# CONFIG_XFS_FS is not set
|
||||||
|
# CONFIG_OCFS2_FS is not set
|
||||||
|
# CONFIG_DNOTIFY is not set
|
||||||
|
# CONFIG_INOTIFY is not set
|
||||||
|
# CONFIG_QUOTA is not set
|
||||||
|
# CONFIG_AUTOFS_FS is not set
|
||||||
|
# CONFIG_AUTOFS4_FS is not set
|
||||||
|
# CONFIG_FUSE_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# CD-ROM/DVD Filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_ISO9660_FS is not set
|
||||||
|
# CONFIG_UDF_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# DOS/FAT/NT Filesystems
|
||||||
|
#
|
||||||
|
CONFIG_FAT_FS=y
|
||||||
|
CONFIG_MSDOS_FS=y
|
||||||
|
CONFIG_VFAT_FS=y
|
||||||
|
CONFIG_FAT_DEFAULT_CODEPAGE=866
|
||||||
|
CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
|
||||||
|
# CONFIG_NTFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Pseudo filesystems
|
||||||
|
#
|
||||||
|
CONFIG_PROC_FS=y
|
||||||
|
CONFIG_PROC_SYSCTL=y
|
||||||
|
CONFIG_SYSFS=y
|
||||||
|
CONFIG_TMPFS=y
|
||||||
|
# CONFIG_TMPFS_POSIX_ACL is not set
|
||||||
|
# CONFIG_HUGETLB_PAGE is not set
|
||||||
|
# CONFIG_CONFIGFS_FS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous filesystems
|
||||||
|
#
|
||||||
|
# CONFIG_ADFS_FS is not set
|
||||||
|
# CONFIG_AFFS_FS is not set
|
||||||
|
# CONFIG_HFS_FS is not set
|
||||||
|
# CONFIG_HFSPLUS_FS is not set
|
||||||
|
# CONFIG_BEFS_FS is not set
|
||||||
|
# CONFIG_BFS_FS is not set
|
||||||
|
# CONFIG_EFS_FS is not set
|
||||||
|
# CONFIG_CRAMFS is not set
|
||||||
|
# CONFIG_VXFS_FS is not set
|
||||||
|
# CONFIG_MINIX_FS is not set
|
||||||
|
# CONFIG_OMFS_FS is not set
|
||||||
|
# CONFIG_HPFS_FS is not set
|
||||||
|
# CONFIG_QNX4FS_FS is not set
|
||||||
|
# CONFIG_ROMFS_FS is not set
|
||||||
|
# CONFIG_SYSV_FS is not set
|
||||||
|
# CONFIG_UFS_FS is not set
|
||||||
|
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Partition Types
|
||||||
|
#
|
||||||
|
# CONFIG_PARTITION_ADVANCED is not set
|
||||||
|
CONFIG_MSDOS_PARTITION=y
|
||||||
|
CONFIG_NLS=y
|
||||||
|
CONFIG_NLS_DEFAULT="utf8"
|
||||||
|
# CONFIG_NLS_CODEPAGE_437 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||||
|
CONFIG_NLS_CODEPAGE_866=y
|
||||||
|
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_8 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||||
|
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||||
|
# CONFIG_NLS_ASCII is not set
|
||||||
|
# CONFIG_NLS_ISO8859_1 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_2 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_3 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_4 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_5 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_6 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_7 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_9 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_13 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_14 is not set
|
||||||
|
# CONFIG_NLS_ISO8859_15 is not set
|
||||||
|
# CONFIG_NLS_KOI8_R is not set
|
||||||
|
# CONFIG_NLS_KOI8_U is not set
|
||||||
|
CONFIG_NLS_UTF8=y
|
||||||
|
# CONFIG_DLM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kernel hacking
|
||||||
|
#
|
||||||
|
# CONFIG_PRINTK_TIME is not set
|
||||||
|
CONFIG_ENABLE_WARN_DEPRECATED=y
|
||||||
|
CONFIG_ENABLE_MUST_CHECK=y
|
||||||
|
CONFIG_FRAME_WARN=1024
|
||||||
|
# CONFIG_MAGIC_SYSRQ is not set
|
||||||
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
|
# CONFIG_DEBUG_FS is not set
|
||||||
|
# CONFIG_HEADERS_CHECK is not set
|
||||||
|
# CONFIG_DEBUG_KERNEL is not set
|
||||||
|
CONFIG_DEBUG_BUGVERBOSE=y
|
||||||
|
CONFIG_DEBUG_MEMORY_INIT=y
|
||||||
|
CONFIG_FRAME_POINTER=y
|
||||||
|
# CONFIG_LATENCYTOP is not set
|
||||||
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
CONFIG_HAVE_FTRACE=y
|
||||||
|
CONFIG_HAVE_DYNAMIC_FTRACE=y
|
||||||
|
# CONFIG_FTRACE is not set
|
||||||
|
# CONFIG_IRQSOFF_TRACER is not set
|
||||||
|
# CONFIG_PREEMPT_TRACER is not set
|
||||||
|
# CONFIG_SCHED_TRACER is not set
|
||||||
|
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||||
|
# CONFIG_SAMPLES is not set
|
||||||
|
CONFIG_HAVE_ARCH_KGDB=y
|
||||||
|
CONFIG_DEBUG_USER=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Security options
|
||||||
|
#
|
||||||
|
# CONFIG_KEYS is not set
|
||||||
|
# CONFIG_SECURITY is not set
|
||||||
|
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
||||||
|
# CONFIG_CRYPTO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Library routines
|
||||||
|
#
|
||||||
|
CONFIG_BITREVERSE=y
|
||||||
|
# CONFIG_GENERIC_FIND_FIRST_BIT is not set
|
||||||
|
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
|
||||||
|
# CONFIG_CRC_CCITT is not set
|
||||||
|
# CONFIG_CRC16 is not set
|
||||||
|
CONFIG_CRC_T10DIF=y
|
||||||
|
# CONFIG_CRC_ITU_T is not set
|
||||||
|
CONFIG_CRC32=y
|
||||||
|
# CONFIG_CRC7 is not set
|
||||||
|
# CONFIG_LIBCRC32C is not set
|
||||||
|
CONFIG_PLIST=y
|
||||||
|
CONFIG_HAS_IOMEM=y
|
||||||
|
CONFIG_HAS_IOPORT=y
|
||||||
|
CONFIG_HAS_DMA=y
|
1678
arch/arm/configs/viper_defconfig
Normal file
1678
arch/arm/configs/viper_defconfig
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,7 @@
|
|||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.25
|
# Linux kernel version: 2.6.27-rc8
|
||||||
# Sun May 11 15:12:52 2008
|
# Sun Oct 5 11:05:36 2008
|
||||||
#
|
#
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
@ -12,6 +12,7 @@ CONFIG_MMU=y
|
|||||||
# CONFIG_NO_IOPORT is not set
|
# CONFIG_NO_IOPORT is not set
|
||||||
CONFIG_GENERIC_HARDIRQS=y
|
CONFIG_GENERIC_HARDIRQS=y
|
||||||
CONFIG_STACKTRACE_SUPPORT=y
|
CONFIG_STACKTRACE_SUPPORT=y
|
||||||
|
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||||
CONFIG_LOCKDEP_SUPPORT=y
|
CONFIG_LOCKDEP_SUPPORT=y
|
||||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||||
CONFIG_HARDIRQS_SW_RESEND=y
|
CONFIG_HARDIRQS_SW_RESEND=y
|
||||||
@ -24,6 +25,7 @@ CONFIG_GENERIC_CALIBRATE_DELAY=y
|
|||||||
CONFIG_ARCH_SUPPORTS_AOUT=y
|
CONFIG_ARCH_SUPPORTS_AOUT=y
|
||||||
CONFIG_ZONE_DMA=y
|
CONFIG_ZONE_DMA=y
|
||||||
CONFIG_ARCH_MTD_XIP=y
|
CONFIG_ARCH_MTD_XIP=y
|
||||||
|
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||||
CONFIG_VECTORS_BASE=0xffff0000
|
CONFIG_VECTORS_BASE=0xffff0000
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
|
||||||
@ -62,7 +64,6 @@ CONFIG_SYSCTL=y
|
|||||||
CONFIG_EMBEDDED=y
|
CONFIG_EMBEDDED=y
|
||||||
CONFIG_UID16=y
|
CONFIG_UID16=y
|
||||||
CONFIG_SYSCTL_SYSCALL=y
|
CONFIG_SYSCTL_SYSCALL=y
|
||||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
|
||||||
CONFIG_KALLSYMS=y
|
CONFIG_KALLSYMS=y
|
||||||
# CONFIG_KALLSYMS_ALL is not set
|
# CONFIG_KALLSYMS_ALL is not set
|
||||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||||
@ -88,14 +89,21 @@ CONFIG_SLUB=y
|
|||||||
# CONFIG_MARKERS is not set
|
# CONFIG_MARKERS is not set
|
||||||
CONFIG_HAVE_OPROFILE=y
|
CONFIG_HAVE_OPROFILE=y
|
||||||
# CONFIG_KPROBES is not set
|
# CONFIG_KPROBES is not set
|
||||||
|
# CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS is not set
|
||||||
|
# CONFIG_HAVE_IOREMAP_PROT is not set
|
||||||
CONFIG_HAVE_KPROBES=y
|
CONFIG_HAVE_KPROBES=y
|
||||||
CONFIG_HAVE_KRETPROBES=y
|
CONFIG_HAVE_KRETPROBES=y
|
||||||
|
# CONFIG_HAVE_ARCH_TRACEHOOK is not set
|
||||||
# CONFIG_HAVE_DMA_ATTRS is not set
|
# CONFIG_HAVE_DMA_ATTRS is not set
|
||||||
|
# CONFIG_USE_GENERIC_SMP_HELPERS is not set
|
||||||
|
CONFIG_HAVE_CLK=y
|
||||||
# CONFIG_PROC_PAGE_MONITOR is not set
|
# CONFIG_PROC_PAGE_MONITOR is not set
|
||||||
|
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||||
CONFIG_RT_MUTEXES=y
|
CONFIG_RT_MUTEXES=y
|
||||||
# CONFIG_TINY_SHMEM is not set
|
# CONFIG_TINY_SHMEM is not set
|
||||||
CONFIG_BASE_SMALL=0
|
CONFIG_BASE_SMALL=0
|
||||||
CONFIG_MODULES=y
|
CONFIG_MODULES=y
|
||||||
|
# CONFIG_MODULE_FORCE_LOAD is not set
|
||||||
CONFIG_MODULE_UNLOAD=y
|
CONFIG_MODULE_UNLOAD=y
|
||||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||||
# CONFIG_MODVERSIONS is not set
|
# CONFIG_MODVERSIONS is not set
|
||||||
@ -106,6 +114,7 @@ CONFIG_BLOCK=y
|
|||||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||||
# CONFIG_LSF is not set
|
# CONFIG_LSF is not set
|
||||||
# CONFIG_BLK_DEV_BSG is not set
|
# CONFIG_BLK_DEV_BSG is not set
|
||||||
|
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IO Schedulers
|
# IO Schedulers
|
||||||
@ -131,7 +140,6 @@ CONFIG_CLASSIC_RCU=y
|
|||||||
# CONFIG_ARCH_AT91 is not set
|
# CONFIG_ARCH_AT91 is not set
|
||||||
# CONFIG_ARCH_CLPS7500 is not set
|
# CONFIG_ARCH_CLPS7500 is not set
|
||||||
# CONFIG_ARCH_CLPS711X is not set
|
# CONFIG_ARCH_CLPS711X is not set
|
||||||
# CONFIG_ARCH_CO285 is not set
|
|
||||||
# CONFIG_ARCH_EBSA110 is not set
|
# CONFIG_ARCH_EBSA110 is not set
|
||||||
# CONFIG_ARCH_EP93XX is not set
|
# CONFIG_ARCH_EP93XX is not set
|
||||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||||
@ -145,8 +153,11 @@ CONFIG_CLASSIC_RCU=y
|
|||||||
# CONFIG_ARCH_IXP2000 is not set
|
# CONFIG_ARCH_IXP2000 is not set
|
||||||
# CONFIG_ARCH_IXP4XX is not set
|
# CONFIG_ARCH_IXP4XX is not set
|
||||||
# CONFIG_ARCH_L7200 is not set
|
# CONFIG_ARCH_L7200 is not set
|
||||||
|
# CONFIG_ARCH_KIRKWOOD is not set
|
||||||
# CONFIG_ARCH_KS8695 is not set
|
# CONFIG_ARCH_KS8695 is not set
|
||||||
# CONFIG_ARCH_NS9XXX is not set
|
# CONFIG_ARCH_NS9XXX is not set
|
||||||
|
# CONFIG_ARCH_LOKI is not set
|
||||||
|
# CONFIG_ARCH_MV78XX0 is not set
|
||||||
# CONFIG_ARCH_MXC is not set
|
# CONFIG_ARCH_MXC is not set
|
||||||
# CONFIG_ARCH_ORION5X is not set
|
# CONFIG_ARCH_ORION5X is not set
|
||||||
# CONFIG_ARCH_PNX4008 is not set
|
# CONFIG_ARCH_PNX4008 is not set
|
||||||
@ -164,26 +175,32 @@ CONFIG_DMABOUNCE=y
|
|||||||
#
|
#
|
||||||
# Intel PXA2xx/PXA3xx Implementations
|
# Intel PXA2xx/PXA3xx Implementations
|
||||||
#
|
#
|
||||||
|
|
||||||
#
|
|
||||||
# Select target boards
|
|
||||||
#
|
|
||||||
# CONFIG_ARCH_GUMSTIX is not set
|
# CONFIG_ARCH_GUMSTIX is not set
|
||||||
# CONFIG_ARCH_LUBBOCK is not set
|
# CONFIG_ARCH_LUBBOCK is not set
|
||||||
# CONFIG_MACH_LOGICPD_PXA270 is not set
|
# CONFIG_MACH_LOGICPD_PXA270 is not set
|
||||||
# CONFIG_MACH_MAINSTONE is not set
|
# CONFIG_MACH_MAINSTONE is not set
|
||||||
|
# CONFIG_MACH_MP900C is not set
|
||||||
# CONFIG_ARCH_PXA_IDP is not set
|
# CONFIG_ARCH_PXA_IDP is not set
|
||||||
# CONFIG_PXA_SHARPSL is not set
|
# CONFIG_PXA_SHARPSL is not set
|
||||||
|
# CONFIG_ARCH_VIPER is not set
|
||||||
# CONFIG_ARCH_PXA_ESERIES is not set
|
# CONFIG_ARCH_PXA_ESERIES is not set
|
||||||
# CONFIG_MACH_TRIZEPS4 is not set
|
# CONFIG_TRIZEPS_PXA is not set
|
||||||
CONFIG_MACH_EM_X270=y
|
CONFIG_MACH_EM_X270=y
|
||||||
# CONFIG_MACH_COLIBRI is not set
|
# CONFIG_MACH_COLIBRI is not set
|
||||||
# CONFIG_MACH_ZYLONITE is not set
|
# CONFIG_MACH_ZYLONITE is not set
|
||||||
# CONFIG_MACH_LITTLETON is not set
|
# CONFIG_MACH_LITTLETON is not set
|
||||||
|
# CONFIG_MACH_TAVOREVB is not set
|
||||||
|
# CONFIG_MACH_SAAR is not set
|
||||||
CONFIG_MACH_ARMCORE=y
|
CONFIG_MACH_ARMCORE=y
|
||||||
|
# CONFIG_MACH_CM_X300 is not set
|
||||||
# CONFIG_MACH_MAGICIAN is not set
|
# CONFIG_MACH_MAGICIAN is not set
|
||||||
|
# CONFIG_MACH_MIOA701 is not set
|
||||||
# CONFIG_MACH_PCM027 is not set
|
# CONFIG_MACH_PCM027 is not set
|
||||||
|
# CONFIG_ARCH_PXA_PALM is not set
|
||||||
|
# CONFIG_PXA_EZX is not set
|
||||||
|
CONFIG_PXA25x=y
|
||||||
CONFIG_PXA27x=y
|
CONFIG_PXA27x=y
|
||||||
|
CONFIG_PXA_SSP=y
|
||||||
# CONFIG_PXA_PWM is not set
|
# CONFIG_PXA_PWM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -253,11 +270,17 @@ CONFIG_TICK_ONESHOT=y
|
|||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
# CONFIG_HIGH_RES_TIMERS is not set
|
# CONFIG_HIGH_RES_TIMERS is not set
|
||||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||||
|
CONFIG_VMSPLIT_3G=y
|
||||||
|
# CONFIG_VMSPLIT_2G is not set
|
||||||
|
# CONFIG_VMSPLIT_1G is not set
|
||||||
|
CONFIG_PAGE_OFFSET=0xC0000000
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
CONFIG_HZ=100
|
CONFIG_HZ=100
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
CONFIG_OABI_COMPAT=y
|
CONFIG_OABI_COMPAT=y
|
||||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
CONFIG_ARCH_FLATMEM_HAS_HOLES=y
|
||||||
|
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||||
|
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||||
CONFIG_SELECT_MEMORY_MODEL=y
|
CONFIG_SELECT_MEMORY_MODEL=y
|
||||||
CONFIG_FLATMEM_MANUAL=y
|
CONFIG_FLATMEM_MANUAL=y
|
||||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||||
@ -284,9 +307,10 @@ CONFIG_CMDLINE="root=1f03 mem=32M"
|
|||||||
# CONFIG_KEXEC is not set
|
# CONFIG_KEXEC is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# CPU Frequency scaling
|
# CPU Power Management
|
||||||
#
|
#
|
||||||
# CONFIG_CPU_FREQ is not set
|
# CONFIG_CPU_FREQ is not set
|
||||||
|
# CONFIG_CPU_IDLE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Floating point emulation
|
# Floating point emulation
|
||||||
@ -316,10 +340,6 @@ CONFIG_SUSPEND=y
|
|||||||
CONFIG_SUSPEND_FREEZER=y
|
CONFIG_SUSPEND_FREEZER=y
|
||||||
CONFIG_APM_EMULATION=m
|
CONFIG_APM_EMULATION=m
|
||||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||||
|
|
||||||
#
|
|
||||||
# Networking
|
|
||||||
#
|
|
||||||
CONFIG_NET=y
|
CONFIG_NET=y
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -402,6 +422,7 @@ CONFIG_BT_HIDP=m
|
|||||||
#
|
#
|
||||||
CONFIG_BT_HCIUSB=m
|
CONFIG_BT_HCIUSB=m
|
||||||
CONFIG_BT_HCIUSB_SCO=y
|
CONFIG_BT_HCIUSB_SCO=y
|
||||||
|
# CONFIG_BT_HCIBTUSB is not set
|
||||||
# CONFIG_BT_HCIBTSDIO is not set
|
# CONFIG_BT_HCIBTSDIO is not set
|
||||||
# CONFIG_BT_HCIUART is not set
|
# CONFIG_BT_HCIUART is not set
|
||||||
# CONFIG_BT_HCIBCM203X is not set
|
# CONFIG_BT_HCIBCM203X is not set
|
||||||
@ -419,6 +440,7 @@ CONFIG_BT_HCIUSB_SCO=y
|
|||||||
#
|
#
|
||||||
# CONFIG_CFG80211 is not set
|
# CONFIG_CFG80211 is not set
|
||||||
CONFIG_WIRELESS_EXT=y
|
CONFIG_WIRELESS_EXT=y
|
||||||
|
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||||
# CONFIG_MAC80211 is not set
|
# CONFIG_MAC80211 is not set
|
||||||
# CONFIG_IEEE80211 is not set
|
# CONFIG_IEEE80211 is not set
|
||||||
# CONFIG_RFKILL is not set
|
# CONFIG_RFKILL is not set
|
||||||
@ -435,6 +457,8 @@ CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
|||||||
CONFIG_STANDALONE=y
|
CONFIG_STANDALONE=y
|
||||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||||
CONFIG_FW_LOADER=m
|
CONFIG_FW_LOADER=m
|
||||||
|
CONFIG_FIRMWARE_IN_KERNEL=y
|
||||||
|
CONFIG_EXTRA_FIRMWARE=""
|
||||||
# CONFIG_DEBUG_DRIVER is not set
|
# CONFIG_DEBUG_DRIVER is not set
|
||||||
# CONFIG_DEBUG_DEVRES is not set
|
# CONFIG_DEBUG_DEVRES is not set
|
||||||
# CONFIG_SYS_HYPERVISOR is not set
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
@ -527,6 +551,7 @@ CONFIG_MTD_NAND=y
|
|||||||
# CONFIG_MTD_NAND_ECC_SMC is not set
|
# CONFIG_MTD_NAND_ECC_SMC is not set
|
||||||
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
|
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
|
||||||
# CONFIG_MTD_NAND_H1900 is not set
|
# CONFIG_MTD_NAND_H1900 is not set
|
||||||
|
CONFIG_MTD_NAND_GPIO=m
|
||||||
CONFIG_MTD_NAND_IDS=y
|
CONFIG_MTD_NAND_IDS=y
|
||||||
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
# CONFIG_MTD_NAND_DISKONCHIP is not set
|
||||||
# CONFIG_MTD_NAND_SHARPSL is not set
|
# CONFIG_MTD_NAND_SHARPSL is not set
|
||||||
@ -636,6 +661,7 @@ CONFIG_SCSI_LOWLEVEL=y
|
|||||||
# CONFIG_SCSI_DEBUG is not set
|
# CONFIG_SCSI_DEBUG is not set
|
||||||
# CONFIG_SCSI_SRP is not set
|
# CONFIG_SCSI_SRP is not set
|
||||||
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
|
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
|
||||||
|
# CONFIG_SCSI_DH is not set
|
||||||
CONFIG_ATA=m
|
CONFIG_ATA=m
|
||||||
# CONFIG_ATA_NONSTANDARD is not set
|
# CONFIG_ATA_NONSTANDARD is not set
|
||||||
# CONFIG_SATA_PMP is not set
|
# CONFIG_SATA_PMP is not set
|
||||||
@ -696,17 +722,21 @@ CONFIG_PATA_PCMCIA=m
|
|||||||
# CONFIG_PATA_VIA is not set
|
# CONFIG_PATA_VIA is not set
|
||||||
# CONFIG_PATA_WINBOND is not set
|
# CONFIG_PATA_WINBOND is not set
|
||||||
# CONFIG_PATA_PLATFORM is not set
|
# CONFIG_PATA_PLATFORM is not set
|
||||||
|
# CONFIG_PATA_SCH is not set
|
||||||
# CONFIG_MD is not set
|
# CONFIG_MD is not set
|
||||||
# CONFIG_FUSION is not set
|
# CONFIG_FUSION is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# IEEE 1394 (FireWire) support
|
# IEEE 1394 (FireWire) support
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# Enable only one of the two stacks, unless you know what you are doing
|
||||||
|
#
|
||||||
# CONFIG_FIREWIRE is not set
|
# CONFIG_FIREWIRE is not set
|
||||||
# CONFIG_IEEE1394 is not set
|
# CONFIG_IEEE1394 is not set
|
||||||
# CONFIG_I2O is not set
|
# CONFIG_I2O is not set
|
||||||
CONFIG_NETDEVICES=y
|
CONFIG_NETDEVICES=y
|
||||||
# CONFIG_NETDEVICES_MULTIQUEUE is not set
|
|
||||||
# CONFIG_DUMMY is not set
|
# CONFIG_DUMMY is not set
|
||||||
# CONFIG_BONDING is not set
|
# CONFIG_BONDING is not set
|
||||||
# CONFIG_MACVLAN is not set
|
# CONFIG_MACVLAN is not set
|
||||||
@ -725,6 +755,7 @@ CONFIG_MII=y
|
|||||||
# CONFIG_SMC91X is not set
|
# CONFIG_SMC91X is not set
|
||||||
CONFIG_DM9000=y
|
CONFIG_DM9000=y
|
||||||
CONFIG_DM9000_DEBUGLEVEL=1
|
CONFIG_DM9000_DEBUGLEVEL=1
|
||||||
|
# CONFIG_DM9000_FORCE_SIMPLE_PHY_POLL is not set
|
||||||
# CONFIG_SMC911X is not set
|
# CONFIG_SMC911X is not set
|
||||||
# CONFIG_NET_TULIP is not set
|
# CONFIG_NET_TULIP is not set
|
||||||
# CONFIG_HP100 is not set
|
# CONFIG_HP100 is not set
|
||||||
@ -780,7 +811,6 @@ CONFIG_LIBERTAS_SDIO=m
|
|||||||
# CONFIG_PRISM54 is not set
|
# CONFIG_PRISM54 is not set
|
||||||
# CONFIG_USB_ZD1201 is not set
|
# CONFIG_USB_ZD1201 is not set
|
||||||
# CONFIG_USB_NET_RNDIS_WLAN is not set
|
# CONFIG_USB_NET_RNDIS_WLAN is not set
|
||||||
# CONFIG_IWLWIFI is not set
|
|
||||||
# CONFIG_IWLWIFI_LEDS is not set
|
# CONFIG_IWLWIFI_LEDS is not set
|
||||||
# CONFIG_HOSTAP is not set
|
# CONFIG_HOSTAP is not set
|
||||||
|
|
||||||
@ -853,17 +883,18 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||||
|
# CONFIG_TOUCHSCREEN_INEXIO is not set
|
||||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||||
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
|
||||||
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
|
||||||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||||
CONFIG_TOUCHSCREEN_UCB1400=m
|
|
||||||
CONFIG_TOUCHSCREEN_WM97XX=m
|
CONFIG_TOUCHSCREEN_WM97XX=m
|
||||||
# CONFIG_TOUCHSCREEN_WM9705 is not set
|
# CONFIG_TOUCHSCREEN_WM9705 is not set
|
||||||
CONFIG_TOUCHSCREEN_WM9712=y
|
CONFIG_TOUCHSCREEN_WM9712=y
|
||||||
# CONFIG_TOUCHSCREEN_WM9713 is not set
|
# CONFIG_TOUCHSCREEN_WM9713 is not set
|
||||||
# CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set
|
# CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set
|
||||||
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
|
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
|
||||||
|
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||||
# CONFIG_INPUT_MISC is not set
|
# CONFIG_INPUT_MISC is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -880,6 +911,7 @@ CONFIG_SERIO_LIBPS2=y
|
|||||||
# Character devices
|
# Character devices
|
||||||
#
|
#
|
||||||
CONFIG_VT=y
|
CONFIG_VT=y
|
||||||
|
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||||
CONFIG_VT_CONSOLE=y
|
CONFIG_VT_CONSOLE=y
|
||||||
CONFIG_HW_CONSOLE=y
|
CONFIG_HW_CONSOLE=y
|
||||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||||
@ -922,45 +954,66 @@ CONFIG_DEVPORT=y
|
|||||||
CONFIG_I2C=y
|
CONFIG_I2C=y
|
||||||
CONFIG_I2C_BOARDINFO=y
|
CONFIG_I2C_BOARDINFO=y
|
||||||
CONFIG_I2C_CHARDEV=m
|
CONFIG_I2C_CHARDEV=m
|
||||||
|
CONFIG_I2C_HELPER_AUTO=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2C Hardware Bus support
|
# I2C Hardware Bus support
|
||||||
#
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# PC SMBus host controller drivers
|
||||||
|
#
|
||||||
# CONFIG_I2C_ALI1535 is not set
|
# CONFIG_I2C_ALI1535 is not set
|
||||||
# CONFIG_I2C_ALI1563 is not set
|
# CONFIG_I2C_ALI1563 is not set
|
||||||
# CONFIG_I2C_ALI15X3 is not set
|
# CONFIG_I2C_ALI15X3 is not set
|
||||||
# CONFIG_I2C_AMD756 is not set
|
# CONFIG_I2C_AMD756 is not set
|
||||||
# CONFIG_I2C_AMD8111 is not set
|
# CONFIG_I2C_AMD8111 is not set
|
||||||
# CONFIG_I2C_GPIO is not set
|
|
||||||
# CONFIG_I2C_I801 is not set
|
# CONFIG_I2C_I801 is not set
|
||||||
# CONFIG_I2C_I810 is not set
|
# CONFIG_I2C_ISCH is not set
|
||||||
CONFIG_I2C_PXA=y
|
|
||||||
# CONFIG_I2C_PXA_SLAVE is not set
|
|
||||||
# CONFIG_I2C_PIIX4 is not set
|
# CONFIG_I2C_PIIX4 is not set
|
||||||
# CONFIG_I2C_NFORCE2 is not set
|
# CONFIG_I2C_NFORCE2 is not set
|
||||||
# CONFIG_I2C_OCORES is not set
|
|
||||||
# CONFIG_I2C_PARPORT_LIGHT is not set
|
|
||||||
# CONFIG_I2C_PROSAVAGE is not set
|
|
||||||
# CONFIG_I2C_SAVAGE4 is not set
|
|
||||||
# CONFIG_I2C_SIMTEC is not set
|
|
||||||
# CONFIG_I2C_SIS5595 is not set
|
# CONFIG_I2C_SIS5595 is not set
|
||||||
# CONFIG_I2C_SIS630 is not set
|
# CONFIG_I2C_SIS630 is not set
|
||||||
# CONFIG_I2C_SIS96X is not set
|
# CONFIG_I2C_SIS96X is not set
|
||||||
# CONFIG_I2C_TAOS_EVM is not set
|
|
||||||
# CONFIG_I2C_STUB is not set
|
|
||||||
# CONFIG_I2C_TINY_USB is not set
|
|
||||||
# CONFIG_I2C_VIA is not set
|
# CONFIG_I2C_VIA is not set
|
||||||
# CONFIG_I2C_VIAPRO is not set
|
# CONFIG_I2C_VIAPRO is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_GPIO is not set
|
||||||
|
# CONFIG_I2C_OCORES is not set
|
||||||
|
CONFIG_I2C_PXA=y
|
||||||
|
# CONFIG_I2C_PXA_SLAVE is not set
|
||||||
|
# CONFIG_I2C_SIMTEC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# External I2C/SMBus adapter drivers
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
|
# CONFIG_I2C_TAOS_EVM is not set
|
||||||
|
# CONFIG_I2C_TINY_USB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Graphics adapter I2C/DDC channel drivers
|
||||||
|
#
|
||||||
# CONFIG_I2C_VOODOO3 is not set
|
# CONFIG_I2C_VOODOO3 is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Other I2C/SMBus bus drivers
|
||||||
|
#
|
||||||
# CONFIG_I2C_PCA_PLATFORM is not set
|
# CONFIG_I2C_PCA_PLATFORM is not set
|
||||||
|
# CONFIG_I2C_STUB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Miscellaneous I2C Chip support
|
# Miscellaneous I2C Chip support
|
||||||
#
|
#
|
||||||
# CONFIG_DS1682 is not set
|
# CONFIG_DS1682 is not set
|
||||||
|
# CONFIG_AT24 is not set
|
||||||
# CONFIG_SENSORS_EEPROM is not set
|
# CONFIG_SENSORS_EEPROM is not set
|
||||||
# CONFIG_SENSORS_PCF8574 is not set
|
# CONFIG_SENSORS_PCF8574 is not set
|
||||||
# CONFIG_PCF8575 is not set
|
# CONFIG_PCF8575 is not set
|
||||||
|
# CONFIG_SENSORS_PCA9539 is not set
|
||||||
# CONFIG_SENSORS_PCF8591 is not set
|
# CONFIG_SENSORS_PCF8591 is not set
|
||||||
# CONFIG_TPS65010 is not set
|
# CONFIG_TPS65010 is not set
|
||||||
# CONFIG_SENSORS_MAX6875 is not set
|
# CONFIG_SENSORS_MAX6875 is not set
|
||||||
@ -970,25 +1023,31 @@ CONFIG_I2C_PXA=y
|
|||||||
# CONFIG_I2C_DEBUG_BUS is not set
|
# CONFIG_I2C_DEBUG_BUS is not set
|
||||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||||
# CONFIG_SPI is not set
|
# CONFIG_SPI is not set
|
||||||
CONFIG_HAVE_GPIO_LIB=y
|
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||||
|
CONFIG_GPIOLIB=y
|
||||||
#
|
|
||||||
# GPIO Support
|
|
||||||
#
|
|
||||||
# CONFIG_DEBUG_GPIO is not set
|
# CONFIG_DEBUG_GPIO is not set
|
||||||
|
# CONFIG_GPIO_SYSFS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# I2C GPIO expanders:
|
# I2C GPIO expanders:
|
||||||
#
|
#
|
||||||
|
# CONFIG_GPIO_MAX732X is not set
|
||||||
# CONFIG_GPIO_PCA953X is not set
|
# CONFIG_GPIO_PCA953X is not set
|
||||||
# CONFIG_GPIO_PCF857X is not set
|
# CONFIG_GPIO_PCF857X is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI GPIO expanders:
|
||||||
|
#
|
||||||
|
# CONFIG_GPIO_BT8XX is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SPI GPIO expanders:
|
# SPI GPIO expanders:
|
||||||
#
|
#
|
||||||
# CONFIG_W1 is not set
|
# CONFIG_W1 is not set
|
||||||
# CONFIG_POWER_SUPPLY is not set
|
# CONFIG_POWER_SUPPLY is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
# CONFIG_THERMAL is not set
|
||||||
|
# CONFIG_THERMAL_HWMON is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
# CONFIG_WATCHDOG is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1000,10 +1059,16 @@ CONFIG_SSB_POSSIBLE=y
|
|||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_MFD_CORE is not set
|
||||||
# CONFIG_MFD_SM501 is not set
|
# CONFIG_MFD_SM501 is not set
|
||||||
# CONFIG_MFD_ASIC3 is not set
|
# CONFIG_MFD_ASIC3 is not set
|
||||||
# CONFIG_HTC_EGPIO is not set
|
# CONFIG_HTC_EGPIO is not set
|
||||||
# CONFIG_HTC_PASIC3 is not set
|
# CONFIG_HTC_PASIC3 is not set
|
||||||
|
# CONFIG_UCB1400_CORE is not set
|
||||||
|
# CONFIG_MFD_TMIO is not set
|
||||||
|
# CONFIG_MFD_T7L66XB is not set
|
||||||
|
# CONFIG_MFD_TC6387XB is not set
|
||||||
|
# CONFIG_MFD_TC6393XB is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multimedia devices
|
# Multimedia devices
|
||||||
@ -1014,6 +1079,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||||||
#
|
#
|
||||||
# CONFIG_VIDEO_DEV is not set
|
# CONFIG_VIDEO_DEV is not set
|
||||||
# CONFIG_DVB_CORE is not set
|
# CONFIG_DVB_CORE is not set
|
||||||
|
# CONFIG_VIDEO_MEDIA is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multimedia drivers
|
# Multimedia drivers
|
||||||
@ -1038,7 +1104,6 @@ CONFIG_FB_CFB_IMAGEBLIT=y
|
|||||||
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||||
# CONFIG_FB_SYS_FOPS is not set
|
# CONFIG_FB_SYS_FOPS is not set
|
||||||
CONFIG_FB_DEFERRED_IO=y
|
|
||||||
# CONFIG_FB_SVGALIB is not set
|
# CONFIG_FB_SVGALIB is not set
|
||||||
# CONFIG_FB_MACMODES is not set
|
# CONFIG_FB_MACMODES is not set
|
||||||
# CONFIG_FB_BACKLIGHT is not set
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
@ -1071,12 +1136,14 @@ CONFIG_FB_DEFERRED_IO=y
|
|||||||
# CONFIG_FB_TRIDENT is not set
|
# CONFIG_FB_TRIDENT is not set
|
||||||
# CONFIG_FB_ARK is not set
|
# CONFIG_FB_ARK is not set
|
||||||
# CONFIG_FB_PM3 is not set
|
# CONFIG_FB_PM3 is not set
|
||||||
|
# CONFIG_FB_CARMINE is not set
|
||||||
CONFIG_FB_PXA=y
|
CONFIG_FB_PXA=y
|
||||||
# CONFIG_FB_PXA_SMARTPANEL is not set
|
# CONFIG_FB_PXA_SMARTPANEL is not set
|
||||||
CONFIG_FB_PXA_PARAMETERS=y
|
CONFIG_FB_PXA_PARAMETERS=y
|
||||||
CONFIG_FB_MBX=m
|
CONFIG_FB_MBX=m
|
||||||
# CONFIG_FB_AM200EPD is not set
|
# CONFIG_FB_W100 is not set
|
||||||
# CONFIG_FB_VIRTUAL is not set
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
# CONFIG_FB_METRONOME is not set
|
||||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1099,15 +1166,7 @@ CONFIG_LOGO=y
|
|||||||
CONFIG_LOGO_LINUX_MONO=y
|
CONFIG_LOGO_LINUX_MONO=y
|
||||||
CONFIG_LOGO_LINUX_VGA16=y
|
CONFIG_LOGO_LINUX_VGA16=y
|
||||||
CONFIG_LOGO_LINUX_CLUT224=y
|
CONFIG_LOGO_LINUX_CLUT224=y
|
||||||
|
|
||||||
#
|
|
||||||
# Sound
|
|
||||||
#
|
|
||||||
CONFIG_SOUND=m
|
CONFIG_SOUND=m
|
||||||
|
|
||||||
#
|
|
||||||
# Advanced Linux Sound Architecture
|
|
||||||
#
|
|
||||||
CONFIG_SND=m
|
CONFIG_SND=m
|
||||||
CONFIG_SND_TIMER=m
|
CONFIG_SND_TIMER=m
|
||||||
CONFIG_SND_PCM=m
|
CONFIG_SND_PCM=m
|
||||||
@ -1121,19 +1180,15 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||||||
CONFIG_SND_VERBOSE_PROCFS=y
|
CONFIG_SND_VERBOSE_PROCFS=y
|
||||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_SND_DEBUG is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
|
CONFIG_SND_VMASTER=y
|
||||||
#
|
|
||||||
# Generic devices
|
|
||||||
#
|
|
||||||
CONFIG_SND_AC97_CODEC=m
|
CONFIG_SND_AC97_CODEC=m
|
||||||
|
CONFIG_SND_DRIVERS=y
|
||||||
# CONFIG_SND_DUMMY is not set
|
# CONFIG_SND_DUMMY is not set
|
||||||
# CONFIG_SND_MTPAV is not set
|
# CONFIG_SND_MTPAV is not set
|
||||||
# CONFIG_SND_SERIAL_U16550 is not set
|
# CONFIG_SND_SERIAL_U16550 is not set
|
||||||
# CONFIG_SND_MPU401 is not set
|
# CONFIG_SND_MPU401 is not set
|
||||||
|
# CONFIG_SND_AC97_POWER_SAVE is not set
|
||||||
#
|
CONFIG_SND_PCI=y
|
||||||
# PCI devices
|
|
||||||
#
|
|
||||||
# CONFIG_SND_AD1889 is not set
|
# CONFIG_SND_AD1889 is not set
|
||||||
# CONFIG_SND_ALS300 is not set
|
# CONFIG_SND_ALS300 is not set
|
||||||
# CONFIG_SND_ALI5451 is not set
|
# CONFIG_SND_ALI5451 is not set
|
||||||
@ -1193,42 +1248,16 @@ CONFIG_SND_AC97_CODEC=m
|
|||||||
# CONFIG_SND_VIRTUOSO is not set
|
# CONFIG_SND_VIRTUOSO is not set
|
||||||
# CONFIG_SND_VX222 is not set
|
# CONFIG_SND_VX222 is not set
|
||||||
# CONFIG_SND_YMFPCI is not set
|
# CONFIG_SND_YMFPCI is not set
|
||||||
# CONFIG_SND_AC97_POWER_SAVE is not set
|
CONFIG_SND_ARM=y
|
||||||
|
|
||||||
#
|
|
||||||
# ALSA ARM devices
|
|
||||||
#
|
|
||||||
CONFIG_SND_PXA2XX_PCM=m
|
CONFIG_SND_PXA2XX_PCM=m
|
||||||
CONFIG_SND_PXA2XX_AC97=m
|
CONFIG_SND_PXA2XX_AC97=m
|
||||||
|
CONFIG_SND_USB=y
|
||||||
#
|
|
||||||
# USB devices
|
|
||||||
#
|
|
||||||
# CONFIG_SND_USB_AUDIO is not set
|
# CONFIG_SND_USB_AUDIO is not set
|
||||||
# CONFIG_SND_USB_CAIAQ is not set
|
# CONFIG_SND_USB_CAIAQ is not set
|
||||||
|
CONFIG_SND_PCMCIA=y
|
||||||
#
|
|
||||||
# PCMCIA devices
|
|
||||||
#
|
|
||||||
# CONFIG_SND_VXPOCKET is not set
|
# CONFIG_SND_VXPOCKET is not set
|
||||||
# CONFIG_SND_PDAUDIOCF is not set
|
# CONFIG_SND_PDAUDIOCF is not set
|
||||||
|
|
||||||
#
|
|
||||||
# System on Chip audio support
|
|
||||||
#
|
|
||||||
# CONFIG_SND_SOC is not set
|
# CONFIG_SND_SOC is not set
|
||||||
|
|
||||||
#
|
|
||||||
# ALSA SoC audio for Freescale SOCs
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# SoC Audio for the Texas Instruments OMAP
|
|
||||||
#
|
|
||||||
|
|
||||||
#
|
|
||||||
# Open Sound System
|
|
||||||
#
|
|
||||||
# CONFIG_SOUND_PRIME is not set
|
# CONFIG_SOUND_PRIME is not set
|
||||||
CONFIG_AC97_BUS=m
|
CONFIG_AC97_BUS=m
|
||||||
CONFIG_HID_SUPPORT=y
|
CONFIG_HID_SUPPORT=y
|
||||||
@ -1261,12 +1290,15 @@ CONFIG_USB_DEVICEFS=y
|
|||||||
# CONFIG_USB_OTG is not set
|
# CONFIG_USB_OTG is not set
|
||||||
# CONFIG_USB_OTG_WHITELIST is not set
|
# CONFIG_USB_OTG_WHITELIST is not set
|
||||||
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
||||||
|
CONFIG_USB_MON=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Host Controller Drivers
|
# USB Host Controller Drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_USB_C67X00_HCD is not set
|
||||||
# CONFIG_USB_EHCI_HCD is not set
|
# CONFIG_USB_EHCI_HCD is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
|
# CONFIG_USB_ISP1760_HCD is not set
|
||||||
CONFIG_USB_OHCI_HCD=y
|
CONFIG_USB_OHCI_HCD=y
|
||||||
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
|
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
|
||||||
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
|
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
|
||||||
@ -1274,12 +1306,14 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
|||||||
# CONFIG_USB_UHCI_HCD is not set
|
# CONFIG_USB_UHCI_HCD is not set
|
||||||
# CONFIG_USB_SL811_HCD is not set
|
# CONFIG_USB_SL811_HCD is not set
|
||||||
# CONFIG_USB_R8A66597_HCD is not set
|
# CONFIG_USB_R8A66597_HCD is not set
|
||||||
|
# CONFIG_USB_MUSB_HDRC is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Device Class drivers
|
# USB Device Class drivers
|
||||||
#
|
#
|
||||||
# CONFIG_USB_ACM is not set
|
# CONFIG_USB_ACM is not set
|
||||||
# CONFIG_USB_PRINTER is not set
|
# CONFIG_USB_PRINTER is not set
|
||||||
|
# CONFIG_USB_WDM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||||
@ -1309,7 +1343,6 @@ CONFIG_USB_STORAGE=y
|
|||||||
#
|
#
|
||||||
# CONFIG_USB_MDC800 is not set
|
# CONFIG_USB_MDC800 is not set
|
||||||
# CONFIG_USB_MICROTEK is not set
|
# CONFIG_USB_MICROTEK is not set
|
||||||
CONFIG_USB_MON=y
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB port drivers
|
# USB port drivers
|
||||||
@ -1322,7 +1355,6 @@ CONFIG_USB_MON=y
|
|||||||
# CONFIG_USB_EMI62 is not set
|
# CONFIG_USB_EMI62 is not set
|
||||||
# CONFIG_USB_EMI26 is not set
|
# CONFIG_USB_EMI26 is not set
|
||||||
# CONFIG_USB_ADUTUX is not set
|
# CONFIG_USB_ADUTUX is not set
|
||||||
# CONFIG_USB_AUERSWALD is not set
|
|
||||||
# CONFIG_USB_RIO500 is not set
|
# CONFIG_USB_RIO500 is not set
|
||||||
# CONFIG_USB_LEGOTOWER is not set
|
# CONFIG_USB_LEGOTOWER is not set
|
||||||
# CONFIG_USB_LCD is not set
|
# CONFIG_USB_LCD is not set
|
||||||
@ -1338,6 +1370,7 @@ CONFIG_USB_MON=y
|
|||||||
# CONFIG_USB_TRANCEVIBRATOR is not set
|
# CONFIG_USB_TRANCEVIBRATOR is not set
|
||||||
# CONFIG_USB_IOWARRIOR is not set
|
# CONFIG_USB_IOWARRIOR is not set
|
||||||
# CONFIG_USB_TEST is not set
|
# CONFIG_USB_TEST is not set
|
||||||
|
# CONFIG_USB_ISIGHTFW is not set
|
||||||
# CONFIG_USB_GADGET is not set
|
# CONFIG_USB_GADGET is not set
|
||||||
CONFIG_MMC=m
|
CONFIG_MMC=m
|
||||||
# CONFIG_MMC_DEBUG is not set
|
# CONFIG_MMC_DEBUG is not set
|
||||||
@ -1349,6 +1382,7 @@ CONFIG_MMC=m
|
|||||||
CONFIG_MMC_BLOCK=m
|
CONFIG_MMC_BLOCK=m
|
||||||
CONFIG_MMC_BLOCK_BOUNCE=y
|
CONFIG_MMC_BLOCK_BOUNCE=y
|
||||||
# CONFIG_SDIO_UART is not set
|
# CONFIG_SDIO_UART is not set
|
||||||
|
# CONFIG_MMC_TEST is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# MMC/SD Host Controller Drivers
|
# MMC/SD Host Controller Drivers
|
||||||
@ -1356,14 +1390,19 @@ CONFIG_MMC_BLOCK_BOUNCE=y
|
|||||||
CONFIG_MMC_PXA=m
|
CONFIG_MMC_PXA=m
|
||||||
# CONFIG_MMC_SDHCI is not set
|
# CONFIG_MMC_SDHCI is not set
|
||||||
# CONFIG_MMC_TIFM_SD is not set
|
# CONFIG_MMC_TIFM_SD is not set
|
||||||
|
# CONFIG_MMC_SDRICOH_CS is not set
|
||||||
|
# CONFIG_MEMSTICK is not set
|
||||||
|
# CONFIG_ACCESSIBILITY is not set
|
||||||
CONFIG_NEW_LEDS=y
|
CONFIG_NEW_LEDS=y
|
||||||
CONFIG_LEDS_CLASS=y
|
CONFIG_LEDS_CLASS=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# LED drivers
|
# LED drivers
|
||||||
#
|
#
|
||||||
|
# CONFIG_LEDS_PCA9532 is not set
|
||||||
# CONFIG_LEDS_GPIO is not set
|
# CONFIG_LEDS_GPIO is not set
|
||||||
CONFIG_LEDS_CM_X270=y
|
CONFIG_LEDS_CM_X270=y
|
||||||
|
# CONFIG_LEDS_PCA955X is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# LED Triggers
|
# LED Triggers
|
||||||
@ -1401,6 +1440,7 @@ CONFIG_RTC_INTF_DEV=y
|
|||||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||||
# CONFIG_RTC_DRV_M41T80 is not set
|
# CONFIG_RTC_DRV_M41T80 is not set
|
||||||
# CONFIG_RTC_DRV_S35390A is not set
|
# CONFIG_RTC_DRV_S35390A is not set
|
||||||
|
# CONFIG_RTC_DRV_FM3130 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SPI RTC drivers
|
# SPI RTC drivers
|
||||||
@ -1422,6 +1462,15 @@ CONFIG_RTC_DRV_V3020=y
|
|||||||
# on-CPU RTC drivers
|
# on-CPU RTC drivers
|
||||||
#
|
#
|
||||||
CONFIG_RTC_DRV_SA1100=y
|
CONFIG_RTC_DRV_SA1100=y
|
||||||
|
# CONFIG_DMADEVICES is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Voltage and Current regulators
|
||||||
|
#
|
||||||
|
# CONFIG_REGULATOR is not set
|
||||||
|
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||||
|
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||||
|
# CONFIG_REGULATOR_BQ24022 is not set
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -1501,6 +1550,7 @@ CONFIG_JFFS2_RTIME=y
|
|||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
# CONFIG_MINIX_FS is not set
|
# CONFIG_MINIX_FS is not set
|
||||||
|
# CONFIG_OMFS_FS is not set
|
||||||
# CONFIG_HPFS_FS is not set
|
# CONFIG_HPFS_FS is not set
|
||||||
# CONFIG_QNX4FS_FS is not set
|
# CONFIG_QNX4FS_FS is not set
|
||||||
# CONFIG_ROMFS_FS is not set
|
# CONFIG_ROMFS_FS is not set
|
||||||
@ -1511,13 +1561,12 @@ CONFIG_NFS_FS=y
|
|||||||
CONFIG_NFS_V3=y
|
CONFIG_NFS_V3=y
|
||||||
# CONFIG_NFS_V3_ACL is not set
|
# CONFIG_NFS_V3_ACL is not set
|
||||||
# CONFIG_NFS_V4 is not set
|
# CONFIG_NFS_V4 is not set
|
||||||
# CONFIG_NFSD is not set
|
|
||||||
CONFIG_ROOT_NFS=y
|
CONFIG_ROOT_NFS=y
|
||||||
|
# CONFIG_NFSD is not set
|
||||||
CONFIG_LOCKD=y
|
CONFIG_LOCKD=y
|
||||||
CONFIG_LOCKD_V4=y
|
CONFIG_LOCKD_V4=y
|
||||||
CONFIG_NFS_COMMON=y
|
CONFIG_NFS_COMMON=y
|
||||||
CONFIG_SUNRPC=y
|
CONFIG_SUNRPC=y
|
||||||
# CONFIG_SUNRPC_BIND34 is not set
|
|
||||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||||
# CONFIG_SMB_FS is not set
|
# CONFIG_SMB_FS is not set
|
||||||
@ -1626,6 +1675,7 @@ CONFIG_DEBUG_KERNEL=y
|
|||||||
# CONFIG_DEBUG_INFO is not set
|
# CONFIG_DEBUG_INFO is not set
|
||||||
# CONFIG_DEBUG_VM is not set
|
# CONFIG_DEBUG_VM is not set
|
||||||
# CONFIG_DEBUG_WRITECOUNT is not set
|
# CONFIG_DEBUG_WRITECOUNT is not set
|
||||||
|
# CONFIG_DEBUG_MEMORY_INIT is not set
|
||||||
# CONFIG_DEBUG_LIST is not set
|
# CONFIG_DEBUG_LIST is not set
|
||||||
# CONFIG_DEBUG_SG is not set
|
# CONFIG_DEBUG_SG is not set
|
||||||
CONFIG_FRAME_POINTER=y
|
CONFIG_FRAME_POINTER=y
|
||||||
@ -1633,7 +1683,17 @@ CONFIG_FRAME_POINTER=y
|
|||||||
# CONFIG_RCU_TORTURE_TEST is not set
|
# CONFIG_RCU_TORTURE_TEST is not set
|
||||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
|
# CONFIG_LATENCYTOP is not set
|
||||||
|
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||||
|
CONFIG_HAVE_FTRACE=y
|
||||||
|
CONFIG_HAVE_DYNAMIC_FTRACE=y
|
||||||
|
# CONFIG_FTRACE is not set
|
||||||
|
# CONFIG_IRQSOFF_TRACER is not set
|
||||||
|
# CONFIG_SCHED_TRACER is not set
|
||||||
|
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||||
# CONFIG_SAMPLES is not set
|
# CONFIG_SAMPLES is not set
|
||||||
|
CONFIG_HAVE_ARCH_KGDB=y
|
||||||
|
# CONFIG_KGDB is not set
|
||||||
CONFIG_DEBUG_USER=y
|
CONFIG_DEBUG_USER=y
|
||||||
CONFIG_DEBUG_ERRORS=y
|
CONFIG_DEBUG_ERRORS=y
|
||||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||||
@ -1689,6 +1749,10 @@ CONFIG_CRYPTO=y
|
|||||||
# CONFIG_CRYPTO_MD4 is not set
|
# CONFIG_CRYPTO_MD4 is not set
|
||||||
# CONFIG_CRYPTO_MD5 is not set
|
# CONFIG_CRYPTO_MD5 is not set
|
||||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||||
|
# CONFIG_CRYPTO_RMD128 is not set
|
||||||
|
# CONFIG_CRYPTO_RMD160 is not set
|
||||||
|
# CONFIG_CRYPTO_RMD256 is not set
|
||||||
|
# CONFIG_CRYPTO_RMD320 is not set
|
||||||
# CONFIG_CRYPTO_SHA1 is not set
|
# CONFIG_CRYPTO_SHA1 is not set
|
||||||
# CONFIG_CRYPTO_SHA256 is not set
|
# CONFIG_CRYPTO_SHA256 is not set
|
||||||
# CONFIG_CRYPTO_SHA512 is not set
|
# CONFIG_CRYPTO_SHA512 is not set
|
||||||
@ -1729,6 +1793,7 @@ CONFIG_BITREVERSE=y
|
|||||||
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
|
# CONFIG_GENERIC_FIND_NEXT_BIT is not set
|
||||||
CONFIG_CRC_CCITT=m
|
CONFIG_CRC_CCITT=m
|
||||||
# CONFIG_CRC16 is not set
|
# CONFIG_CRC16 is not set
|
||||||
|
# CONFIG_CRC_T10DIF is not set
|
||||||
# CONFIG_CRC_ITU_T is not set
|
# CONFIG_CRC_ITU_T is not set
|
||||||
CONFIG_CRC32=y
|
CONFIG_CRC32=y
|
||||||
# CONFIG_CRC7 is not set
|
# CONFIG_CRC7 is not set
|
@ -12,7 +12,7 @@ extern void __bug(const char *file, int line) __attribute__((noreturn));
|
|||||||
#else
|
#else
|
||||||
|
|
||||||
/* this just causes an oops */
|
/* this just causes an oops */
|
||||||
#define BUG() (*(int *)0 = 0)
|
#define BUG() do { *(int *)0 = 0; } while (1)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -444,94 +444,4 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
|||||||
dmac_inv_range(start, start + size);
|
dmac_inv_range(start, start + size);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define __cacheid_present(val) (val != read_cpuid(CPUID_ID))
|
|
||||||
#define __cacheid_type_v7(val) ((val & (7 << 29)) == (4 << 29))
|
|
||||||
|
|
||||||
#define __cacheid_vivt_prev7(val) ((val & (15 << 25)) != (14 << 25))
|
|
||||||
#define __cacheid_vipt_prev7(val) ((val & (15 << 25)) == (14 << 25))
|
|
||||||
#define __cacheid_vipt_nonaliasing_prev7(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25))
|
|
||||||
#define __cacheid_vipt_aliasing_prev7(val) ((val & (15 << 25 | 1 << 23)) == (14 << 25 | 1 << 23))
|
|
||||||
|
|
||||||
#define __cacheid_vivt(val) (__cacheid_type_v7(val) ? 0 : __cacheid_vivt_prev7(val))
|
|
||||||
#define __cacheid_vipt(val) (__cacheid_type_v7(val) ? 1 : __cacheid_vipt_prev7(val))
|
|
||||||
#define __cacheid_vipt_nonaliasing(val) (__cacheid_type_v7(val) ? 1 : __cacheid_vipt_nonaliasing_prev7(val))
|
|
||||||
#define __cacheid_vipt_aliasing(val) (__cacheid_type_v7(val) ? 0 : __cacheid_vipt_aliasing_prev7(val))
|
|
||||||
#define __cacheid_vivt_asid_tagged_instr(val) (__cacheid_type_v7(val) ? ((val & (3 << 14)) == (1 << 14)) : 0)
|
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
|
|
||||||
/*
|
|
||||||
* VIVT caches only
|
|
||||||
*/
|
|
||||||
#define cache_is_vivt() 1
|
|
||||||
#define cache_is_vipt() 0
|
|
||||||
#define cache_is_vipt_nonaliasing() 0
|
|
||||||
#define cache_is_vipt_aliasing() 0
|
|
||||||
#define icache_is_vivt_asid_tagged() 0
|
|
||||||
|
|
||||||
#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
|
|
||||||
/*
|
|
||||||
* VIPT caches only
|
|
||||||
*/
|
|
||||||
#define cache_is_vivt() 0
|
|
||||||
#define cache_is_vipt() 1
|
|
||||||
#define cache_is_vipt_nonaliasing() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_vipt_nonaliasing(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cache_is_vipt_aliasing() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_vipt_aliasing(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define icache_is_vivt_asid_tagged() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_vivt_asid_tagged_instr(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#else
|
|
||||||
/*
|
|
||||||
* VIVT or VIPT caches. Note that this is unreliable since ARM926
|
|
||||||
* and V6 CPUs satisfy the "(val & (15 << 25)) == (14 << 25)" test.
|
|
||||||
* There's no way to tell from the CacheType register what type (!)
|
|
||||||
* the cache is.
|
|
||||||
*/
|
|
||||||
#define cache_is_vivt() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
(!__cacheid_present(__val)) || __cacheid_vivt(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cache_is_vipt() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_present(__val) && __cacheid_vipt(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cache_is_vipt_nonaliasing() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_present(__val) && \
|
|
||||||
__cacheid_vipt_nonaliasing(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define cache_is_vipt_aliasing() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_present(__val) && \
|
|
||||||
__cacheid_vipt_aliasing(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#define icache_is_vivt_asid_tagged() \
|
|
||||||
({ \
|
|
||||||
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|
|
||||||
__cacheid_present(__val) && \
|
|
||||||
__cacheid_vivt_asid_tagged_instr(__val); \
|
|
||||||
})
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
52
arch/arm/include/asm/cachetype.h
Normal file
52
arch/arm/include/asm/cachetype.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#ifndef __ASM_ARM_CACHETYPE_H
|
||||||
|
#define __ASM_ARM_CACHETYPE_H
|
||||||
|
|
||||||
|
#define CACHEID_VIVT (1 << 0)
|
||||||
|
#define CACHEID_VIPT_NONALIASING (1 << 1)
|
||||||
|
#define CACHEID_VIPT_ALIASING (1 << 2)
|
||||||
|
#define CACHEID_VIPT (CACHEID_VIPT_ALIASING|CACHEID_VIPT_NONALIASING)
|
||||||
|
#define CACHEID_ASID_TAGGED (1 << 3)
|
||||||
|
|
||||||
|
extern unsigned int cacheid;
|
||||||
|
|
||||||
|
#define cache_is_vivt() cacheid_is(CACHEID_VIVT)
|
||||||
|
#define cache_is_vipt() cacheid_is(CACHEID_VIPT)
|
||||||
|
#define cache_is_vipt_nonaliasing() cacheid_is(CACHEID_VIPT_NONALIASING)
|
||||||
|
#define cache_is_vipt_aliasing() cacheid_is(CACHEID_VIPT_ALIASING)
|
||||||
|
#define icache_is_vivt_asid_tagged() cacheid_is(CACHEID_ASID_TAGGED)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __LINUX_ARM_ARCH__ is the minimum supported CPU architecture
|
||||||
|
* Mask out support which will never be present on newer CPUs.
|
||||||
|
* - v6+ is never VIVT
|
||||||
|
* - v7+ VIPT never aliases
|
||||||
|
*/
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 7
|
||||||
|
#define __CACHEID_ARCH_MIN (CACHEID_VIPT_NONALIASING | CACHEID_ASID_TAGGED)
|
||||||
|
#elif __LINUX_ARM_ARCH__ >= 6
|
||||||
|
#define __CACHEID_ARCH_MIN (~CACHEID_VIVT)
|
||||||
|
#else
|
||||||
|
#define __CACHEID_ARCH_MIN (~0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Mask out support which isn't configured
|
||||||
|
*/
|
||||||
|
#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
|
||||||
|
#define __CACHEID_ALWAYS (CACHEID_VIVT)
|
||||||
|
#define __CACHEID_NEVER (~CACHEID_VIVT)
|
||||||
|
#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
|
||||||
|
#define __CACHEID_ALWAYS (0)
|
||||||
|
#define __CACHEID_NEVER (CACHEID_VIVT)
|
||||||
|
#else
|
||||||
|
#define __CACHEID_ALWAYS (0)
|
||||||
|
#define __CACHEID_NEVER (0)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static inline unsigned int __attribute__((pure)) cacheid_is(unsigned int mask)
|
||||||
|
{
|
||||||
|
return (__CACHEID_ALWAYS & mask) |
|
||||||
|
(~__CACHEID_NEVER & __CACHEID_ARCH_MIN & mask & cacheid);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
64
arch/arm/include/asm/cputype.h
Normal file
64
arch/arm/include/asm/cputype.h
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
#ifndef __ASM_ARM_CPUTYPE_H
|
||||||
|
#define __ASM_ARM_CPUTYPE_H
|
||||||
|
|
||||||
|
#include <linux/stringify.h>
|
||||||
|
|
||||||
|
#define CPUID_ID 0
|
||||||
|
#define CPUID_CACHETYPE 1
|
||||||
|
#define CPUID_TCM 2
|
||||||
|
#define CPUID_TLBTYPE 3
|
||||||
|
|
||||||
|
#ifdef CONFIG_CPU_CP15
|
||||||
|
#define read_cpuid(reg) \
|
||||||
|
({ \
|
||||||
|
unsigned int __val; \
|
||||||
|
asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \
|
||||||
|
: "=r" (__val) \
|
||||||
|
: \
|
||||||
|
: "cc"); \
|
||||||
|
__val; \
|
||||||
|
})
|
||||||
|
#else
|
||||||
|
extern unsigned int processor_id;
|
||||||
|
#define read_cpuid(reg) (processor_id)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The CPU ID never changes at run time, so we might as well tell the
|
||||||
|
* compiler that it's constant. Use this function to read the CPU ID
|
||||||
|
* rather than directly reading processor_id or read_cpuid() directly.
|
||||||
|
*/
|
||||||
|
static inline unsigned int __attribute_const__ read_cpuid_id(void)
|
||||||
|
{
|
||||||
|
return read_cpuid(CPUID_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline unsigned int __attribute_const__ read_cpuid_cachetype(void)
|
||||||
|
{
|
||||||
|
return read_cpuid(CPUID_CACHETYPE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Intel's XScale3 core supports some v6 features (supersections, L2)
|
||||||
|
* but advertises itself as v5 as it does not support the v6 ISA. For
|
||||||
|
* this reason, we need a way to explicitly test for this type of CPU.
|
||||||
|
*/
|
||||||
|
#ifndef CONFIG_CPU_XSC3
|
||||||
|
#define cpu_is_xsc3() 0
|
||||||
|
#else
|
||||||
|
static inline int cpu_is_xsc3(void)
|
||||||
|
{
|
||||||
|
if ((read_cpuid_id() & 0xffffe000) == 0x69056000)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3)
|
||||||
|
#define cpu_is_xscale() 0
|
||||||
|
#else
|
||||||
|
#define cpu_is_xscale() 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -104,15 +104,14 @@ static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
|||||||
* Dummy noncoherent implementation. We don't provide a dma_cache_sync
|
* Dummy noncoherent implementation. We don't provide a dma_cache_sync
|
||||||
* function so drivers using this API are highlighted with build warnings.
|
* function so drivers using this API are highlighted with build warnings.
|
||||||
*/
|
*/
|
||||||
static inline void *
|
static inline void *dma_alloc_noncoherent(struct device *dev, size_t size,
|
||||||
dma_alloc_noncoherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp)
|
dma_addr_t *handle, gfp_t gfp)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void dma_free_noncoherent(struct device *dev, size_t size,
|
||||||
dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr,
|
void *cpu_addr, dma_addr_t handle)
|
||||||
dma_addr_t handle)
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,8 +126,7 @@ dma_free_noncoherent(struct device *dev, size_t size, void *cpu_addr,
|
|||||||
* return the CPU-viewed address, and sets @handle to be the
|
* return the CPU-viewed address, and sets @handle to be the
|
||||||
* device-viewed address.
|
* device-viewed address.
|
||||||
*/
|
*/
|
||||||
extern void *
|
extern void *dma_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t);
|
||||||
dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dma_free_coherent - free memory allocated by dma_alloc_coherent
|
* dma_free_coherent - free memory allocated by dma_alloc_coherent
|
||||||
@ -143,9 +141,7 @@ dma_alloc_coherent(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gf
|
|||||||
* References to memory and mappings associated with cpu_addr/handle
|
* References to memory and mappings associated with cpu_addr/handle
|
||||||
* during and after this call executing are illegal.
|
* during and after this call executing are illegal.
|
||||||
*/
|
*/
|
||||||
extern void
|
extern void dma_free_coherent(struct device *, size_t, void *, dma_addr_t);
|
||||||
dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
|
|
||||||
dma_addr_t handle);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dma_mmap_coherent - map a coherent DMA allocation into user space
|
* dma_mmap_coherent - map a coherent DMA allocation into user space
|
||||||
@ -159,8 +155,8 @@ dma_free_coherent(struct device *dev, size_t size, void *cpu_addr,
|
|||||||
* into user space. The coherent DMA buffer must not be freed by the
|
* into user space. The coherent DMA buffer must not be freed by the
|
||||||
* driver until the user space mapping has been released.
|
* driver until the user space mapping has been released.
|
||||||
*/
|
*/
|
||||||
int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
|
int dma_mmap_coherent(struct device *, struct vm_area_struct *,
|
||||||
void *cpu_addr, dma_addr_t handle, size_t size);
|
void *, dma_addr_t, size_t);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -174,282 +170,16 @@ int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma,
|
|||||||
* return the CPU-viewed address, and sets @handle to be the
|
* return the CPU-viewed address, and sets @handle to be the
|
||||||
* device-viewed address.
|
* device-viewed address.
|
||||||
*/
|
*/
|
||||||
extern void *
|
extern void *dma_alloc_writecombine(struct device *, size_t, dma_addr_t *,
|
||||||
dma_alloc_writecombine(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp);
|
gfp_t);
|
||||||
|
|
||||||
#define dma_free_writecombine(dev,size,cpu_addr,handle) \
|
#define dma_free_writecombine(dev,size,cpu_addr,handle) \
|
||||||
dma_free_coherent(dev,size,cpu_addr,handle)
|
dma_free_coherent(dev,size,cpu_addr,handle)
|
||||||
|
|
||||||
int dma_mmap_writecombine(struct device *dev, struct vm_area_struct *vma,
|
int dma_mmap_writecombine(struct device *, struct vm_area_struct *,
|
||||||
void *cpu_addr, dma_addr_t handle, size_t size);
|
void *, dma_addr_t, size_t);
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_map_single - map a single buffer for streaming DMA
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @cpu_addr: CPU direct mapped address of buffer
|
|
||||||
* @size: size of buffer to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Ensure that any data held in the cache is appropriately discarded
|
|
||||||
* or written back.
|
|
||||||
*
|
|
||||||
* The device owns this memory once this call has completed. The CPU
|
|
||||||
* can regain ownership by calling dma_unmap_single() or
|
|
||||||
* dma_sync_single_for_cpu().
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline dma_addr_t
|
|
||||||
dma_map_single(struct device *dev, void *cpu_addr, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(cpu_addr, size, dir);
|
|
||||||
|
|
||||||
return virt_to_dma(dev, cpu_addr);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern dma_addr_t dma_map_single(struct device *,void *, size_t, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_map_page - map a portion of a page for streaming DMA
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @page: page that buffer resides in
|
|
||||||
* @offset: offset into page for start of buffer
|
|
||||||
* @size: size of buffer to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Ensure that any data held in the cache is appropriately discarded
|
|
||||||
* or written back.
|
|
||||||
*
|
|
||||||
* The device owns this memory once this call has completed. The CPU
|
|
||||||
* can regain ownership by calling dma_unmap_page() or
|
|
||||||
* dma_sync_single_for_cpu().
|
|
||||||
*/
|
|
||||||
static inline dma_addr_t
|
|
||||||
dma_map_page(struct device *dev, struct page *page,
|
|
||||||
unsigned long offset, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
return dma_map_single(dev, page_address(page) + offset, size, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_unmap_single - unmap a single buffer previously mapped
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @handle: DMA address of buffer
|
|
||||||
* @size: size of buffer to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Unmap a single streaming mode DMA translation. The handle and size
|
|
||||||
* must match what was provided in the previous dma_map_single() call.
|
|
||||||
* All other usages are undefined.
|
|
||||||
*
|
|
||||||
* After this call, reads by the CPU to the buffer are guaranteed to see
|
|
||||||
* whatever the device wrote there.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline void
|
|
||||||
dma_unmap_single(struct device *dev, dma_addr_t handle, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
/* nothing to do */
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern void dma_unmap_single(struct device *, dma_addr_t, size_t, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @handle: DMA address of buffer
|
|
||||||
* @size: size of buffer to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Unmap a single streaming mode DMA translation. The handle and size
|
|
||||||
* must match what was provided in the previous dma_map_single() call.
|
|
||||||
* All other usages are undefined.
|
|
||||||
*
|
|
||||||
* After this call, reads by the CPU to the buffer are guaranteed to see
|
|
||||||
* whatever the device wrote there.
|
|
||||||
*/
|
|
||||||
static inline void
|
|
||||||
dma_unmap_page(struct device *dev, dma_addr_t handle, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
dma_unmap_single(dev, handle, size, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_map_sg - map a set of SG buffers for streaming mode DMA
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @sg: list of buffers
|
|
||||||
* @nents: number of buffers to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Map a set of buffers described by scatterlist in streaming
|
|
||||||
* mode for DMA. This is the scatter-gather version of the
|
|
||||||
* above dma_map_single interface. Here the scatter gather list
|
|
||||||
* elements are each tagged with the appropriate dma address
|
|
||||||
* and length. They are obtained via sg_dma_{address,length}(SG).
|
|
||||||
*
|
|
||||||
* NOTE: An implementation may be able to use a smaller number of
|
|
||||||
* DMA address/length pairs than there are SG table elements.
|
|
||||||
* (for example via virtual mapping capabilities)
|
|
||||||
* The routine returns the number of addr/length pairs actually
|
|
||||||
* used, at most nents.
|
|
||||||
*
|
|
||||||
* Device ownership issues as mentioned above for dma_map_single are
|
|
||||||
* the same here.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline int
|
|
||||||
dma_map_sg(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
|
||||||
char *virt;
|
|
||||||
|
|
||||||
sg->dma_address = page_to_dma(dev, sg_page(sg)) + sg->offset;
|
|
||||||
virt = sg_virt(sg);
|
|
||||||
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(virt, sg->length, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
return nents;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern int dma_map_sg(struct device *, struct scatterlist *, int, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_unmap_sg - unmap a set of SG buffers mapped by dma_map_sg
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @sg: list of buffers
|
|
||||||
* @nents: number of buffers to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Unmap a set of streaming mode DMA translations.
|
|
||||||
* Again, CPU read rules concerning calls here are the same as for
|
|
||||||
* dma_unmap_single() above.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline void
|
|
||||||
dma_unmap_sg(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* nothing to do */
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern void dma_unmap_sg(struct device *, struct scatterlist *, int, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_sync_single_range_for_cpu
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @handle: DMA address of buffer
|
|
||||||
* @offset: offset of region to start sync
|
|
||||||
* @size: size of region to sync
|
|
||||||
* @dir: DMA transfer direction (same as passed to dma_map_single)
|
|
||||||
*
|
|
||||||
* Make physical memory consistent for a single streaming mode DMA
|
|
||||||
* translation after a transfer.
|
|
||||||
*
|
|
||||||
* If you perform a dma_map_single() but wish to interrogate the
|
|
||||||
* buffer using the cpu, yet do not wish to teardown the PCI dma
|
|
||||||
* mapping, you must call this function before doing so. At the
|
|
||||||
* next point you give the PCI dma address back to the card, you
|
|
||||||
* must first the perform a dma_sync_for_device, and then the
|
|
||||||
* device again owns the buffer.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline void
|
|
||||||
dma_sync_single_range_for_cpu(struct device *dev, dma_addr_t handle,
|
|
||||||
unsigned long offset, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
dma_sync_single_range_for_device(struct device *dev, dma_addr_t handle,
|
|
||||||
unsigned long offset, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern void dma_sync_single_range_for_cpu(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction);
|
|
||||||
extern void dma_sync_single_range_for_device(struct device *, dma_addr_t, unsigned long, size_t, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
dma_sync_single_for_cpu(struct device *dev, dma_addr_t handle, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
dma_sync_single_range_for_cpu(dev, handle, 0, size, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
dma_sync_single_for_device(struct device *dev, dma_addr_t handle, size_t size,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
dma_sync_single_range_for_device(dev, handle, 0, size, dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* dma_sync_sg_for_cpu
|
|
||||||
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
|
||||||
* @sg: list of buffers
|
|
||||||
* @nents: number of buffers to map
|
|
||||||
* @dir: DMA transfer direction
|
|
||||||
*
|
|
||||||
* Make physical memory consistent for a set of streaming
|
|
||||||
* mode DMA translations after a transfer.
|
|
||||||
*
|
|
||||||
* The same as dma_sync_single_for_* but for a scatter-gather list,
|
|
||||||
* same rules and usage.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_DMABOUNCE
|
|
||||||
static inline void
|
|
||||||
dma_sync_sg_for_cpu(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
|
||||||
char *virt = sg_virt(sg);
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(virt, sg->length, dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void
|
|
||||||
dma_sync_sg_for_device(struct device *dev, struct scatterlist *sg, int nents,
|
|
||||||
enum dma_data_direction dir)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < nents; i++, sg++) {
|
|
||||||
char *virt = sg_virt(sg);
|
|
||||||
if (!arch_is_coherent())
|
|
||||||
dma_cache_maint(virt, sg->length, dir);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
extern void dma_sync_sg_for_cpu(struct device*, struct scatterlist*, int, enum dma_data_direction);
|
|
||||||
extern void dma_sync_sg_for_device(struct device*, struct scatterlist*, int, enum dma_data_direction);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_DMABOUNCE
|
#ifdef CONFIG_DMABOUNCE
|
||||||
/*
|
/*
|
||||||
* For SA-1111, IXP425, and ADI systems the dma-mapping functions are "magic"
|
* For SA-1111, IXP425, and ADI systems the dma-mapping functions are "magic"
|
||||||
@ -475,7 +205,8 @@ extern void dma_sync_sg_for_device(struct device*, struct scatterlist*, int, enu
|
|||||||
* appropriate DMA pools for the device.
|
* appropriate DMA pools for the device.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
extern int dmabounce_register_dev(struct device *, unsigned long, unsigned long);
|
extern int dmabounce_register_dev(struct device *, unsigned long,
|
||||||
|
unsigned long);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dmabounce_unregister_dev
|
* dmabounce_unregister_dev
|
||||||
@ -506,7 +237,184 @@ extern void dmabounce_unregister_dev(struct device *);
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
|
extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The DMA API, implemented by dmabounce.c. See below for descriptions.
|
||||||
|
*/
|
||||||
|
extern dma_addr_t dma_map_single(struct device *, void *, size_t,
|
||||||
|
enum dma_data_direction);
|
||||||
|
extern dma_addr_t dma_map_page(struct device *, struct page *,
|
||||||
|
unsigned long, size_t, enum dma_data_direction);
|
||||||
|
extern void dma_unmap_single(struct device *, dma_addr_t, size_t,
|
||||||
|
enum dma_data_direction);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Private functions
|
||||||
|
*/
|
||||||
|
int dmabounce_sync_for_cpu(struct device *, dma_addr_t, unsigned long,
|
||||||
|
size_t, enum dma_data_direction);
|
||||||
|
int dmabounce_sync_for_device(struct device *, dma_addr_t, unsigned long,
|
||||||
|
size_t, enum dma_data_direction);
|
||||||
|
#else
|
||||||
|
#define dmabounce_sync_for_cpu(dev,dma,off,sz,dir) (1)
|
||||||
|
#define dmabounce_sync_for_device(dev,dma,off,sz,dir) (1)
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dma_map_single - map a single buffer for streaming DMA
|
||||||
|
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||||
|
* @cpu_addr: CPU direct mapped address of buffer
|
||||||
|
* @size: size of buffer to map
|
||||||
|
* @dir: DMA transfer direction
|
||||||
|
*
|
||||||
|
* Ensure that any data held in the cache is appropriately discarded
|
||||||
|
* or written back.
|
||||||
|
*
|
||||||
|
* The device owns this memory once this call has completed. The CPU
|
||||||
|
* can regain ownership by calling dma_unmap_single() or
|
||||||
|
* dma_sync_single_for_cpu().
|
||||||
|
*/
|
||||||
|
static inline dma_addr_t dma_map_single(struct device *dev, void *cpu_addr,
|
||||||
|
size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
|
if (!arch_is_coherent())
|
||||||
|
dma_cache_maint(cpu_addr, size, dir);
|
||||||
|
|
||||||
|
return virt_to_dma(dev, cpu_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dma_map_page - map a portion of a page for streaming DMA
|
||||||
|
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||||
|
* @page: page that buffer resides in
|
||||||
|
* @offset: offset into page for start of buffer
|
||||||
|
* @size: size of buffer to map
|
||||||
|
* @dir: DMA transfer direction
|
||||||
|
*
|
||||||
|
* Ensure that any data held in the cache is appropriately discarded
|
||||||
|
* or written back.
|
||||||
|
*
|
||||||
|
* The device owns this memory once this call has completed. The CPU
|
||||||
|
* can regain ownership by calling dma_unmap_page().
|
||||||
|
*/
|
||||||
|
static inline dma_addr_t dma_map_page(struct device *dev, struct page *page,
|
||||||
|
unsigned long offset, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
|
if (!arch_is_coherent())
|
||||||
|
dma_cache_maint(page_address(page) + offset, size, dir);
|
||||||
|
|
||||||
|
return page_to_dma(dev, page) + offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dma_unmap_single - unmap a single buffer previously mapped
|
||||||
|
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||||
|
* @handle: DMA address of buffer
|
||||||
|
* @size: size of buffer (same as passed to dma_map_single)
|
||||||
|
* @dir: DMA transfer direction (same as passed to dma_map_single)
|
||||||
|
*
|
||||||
|
* Unmap a single streaming mode DMA translation. The handle and size
|
||||||
|
* must match what was provided in the previous dma_map_single() call.
|
||||||
|
* All other usages are undefined.
|
||||||
|
*
|
||||||
|
* After this call, reads by the CPU to the buffer are guaranteed to see
|
||||||
|
* whatever the device wrote there.
|
||||||
|
*/
|
||||||
|
static inline void dma_unmap_single(struct device *dev, dma_addr_t handle,
|
||||||
|
size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
/* nothing to do */
|
||||||
|
}
|
||||||
#endif /* CONFIG_DMABOUNCE */
|
#endif /* CONFIG_DMABOUNCE */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dma_unmap_page - unmap a buffer previously mapped through dma_map_page()
|
||||||
|
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||||
|
* @handle: DMA address of buffer
|
||||||
|
* @size: size of buffer (same as passed to dma_map_page)
|
||||||
|
* @dir: DMA transfer direction (same as passed to dma_map_page)
|
||||||
|
*
|
||||||
|
* Unmap a page streaming mode DMA translation. The handle and size
|
||||||
|
* must match what was provided in the previous dma_map_page() call.
|
||||||
|
* All other usages are undefined.
|
||||||
|
*
|
||||||
|
* After this call, reads by the CPU to the buffer are guaranteed to see
|
||||||
|
* whatever the device wrote there.
|
||||||
|
*/
|
||||||
|
static inline void dma_unmap_page(struct device *dev, dma_addr_t handle,
|
||||||
|
size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
dma_unmap_single(dev, handle, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* dma_sync_single_range_for_cpu
|
||||||
|
* @dev: valid struct device pointer, or NULL for ISA and EISA-like devices
|
||||||
|
* @handle: DMA address of buffer
|
||||||
|
* @offset: offset of region to start sync
|
||||||
|
* @size: size of region to sync
|
||||||
|
* @dir: DMA transfer direction (same as passed to dma_map_single)
|
||||||
|
*
|
||||||
|
* Make physical memory consistent for a single streaming mode DMA
|
||||||
|
* translation after a transfer.
|
||||||
|
*
|
||||||
|
* If you perform a dma_map_single() but wish to interrogate the
|
||||||
|
* buffer using the cpu, yet do not wish to teardown the PCI dma
|
||||||
|
* mapping, you must call this function before doing so. At the
|
||||||
|
* next point you give the PCI dma address back to the card, you
|
||||||
|
* must first the perform a dma_sync_for_device, and then the
|
||||||
|
* device again owns the buffer.
|
||||||
|
*/
|
||||||
|
static inline void dma_sync_single_range_for_cpu(struct device *dev,
|
||||||
|
dma_addr_t handle, unsigned long offset, size_t size,
|
||||||
|
enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
|
dmabounce_sync_for_cpu(dev, handle, offset, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dma_sync_single_range_for_device(struct device *dev,
|
||||||
|
dma_addr_t handle, unsigned long offset, size_t size,
|
||||||
|
enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
BUG_ON(!valid_dma_direction(dir));
|
||||||
|
|
||||||
|
if (!dmabounce_sync_for_device(dev, handle, offset, size, dir))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!arch_is_coherent())
|
||||||
|
dma_cache_maint(dma_to_virt(dev, handle) + offset, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dma_sync_single_for_cpu(struct device *dev,
|
||||||
|
dma_addr_t handle, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
dma_sync_single_range_for_cpu(dev, handle, 0, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void dma_sync_single_for_device(struct device *dev,
|
||||||
|
dma_addr_t handle, size_t size, enum dma_data_direction dir)
|
||||||
|
{
|
||||||
|
dma_sync_single_range_for_device(dev, handle, 0, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The scatter list versions of the above methods.
|
||||||
|
*/
|
||||||
|
extern int dma_map_sg(struct device *, struct scatterlist *, int,
|
||||||
|
enum dma_data_direction);
|
||||||
|
extern void dma_unmap_sg(struct device *, struct scatterlist *, int,
|
||||||
|
enum dma_data_direction);
|
||||||
|
extern void dma_sync_sg_for_cpu(struct device *, struct scatterlist *, int,
|
||||||
|
enum dma_data_direction);
|
||||||
|
extern void dma_sync_sg_for_device(struct device *, struct scatterlist *, int,
|
||||||
|
enum dma_data_direction);
|
||||||
|
|
||||||
|
|
||||||
#endif /* __KERNEL__ */
|
#endif /* __KERNEL__ */
|
||||||
#endif
|
#endif
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
|
|
||||||
#include <asm/hwcap.h>
|
#include <asm/hwcap.h>
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
/*
|
/*
|
||||||
* ELF register definitions..
|
* ELF register definitions..
|
||||||
*/
|
*/
|
||||||
@ -17,12 +16,34 @@ typedef unsigned long elf_freg_t[3];
|
|||||||
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
typedef elf_greg_t elf_gregset_t[ELF_NGREG];
|
||||||
|
|
||||||
typedef struct user_fp elf_fpregset_t;
|
typedef struct user_fp elf_fpregset_t;
|
||||||
#endif
|
|
||||||
|
|
||||||
#define EM_ARM 40
|
#define EM_ARM 40
|
||||||
#define EF_ARM_APCS26 0x08
|
|
||||||
#define EF_ARM_SOFT_FLOAT 0x200
|
#define EF_ARM_EABI_MASK 0xff000000
|
||||||
#define EF_ARM_EABI_MASK 0xFF000000
|
#define EF_ARM_EABI_UNKNOWN 0x00000000
|
||||||
|
#define EF_ARM_EABI_VER1 0x01000000
|
||||||
|
#define EF_ARM_EABI_VER2 0x02000000
|
||||||
|
#define EF_ARM_EABI_VER3 0x03000000
|
||||||
|
#define EF_ARM_EABI_VER4 0x04000000
|
||||||
|
#define EF_ARM_EABI_VER5 0x05000000
|
||||||
|
|
||||||
|
#define EF_ARM_BE8 0x00800000 /* ABI 4,5 */
|
||||||
|
#define EF_ARM_LE8 0x00400000 /* ABI 4,5 */
|
||||||
|
#define EF_ARM_MAVERICK_FLOAT 0x00000800 /* ABI 0 */
|
||||||
|
#define EF_ARM_VFP_FLOAT 0x00000400 /* ABI 0 */
|
||||||
|
#define EF_ARM_SOFT_FLOAT 0x00000200 /* ABI 0 */
|
||||||
|
#define EF_ARM_OLD_ABI 0x00000100 /* ABI 0 */
|
||||||
|
#define EF_ARM_NEW_ABI 0x00000080 /* ABI 0 */
|
||||||
|
#define EF_ARM_ALIGN8 0x00000040 /* ABI 0 */
|
||||||
|
#define EF_ARM_PIC 0x00000020 /* ABI 0 */
|
||||||
|
#define EF_ARM_MAPSYMSFIRST 0x00000010 /* ABI 2 */
|
||||||
|
#define EF_ARM_APCS_FLOAT 0x00000010 /* ABI 0, floats in fp regs */
|
||||||
|
#define EF_ARM_DYNSYMSUSESEGIDX 0x00000008 /* ABI 2 */
|
||||||
|
#define EF_ARM_APCS_26 0x00000008 /* ABI 0 */
|
||||||
|
#define EF_ARM_SYMSARESORTED 0x00000004 /* ABI 1,2 */
|
||||||
|
#define EF_ARM_INTERWORK 0x00000004 /* ABI 0 */
|
||||||
|
#define EF_ARM_HASENTRY 0x00000002 /* All */
|
||||||
|
#define EF_ARM_RELEXEC 0x00000001 /* All */
|
||||||
|
|
||||||
#define R_ARM_NONE 0
|
#define R_ARM_NONE 0
|
||||||
#define R_ARM_PC24 1
|
#define R_ARM_PC24 1
|
||||||
@ -41,7 +62,6 @@ typedef struct user_fp elf_fpregset_t;
|
|||||||
#endif
|
#endif
|
||||||
#define ELF_ARCH EM_ARM
|
#define ELF_ARCH EM_ARM
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
|
||||||
/*
|
/*
|
||||||
* This yields a string that ld.so will use to load implementation
|
* This yields a string that ld.so will use to load implementation
|
||||||
* specific libraries for optimization. This is more specific in
|
* specific libraries for optimization. This is more specific in
|
||||||
@ -59,25 +79,17 @@ typedef struct user_fp elf_fpregset_t;
|
|||||||
#define ELF_PLATFORM (elf_platform)
|
#define ELF_PLATFORM (elf_platform)
|
||||||
|
|
||||||
extern char elf_platform[];
|
extern char elf_platform[];
|
||||||
#endif
|
|
||||||
|
struct elf32_hdr;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used to ensure we don't load something for the wrong architecture.
|
* This is used to ensure we don't load something for the wrong architecture.
|
||||||
*/
|
*/
|
||||||
#define elf_check_arch(x) ((x)->e_machine == EM_ARM && ELF_PROC_OK(x))
|
extern int elf_check_arch(const struct elf32_hdr *);
|
||||||
|
#define elf_check_arch elf_check_arch
|
||||||
|
|
||||||
/*
|
extern int arm_elf_read_implies_exec(const struct elf32_hdr *, int);
|
||||||
* 32-bit code is always OK. Some cpus can do 26-bit, some can't.
|
#define elf_read_implies_exec(ex,stk) arm_elf_read_implies_exec(&(ex), stk)
|
||||||
*/
|
|
||||||
#define ELF_PROC_OK(x) (ELF_THUMB_OK(x) && ELF_26BIT_OK(x))
|
|
||||||
|
|
||||||
#define ELF_THUMB_OK(x) \
|
|
||||||
((elf_hwcap & HWCAP_THUMB && ((x)->e_entry & 1) == 1) || \
|
|
||||||
((x)->e_entry & 3) == 0)
|
|
||||||
|
|
||||||
#define ELF_26BIT_OK(x) \
|
|
||||||
((elf_hwcap & HWCAP_26BIT && (x)->e_flags & EF_ARM_APCS26) || \
|
|
||||||
((x)->e_flags & EF_ARM_APCS26) == 0)
|
|
||||||
|
|
||||||
#define USE_ELF_CORE_DUMP
|
#define USE_ELF_CORE_DUMP
|
||||||
#define ELF_EXEC_PAGESIZE 4096
|
#define ELF_EXEC_PAGESIZE 4096
|
||||||
@ -94,23 +106,7 @@ extern char elf_platform[];
|
|||||||
have no such handler. */
|
have no such handler. */
|
||||||
#define ELF_PLAT_INIT(_r, load_addr) (_r)->ARM_r0 = 0
|
#define ELF_PLAT_INIT(_r, load_addr) (_r)->ARM_r0 = 0
|
||||||
|
|
||||||
/*
|
extern void elf_set_personality(const struct elf32_hdr *);
|
||||||
* Since the FPA coprocessor uses CP1 and CP2, and iWMMXt uses CP0
|
#define SET_PERSONALITY(ex, ibcs2) elf_set_personality(&(ex))
|
||||||
* and CP1, we only enable access to the iWMMXt coprocessor if the
|
|
||||||
* binary is EABI or softfloat (and thus, guaranteed not to use
|
|
||||||
* FPA instructions.)
|
|
||||||
*/
|
|
||||||
#define SET_PERSONALITY(ex, ibcs2) \
|
|
||||||
do { \
|
|
||||||
if ((ex).e_flags & EF_ARM_APCS26) { \
|
|
||||||
set_personality(PER_LINUX); \
|
|
||||||
} else { \
|
|
||||||
set_personality(PER_LINUX_32BIT); \
|
|
||||||
if (elf_hwcap & HWCAP_IWMMXT && (ex).e_flags & (EF_ARM_EABI_MASK | EF_ARM_SOFT_FLOAT)) \
|
|
||||||
set_thread_flag(TIF_USING_IWMMXT); \
|
|
||||||
else \
|
|
||||||
clear_thread_flag(TIF_USING_IWMMXT); \
|
|
||||||
} \
|
|
||||||
} while (0)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,124 @@
|
|||||||
#ifndef _ASM_FUTEX_H
|
#ifndef _ASM_ARM_FUTEX_H
|
||||||
#define _ASM_FUTEX_H
|
#define _ASM_ARM_FUTEX_H
|
||||||
|
|
||||||
|
#ifdef __KERNEL__
|
||||||
|
|
||||||
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
#include <asm-generic/futex.h>
|
#include <asm-generic/futex.h>
|
||||||
|
|
||||||
#endif
|
#else /* !SMP, we can work around lack of atomic ops by disabling preemption */
|
||||||
|
|
||||||
|
#include <linux/futex.h>
|
||||||
|
#include <linux/preempt.h>
|
||||||
|
#include <linux/uaccess.h>
|
||||||
|
#include <asm/errno.h>
|
||||||
|
|
||||||
|
#define __futex_atomic_op(insn, ret, oldval, uaddr, oparg) \
|
||||||
|
__asm__ __volatile__( \
|
||||||
|
"1: ldrt %1, [%2]\n" \
|
||||||
|
" " insn "\n" \
|
||||||
|
"2: strt %0, [%2]\n" \
|
||||||
|
" mov %0, #0\n" \
|
||||||
|
"3:\n" \
|
||||||
|
" .section __ex_table,\"a\"\n" \
|
||||||
|
" .align 3\n" \
|
||||||
|
" .long 1b, 4f, 2b, 4f\n" \
|
||||||
|
" .previous\n" \
|
||||||
|
" .section .fixup,\"ax\"\n" \
|
||||||
|
"4: mov %0, %4\n" \
|
||||||
|
" b 3b\n" \
|
||||||
|
" .previous" \
|
||||||
|
: "=&r" (ret), "=&r" (oldval) \
|
||||||
|
: "r" (uaddr), "r" (oparg), "Ir" (-EFAULT) \
|
||||||
|
: "cc", "memory")
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
futex_atomic_op_inuser (int encoded_op, int __user *uaddr)
|
||||||
|
{
|
||||||
|
int op = (encoded_op >> 28) & 7;
|
||||||
|
int cmp = (encoded_op >> 24) & 15;
|
||||||
|
int oparg = (encoded_op << 8) >> 20;
|
||||||
|
int cmparg = (encoded_op << 20) >> 20;
|
||||||
|
int oldval = 0, ret;
|
||||||
|
|
||||||
|
if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28))
|
||||||
|
oparg = 1 << oparg;
|
||||||
|
|
||||||
|
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
pagefault_disable(); /* implies preempt_disable() */
|
||||||
|
|
||||||
|
switch (op) {
|
||||||
|
case FUTEX_OP_SET:
|
||||||
|
__futex_atomic_op("mov %0, %3", ret, oldval, uaddr, oparg);
|
||||||
|
break;
|
||||||
|
case FUTEX_OP_ADD:
|
||||||
|
__futex_atomic_op("add %0, %1, %3", ret, oldval, uaddr, oparg);
|
||||||
|
break;
|
||||||
|
case FUTEX_OP_OR:
|
||||||
|
__futex_atomic_op("orr %0, %1, %3", ret, oldval, uaddr, oparg);
|
||||||
|
break;
|
||||||
|
case FUTEX_OP_ANDN:
|
||||||
|
__futex_atomic_op("and %0, %1, %3", ret, oldval, uaddr, ~oparg);
|
||||||
|
break;
|
||||||
|
case FUTEX_OP_XOR:
|
||||||
|
__futex_atomic_op("eor %0, %1, %3", ret, oldval, uaddr, oparg);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ret = -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
pagefault_enable(); /* subsumes preempt_enable() */
|
||||||
|
|
||||||
|
if (!ret) {
|
||||||
|
switch (cmp) {
|
||||||
|
case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break;
|
||||||
|
case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break;
|
||||||
|
case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break;
|
||||||
|
case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break;
|
||||||
|
case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break;
|
||||||
|
case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break;
|
||||||
|
default: ret = -ENOSYS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
futex_atomic_cmpxchg_inatomic(int __user *uaddr, int oldval, int newval)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if (!access_ok(VERIFY_WRITE, uaddr, sizeof(int)))
|
||||||
|
return -EFAULT;
|
||||||
|
|
||||||
|
pagefault_disable(); /* implies preempt_disable() */
|
||||||
|
|
||||||
|
__asm__ __volatile__("@futex_atomic_cmpxchg_inatomic\n"
|
||||||
|
"1: ldrt %0, [%3]\n"
|
||||||
|
" teq %0, %1\n"
|
||||||
|
"2: streqt %2, [%3]\n"
|
||||||
|
"3:\n"
|
||||||
|
" .section __ex_table,\"a\"\n"
|
||||||
|
" .align 3\n"
|
||||||
|
" .long 1b, 4f, 2b, 4f\n"
|
||||||
|
" .previous\n"
|
||||||
|
" .section .fixup,\"ax\"\n"
|
||||||
|
"4: mov %0, %4\n"
|
||||||
|
" b 3b\n"
|
||||||
|
" .previous"
|
||||||
|
: "=&r" (val)
|
||||||
|
: "r" (oldval), "r" (newval), "r" (uaddr), "Ir" (-EFAULT)
|
||||||
|
: "cc", "memory");
|
||||||
|
|
||||||
|
pagefault_enable(); /* subsumes preempt_enable() */
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* !SMP */
|
||||||
|
|
||||||
|
#endif /* __KERNEL__ */
|
||||||
|
#endif /* _ASM_ARM_FUTEX_H */
|
||||||
|
@ -60,10 +60,9 @@ extern void __raw_readsl(const void __iomem *addr, void *data, int longlen);
|
|||||||
#define MT_DEVICE 0
|
#define MT_DEVICE 0
|
||||||
#define MT_DEVICE_NONSHARED 1
|
#define MT_DEVICE_NONSHARED 1
|
||||||
#define MT_DEVICE_CACHED 2
|
#define MT_DEVICE_CACHED 2
|
||||||
#define MT_DEVICE_IXP2000 3
|
#define MT_DEVICE_WC 3
|
||||||
#define MT_DEVICE_WC 4
|
|
||||||
/*
|
/*
|
||||||
* types 5 onwards can be found in asm/mach/map.h and are undefined
|
* types 4 onwards can be found in asm/mach/map.h and are undefined
|
||||||
* for ioremap
|
* for ioremap
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -22,6 +22,10 @@
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
struct irqaction;
|
struct irqaction;
|
||||||
extern void migrate_irqs(void);
|
extern void migrate_irqs(void);
|
||||||
|
|
||||||
|
extern void asm_do_IRQ(unsigned int, struct pt_regs *);
|
||||||
|
void init_IRQ(void);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,7 +61,6 @@ struct kprobe_ctlblk {
|
|||||||
void arch_remove_kprobe(struct kprobe *);
|
void arch_remove_kprobe(struct kprobe *);
|
||||||
void kretprobe_trampoline(void);
|
void kretprobe_trampoline(void);
|
||||||
|
|
||||||
int kprobe_trap_handler(struct pt_regs *regs, unsigned int instr);
|
|
||||||
int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr);
|
int kprobe_fault_handler(struct pt_regs *regs, unsigned int fsr);
|
||||||
int kprobe_exceptions_notify(struct notifier_block *self,
|
int kprobe_exceptions_notify(struct notifier_block *self,
|
||||||
unsigned long val, void *data);
|
unsigned long val, void *data);
|
||||||
|
@ -18,16 +18,13 @@ struct map_desc {
|
|||||||
unsigned int type;
|
unsigned int type;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* types 0-4 are defined in asm/io.h */
|
/* types 0-3 are defined in asm/io.h */
|
||||||
#define MT_CACHECLEAN 5
|
#define MT_CACHECLEAN 4
|
||||||
#define MT_MINICLEAN 6
|
#define MT_MINICLEAN 5
|
||||||
#define MT_LOW_VECTORS 7
|
#define MT_LOW_VECTORS 6
|
||||||
#define MT_HIGH_VECTORS 8
|
#define MT_HIGH_VECTORS 7
|
||||||
#define MT_MEMORY 9
|
#define MT_MEMORY 8
|
||||||
#define MT_ROM 10
|
#define MT_ROM 9
|
||||||
|
|
||||||
#define MT_NONSHARED_DEVICE MT_DEVICE_NONSHARED
|
|
||||||
#define MT_IXP2000_DEVICE MT_DEVICE_IXP2000
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
extern void iotable_init(struct map_desc *, int);
|
extern void iotable_init(struct map_desc *, int);
|
||||||
|
@ -18,8 +18,7 @@ struct pxa2xx_udc_mach_info {
|
|||||||
/* Boards following the design guidelines in the developer's manual,
|
/* Boards following the design guidelines in the developer's manual,
|
||||||
* with on-chip GPIOs not Lubbock's weird hardware, can have a sane
|
* with on-chip GPIOs not Lubbock's weird hardware, can have a sane
|
||||||
* VBUS IRQ and omit the methods above. Store the GPIO number
|
* VBUS IRQ and omit the methods above. Store the GPIO number
|
||||||
* here; for GPIO 0, also mask in one of the pxa_gpio_mode() bits.
|
* here. Note that sometimes the signals go through inverters...
|
||||||
* Note that sometimes the signals go through inverters...
|
|
||||||
*/
|
*/
|
||||||
bool gpio_vbus_inverted;
|
bool gpio_vbus_inverted;
|
||||||
u16 gpio_vbus; /* high == vbus present */
|
u16 gpio_vbus; /* high == vbus present */
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
#ifndef _ASM_MC146818RTC_H
|
#ifndef _ASM_MC146818RTC_H
|
||||||
#define _ASM_MC146818RTC_H
|
#define _ASM_MC146818RTC_H
|
||||||
|
|
||||||
|
#include <linux/io.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
#include <asm/io.h>
|
|
||||||
|
|
||||||
#ifndef RTC_PORT
|
#ifndef RTC_PORT
|
||||||
#define RTC_PORT(x) (0x70 + (x))
|
#define RTC_PORT(x) (0x70 + (x))
|
||||||
|
@ -13,43 +13,33 @@
|
|||||||
#ifndef __ASM_ARM_MEMORY_H
|
#ifndef __ASM_ARM_MEMORY_H
|
||||||
#define __ASM_ARM_MEMORY_H
|
#define __ASM_ARM_MEMORY_H
|
||||||
|
|
||||||
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/const.h>
|
||||||
|
#include <mach/memory.h>
|
||||||
|
#include <asm/sizes.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Allow for constants defined here to be used from assembly code
|
* Allow for constants defined here to be used from assembly code
|
||||||
* by prepending the UL suffix only with actual C code compilation.
|
* by prepending the UL suffix only with actual C code compilation.
|
||||||
*/
|
*/
|
||||||
#ifndef __ASSEMBLY__
|
#define UL(x) _AC(x, UL)
|
||||||
#define UL(x) (x##UL)
|
|
||||||
#else
|
|
||||||
#define UL(x) (x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <linux/compiler.h>
|
|
||||||
#include <mach/memory.h>
|
|
||||||
#include <asm/sizes.h>
|
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
|
||||||
#ifndef TASK_SIZE
|
|
||||||
/*
|
/*
|
||||||
|
* PAGE_OFFSET - the virtual address of the start of the kernel image
|
||||||
* TASK_SIZE - the maximum size of a user space task.
|
* TASK_SIZE - the maximum size of a user space task.
|
||||||
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
|
* TASK_UNMAPPED_BASE - the lower boundary of the mmap VM area
|
||||||
*/
|
*/
|
||||||
#define TASK_SIZE UL(0xbf000000)
|
#define PAGE_OFFSET UL(CONFIG_PAGE_OFFSET)
|
||||||
#define TASK_UNMAPPED_BASE UL(0x40000000)
|
#define TASK_SIZE (UL(CONFIG_PAGE_OFFSET) - UL(0x01000000))
|
||||||
#endif
|
#define TASK_UNMAPPED_BASE (UL(CONFIG_PAGE_OFFSET) / 3)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The maximum size of a 26-bit user space task.
|
* The maximum size of a 26-bit user space task.
|
||||||
*/
|
*/
|
||||||
#define TASK_SIZE_26 UL(0x04000000)
|
#define TASK_SIZE_26 UL(0x04000000)
|
||||||
|
|
||||||
/*
|
|
||||||
* Page offset: 3GB
|
|
||||||
*/
|
|
||||||
#ifndef PAGE_OFFSET
|
|
||||||
#define PAGE_OFFSET UL(0xc0000000)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The module space lives between the addresses given by TASK_SIZE
|
* The module space lives between the addresses given by TASK_SIZE
|
||||||
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
|
* and PAGE_OFFSET - it must be within 32MB of the kernel text.
|
||||||
@ -147,16 +137,10 @@
|
|||||||
|
|
||||||
#ifndef arch_adjust_zones
|
#ifndef arch_adjust_zones
|
||||||
#define arch_adjust_zones(node,size,holes) do { } while (0)
|
#define arch_adjust_zones(node,size,holes) do { } while (0)
|
||||||
|
#elif !defined(CONFIG_ZONE_DMA)
|
||||||
|
#error "custom arch_adjust_zones() requires CONFIG_ZONE_DMA"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* Amount of memory reserved for the vmalloc() area, and minimum
|
|
||||||
* address for vmalloc mappings.
|
|
||||||
*/
|
|
||||||
extern unsigned long vmalloc_reserve;
|
|
||||||
|
|
||||||
#define VMALLOC_MIN (void *)(VMALLOC_END - vmalloc_reserve)
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PFNs are used to describe any physical page; this means
|
* PFNs are used to describe any physical page; this means
|
||||||
* PFN 0 == physical address 0.
|
* PFN 0 == physical address 0.
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
|
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
#include <asm/cachetype.h>
|
||||||
#include <asm/proc-fns.h>
|
#include <asm/proc-fns.h>
|
||||||
#include <asm-generic/mm_hooks.h>
|
#include <asm-generic/mm_hooks.h>
|
||||||
|
|
||||||
|
@ -184,8 +184,9 @@ typedef struct page *pgtable_t;
|
|||||||
|
|
||||||
#endif /* !__ASSEMBLY__ */
|
#endif /* !__ASSEMBLY__ */
|
||||||
|
|
||||||
#define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
|
#define VM_DATA_DEFAULT_FLAGS \
|
||||||
VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
|
(((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \
|
||||||
|
VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* With EABI on ARMv5 and above we must have 64-bit aligned slab pointers.
|
* With EABI on ARMv5 and above we must have 64-bit aligned slab pointers.
|
||||||
|
@ -30,7 +30,7 @@ static inline void pcibios_penalize_isa_irq(int irq, int active)
|
|||||||
* The networking and block device layers use this boolean for bounce
|
* The networking and block device layers use this boolean for bounce
|
||||||
* buffer decisions.
|
* buffer decisions.
|
||||||
*/
|
*/
|
||||||
#define PCI_DMA_BUS_IS_PHYS (0)
|
#define PCI_DMA_BUS_IS_PHYS (1)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Whether pci_unmap_{single,page} is a nop depends upon the
|
* Whether pci_unmap_{single,page} is a nop depends upon the
|
||||||
|
@ -164,14 +164,30 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
|
|||||||
#define L_PTE_PRESENT (1 << 0)
|
#define L_PTE_PRESENT (1 << 0)
|
||||||
#define L_PTE_FILE (1 << 1) /* only when !PRESENT */
|
#define L_PTE_FILE (1 << 1) /* only when !PRESENT */
|
||||||
#define L_PTE_YOUNG (1 << 1)
|
#define L_PTE_YOUNG (1 << 1)
|
||||||
#define L_PTE_BUFFERABLE (1 << 2) /* matches PTE */
|
#define L_PTE_BUFFERABLE (1 << 2) /* obsolete, matches PTE */
|
||||||
#define L_PTE_CACHEABLE (1 << 3) /* matches PTE */
|
#define L_PTE_CACHEABLE (1 << 3) /* obsolete, matches PTE */
|
||||||
#define L_PTE_USER (1 << 4)
|
#define L_PTE_DIRTY (1 << 6)
|
||||||
#define L_PTE_WRITE (1 << 5)
|
#define L_PTE_WRITE (1 << 7)
|
||||||
#define L_PTE_EXEC (1 << 6)
|
#define L_PTE_USER (1 << 8)
|
||||||
#define L_PTE_DIRTY (1 << 7)
|
#define L_PTE_EXEC (1 << 9)
|
||||||
#define L_PTE_SHARED (1 << 10) /* shared(v6), coherent(xsc3) */
|
#define L_PTE_SHARED (1 << 10) /* shared(v6), coherent(xsc3) */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* These are the memory types, defined to be compatible with
|
||||||
|
* pre-ARMv6 CPUs cacheable and bufferable bits: XXCB
|
||||||
|
*/
|
||||||
|
#define L_PTE_MT_UNCACHED (0x00 << 2) /* 0000 */
|
||||||
|
#define L_PTE_MT_BUFFERABLE (0x01 << 2) /* 0001 */
|
||||||
|
#define L_PTE_MT_WRITETHROUGH (0x02 << 2) /* 0010 */
|
||||||
|
#define L_PTE_MT_WRITEBACK (0x03 << 2) /* 0011 */
|
||||||
|
#define L_PTE_MT_MINICACHE (0x06 << 2) /* 0110 (sa1100, xscale) */
|
||||||
|
#define L_PTE_MT_WRITEALLOC (0x07 << 2) /* 0111 */
|
||||||
|
#define L_PTE_MT_DEV_SHARED (0x04 << 2) /* 0100 */
|
||||||
|
#define L_PTE_MT_DEV_NONSHARED (0x0c << 2) /* 1100 */
|
||||||
|
#define L_PTE_MT_DEV_WC (0x09 << 2) /* 1001 */
|
||||||
|
#define L_PTE_MT_DEV_CACHED (0x0b << 2) /* 1011 */
|
||||||
|
#define L_PTE_MT_MASK (0x0f << 2)
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -180,23 +196,30 @@ extern void __pgd_error(const char *file, int line, unsigned long val);
|
|||||||
* as well as any architecture dependent bits like global/ASID and SMP
|
* as well as any architecture dependent bits like global/ASID and SMP
|
||||||
* shared mapping bits.
|
* shared mapping bits.
|
||||||
*/
|
*/
|
||||||
#define _L_PTE_DEFAULT L_PTE_PRESENT | L_PTE_YOUNG | L_PTE_CACHEABLE | L_PTE_BUFFERABLE
|
#define _L_PTE_DEFAULT L_PTE_PRESENT | L_PTE_YOUNG
|
||||||
#define _L_PTE_READ L_PTE_USER | L_PTE_EXEC
|
|
||||||
|
|
||||||
extern pgprot_t pgprot_user;
|
extern pgprot_t pgprot_user;
|
||||||
extern pgprot_t pgprot_kernel;
|
extern pgprot_t pgprot_kernel;
|
||||||
|
|
||||||
|
#define _MOD_PROT(p, b) __pgprot(pgprot_val(p) | (b))
|
||||||
|
|
||||||
#define PAGE_NONE pgprot_user
|
#define PAGE_NONE pgprot_user
|
||||||
#define PAGE_COPY __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ)
|
#define PAGE_SHARED _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE)
|
||||||
#define PAGE_SHARED __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ | \
|
#define PAGE_SHARED_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC)
|
||||||
L_PTE_WRITE)
|
#define PAGE_COPY _MOD_PROT(pgprot_user, L_PTE_USER)
|
||||||
#define PAGE_READONLY __pgprot(pgprot_val(pgprot_user) | _L_PTE_READ)
|
#define PAGE_COPY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC)
|
||||||
|
#define PAGE_READONLY _MOD_PROT(pgprot_user, L_PTE_USER)
|
||||||
|
#define PAGE_READONLY_EXEC _MOD_PROT(pgprot_user, L_PTE_USER | L_PTE_EXEC)
|
||||||
#define PAGE_KERNEL pgprot_kernel
|
#define PAGE_KERNEL pgprot_kernel
|
||||||
|
#define PAGE_KERNEL_EXEC _MOD_PROT(pgprot_kernel, L_PTE_EXEC)
|
||||||
|
|
||||||
#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT)
|
#define __PAGE_NONE __pgprot(_L_PTE_DEFAULT)
|
||||||
#define __PAGE_COPY __pgprot(_L_PTE_DEFAULT | _L_PTE_READ)
|
#define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE)
|
||||||
#define __PAGE_SHARED __pgprot(_L_PTE_DEFAULT | _L_PTE_READ | L_PTE_WRITE)
|
#define __PAGE_SHARED_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_WRITE | L_PTE_EXEC)
|
||||||
#define __PAGE_READONLY __pgprot(_L_PTE_DEFAULT | _L_PTE_READ)
|
#define __PAGE_COPY __pgprot(_L_PTE_DEFAULT | L_PTE_USER)
|
||||||
|
#define __PAGE_COPY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC)
|
||||||
|
#define __PAGE_READONLY __pgprot(_L_PTE_DEFAULT | L_PTE_USER)
|
||||||
|
#define __PAGE_READONLY_EXEC __pgprot(_L_PTE_DEFAULT | L_PTE_USER | L_PTE_EXEC)
|
||||||
|
|
||||||
#endif /* __ASSEMBLY__ */
|
#endif /* __ASSEMBLY__ */
|
||||||
|
|
||||||
@ -212,19 +235,19 @@ extern pgprot_t pgprot_kernel;
|
|||||||
#define __P001 __PAGE_READONLY
|
#define __P001 __PAGE_READONLY
|
||||||
#define __P010 __PAGE_COPY
|
#define __P010 __PAGE_COPY
|
||||||
#define __P011 __PAGE_COPY
|
#define __P011 __PAGE_COPY
|
||||||
#define __P100 __PAGE_READONLY
|
#define __P100 __PAGE_READONLY_EXEC
|
||||||
#define __P101 __PAGE_READONLY
|
#define __P101 __PAGE_READONLY_EXEC
|
||||||
#define __P110 __PAGE_COPY
|
#define __P110 __PAGE_COPY_EXEC
|
||||||
#define __P111 __PAGE_COPY
|
#define __P111 __PAGE_COPY_EXEC
|
||||||
|
|
||||||
#define __S000 __PAGE_NONE
|
#define __S000 __PAGE_NONE
|
||||||
#define __S001 __PAGE_READONLY
|
#define __S001 __PAGE_READONLY
|
||||||
#define __S010 __PAGE_SHARED
|
#define __S010 __PAGE_SHARED
|
||||||
#define __S011 __PAGE_SHARED
|
#define __S011 __PAGE_SHARED
|
||||||
#define __S100 __PAGE_READONLY
|
#define __S100 __PAGE_READONLY_EXEC
|
||||||
#define __S101 __PAGE_READONLY
|
#define __S101 __PAGE_READONLY_EXEC
|
||||||
#define __S110 __PAGE_SHARED
|
#define __S110 __PAGE_SHARED_EXEC
|
||||||
#define __S111 __PAGE_SHARED
|
#define __S111 __PAGE_SHARED_EXEC
|
||||||
|
|
||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
/*
|
/*
|
||||||
@ -286,8 +309,10 @@ static inline pte_t pte_mkspecial(pte_t pte) { return pte; }
|
|||||||
/*
|
/*
|
||||||
* Mark the prot value as uncacheable and unbufferable.
|
* Mark the prot value as uncacheable and unbufferable.
|
||||||
*/
|
*/
|
||||||
#define pgprot_noncached(prot) __pgprot(pgprot_val(prot) & ~(L_PTE_CACHEABLE | L_PTE_BUFFERABLE))
|
#define pgprot_noncached(prot) \
|
||||||
#define pgprot_writecombine(prot) __pgprot(pgprot_val(prot) & ~L_PTE_CACHEABLE)
|
__pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_UNCACHED)
|
||||||
|
#define pgprot_writecombine(prot) \
|
||||||
|
__pgprot((pgprot_val(prot) & ~L_PTE_MT_MASK) | L_PTE_MT_BUFFERABLE)
|
||||||
|
|
||||||
#define pmd_none(pmd) (!pmd_val(pmd))
|
#define pmd_none(pmd) (!pmd_val(pmd))
|
||||||
#define pmd_present(pmd) (pmd_val(pmd))
|
#define pmd_present(pmd) (pmd_val(pmd))
|
||||||
@ -319,11 +344,6 @@ static inline pte_t *pmd_page_vaddr(pmd_t pmd)
|
|||||||
|
|
||||||
#define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd)))
|
#define pmd_page(pmd) virt_to_page(__va(pmd_val(pmd)))
|
||||||
|
|
||||||
/*
|
|
||||||
* Permanent address of a page. We never have highmem, so this is trivial.
|
|
||||||
*/
|
|
||||||
#define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT))
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Conversion functions: convert a page and protection to a page entry,
|
* Conversion functions: convert a page and protection to a page entry,
|
||||||
* and a page entry and page directory to the page they refer to.
|
* and a page entry and page directory to the page they refer to.
|
||||||
|
@ -54,7 +54,6 @@
|
|||||||
#define PSR_C_BIT 0x20000000
|
#define PSR_C_BIT 0x20000000
|
||||||
#define PSR_Z_BIT 0x40000000
|
#define PSR_Z_BIT 0x40000000
|
||||||
#define PSR_N_BIT 0x80000000
|
#define PSR_N_BIT 0x80000000
|
||||||
#define PCMASK 0
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Groups of PSR bits
|
* Groups of PSR bits
|
||||||
@ -139,11 +138,7 @@ static inline int valid_user_regs(struct pt_regs *regs)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define pc_pointer(v) \
|
#define instruction_pointer(regs) (regs)->ARM_pc
|
||||||
((v) & ~PCMASK)
|
|
||||||
|
|
||||||
#define instruction_pointer(regs) \
|
|
||||||
(pc_pointer((regs)->ARM_pc))
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
extern unsigned long profile_pc(struct pt_regs *regs);
|
extern unsigned long profile_pc(struct pt_regs *regs);
|
||||||
|
@ -209,6 +209,17 @@ struct meminfo {
|
|||||||
struct membank bank[NR_BANKS];
|
struct membank bank[NR_BANKS];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define for_each_nodebank(iter,mi,no) \
|
||||||
|
for (iter = 0; iter < mi->nr_banks; iter++) \
|
||||||
|
if (mi->bank[iter].node == no)
|
||||||
|
|
||||||
|
#define bank_pfn_start(bank) __phys_to_pfn((bank)->start)
|
||||||
|
#define bank_pfn_end(bank) __phys_to_pfn((bank)->start + (bank)->size)
|
||||||
|
#define bank_pfn_size(bank) ((bank)->size >> PAGE_SHIFT)
|
||||||
|
#define bank_phys_start(bank) (bank)->start
|
||||||
|
#define bank_phys_end(bank) ((bank)->start + (bank)->size)
|
||||||
|
#define bank_phys_size(bank) (bank)->size
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Early command line parameters.
|
* Early command line parameters.
|
||||||
*/
|
*/
|
||||||
|
@ -3,8 +3,22 @@
|
|||||||
|
|
||||||
#include <asm/memory.h>
|
#include <asm/memory.h>
|
||||||
|
|
||||||
#define MAX_PHYSADDR_BITS 32
|
/*
|
||||||
#define MAX_PHYSMEM_BITS 32
|
* Two definitions are required for sparsemem:
|
||||||
#define SECTION_SIZE_BITS NODE_MEM_SIZE_BITS
|
*
|
||||||
|
* MAX_PHYSMEM_BITS: The number of physical address bits required
|
||||||
|
* to address the last byte of memory.
|
||||||
|
*
|
||||||
|
* SECTION_SIZE_BITS: The number of physical address bits to cover
|
||||||
|
* the maximum amount of memory in a section.
|
||||||
|
*
|
||||||
|
* Eg, if you have 2 banks of up to 64MB at 0x80000000, 0x84000000,
|
||||||
|
* then MAX_PHYSMEM_BITS is 32, SECTION_SIZE_BITS is 26.
|
||||||
|
*
|
||||||
|
* Define these in your mach/memory.h.
|
||||||
|
*/
|
||||||
|
#if !defined(SECTION_SIZE_BITS) || !defined(MAX_PHYSMEM_BITS)
|
||||||
|
#error Sparsemem is not supported on this platform
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -43,11 +43,6 @@
|
|||||||
#define CR_XP (1 << 23) /* Extended page tables */
|
#define CR_XP (1 << 23) /* Extended page tables */
|
||||||
#define CR_VE (1 << 24) /* Vectored interrupts */
|
#define CR_VE (1 << 24) /* Vectored interrupts */
|
||||||
|
|
||||||
#define CPUID_ID 0
|
|
||||||
#define CPUID_CACHETYPE 1
|
|
||||||
#define CPUID_TCM 2
|
|
||||||
#define CPUID_TLBTYPE 3
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is used to ensure the compiler did actually allocate the register we
|
* This is used to ensure the compiler did actually allocate the register we
|
||||||
* asked it for some inline assembly sequences. Apparently we can't trust
|
* asked it for some inline assembly sequences. Apparently we can't trust
|
||||||
@ -61,36 +56,8 @@
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
#include <linux/stringify.h>
|
|
||||||
#include <linux/irqflags.h>
|
#include <linux/irqflags.h>
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_CP15
|
|
||||||
#define read_cpuid(reg) \
|
|
||||||
({ \
|
|
||||||
unsigned int __val; \
|
|
||||||
asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \
|
|
||||||
: "=r" (__val) \
|
|
||||||
: \
|
|
||||||
: "cc"); \
|
|
||||||
__val; \
|
|
||||||
})
|
|
||||||
#else
|
|
||||||
extern unsigned int processor_id;
|
|
||||||
#define read_cpuid(reg) (processor_id)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The CPU ID never changes at run time, so we might as well tell the
|
|
||||||
* compiler that it's constant. Use this function to read the CPU ID
|
|
||||||
* rather than directly reading processor_id or read_cpuid() directly.
|
|
||||||
*/
|
|
||||||
static inline unsigned int read_cpuid_id(void) __attribute_const__;
|
|
||||||
|
|
||||||
static inline unsigned int read_cpuid_id(void)
|
|
||||||
{
|
|
||||||
return read_cpuid(CPUID_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define __exception __attribute__((section(".exception.text")))
|
#define __exception __attribute__((section(".exception.text")))
|
||||||
|
|
||||||
struct thread_info;
|
struct thread_info;
|
||||||
@ -131,31 +98,6 @@ extern void cpu_init(void);
|
|||||||
void arm_machine_restart(char mode);
|
void arm_machine_restart(char mode);
|
||||||
extern void (*arm_pm_restart)(char str);
|
extern void (*arm_pm_restart)(char str);
|
||||||
|
|
||||||
/*
|
|
||||||
* Intel's XScale3 core supports some v6 features (supersections, L2)
|
|
||||||
* but advertises itself as v5 as it does not support the v6 ISA. For
|
|
||||||
* this reason, we need a way to explicitly test for this type of CPU.
|
|
||||||
*/
|
|
||||||
#ifndef CONFIG_CPU_XSC3
|
|
||||||
#define cpu_is_xsc3() 0
|
|
||||||
#else
|
|
||||||
static inline int cpu_is_xsc3(void)
|
|
||||||
{
|
|
||||||
extern unsigned int processor_id;
|
|
||||||
|
|
||||||
if ((processor_id & 0xffffe000) == 0x69056000)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3)
|
|
||||||
#define cpu_is_xscale() 0
|
|
||||||
#else
|
|
||||||
#define cpu_is_xscale() 1
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define UDBG_UNDEFINED (1 << 0)
|
#define UDBG_UNDEFINED (1 << 0)
|
||||||
#define UDBG_SYSCALL (1 << 1)
|
#define UDBG_SYSCALL (1 << 1)
|
||||||
#define UDBG_BADABORT (1 << 2)
|
#define UDBG_BADABORT (1 << 2)
|
||||||
|
@ -98,7 +98,7 @@ static inline struct thread_info *current_thread_info(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define thread_saved_pc(tsk) \
|
#define thread_saved_pc(tsk) \
|
||||||
((unsigned long)(pc_pointer(task_thread_info(tsk)->cpu_context.pc)))
|
((unsigned long)(task_thread_info(tsk)->cpu_context.pc))
|
||||||
#define thread_saved_fp(tsk) \
|
#define thread_saved_fp(tsk) \
|
||||||
((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
|
((unsigned long)(task_thread_info(tsk)->cpu_context.fp))
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user