forked from Minki/linux
Merge rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
752c58a471
@ -21,7 +21,7 @@ Description:
|
||||
these states.
|
||||
|
||||
What: /sys/power/disk
|
||||
Date: August 2006
|
||||
Date: September 2006
|
||||
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
Description:
|
||||
The /sys/power/disk file controls the operating mode of the
|
||||
@ -39,6 +39,19 @@ Description:
|
||||
'reboot' - the memory image will be saved by the kernel and
|
||||
the system will be rebooted.
|
||||
|
||||
Additionally, /sys/power/disk can be used to turn on one of the
|
||||
two testing modes of the suspend-to-disk mechanism: 'testproc'
|
||||
or 'test'. If the suspend-to-disk mechanism is in the
|
||||
'testproc' mode, writing 'disk' to /sys/power/state will cause
|
||||
the kernel to disable nonboot CPUs and freeze tasks, wait for 5
|
||||
seconds, unfreeze tasks and enable nonboot CPUs. If it is in
|
||||
the 'test' mode, writing 'disk' to /sys/power/state will cause
|
||||
the kernel to disable nonboot CPUs and freeze tasks, shrink
|
||||
memory, suspend devices, wait for 5 seconds, resume devices,
|
||||
unfreeze tasks and enable nonboot CPUs. Then, we are able to
|
||||
look in the log messages and work out, for example, which code
|
||||
is being slow and which device drivers are misbehaving.
|
||||
|
||||
The suspend-to-disk method may be chosen by writing to this
|
||||
file one of the accepted strings:
|
||||
|
||||
@ -46,6 +59,8 @@ Description:
|
||||
'platform'
|
||||
'shutdown'
|
||||
'reboot'
|
||||
'testproc'
|
||||
'test'
|
||||
|
||||
It will only change to 'firmware' or 'platform' if the system
|
||||
supports that.
|
||||
|
@ -9,7 +9,7 @@
|
||||
DOCBOOKS := wanbook.xml z8530book.xml mcabook.xml videobook.xml \
|
||||
kernel-hacking.xml kernel-locking.xml deviceiobook.xml \
|
||||
procfs-guide.xml writing_usb_driver.xml \
|
||||
kernel-api.xml journal-api.xml lsm.xml usb.xml \
|
||||
kernel-api.xml filesystems.xml lsm.xml usb.xml \
|
||||
gadget.xml libata.xml mtdnand.xml librs.xml rapidio.xml \
|
||||
genericirq.xml
|
||||
|
||||
|
@ -2,9 +2,106 @@
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" []>
|
||||
|
||||
<book id="LinuxJBDAPI">
|
||||
<book id="Linux-filesystems-API">
|
||||
<bookinfo>
|
||||
<title>Linux Filesystems API</title>
|
||||
|
||||
<legalnotice>
|
||||
<para>
|
||||
This documentation is free software; you can redistribute
|
||||
it and/or modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This program is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU General Public License for more details.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with this program; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
MA 02111-1307 USA
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For more details see the file COPYING in the source
|
||||
distribution of Linux.
|
||||
</para>
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
|
||||
<toc></toc>
|
||||
|
||||
<chapter id="vfs">
|
||||
<title>The Linux VFS</title>
|
||||
<sect1><title>The Filesystem types</title>
|
||||
!Iinclude/linux/fs.h
|
||||
</sect1>
|
||||
<sect1><title>The Directory Cache</title>
|
||||
!Efs/dcache.c
|
||||
!Iinclude/linux/dcache.h
|
||||
</sect1>
|
||||
<sect1><title>Inode Handling</title>
|
||||
!Efs/inode.c
|
||||
!Efs/bad_inode.c
|
||||
</sect1>
|
||||
<sect1><title>Registration and Superblocks</title>
|
||||
!Efs/super.c
|
||||
</sect1>
|
||||
<sect1><title>File Locks</title>
|
||||
!Efs/locks.c
|
||||
!Ifs/locks.c
|
||||
</sect1>
|
||||
<sect1><title>Other Functions</title>
|
||||
!Efs/mpage.c
|
||||
!Efs/namei.c
|
||||
!Efs/buffer.c
|
||||
!Efs/bio.c
|
||||
!Efs/seq_file.c
|
||||
!Efs/filesystems.c
|
||||
!Efs/fs-writeback.c
|
||||
!Efs/block_dev.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="proc">
|
||||
<title>The proc filesystem</title>
|
||||
|
||||
<sect1><title>sysctl interface</title>
|
||||
!Ekernel/sysctl.c
|
||||
</sect1>
|
||||
|
||||
<sect1><title>proc filesystem interface</title>
|
||||
!Ifs/proc/base.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="sysfs">
|
||||
<title>The Filesystem for Exporting Kernel Objects</title>
|
||||
!Efs/sysfs/file.c
|
||||
!Efs/sysfs/symlink.c
|
||||
!Efs/sysfs/bin.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="debugfs">
|
||||
<title>The debugfs filesystem</title>
|
||||
|
||||
<sect1><title>debugfs interface</title>
|
||||
!Efs/debugfs/inode.c
|
||||
!Efs/debugfs/file.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="LinuxJDBAPI">
|
||||
<chapterinfo>
|
||||
<title>The Linux Journalling API</title>
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Roger</firstname>
|
||||
@ -14,9 +111,9 @@
|
||||
<email>rgammans@computer-surgery.co.uk</email>
|
||||
</address>
|
||||
</affiliation>
|
||||
</author>
|
||||
</author>
|
||||
</authorgroup>
|
||||
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
<firstname>Stephen</firstname>
|
||||
@ -33,50 +130,21 @@
|
||||
<year>2002</year>
|
||||
<holder>Roger Gammans</holder>
|
||||
</copyright>
|
||||
</chapterinfo>
|
||||
|
||||
<legalnotice>
|
||||
<para>
|
||||
This documentation is free software; you can redistribute
|
||||
it and/or modify it under the terms of the GNU General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later
|
||||
version.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This program is distributed in the hope that it will be
|
||||
useful, but WITHOUT ANY WARRANTY; without even the implied
|
||||
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
See the GNU General Public License for more details.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You should have received a copy of the GNU General Public
|
||||
License along with this program; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
MA 02111-1307 USA
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For more details see the file COPYING in the source
|
||||
distribution of Linux.
|
||||
</para>
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
<title>The Linux Journalling API</title>
|
||||
|
||||
<toc></toc>
|
||||
|
||||
<chapter id="Overview">
|
||||
<sect1>
|
||||
<title>Overview</title>
|
||||
<sect1>
|
||||
<sect2>
|
||||
<title>Details</title>
|
||||
<para>
|
||||
The journalling layer is easy to use. You need to
|
||||
The journalling layer is easy to use. You need to
|
||||
first of all create a journal_t data structure. There are
|
||||
two calls to do this dependent on how you decide to allocate the physical
|
||||
media on which the journal resides. The journal_init_inode() call
|
||||
media on which the journal resides. The journal_init_inode() call
|
||||
is for journals stored in filesystem inodes, or the journal_init_dev()
|
||||
call can be use for journal stored on a raw device (in a continuous range
|
||||
call can be use for journal stored on a raw device (in a continuous range
|
||||
of blocks). A journal_t is a typedef for a struct pointer, so when
|
||||
you are finally finished make sure you call journal_destroy() on it
|
||||
to free up any used kernel memory.
|
||||
@ -91,27 +159,26 @@ need to call journal_create().
|
||||
<para>
|
||||
Most of the time however your journal file will already have been created, but
|
||||
before you load it you must call journal_wipe() to empty the journal file.
|
||||
Hang on, you say , what if the filesystem wasn't cleanly umount()'d . Well, it is the
|
||||
Hang on, you say , what if the filesystem wasn't cleanly umount()'d . Well, it is the
|
||||
job of the client file system to detect this and skip the call to journal_wipe().
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In either case the next call should be to journal_load() which prepares the
|
||||
journal file for use. Note that journal_wipe(..,0) calls journal_skip_recovery()
|
||||
journal file for use. Note that journal_wipe(..,0) calls journal_skip_recovery()
|
||||
for you if it detects any outstanding transactions in the journal and similarly
|
||||
journal_load() will call journal_recover() if necessary.
|
||||
I would advise reading fs/ext3/super.c for examples on this stage.
|
||||
[RGG: Why is the journal_wipe() call necessary - doesn't this needlessly
|
||||
complicate the API. Or isn't a good idea for the journal layer to hide
|
||||
[RGG: Why is the journal_wipe() call necessary - doesn't this needlessly
|
||||
complicate the API. Or isn't a good idea for the journal layer to hide
|
||||
dirty mounts from the client fs]
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Now you can go ahead and start modifying the underlying
|
||||
Now you can go ahead and start modifying the underlying
|
||||
filesystem. Almost.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
|
||||
You still need to actually journal your filesystem changes, this
|
||||
@ -138,10 +205,10 @@ individual buffers (blocks). Before you start to modify a buffer you
|
||||
need to call journal_get_{create,write,undo}_access() as appropriate,
|
||||
this allows the journalling layer to copy the unmodified data if it
|
||||
needs to. After all the buffer may be part of a previously uncommitted
|
||||
transaction.
|
||||
transaction.
|
||||
At this point you are at last ready to modify a buffer, and once
|
||||
you are have done so you need to call journal_dirty_{meta,}data().
|
||||
Or if you've asked for access to a buffer you now know is now longer
|
||||
Or if you've asked for access to a buffer you now know is now longer
|
||||
required to be pushed back on the device you can call journal_forget()
|
||||
in much the same way as you might have used bforget() in the past.
|
||||
</para>
|
||||
@ -156,7 +223,6 @@ Then at umount time , in your put_super() (2.4) or write_super() (2.5)
|
||||
you can then call journal_destroy() to clean up your in-core journal object.
|
||||
</para>
|
||||
|
||||
|
||||
<para>
|
||||
Unfortunately there a couple of ways the journal layer can cause a deadlock.
|
||||
The first thing to note is that each task can only have
|
||||
@ -164,19 +230,19 @@ a single outstanding transaction at any one time, remember nothing
|
||||
commits until the outermost journal_stop(). This means
|
||||
you must complete the transaction at the end of each file/inode/address
|
||||
etc. operation you perform, so that the journalling system isn't re-entered
|
||||
on another journal. Since transactions can't be nested/batched
|
||||
on another journal. Since transactions can't be nested/batched
|
||||
across differing journals, and another filesystem other than
|
||||
yours (say ext3) may be modified in a later syscall.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The second case to bear in mind is that journal_start() can
|
||||
block if there isn't enough space in the journal for your transaction
|
||||
The second case to bear in mind is that journal_start() can
|
||||
block if there isn't enough space in the journal for your transaction
|
||||
(based on the passed nblocks param) - when it blocks it merely(!) needs to
|
||||
wait for transactions to complete and be committed from other tasks,
|
||||
so essentially we are waiting for journal_stop(). So to avoid
|
||||
wait for transactions to complete and be committed from other tasks,
|
||||
so essentially we are waiting for journal_stop(). So to avoid
|
||||
deadlocks you must treat journal_start/stop() as if they
|
||||
were semaphores and include them in your semaphore ordering rules to prevent
|
||||
were semaphores and include them in your semaphore ordering rules to prevent
|
||||
deadlocks. Note that journal_extend() has similar blocking behaviour to
|
||||
journal_start() so you can deadlock here just as easily as on journal_start().
|
||||
</para>
|
||||
@ -184,7 +250,7 @@ journal_start() so you can deadlock here just as easily as on journal_start().
|
||||
<para>
|
||||
Try to reserve the right number of blocks the first time. ;-). This will
|
||||
be the maximum number of blocks you are going to touch in this transaction.
|
||||
I advise having a look at at least ext3_jbd.h to see the basis on which
|
||||
I advise having a look at at least ext3_jbd.h to see the basis on which
|
||||
ext3 uses to make these decisions.
|
||||
</para>
|
||||
|
||||
@ -193,13 +259,13 @@ Another wriggle to watch out for is your on-disk block allocation strategy.
|
||||
why? Because, if you undo a delete, you need to ensure you haven't reused any
|
||||
of the freed blocks in a later transaction. One simple way of doing this
|
||||
is make sure any blocks you allocate only have checkpointed transactions
|
||||
listed against them. Ext3 does this in ext3_test_allocatable().
|
||||
listed against them. Ext3 does this in ext3_test_allocatable().
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Lock is also providing through journal_{un,}lock_updates(),
|
||||
ext3 uses this when it wants a window with a clean and stable fs for a moment.
|
||||
eg.
|
||||
eg.
|
||||
</para>
|
||||
|
||||
<programlisting>
|
||||
@ -230,19 +296,19 @@ extend it like this:-
|
||||
struct journal_callback for_jbd;
|
||||
// Stuff for myfs allocated together.
|
||||
myfs_inode* i_commited;
|
||||
|
||||
|
||||
}
|
||||
</programlisting>
|
||||
|
||||
<para>
|
||||
this would be useful if you needed to know when data was committed to a
|
||||
this would be useful if you needed to know when data was committed to a
|
||||
particular inode.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
</sect2>
|
||||
|
||||
<sect1>
|
||||
<title>Summary</title>
|
||||
<sect2>
|
||||
<title>Summary</title>
|
||||
<para>
|
||||
Using the journal is a matter of wrapping the different context changes,
|
||||
being each mount, each modification (transaction) and each changed buffer
|
||||
@ -260,15 +326,15 @@ an example.
|
||||
if (clean) journal_wipe();
|
||||
journal_load();
|
||||
|
||||
foreach(transaction) { /*transactions must be
|
||||
foreach(transaction) { /*transactions must be
|
||||
completed before
|
||||
a syscall returns to
|
||||
a syscall returns to
|
||||
userspace*/
|
||||
|
||||
handle_t * xct=journal_start(my_jnrl);
|
||||
foreach(bh) {
|
||||
journal_get_{create,write,undo}_access(xact,bh);
|
||||
if ( myfs_modify(bh) ) { /* returns true
|
||||
if ( myfs_modify(bh) ) { /* returns true
|
||||
if makes changes */
|
||||
journal_dirty_{meta,}data(xact,bh);
|
||||
} else {
|
||||
@ -279,55 +345,57 @@ an example.
|
||||
}
|
||||
journal_destroy(my_jrnl);
|
||||
</programlisting>
|
||||
</sect1>
|
||||
</sect2>
|
||||
|
||||
</chapter>
|
||||
</sect1>
|
||||
|
||||
<chapter id="adt">
|
||||
<sect1>
|
||||
<title>Data Types</title>
|
||||
<para>
|
||||
<para>
|
||||
The journalling layer uses typedefs to 'hide' the concrete definitions
|
||||
of the structures used. As a client of the JBD layer you can
|
||||
just rely on the using the pointer as a magic cookie of some sort.
|
||||
|
||||
Obviously the hiding is not enforced as this is 'C'.
|
||||
</para>
|
||||
<sect1><title>Structures</title>
|
||||
!Iinclude/linux/jbd.h
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="calls">
|
||||
Obviously the hiding is not enforced as this is 'C'.
|
||||
</para>
|
||||
<sect2><title>Structures</title>
|
||||
!Iinclude/linux/jbd.h
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1>
|
||||
<title>Functions</title>
|
||||
<para>
|
||||
<para>
|
||||
The functions here are split into two groups those that
|
||||
affect a journal as a whole, and those which are used to
|
||||
manage transactions
|
||||
</para>
|
||||
<sect1><title>Journal Level</title>
|
||||
</para>
|
||||
<sect2><title>Journal Level</title>
|
||||
!Efs/jbd/journal.c
|
||||
!Ifs/jbd/recovery.c
|
||||
</sect1>
|
||||
<sect1><title>Transasction Level</title>
|
||||
!Efs/jbd/transaction.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
<chapter>
|
||||
</sect2>
|
||||
<sect2><title>Transasction Level</title>
|
||||
!Efs/jbd/transaction.c
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1>
|
||||
<title>See also</title>
|
||||
<para>
|
||||
<citation>
|
||||
<citation>
|
||||
<ulink url="ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/journal-design.ps.gz">
|
||||
Journaling the Linux ext2fs Filesystem,LinuxExpo 98, Stephen Tweedie
|
||||
Journaling the Linux ext2fs Filesystem, LinuxExpo 98, Stephen Tweedie
|
||||
</ulink>
|
||||
</citation>
|
||||
</para>
|
||||
<para>
|
||||
</citation>
|
||||
</para>
|
||||
<para>
|
||||
<citation>
|
||||
<ulink url="http://olstrans.sourceforge.net/release/OLS2000-ext3/OLS2000-ext3.html">
|
||||
Ext3 Journalling FileSystem , OLS 2000, Dr. Stephen Tweedie
|
||||
Ext3 Journalling FileSystem, OLS 2000, Dr. Stephen Tweedie
|
||||
</ulink>
|
||||
</citation>
|
||||
</para>
|
||||
</chapter>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
||||
</book>
|
@ -182,66 +182,6 @@ X!Ilib/string.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="vfs">
|
||||
<title>The Linux VFS</title>
|
||||
<sect1><title>The Filesystem types</title>
|
||||
!Iinclude/linux/fs.h
|
||||
</sect1>
|
||||
<sect1><title>The Directory Cache</title>
|
||||
!Efs/dcache.c
|
||||
!Iinclude/linux/dcache.h
|
||||
</sect1>
|
||||
<sect1><title>Inode Handling</title>
|
||||
!Efs/inode.c
|
||||
!Efs/bad_inode.c
|
||||
</sect1>
|
||||
<sect1><title>Registration and Superblocks</title>
|
||||
!Efs/super.c
|
||||
</sect1>
|
||||
<sect1><title>File Locks</title>
|
||||
!Efs/locks.c
|
||||
!Ifs/locks.c
|
||||
</sect1>
|
||||
<sect1><title>Other Functions</title>
|
||||
!Efs/mpage.c
|
||||
!Efs/namei.c
|
||||
!Efs/buffer.c
|
||||
!Efs/bio.c
|
||||
!Efs/seq_file.c
|
||||
!Efs/filesystems.c
|
||||
!Efs/fs-writeback.c
|
||||
!Efs/block_dev.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="proc">
|
||||
<title>The proc filesystem</title>
|
||||
|
||||
<sect1><title>sysctl interface</title>
|
||||
!Ekernel/sysctl.c
|
||||
</sect1>
|
||||
|
||||
<sect1><title>proc filesystem interface</title>
|
||||
!Ifs/proc/base.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="sysfs">
|
||||
<title>The Filesystem for Exporting Kernel Objects</title>
|
||||
!Efs/sysfs/file.c
|
||||
!Efs/sysfs/symlink.c
|
||||
!Efs/sysfs/bin.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="debugfs">
|
||||
<title>The debugfs filesystem</title>
|
||||
|
||||
<sect1><title>debugfs interface</title>
|
||||
!Efs/debugfs/inode.c
|
||||
!Efs/debugfs/file.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
<chapter id="relayfs">
|
||||
<title>relay interface support</title>
|
||||
|
||||
|
@ -395,6 +395,26 @@ bugme-janitor mailing list (every change in the bugzilla is mailed here)
|
||||
|
||||
|
||||
|
||||
Managing bug reports
|
||||
--------------------
|
||||
|
||||
One of the best ways to put into practice your hacking skills is by fixing
|
||||
bugs reported by other people. Not only you will help to make the kernel
|
||||
more stable, you'll learn to fix real world problems and you will improve
|
||||
your skills, and other developers will be aware of your presence. Fixing
|
||||
bugs is one of the best ways to get merits among other developers, because
|
||||
not many people like wasting time fixing other people's bugs.
|
||||
|
||||
To work in the already reported bug reports, go to http://bugzilla.kernel.org.
|
||||
If you want to be advised of the future bug reports, you can subscribe to the
|
||||
bugme-new mailing list (only new bug reports are mailed here) or to the
|
||||
bugme-janitor mailing list (every change in the bugzilla is mailed here)
|
||||
|
||||
http://lists.osdl.org/mailman/listinfo/bugme-new
|
||||
http://lists.osdl.org/mailman/listinfo/bugme-janitors
|
||||
|
||||
|
||||
|
||||
Mailing lists
|
||||
-------------
|
||||
|
||||
|
@ -470,7 +470,68 @@ LOC: 324553 325068
|
||||
ERR: 0
|
||||
MIS: 0
|
||||
|
||||
6. FAQ
|
||||
6. MSI quirks
|
||||
|
||||
Several PCI chipsets or devices are known to not support MSI.
|
||||
The PCI stack provides 3 possible levels of MSI disabling:
|
||||
* on a single device
|
||||
* on all devices behind a specific bridge
|
||||
* globally
|
||||
|
||||
6.1. Disabling MSI on a single device
|
||||
|
||||
Under some circumstances, it might be required to disable MSI on a
|
||||
single device, It may be achived by either not calling pci_enable_msi()
|
||||
or all, or setting the pci_dev->no_msi flag before (most of the time
|
||||
in a quirk).
|
||||
|
||||
6.2. Disabling MSI below a bridge
|
||||
|
||||
The vast majority of MSI quirks are required by PCI bridges not
|
||||
being able to route MSI between busses. In this case, MSI have to be
|
||||
disabled on all devices behind this bridge. It is achieves by setting
|
||||
the PCI_BUS_FLAGS_NO_MSI flag in the pci_bus->bus_flags of the bridge
|
||||
subordinate bus. There is no need to set the same flag on bridges that
|
||||
are below the broken brigde. When pci_enable_msi() is called to enable
|
||||
MSI on a device, pci_msi_supported() takes care of checking the NO_MSI
|
||||
flag in all parent busses of the device.
|
||||
|
||||
Some bridges actually support dynamic MSI support enabling/disabling
|
||||
by changing some bits in their PCI configuration space (especially
|
||||
the Hypertransport chipsets such as the nVidia nForce and Serverworks
|
||||
HT2000). It may then be required to update the NO_MSI flag on the
|
||||
corresponding devices in the sysfs hierarchy. To enable MSI support
|
||||
on device "0000:00:0e", do:
|
||||
|
||||
echo 1 > /sys/bus/pci/devices/0000:00:0e/msi_bus
|
||||
|
||||
To disable MSI support, echo 0 instead of 1. Note that it should be
|
||||
used with caution since changing this value might break interrupts.
|
||||
|
||||
6.3. Disabling MSI globally
|
||||
|
||||
Some extreme cases may require to disable MSI globally on the system.
|
||||
For now, the only known case is a Serverworks PCI-X chipsets (MSI are
|
||||
not supported on several busses that are not all connected to the
|
||||
chipset in the Linux PCI hierarchy). In the vast majority of other
|
||||
cases, disabling only behind a specific bridge is enough.
|
||||
|
||||
For debugging purpose, the user may also pass pci=nomsi on the kernel
|
||||
command-line to explicitly disable MSI globally. But, once the appro-
|
||||
priate quirks are added to the kernel, this option should not be
|
||||
required anymore.
|
||||
|
||||
6.4. Finding why MSI cannot be enabled on a device
|
||||
|
||||
Assuming that MSI are not enabled on a device, you should look at
|
||||
dmesg to find messages that quirks may output when disabling MSI
|
||||
on some devices, some bridges or even globally.
|
||||
Then, lspci -t gives the list of bridges above a device. Reading
|
||||
/sys/bus/pci/devices/0000:00:0e/msi_bus will tell you whether MSI
|
||||
are enabled (1) or disabled (0). In 0 is found in a single bridge
|
||||
msi_bus file above the device, MSI cannot be enabled.
|
||||
|
||||
7. FAQ
|
||||
|
||||
Q1. Are there any limitations on using the MSI?
|
||||
|
||||
|
@ -49,7 +49,7 @@ __u64 stime, utime;
|
||||
}
|
||||
|
||||
/* Maximum size of response requested or message sent */
|
||||
#define MAX_MSG_SIZE 256
|
||||
#define MAX_MSG_SIZE 1024
|
||||
/* Maximum number of cpus expected to be specified in a cpumask */
|
||||
#define MAX_CPUS 32
|
||||
/* Maximum length of pathname to log file */
|
||||
|
@ -46,7 +46,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
|
||||
maxcpus=2 will only boot 2. You can choose to bring the
|
||||
other cpus later online, read FAQ's for more info.
|
||||
|
||||
additional_cpus*=n Use this to limit hotpluggable cpus. This option sets
|
||||
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
|
||||
cpu_possible_map = cpu_present_map + additional_cpus
|
||||
|
||||
(*) Option valid only for following architectures
|
||||
@ -101,15 +101,15 @@ cpu_possible_map/for_each_possible_cpu() to iterate.
|
||||
|
||||
Never use anything other than cpumask_t to represent bitmap of CPUs.
|
||||
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
for_each_possible_cpu - Iterate over cpu_possible_map
|
||||
for_each_online_cpu - Iterate over cpu_online_map
|
||||
for_each_present_cpu - Iterate over cpu_present_map
|
||||
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
|
||||
for_each_possible_cpu - Iterate over cpu_possible_map
|
||||
for_each_online_cpu - Iterate over cpu_online_map
|
||||
for_each_present_cpu - Iterate over cpu_present_map
|
||||
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
|
||||
|
||||
#include <linux/cpu.h>
|
||||
lock_cpu_hotplug() and unlock_cpu_hotplug():
|
||||
#include <linux/cpu.h>
|
||||
lock_cpu_hotplug() and unlock_cpu_hotplug():
|
||||
|
||||
The above calls are used to inhibit cpu hotplug operations. While holding the
|
||||
cpucontrol mutex, cpu_online_map will not change. If you merely need to avoid
|
||||
@ -120,7 +120,7 @@ will work as long as stop_machine_run() is used to take a cpu down.
|
||||
|
||||
CPU Hotplug - Frequently Asked Questions.
|
||||
|
||||
Q: How to i enable my kernel to support CPU hotplug?
|
||||
Q: How to enable my kernel to support CPU hotplug?
|
||||
A: When doing make defconfig, Enable CPU hotplug support
|
||||
|
||||
"Processor type and Features" -> Support for Hotpluggable CPUs
|
||||
@ -141,39 +141,39 @@ A: You should now notice an entry in sysfs.
|
||||
Check if sysfs is mounted, using the "mount" command. You should notice
|
||||
an entry as shown below in the output.
|
||||
|
||||
....
|
||||
none on /sys type sysfs (rw)
|
||||
....
|
||||
....
|
||||
none on /sys type sysfs (rw)
|
||||
....
|
||||
|
||||
if this is not mounted, do the following.
|
||||
If this is not mounted, do the following.
|
||||
|
||||
#mkdir /sysfs
|
||||
#mount -t sysfs sys /sys
|
||||
#mkdir /sysfs
|
||||
#mount -t sysfs sys /sys
|
||||
|
||||
now you should see entries for all present cpu, the following is an example
|
||||
Now you should see entries for all present cpu, the following is an example
|
||||
in a 8-way system.
|
||||
|
||||
#pwd
|
||||
#/sys/devices/system/cpu
|
||||
#ls -l
|
||||
total 0
|
||||
drwxr-xr-x 10 root root 0 Sep 19 07:44 .
|
||||
drwxr-xr-x 13 root root 0 Sep 19 07:45 ..
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu0
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu1
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu2
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu3
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu4
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu5
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu6
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:48 cpu7
|
||||
#pwd
|
||||
#/sys/devices/system/cpu
|
||||
#ls -l
|
||||
total 0
|
||||
drwxr-xr-x 10 root root 0 Sep 19 07:44 .
|
||||
drwxr-xr-x 13 root root 0 Sep 19 07:45 ..
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu0
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu1
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu2
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu3
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu4
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu5
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:44 cpu6
|
||||
drwxr-xr-x 3 root root 0 Sep 19 07:48 cpu7
|
||||
|
||||
Under each directory you would find an "online" file which is the control
|
||||
file to logically online/offline a processor.
|
||||
|
||||
Q: Does hot-add/hot-remove refer to physical add/remove of cpus?
|
||||
A: The usage of hot-add/remove may not be very consistently used in the code.
|
||||
CONFIG_CPU_HOTPLUG enables logical online/offline capability in the kernel.
|
||||
CONFIG_HOTPLUG_CPU enables logical online/offline capability in the kernel.
|
||||
To support physical addition/removal, one would need some BIOS hooks and
|
||||
the platform should have something like an attention button in PCI hotplug.
|
||||
CONFIG_ACPI_HOTPLUG_CPU enables ACPI support for physical add/remove of CPUs.
|
||||
@ -181,17 +181,17 @@ CONFIG_ACPI_HOTPLUG_CPU enables ACPI support for physical add/remove of CPUs.
|
||||
Q: How do i logically offline a CPU?
|
||||
A: Do the following.
|
||||
|
||||
#echo 0 > /sys/devices/system/cpu/cpuX/online
|
||||
#echo 0 > /sys/devices/system/cpu/cpuX/online
|
||||
|
||||
once the logical offline is successful, check
|
||||
Once the logical offline is successful, check
|
||||
|
||||
#cat /proc/interrupts
|
||||
#cat /proc/interrupts
|
||||
|
||||
you should now not see the CPU that you removed. Also online file will report
|
||||
You should now not see the CPU that you removed. Also online file will report
|
||||
the state as 0 when a cpu if offline and 1 when its online.
|
||||
|
||||
#To display the current cpu state.
|
||||
#cat /sys/devices/system/cpu/cpuX/online
|
||||
#To display the current cpu state.
|
||||
#cat /sys/devices/system/cpu/cpuX/online
|
||||
|
||||
Q: Why cant i remove CPU0 on some systems?
|
||||
A: Some architectures may have some special dependency on a certain CPU.
|
||||
@ -234,8 +234,8 @@ Q: If i have some kernel code that needs to be aware of CPU arrival and
|
||||
departure, how to i arrange for proper notification?
|
||||
A: This is what you would need in your kernel code to receive notifications.
|
||||
|
||||
#include <linux/cpu.h>
|
||||
static int __cpuinit foobar_cpu_callback(struct notifier_block *nfb,
|
||||
#include <linux/cpu.h>
|
||||
static int __cpuinit foobar_cpu_callback(struct notifier_block *nfb,
|
||||
unsigned long action, void *hcpu)
|
||||
{
|
||||
unsigned int cpu = (unsigned long)hcpu;
|
||||
@ -279,10 +279,10 @@ Q: I don't see my action being called for all CPUs already up and running?
|
||||
A: Yes, CPU notifiers are called only when new CPUs are on-lined or offlined.
|
||||
If you need to perform some action for each cpu already in the system, then
|
||||
|
||||
for_each_online_cpu(i) {
|
||||
for_each_online_cpu(i) {
|
||||
foobar_cpu_callback(&foobar_cpu_notifier, CPU_UP_PREPARE, i);
|
||||
foobar_cpu_callback(&foobar-cpu_notifier, CPU_ONLINE, i);
|
||||
}
|
||||
foobar_cpu_callback(&foobar_cpu_notifier, CPU_ONLINE, i);
|
||||
}
|
||||
|
||||
Q: If i would like to develop cpu hotplug support for a new architecture,
|
||||
what do i need at a minimum?
|
||||
@ -307,38 +307,38 @@ Q: I need to ensure that a particular cpu is not removed when there is some
|
||||
work specific to this cpu is in progress.
|
||||
A: First switch the current thread context to preferred cpu
|
||||
|
||||
int my_func_on_cpu(int cpu)
|
||||
{
|
||||
cpumask_t saved_mask, new_mask = CPU_MASK_NONE;
|
||||
int curr_cpu, err = 0;
|
||||
int my_func_on_cpu(int cpu)
|
||||
{
|
||||
cpumask_t saved_mask, new_mask = CPU_MASK_NONE;
|
||||
int curr_cpu, err = 0;
|
||||
|
||||
saved_mask = current->cpus_allowed;
|
||||
cpu_set(cpu, new_mask);
|
||||
err = set_cpus_allowed(current, new_mask);
|
||||
saved_mask = current->cpus_allowed;
|
||||
cpu_set(cpu, new_mask);
|
||||
err = set_cpus_allowed(current, new_mask);
|
||||
|
||||
if (err)
|
||||
return err;
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
/*
|
||||
* If we got scheduled out just after the return from
|
||||
* set_cpus_allowed() before running the work, this ensures
|
||||
* we stay locked.
|
||||
*/
|
||||
curr_cpu = get_cpu();
|
||||
/*
|
||||
* If we got scheduled out just after the return from
|
||||
* set_cpus_allowed() before running the work, this ensures
|
||||
* we stay locked.
|
||||
*/
|
||||
curr_cpu = get_cpu();
|
||||
|
||||
if (curr_cpu != cpu) {
|
||||
err = -EAGAIN;
|
||||
goto ret;
|
||||
} else {
|
||||
/*
|
||||
* Do work : But cant sleep, since get_cpu() disables preempt
|
||||
*/
|
||||
}
|
||||
ret:
|
||||
put_cpu();
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return err;
|
||||
}
|
||||
if (curr_cpu != cpu) {
|
||||
err = -EAGAIN;
|
||||
goto ret;
|
||||
} else {
|
||||
/*
|
||||
* Do work : But cant sleep, since get_cpu() disables preempt
|
||||
*/
|
||||
}
|
||||
ret:
|
||||
put_cpu();
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return err;
|
||||
}
|
||||
|
||||
|
||||
Q: How do we determine how many CPUs are available for hotplug.
|
||||
|
@ -255,7 +255,7 @@ Who: Stephen Hemminger <shemminger@osdl.org>
|
||||
|
||||
|
||||
What: PHYSDEVPATH, PHYSDEVBUS, PHYSDEVDRIVER in the uevent environment
|
||||
When: Oktober 2008
|
||||
When: October 2008
|
||||
Why: The stacking of class devices makes these values misleading and
|
||||
inconsistent.
|
||||
Class devices should not carry any of these properties, and bus
|
||||
|
@ -34,6 +34,8 @@ ext2.txt
|
||||
- info, mount options and specifications for the Ext2 filesystem.
|
||||
ext3.txt
|
||||
- info, mount options and specifications for the Ext3 filesystem.
|
||||
ext4.txt
|
||||
- info, mount options and specifications for the Ext4 filesystem.
|
||||
files.txt
|
||||
- info on file management in the Linux kernel.
|
||||
fuse.txt
|
||||
|
236
Documentation/filesystems/ext4.txt
Normal file
236
Documentation/filesystems/ext4.txt
Normal file
@ -0,0 +1,236 @@
|
||||
|
||||
Ext4 Filesystem
|
||||
===============
|
||||
|
||||
This is a development version of the ext4 filesystem, an advanced level
|
||||
of the ext3 filesystem which incorporates scalability and reliability
|
||||
enhancements for supporting large filesystems (64 bit) in keeping with
|
||||
increasing disk capacities and state-of-the-art feature requirements.
|
||||
|
||||
Mailing list: linux-ext4@vger.kernel.org
|
||||
|
||||
|
||||
1. Quick usage instructions:
|
||||
===========================
|
||||
|
||||
- Grab updated e2fsprogs from
|
||||
ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs-interim/
|
||||
This is a patchset on top of e2fsprogs-1.39, which can be found at
|
||||
ftp://ftp.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/
|
||||
|
||||
- It's still mke2fs -j /dev/hda1
|
||||
|
||||
- mount /dev/hda1 /wherever -t ext4dev
|
||||
|
||||
- To enable extents,
|
||||
|
||||
mount /dev/hda1 /wherever -t ext4dev -o extents
|
||||
|
||||
- The filesystem is compatible with the ext3 driver until you add a file
|
||||
which has extents (ie: `mount -o extents', then create a file).
|
||||
|
||||
NOTE: The "extents" mount flag is temporary. It will soon go away and
|
||||
extents will be enabled by the "-o extents" flag to mke2fs or tune2fs
|
||||
|
||||
- When comparing performance with other filesystems, remember that
|
||||
ext3/4 by default offers higher data integrity guarantees than most. So
|
||||
when comparing with a metadata-only journalling filesystem, use `mount -o
|
||||
data=writeback'. And you might as well use `mount -o nobh' too along
|
||||
with it. Making the journal larger than the mke2fs default often helps
|
||||
performance with metadata-intensive workloads.
|
||||
|
||||
2. Features
|
||||
===========
|
||||
|
||||
2.1 Currently available
|
||||
|
||||
* ability to use filesystems > 16TB
|
||||
* extent format reduces metadata overhead (RAM, IO for access, transactions)
|
||||
* extent format more robust in face of on-disk corruption due to magics,
|
||||
* internal redunancy in tree
|
||||
|
||||
2.1 Previously available, soon to be enabled by default by "mkefs.ext4":
|
||||
|
||||
* dir_index and resize inode will be on by default
|
||||
* large inodes will be used by default for fast EAs, nsec timestamps, etc
|
||||
|
||||
2.2 Candidate features for future inclusion
|
||||
|
||||
There are several under discussion, whether they all make it in is
|
||||
partly a function of how much time everyone has to work on them:
|
||||
|
||||
* improved file allocation (multi-block alloc, delayed alloc; basically done)
|
||||
* fix 32000 subdirectory limit (patch exists, needs some e2fsck work)
|
||||
* nsec timestamps for mtime, atime, ctime, create time (patch exists,
|
||||
needs some e2fsck work)
|
||||
* inode version field on disk (NFSv4, Lustre; prototype exists)
|
||||
* reduced mke2fs/e2fsck time via uninitialized groups (prototype exists)
|
||||
* journal checksumming for robustness, performance (prototype exists)
|
||||
* persistent file preallocation (e.g for streaming media, databases)
|
||||
|
||||
Features like metadata checksumming have been discussed and planned for
|
||||
a bit but no patches exist yet so I'm not sure they're in the near-term
|
||||
roadmap.
|
||||
|
||||
The big performance win will come with mballoc and delalloc. CFS has
|
||||
been using mballoc for a few years already with Lustre, and IBM + Bull
|
||||
did a lot of benchmarking on it. The reason it isn't in the first set of
|
||||
patches is partly a manageability issue, and partly because it doesn't
|
||||
directly affect the on-disk format (outside of much better allocation)
|
||||
so it isn't critical to get into the first round of changes. I believe
|
||||
Alex is working on a new set of patches right now.
|
||||
|
||||
3. Options
|
||||
==========
|
||||
|
||||
When mounting an ext4 filesystem, the following option are accepted:
|
||||
(*) == default
|
||||
|
||||
extents ext4 will use extents to address file data. The
|
||||
file system will no longer be mountable by ext3.
|
||||
|
||||
journal=update Update the ext4 file system's journal to the current
|
||||
format.
|
||||
|
||||
journal=inum When a journal already exists, this option is ignored.
|
||||
Otherwise, it specifies the number of the inode which
|
||||
will represent the ext4 file system's journal file.
|
||||
|
||||
journal_dev=devnum When the external journal device's major/minor numbers
|
||||
have changed, this option allows the user to specify
|
||||
the new journal location. The journal device is
|
||||
identified through its new major/minor numbers encoded
|
||||
in devnum.
|
||||
|
||||
noload Don't load the journal on mounting.
|
||||
|
||||
data=journal All data are committed into the journal prior to being
|
||||
written into the main file system.
|
||||
|
||||
data=ordered (*) All data are forced directly out to the main file
|
||||
system prior to its metadata being committed to the
|
||||
journal.
|
||||
|
||||
data=writeback Data ordering is not preserved, data may be written
|
||||
into the main file system after its metadata has been
|
||||
committed to the journal.
|
||||
|
||||
commit=nrsec (*) Ext4 can be told to sync all its data and metadata
|
||||
every 'nrsec' seconds. The default value is 5 seconds.
|
||||
This means that if you lose your power, you will lose
|
||||
as much as the latest 5 seconds of work (your
|
||||
filesystem will not be damaged though, thanks to the
|
||||
journaling). This default value (or any low value)
|
||||
will hurt performance, but it's good for data-safety.
|
||||
Setting it to 0 will have the same effect as leaving
|
||||
it at the default (5 seconds).
|
||||
Setting it to very large values will improve
|
||||
performance.
|
||||
|
||||
barrier=1 This enables/disables barriers. barrier=0 disables
|
||||
it, barrier=1 enables it.
|
||||
|
||||
orlov (*) This enables the new Orlov block allocator. It is
|
||||
enabled by default.
|
||||
|
||||
oldalloc This disables the Orlov block allocator and enables
|
||||
the old block allocator. Orlov should have better
|
||||
performance - we'd like to get some feedback if it's
|
||||
the contrary for you.
|
||||
|
||||
user_xattr Enables Extended User Attributes. Additionally, you
|
||||
need to have extended attribute support enabled in the
|
||||
kernel configuration (CONFIG_EXT4_FS_XATTR). See the
|
||||
attr(5) manual page and http://acl.bestbits.at/ to
|
||||
learn more about extended attributes.
|
||||
|
||||
nouser_xattr Disables Extended User Attributes.
|
||||
|
||||
acl Enables POSIX Access Control Lists support.
|
||||
Additionally, you need to have ACL support enabled in
|
||||
the kernel configuration (CONFIG_EXT4_FS_POSIX_ACL).
|
||||
See the acl(5) manual page and http://acl.bestbits.at/
|
||||
for more information.
|
||||
|
||||
noacl This option disables POSIX Access Control List
|
||||
support.
|
||||
|
||||
reservation
|
||||
|
||||
noreservation
|
||||
|
||||
bsddf (*) Make 'df' act like BSD.
|
||||
minixdf Make 'df' act like Minix.
|
||||
|
||||
check=none Don't do extra checking of bitmaps on mount.
|
||||
nocheck
|
||||
|
||||
debug Extra debugging information is sent to syslog.
|
||||
|
||||
errors=remount-ro(*) Remount the filesystem read-only on an error.
|
||||
errors=continue Keep going on a filesystem error.
|
||||
errors=panic Panic and halt the machine if an error occurs.
|
||||
|
||||
grpid Give objects the same group ID as their creator.
|
||||
bsdgroups
|
||||
|
||||
nogrpid (*) New objects have the group ID of their creator.
|
||||
sysvgroups
|
||||
|
||||
resgid=n The group ID which may use the reserved blocks.
|
||||
|
||||
resuid=n The user ID which may use the reserved blocks.
|
||||
|
||||
sb=n Use alternate superblock at this location.
|
||||
|
||||
quota
|
||||
noquota
|
||||
grpquota
|
||||
usrquota
|
||||
|
||||
bh (*) ext4 associates buffer heads to data pages to
|
||||
nobh (a) cache disk block mapping information
|
||||
(b) link pages into transaction to provide
|
||||
ordering guarantees.
|
||||
"bh" option forces use of buffer heads.
|
||||
"nobh" option tries to avoid associating buffer
|
||||
heads (supported only for "writeback" mode).
|
||||
|
||||
|
||||
Data Mode
|
||||
---------
|
||||
There are 3 different data modes:
|
||||
|
||||
* writeback mode
|
||||
In data=writeback mode, ext4 does not journal data at all. This mode provides
|
||||
a similar level of journaling as that of XFS, JFS, and ReiserFS in its default
|
||||
mode - metadata journaling. A crash+recovery can cause incorrect data to
|
||||
appear in files which were written shortly before the crash. This mode will
|
||||
typically provide the best ext4 performance.
|
||||
|
||||
* ordered mode
|
||||
In data=ordered mode, ext4 only officially journals metadata, but it logically
|
||||
groups metadata and data blocks into a single unit called a transaction. When
|
||||
it's time to write the new metadata out to disk, the associated data blocks
|
||||
are written first. In general, this mode performs slightly slower than
|
||||
writeback but significantly faster than journal mode.
|
||||
|
||||
* journal mode
|
||||
data=journal mode provides full data and metadata journaling. All new data is
|
||||
written to the journal first, and then to its final location.
|
||||
In the event of a crash, the journal can be replayed, bringing both data and
|
||||
metadata into a consistent state. This mode is the slowest except when data
|
||||
needs to be read from and written to disk at the same time where it
|
||||
outperforms all others modes.
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
kernel source: <file:fs/ext4/>
|
||||
<file:fs/jbd2/>
|
||||
|
||||
programs: http://e2fsprogs.sourceforge.net/
|
||||
http://ext2resize.sourceforge.net
|
||||
|
||||
useful links: http://fedoraproject.org/wiki/ext3-devel
|
||||
http://www.bullopensource.org/ext4/
|
@ -24,7 +24,7 @@ Authors:
|
||||
Frodo Looijaard <frodol@dds.nl>,
|
||||
Philip Edelbrock <phil@netroedge.com>,
|
||||
Michiel Rook <michiel@grendelproject.nl>,
|
||||
Grant Coady <gcoady@gmail.com> with guidance
|
||||
Grant Coady <gcoady.lk@gmail.com> with guidance
|
||||
from Jean Delvare <khali@linux-fr.org>
|
||||
|
||||
Interface
|
||||
|
@ -17,7 +17,7 @@ Thanks to Kris Chen from Fintek for answering technical questions and
|
||||
providing additional documentation.
|
||||
|
||||
Thanks to Chris Lin from Jetway for providing wiring schematics and
|
||||
anwsering technical questions.
|
||||
answering technical questions.
|
||||
|
||||
|
||||
Description
|
||||
|
@ -2,7 +2,7 @@ Kernel driver k8temp
|
||||
====================
|
||||
|
||||
Supported chips:
|
||||
* AMD K8 CPU
|
||||
* AMD Athlon64/FX or Opteron CPUs
|
||||
Prefix: 'k8temp'
|
||||
Addresses scanned: PCI space
|
||||
Datasheet: http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/32559.pdf
|
||||
@ -13,10 +13,13 @@ Contact: Rudolf Marek <r.marek@sh.cvut.cz>
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver permits reading temperature sensor(s) embedded inside AMD K8 CPUs.
|
||||
Official documentation says that it works from revision F of K8 core, but
|
||||
in fact it seems to be implemented for all revisions of K8 except the first
|
||||
two revisions (SH-B0 and SH-B3).
|
||||
This driver permits reading temperature sensor(s) embedded inside AMD K8
|
||||
family CPUs (Athlon64/FX, Opteron). Official documentation says that it works
|
||||
from revision F of K8 core, but in fact it seems to be implemented for all
|
||||
revisions of K8 except the first two revisions (SH-B0 and SH-B3).
|
||||
|
||||
Please note that you will need at least lm-sensors 2.10.1 for proper userspace
|
||||
support.
|
||||
|
||||
There can be up to four temperature sensors inside single CPU. The driver
|
||||
will auto-detect the sensors and will display only temperatures from
|
||||
|
@ -2,12 +2,14 @@ Kernel driver smsc47m1
|
||||
======================
|
||||
|
||||
Supported chips:
|
||||
* SMSC LPC47B27x, LPC47M10x, LPC47M13x, LPC47M14x, LPC47M15x and LPC47M192
|
||||
* SMSC LPC47B27x, LPC47M112, LPC47M10x, LPC47M13x, LPC47M14x,
|
||||
LPC47M15x and LPC47M192
|
||||
Addresses scanned: none, address read from Super I/O config space
|
||||
Prefix: 'smsc47m1'
|
||||
Datasheets:
|
||||
http://www.smsc.com/main/datasheets/47b27x.pdf
|
||||
http://www.smsc.com/main/datasheets/47m10x.pdf
|
||||
http://www.smsc.com/main/datasheets/47m112.pdf
|
||||
http://www.smsc.com/main/tools/discontinued/47m13x.pdf
|
||||
http://www.smsc.com/main/datasheets/47m14x.pdf
|
||||
http://www.smsc.com/main/tools/discontinued/47m15x.pdf
|
||||
|
@ -26,7 +26,7 @@ fan control mode).
|
||||
Temperatures are measured in degrees Celsius and measurement resolution is 1
|
||||
degC for temp1 and 0.5 degC for temp2 and temp3. An alarm is triggered when
|
||||
the temperature gets higher than high limit; it stays on until the temperature
|
||||
falls below the Hysteresis value.
|
||||
falls below the hysteresis value.
|
||||
|
||||
Fan rotation speeds are reported in RPM (rotations per minute). An alarm is
|
||||
triggered if the rotation speed has dropped below a programmable limit. Fan
|
||||
@ -67,9 +67,9 @@ Thermal Cruise mode
|
||||
|
||||
If the temperature is in the range defined by:
|
||||
|
||||
pwm[1-4]_target - set target temperature, unit millidegree Celcius
|
||||
pwm[1-4]_target - set target temperature, unit millidegree Celsius
|
||||
(range 0 - 127000)
|
||||
pwm[1-4]_tolerance - tolerance, unit millidegree Celcius (range 0 - 15000)
|
||||
pwm[1-4]_tolerance - tolerance, unit millidegree Celsius (range 0 - 15000)
|
||||
|
||||
there are no changes to fan speed. Once the temperature leaves the interval,
|
||||
fan speed increases (temp is higher) or decreases if lower than desired.
|
||||
|
@ -30,9 +30,10 @@ detailed description):
|
||||
- ACPI sounds
|
||||
- temperature sensors
|
||||
- Experimental: embedded controller register dump
|
||||
- Experimental: LCD brightness control
|
||||
- Experimental: volume control
|
||||
- LCD brightness control
|
||||
- Volume control
|
||||
- Experimental: fan speed, fan enable/disable
|
||||
- Experimental: WAN enable and disable
|
||||
|
||||
A compatibility table by model and feature is maintained on the web
|
||||
site, http://ibm-acpi.sf.net/. I appreciate any success or failure
|
||||
@ -52,40 +53,7 @@ Installation
|
||||
|
||||
If you are compiling this driver as included in the Linux kernel
|
||||
sources, simply enable the CONFIG_ACPI_IBM option (Power Management /
|
||||
ACPI / IBM ThinkPad Laptop Extras). The rest of this section describes
|
||||
how to install this driver when downloaded from the web site.
|
||||
|
||||
First, you need to get a kernel with ACPI support up and running.
|
||||
Please refer to http://acpi.sourceforge.net/ for help with this
|
||||
step. How successful you will be depends a lot on you ThinkPad model,
|
||||
the kernel you are using and any additional patches applied. The
|
||||
kernel provided with your distribution may not be good enough. I
|
||||
needed to compile a 2.6.7 kernel with the 20040715 ACPI patch to get
|
||||
ACPI working reliably on my ThinkPad X40. Old ThinkPad models may not
|
||||
be supported at all.
|
||||
|
||||
Assuming you have the basic ACPI support working (e.g. you can see the
|
||||
/proc/acpi directory), follow the following steps to install this
|
||||
driver:
|
||||
|
||||
- unpack the archive:
|
||||
|
||||
tar xzvf ibm-acpi-x.y.tar.gz; cd ibm-acpi-x.y
|
||||
|
||||
- compile the driver:
|
||||
|
||||
make
|
||||
|
||||
- install the module in your kernel modules directory:
|
||||
|
||||
make install
|
||||
|
||||
- load the module:
|
||||
|
||||
modprobe ibm_acpi
|
||||
|
||||
After loading the module, check the "dmesg" output for any error messages.
|
||||
|
||||
ACPI / IBM ThinkPad Laptop Extras).
|
||||
|
||||
Features
|
||||
--------
|
||||
@ -523,13 +491,8 @@ registers contain the current battery capacity, etc. If you experiment
|
||||
with this, do send me your results (including some complete dumps with
|
||||
a description of the conditions when they were taken.)
|
||||
|
||||
EXPERIMENTAL: LCD brightness control -- /proc/acpi/ibm/brightness
|
||||
-----------------------------------------------------------------
|
||||
|
||||
This feature is marked EXPERIMENTAL because the implementation
|
||||
directly accesses hardware registers and may not work as expected. USE
|
||||
WITH CAUTION! To use this feature, you need to supply the
|
||||
experimental=1 parameter when loading the module.
|
||||
LCD brightness control -- /proc/acpi/ibm/brightness
|
||||
---------------------------------------------------
|
||||
|
||||
This feature allows software control of the LCD brightness on ThinkPad
|
||||
models which don't have a hardware brightness slider. The available
|
||||
@ -542,13 +505,8 @@ commands are:
|
||||
The <level> number range is 0 to 7, although not all of them may be
|
||||
distinct. The current brightness level is shown in the file.
|
||||
|
||||
EXPERIMENTAL: Volume control -- /proc/acpi/ibm/volume
|
||||
-----------------------------------------------------
|
||||
|
||||
This feature is marked EXPERIMENTAL because the implementation
|
||||
directly accesses hardware registers and may not work as expected. USE
|
||||
WITH CAUTION! To use this feature, you need to supply the
|
||||
experimental=1 parameter when loading the module.
|
||||
Volume control -- /proc/acpi/ibm/volume
|
||||
---------------------------------------
|
||||
|
||||
This feature allows volume control on ThinkPad models which don't have
|
||||
a hardware volume knob. The available commands are:
|
||||
@ -611,6 +569,23 @@ with the following command:
|
||||
|
||||
echo 'level <level>' > /proc/acpi/ibm/thermal
|
||||
|
||||
EXPERIMENTAL: WAN -- /proc/acpi/ibm/wan
|
||||
---------------------------------------
|
||||
|
||||
This feature is marked EXPERIMENTAL because the implementation
|
||||
directly accesses hardware registers and may not work as expected. USE
|
||||
WITH CAUTION! To use this feature, you need to supply the
|
||||
experimental=1 parameter when loading the module.
|
||||
|
||||
This feature shows the presence and current state of a WAN (Sierra
|
||||
Wireless EV-DO) device. If WAN is installed, the following commands can
|
||||
be used:
|
||||
|
||||
echo enable > /proc/acpi/ibm/wan
|
||||
echo disable > /proc/acpi/ibm/wan
|
||||
|
||||
It was tested on a Lenovo Thinkpad X60. It should probably work on other
|
||||
Thinkpad models which come with this module installed.
|
||||
|
||||
Multiple Commands, Module Parameters
|
||||
------------------------------------
|
||||
|
@ -3,20 +3,37 @@ xpad - Linux USB driver for X-Box gamepads
|
||||
This is the very first release of a driver for X-Box gamepads.
|
||||
Basically, this was hacked away in just a few hours, so don't expect
|
||||
miracles.
|
||||
|
||||
In particular, there is currently NO support for the rumble pack.
|
||||
You won't find many ff-aware linux applications anyway.
|
||||
|
||||
|
||||
0. Status
|
||||
---------
|
||||
0. Notes
|
||||
--------
|
||||
|
||||
For now, this driver has only been tested on just one Linux-Box.
|
||||
This one is running a 2.4.18 kernel with usb-uhci on an amd athlon 600.
|
||||
Driver updated for kernel 2.6.17.11. (Based on a patch for 2.6.11.4.)
|
||||
|
||||
The jstest-program from joystick-1.2.15 (jstest-version 2.1.0) reports
|
||||
8 axes and 10 buttons.
|
||||
The number of buttons/axes reported varies based on 3 things:
|
||||
- if you are using a known controller
|
||||
- if you are using a known dance pad
|
||||
- if using an unknown device (one not listed below), what you set in the
|
||||
module configuration for "Map D-PAD to buttons rather than axes for unknown
|
||||
pads" (module option dpad_to_buttons)
|
||||
|
||||
Alls 8 axes work, though they all have the same range (-32768..32767)
|
||||
If you set dpad_to_buttons to 0 and you are using an unknown device (one
|
||||
not listed below), the driver will map the directional pad to axes (X/Y),
|
||||
if you said N it will map the d-pad to buttons, which is needed for dance
|
||||
style games to function correctly. The default is Y.
|
||||
|
||||
dpad_to_buttons has no effect for known pads.
|
||||
|
||||
0.1 Normal Controllers
|
||||
----------------------
|
||||
With a normal controller, the directional pad is mapped to its own X/Y axes.
|
||||
The jstest-program from joystick-1.2.15 (jstest-version 2.1.0) will report 8
|
||||
axes and 10 buttons.
|
||||
|
||||
All 8 axes work, though they all have the same range (-32768..32767)
|
||||
and the zero-setting is not correct for the triggers (I don't know if that
|
||||
is some limitation of jstest, since the input device setup should be fine. I
|
||||
didn't have a look at jstest itself yet).
|
||||
@ -30,16 +47,50 @@ in game functionality were OK. However, I find it rather difficult to
|
||||
play first person shooters with a pad. Your mileage may vary.
|
||||
|
||||
|
||||
0.2 Xbox Dance Pads
|
||||
-------------------
|
||||
When using a known dance pad, jstest will report 6 axes and 14 buttons.
|
||||
|
||||
For dance style pads (like the redoctane pad) several changes
|
||||
have been made. The old driver would map the d-pad to axes, resulting
|
||||
in the driver being unable to report when the user was pressing both
|
||||
left+right or up+down, making DDR style games unplayable.
|
||||
|
||||
Known dance pads automatically map the d-pad to buttons and will work
|
||||
correctly out of the box.
|
||||
|
||||
If your dance pad is recognized by the driver but is using axes instead
|
||||
of buttons, see section 0.3 - Unknown Controllers
|
||||
|
||||
I've tested this with Stepmania, and it works quite well.
|
||||
|
||||
|
||||
0.3 Unkown Controllers
|
||||
----------------------
|
||||
If you have an unkown xbox controller, it should work just fine with
|
||||
the default settings.
|
||||
|
||||
HOWEVER if you have an unknown dance pad not listed below, it will not
|
||||
work UNLESS you set "dpad_to_buttons" to 1 in the module configuration.
|
||||
|
||||
PLEASE if you have an unkown controller, email Dom <binary1230@yahoo.com> with
|
||||
a dump from /proc/bus/usb and a description of the pad (manufacturer, country,
|
||||
whether it is a dance pad or normal controller) so that we can add your pad
|
||||
to the list of supported devices, ensuring that it will work out of the
|
||||
box in the future.
|
||||
|
||||
|
||||
1. USB adapter
|
||||
--------------
|
||||
|
||||
Before you can actually use the driver, you need to get yourself an
|
||||
adapter cable to connect the X-Box controller to your Linux-Box.
|
||||
adapter cable to connect the X-Box controller to your Linux-Box. You
|
||||
can buy these online fairly cheap, or build your own.
|
||||
|
||||
Such a cable is pretty easy to build. The Controller itself is a USB compound
|
||||
device (a hub with three ports for two expansion slots and the controller
|
||||
device) with the only difference in a nonstandard connector (5 pins vs. 4 on
|
||||
standard USB connector).
|
||||
Such a cable is pretty easy to build. The Controller itself is a USB
|
||||
compound device (a hub with three ports for two expansion slots and
|
||||
the controller device) with the only difference in a nonstandard connector
|
||||
(5 pins vs. 4 on standard USB connector).
|
||||
|
||||
You just need to solder a USB connector onto the cable and keep the
|
||||
yellow wire unconnected. The other pins have the same order on both
|
||||
@ -51,36 +102,36 @@ original one. You can buy an extension cable and cut that instead. That way,
|
||||
you can still use the controller with your X-Box, if you have one ;)
|
||||
|
||||
|
||||
2. driver installation
|
||||
2. Driver Installation
|
||||
----------------------
|
||||
|
||||
Once you have the adapter cable and the controller is connected, you need
|
||||
to load your USB subsystem and should cat /proc/bus/usb/devices.
|
||||
There should be an entry like the one at the end [4].
|
||||
|
||||
Currently (as of version 0.0.4), the following three devices are included:
|
||||
Currently (as of version 0.0.6), the following devices are included:
|
||||
original Microsoft XBOX controller (US), vendor=0x045e, product=0x0202
|
||||
smaller Microsoft XBOX controller (US), vendor=0x045e, product=0x0289
|
||||
original Microsoft XBOX controller (Japan), vendor=0x045e, product=0x0285
|
||||
InterAct PowerPad Pro (Germany), vendor=0x05fd, product=0x107a
|
||||
RedOctane Xbox Dance Pad (US), vendor=0x0c12, product=0x8809
|
||||
|
||||
If you have another controller that is not listed above and is not recognized
|
||||
by the driver, please drop me a line with the appropriate info (that is, include
|
||||
the name, vendor and product ID, as well as the country where you bought it;
|
||||
sending the whole dump out of /proc/bus/usb/devices along would be even better).
|
||||
The driver should work with xbox pads not listed above as well, however
|
||||
you will need to do something extra for dance pads to work.
|
||||
|
||||
In theory, the driver should work with other controllers than mine
|
||||
(InterAct PowerPad pro, bought in Germany) just fine, but I cannot test this
|
||||
for I only have this one controller.
|
||||
If you have a controller not listed above, see 0.3 - Unknown Controllers
|
||||
|
||||
If you compiled and installed the driver, test the functionality:
|
||||
> modprobe xpad
|
||||
> modprobe joydev
|
||||
> jstest /dev/js0
|
||||
|
||||
There should be a single line showing 18 inputs (8 axes, 10 buttons), and
|
||||
it's values should change if you move the sticks and push the buttons.
|
||||
If you're using a normal controller, there should be a single line showing
|
||||
18 inputs (8 axes, 10 buttons), and its values should change if you move
|
||||
the sticks and push the buttons. If you're using a dance pad, it should
|
||||
show 20 inputs (6 axes, 14 buttons).
|
||||
|
||||
It works? Voila, your done ;)
|
||||
It works? Voila, you're done ;)
|
||||
|
||||
|
||||
3. Thanks
|
||||
@ -111,6 +162,22 @@ I: If#= 0 Alt= 0 #EPs= 2 Cls=58(unk. ) Sub=42 Prot=00 Driver=(none)
|
||||
E: Ad=81(I) Atr=03(Int.) MxPS= 32 Ivl= 10ms
|
||||
E: Ad=02(O) Atr=03(Int.) MxPS= 32 Ivl= 10ms
|
||||
|
||||
5. /proc/bus/usb/devices - dump from Redoctane Xbox Dance Pad (US):
|
||||
|
||||
T: Bus=01 Lev=02 Prnt=09 Port=00 Cnt=01 Dev#= 10 Spd=12 MxCh= 0
|
||||
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
|
||||
P: Vendor=0c12 ProdID=8809 Rev= 0.01
|
||||
S: Product=XBOX DDR
|
||||
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=100mA
|
||||
I: If#= 0 Alt= 0 #EPs= 2 Cls=58(unk. ) Sub=42 Prot=00 Driver=xpad
|
||||
E: Ad=82(I) Atr=03(Int.) MxPS= 32 Ivl=4ms
|
||||
E: Ad=02(O) Atr=03(Int.) MxPS= 32 Ivl=4ms
|
||||
|
||||
--
|
||||
Marko Friedemann <mfr@bmx-chemnitz.de>
|
||||
2002-07-16
|
||||
- original doc
|
||||
|
||||
Dominic Cerquetti <binary1230@yahoo.com>
|
||||
2005-03-19
|
||||
- added stuff for dance pads, new d-pad->axes mappings
|
||||
|
@ -17,7 +17,7 @@ are:
|
||||
special place-holders for where the extracted documentation should
|
||||
go.
|
||||
|
||||
- scripts/docproc.c
|
||||
- scripts/basic/docproc.c
|
||||
|
||||
This is a program for converting SGML template files into SGML
|
||||
files. When a file is referenced it is searched for symbols
|
||||
|
@ -1231,6 +1231,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
machine check when some devices' config space
|
||||
is read. But various workarounds are disabled
|
||||
and some IOMMU drivers will not work.
|
||||
bfsort Sort PCI devices into breadth-first order.
|
||||
This sorting is done to get a device
|
||||
order compatible with older (<= 2.4) kernels.
|
||||
nobfsort Don't sort PCI devices into breadth-first order.
|
||||
|
||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||
|
||||
pd. [PARIDE]
|
||||
|
@ -50,10 +50,10 @@ The bit position indicates hardirq, softirq, hardirq-read,
|
||||
softirq-read respectively, and the character displayed in each
|
||||
indicates:
|
||||
|
||||
'.' acquired while irqs enabled
|
||||
'.' acquired while irqs disabled
|
||||
'+' acquired in irq context
|
||||
'-' acquired in process context with irqs disabled
|
||||
'?' read-acquired both with irqs enabled and in irq context
|
||||
'-' acquired with irqs enabled
|
||||
'?' read acquired in irq context with irqs enabled.
|
||||
|
||||
Unused mutexes cannot be part of the cause of an error.
|
||||
|
||||
|
@ -1898,7 +1898,7 @@ queue before processing any further requests:
|
||||
smp_wmb();
|
||||
<A:modify v=2> <C:busy>
|
||||
<C:queue v=2>
|
||||
p = &b; q = p;
|
||||
p = &v; q = p;
|
||||
<D:request p>
|
||||
<B:modify p=&v> <D:commit p=&v>
|
||||
<D:read p>
|
||||
|
@ -38,19 +38,14 @@ The new time code provide the following services:
|
||||
|
||||
a) Implements functions required by Linux common code:
|
||||
time_init
|
||||
do_gettimeofday
|
||||
do_settimeofday
|
||||
|
||||
b) provides an abstraction of RTC and null RTC implementation as default.
|
||||
extern unsigned long (*rtc_get_time)(void);
|
||||
extern int (*rtc_set_time)(unsigned long);
|
||||
|
||||
c) a set of gettimeoffset functions for different CPUs and different
|
||||
needs.
|
||||
|
||||
d) high-level and low-level timer interrupt routines where the timer
|
||||
interrupt source may or may not be the CPU timer. The high-level
|
||||
routine is dispatched through do_IRQ() while the low-level is
|
||||
c) high-level and low-level timer interrupt routines where the timer
|
||||
interrupt source may or may not be the CPU timer. The high-level
|
||||
routine is dispatched through do_IRQ() while the low-level is
|
||||
dispatched in assemably code (usually int-handler.S)
|
||||
|
||||
|
||||
@ -63,7 +58,7 @@ the following functions or values:
|
||||
a) board_time_init - a function pointer. Invoked at the beginnig of
|
||||
time_init(). It is optional.
|
||||
1. (optional) set up RTC routines
|
||||
2. (optional) calibrate and set the mips_counter_frequency
|
||||
2. (optional) calibrate and set the mips_hpt_frequency
|
||||
|
||||
b) plat_timer_setup - a function pointer. Invoked at the end of time_init()
|
||||
1. (optional) over-ride any decisions made in time_init()
|
||||
@ -72,9 +67,8 @@ the following functions or values:
|
||||
|
||||
c) (optional) board-specific RTC routines.
|
||||
|
||||
d) (optional) mips_counter_frequency - It must be definied if the board
|
||||
is using CPU counter for timer interrupt or it is using fixed rate
|
||||
gettimeoffset().
|
||||
d) (optional) mips_hpt_frequency - It must be definied if the board
|
||||
is using CPU counter for timer interrupt.
|
||||
|
||||
|
||||
PORTING GUIDE
|
||||
@ -89,22 +83,12 @@ Step 1: decide how you like to implement the time services.
|
||||
If the answer is no, you need a timer to provide the timer interrupt
|
||||
at 100 HZ speed.
|
||||
|
||||
You cannot use the fast gettimeoffset functions, i.e.,
|
||||
|
||||
unsigned long fixed_rate_gettimeoffset(void);
|
||||
unsigned long calibrate_div32_gettimeoffset(void);
|
||||
unsigned long calibrate_div64_gettimeoffset(void);
|
||||
|
||||
You can use null_gettimeoffset() will gives the same time resolution as
|
||||
jiffy. Or you can implement your own gettimeoffset (probably based on
|
||||
some ad hoc hardware on your machine.)
|
||||
|
||||
c) The following sub steps assume your CPU has counter register.
|
||||
Do you plan to use the CPU counter register as the timer interrupt
|
||||
or use an exnternal timer?
|
||||
|
||||
In order to use CPU counter register as the timer interrupt source, you
|
||||
must know the counter speed (mips_counter_frequency). It is usually the
|
||||
must know the counter speed (mips_hpt_frequency). It is usually the
|
||||
same as the CPU speed or an integral divisor of it.
|
||||
|
||||
d) decide on whether you want to use high-level or low-level timer
|
||||
@ -121,10 +105,10 @@ Step 3: implement rtc routines, board_time_init() and plat_timer_setup()
|
||||
if needed.
|
||||
|
||||
board_time_init() -
|
||||
a) (optional) set up RTC routines,
|
||||
b) (optional) calibrate and set the mips_counter_frequency
|
||||
(only needed if you intended to use fixed_rate_gettimeoffset
|
||||
or use cpu counter as timer interrupt source)
|
||||
a) (optional) set up RTC routines,
|
||||
b) (optional) calibrate and set the mips_hpt_frequency
|
||||
(only needed if you intended to use cpu counter as timer interrupt
|
||||
source)
|
||||
|
||||
plat_timer_setup() -
|
||||
a) (optional) over-write any choices made above by time_init().
|
||||
@ -154,8 +138,8 @@ for some of the functions in time.c.
|
||||
For example, you may define your own timer interrupt routine, which does
|
||||
some of its own processing and then calls timer_interrupt().
|
||||
|
||||
You can also over-ride any of the built-in functions (gettimeoffset,
|
||||
RTC routines and/or timer interrupt routine).
|
||||
You can also over-ride any of the built-in functions (RTC routines
|
||||
and/or timer interrupt routine).
|
||||
|
||||
|
||||
PORTING NOTES FOR SMP
|
||||
@ -187,10 +171,3 @@ You need to decide on your timer interrupt sources.
|
||||
|
||||
You can also do the low-level version of those interrupt routines,
|
||||
following similar dispatching routes described above.
|
||||
|
||||
Note about do_gettimeoffset():
|
||||
|
||||
It is very likely the CPU counter registers are not sync'ed up in a SMP box.
|
||||
Therefore you cannot really use the many of the existing routines that
|
||||
are based on CPU counter. You should wirte your own gettimeoffset rouinte
|
||||
if you want intra-jiffy resolution.
|
||||
|
@ -30,6 +30,17 @@ testing). The system will support either 'firmware' or 'platform', and
|
||||
that is known a priori. But, the user may choose 'shutdown' or
|
||||
'reboot' as alternatives.
|
||||
|
||||
Additionally, /sys/power/disk can be used to turn on one of the two testing
|
||||
modes of the suspend-to-disk mechanism: 'testproc' or 'test'. If the
|
||||
suspend-to-disk mechanism is in the 'testproc' mode, writing 'disk' to
|
||||
/sys/power/state will cause the kernel to disable nonboot CPUs and freeze
|
||||
tasks, wait for 5 seconds, unfreeze tasks and enable nonboot CPUs. If it is
|
||||
in the 'test' mode, writing 'disk' to /sys/power/state will cause the kernel
|
||||
to disable nonboot CPUs and freeze tasks, shrink memory, suspend devices, wait
|
||||
for 5 seconds, resume devices, unfreeze tasks and enable nonboot CPUs. Then,
|
||||
we are able to look in the log messages and work out, for example, which code
|
||||
is being slow and which device drivers are misbehaving.
|
||||
|
||||
Reading from this file will display what the mode is currently set
|
||||
to. Writing to this file will accept one of
|
||||
|
||||
@ -37,6 +48,8 @@ to. Writing to this file will accept one of
|
||||
'platform'
|
||||
'shutdown'
|
||||
'reboot'
|
||||
'testproc'
|
||||
'test'
|
||||
|
||||
It will only change to 'firmware' or 'platform' if the system supports
|
||||
it.
|
||||
|
@ -66,7 +66,7 @@ Command line parameters
|
||||
|
||||
When a device is un-ignored, device recognition and sensing is performed and
|
||||
the device driver will be notified if possible, so the device will become
|
||||
available to the system.
|
||||
available to the system. Note that un-ignoring is performed asynchronously.
|
||||
|
||||
You can also add ranges of devices to be ignored by piping to
|
||||
/proc/cio_ignore; "add <device range>, <device range>, ..." will ignore the
|
||||
|
@ -174,14 +174,10 @@ read_dev_chars() - Read Device Characteristics
|
||||
|
||||
This routine returns the characteristics for the device specified.
|
||||
|
||||
The function is meant to be called with an irq handler in place; that is,
|
||||
The function is meant to be called with the device already enabled; that is,
|
||||
at earliest during set_online() processing.
|
||||
|
||||
While the request is processed synchronously, the device interrupt
|
||||
handler is called for final ending status. In case of error situations the
|
||||
interrupt handler may recover appropriately. The device irq handler can
|
||||
recognize the corresponding interrupts by the interruption parameter be
|
||||
0x00524443. The ccw_device must not be locked prior to calling read_dev_chars().
|
||||
The ccw_device must not be locked prior to calling read_dev_chars().
|
||||
|
||||
The function may be called enabled or disabled.
|
||||
|
||||
@ -410,26 +406,7 @@ individual flag meanings.
|
||||
|
||||
Usage Notes :
|
||||
|
||||
Prior to call ccw_device_start() the device driver must assure disabled state,
|
||||
i.e. the I/O mask value in the PSW must be disabled. This can be accomplished
|
||||
by calling local_save_flags( flags). The current PSW flags are preserved and
|
||||
can be restored by local_irq_restore( flags) at a later time.
|
||||
|
||||
If the device driver violates this rule while running in a uni-processor
|
||||
environment an interrupt might be presented prior to the ccw_device_start()
|
||||
routine returning to the device driver main path. In this case we will end in a
|
||||
deadlock situation as the interrupt handler will try to obtain the irq
|
||||
lock the device driver still owns (see below) !
|
||||
|
||||
The driver must assure to hold the device specific lock. This can be
|
||||
accomplished by
|
||||
|
||||
(i) spin_lock(get_ccwdev_lock(cdev)), or
|
||||
(ii) spin_lock_irqsave(get_ccwdev_lock(cdev), flags)
|
||||
|
||||
Option (i) should be used if the calling routine is running disabled for
|
||||
I/O interrupts (see above) already. Option (ii) obtains the device gate und
|
||||
puts the CPU into I/O disabled state by preserving the current PSW flags.
|
||||
ccw_device_start() must be called disabled and with the ccw device lock held.
|
||||
|
||||
The device driver is allowed to issue the next ccw_device_start() call from
|
||||
within its interrupt handler already. It is not required to schedule a
|
||||
@ -488,7 +465,7 @@ int ccw_device_resume(struct ccw_device *cdev);
|
||||
|
||||
cdev - ccw_device the resume operation is requested for
|
||||
|
||||
The resume_IO() function returns:
|
||||
The ccw_device_resume() function returns:
|
||||
|
||||
0 - suspended channel program is resumed
|
||||
-EBUSY - status pending
|
||||
@ -507,6 +484,8 @@ a long-running channel program or the device might require to initially issue
|
||||
a halt subchannel (HSCH) I/O command. For those purposes the ccw_device_halt()
|
||||
command is provided.
|
||||
|
||||
ccw_device_halt() must be called disabled and with the ccw device lock held.
|
||||
|
||||
int ccw_device_halt(struct ccw_device *cdev,
|
||||
unsigned long intparm);
|
||||
|
||||
@ -517,7 +496,7 @@ intparm : interruption parameter; value is only used if no I/O
|
||||
|
||||
The ccw_device_halt() function returns :
|
||||
|
||||
0 - successful completion or request successfully initiated
|
||||
0 - request successfully initiated
|
||||
-EBUSY - the device is currently busy, or status pending.
|
||||
-ENODEV - cdev invalid.
|
||||
-EINVAL - The device is not operational or the ccw device is not online.
|
||||
@ -533,6 +512,23 @@ can then perform an appropriate action. Prior to interrupt of an outstanding
|
||||
read to a network device (with or without PCI flag) a ccw_device_halt()
|
||||
is required to end the pending operation.
|
||||
|
||||
ccw_device_clear() - Terminage I/O Request Processing
|
||||
|
||||
In order to terminate all I/O processing at the subchannel, the clear subchannel
|
||||
(CSCH) command is used. It can be issued via ccw_device_clear().
|
||||
|
||||
ccw_device_clear() must be called disabled and with the ccw device lock held.
|
||||
|
||||
int ccw_device_clear(struct ccw_device *cdev, unsigned long intparm);
|
||||
|
||||
cdev: ccw_device the clear operation is requested for
|
||||
intparm: interruption parameter (see ccw_device_halt())
|
||||
|
||||
The ccw_device_clear() function returns:
|
||||
|
||||
0 - request successfully initiated
|
||||
-ENODEV - cdev invalid
|
||||
-EINVAL - The device is not operational or the ccw device is not online.
|
||||
|
||||
Miscellaneous Support Routines
|
||||
|
||||
|
@ -239,6 +239,9 @@ status - Can be 'online' or 'offline'.
|
||||
|
||||
type - The physical type of the channel path.
|
||||
|
||||
shared - Whether the channel path is shared.
|
||||
|
||||
cmg - The channel measurement group.
|
||||
|
||||
3. System devices
|
||||
-----------------
|
||||
|
@ -86,7 +86,7 @@ valid for 30 seconds.
|
||||
core_pattern:
|
||||
|
||||
core_pattern is used to specify a core dumpfile pattern name.
|
||||
. max length 64 characters; default value is "core"
|
||||
. max length 128 characters; default value is "core"
|
||||
. core_pattern is used as a pattern template for the output filename;
|
||||
certain string patterns (beginning with '%') are substituted with
|
||||
their actual values.
|
||||
@ -105,6 +105,9 @@ core_pattern is used to specify a core dumpfile pattern name.
|
||||
%h hostname
|
||||
%e executable filename
|
||||
%<OTHER> both are dropped
|
||||
. If the first character of the pattern is a '|', the kernel will treat
|
||||
the rest of the pattern as a command to run. The core dump will be
|
||||
written to the standard input of that program instead of to a file.
|
||||
|
||||
==============================================================
|
||||
|
||||
|
@ -428,12 +428,6 @@ Options supported:
|
||||
See http://www.uuhaus.de/linux/palmconnect.html for up-to-date
|
||||
information on this driver.
|
||||
|
||||
AIRcable USB Dongle Bluetooth driver
|
||||
If there is the cdc_acm driver loaded in the system, you will find that the
|
||||
cdc_acm claims the device before AIRcable can. This is simply corrected
|
||||
by unloading both modules and then loading the aircable module before
|
||||
cdc_acm module
|
||||
|
||||
Generic Serial driver
|
||||
|
||||
If your device is not one of the above listed devices, compatible with
|
||||
|
@ -51,7 +51,7 @@
|
||||
50 -> NPG Tech Real TV FM Top 10 [14f1:0842]
|
||||
51 -> WinFast DTV2000 H [107d:665e]
|
||||
52 -> Geniatech DVB-S [14f1:0084]
|
||||
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404]
|
||||
53 -> Hauppauge WinTV-HVR3000 TriMode Analog/DVB-S/DVB-T [0070:1404,0070:1400,0070:1401,0070:1402]
|
||||
54 -> Norwood Micro TV Tuner
|
||||
55 -> Shenzhen Tungsten Ages Tech TE-DTV-250 / Swann OEM [c180:c980]
|
||||
56 -> Hauppauge WinTV-HVR1300 DVB-T/Hybrid MPEG Encoder [0070:9600,0070:9601,0070:9602]
|
||||
|
@ -1,4 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <fcntl.h>
|
||||
|
||||
int main(int argc, const char *argv[]) {
|
||||
|
38
MAINTAINERS
38
MAINTAINERS
@ -905,7 +905,8 @@ P: David Teigland
|
||||
M: teigland@redhat.com
|
||||
L: cluster-devel@redhat.com
|
||||
W: http://sources.redhat.com/cluster/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs-2.6.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git
|
||||
S: Supported
|
||||
|
||||
DAVICOM FAST ETHERNET (DMFE) NETWORK DRIVER
|
||||
@ -1188,7 +1189,8 @@ P: Steven Whitehouse
|
||||
M: swhiteho@redhat.com
|
||||
L: cluster-devel@redhat.com
|
||||
W: http://sources.redhat.com/cluster/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs-2.6.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-fixes.git
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/steve/gfs2-2.6-nmw.git
|
||||
S: Supported
|
||||
|
||||
GIGASET ISDN DRIVERS
|
||||
@ -1666,6 +1668,12 @@ M: sct@redhat.com, akpm@osdl.org
|
||||
L: ext2-devel@lists.sourceforge.net
|
||||
S: Maintained
|
||||
|
||||
K8TEMP HARDWARE MONITORING DRIVER
|
||||
P: Rudolf Marek
|
||||
M: r.marek@assembler.cz
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
|
||||
KCONFIG
|
||||
P: Roman Zippel
|
||||
M: zippel@linux-m68k.org
|
||||
@ -1996,6 +2004,13 @@ M: rubini@ipvvis.unipv.it
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
MSI LAPTOP SUPPORT
|
||||
P: Lennart Poettering
|
||||
M: mzxreary@0pointer.de
|
||||
L: https://tango.0pointer.de/mailman/listinfo/s270-linux
|
||||
W: http://0pointer.de/lennart/tchibo.html
|
||||
S: Maintained
|
||||
|
||||
MTRR AND SIMILAR SUPPORT [i386]
|
||||
P: Richard Gooch
|
||||
M: rgooch@atnf.csiro.au
|
||||
@ -2003,8 +2018,11 @@ L: linux-kernel@vger.kernel.org
|
||||
W: http://www.atnf.csiro.au/~rgooch/linux/kernel-patches.html
|
||||
S: Maintained
|
||||
|
||||
MULTIMEDIA CARD (MMC) SUBSYSTEM
|
||||
S: Orphan
|
||||
MULTIMEDIA CARD (MMC) AND SECURE DIGITAL (SD) SUBSYSTEM
|
||||
P: Pierre Ossman
|
||||
M: drzeus-mmc@drzeus.cx
|
||||
L: linux-kernel@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
MULTISOUND SOUND DRIVER
|
||||
P: Andrew Veliath
|
||||
@ -2040,11 +2058,13 @@ P: Marc Boucher
|
||||
P: James Morris
|
||||
P: Harald Welte
|
||||
P: Jozsef Kadlecsik
|
||||
M: coreteam@netfilter.org
|
||||
P: Patrick McHardy
|
||||
M: kaber@trash.net
|
||||
L: netfilter-devel@lists.netfilter.org
|
||||
L: netfilter@lists.netfilter.org
|
||||
L: coreteam@netfilter.org
|
||||
W: http://www.netfilter.org/
|
||||
W: http://www.iptables.org/
|
||||
L: netfilter@lists.netfilter.org
|
||||
L: netfilter-devel@lists.netfilter.org
|
||||
S: Supported
|
||||
|
||||
NETLABEL
|
||||
@ -2295,8 +2315,8 @@ T: quilt kernel.org/pub/linux/kernel/people/gregkh/gregkh-2.6/
|
||||
S: Supported
|
||||
|
||||
PCI HOTPLUG CORE
|
||||
P: Greg Kroah-Hartman
|
||||
M: gregkh@suse.de
|
||||
P: Kristen Carlson Accardi
|
||||
M: kristen.c.accardi@intel.com
|
||||
S: Supported
|
||||
|
||||
PCI HOTPLUG COMPAQ DRIVER
|
||||
|
11
Makefile
11
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 19
|
||||
EXTRAVERSION =-rc1
|
||||
EXTRAVERSION =-rc4
|
||||
NAME=Avast! A bilge rat!
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -499,6 +499,7 @@ endif
|
||||
|
||||
ifdef CONFIG_UNWIND_INFO
|
||||
CFLAGS += -fasynchronous-unwind-tables
|
||||
LDFLAGS_vmlinux += --eh-frame-hdr
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO
|
||||
@ -741,6 +742,9 @@ endif # ifdef CONFIG_KALLSYMS
|
||||
|
||||
# vmlinux image - including updated kernel symbols
|
||||
vmlinux: $(vmlinux-lds) $(vmlinux-init) $(vmlinux-main) $(kallsyms.o) FORCE
|
||||
ifdef CONFIG_HEADERS_CHECK
|
||||
$(Q)$(MAKE) -f $(srctree)/Makefile headers_check
|
||||
endif
|
||||
$(call if_changed_rule,vmlinux__)
|
||||
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost $@
|
||||
$(Q)rm -f .old_version
|
||||
@ -932,7 +936,7 @@ headers_install_all: include/linux/version.h scripts_basic FORCE
|
||||
|
||||
PHONY += headers_install
|
||||
headers_install: include/linux/version.h scripts_basic FORCE
|
||||
@if [ ! -r include/asm-$(ARCH)/Kbuild ]; then \
|
||||
@if [ ! -r $(srctree)/include/asm-$(ARCH)/Kbuild ]; then \
|
||||
echo '*** Error: Headers not exportable for this architecture ($(ARCH))'; \
|
||||
exit 1 ; fi
|
||||
$(Q)$(MAKE) $(build)=scripts scripts/unifdef
|
||||
@ -1316,7 +1320,8 @@ define xtags
|
||||
$(all-sources) | xargs $1 -a \
|
||||
-I __initdata,__exitdata,__acquires,__releases \
|
||||
-I EXPORT_SYMBOL,EXPORT_SYMBOL_GPL \
|
||||
--extra=+f --c-kinds=+px; \
|
||||
--extra=+f --c-kinds=+px \
|
||||
--regex-asm='/ENTRY\(([^)]*)\).*/\1/'; \
|
||||
$(all-kconfigs) | xargs $1 -a \
|
||||
--langdef=kconfig \
|
||||
--language-force=kconfig \
|
||||
|
@ -6,40 +6,13 @@
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/string.h>
|
||||
#include <linux/user.h>
|
||||
#include <linux/elfcore.h>
|
||||
#include <linux/socket.h>
|
||||
#include <linux/syscalls.h>
|
||||
#include <linux/in.h>
|
||||
#include <linux/in6.h>
|
||||
#include <linux/pci.h>
|
||||
#include <linux/screen_info.h>
|
||||
#include <linux/tty.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/console.h>
|
||||
#include <asm/hwrpb.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/checksum.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/fpu.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/pgalloc.h>
|
||||
#include <asm/semaphore.h>
|
||||
#include <asm/tlbflush.h>
|
||||
#include <asm/cacheflush.h>
|
||||
#include <asm/vga.h>
|
||||
|
||||
#include <asm/unistd.h>
|
||||
|
||||
extern struct hwrpb_struct *hwrpb;
|
||||
extern spinlock_t rtc_lock;
|
||||
#include <linux/syscalls.h>
|
||||
|
||||
/* these are C runtime functions with special calling conventions: */
|
||||
extern void __divl (void);
|
||||
@ -52,14 +25,9 @@ extern void __divqu (void);
|
||||
extern void __remqu (void);
|
||||
|
||||
EXPORT_SYMBOL(alpha_mv);
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
EXPORT_SYMBOL(perf_irq);
|
||||
EXPORT_SYMBOL(callback_getenv);
|
||||
EXPORT_SYMBOL(callback_setenv);
|
||||
EXPORT_SYMBOL(callback_save_env);
|
||||
#ifdef CONFIG_ALPHA_GENERIC
|
||||
EXPORT_SYMBOL(alpha_using_srm);
|
||||
#endif /* CONFIG_ALPHA_GENERIC */
|
||||
|
||||
/* platform dependent support */
|
||||
EXPORT_SYMBOL(strcat);
|
||||
@ -77,47 +45,14 @@ EXPORT_SYMBOL(__constant_c_memset);
|
||||
EXPORT_SYMBOL(copy_page);
|
||||
EXPORT_SYMBOL(clear_page);
|
||||
|
||||
EXPORT_SYMBOL(__direct_map_base);
|
||||
EXPORT_SYMBOL(__direct_map_size);
|
||||
|
||||
#ifdef CONFIG_PCI
|
||||
EXPORT_SYMBOL(pci_alloc_consistent);
|
||||
EXPORT_SYMBOL(pci_free_consistent);
|
||||
EXPORT_SYMBOL(pci_map_single);
|
||||
EXPORT_SYMBOL(pci_map_page);
|
||||
EXPORT_SYMBOL(pci_unmap_single);
|
||||
EXPORT_SYMBOL(pci_unmap_page);
|
||||
EXPORT_SYMBOL(pci_map_sg);
|
||||
EXPORT_SYMBOL(pci_unmap_sg);
|
||||
EXPORT_SYMBOL(pci_dma_supported);
|
||||
EXPORT_SYMBOL(pci_dac_dma_supported);
|
||||
EXPORT_SYMBOL(pci_dac_page_to_dma);
|
||||
EXPORT_SYMBOL(pci_dac_dma_to_page);
|
||||
EXPORT_SYMBOL(pci_dac_dma_to_offset);
|
||||
EXPORT_SYMBOL(alpha_gendev_to_pci);
|
||||
#endif
|
||||
EXPORT_SYMBOL(dma_set_mask);
|
||||
|
||||
EXPORT_SYMBOL(dump_thread);
|
||||
EXPORT_SYMBOL(dump_elf_thread);
|
||||
EXPORT_SYMBOL(dump_elf_task);
|
||||
EXPORT_SYMBOL(dump_elf_task_fp);
|
||||
EXPORT_SYMBOL(hwrpb);
|
||||
EXPORT_SYMBOL(start_thread);
|
||||
EXPORT_SYMBOL(alpha_read_fp_reg);
|
||||
EXPORT_SYMBOL(alpha_read_fp_reg_s);
|
||||
EXPORT_SYMBOL(alpha_write_fp_reg);
|
||||
EXPORT_SYMBOL(alpha_write_fp_reg_s);
|
||||
|
||||
/* In-kernel system calls. */
|
||||
/* entry.S */
|
||||
EXPORT_SYMBOL(kernel_thread);
|
||||
EXPORT_SYMBOL(sys_dup);
|
||||
EXPORT_SYMBOL(sys_exit);
|
||||
EXPORT_SYMBOL(sys_write);
|
||||
EXPORT_SYMBOL(sys_lseek);
|
||||
EXPORT_SYMBOL(kernel_execve);
|
||||
EXPORT_SYMBOL(sys_setsid);
|
||||
EXPORT_SYMBOL(sys_wait4);
|
||||
|
||||
/* Networking helper routines. */
|
||||
EXPORT_SYMBOL(csum_tcpudp_magic);
|
||||
@ -134,10 +69,6 @@ EXPORT_SYMBOL(alpha_fp_emul_imprecise);
|
||||
EXPORT_SYMBOL(alpha_fp_emul);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK
|
||||
EXPORT_SYMBOL(__min_ipl);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The following are specially called from the uaccess assembly stubs.
|
||||
*/
|
||||
@ -160,26 +91,9 @@ EXPORT_SYMBOL(up);
|
||||
*/
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
EXPORT_SYMBOL(flush_tlb_mm);
|
||||
EXPORT_SYMBOL(flush_tlb_range);
|
||||
EXPORT_SYMBOL(flush_tlb_page);
|
||||
EXPORT_SYMBOL(smp_imb);
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
EXPORT_SYMBOL(smp_num_cpus);
|
||||
EXPORT_SYMBOL(smp_call_function);
|
||||
EXPORT_SYMBOL(smp_call_function_on_cpu);
|
||||
EXPORT_SYMBOL(_atomic_dec_and_lock);
|
||||
#endif /* CONFIG_SMP */
|
||||
|
||||
/*
|
||||
* NUMA specific symbols
|
||||
*/
|
||||
#ifdef CONFIG_DISCONTIGMEM
|
||||
EXPORT_SYMBOL(node_data);
|
||||
#endif /* CONFIG_DISCONTIGMEM */
|
||||
|
||||
EXPORT_SYMBOL(rtc_lock);
|
||||
|
||||
/*
|
||||
* The following are special because they're not called
|
||||
* explicitly (the C compiler or assembler generates them in
|
||||
@ -200,8 +114,3 @@ EXPORT_SYMBOL(__remqu);
|
||||
EXPORT_SYMBOL(memcpy);
|
||||
EXPORT_SYMBOL(memset);
|
||||
EXPORT_SYMBOL(memchr);
|
||||
|
||||
#ifdef CONFIG_ALPHA_IRONGATE
|
||||
EXPORT_SYMBOL(irongate_ioremap);
|
||||
EXPORT_SYMBOL(irongate_iounmap);
|
||||
#endif
|
||||
|
@ -404,6 +404,7 @@ irongate_ioremap(unsigned long addr, unsigned long size)
|
||||
#endif
|
||||
return (void __iomem *)vaddr;
|
||||
}
|
||||
EXPORT_SYMBOL(irongate_ioremap);
|
||||
|
||||
void
|
||||
irongate_iounmap(volatile void __iomem *xaddr)
|
||||
@ -414,3 +415,4 @@ irongate_iounmap(volatile void __iomem *xaddr)
|
||||
if (addr)
|
||||
return vfree((void *)(PAGE_MASK & addr));
|
||||
}
|
||||
EXPORT_SYMBOL(irongate_iounmap);
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kernel_stat.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/machvec.h>
|
||||
#include <asm/dma.h>
|
||||
@ -16,6 +17,7 @@
|
||||
/* Hack minimum IPL during interrupt processing for broken hardware. */
|
||||
#ifdef CONFIG_ALPHA_BROKEN_IRQ_MASK
|
||||
int __min_ipl;
|
||||
EXPORT_SYMBOL(__min_ipl);
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -30,6 +32,7 @@ dummy_perf(unsigned long vector, struct pt_regs *regs)
|
||||
}
|
||||
|
||||
void (*perf_irq)(unsigned long, struct pt_regs *) = dummy_perf;
|
||||
EXPORT_SYMBOL(perf_irq);
|
||||
|
||||
/*
|
||||
* The main interrupt entry point.
|
||||
|
@ -201,6 +201,7 @@ dma_set_mask(struct device *dev, u64 mask)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dma_set_mask);
|
||||
|
||||
void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
|
||||
{
|
||||
|
@ -300,6 +300,7 @@ pci_map_single(struct pci_dev *pdev, void *cpu_addr, size_t size, int dir)
|
||||
dac_allowed = pdev ? pci_dac_dma_supported(pdev, pdev->dma_mask) : 0;
|
||||
return pci_map_single_1(pdev, cpu_addr, size, dac_allowed);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_map_single);
|
||||
|
||||
dma_addr_t
|
||||
pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset,
|
||||
@ -314,6 +315,7 @@ pci_map_page(struct pci_dev *pdev, struct page *page, unsigned long offset,
|
||||
return pci_map_single_1(pdev, (char *)page_address(page) + offset,
|
||||
size, dac_allowed);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_map_page);
|
||||
|
||||
/* Unmap a single streaming mode DMA translation. The DMA_ADDR and
|
||||
SIZE must match what was provided for in a previous pci_map_single
|
||||
@ -379,6 +381,7 @@ pci_unmap_single(struct pci_dev *pdev, dma_addr_t dma_addr, size_t size,
|
||||
DBGA2("pci_unmap_single: sg [%lx,%lx] np %ld from %p\n",
|
||||
dma_addr, size, npages, __builtin_return_address(0));
|
||||
}
|
||||
EXPORT_SYMBOL(pci_unmap_single);
|
||||
|
||||
void
|
||||
pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr,
|
||||
@ -386,6 +389,7 @@ pci_unmap_page(struct pci_dev *pdev, dma_addr_t dma_addr,
|
||||
{
|
||||
pci_unmap_single(pdev, dma_addr, size, direction);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_unmap_page);
|
||||
|
||||
/* Allocate and map kernel buffer using consistent mode DMA for PCI
|
||||
device. Returns non-NULL cpu-view pointer to the buffer if
|
||||
@ -427,6 +431,7 @@ try_again:
|
||||
|
||||
return cpu_addr;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_alloc_consistent);
|
||||
|
||||
/* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must
|
||||
be values that were returned from pci_alloc_consistent. SIZE must
|
||||
@ -444,7 +449,7 @@ pci_free_consistent(struct pci_dev *pdev, size_t size, void *cpu_addr,
|
||||
DBGA2("pci_free_consistent: [%x,%lx] from %p\n",
|
||||
dma_addr, size, __builtin_return_address(0));
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(pci_free_consistent);
|
||||
|
||||
/* Classify the elements of the scatterlist. Write dma_address
|
||||
of each element with:
|
||||
@ -672,6 +677,7 @@ pci_map_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
|
||||
pci_unmap_sg(pdev, start, out - start, direction);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_map_sg);
|
||||
|
||||
/* Unmap a set of streaming mode DMA translations. Again, cpu read
|
||||
rules concerning calls here are the same as for pci_unmap_single()
|
||||
@ -752,6 +758,7 @@ pci_unmap_sg(struct pci_dev *pdev, struct scatterlist *sg, int nents,
|
||||
|
||||
DBGA("pci_unmap_sg: %ld entries\n", nents - (end - sg));
|
||||
}
|
||||
EXPORT_SYMBOL(pci_unmap_sg);
|
||||
|
||||
|
||||
/* Return whether the given PCI device DMA address mask can be
|
||||
@ -786,6 +793,7 @@ pci_dma_supported(struct pci_dev *pdev, u64 mask)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_dma_supported);
|
||||
|
||||
|
||||
/*
|
||||
@ -908,6 +916,7 @@ pci_dac_dma_supported(struct pci_dev *dev, u64 mask)
|
||||
|
||||
return ok;
|
||||
}
|
||||
EXPORT_SYMBOL(pci_dac_dma_supported);
|
||||
|
||||
dma64_addr_t
|
||||
pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page,
|
||||
@ -917,6 +926,7 @@ pci_dac_page_to_dma(struct pci_dev *pdev, struct page *page,
|
||||
+ __pa(page_address(page))
|
||||
+ (dma64_addr_t) offset);
|
||||
}
|
||||
EXPORT_SYMBOL(pci_dac_page_to_dma);
|
||||
|
||||
struct page *
|
||||
pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr)
|
||||
@ -924,13 +934,14 @@ pci_dac_dma_to_page(struct pci_dev *pdev, dma64_addr_t dma_addr)
|
||||
unsigned long paddr = (dma_addr & PAGE_MASK) - alpha_mv.pci_dac_offset;
|
||||
return virt_to_page(__va(paddr));
|
||||
}
|
||||
EXPORT_SYMBOL(pci_dac_dma_to_page);
|
||||
|
||||
unsigned long
|
||||
pci_dac_dma_to_offset(struct pci_dev *pdev, dma64_addr_t dma_addr)
|
||||
{
|
||||
return (dma_addr & ~PAGE_MASK);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(pci_dac_dma_to_offset);
|
||||
|
||||
/* Helper for generic DMA-mapping functions. */
|
||||
|
||||
@ -957,6 +968,7 @@ alpha_gendev_to_pci(struct device *dev)
|
||||
/* This assumes ISA bus master with dma_mask 0xffffff. */
|
||||
return NULL;
|
||||
}
|
||||
EXPORT_SYMBOL(alpha_gendev_to_pci);
|
||||
|
||||
int
|
||||
dma_set_mask(struct device *dev, u64 mask)
|
||||
@ -969,3 +981,4 @@ dma_set_mask(struct device *dev, u64 mask)
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(dma_set_mask);
|
||||
|
@ -205,6 +205,7 @@ start_thread(struct pt_regs * regs, unsigned long pc, unsigned long sp)
|
||||
regs->ps = 8;
|
||||
wrusp(sp);
|
||||
}
|
||||
EXPORT_SYMBOL(start_thread);
|
||||
|
||||
/*
|
||||
* Free current thread data structures etc..
|
||||
@ -376,6 +377,7 @@ dump_thread(struct pt_regs * pt, struct user * dump)
|
||||
dump->regs[EF_A2] = pt->r18;
|
||||
memcpy((char *)dump->regs + EF_SIZE, sw->fp, 32 * 8);
|
||||
}
|
||||
EXPORT_SYMBOL(dump_thread);
|
||||
|
||||
/*
|
||||
* Fill in the user structure for a ELF core dump.
|
||||
@ -424,6 +426,7 @@ dump_elf_thread(elf_greg_t *dest, struct pt_regs *pt, struct thread_info *ti)
|
||||
useful value of the thread's UNIQUE field. */
|
||||
dest[32] = ti->pcb.unique;
|
||||
}
|
||||
EXPORT_SYMBOL(dump_elf_thread);
|
||||
|
||||
int
|
||||
dump_elf_task(elf_greg_t *dest, struct task_struct *task)
|
||||
@ -431,6 +434,7 @@ dump_elf_task(elf_greg_t *dest, struct task_struct *task)
|
||||
dump_elf_thread(dest, task_pt_regs(task), task_thread_info(task));
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(dump_elf_task);
|
||||
|
||||
int
|
||||
dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task)
|
||||
@ -439,6 +443,7 @@ dump_elf_task_fp(elf_fpreg_t *dest, struct task_struct *task)
|
||||
memcpy(dest, sw->fp, 32 * 8);
|
||||
return 1;
|
||||
}
|
||||
EXPORT_SYMBOL(dump_elf_task_fp);
|
||||
|
||||
/*
|
||||
* sys_execve() executes a new program.
|
||||
|
@ -66,6 +66,7 @@ static struct notifier_block alpha_panic_block = {
|
||||
|
||||
|
||||
struct hwrpb_struct *hwrpb;
|
||||
EXPORT_SYMBOL(hwrpb);
|
||||
unsigned long srm_hae;
|
||||
|
||||
int alpha_l1i_cacheshape;
|
||||
@ -111,6 +112,7 @@ unsigned long alpha_agpgart_size = DEFAULT_AGP_APER_SIZE;
|
||||
#ifdef CONFIG_ALPHA_GENERIC
|
||||
struct alpha_machine_vector alpha_mv;
|
||||
int alpha_using_srm;
|
||||
EXPORT_SYMBOL(alpha_using_srm);
|
||||
#endif
|
||||
|
||||
static struct alpha_machine_vector *get_sysvec(unsigned long, unsigned long,
|
||||
@ -137,6 +139,8 @@ struct screen_info screen_info = {
|
||||
.orig_video_points = 16
|
||||
};
|
||||
|
||||
EXPORT_SYMBOL(screen_info);
|
||||
|
||||
/*
|
||||
* The direct map I/O window, if any. This should be the same
|
||||
* for all busses, since it's used by virt_to_bus.
|
||||
@ -144,6 +148,8 @@ struct screen_info screen_info = {
|
||||
|
||||
unsigned long __direct_map_base;
|
||||
unsigned long __direct_map_size;
|
||||
EXPORT_SYMBOL(__direct_map_base);
|
||||
EXPORT_SYMBOL(__direct_map_size);
|
||||
|
||||
/*
|
||||
* Declare all of the machine vectors.
|
||||
|
@ -52,6 +52,7 @@
|
||||
|
||||
/* A collection of per-processor data. */
|
||||
struct cpuinfo_alpha cpu_data[NR_CPUS];
|
||||
EXPORT_SYMBOL(cpu_data);
|
||||
|
||||
/* A collection of single bit ipi messages. */
|
||||
static struct {
|
||||
@ -74,6 +75,7 @@ EXPORT_SYMBOL(cpu_online_map);
|
||||
|
||||
int smp_num_probed; /* Internal processor count */
|
||||
int smp_num_cpus = 1; /* Number that came online. */
|
||||
EXPORT_SYMBOL(smp_num_cpus);
|
||||
|
||||
extern void calibrate_delay(void);
|
||||
|
||||
@ -790,6 +792,7 @@ smp_call_function_on_cpu (void (*func) (void *info), void *info, int retry,
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(smp_call_function_on_cpu);
|
||||
|
||||
int
|
||||
smp_call_function (void (*func) (void *info), void *info, int retry, int wait)
|
||||
@ -797,6 +800,7 @@ smp_call_function (void (*func) (void *info), void *info, int retry, int wait)
|
||||
return smp_call_function_on_cpu (func, info, retry, wait,
|
||||
cpu_online_map);
|
||||
}
|
||||
EXPORT_SYMBOL(smp_call_function);
|
||||
|
||||
static void
|
||||
ipi_imb(void *ignored)
|
||||
@ -811,6 +815,7 @@ smp_imb(void)
|
||||
if (on_each_cpu(ipi_imb, NULL, 1, 1))
|
||||
printk(KERN_CRIT "smp_imb: timed out\n");
|
||||
}
|
||||
EXPORT_SYMBOL(smp_imb);
|
||||
|
||||
static void
|
||||
ipi_flush_tlb_all(void *ignored)
|
||||
@ -866,6 +871,7 @@ flush_tlb_mm(struct mm_struct *mm)
|
||||
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(flush_tlb_mm);
|
||||
|
||||
struct flush_tlb_page_struct {
|
||||
struct vm_area_struct *vma;
|
||||
@ -918,6 +924,7 @@ flush_tlb_page(struct vm_area_struct *vma, unsigned long addr)
|
||||
|
||||
preempt_enable();
|
||||
}
|
||||
EXPORT_SYMBOL(flush_tlb_page);
|
||||
|
||||
void
|
||||
flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long end)
|
||||
@ -925,6 +932,7 @@ flush_tlb_range(struct vm_area_struct *vma, unsigned long start, unsigned long e
|
||||
/* On the Alpha we always flush the whole user tlb. */
|
||||
flush_tlb_mm(vma->vm_mm);
|
||||
}
|
||||
EXPORT_SYMBOL(flush_tlb_range);
|
||||
|
||||
static void
|
||||
ipi_flush_icache_page(void *x)
|
||||
|
@ -57,6 +57,7 @@
|
||||
static int set_rtc_mmss(unsigned long);
|
||||
|
||||
DEFINE_SPINLOCK(rtc_lock);
|
||||
EXPORT_SYMBOL(rtc_lock);
|
||||
|
||||
#define TICK_SIZE (tick_nsec / 1000)
|
||||
|
||||
|
@ -48,13 +48,7 @@ SECTIONS
|
||||
. = ALIGN(8);
|
||||
__initcall_start = .;
|
||||
.initcall.init : {
|
||||
*(.initcall1.init)
|
||||
*(.initcall2.init)
|
||||
*(.initcall3.init)
|
||||
*(.initcall4.init)
|
||||
*(.initcall5.init)
|
||||
*(.initcall6.init)
|
||||
*(.initcall7.init)
|
||||
INITCALLS
|
||||
}
|
||||
__initcall_end = .;
|
||||
|
||||
|
@ -13,12 +13,14 @@
|
||||
#include <linux/swap.h>
|
||||
#include <linux/initrd.h>
|
||||
#include <linux/pfn.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/hwrpb.h>
|
||||
#include <asm/pgalloc.h>
|
||||
|
||||
pg_data_t node_data[MAX_NUMNODES];
|
||||
bootmem_data_t node_bdata[MAX_NUMNODES];
|
||||
EXPORT_SYMBOL(node_data);
|
||||
|
||||
#undef DEBUG_DISCONTIG
|
||||
#ifdef DEBUG_DISCONTIG
|
||||
|
@ -174,11 +174,13 @@ libs-y := arch/arm/lib/ $(libs-y)
|
||||
|
||||
# Default target when executing plain make
|
||||
ifeq ($(CONFIG_XIP_KERNEL),y)
|
||||
all: xipImage
|
||||
KBUILD_IMAGE := xipImage
|
||||
else
|
||||
all: zImage
|
||||
KBUILD_IMAGE := zImage
|
||||
endif
|
||||
|
||||
all: $(KBUILD_IMAGE)
|
||||
|
||||
boot := arch/arm/boot
|
||||
|
||||
# Update machine arch and proc symlinks if something which affects
|
||||
|
@ -577,7 +577,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
|
@ -558,7 +558,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
|
@ -615,7 +615,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
|
@ -615,7 +615,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
|
@ -560,7 +560,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
@ -607,7 +607,7 @@ CONFIG_WATCHDOG_NOWAYOUT=y
|
||||
# Watchdog Device Drivers
|
||||
#
|
||||
# CONFIG_SOFT_WATCHDOG is not set
|
||||
CONFIG_AT91_WATCHDOG=y
|
||||
CONFIG_AT91RM9200_WATCHDOG=y
|
||||
|
||||
#
|
||||
# USB-based Watchdog Cards
|
||||
|
994
arch/arm/configs/realview-smp_defconfig
Normal file
994
arch/arm/configs/realview-smp_defconfig
Normal file
@ -0,0 +1,994 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.19-rc3
|
||||
# Wed Oct 25 14:12:00 2006
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
# CONFIG_GENERIC_TIME is not set
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_LOCK_KERNEL=y
|
||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_LOCALVERSION_AUTO=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_IPC_NS is not set
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
# CONFIG_TASKSTATS is not set
|
||||
# CONFIG_UTS_NS is not set
|
||||
# CONFIG_AUDIT is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_CPUSETS is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_UID16=y
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
CONFIG_BASE_FULL=y
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=0
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
CONFIG_MODULES=y
|
||||
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 is not set
|
||||
CONFIG_STOP_MACHINE=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
# CONFIG_IOSCHED_AS is not set
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
# CONFIG_IOSCHED_CFQ is not set
|
||||
# CONFIG_DEFAULT_AS is not set
|
||||
CONFIG_DEFAULT_DEADLINE=y
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="deadline"
|
||||
|
||||
#
|
||||
# System Type
|
||||
#
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
CONFIG_ARCH_REALVIEW=y
|
||||
# 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_CO285 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_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_IXP2000 is not set
|
||||
# CONFIG_ARCH_IXP23XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# 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_OMAP is not set
|
||||
|
||||
#
|
||||
# RealView platform type
|
||||
#
|
||||
CONFIG_MACH_REALVIEW_EB=y
|
||||
CONFIG_REALVIEW_MPCORE=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
#
|
||||
CONFIG_CPU_32=y
|
||||
# CONFIG_CPU_ARM926T is not set
|
||||
CONFIG_CPU_V6=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
CONFIG_CPU_32v6=y
|
||||
CONFIG_CPU_ABRT_EV6=y
|
||||
CONFIG_CPU_CACHE_V6=y
|
||||
CONFIG_CPU_CACHE_VIPT=y
|
||||
CONFIG_CPU_COPY_V6=y
|
||||
CONFIG_CPU_TLB_V6=y
|
||||
CONFIG_CPU_CP15=y
|
||||
CONFIG_CPU_CP15_MMU=y
|
||||
|
||||
#
|
||||
# Processor Features
|
||||
#
|
||||
CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||
CONFIG_HAS_TLS_REG=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ICST307=y
|
||||
|
||||
#
|
||||
# Bus support
|
||||
#
|
||||
CONFIG_ARM_AMBA=y
|
||||
|
||||
#
|
||||
# PCCARD (PCMCIA/CardBus) support
|
||||
#
|
||||
# CONFIG_PCCARD is not set
|
||||
|
||||
#
|
||||
# Kernel Features
|
||||
#
|
||||
CONFIG_SMP=y
|
||||
CONFIG_NR_CPUS=4
|
||||
CONFIG_HOTPLUG_CPU=y
|
||||
CONFIG_LOCAL_TIMERS=y
|
||||
# CONFIG_PREEMPT is not set
|
||||
# CONFIG_NO_IDLE_HZ is not set
|
||||
CONFIG_HZ=100
|
||||
# CONFIG_AEABI is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_SELECT_MEMORY_MODEL=y
|
||||
CONFIG_FLATMEM_MANUAL=y
|
||||
# CONFIG_DISCONTIGMEM_MANUAL is not set
|
||||
# CONFIG_SPARSEMEM_MANUAL is not set
|
||||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||
# CONFIG_RESOURCES_64BIT is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
# Boot options
|
||||
#
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="root=/dev/nfs nfsroot=10.1.69.3:/work/nfsroot ip=dhcp console=ttyAMA0 mem=128M"
|
||||
# CONFIG_XIP_KERNEL 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
|
||||
CONFIG_VFP=y
|
||||
|
||||
#
|
||||
# Userspace binary formats
|
||||
#
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
# CONFIG_ARTHUR is not set
|
||||
|
||||
#
|
||||
# Power management options
|
||||
#
|
||||
# CONFIG_PM is not set
|
||||
# CONFIG_APM is not set
|
||||
|
||||
#
|
||||
# Networking
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
# CONFIG_NETDEBUG is not set
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP 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=y
|
||||
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_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_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
|
||||
#
|
||||
# DCCP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_DCCP is not set
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
|
||||
#
|
||||
# TIPC Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
# CONFIG_VLAN_8021Q is not set
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
# CONFIG_IEEE80211 is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
# CONFIG_SYS_HYPERVISOR is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
# CONFIG_MTD_AFS_PARTS is not set
|
||||
|
||||
#
|
||||
# User Modules And Translation Layers
|
||||
#
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
# CONFIG_SSFDC is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
CONFIG_MTD_CFI=y
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||
CONFIG_MTD_CFI_I1=y
|
||||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
# CONFIG_MTD_OBSOLETE_CHIPS is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
# CONFIG_MTD_PHYSMAP is not set
|
||||
CONFIG_MTD_ARM_INTEGRATOR=y
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
#
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
# Disk-On-Chip Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_DOC2000 is not set
|
||||
# CONFIG_MTD_DOC2001 is not set
|
||||
# CONFIG_MTD_DOC2001PLUS is not set
|
||||
|
||||
#
|
||||
# NAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_NAND is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
# CONFIG_PARPORT is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||
# CONFIG_BLK_DEV_LOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
# CONFIG_MD is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
#
|
||||
|
||||
#
|
||||
# Network device support
|
||||
#
|
||||
CONFIG_NETDEVICES=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_DM9000 is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
#
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
#
|
||||
|
||||
#
|
||||
# Wireless LAN (non-hamradio)
|
||||
#
|
||||
# CONFIG_NET_RADIO is not set
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
#
|
||||
# CONFIG_ISDN is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
#
|
||||
CONFIG_INPUT=y
|
||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
#
|
||||
CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
# 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_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
#
|
||||
CONFIG_SERIO=y
|
||||
# CONFIG_SERIO_SERPORT is not set
|
||||
CONFIG_SERIO_AMBAKMI=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
# CONFIG_GAMEPORT is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_VT_HW_CONSOLE_BINDING is not set
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
# CONFIG_SERIAL_8250 is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
# CONFIG_SERIAL_AMBA_PL010 is not set
|
||||
CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=16
|
||||
|
||||
#
|
||||
# IPMI
|
||||
#
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
|
||||
#
|
||||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_NVRAM is not set
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
|
||||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
#
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
|
||||
#
|
||||
# LED devices
|
||||
#
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
|
||||
#
|
||||
# LED drivers
|
||||
#
|
||||
|
||||
#
|
||||
# LED Triggers
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# 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
|
||||
CONFIG_FB_ARMCLCD=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
||||
#
|
||||
# Logo configuration
|
||||
#
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
CONFIG_SOUND=y
|
||||
|
||||
#
|
||||
# Advanced Linux Sound Architecture
|
||||
#
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_TIMER=y
|
||||
CONFIG_SND_PCM=y
|
||||
# CONFIG_SND_SEQUENCER is not set
|
||||
CONFIG_SND_OSSEMUL=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_SND_PCM_OSS_PLUGINS=y
|
||||
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||
CONFIG_SND_SUPPORT_OLD_API=y
|
||||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
|
||||
#
|
||||
# Generic devices
|
||||
#
|
||||
CONFIG_SND_AC97_CODEC=m
|
||||
CONFIG_SND_AC97_BUS=m
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
# CONFIG_SND_SERIAL_U16550 is not set
|
||||
# CONFIG_SND_MPU401 is not set
|
||||
|
||||
#
|
||||
# ALSA ARM devices
|
||||
#
|
||||
CONFIG_SND_ARMAACI=m
|
||||
|
||||
#
|
||||
# Open Sound System
|
||||
#
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
|
||||
#
|
||||
# USB support
|
||||
#
|
||||
CONFIG_USB_ARCH_HAS_HCD=y
|
||||
# CONFIG_USB_ARCH_HAS_OHCI is not set
|
||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# MMC/SD Card support
|
||||
#
|
||||
CONFIG_MMC=y
|
||||
# CONFIG_MMC_DEBUG is not set
|
||||
CONFIG_MMC_BLOCK=y
|
||||
CONFIG_MMC_ARMMMCI=y
|
||||
# CONFIG_MMC_TIFM_SD is not set
|
||||
|
||||
#
|
||||
# Real Time Clock
|
||||
#
|
||||
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=y
|
||||
|
||||
#
|
||||
# RTC drivers
|
||||
#
|
||||
# CONFIG_RTC_DRV_DS1553 is not set
|
||||
# CONFIG_RTC_DRV_DS1742 is not set
|
||||
# CONFIG_RTC_DRV_M48T86 is not set
|
||||
CONFIG_RTC_DRV_PL031=y
|
||||
# CONFIG_RTC_DRV_TEST is not set
|
||||
# CONFIG_RTC_DRV_V3020 is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
# 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_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
# CONFIG_INOTIFY_USER is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
# CONFIG_FUSE_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
# CONFIG_ISO9660_FS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
CONFIG_FAT_FS=y
|
||||
# CONFIG_MSDOS_FS is not set
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
# 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_RAMFS=y
|
||||
# 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_JFFS_FS is not set
|
||||
# CONFIG_JFFS2_FS is not set
|
||||
CONFIG_CRAMFS=y
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
# 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 is not set
|
||||
# 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=y
|
||||
# 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 is not set
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
#
|
||||
# CONFIG_PROFILING is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
# CONFIG_ENABLE_MUST_CHECK is not set
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_RWSEMS=y
|
||||
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
|
||||
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
|
||||
# CONFIG_DEBUG_KOBJECT is not set
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
# CONFIG_DEBUG_ICEDCC is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_KEYS is not set
|
||||
# CONFIG_SECURITY is not set
|
||||
|
||||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_PLIST=y
|
@ -178,9 +178,3 @@ EXPORT_SYMBOL(_find_next_zero_bit_be);
|
||||
EXPORT_SYMBOL(_find_first_bit_be);
|
||||
EXPORT_SYMBOL(_find_next_bit_be);
|
||||
#endif
|
||||
|
||||
/* syscalls */
|
||||
EXPORT_SYMBOL(sys_write);
|
||||
EXPORT_SYMBOL(sys_lseek);
|
||||
EXPORT_SYMBOL(sys_exit);
|
||||
EXPORT_SYMBOL(sys_wait4);
|
||||
|
@ -7,6 +7,7 @@
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/spinlock.h>
|
||||
@ -19,6 +20,7 @@
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/smp.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/atomic.h>
|
||||
#include <asm/cacheflush.h>
|
||||
@ -474,25 +476,26 @@ void show_local_irqs(struct seq_file *p)
|
||||
seq_putc(p, '\n');
|
||||
}
|
||||
|
||||
static void ipi_timer(struct pt_regs *regs)
|
||||
static void ipi_timer(void)
|
||||
{
|
||||
int user = user_mode(regs);
|
||||
|
||||
irq_enter();
|
||||
profile_tick(CPU_PROFILING, regs);
|
||||
update_process_times(user);
|
||||
profile_tick(CPU_PROFILING);
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
irq_exit();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_LOCAL_TIMERS
|
||||
asmlinkage void do_local_timer(struct pt_regs *regs)
|
||||
{
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
int cpu = smp_processor_id();
|
||||
|
||||
if (local_timer_ack()) {
|
||||
irq_stat[cpu].local_timer_irqs++;
|
||||
ipi_timer(regs);
|
||||
ipi_timer();
|
||||
}
|
||||
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -551,6 +554,7 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
||||
{
|
||||
unsigned int cpu = smp_processor_id();
|
||||
struct ipi_data *ipi = &per_cpu(ipi_data, cpu);
|
||||
struct pt_regs *old_regs = set_irq_regs(regs);
|
||||
|
||||
ipi->ipi_count++;
|
||||
|
||||
@ -574,7 +578,7 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
||||
|
||||
switch (nextmsg) {
|
||||
case IPI_TIMER:
|
||||
ipi_timer(regs);
|
||||
ipi_timer();
|
||||
break;
|
||||
|
||||
case IPI_RESCHEDULE:
|
||||
@ -599,6 +603,8 @@ asmlinkage void do_IPI(struct pt_regs *regs)
|
||||
}
|
||||
} while (msgs);
|
||||
}
|
||||
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
void smp_send_reschedule(int cpu)
|
||||
|
@ -327,13 +327,12 @@ EXPORT_SYMBOL(restore_time_delta);
|
||||
*/
|
||||
void timer_tick(void)
|
||||
{
|
||||
struct pt_regs *regs = get_irq_regs();
|
||||
profile_tick(CPU_PROFILING);
|
||||
do_leds();
|
||||
do_set_rtc();
|
||||
do_timer(1);
|
||||
#ifndef CONFIG_SMP
|
||||
update_process_times(user_mode(regs));
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -45,13 +45,7 @@ SECTIONS
|
||||
*(.early_param.init)
|
||||
__early_end = .;
|
||||
__initcall_start = .;
|
||||
*(.initcall1.init)
|
||||
*(.initcall2.init)
|
||||
*(.initcall3.init)
|
||||
*(.initcall4.init)
|
||||
*(.initcall5.init)
|
||||
*(.initcall6.init)
|
||||
*(.initcall7.init)
|
||||
INITCALLS
|
||||
__initcall_end = .;
|
||||
__con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
|
@ -85,7 +85,7 @@ n2100_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
|
||||
irq = IRQ_IOP32X_XINT0;
|
||||
} else if (PCI_SLOT(dev->devfn) == 2) {
|
||||
/* RTL8110SB #2 */
|
||||
irq = IRQ_IOP32X_XINT1;
|
||||
irq = IRQ_IOP32X_XINT3;
|
||||
} else if (PCI_SLOT(dev->devfn) == 3) {
|
||||
/* Sil3512 */
|
||||
irq = IRQ_IOP32X_XINT2;
|
||||
|
@ -133,11 +133,13 @@ static void ixdp2400_pci_postinit(void)
|
||||
struct pci_dev *dev;
|
||||
|
||||
if (ixdp2x00_master_npu()) {
|
||||
dev = pci_find_slot(1, IXDP2400_SLAVE_ENET_DEVFN);
|
||||
dev = pci_get_bus_and_slot(1, IXDP2400_SLAVE_ENET_DEVFN);
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
} else {
|
||||
dev = pci_find_slot(1, IXDP2400_MASTER_ENET_DEVFN);
|
||||
dev = pci_get_bus_and_slot(1, IXDP2400_MASTER_ENET_DEVFN);
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
|
||||
ixdp2x00_slave_pci_postinit();
|
||||
}
|
||||
|
@ -261,14 +261,16 @@ int __init ixdp2800_pci_init(void)
|
||||
|
||||
pci_common_init(&ixdp2800_pci);
|
||||
if (ixdp2x00_master_npu()) {
|
||||
dev = pci_find_slot(1, IXDP2800_SLAVE_ENET_DEVFN);
|
||||
dev = pci_get_bus_and_slot(1, IXDP2800_SLAVE_ENET_DEVFN);
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
|
||||
ixdp2800_master_enable_slave();
|
||||
ixdp2800_master_wait_for_slave_bus_scan();
|
||||
} else {
|
||||
dev = pci_find_slot(1, IXDP2800_MASTER_ENET_DEVFN);
|
||||
dev = pci_get_bus_and_slot(1, IXDP2800_MASTER_ENET_DEVFN);
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -241,11 +241,14 @@ void ixdp2x00_slave_pci_postinit(void)
|
||||
/*
|
||||
* Remove PMC device is there is one
|
||||
*/
|
||||
if((dev = pci_find_slot(1, IXDP2X00_PMC_DEVFN)))
|
||||
if((dev = pci_get_bus_and_slot(1, IXDP2X00_PMC_DEVFN))) {
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
}
|
||||
|
||||
dev = pci_find_slot(0, IXDP2X00_21555_DEVFN);
|
||||
dev = pci_get_bus_and_slot(0, IXDP2X00_21555_DEVFN);
|
||||
pci_remove_bus_device(dev);
|
||||
pci_dev_put(dev);
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
|
@ -14,7 +14,7 @@ config MACH_LPD7A400
|
||||
bool "LPD7A400 Card Engine"
|
||||
select ARCH_LH7A400
|
||||
# select IDE_POLL
|
||||
select HAS_TOUCHSCREEN_ADS7843_LH7
|
||||
# select HAS_TOUCHSCREEN_ADS7843_LH7
|
||||
help
|
||||
Say Y here if you are using Logic Product Development's
|
||||
LPD7A400 CardEngine. For the time being, the LPD7A400 and
|
||||
@ -24,7 +24,7 @@ config MACH_LPD7A404
|
||||
bool "LPD7A404 Card Engine"
|
||||
select ARCH_LH7A404
|
||||
# select IDE_POLL
|
||||
select HAS_TOUCHSCREEN_ADC_LH7
|
||||
# select HAS_TOUCHSCREEN_ADC_LH7
|
||||
help
|
||||
Say Y here if you are using Logic Product Development's
|
||||
LPD7A404 CardEngine. For the time being, the LPD7A400 and
|
||||
|
@ -15,4 +15,4 @@ extern void lh7a404_init_irq (void);
|
||||
extern void lh7a40x_clcd_init (void);
|
||||
extern void lh7a40x_init_board_irq (void);
|
||||
|
||||
#define IRQ_DISPATCH(irq) desc_handle_irq((irq),(irq_desc + irq), regs)
|
||||
#define IRQ_DISPATCH(irq) desc_handle_irq((irq),(irq_desc + irq))
|
||||
|
@ -397,7 +397,7 @@ static void lubbock_mmc_poll(unsigned long data)
|
||||
if (LUB_IRQ_SET_CLR & (1 << 0))
|
||||
mod_timer(&mmc_timer, jiffies + MMC_POLL_RATE);
|
||||
else {
|
||||
(void) mmc_detect_int(LUBBOCK_SD_IRQ, (void *)data, NULL);
|
||||
(void) mmc_detect_int(LUBBOCK_SD_IRQ, (void *)data);
|
||||
enable_irq(LUBBOCK_SD_IRQ);
|
||||
}
|
||||
}
|
||||
|
@ -82,6 +82,14 @@ static struct sdram_params sdram_tbl[] __initdata = {
|
||||
.twr = 9,
|
||||
.refresh = 64000,
|
||||
.cas_latency = 3,
|
||||
}, { /* Samsung K4S281632B-1H */
|
||||
.name = "K4S281632B-1H",
|
||||
.rows = 12,
|
||||
.tck = 10,
|
||||
.trp = 20,
|
||||
.twr = 10,
|
||||
.refresh = 64000,
|
||||
.cas_latency = 3,
|
||||
}, { /* Samsung KM416S4030CT */
|
||||
.name = "KM416S4030CT",
|
||||
.rows = 13,
|
||||
@ -366,6 +374,8 @@ static int __init sa1110_clk_init(void)
|
||||
|
||||
if (machine_is_h3100())
|
||||
name = "KM416S4030CT";
|
||||
if (machine_is_jornada720())
|
||||
name = "K4S281632B-1H";
|
||||
}
|
||||
|
||||
sdram = sa1110_find_sdram(name);
|
||||
|
@ -188,12 +188,12 @@ static struct map_desc versatile_io_desc[] __initdata = {
|
||||
.length = SZ_4K,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VERSATILE_PCI_VIRT_BASE,
|
||||
.virtual = (unsigned long)VERSATILE_PCI_VIRT_BASE,
|
||||
.pfn = __phys_to_pfn(VERSATILE_PCI_BASE),
|
||||
.length = VERSATILE_PCI_BASE_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VERSATILE_PCI_CFG_VIRT_BASE,
|
||||
.virtual = (unsigned long)VERSATILE_PCI_CFG_VIRT_BASE,
|
||||
.pfn = __phys_to_pfn(VERSATILE_PCI_CFG_BASE),
|
||||
.length = VERSATILE_PCI_CFG_BASE_SIZE,
|
||||
.type = MT_DEVICE
|
||||
|
@ -40,14 +40,15 @@
|
||||
* Cfg 42000000 - 42FFFFFF PCI config
|
||||
*
|
||||
*/
|
||||
#define SYS_PCICTL IO_ADDRESS(VERSATILE_SYS_PCICTL)
|
||||
#define PCI_IMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0)
|
||||
#define PCI_IMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4)
|
||||
#define PCI_IMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8)
|
||||
#define PCI_SMAP0 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10)
|
||||
#define PCI_SMAP1 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14)
|
||||
#define PCI_SMAP2 IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18)
|
||||
#define PCI_SELFID IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc)
|
||||
#define __IO_ADDRESS(n) ((void __iomem *)(unsigned long)IO_ADDRESS(n))
|
||||
#define SYS_PCICTL __IO_ADDRESS(VERSATILE_SYS_PCICTL)
|
||||
#define PCI_IMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x0)
|
||||
#define PCI_IMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x4)
|
||||
#define PCI_IMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x8)
|
||||
#define PCI_SMAP0 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x10)
|
||||
#define PCI_SMAP1 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x14)
|
||||
#define PCI_SMAP2 __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0x18)
|
||||
#define PCI_SELFID __IO_ADDRESS(VERSATILE_PCI_CORE_BASE+0xc)
|
||||
|
||||
#define DEVICE_ID_OFFSET 0x00
|
||||
#define CSR_OFFSET 0x04
|
||||
@ -76,7 +77,7 @@ static int __init versatile_pci_slot_ignore(char *str)
|
||||
__setup("pci_slot_ignore=", versatile_pci_slot_ignore);
|
||||
|
||||
|
||||
static unsigned long __pci_addr(struct pci_bus *bus,
|
||||
static void __iomem *__pci_addr(struct pci_bus *bus,
|
||||
unsigned int devfn, int offset)
|
||||
{
|
||||
unsigned int busnr = bus->number;
|
||||
@ -91,14 +92,14 @@ static unsigned long __pci_addr(struct pci_bus *bus,
|
||||
if (devfn > 255)
|
||||
BUG();
|
||||
|
||||
return (VERSATILE_PCI_CFG_VIRT_BASE | (busnr << 16) |
|
||||
return VERSATILE_PCI_CFG_VIRT_BASE + ((busnr << 16) |
|
||||
(PCI_SLOT(devfn) << 11) | (PCI_FUNC(devfn) << 8) | offset);
|
||||
}
|
||||
|
||||
static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int where,
|
||||
int size, u32 *val)
|
||||
{
|
||||
unsigned long addr = __pci_addr(bus, devfn, where);
|
||||
void __iomem *addr = __pci_addr(bus, devfn, where & ~3);
|
||||
u32 v;
|
||||
int slot = PCI_SLOT(devfn);
|
||||
|
||||
@ -121,13 +122,12 @@ static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int wh
|
||||
break;
|
||||
|
||||
case 2:
|
||||
v = __raw_readl(addr & ~3);
|
||||
if (addr & 2) v >>= 16;
|
||||
v = __raw_readl(addr);
|
||||
if (where & 2) v >>= 16;
|
||||
v &= 0xffff;
|
||||
break;
|
||||
|
||||
default:
|
||||
addr &= ~3;
|
||||
v = __raw_readl(addr);
|
||||
break;
|
||||
}
|
||||
@ -140,7 +140,7 @@ static int versatile_read_config(struct pci_bus *bus, unsigned int devfn, int wh
|
||||
static int versatile_write_config(struct pci_bus *bus, unsigned int devfn, int where,
|
||||
int size, u32 val)
|
||||
{
|
||||
unsigned long addr = __pci_addr(bus, devfn, where);
|
||||
void __iomem *addr = __pci_addr(bus, devfn, where);
|
||||
int slot = PCI_SLOT(devfn);
|
||||
|
||||
if (pci_slot_ignore & (1 << slot)) {
|
||||
@ -279,7 +279,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
|
||||
printk("PCI core found (slot %d)\n",myslot);
|
||||
|
||||
__raw_writel(myslot, PCI_SELFID);
|
||||
local_pci_cfg_base = (void *) VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11);
|
||||
local_pci_cfg_base = VERSATILE_PCI_CFG_VIRT_BASE + (myslot << 11);
|
||||
|
||||
val = __raw_readl(local_pci_cfg_base + CSR_OFFSET);
|
||||
val |= PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_INVALIDATE;
|
||||
|
@ -20,7 +20,8 @@
|
||||
#include <linux/sched.h>
|
||||
#include <linux/oprofile.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <asm/irq.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include <asm/system.h>
|
||||
|
||||
#include "op_counter.h"
|
||||
|
@ -4,7 +4,7 @@
|
||||
#
|
||||
# Up to date versions of this file can be obtained from:
|
||||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=download
|
||||
# http://www.arm.linux.org.uk/developer/machines/download.php
|
||||
#
|
||||
# Please do not send patches to this file; it is automatically generated!
|
||||
# To add an entry into this database, please see Documentation/arm/README,
|
||||
@ -12,7 +12,7 @@
|
||||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Sat Sep 23 13:20:43 2006
|
||||
# Last update: Mon Oct 16 21:13:36 2006
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
@ -1157,3 +1157,17 @@ adsturboxb MACH_ADSTURBOXB ADSTURBOXB 1143
|
||||
oti4110 MACH_OTI4110 OTI4110 1144
|
||||
hme_pxa MACH_HME_PXA HME_PXA 1145
|
||||
deisterdca MACH_DEISTERDCA DEISTERDCA 1146
|
||||
ces_ssem2 MACH_CES_SSEM2 CES_SSEM2 1147
|
||||
ces_mtr MACH_CES_MTR CES_MTR 1148
|
||||
tds_avng_sbc MACH_TDS_AVNG_SBC TDS_AVNG_SBC 1149
|
||||
everest MACH_EVEREST EVEREST 1150
|
||||
pnx4010 MACH_PNX4010 PNX4010 1151
|
||||
oxnas MACH_OXNAS OXNAS 1152
|
||||
fiori MACH_FIORI FIORI 1153
|
||||
ml1200 MACH_ML1200 ML1200 1154
|
||||
cactus MACH_CACTUS CACTUS 1155
|
||||
nb2xxx MACH_NB2XXX NB2XXX 1156
|
||||
hw6900 MACH_HW6900 HW6900 1157
|
||||
cdcs_quoll MACH_CDCS_QUOLL CDCS_QUOLL 1158
|
||||
quicksilver MACH_QUICKSILVER QUICKSILVER 1159
|
||||
uplat926 MACH_UPLAT926 UPLAT926 1160
|
||||
|
@ -56,7 +56,7 @@ static void vfp_double_normalise_denormal(struct vfp_double *vd)
|
||||
{
|
||||
int bits = 31 - fls(vd->significand >> 32);
|
||||
if (bits == 31)
|
||||
bits = 62 - fls(vd->significand);
|
||||
bits = 63 - fls(vd->significand);
|
||||
|
||||
vfp_double_dump("normalise_denormal: in", vd);
|
||||
|
||||
|
@ -90,7 +90,7 @@ void vfp_raise_sigfpe(unsigned int sicode, struct pt_regs *regs)
|
||||
|
||||
info.si_signo = SIGFPE;
|
||||
info.si_code = sicode;
|
||||
info.si_addr = (void *)(instruction_pointer(regs) - 4);
|
||||
info.si_addr = (void __user *)(instruction_pointer(regs) - 4);
|
||||
|
||||
/*
|
||||
* This is the same as NWFPE, because it's not clear what
|
||||
@ -148,6 +148,7 @@ static void vfp_raise_exceptions(u32 exceptions, u32 inst, u32 fpscr, struct pt_
|
||||
/*
|
||||
* These are arranged in priority order, least to highest.
|
||||
*/
|
||||
RAISE(FPSCR_DZC, FPSCR_DZE, FPE_FLTDIV);
|
||||
RAISE(FPSCR_IXC, FPSCR_IXE, FPE_FLTRES);
|
||||
RAISE(FPSCR_UFC, FPSCR_UFE, FPE_FLTUND);
|
||||
RAISE(FPSCR_OFC, FPSCR_OFE, FPE_FLTOVF);
|
||||
|
@ -202,14 +202,6 @@ EXPORT_SYMBOL(_find_next_zero_bit_le);
|
||||
EXPORT_SYMBOL(elf_platform);
|
||||
EXPORT_SYMBOL(elf_hwcap);
|
||||
|
||||
/* syscalls */
|
||||
EXPORT_SYMBOL(sys_write);
|
||||
EXPORT_SYMBOL(sys_read);
|
||||
EXPORT_SYMBOL(sys_lseek);
|
||||
EXPORT_SYMBOL(sys_open);
|
||||
EXPORT_SYMBOL(sys_exit);
|
||||
EXPORT_SYMBOL(sys_wait4);
|
||||
|
||||
#ifdef CONFIG_PREEMPT
|
||||
EXPORT_SYMBOL(kernel_flag);
|
||||
#endif
|
||||
|
@ -7,7 +7,7 @@
|
||||
|
||||
# Default target when executing plain make
|
||||
.PHONY: all
|
||||
all: uImage vmlinux.elf linux.lst
|
||||
all: uImage vmlinux.elf
|
||||
|
||||
KBUILD_DEFCONFIG := atstk1002_defconfig
|
||||
|
||||
@ -21,9 +21,7 @@ cpuflags-$(CONFIG_CPU_AP7000) += -mcpu=ap7000
|
||||
CFLAGS += $(cpuflags-y)
|
||||
AFLAGS += $(cpuflags-y)
|
||||
|
||||
CHECKFLAGS += -D__avr32__
|
||||
|
||||
LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
|
||||
CHECKFLAGS += -D__avr32__ -D__BIG_ENDIAN
|
||||
|
||||
head-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/head.o
|
||||
head-y += arch/avr32/kernel/head.o
|
||||
@ -32,7 +30,7 @@ core-$(CONFIG_BOARD_ATSTK1000) += arch/avr32/boards/atstk1000/
|
||||
core-$(CONFIG_LOADER_U_BOOT) += arch/avr32/boot/u-boot/
|
||||
core-y += arch/avr32/kernel/
|
||||
core-y += arch/avr32/mm/
|
||||
libs-y += arch/avr32/lib/ #$(LIBGCC)
|
||||
libs-y += arch/avr32/lib/
|
||||
|
||||
archincdir-$(CONFIG_PLATFORM_AT32AP) := arch-at32ap
|
||||
|
||||
@ -48,6 +46,8 @@ endif
|
||||
|
||||
archprepare: include/asm-avr32/.arch
|
||||
|
||||
CLEAN_FILES += include/asm-avr32/.arch include/asm-avr32/arch
|
||||
|
||||
BOOT_TARGETS := vmlinux.elf vmlinux.bin uImage uImage.srec
|
||||
|
||||
.PHONY: $(BOOT_TARGETS) install
|
||||
@ -71,14 +71,19 @@ vmlinux.elf vmlinux.bin uImage.srec uImage vmlinux.cso: vmlinux
|
||||
install: vmlinux
|
||||
$(Q)$(MAKE) $(build)=$(boot) BOOTIMAGE=$(KBUILD_IMAGE) $@
|
||||
|
||||
linux.s: vmlinux
|
||||
vmlinux.s: vmlinux
|
||||
$(call if_changed,disasm)
|
||||
|
||||
linux.lst: vmlinux
|
||||
vmlinux.lst: vmlinux
|
||||
$(call if_changed,listing)
|
||||
|
||||
CLEAN_FILES += vmlinux.s vmlinux.lst
|
||||
|
||||
archclean:
|
||||
$(Q)$(MAKE) $(clean)=$(boot)
|
||||
|
||||
define archhelp
|
||||
@echo '* vmlinux.elf - ELF image with load address 0'
|
||||
@echo ' vmlinux.cso - PathFinder CSO image'
|
||||
@echo ' uImage - Create a bootable image for U-Boot'
|
||||
@echo '* uImage - Create a bootable image for U-Boot'
|
||||
endef
|
||||
|
@ -37,14 +37,12 @@ OBJCOPYFLAGS_vmlinux.elf := --change-section-lma .text-0x80000000 \
|
||||
--change-section-lma .data-0x80000000 \
|
||||
--change-section-lma .init-0x80000000 \
|
||||
--change-section-lma .bss-0x80000000 \
|
||||
--change-section-lma .initrd-0x80000000 \
|
||||
--change-section-lma __param-0x80000000 \
|
||||
--change-section-lma __ksymtab-0x80000000 \
|
||||
--change-section-lma __ksymtab_gpl-0x80000000 \
|
||||
--change-section-lma __kcrctab-0x80000000 \
|
||||
--change-section-lma __kcrctab_gpl-0x80000000 \
|
||||
--change-section-lma __ksymtab_strings-0x80000000 \
|
||||
--change-section-lma .got-0x80000000 \
|
||||
--set-start 0xa0000000
|
||||
$(obj)/vmlinux.elf: vmlinux FORCE
|
||||
$(call if_changed,objcopy)
|
||||
@ -59,4 +57,4 @@ install: $(BOOTIMAGE)
|
||||
sh $(srctree)/install-kernel.sh $<
|
||||
|
||||
# Generated files to be removed upon make clean
|
||||
clean-files := vmlinux* uImage uImage.srec
|
||||
clean-files := vmlinux.elf vmlinux.bin vmlinux.gz uImage uImage.srec
|
||||
|
@ -1,13 +1,14 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.18-rc1
|
||||
# Tue Jul 11 12:41:36 2006
|
||||
# Linux kernel version: 2.6.19-rc2
|
||||
# Fri Oct 20 11:52:37 2006
|
||||
#
|
||||
CONFIG_AVR32=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
@ -25,16 +26,23 @@ CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||
CONFIG_LOCALVERSION=""
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_SWAP=y
|
||||
# CONFIG_SYSVIPC is not set
|
||||
# CONFIG_POSIX_MQUEUE is not set
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
# CONFIG_IPC_NS is not set
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
CONFIG_BSD_PROCESS_ACCT=y
|
||||
CONFIG_BSD_PROCESS_ACCT_V3=y
|
||||
CONFIG_TASKSTATS=y
|
||||
CONFIG_TASK_DELAY_ACCT=y
|
||||
# CONFIG_UTS_NS is not set
|
||||
CONFIG_AUDIT=y
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_RELAY is not set
|
||||
CONFIG_RELAY=y
|
||||
CONFIG_INITRAMFS_SOURCE=""
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
# CONFIG_TASK_XACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
@ -43,14 +51,15 @@ CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
CONFIG_ELF_CORE=y
|
||||
# CONFIG_BASE_FULL is not set
|
||||
# CONFIG_FUTEX is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_SHMEM=y
|
||||
# CONFIG_SLAB is not set
|
||||
# CONFIG_VM_EVENT_COUNTERS is not set
|
||||
CONFIG_SLAB=y
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_RT_MUTEXES=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
CONFIG_BASE_SMALL=1
|
||||
CONFIG_SLOB=y
|
||||
# CONFIG_SLOB is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
@ -65,6 +74,7 @@ CONFIG_MODULE_UNLOAD=y
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_BLK_DEV_IO_TRACE is not set
|
||||
|
||||
#
|
||||
@ -166,10 +176,12 @@ CONFIG_IP_PNP_DHCP=y
|
||||
# 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_DIAG=y
|
||||
CONFIG_INET_TCP_DIAG=y
|
||||
# CONFIG_TCP_CONG_ADVANCED is not set
|
||||
CONFIG_TCP_CONG_BIC=y
|
||||
CONFIG_TCP_CONG_CUBIC=y
|
||||
CONFIG_DEFAULT_TCP_CONG="cubic"
|
||||
# CONFIG_IPV6 is not set
|
||||
# CONFIG_INET6_XFRM_TUNNEL is not set
|
||||
# CONFIG_INET6_TUNNEL is not set
|
||||
@ -199,7 +211,6 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
@ -212,7 +223,6 @@ CONFIG_TCP_CONG_BIC=y
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NET_TCPPROBE is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
@ -239,7 +249,84 @@ CONFIG_STANDALONE=y
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
CONFIG_MTD=y
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
|
||||
#
|
||||
# User Modules And Translation Layers
|
||||
#
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
# CONFIG_SSFDC is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
#
|
||||
CONFIG_MTD_CFI=y
|
||||
# CONFIG_MTD_JEDECPROBE is not set
|
||||
CONFIG_MTD_GEN_PROBE=y
|
||||
# CONFIG_MTD_CFI_ADV_OPTIONS is not set
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||
CONFIG_MTD_CFI_I1=y
|
||||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CFI_AMDSTD=y
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=y
|
||||
# CONFIG_MTD_RAM is not set
|
||||
# CONFIG_MTD_ROM is not set
|
||||
# CONFIG_MTD_ABSENT is not set
|
||||
# CONFIG_MTD_OBSOLETE_CHIPS is not set
|
||||
|
||||
#
|
||||
# Mapping drivers for chip access
|
||||
#
|
||||
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_MTD_PHYSMAP_START=0x8000000
|
||||
CONFIG_MTD_PHYSMAP_LEN=0x0
|
||||
CONFIG_MTD_PHYSMAP_BANKWIDTH=2
|
||||
# CONFIG_MTD_PLATRAM is not set
|
||||
|
||||
#
|
||||
# Self-contained MTD device drivers
|
||||
#
|
||||
# CONFIG_MTD_SLRAM is not set
|
||||
# CONFIG_MTD_PHRAM is not set
|
||||
# CONFIG_MTD_MTDRAM is not set
|
||||
# CONFIG_MTD_BLOCK2MTD is not set
|
||||
|
||||
#
|
||||
# Disk-On-Chip Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_DOC2000 is not set
|
||||
# CONFIG_MTD_DOC2001 is not set
|
||||
# CONFIG_MTD_DOC2001PLUS is not set
|
||||
|
||||
#
|
||||
# NAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_NAND is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
@ -260,10 +347,17 @@ CONFIG_BLK_DEV_NBD=m
|
||||
CONFIG_BLK_DEV_RAM=m
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
@ -274,6 +368,12 @@ CONFIG_BLK_DEV_INITRD=y
|
||||
#
|
||||
# CONFIG_RAID_ATTRS is not set
|
||||
# CONFIG_SCSI is not set
|
||||
# CONFIG_SCSI_NETLINK is not set
|
||||
|
||||
#
|
||||
# Serial ATA (prod) and Parallel ATA (experimental) drivers
|
||||
#
|
||||
# CONFIG_ATA is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
@ -305,14 +405,11 @@ CONFIG_TUN=m
|
||||
#
|
||||
# PHY device support
|
||||
#
|
||||
# CONFIG_PHYLIB is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_MACB=y
|
||||
# CONFIG_NET_ETHERNET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
@ -341,10 +438,11 @@ CONFIG_PPP=m
|
||||
CONFIG_PPP_ASYNC=m
|
||||
# CONFIG_PPP_SYNC_TTY is not set
|
||||
CONFIG_PPP_DEFLATE=m
|
||||
# CONFIG_PPP_BSDCOMP is not set
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
# CONFIG_PPPOE is not set
|
||||
# CONFIG_SLIP is not set
|
||||
CONFIG_SLHC=m
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
@ -417,7 +515,6 @@ CONFIG_UNIX98_PTYS=y
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
@ -427,23 +524,13 @@ CONFIG_UNIX98_PTYS=y
|
||||
#
|
||||
# SPI support
|
||||
#
|
||||
CONFIG_SPI=y
|
||||
# CONFIG_SPI_DEBUG is not set
|
||||
CONFIG_SPI_MASTER=y
|
||||
|
||||
#
|
||||
# SPI Master Controller Drivers
|
||||
#
|
||||
CONFIG_SPI_ATMEL=m
|
||||
# CONFIG_SPI_BITBANG is not set
|
||||
|
||||
#
|
||||
# SPI Protocol Masters
|
||||
#
|
||||
# CONFIG_SPI is not set
|
||||
# CONFIG_SPI_MASTER is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
@ -451,15 +538,10 @@ CONFIG_SPI_ATMEL=m
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
CONFIG_VIDEO_V4L2=y
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
@ -470,28 +552,8 @@ CONFIG_VIDEO_V4L2=y
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
CONFIG_FB=m
|
||||
CONFIG_FB_CFB_FILLRECT=m
|
||||
CONFIG_FB_CFB_COPYAREA=m
|
||||
CONFIG_FB_CFB_IMAGEBLIT=m
|
||||
# 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
|
||||
CONFIG_FB_SIDSA=m
|
||||
CONFIG_FB_SIDSA_DEFAULT_BPP=24
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
# Logo configuration
|
||||
#
|
||||
# CONFIG_LOGO is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
|
||||
CONFIG_LCD_CLASS_DEVICE=m
|
||||
CONFIG_LCD_DEVICE=y
|
||||
CONFIG_LCD_LTV350QV=m
|
||||
# CONFIG_FB is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Sound
|
||||
@ -561,18 +623,21 @@ CONFIG_LCD_LTV350QV=m
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS=m
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT2_FS_XIP is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
# 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_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
CONFIG_MINIX_FS=m
|
||||
CONFIG_ROMFS_FS=m
|
||||
# CONFIG_INOTIFY is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
# CONFIG_QUOTA is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
@ -600,8 +665,10 @@ CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=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_RAMFS=y
|
||||
CONFIG_CONFIGFS_FS=m
|
||||
@ -616,6 +683,16 @@ CONFIG_CONFIGFS_FS=m
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_JFFS_FS is not set
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
# CONFIG_JFFS2_SUMMARY is not set
|
||||
# CONFIG_JFFS2_FS_XATTR is not set
|
||||
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
# CONFIG_JFFS2_RUBIN is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
@ -626,26 +703,10 @@ CONFIG_CONFIGFS_FS=m
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V3_ACL is not set
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
# CONFIG_NFS_FS is not set
|
||||
# CONFIG_NFSD is not set
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_LOCKD=y
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_NFS_COMMON=y
|
||||
CONFIG_SUNRPC=y
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
CONFIG_CIFS=m
|
||||
# CONFIG_CIFS_STATS is not set
|
||||
# CONFIG_CIFS_WEAK_PW_HASH is not set
|
||||
# CONFIG_CIFS_XATTR is not set
|
||||
# CONFIG_CIFS_DEBUG2 is not set
|
||||
# CONFIG_CIFS_EXPERIMENTAL is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
@ -665,7 +726,7 @@ CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=m
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
CONFIG_NLS_CODEPAGE_850=m
|
||||
# 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
|
||||
@ -705,13 +766,17 @@ CONFIG_NLS_UTF8=m
|
||||
# Kernel hacking
|
||||
#
|
||||
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
# CONFIG_PRINTK_TIME is not set
|
||||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_DETECT_SOFTLOCKUP=y
|
||||
# CONFIG_SCHEDSTATS is not set
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_RT_MUTEXES is not set
|
||||
# CONFIG_RT_MUTEX_TESTER is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
# CONFIG_DEBUG_MUTEXES is not set
|
||||
# CONFIG_DEBUG_RWSEMS is not set
|
||||
@ -722,11 +787,13 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
# CONFIG_DEBUG_LIST is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_UNWIND_INFO is not set
|
||||
CONFIG_FORCED_INLINING=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
CONFIG_KPROBES=y
|
||||
# CONFIG_KPROBES is not set
|
||||
|
||||
#
|
||||
# Security options
|
||||
@ -739,16 +806,14 @@ CONFIG_KPROBES=y
|
||||
#
|
||||
# CONFIG_CRYPTO is not set
|
||||
|
||||
#
|
||||
# Hardware crypto devices
|
||||
#
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
CONFIG_CRC_CCITT=m
|
||||
# CONFIG_CRC16 is not set
|
||||
CONFIG_CRC32=m
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
CONFIG_ZLIB_INFLATE=m
|
||||
CONFIG_ZLIB_DEFLATE=m
|
||||
CONFIG_AUDIT_GENERIC=y
|
||||
CONFIG_ZLIB_INFLATE=y
|
||||
CONFIG_ZLIB_DEFLATE=y
|
||||
CONFIG_PLIST=y
|
||||
|
@ -7,6 +7,7 @@
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/io.h>
|
||||
#include <linux/module.h>
|
||||
|
||||
#include <asm/checksum.h>
|
||||
@ -53,3 +54,11 @@ EXPORT_SYMBOL(find_next_zero_bit);
|
||||
EXPORT_SYMBOL(find_first_bit);
|
||||
EXPORT_SYMBOL(find_next_bit);
|
||||
EXPORT_SYMBOL(generic_find_next_zero_le_bit);
|
||||
|
||||
/* I/O primitives (lib/io-*.S) */
|
||||
EXPORT_SYMBOL(__raw_readsb);
|
||||
EXPORT_SYMBOL(__raw_readsw);
|
||||
EXPORT_SYMBOL(__raw_readsl);
|
||||
EXPORT_SYMBOL(__raw_writesb);
|
||||
EXPORT_SYMBOL(__raw_writesw);
|
||||
EXPORT_SYMBOL(__raw_writesl);
|
||||
|
@ -109,7 +109,7 @@ static int __kprobes kprobe_handler(struct pt_regs *regs)
|
||||
void *addr = (void *)regs->pc;
|
||||
int ret = 0;
|
||||
|
||||
pr_debug("kprobe_handler: kprobe_running=%d\n",
|
||||
pr_debug("kprobe_handler: kprobe_running=%p\n",
|
||||
kprobe_running());
|
||||
|
||||
/*
|
||||
|
@ -263,7 +263,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
|
||||
* value of PC. Just subtract the value of
|
||||
* GOT, and we're done.
|
||||
*/
|
||||
pr_debug("GOTPC: PC=0x%lx, got_offset=0x%lx, core=0x%p\n",
|
||||
pr_debug("GOTPC: PC=0x%x, got_offset=0x%lx, core=0x%p\n",
|
||||
relocation, module->arch.got_offset,
|
||||
module->module_core);
|
||||
relocation -= ((unsigned long)module->module_core
|
||||
@ -282,7 +282,7 @@ int apply_relocate_add(Elf32_Shdr *sechdrs, const char *strtab,
|
||||
&& (relocation & 0xffff0000) != 0xffff0000)
|
||||
return reloc_overflow(module, "R_AVR32_GOT16S",
|
||||
relocation);
|
||||
pr_debug("GOT reloc @ 0x%lx -> %lu\n",
|
||||
pr_debug("GOT reloc @ 0x%x -> %u\n",
|
||||
rel->r_offset, relocation);
|
||||
value = *location;
|
||||
value = ((value & 0xffff0000)
|
||||
|
@ -157,7 +157,7 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data)
|
||||
unsigned long tmp;
|
||||
int ret;
|
||||
|
||||
pr_debug("arch_ptrace(%ld, %ld, %#lx, %#lx)\n",
|
||||
pr_debug("arch_ptrace(%ld, %d, %#lx, %#lx)\n",
|
||||
request, child->pid, addr, data);
|
||||
|
||||
pr_debug("ptrace: Enabling monitor mode...\n");
|
||||
|
@ -124,15 +124,15 @@ unsigned long long sched_clock(void)
|
||||
*
|
||||
* In UP mode, it is invoked from the (global) timer_interrupt.
|
||||
*/
|
||||
static void local_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
static void local_timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
if (current->pid)
|
||||
profile_tick(CPU_PROFILING, regs);
|
||||
update_process_times(user_mode(regs));
|
||||
profile_tick(CPU_PROFILING);
|
||||
update_process_times(user_mode(get_irq_regs()));
|
||||
}
|
||||
|
||||
static irqreturn_t
|
||||
timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
unsigned int count;
|
||||
|
||||
@ -157,7 +157,7 @@ timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
|
||||
*
|
||||
* SMP is not supported yet.
|
||||
*/
|
||||
local_timer_interrupt(irq, dev_id, regs);
|
||||
local_timer_interrupt(irq, dev_id);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
@ -38,13 +38,7 @@ SECTIONS
|
||||
__setup_end = .;
|
||||
. = ALIGN(4);
|
||||
__initcall_start = .;
|
||||
*(.initcall1.init)
|
||||
*(.initcall2.init)
|
||||
*(.initcall3.init)
|
||||
*(.initcall4.init)
|
||||
*(.initcall5.init)
|
||||
*(.initcall6.init)
|
||||
*(.initcall7.init)
|
||||
INITCALLS
|
||||
__initcall_end = .;
|
||||
__con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
|
@ -7,4 +7,5 @@ lib-y += strncpy_from_user.o strnlen_user.o
|
||||
lib-y += delay.o memset.o memcpy.o findbit.o
|
||||
lib-y += csum_partial.o csum_partial_copy_generic.o
|
||||
lib-y += io-readsw.o io-readsl.o io-writesw.o io-writesl.o
|
||||
lib-y += io-readsb.o io-writesb.o
|
||||
lib-y += __avr32_lsl64.o __avr32_lsr64.o __avr32_asr64.o
|
||||
|
47
arch/avr32/lib/io-readsb.S
Normal file
47
arch/avr32/lib/io-readsb.S
Normal file
@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2006 Atmel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
.text
|
||||
.Lnot_word_aligned:
|
||||
1: ld.ub r8, r12[0]
|
||||
sub r10, 1
|
||||
st.b r11++, r8
|
||||
reteq r12
|
||||
tst r11, r9
|
||||
brne 1b
|
||||
|
||||
/* fall through */
|
||||
|
||||
.global __raw_readsb
|
||||
.type __raw_readsb,@function
|
||||
__raw_readsb:
|
||||
cp.w r10, 0
|
||||
mov r9, 3
|
||||
reteq r12
|
||||
|
||||
tst r11, r9
|
||||
brne .Lnot_word_aligned
|
||||
|
||||
sub r10, 4
|
||||
brlt 2f
|
||||
|
||||
1: ldins.b r8:t, r12[0]
|
||||
ldins.b r8:u, r12[0]
|
||||
ldins.b r8:l, r12[0]
|
||||
ldins.b r8:b, r12[0]
|
||||
st.w r11++, r8
|
||||
sub r10, 4
|
||||
brge 1b
|
||||
|
||||
2: sub r10, -4
|
||||
reteq r12
|
||||
|
||||
3: ld.uh r8, r12[0]
|
||||
sub r10, 1
|
||||
st.b r11++, r8
|
||||
brne 3b
|
52
arch/avr32/lib/io-writesb.S
Normal file
52
arch/avr32/lib/io-writesb.S
Normal file
@ -0,0 +1,52 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2006 Atmel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
.text
|
||||
.Lnot_word_aligned:
|
||||
1: ld.ub r8, r11++
|
||||
sub r10, 1
|
||||
st.b r12[0], r8
|
||||
reteq r12
|
||||
tst r11, r9
|
||||
brne 1b
|
||||
|
||||
/* fall through */
|
||||
|
||||
.global __raw_writesb
|
||||
.type __raw_writesb,@function
|
||||
__raw_writesb:
|
||||
cp.w r10, 0
|
||||
mov r9, 3
|
||||
reteq r12
|
||||
|
||||
tst r11, r9
|
||||
brne .Lnot_word_aligned
|
||||
|
||||
sub r10, 4
|
||||
brlt 2f
|
||||
|
||||
1: ld.w r8, r11++
|
||||
bfextu r9, r8, 24, 8
|
||||
st.b r12[0], r9
|
||||
bfextu r9, r8, 16, 8
|
||||
st.b r12[0], r9
|
||||
bfextu r9, r8, 8, 8
|
||||
st.b r12[0], r9
|
||||
st.b r12[0], r8
|
||||
sub r10, 4
|
||||
brge 1b
|
||||
|
||||
2: sub r10, -4
|
||||
reteq r12
|
||||
|
||||
3: ld.ub r8, r11++
|
||||
sub r10, 1
|
||||
st.b r12[0], r8
|
||||
brne 3b
|
||||
|
||||
retal r12
|
@ -102,8 +102,7 @@ struct irq_chip eim_chip = {
|
||||
.set_type = eim_set_irq_type,
|
||||
};
|
||||
|
||||
static void demux_eim_irq(unsigned int irq, struct irq_desc *desc,
|
||||
struct pt_regs *regs)
|
||||
static void demux_eim_irq(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
struct at32_sm *sm = desc->handler_data;
|
||||
struct irq_desc *ext_desc;
|
||||
@ -121,7 +120,7 @@ static void demux_eim_irq(unsigned int irq, struct irq_desc *desc,
|
||||
|
||||
ext_irq = i + sm->eim_first_irq;
|
||||
ext_desc = irq_desc + ext_irq;
|
||||
ext_desc->handle_irq(ext_irq, ext_desc, regs);
|
||||
ext_desc->handle_irq(ext_irq, ext_desc);
|
||||
}
|
||||
|
||||
spin_unlock(&sm->lock);
|
||||
|
@ -120,8 +120,8 @@
|
||||
|
||||
/* Register access macros */
|
||||
#define hsmc_readl(port,reg) \
|
||||
readl((port)->regs + HSMC_##reg)
|
||||
__raw_readl((port)->regs + HSMC_##reg)
|
||||
#define hsmc_writel(port,reg,value) \
|
||||
writel((value), (port)->regs + HSMC_##reg)
|
||||
__raw_writel((value), (port)->regs + HSMC_##reg)
|
||||
|
||||
#endif /* __ASM_AVR32_HSMC_H__ */
|
||||
|
@ -52,16 +52,19 @@ static struct intc intc0 = {
|
||||
asmlinkage void do_IRQ(int level, struct pt_regs *regs)
|
||||
{
|
||||
struct irq_desc *desc;
|
||||
struct pt_regs *old_regs;
|
||||
unsigned int irq;
|
||||
unsigned long status_reg;
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
old_regs = set_irq_regs(regs);
|
||||
|
||||
irq_enter();
|
||||
|
||||
irq = intc_readl(&intc0, INTCAUSE0 - 4 * level);
|
||||
desc = irq_desc + irq;
|
||||
desc->handle_irq(irq, desc, regs);
|
||||
desc->handle_irq(irq, desc);
|
||||
|
||||
/*
|
||||
* Clear all interrupt level masks so that we may handle
|
||||
@ -75,6 +78,8 @@ asmlinkage void do_IRQ(int level, struct pt_regs *regs)
|
||||
sysreg_write(SR, status_reg);
|
||||
|
||||
irq_exit();
|
||||
|
||||
set_irq_regs(old_regs);
|
||||
}
|
||||
|
||||
void __init init_IRQ(void)
|
||||
|
@ -321,7 +321,9 @@
|
||||
#define INTC_MKBF(name, value) (((value) & ((1 << INTC_##name##_SIZE) - 1)) << INTC_##name##_OFFSET)
|
||||
#define INTC_GETBF(name, value) (((value) >> INTC_##name##_OFFSET) & ((1 << INTC_##name##_SIZE) - 1))
|
||||
|
||||
#define intc_readl(port,reg) readl((port)->regs + INTC_##reg)
|
||||
#define intc_writel(port,reg,value) writel((value), (port)->regs + INTC_##reg)
|
||||
#define intc_readl(port,reg) \
|
||||
__raw_readl((port)->regs + INTC_##reg)
|
||||
#define intc_writel(port,reg,value) \
|
||||
__raw_writel((value), (port)->regs + INTC_##reg)
|
||||
|
||||
#endif /* __ASM_AVR32_PERIHP_INTC_H__ */
|
||||
|
@ -170,8 +170,10 @@
|
||||
#define PIO_BFINS(name,value,old) (((old) & ~(((1 << PIO_##name##_SIZE) - 1) << PIO_##name##_OFFSET)) | PIO_BF(name,value))
|
||||
|
||||
/* Register access macros */
|
||||
#define pio_readl(port,reg) readl((port)->regs + PIO_##reg)
|
||||
#define pio_writel(port,reg,value) writel((value), (port)->regs + PIO_##reg)
|
||||
#define pio_readl(port,reg) \
|
||||
__raw_readl((port)->regs + PIO_##reg)
|
||||
#define pio_writel(port,reg,value) \
|
||||
__raw_writel((value), (port)->regs + PIO_##reg)
|
||||
|
||||
void at32_init_pio(struct platform_device *pdev);
|
||||
|
||||
|
@ -234,7 +234,9 @@
|
||||
#define SM_BFINS(name,value,old) (((old) & ~(((1 << SM_##name##_SIZE) - 1) << SM_##name##_OFFSET)) | SM_BF(name,value))
|
||||
|
||||
/* Register access macros */
|
||||
#define sm_readl(port,reg) readl((port)->regs + SM_##reg)
|
||||
#define sm_writel(port,reg,value) writel((value), (port)->regs + SM_##reg)
|
||||
#define sm_readl(port,reg) \
|
||||
__raw_readl((port)->regs + SM_##reg)
|
||||
#define sm_writel(port,reg,value) \
|
||||
__raw_writel((value), (port)->regs + SM_##reg)
|
||||
|
||||
#endif /* __ASM_AVR32_SM_H__ */
|
||||
|
@ -206,7 +206,7 @@ void __init setup_bootmem(void)
|
||||
|
||||
if (mem_ramdisk) {
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
initrd_start = __va(mem_ramdisk->addr);
|
||||
initrd_start = (unsigned long)__va(mem_ramdisk->addr);
|
||||
initrd_end = initrd_start + mem_ramdisk->size;
|
||||
|
||||
print_memory_map("RAMDISK images", mem_ramdisk);
|
||||
|
@ -77,6 +77,8 @@ void __iounmap(void __iomem *addr)
|
||||
|
||||
if ((unsigned long)addr >= P4SEG)
|
||||
return;
|
||||
if (PXSEG(addr) == P2SEG)
|
||||
return;
|
||||
|
||||
p = remove_vm_area((void *)(PAGE_MASK & (unsigned long __force)addr));
|
||||
if (unlikely(!p)) {
|
||||
|
@ -2051,7 +2051,6 @@ static void cryptocop_job_queue_close(void)
|
||||
spin_lock_irqsave(&cryptocop_process_lock, process_flags);
|
||||
|
||||
/* Empty the job queue. */
|
||||
spin_lock_irqsave(&cryptocop_process_lock, process_flags);
|
||||
for (i = 0; i < cryptocop_prio_no_prios; i++){
|
||||
if (!list_empty(&(cryptocop_job_queues[i].jobs))){
|
||||
list_for_each_safe(node, tmp, &(cryptocop_job_queues[i].jobs)) {
|
||||
|
@ -44,13 +44,7 @@ SECTIONS
|
||||
|
||||
__initcall_start = .;
|
||||
.initcall.init : {
|
||||
*(.initcall1.init)
|
||||
*(.initcall2.init)
|
||||
*(.initcall3.init)
|
||||
*(.initcall4.init)
|
||||
*(.initcall5.init)
|
||||
*(.initcall6.init)
|
||||
*(.initcall7.init)
|
||||
INITCALLS
|
||||
}
|
||||
__initcall_end = .;
|
||||
__con_initcall_start = .;
|
||||
|
@ -118,13 +118,7 @@ SECTIONS
|
||||
. = ALIGN(0x4) ;
|
||||
___setup_end = .;
|
||||
___initcall_start = .;
|
||||
*(.initcall1.init)
|
||||
*(.initcall2.init)
|
||||
*(.initcall3.init)
|
||||
*(.initcall4.init)
|
||||
*(.initcall5.init)
|
||||
*(.initcall6.init)
|
||||
*(.initcall7.init)
|
||||
INITCALLS
|
||||
___initcall_end = .;
|
||||
___con_initcall_start = .;
|
||||
*(.con_initcall.init)
|
||||
|
@ -7,6 +7,7 @@ choice
|
||||
|
||||
config M386
|
||||
bool "386"
|
||||
depends on !UML
|
||||
---help---
|
||||
This is the processor type of your CPU. This information is used for
|
||||
optimizing purposes. In order to compile a kernel that can run on
|
||||
@ -301,7 +302,7 @@ config X86_USE_PPRO_CHECKSUM
|
||||
|
||||
config X86_USE_3DNOW
|
||||
bool
|
||||
depends on MCYRIXIII || MK7 || MGEODE_LX
|
||||
depends on (MCYRIXIII || MK7 || MGEODE_LX) && !UML
|
||||
default y
|
||||
|
||||
config X86_OOSTORE
|
||||
|
@ -42,6 +42,10 @@ cflags-$(CONFIG_REGPARM) += -mregparm=3
|
||||
# temporary until string.h is fixed
|
||||
cflags-y += -ffreestanding
|
||||
|
||||
# this works around some issues with generating unwind tables in older gccs
|
||||
# newer gccs do it by default
|
||||
cflags-y += -maccumulate-outgoing-args
|
||||
|
||||
# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
|
||||
# a lot more stack due to the lack of sharing of stacklots:
|
||||
CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then echo $(call cc-option,-fno-unit-at-a-time); fi ;)
|
||||
@ -51,8 +55,8 @@ cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
|
||||
AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
|
||||
|
||||
# is .cfi_signal_frame supported too?
|
||||
cflags-y += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
|
||||
AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_endproc,-DCONFIG_AS_CFI=1,)
|
||||
cflags-y += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
|
||||
AFLAGS += $(call as-instr,.cfi_startproc\n.cfi_signal_frame\n.cfi_endproc,-DCONFIG_AS_CFI_SIGNAL_FRAME=1,)
|
||||
|
||||
CFLAGS += $(cflags-y)
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.19-rc1
|
||||
# Thu Oct 5 13:04:53 2006
|
||||
# Linux kernel version: 2.6.19-rc2-git4
|
||||
# Sat Oct 21 03:38:56 2006
|
||||
#
|
||||
CONFIG_X86_32=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
@ -380,8 +380,8 @@ CONFIG_INET6_XFRM_MODE_TRANSPORT=y
|
||||
CONFIG_INET6_XFRM_MODE_TUNNEL=y
|
||||
# CONFIG_INET6_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
|
||||
CONFIG_IPV6_SIT=y
|
||||
# CONFIG_IPV6_TUNNEL is not set
|
||||
# CONFIG_IPV6_SUBTREES is not set
|
||||
# CONFIG_IPV6_MULTIPLE_TABLES is not set
|
||||
# CONFIG_NETWORK_SECMARK is not set
|
||||
# CONFIG_NETFILTER is not set
|
||||
@ -482,6 +482,13 @@ CONFIG_BLK_DEV_INITRD=y
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
# CONFIG_IBM_ASM is not set
|
||||
# CONFIG_SGI_IOC4 is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
@ -1024,6 +1031,7 @@ CONFIG_HANGCHECK_TIMER=y
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Hardware Monitoring support
|
||||
@ -1031,12 +1039,6 @@ CONFIG_HANGCHECK_TIMER=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_HWMON_VID is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
# CONFIG_IBM_ASM is not set
|
||||
# CONFIG_TIFM_CORE is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
@ -1169,7 +1171,6 @@ CONFIG_USB_HIDINPUT=y
|
||||
# CONFIG_USB_ATI_REMOTE2 is not set
|
||||
# CONFIG_USB_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_USB_APPLETOUCH is not set
|
||||
# CONFIG_USB_TRANCEVIBRATOR is not set
|
||||
|
||||
#
|
||||
# USB Imaging devices
|
||||
@ -1215,6 +1216,7 @@ CONFIG_USB_MON=y
|
||||
# CONFIG_USB_APPLEDISPLAY is not set
|
||||
# CONFIG_USB_SISUSBVGA is not set
|
||||
# CONFIG_USB_LD is not set
|
||||
# CONFIG_USB_TRANCEVIBRATOR is not set
|
||||
# CONFIG_USB_TEST is not set
|
||||
|
||||
#
|
||||
@ -1284,6 +1286,7 @@ CONFIG_EXT3_FS=y
|
||||
CONFIG_EXT3_FS_XATTR=y
|
||||
CONFIG_EXT3_FS_POSIX_ACL=y
|
||||
# CONFIG_EXT3_FS_SECURITY is not set
|
||||
# CONFIG_EXT4DEV_FS is not set
|
||||
CONFIG_JBD=y
|
||||
# CONFIG_JBD_DEBUG is not set
|
||||
CONFIG_FS_MBCACHE=y
|
||||
@ -1307,6 +1310,7 @@ CONFIG_DNOTIFY=y
|
||||
# CONFIG_AUTOFS_FS is not set
|
||||
CONFIG_AUTOFS4_FS=y
|
||||
# CONFIG_FUSE_FS is not set
|
||||
CONFIG_GENERIC_ACL=y
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
@ -1384,7 +1388,6 @@ CONFIG_SUNRPC=y
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
# CONFIG_9P_FS is not set
|
||||
CONFIG_GENERIC_ACL=y
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
@ -1436,10 +1439,6 @@ CONFIG_NLS_ISO8859_15=y
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
CONFIG_NLS_UTF8=y
|
||||
|
||||
#
|
||||
# Distributed Lock Manager
|
||||
#
|
||||
|
||||
#
|
||||
# Instrumentation Support
|
||||
#
|
||||
@ -1480,6 +1479,7 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_UNWIND_INFO=y
|
||||
CONFIG_STACK_UNWIND=y
|
||||
# CONFIG_FORCED_INLINING is not set
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_LKDTM is not set
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
|
@ -70,7 +70,7 @@ static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) { return
|
||||
|
||||
#define PREFIX "ACPI: "
|
||||
|
||||
int acpi_noirq __initdata; /* skip ACPI IRQ initialization */
|
||||
int acpi_noirq; /* skip ACPI IRQ initialization */
|
||||
int acpi_pci_disabled __initdata; /* skip ACPI PCI scan and IRQ initialization */
|
||||
int acpi_ht __initdata = 1; /* enable HT */
|
||||
|
||||
@ -332,7 +332,7 @@ acpi_parse_ioapic(acpi_table_entry_header * header, const unsigned long end)
|
||||
/*
|
||||
* Parse Interrupt Source Override for the ACPI SCI
|
||||
*/
|
||||
static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
|
||||
static void acpi_sci_ioapic_setup(u32 bus_irq, u32 gsi, u16 polarity, u16 trigger)
|
||||
{
|
||||
if (trigger == 0) /* compatible SCI trigger is level */
|
||||
trigger = 3;
|
||||
@ -352,13 +352,13 @@ static void acpi_sci_ioapic_setup(u32 gsi, u16 polarity, u16 trigger)
|
||||
* If GSI is < 16, this will update its flags,
|
||||
* else it will create a new mp_irqs[] entry.
|
||||
*/
|
||||
mp_override_legacy_irq(gsi, polarity, trigger, gsi);
|
||||
mp_override_legacy_irq(bus_irq, polarity, trigger, gsi);
|
||||
|
||||
/*
|
||||
* stash over-ride to indicate we've been here
|
||||
* and for later update of acpi_fadt
|
||||
*/
|
||||
acpi_sci_override_gsi = gsi;
|
||||
acpi_sci_override_gsi = bus_irq;
|
||||
return;
|
||||
}
|
||||
|
||||
@ -376,7 +376,7 @@ acpi_parse_int_src_ovr(acpi_table_entry_header * header,
|
||||
acpi_table_print_madt_entry(header);
|
||||
|
||||
if (intsrc->bus_irq == acpi_fadt.sci_int) {
|
||||
acpi_sci_ioapic_setup(intsrc->global_irq,
|
||||
acpi_sci_ioapic_setup(intsrc->bus_irq, intsrc->global_irq,
|
||||
intsrc->flags.polarity,
|
||||
intsrc->flags.trigger);
|
||||
return 0;
|
||||
@ -879,7 +879,7 @@ static int __init acpi_parse_madt_ioapic_entries(void)
|
||||
* pretend we got one so we can set the SCI flags.
|
||||
*/
|
||||
if (!acpi_sci_override_gsi)
|
||||
acpi_sci_ioapic_setup(acpi_fadt.sci_int, 0, 0);
|
||||
acpi_sci_ioapic_setup(acpi_fadt.sci_int, acpi_fadt.sci_int, 0, 0);
|
||||
|
||||
/* Fill in identity legacy mapings where no override */
|
||||
mp_config_acpi_legacy_irqs();
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/cpu.h>
|
||||
|
||||
#include <acpi/processor.h>
|
||||
#include <asm/acpi.h>
|
||||
@ -41,5 +42,124 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
|
||||
flags->bm_check = 1;
|
||||
}
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(acpi_processor_power_init_bm_check);
|
||||
|
||||
/* The code below handles cstate entry with monitor-mwait pair on Intel*/
|
||||
|
||||
struct cstate_entry_s {
|
||||
struct {
|
||||
unsigned int eax;
|
||||
unsigned int ecx;
|
||||
} states[ACPI_PROCESSOR_MAX_POWER];
|
||||
};
|
||||
static struct cstate_entry_s *cpu_cstate_entry; /* per CPU ptr */
|
||||
|
||||
static short mwait_supported[ACPI_PROCESSOR_MAX_POWER];
|
||||
|
||||
#define MWAIT_SUBSTATE_MASK (0xf)
|
||||
#define MWAIT_SUBSTATE_SIZE (4)
|
||||
|
||||
#define CPUID_MWAIT_LEAF (5)
|
||||
#define CPUID5_ECX_EXTENSIONS_SUPPORTED (0x1)
|
||||
#define CPUID5_ECX_INTERRUPT_BREAK (0x2)
|
||||
|
||||
#define MWAIT_ECX_INTERRUPT_BREAK (0x1)
|
||||
|
||||
#define NATIVE_CSTATE_BEYOND_HALT (2)
|
||||
|
||||
int acpi_processor_ffh_cstate_probe(unsigned int cpu,
|
||||
struct acpi_processor_cx *cx, struct acpi_power_register *reg)
|
||||
{
|
||||
struct cstate_entry_s *percpu_entry;
|
||||
struct cpuinfo_x86 *c = cpu_data + cpu;
|
||||
|
||||
cpumask_t saved_mask;
|
||||
int retval;
|
||||
unsigned int eax, ebx, ecx, edx;
|
||||
unsigned int edx_part;
|
||||
unsigned int cstate_type; /* C-state type and not ACPI C-state type */
|
||||
unsigned int num_cstate_subtype;
|
||||
|
||||
if (!cpu_cstate_entry || c->cpuid_level < CPUID_MWAIT_LEAF )
|
||||
return -1;
|
||||
|
||||
if (reg->bit_offset != NATIVE_CSTATE_BEYOND_HALT)
|
||||
return -1;
|
||||
|
||||
percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
|
||||
percpu_entry->states[cx->index].eax = 0;
|
||||
percpu_entry->states[cx->index].ecx = 0;
|
||||
|
||||
/* Make sure we are running on right CPU */
|
||||
saved_mask = current->cpus_allowed;
|
||||
retval = set_cpus_allowed(current, cpumask_of_cpu(cpu));
|
||||
if (retval)
|
||||
return -1;
|
||||
|
||||
cpuid(CPUID_MWAIT_LEAF, &eax, &ebx, &ecx, &edx);
|
||||
|
||||
/* Check whether this particular cx_type (in CST) is supported or not */
|
||||
cstate_type = (cx->address >> MWAIT_SUBSTATE_SIZE) + 1;
|
||||
edx_part = edx >> (cstate_type * MWAIT_SUBSTATE_SIZE);
|
||||
num_cstate_subtype = edx_part & MWAIT_SUBSTATE_MASK;
|
||||
|
||||
retval = 0;
|
||||
if (num_cstate_subtype < (cx->address & MWAIT_SUBSTATE_MASK)) {
|
||||
retval = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* mwait ecx extensions INTERRUPT_BREAK should be supported for C2/C3 */
|
||||
if (!(ecx & CPUID5_ECX_EXTENSIONS_SUPPORTED) ||
|
||||
!(ecx & CPUID5_ECX_INTERRUPT_BREAK)) {
|
||||
retval = -1;
|
||||
goto out;
|
||||
}
|
||||
percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
|
||||
|
||||
/* Use the hint in CST */
|
||||
percpu_entry->states[cx->index].eax = cx->address;
|
||||
|
||||
if (!mwait_supported[cstate_type]) {
|
||||
mwait_supported[cstate_type] = 1;
|
||||
printk(KERN_DEBUG "Monitor-Mwait will be used to enter C-%d "
|
||||
"state\n", cx->type);
|
||||
}
|
||||
|
||||
out:
|
||||
set_cpus_allowed(current, saved_mask);
|
||||
return retval;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_probe);
|
||||
|
||||
void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx)
|
||||
{
|
||||
unsigned int cpu = smp_processor_id();
|
||||
struct cstate_entry_s *percpu_entry;
|
||||
|
||||
percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
|
||||
mwait_idle_with_hints(percpu_entry->states[cx->index].eax,
|
||||
percpu_entry->states[cx->index].ecx);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_enter);
|
||||
|
||||
static int __init ffh_cstate_init(void)
|
||||
{
|
||||
struct cpuinfo_x86 *c = &boot_cpu_data;
|
||||
if (c->x86_vendor != X86_VENDOR_INTEL)
|
||||
return -1;
|
||||
|
||||
cpu_cstate_entry = alloc_percpu(struct cstate_entry_s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __exit ffh_cstate_exit(void)
|
||||
{
|
||||
if (cpu_cstate_entry) {
|
||||
free_percpu(cpu_cstate_entry);
|
||||
cpu_cstate_entry = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
arch_initcall(ffh_cstate_init);
|
||||
__exitcall(ffh_cstate_exit);
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user