mirror of https://gitee.com/openkylin/linux.git
Merge branch 'master'
This commit is contained in:
commit
2226340eb8
|
@ -237,8 +237,10 @@ X!Ilib/string.c
|
|||
<sect1><title>Driver Support</title>
|
||||
!Enet/core/dev.c
|
||||
!Enet/ethernet/eth.c
|
||||
!Einclude/linux/etherdevice.h
|
||||
!Enet/core/wireless.c
|
||||
!Iinclude/linux/etherdevice.h
|
||||
<!-- FIXME: Removed for now since no structured comments in source
|
||||
X!Enet/core/wireless.c
|
||||
-->
|
||||
</sect1>
|
||||
<sect1><title>Synchronous PPP</title>
|
||||
!Edrivers/net/wan/syncppp.c
|
||||
|
|
|
@ -12,7 +12,7 @@ This release has been validated against the SoftFloat-2b library by
|
|||
John R. Hauser using the TestFloat-2a test suite. Details of this
|
||||
library and test suite can be found at:
|
||||
|
||||
http://www.cs.berkeley.edu/~jhauser/arithmetic/SoftFloat.html
|
||||
http://www.jhauser.us/arithmetic/SoftFloat.html
|
||||
|
||||
The operations which have been tested with this package are:
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ Some very frequently asked questions about linuxtv-dvb
|
|||
Metzler Bros. DVB development; alternate drivers and
|
||||
DVB utilities, include dvb-mpegtools and tuxzap.
|
||||
|
||||
http://www.linuxstb.org/
|
||||
http://sourceforge.net/projects/dvbtools/
|
||||
Dave Chapman's dvbtools package, including
|
||||
dvbstream and dvbtune
|
||||
|
|
|
@ -216,4 +216,4 @@ due to an incompatibility with the Amiga floppy controller.
|
|||
|
||||
If you are interested in an Amiga Emulator for Linux, look at
|
||||
|
||||
http://www-users.informatik.rwth-aachen.de/~crux/uae.html
|
||||
http://www.freiburg.linux.de/~uae/
|
||||
|
|
|
@ -369,9 +369,8 @@ The kernel source file:/usr/src/linux/fs/ext2/
|
|||
e2fsprogs (e2fsck) http://e2fsprogs.sourceforge.net/
|
||||
Design & Implementation http://e2fsprogs.sourceforge.net/ext2intro.html
|
||||
Journaling (ext3) ftp://ftp.uk.linux.org/pub/linux/sct/fs/jfs/
|
||||
Hashed Directories http://kernelnewbies.org/~phillips/htree/
|
||||
Filesystem Resizing http://ext2resize.sourceforge.net/
|
||||
Compression (*) http://www.netspace.net.au/~reiter/e2compr/
|
||||
Compression (*) http://e2compr.sourceforge.net/
|
||||
|
||||
Implementations for:
|
||||
Windows 95/98/NT/2000 http://uranus.it.swin.edu.au/~jn/linux/Explore2fs.htm
|
||||
|
|
|
@ -4,7 +4,7 @@ FAQ list:
|
|||
=========
|
||||
|
||||
A FAQ list may be found in the fdutils package (see below), and also
|
||||
at http://fdutils.linux.lu/FAQ.html
|
||||
at <http://fdutils.linux.lu/faq.html>.
|
||||
|
||||
|
||||
LILO configuration options (Thinkpad users, read this)
|
||||
|
@ -217,10 +217,10 @@ It also contains additional documentation about the floppy driver.
|
|||
The latest version can be found at fdutils homepage:
|
||||
http://fdutils.linux.lu
|
||||
|
||||
The fdutils-5.4 release can be found at:
|
||||
http://fdutils.linux.lu/fdutils-5.4.src.tar.gz
|
||||
http://www.tux.org/pub/knaff/fdutils/fdutils-5.4.src.tar.gz
|
||||
ftp://metalab.unc.edu/pub/Linux/utils/disk-management/fdutils-5.4.src.tar.gz
|
||||
The fdutils releases can be found at:
|
||||
http://fdutils.linux.lu/download.html
|
||||
http://www.tux.org/pub/knaff/fdutils/
|
||||
ftp://metalab.unc.edu/pub/Linux/utils/disk-management/
|
||||
|
||||
Reporting problems about the floppy driver
|
||||
==========================================
|
||||
|
|
|
@ -133,7 +133,7 @@ Code Seq# Include File Comments
|
|||
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
|
||||
<http://mikonos.dia.unisa.it/tcfs>
|
||||
'l' 40-7F linux/udf_fs_i.h in development:
|
||||
<http://www.trylinux.com/projects/udf/>
|
||||
<http://sourceforge.net/projects/linux-udf/>
|
||||
'm' all linux/mtio.h conflict!
|
||||
'm' all linux/soundcard.h conflict!
|
||||
'm' all linux/synclink.h conflict!
|
||||
|
|
|
@ -196,7 +196,7 @@
|
|||
|
||||
* Title: "Writing Linux Device Drivers"
|
||||
Author: Michael K. Johnson.
|
||||
URL: http://people.redhat.com/johnsonm/devices.html
|
||||
URL: http://users.evitech.fi/~tk/rtos/writing_linux_device_d.html
|
||||
Keywords: files, VFS, file operations, kernel interface, character
|
||||
vs block devices, I/O access, hardware interrupts, DMA, access to
|
||||
user memory, memory allocation, timers.
|
||||
|
@ -284,7 +284,7 @@
|
|||
|
||||
* Title: "Linux Kernel Module Programming Guide"
|
||||
Author: Ori Pomerantz.
|
||||
URL: http://www.tldp.org/LDP/lkmpg/mpg.html
|
||||
URL: http://tldp.org/LDP/lkmpg/2.6/html/index.html
|
||||
Keywords: modules, GPL book, /proc, ioctls, system calls,
|
||||
interrupt handlers .
|
||||
Description: Very nice 92 pages GPL book on the topic of modules
|
||||
|
@ -292,7 +292,7 @@
|
|||
|
||||
* Title: "Device File System (devfs) Overview"
|
||||
Author: Richard Gooch.
|
||||
URL: http://www.atnf.csiro.au/~rgooch/linux/docs/devfs.txt
|
||||
URL: http://www.atnf.csiro.au/people/rgooch/linux/docs/devfs.html
|
||||
Keywords: filesystem, /dev, devfs, dynamic devices, major/minor
|
||||
allocation, device management.
|
||||
Description: Document describing Richard Gooch's controversial
|
||||
|
@ -316,9 +316,8 @@
|
|||
|
||||
* Title: "The Kernel Hacking HOWTO"
|
||||
Author: Various Talented People, and Rusty.
|
||||
URL:
|
||||
http://www.lisoleg.net/doc/Kernel-Hacking-HOWTO/kernel-hacking-HOW
|
||||
TO.html
|
||||
Location: in kernel tree, Documentation/DocBook/kernel-hacking/
|
||||
(must be built as "make {htmldocs | psdocs | pdfdocs})
|
||||
Keywords: HOWTO, kernel contexts, deadlock, locking, modules,
|
||||
symbols, return conventions.
|
||||
Description: From the Introduction: "Please understand that I
|
||||
|
@ -332,13 +331,13 @@
|
|||
originally written for the 2.3 kernels, but nearly all of it
|
||||
applies to 2.2 too; 2.0 is slightly different".
|
||||
|
||||
* Title: "ALSA 0.5.0 Developer documentation"
|
||||
Author: Stephan 'Jumpy' Bartels .
|
||||
URL: http://www.math.TU-Berlin.de/~sbartels/alsa/
|
||||
* Title: "Writing an ALSA Driver"
|
||||
Author: Takashi Iwai <tiwai@suse.de>
|
||||
URL: http://www.alsa-project.org/~iwai/writing-an-alsa-driver/index.html
|
||||
Keywords: ALSA, sound, soundcard, driver, lowlevel, hardware.
|
||||
Description: Advanced Linux Sound Architecture for developers,
|
||||
both at kernel and user-level sides. Work in progress. ALSA is
|
||||
supposed to be Linux's next generation sound architecture.
|
||||
both at kernel and user-level sides. ALSA is the Linux kernel
|
||||
sound architecture in the 2.6 kernel version.
|
||||
|
||||
* Title: "Programming Guide for Linux USB Device Drivers"
|
||||
Author: Detlef Fliegl.
|
||||
|
@ -369,8 +368,8 @@
|
|||
filesystems, IPC and Networking Code.
|
||||
|
||||
* Title: "Linux Kernel Mailing List Glossary"
|
||||
Author: John Levon.
|
||||
URL: http://www.movement.uklinux.net/glossary.html
|
||||
Author: various
|
||||
URL: http://kernelnewbies.org/glossary/
|
||||
Keywords: glossary, terms, linux-kernel.
|
||||
Description: From the introduction: "This glossary is intended as
|
||||
a brief description of some of the acronyms and terms you may hear
|
||||
|
@ -378,9 +377,8 @@
|
|||
|
||||
* Title: "Linux Kernel Locking HOWTO"
|
||||
Author: Various Talented People, and Rusty.
|
||||
URL:
|
||||
http://netfilter.kernelnotes.org/unreliable-guides/kernel-locking-
|
||||
HOWTO.html
|
||||
Location: in kernel tree, Documentation/DocBook/kernel-locking/
|
||||
(must be built as "make {htmldocs | psdocs | pdfdocs})
|
||||
Keywords: locks, locking, spinlock, semaphore, atomic, race
|
||||
condition, bottom halves, tasklets, softirqs.
|
||||
Description: The title says it all: document describing the
|
||||
|
@ -490,7 +488,7 @@
|
|||
|
||||
* Title: "Get those boards talking under Linux."
|
||||
Author: Alex Ivchenko.
|
||||
URL: http://www.ednmag.com/ednmag/reg/2000/06222000/13df2.htm
|
||||
URL: http://www.edn.com/article/CA46968.html
|
||||
Keywords: data-acquisition boards, drivers, modules, interrupts,
|
||||
memory allocation.
|
||||
Description: Article written for people wishing to make their data
|
||||
|
@ -498,7 +496,7 @@
|
|||
overview on writing drivers, from the naming of functions to
|
||||
interrupt handling.
|
||||
Notes: Two-parts article. Part II is at
|
||||
http://www.ednmag.com/ednmag/reg/2000/07062000/14df.htm
|
||||
URL: http://www.edn.com/article/CA46998.html
|
||||
|
||||
* Title: "Linux PCMCIA Programmer's Guide"
|
||||
Author: David Hinds.
|
||||
|
@ -529,7 +527,7 @@
|
|||
definitive guide for hackers, virus coders and system
|
||||
administrators."
|
||||
Author: pragmatic/THC.
|
||||
URL: http://packetstorm.securify.com/groups/thc/LKM_HACKING.html
|
||||
URL: http://packetstormsecurity.org/docs/hack/LKM_HACKING.html
|
||||
Keywords: syscalls, intercept, hide, abuse, symbol table.
|
||||
Description: Interesting paper on how to abuse the Linux kernel in
|
||||
order to intercept and modify syscalls, make
|
||||
|
@ -537,8 +535,7 @@
|
|||
write kernel modules based virus... and solutions for admins to
|
||||
avoid all those abuses.
|
||||
Notes: For 2.0.x kernels. Gives guidances to port it to 2.2.x
|
||||
kernels. Also available in txt format at
|
||||
http://www.blacknemesis.org/hacking/txt/cllkm.txt
|
||||
kernels.
|
||||
|
||||
BOOKS: (Not on-line)
|
||||
|
||||
|
@ -557,7 +554,17 @@
|
|||
ISBN: 0-59600-008-1
|
||||
Notes: Further information in
|
||||
http://www.oreilly.com/catalog/linuxdrive2/
|
||||
|
||||
|
||||
* Title: "Linux Device Drivers, 3nd Edition"
|
||||
Authors: Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman
|
||||
Publisher: O'Reilly & Associates.
|
||||
Date: 2005.
|
||||
Pages: 636.
|
||||
ISBN: 0-596-00590-3
|
||||
Notes: Further information in
|
||||
http://www.oreilly.com/catalog/linuxdrive3/
|
||||
PDF format, URL: http://lwn.net/Kernel/LDD3/
|
||||
|
||||
* Title: "Linux Kernel Internals"
|
||||
Author: Michael Beck.
|
||||
Publisher: Addison-Wesley.
|
||||
|
@ -766,12 +773,15 @@
|
|||
documents, FAQs...
|
||||
|
||||
* Name: "linux-kernel mailing list archives and search engines"
|
||||
URL: http://vger.kernel.org/vger-lists.html
|
||||
URL: http://www.uwsg.indiana.edu/hypermail/linux/kernel/index.html
|
||||
URL: http://www.kernelnotes.org/lnxlists/linux-kernel/
|
||||
URL: http://www.geocrawler.com
|
||||
URL: http://marc.theaimsgroup.com/?l=linux-kernel
|
||||
URL: http://groups.google.com/group/mlist.linux.kernel
|
||||
URL: http://www.cs.helsinki.fi/linux/linux-kernel/
|
||||
URL: http://www.lib.uaa.alaska.edu/linux-kernel/
|
||||
Keywords: linux-kernel, archives, search.
|
||||
Description: Some of the linux-kernel mailing list archivers. If
|
||||
you have a better/another one, please let me know.
|
||||
_________________________________________________________________
|
||||
|
||||
Document last updated on Thu Jun 28 15:09:39 CEST 2001
|
||||
Document last updated on Sat 2005-NOV-19
|
||||
|
|
|
@ -252,7 +252,7 @@ their names here, but I don't have a list handy. Check the MCA Linux
|
|||
home page (URL below) for a perpetually out-of-date list.
|
||||
|
||||
=====================================================================
|
||||
MCA Linux Home Page: http://glycerine.itsmm.uni.edu/mca/
|
||||
MCA Linux Home Page: http://www.dgmicro.com/mca/
|
||||
|
||||
Christophe Beauregard
|
||||
chrisb@truespectra.com
|
||||
|
|
|
@ -1,7 +1,4 @@
|
|||
Documents about softnet driver issues in general can be found
|
||||
at:
|
||||
|
||||
http://www.firstfloor.org/~andi/softnet/
|
||||
Document about softnet driver issues
|
||||
|
||||
Transmit path guidelines:
|
||||
|
||||
|
|
|
@ -693,13 +693,7 @@ static int enslave(char *master_ifname, char *slave_ifname)
|
|||
/* Older bonding versions would panic if the slave has no IP
|
||||
* address, so get the IP setting from the master.
|
||||
*/
|
||||
res = set_if_addr(master_ifname, slave_ifname);
|
||||
if (res) {
|
||||
fprintf(stderr,
|
||||
"Slave '%s': Error: set address failed\n",
|
||||
slave_ifname);
|
||||
return res;
|
||||
}
|
||||
set_if_addr(master_ifname, slave_ifname);
|
||||
} else {
|
||||
res = clear_if_addr(slave_ifname);
|
||||
if (res) {
|
||||
|
@ -1085,7 +1079,6 @@ static int set_if_addr(char *master_ifname, char *slave_ifname)
|
|||
slave_ifname, ifra[i].req_name,
|
||||
strerror(saved_errno));
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
ipaddr = ifr.ifr_addr.sa_data;
|
||||
|
|
|
@ -22,7 +22,7 @@ The features and limitations of this driver are as follows:
|
|||
- All variants of Interphase ATM PCI (i)Chip adapter cards are supported,
|
||||
including x575 (OC3, control memory 128K , 512K and packet memory 128K,
|
||||
512K and 1M), x525 (UTP25) and x531 (DS3 and E3). See
|
||||
http://www.iphase.com/products/ClassSheet.cfm?ClassID=ATM
|
||||
http://www.iphase.com/site/iphase-web/?epi_menuItemID=e196f04b4b3b40502f150882e21046a0
|
||||
for details.
|
||||
- Only x86 platforms are supported.
|
||||
- SMP is supported.
|
||||
|
|
|
@ -3,12 +3,8 @@ of the IrDA Utilities. More detailed information about these and associated
|
|||
programs can be found on http://irda.sourceforge.net/
|
||||
|
||||
For more information about how to use the IrDA protocol stack, see the
|
||||
Linux Infared HOWTO (http://www.tuxmobil.org/Infrared-HOWTO/Infrared-HOWTO.html)
|
||||
by Werner Heuser <wehe@tuxmobil.org>
|
||||
Linux Infrared HOWTO by Werner Heuser <wehe@tuxmobil.org>:
|
||||
<http://www.tuxmobil.org/Infrared-HOWTO/Infrared-HOWTO.html>
|
||||
|
||||
There is an active mailing list for discussing Linux-IrDA matters called
|
||||
irda-users@lists.sourceforge.net
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -29,8 +29,7 @@ with nondefault parameters, they can be edited in
|
|||
will find them all.
|
||||
|
||||
Information on card services is available at:
|
||||
ftp://hyper.stanford.edu/pub/pcmcia/doc
|
||||
http://hyper.stanford.edu/HyperNews/get/pcmcia/home.html
|
||||
http://pcmcia-cs.sourceforge.net/
|
||||
|
||||
|
||||
Card services user programs are still required for PCMCIA devices.
|
||||
|
|
|
@ -11,7 +11,7 @@ The driver was written by Donald Becker <becker@scyld.com>
|
|||
Don is no longer the prime maintainer of this version of the driver.
|
||||
Please report problems to one or more of:
|
||||
|
||||
Andrew Morton <andrewm@uow.edu.au>
|
||||
Andrew Morton <akpm@osdl.org>
|
||||
Netdev mailing list <netdev@vger.kernel.org>
|
||||
Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
||||
|
||||
|
@ -274,24 +274,24 @@ Details of the device driver implementation are at the top of the source file.
|
|||
|
||||
Additional documentation is available at Don Becker's Linux Drivers site:
|
||||
|
||||
http://www.scyld.com/network/vortex.html
|
||||
http://www.scyld.com/vortex.html
|
||||
|
||||
Donald Becker's driver development site:
|
||||
|
||||
http://www.scyld.com/network
|
||||
http://www.scyld.com/network.html
|
||||
|
||||
Donald's vortex-diag program is useful for inspecting the NIC's state:
|
||||
|
||||
http://www.scyld.com/diag/#pci-diags
|
||||
http://www.scyld.com/ethercard_diag.html
|
||||
|
||||
Donald's mii-diag program may be used for inspecting and manipulating
|
||||
the NIC's Media Independent Interface subsystem:
|
||||
|
||||
http://www.scyld.com/diag/#mii-diag
|
||||
http://www.scyld.com/ethercard_diag.html#mii-diag
|
||||
|
||||
Donald's wake-on-LAN page:
|
||||
|
||||
http://www.scyld.com/expert/wake-on-lan.html
|
||||
http://www.scyld.com/wakeonlan.html
|
||||
|
||||
3Com's documentation for many NICs, including the ones supported by
|
||||
this driver is available at
|
||||
|
@ -305,7 +305,7 @@ this driver is available at
|
|||
Driver updates and a detailed changelog for the modifications which
|
||||
were made for the 2.3/2,4 series kernel is available at
|
||||
|
||||
http://www.uow.edu.au/~andrewm/linux/#3c59x-2.3
|
||||
http://www.zip.com.au/~akpm/linux/#3c59x-bc
|
||||
|
||||
|
||||
Autonegotiation notes
|
||||
|
@ -434,8 +434,8 @@ steps you should take:
|
|||
send all logs to the maintainer.
|
||||
|
||||
3) Download you card's diagnostic tool from Donald
|
||||
Backer's website http://www.scyld.com/diag. Download
|
||||
mii-diag.c as well. Build these.
|
||||
Becker's website <http://www.scyld.com/ethercard_diag.html>.
|
||||
Download mii-diag.c as well. Build these.
|
||||
|
||||
a) Run 'vortex-diag -aaee' and 'mii-diag -v' when the card is
|
||||
working correctly. Save the output.
|
||||
|
@ -443,8 +443,8 @@ steps you should take:
|
|||
b) Run the above commands when the card is malfunctioning. Send
|
||||
both sets of output.
|
||||
|
||||
Finally, please be patient and be prepared to do some work. You may end up working on
|
||||
this problem for a week or more as the maintainer asks more questions, asks for more
|
||||
tests, asks for patches to be applied, etc. At the end of it all, the problem may even
|
||||
remain unresolved.
|
||||
|
||||
Finally, please be patient and be prepared to do some work. You may
|
||||
end up working on this problem for a week or more as the maintainer
|
||||
asks more questions, asks for more tests, asks for patches to be
|
||||
applied, etc. At the end of it all, the problem may even remain
|
||||
unresolved.
|
||||
|
|
|
@ -335,5 +335,5 @@ this on the whole.
|
|||
PCI Local Bus Specification
|
||||
PCI Bus Power Management Interface Specification
|
||||
|
||||
http://pcisig.org
|
||||
http://www.pcisig.com
|
||||
|
||||
|
|
|
@ -1108,7 +1108,7 @@
|
|||
A: You have to activate MCA bus support, first.
|
||||
Q: Where can I find the latest info about this driver?
|
||||
A: See the file MAINTAINERS for the current WWW-address, which offers
|
||||
updates, info and Q/A lists. At this files' origin, the webaddress
|
||||
updates, info and Q/A lists. At this file's origin, the webaddress
|
||||
was: http://www.uni-mainz.de/~langm000/linux.html
|
||||
Q: My SCSI-adapter is not recognized by the driver, what can I do?
|
||||
A: Just force it to be recognized by kernel parameters. See section 5.1.
|
||||
|
@ -1248,7 +1248,7 @@
|
|||
--------------------
|
||||
The address of the IBM SCSI-subsystem supporting WWW-page is:
|
||||
|
||||
http://www.uni-mainz.de/~langm000/linux.html
|
||||
http://www.staff.uni-mainz.de/mlang/linux.html
|
||||
|
||||
Here you can find info about the background of this driver, patches,
|
||||
troubleshooting support, news and a bugreport form. Please check that
|
||||
|
|
|
@ -28,8 +28,8 @@ SUPPORTED CAMERAS:
|
|||
Xirlink "C-It" camera, also known as "IBM PC Camera".
|
||||
The device uses proprietary ASIC (and compression method);
|
||||
it is manufactured by Xirlink. See http://www.xirlink.com/
|
||||
http://www.ibmpccamera.com or http://www.c-itnow.com/ for
|
||||
details and pictures.
|
||||
(renamed to http://www.veo.com), http://www.ibmpccamera.com,
|
||||
or http://www.c-itnow.com/ for details and pictures.
|
||||
|
||||
This very chipset ("X Chip", as marked at the factory)
|
||||
is used in several other cameras, and they are supported
|
||||
|
|
|
@ -22,8 +22,8 @@ WHAT YOU NEED:
|
|||
http://www.ovt.com/omniusbp.html
|
||||
|
||||
- A Video4Linux compatible frame grabber program (I recommend vidcat and xawtv)
|
||||
vidcat is part of the w3cam package: http://www.hdk-berlin.de/~rasca/w3cam/
|
||||
xawtv is available at: http://www.in-berlin.de/User/kraxel/xawtv.html
|
||||
vidcat is part of the w3cam package: http://mpx.freeshell.net/
|
||||
xawtv is available at: http://linux.bytesex.org/xawtv/
|
||||
|
||||
HOW TO USE IT:
|
||||
|
||||
|
|
|
@ -46,9 +46,9 @@ Contact information:
|
|||
--------------------
|
||||
|
||||
The main page for the project is hosted at sourceforge.net in the following
|
||||
address: http://rio500.sourceforge.net You can also go to the sourceforge
|
||||
project page at: http://sourceforge.net/project/?group_id=1944 There is
|
||||
also a mailing list: rio500-users@lists.sourceforge.net
|
||||
URL: <http://rio500.sourceforge.net>. You can also go to the project's
|
||||
sourceforge home page at: <http://sourceforge.net/projects/rio500/>.
|
||||
There is also a mailing list: rio500-users@lists.sourceforge.net
|
||||
|
||||
Authors:
|
||||
-------
|
||||
|
|
|
@ -76,8 +76,11 @@ activates the GRAB bit. A few ms later the VSYNC (re-)rises and
|
|||
the zoran starts to work on a new and freshly broadcasted frame....
|
||||
|
||||
For pointers I used the specs of both chips. Below are the URLs:
|
||||
http://www.zoran.com/ftp/download/devices/pci/ZR36120/36120data.pdf
|
||||
http://www-us.semiconductor.philips.com/acrobat/datasheets/SAA_7110_A_1.pdf
|
||||
http://www.zoran.com/ftp/download/devices/pci/ZR36120/36120data.pdf
|
||||
http://www-us.semiconductor.philips.com/acrobat/datasheets/SAA_7110_A_1.pdf
|
||||
Some alternatives for the Philips SAA 7110 datasheet are:
|
||||
http://www.datasheetcatalog.com/datasheets_pdf/S/A/A/7/SAA7110.shtml
|
||||
http://www.datasheetarchive.com/search.php?search=SAA7110&sType=part
|
||||
|
||||
The documentation has very little on absolute numbers or timings
|
||||
needed for the various modes/resolutions, but there are other
|
||||
|
|
25
MAINTAINERS
25
MAINTAINERS
|
@ -58,7 +58,7 @@ P: Person
|
|||
M: Mail patches to
|
||||
L: Mailing list that is relevant to this area
|
||||
W: Web-page with status/info
|
||||
T: SCM tree type and URL. Type is one of: git, hg, quilt.
|
||||
T: SCM tree type and location. Type is one of: git, hg, quilt.
|
||||
S: Status, one of the following:
|
||||
|
||||
Supported: Someone is actually paid to look after this.
|
||||
|
@ -227,6 +227,7 @@ AGPGART DRIVER
|
|||
P: Dave Jones
|
||||
M: davej@codemonkey.org.uk
|
||||
W: http://www.codemonkey.org.uk/projects/agp/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/davej/agpgart.git
|
||||
S: Maintained
|
||||
|
||||
AHA152X SCSI DRIVER
|
||||
|
@ -384,6 +385,7 @@ P: David Woodhouse
|
|||
M: dwmw2@infradead.org
|
||||
L: linux-audit@redhat.com
|
||||
W: http://people.redhat.com/sgrubb/audit/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/dwmw2/audit-2.6.git
|
||||
S: Maintained
|
||||
|
||||
AX.25 NETWORK LAYER
|
||||
|
@ -432,6 +434,7 @@ L: bluez-devel@lists.sf.net
|
|||
W: http://bluez.sf.net
|
||||
W: http://www.bluez.org
|
||||
W: http://www.holtmann.org/linux/bluetooth/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/holtmann/bluetooth-2.6.git
|
||||
S: Maintained
|
||||
|
||||
BLUETOOTH RFCOMM LAYER
|
||||
|
@ -547,6 +550,7 @@ P: Steve French
|
|||
M: sfrench@samba.org
|
||||
L: samba-technical@lists.samba.org
|
||||
W: http://us1.samba.org/samba/Linux_CIFS_client.html
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/sfrench/cifs-2.6.git
|
||||
S: Supported
|
||||
|
||||
CIRRUS LOGIC GENERIC FBDEV DRIVER
|
||||
|
@ -608,6 +612,7 @@ P: Dave Jones
|
|||
M: davej@codemonkey.org.uk
|
||||
L: cpufreq@lists.linux.org.uk
|
||||
W: http://www.codemonkey.org.uk/projects/cpufreq/
|
||||
T: git kernel.org/pub/scm/linux/kernel/davej/cpufreq.git
|
||||
S: Maintained
|
||||
|
||||
CPUID/MSR DRIVER
|
||||
|
@ -641,6 +646,7 @@ M: herbert@gondor.apana.org.au
|
|||
P: David S. Miller
|
||||
M: davem@davemloft.net
|
||||
L: linux-crypto@vger.kernel.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/herbert/crypto-2.6.git
|
||||
S: Maintained
|
||||
|
||||
CYBERPRO FB DRIVER
|
||||
|
@ -1185,6 +1191,7 @@ P: Bartlomiej Zolnierkiewicz
|
|||
M: B.Zolnierkiewicz@elka.pw.edu.pl
|
||||
L: linux-kernel@vger.kernel.org
|
||||
L: linux-ide@vger.kernel.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/bart/ide-2.6.git
|
||||
S: Maintained
|
||||
|
||||
IDE/ATAPI CDROM DRIVER
|
||||
|
@ -1279,6 +1286,7 @@ P: Vojtech Pavlik
|
|||
M: vojtech@suse.cz
|
||||
L: linux-input@atrey.karlin.mff.cuni.cz
|
||||
L: linux-joystick@atrey.karlin.mff.cuni.cz
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/dtor/input.git
|
||||
S: Maintained
|
||||
|
||||
INOTIFY
|
||||
|
@ -1392,6 +1400,7 @@ P: Kai Germaschewski
|
|||
M: kai.germaschewski@gmx.de
|
||||
L: isdn4linux@listserv.isdn4linux.de
|
||||
W: http://www.isdn4linux.de
|
||||
T: git kernel.org:/pub/scm/linux/kernel/kkeil/isdn-2.6.git
|
||||
S: Maintained
|
||||
|
||||
ISDN SUBSYSTEM (Eicon active card driver)
|
||||
|
@ -1420,6 +1429,7 @@ P: Dave Kleikamp
|
|||
M: shaggy@austin.ibm.com
|
||||
L: jfs-discussion@lists.sourceforge.net
|
||||
W: http://jfs.sourceforge.net/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/shaggy/jfs-2.6.git
|
||||
S: Supported
|
||||
|
||||
KCONFIG
|
||||
|
@ -1534,6 +1544,7 @@ P: Paul Mackerras
|
|||
M: paulus@samba.org
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/paulus/powerpc.git
|
||||
S: Supported
|
||||
|
||||
LINUX FOR POWER MACINTOSH
|
||||
|
@ -1601,6 +1612,7 @@ P: Chris Wright
|
|||
M: chrisw@osdl.org
|
||||
L: linux-security-module@wirex.com
|
||||
W: http://lsm.immunix.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/chrisw/lsm-2.6.git
|
||||
S: Supported
|
||||
|
||||
LM83 HARDWARE MONITOR DRIVER
|
||||
|
@ -1695,6 +1707,7 @@ P: David Woodhouse
|
|||
M: dwmw2@infradead.org
|
||||
W: http://www.linux-mtd.infradead.org/
|
||||
L: linux-mtd@lists.infradead.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/tglx/mtd-2.6.git
|
||||
S: Maintained
|
||||
|
||||
MICROTEK X6 SCANNER
|
||||
|
@ -1815,6 +1828,7 @@ M: yoshfuji@linux-ipv6.org
|
|||
P: Patrick McHardy
|
||||
M: kaber@coreworks.de
|
||||
L: netdev@vger.kernel.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/davem/net-2.6.git
|
||||
S: Maintained
|
||||
|
||||
IPVS
|
||||
|
@ -1866,6 +1880,7 @@ M: aia21@cantab.net
|
|||
L: linux-ntfs-dev@lists.sourceforge.net
|
||||
L: linux-kernel@vger.kernel.org
|
||||
W: http://linux-ntfs.sf.net/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/aia21/ntfs-2.6.git
|
||||
S: Maintained
|
||||
|
||||
NVIDIA (RIVA) FRAMEBUFFER DRIVER
|
||||
|
@ -2389,6 +2404,7 @@ P: Anton Blanchard
|
|||
M: anton@samba.org
|
||||
L: sparclinux@vger.kernel.org
|
||||
L: ultralinux@vger.kernel.org
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/davem/sparc-2.6.git
|
||||
S: Maintained
|
||||
|
||||
SHARP LH SUPPORT (LH7952X & LH7A40X)
|
||||
|
@ -2527,6 +2543,7 @@ P: Adrian Bunk
|
|||
M: trivial@kernel.org
|
||||
L: linux-kernel@vger.kernel.org
|
||||
W: http://www.kernel.org/pub/linux/kernel/people/bunk/trivial/
|
||||
T: git kernel.org:/pub/scm/linux/kernel/git/bunk/trivial.git
|
||||
S: Maintained
|
||||
|
||||
TMS380 TOKEN-RING NETWORK DRIVER
|
||||
|
@ -2860,6 +2877,7 @@ P: Latchesar Ionkov
|
|||
M: lucho@ionkov.net
|
||||
L: v9fs-developer@lists.sourceforge.net
|
||||
W: http://v9fs.sf.net
|
||||
T: git kernel.org:/pub/scm/linux/kernel/ericvh/v9fs-devel.git
|
||||
S: Maintained
|
||||
|
||||
VIDEO FOR LINUX
|
||||
|
@ -2907,6 +2925,11 @@ M: zaga@fly.cc.fer.hr
|
|||
L: linux-scsi@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
WISTRON LAPTOP BUTTON DRIVER
|
||||
P: Miloslav Trmac
|
||||
M: mitr@volny.cz
|
||||
S: Maintained
|
||||
|
||||
WL3501 WIRELESS PCMCIA CARD DRIVER
|
||||
P: Arnaldo Carvalho de Melo
|
||||
M: acme@conectiva.com.br
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 15
|
||||
EXTRAVERSION =-rc2
|
||||
EXTRAVERSION =-rc3
|
||||
NAME=Affluent Albatross
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc3
|
||||
# Sun Oct 9 15:46:42 2005
|
||||
# Linux kernel version: 2.6.15-rc2
|
||||
# Mon Nov 28 10:30:09 2005
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -63,6 +63,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
|||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_DEFAULT_AS=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
|
||||
#
|
||||
# System Type
|
||||
#
|
||||
|
@ -85,6 +102,7 @@ CONFIG_ARCH_PXA=y
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
|
@ -98,12 +116,14 @@ CONFIG_ARCH_PXA=y
|
|||
CONFIG_PXA_SHARPSL=y
|
||||
CONFIG_PXA_SHARPSL_25x=y
|
||||
# CONFIG_PXA_SHARPSL_27x is not set
|
||||
# CONFIG_MACH_POODLE is not set
|
||||
CONFIG_MACH_POODLE=y
|
||||
CONFIG_MACH_CORGI=y
|
||||
CONFIG_MACH_SHEPHERD=y
|
||||
CONFIG_MACH_HUSKY=y
|
||||
CONFIG_MACH_TOSA=y
|
||||
CONFIG_PXA25x=y
|
||||
CONFIG_PXA_SHARP_C7xx=y
|
||||
CONFIG_PXA_SSP=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
|
@ -155,6 +175,7 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -235,6 +256,10 @@ CONFIG_INET6_TUNNEL=m
|
|||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
|
@ -356,6 +381,10 @@ CONFIG_IP6_NF_RAW=m
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
|
||||
|
@ -413,6 +442,7 @@ CONFIG_IRCOMM=m
|
|||
# CONFIG_SMC_IRCC_FIR is not set
|
||||
# CONFIG_ALI_FIR is not set
|
||||
# CONFIG_VIA_FIR is not set
|
||||
CONFIG_PXA_FICP=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_L2CAP=m
|
||||
CONFIG_BT_SCO=m
|
||||
|
@ -431,7 +461,6 @@ CONFIG_BT_HCIUSB=m
|
|||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_BCSP_TXCRC=y
|
||||
CONFIG_BT_HCIBCM203X=m
|
||||
CONFIG_BT_HCIBPA10X=m
|
||||
CONFIG_BT_HCIBFUSB=m
|
||||
|
@ -458,6 +487,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -477,6 +511,7 @@ CONFIG_MTD_BLOCK=y
|
|||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
|
@ -531,6 +566,11 @@ CONFIG_MTD_NAND_IDS=y
|
|||
CONFIG_MTD_NAND_SHARPSL=y
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
|
@ -551,14 +591,6 @@ CONFIG_BLK_DEV_LOOP=y
|
|||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
|
@ -625,6 +657,7 @@ CONFIG_SCSI_MULTI_LUN=y
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
|
@ -748,6 +781,7 @@ CONFIG_PPP_ASYNC=m
|
|||
# CONFIG_PPP_SYNC_TTY is not set
|
||||
# CONFIG_PPP_DEFLATE is not set
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
# CONFIG_PPPOE is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
|
@ -850,11 +884,15 @@ CONFIG_UNIX98_PTYS=y
|
|||
# PCMCIA character devices
|
||||
#
|
||||
# CONFIG_SYNCLINK_CS is not set
|
||||
# CONFIG_CARDMAN_4000 is not set
|
||||
# CONFIG_CARDMAN_4040 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -889,6 +927,7 @@ CONFIG_I2C_PXA=y
|
|||
# CONFIG_SENSORS_PCF8591 is not set
|
||||
# CONFIG_SENSORS_RTC8564 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_RTC_X1205_I2C is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
|
@ -957,7 +996,10 @@ CONFIG_VIDEO_DEV=m
|
|||
# CONFIG_VIDEO_SAA5246A is not set
|
||||
# CONFIG_VIDEO_SAA5249 is not set
|
||||
# CONFIG_TUNER_3036 is not set
|
||||
# CONFIG_VIDEO_EM28XX is not set
|
||||
# CONFIG_VIDEO_OVCAMCHIP is not set
|
||||
# CONFIG_VIDEO_AUDIO_DECODER is not set
|
||||
# CONFIG_VIDEO_DECODER is not set
|
||||
|
||||
#
|
||||
# Radio Adapters
|
||||
|
@ -976,13 +1018,12 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_PXA is not set
|
||||
CONFIG_FB_W100=y
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -991,6 +1032,7 @@ CONFIG_FB_W100=y
|
|||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
@ -1087,15 +1129,15 @@ CONFIG_USB_SL811_CS=m
|
|||
# USB Device Class drivers
|
||||
#
|
||||
# CONFIG_OBSOLETE_OSS_USB_DRIVER is not set
|
||||
|
||||
#
|
||||
# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
|
||||
#
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_PRINTER=m
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
CONFIG_USB_STORAGE=m
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
|
@ -1107,7 +1149,6 @@ CONFIG_USB_STORAGE=m
|
|||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
|
@ -1185,6 +1226,7 @@ CONFIG_USB_MON=y
|
|||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
|
@ -1340,6 +1382,7 @@ CONFIG_RAMFS=y
|
|||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
CONFIG_JFFS2_SUMMARY=y
|
||||
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -1466,7 +1509,9 @@ CONFIG_DETECT_SOFTLOCKUP=y
|
|||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.14-rc3
|
||||
# Sun Oct 9 17:11:19 2005
|
||||
# Linux kernel version: 2.6.15-rc2
|
||||
# Mon Nov 28 10:26:52 2005
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_MMU=y
|
||||
|
@ -63,6 +63,23 @@ CONFIG_OBSOLETE_MODPARM=y
|
|||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_KMOD=y
|
||||
|
||||
#
|
||||
# Block layer
|
||||
#
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_DEFAULT_AS=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
# CONFIG_DEFAULT_CFQ is not set
|
||||
# CONFIG_DEFAULT_NOOP is not set
|
||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
||||
|
||||
#
|
||||
# System Type
|
||||
#
|
||||
|
@ -85,6 +102,7 @@ CONFIG_ARCH_PXA=y
|
|||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
|
@ -98,10 +116,13 @@ CONFIG_ARCH_PXA=y
|
|||
CONFIG_PXA_SHARPSL=y
|
||||
# CONFIG_PXA_SHARPSL_25x is not set
|
||||
CONFIG_PXA_SHARPSL_27x=y
|
||||
CONFIG_MACH_AKITA=y
|
||||
CONFIG_MACH_SPITZ=y
|
||||
CONFIG_MACH_BORZOI=y
|
||||
CONFIG_PXA27x=y
|
||||
CONFIG_IWMMXT=y
|
||||
CONFIG_PXA_SHARP_Cxx00=y
|
||||
CONFIG_PXA_SSP=y
|
||||
|
||||
#
|
||||
# Processor Type
|
||||
|
@ -153,6 +174,7 @@ CONFIG_FLATMEM_MANUAL=y
|
|||
CONFIG_FLATMEM=y
|
||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||
# CONFIG_SPARSEMEM_STATIC is not set
|
||||
CONFIG_SPLIT_PTLOCK_CPUS=4096
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
|
||||
#
|
||||
|
@ -233,6 +255,10 @@ CONFIG_INET6_TUNNEL=m
|
|||
CONFIG_IPV6_TUNNEL=m
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
#
|
||||
# Core Netfilter Configuration
|
||||
#
|
||||
# CONFIG_NETFILTER_NETLINK is not set
|
||||
|
||||
#
|
||||
|
@ -354,6 +380,10 @@ CONFIG_IP6_NF_RAW=m
|
|||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
CONFIG_NET_CLS_ROUTE=y
|
||||
|
||||
|
@ -411,6 +441,7 @@ CONFIG_IRCOMM=m
|
|||
# CONFIG_SMC_IRCC_FIR is not set
|
||||
# CONFIG_ALI_FIR is not set
|
||||
# CONFIG_VIA_FIR is not set
|
||||
CONFIG_PXA_FICP=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_L2CAP=m
|
||||
CONFIG_BT_SCO=m
|
||||
|
@ -429,7 +460,6 @@ CONFIG_BT_HCIUSB=m
|
|||
CONFIG_BT_HCIUART=m
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_BCSP=y
|
||||
CONFIG_BT_HCIUART_BCSP_TXCRC=y
|
||||
CONFIG_BT_HCIBCM203X=m
|
||||
CONFIG_BT_HCIBPA10X=m
|
||||
CONFIG_BT_HCIBFUSB=m
|
||||
|
@ -456,6 +486,11 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
CONFIG_FW_LOADER=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Connector - unified userspace <-> kernelspace linker
|
||||
#
|
||||
# CONFIG_CONNECTOR is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
|
@ -475,6 +510,7 @@ CONFIG_MTD_BLOCK=y
|
|||
# CONFIG_FTL is not set
|
||||
# CONFIG_NFTL is not set
|
||||
# CONFIG_INFTL is not set
|
||||
# CONFIG_RFD_FTL is not set
|
||||
|
||||
#
|
||||
# RAM/ROM/Flash chip drivers
|
||||
|
@ -529,6 +565,11 @@ CONFIG_MTD_NAND_IDS=y
|
|||
CONFIG_MTD_NAND_SHARPSL=y
|
||||
# CONFIG_MTD_NAND_NANDSIM is not set
|
||||
|
||||
#
|
||||
# OneNAND Flash Device Drivers
|
||||
#
|
||||
# CONFIG_MTD_ONENAND is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
|
@ -549,14 +590,6 @@ CONFIG_BLK_DEV_LOOP=y
|
|||
# CONFIG_BLK_DEV_RAM is not set
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
|
||||
#
|
||||
# IO Schedulers
|
||||
#
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
|
||||
#
|
||||
|
@ -623,6 +656,7 @@ CONFIG_SCSI_MULTI_LUN=y
|
|||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_ISCSI_TCP is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
|
@ -746,6 +780,7 @@ CONFIG_PPP_ASYNC=m
|
|||
# CONFIG_PPP_SYNC_TTY is not set
|
||||
# CONFIG_PPP_DEFLATE is not set
|
||||
CONFIG_PPP_BSDCOMP=m
|
||||
# CONFIG_PPP_MPPE is not set
|
||||
# CONFIG_PPPOE is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
|
@ -771,6 +806,7 @@ CONFIG_INPUT=y
|
|||
# CONFIG_INPUT_TSDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
# CONFIG_INPUT_POWER is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
|
@ -848,11 +884,15 @@ CONFIG_UNIX98_PTYS=y
|
|||
# PCMCIA character devices
|
||||
#
|
||||
# CONFIG_SYNCLINK_CS is not set
|
||||
# CONFIG_CARDMAN_4000 is not set
|
||||
# CONFIG_CARDMAN_4040 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# TPM devices
|
||||
#
|
||||
# CONFIG_TCG_TPM is not set
|
||||
# CONFIG_TELCLOCK is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
|
@ -891,14 +931,13 @@ CONFIG_FB=y
|
|||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
CONFIG_FB_SOFT_CURSOR=y
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
CONFIG_FB_PXA=y
|
||||
# CONFIG_FB_W100 is not set
|
||||
# CONFIG_FB_PXA_PARAMETERS is not set
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
CONFIG_FB_PXA=y
|
||||
# CONFIG_FB_PXA_PARAMETERS is not set
|
||||
# CONFIG_FB_W100 is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
|
||||
#
|
||||
|
@ -907,6 +946,7 @@ CONFIG_FB_PXA=y
|
|||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FONTS=y
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
|
@ -965,15 +1005,15 @@ CONFIG_USB_SL811_CS=m
|
|||
#
|
||||
# USB Device Class drivers
|
||||
#
|
||||
|
||||
#
|
||||
# USB Bluetooth TTY can only be used with disabled Bluetooth subsystem
|
||||
#
|
||||
CONFIG_USB_ACM=m
|
||||
CONFIG_USB_PRINTER=m
|
||||
|
||||
#
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
|
||||
# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
|
||||
#
|
||||
|
||||
#
|
||||
# may also be needed; see USB_STORAGE Help for more information
|
||||
#
|
||||
CONFIG_USB_STORAGE=m
|
||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
||||
|
@ -985,7 +1025,6 @@ CONFIG_USB_STORAGE=m
|
|||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
||||
|
||||
#
|
||||
# USB Input Devices
|
||||
|
@ -1058,6 +1097,7 @@ CONFIG_USB_MON=y
|
|||
CONFIG_USB_SERIAL=m
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
# CONFIG_USB_SERIAL_AIRPRIME is not set
|
||||
# CONFIG_USB_SERIAL_ANYDATA is not set
|
||||
CONFIG_USB_SERIAL_BELKIN=m
|
||||
# CONFIG_USB_SERIAL_WHITEHEAT is not set
|
||||
CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
|
||||
|
@ -1218,6 +1258,7 @@ CONFIG_RAMFS=y
|
|||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_JFFS2_FS_DEBUG=0
|
||||
CONFIG_JFFS2_FS_WRITEBUFFER=y
|
||||
CONFIG_JFFS2_SUMMARY=y
|
||||
CONFIG_JFFS2_COMPRESSION_OPTIONS=y
|
||||
CONFIG_JFFS2_ZLIB=y
|
||||
CONFIG_JFFS2_RTIME=y
|
||||
|
@ -1344,7 +1385,9 @@ CONFIG_DETECT_SOFTLOCKUP=y
|
|||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
# CONFIG_DEBUG_INFO is not set
|
||||
# CONFIG_DEBUG_FS is not set
|
||||
# CONFIG_DEBUG_VM is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
# CONFIG_DEBUG_WAITQ is not set
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
|
||||
#include <asm/assembler.h>
|
||||
#include <asm/domain.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/procinfo.h>
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/asm-offsets.h>
|
||||
|
@ -83,7 +82,7 @@ ENTRY(stext)
|
|||
@ and irqs disabled
|
||||
bl __lookup_processor_type @ r5=procinfo r9=cpuid
|
||||
movs r10, r5 @ invalid processor (r5=0)?
|
||||
beq __error_p @ yes, error 'p'
|
||||
beq __error_p @ yes, error 'p'
|
||||
bl __lookup_machine_type @ r5=machinfo
|
||||
movs r8, r5 @ invalid machine (r5=0)?
|
||||
beq __error_a @ yes, error 'a'
|
||||
|
@ -343,16 +342,12 @@ __create_page_tables:
|
|||
bne 1b
|
||||
#if defined(CONFIG_ARCH_NETWINDER) || defined(CONFIG_ARCH_CATS)
|
||||
/*
|
||||
* If we're using the NetWinder, we need to map in
|
||||
* the 16550-type serial port for the debug messages
|
||||
* If we're using the NetWinder or CATS, we also need to map
|
||||
* in the 16550-type serial port for the debug messages
|
||||
*/
|
||||
teq r1, #MACH_TYPE_NETWINDER
|
||||
teqne r1, #MACH_TYPE_CATS
|
||||
bne 1f
|
||||
add r0, r4, #0xff000000 >> 18
|
||||
orr r3, r7, #0x7c000000
|
||||
str r3, [r0]
|
||||
1:
|
||||
#endif
|
||||
#ifdef CONFIG_ARCH_RPC
|
||||
/*
|
||||
|
|
|
@ -260,7 +260,7 @@ static void __init clps7500_init_irq(void)
|
|||
|
||||
static struct map_desc cl7500_io_desc[] __initdata = {
|
||||
{ /* IO space */
|
||||
.virtual = IO_BASE,
|
||||
.virtual = (unsigned long)IO_BASE,
|
||||
.pfn = __phys_to_pfn(IO_START),
|
||||
.length = IO_SIZE,
|
||||
.type = MT_DEVICE
|
||||
|
|
|
@ -44,6 +44,7 @@ config PXA_SHARPSL_25x
|
|||
config PXA_SHARPSL_27x
|
||||
bool "Sharp PXA270 models (SL-Cxx00)"
|
||||
select PXA27x
|
||||
select IWMMXT
|
||||
|
||||
endchoice
|
||||
|
||||
|
@ -60,7 +61,6 @@ config MACH_CORGI
|
|||
bool "Enable Sharp SL-C700 (Corgi) Support"
|
||||
depends PXA_SHARPSL_25x
|
||||
select PXA_SHARP_C7xx
|
||||
select PXA_SSP
|
||||
|
||||
config MACH_SHEPHERD
|
||||
bool "Enable Sharp SL-C750 (Shepherd) Support"
|
||||
|
@ -90,7 +90,7 @@ config MACH_BORZOI
|
|||
|
||||
config MACH_TOSA
|
||||
bool "Enable Sharp SL-6000x (Tosa) Support"
|
||||
depends PXA_SHARPSL
|
||||
depends PXA_SHARPSL_25x
|
||||
|
||||
config PXA25x
|
||||
bool
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/leds.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/hardware/amba.h>
|
||||
#include <asm/hardware/amba_clcd.h>
|
||||
#include <asm/hardware/arm_timer.h>
|
||||
|
|
|
@ -293,7 +293,8 @@ static void __init get_assabet_scr(void)
|
|||
GPDR |= 0x3fc; /* Configure GPIO 9:2 as outputs */
|
||||
GPSR = 0x3fc; /* Write 0xFF to GPIO 9:2 */
|
||||
GPDR &= ~(0x3fc); /* Configure GPIO 9:2 as inputs */
|
||||
for(i = 100; i--; scr = GPLR); /* Read GPIO 9:2 */
|
||||
for(i = 100; i--; ) /* Read GPIO 9:2 */
|
||||
scr = GPLR;
|
||||
GPDR |= 0x3fc; /* restore correct pin direction */
|
||||
scr &= 0x3fc; /* save as system configuration byte. */
|
||||
SCR_value = scr;
|
||||
|
|
|
@ -66,6 +66,7 @@ struct vm_region {
|
|||
unsigned long vm_start;
|
||||
unsigned long vm_end;
|
||||
struct page *vm_pages;
|
||||
int vm_active;
|
||||
};
|
||||
|
||||
static struct vm_region consistent_head = {
|
||||
|
@ -104,6 +105,7 @@ vm_region_alloc(struct vm_region *head, size_t size, gfp_t gfp)
|
|||
list_add_tail(&new->vm_list, &c->vm_list);
|
||||
new->vm_start = addr;
|
||||
new->vm_end = addr + size;
|
||||
new->vm_active = 1;
|
||||
|
||||
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||
return new;
|
||||
|
@ -120,7 +122,7 @@ static struct vm_region *vm_region_find(struct vm_region *head, unsigned long ad
|
|||
struct vm_region *c;
|
||||
|
||||
list_for_each_entry(c, &head->vm_list, vm_list) {
|
||||
if (c->vm_start == addr)
|
||||
if (c->vm_active && c->vm_start == addr)
|
||||
goto out;
|
||||
}
|
||||
c = NULL;
|
||||
|
@ -319,6 +321,7 @@ EXPORT_SYMBOL(dma_mmap_writecombine);
|
|||
|
||||
/*
|
||||
* free a page as defined by the above mapping.
|
||||
* Must not be called with IRQs disabled.
|
||||
*/
|
||||
void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr_t handle)
|
||||
{
|
||||
|
@ -326,14 +329,18 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr
|
|||
unsigned long flags, addr;
|
||||
pte_t *ptep;
|
||||
|
||||
WARN_ON(irqs_disabled());
|
||||
|
||||
size = PAGE_ALIGN(size);
|
||||
|
||||
spin_lock_irqsave(&consistent_lock, flags);
|
||||
|
||||
c = vm_region_find(&consistent_head, (unsigned long)cpu_addr);
|
||||
if (!c)
|
||||
goto no_area;
|
||||
|
||||
c->vm_active = 0;
|
||||
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||
|
||||
if ((c->vm_end - c->vm_start) != size) {
|
||||
printk(KERN_ERR "%s: freeing wrong coherent size (%ld != %d)\n",
|
||||
__func__, c->vm_end - c->vm_start, size);
|
||||
|
@ -372,8 +379,8 @@ void dma_free_coherent(struct device *dev, size_t size, void *cpu_addr, dma_addr
|
|||
|
||||
flush_tlb_kernel_range(c->vm_start, c->vm_end);
|
||||
|
||||
spin_lock_irqsave(&consistent_lock, flags);
|
||||
list_del(&c->vm_list);
|
||||
|
||||
spin_unlock_irqrestore(&consistent_lock, flags);
|
||||
|
||||
kfree(c);
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
#
|
||||
# http://www.arm.linux.org.uk/developer/machines/?action=new
|
||||
#
|
||||
# Last update: Fri Nov 11 21:55:04 2005
|
||||
# Last update: Fri Nov 25 14:43:04 2005
|
||||
#
|
||||
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
|
||||
#
|
||||
|
@ -857,12 +857,12 @@ osiris MACH_OSIRIS OSIRIS 842
|
|||
maestro MACH_MAESTRO MAESTRO 843
|
||||
tunge2 MACH_TUNGE2 TUNGE2 844
|
||||
ixbbm MACH_IXBBM IXBBM 845
|
||||
mx27 MACH_MX27 MX27 846
|
||||
mx27ads MACH_MX27 MX27 846
|
||||
ax8004 MACH_AX8004 AX8004 847
|
||||
at91sam9261ek MACH_AT91SAM9261EK AT91SAM9261EK 848
|
||||
loft MACH_LOFT LOFT 849
|
||||
magpie MACH_MAGPIE MAGPIE 850
|
||||
mx21 MACH_MX21 MX21 851
|
||||
mx21ads MACH_MX21 MX21 851
|
||||
mb87m3400 MACH_MB87M3400 MB87M3400 852
|
||||
mguard_delta MACH_MGUARD_DELTA MGUARD_DELTA 853
|
||||
davinci_dvdp MACH_DAVINCI_DVDP DAVINCI_DVDP 854
|
||||
|
@ -897,10 +897,16 @@ omi_board MACH_OMI_BOARD OMI_BOARD 882
|
|||
mx21civ MACH_MX21CIV MX21CIV 883
|
||||
mahi_cdac MACH_MAHI_CDAC MAHI_CDAC 884
|
||||
xscale_palmtx MACH_XSCALE_PALMTX XSCALE_PALMTX 885
|
||||
arch_s3c2413 MACH_ARCH_S3C2413 ARCH_S3C2413 886
|
||||
s3c2413 MACH_S3C2413 S3C2413 887
|
||||
samsys_ep0 MACH_SAMSYS_EP0 SAMSYS_EP0 888
|
||||
wg302v1 MACH_WG302V1 WG302V1 889
|
||||
wg302v2 MACH_WG302V2 WG302V2 890
|
||||
eb42x MACH_EB42X EB42X 891
|
||||
iq331es MACH_IQ331ES IQ331ES 892
|
||||
cosydsp MACH_COSYDSP COSYDSP 893
|
||||
uplat7d MACH_UPLAT7D UPLAT7D 894
|
||||
ptdavinci MACH_PTDAVINCI PTDAVINCI 895
|
||||
mbus MACH_MBUS MBUS 896
|
||||
nadia2vb MACH_NADIA2VB NADIA2VB 897
|
||||
r1000 MACH_R1000 R1000 898
|
||||
hw90250 MACH_HW90250 HW90250 899
|
||||
|
|
|
@ -20,7 +20,7 @@ struct sem_waiter {
|
|||
struct task_struct *task;
|
||||
};
|
||||
|
||||
#if SEM_DEBUG
|
||||
#if SEMAPHORE_DEBUG
|
||||
void semtrace(struct semaphore *sem, const char *str)
|
||||
{
|
||||
if (sem->debug)
|
||||
|
|
|
@ -60,7 +60,7 @@ void __init pcibios_fixup_irqs(void)
|
|||
}
|
||||
}
|
||||
|
||||
void __init pcibios_penalize_isa_irq(int irq, int active)
|
||||
void __init pcibios_penalize_isa_irq(int irq)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
|
@ -108,7 +108,7 @@ void __init paging_init(void)
|
|||
|
||||
memset((void *) empty_zero_page, 0, PAGE_SIZE);
|
||||
|
||||
#if CONFIG_HIGHMEM
|
||||
#ifdef CONFIG_HIGHMEM
|
||||
if (num_physpages - num_mappedpages) {
|
||||
pgd_t *pge;
|
||||
pud_t *pue;
|
||||
|
|
|
@ -85,7 +85,7 @@ static inline void pgd_list_add(pgd_t *pgd)
|
|||
struct page *page = virt_to_page(pgd);
|
||||
page->index = (unsigned long) pgd_list;
|
||||
if (pgd_list)
|
||||
pgd_list->private = (unsigned long) &page->index;
|
||||
set_page_private(pgd_list, (unsigned long) &page->index);
|
||||
pgd_list = page;
|
||||
set_page_private(page, (unsigned long)&pgd_list);
|
||||
}
|
||||
|
@ -94,10 +94,10 @@ static inline void pgd_list_del(pgd_t *pgd)
|
|||
{
|
||||
struct page *next, **pprev, *page = virt_to_page(pgd);
|
||||
next = (struct page *) page->index;
|
||||
pprev = (struct page **)page_private(page);
|
||||
pprev = (struct page **) page_private(page);
|
||||
*pprev = next;
|
||||
if (next)
|
||||
next->private = (unsigned long) pprev;
|
||||
set_page_private(next, (unsigned long) pprev);
|
||||
}
|
||||
|
||||
void pgd_ctor(void *pgd, kmem_cache_t *cache, unsigned long unused)
|
||||
|
|
|
@ -248,9 +248,7 @@ acpi_parse_lapic(acpi_table_entry_header * header, const unsigned long end)
|
|||
|
||||
acpi_table_print_madt_entry(header);
|
||||
|
||||
/* no utility in registering a disabled processor */
|
||||
if (processor->flags.enabled == 0)
|
||||
return 0;
|
||||
/* Register even disabled CPUs for cpu hotplug */
|
||||
|
||||
x86_acpiid_to_apicid[processor->acpi_id] = processor->id;
|
||||
|
||||
|
|
|
@ -220,8 +220,9 @@ static void __devinit MP_processor_info (struct mpc_config_processor *m)
|
|||
num_processors++;
|
||||
|
||||
if ((num_processors > 8) &&
|
||||
APIC_XAPIC(ver) &&
|
||||
(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL))
|
||||
((APIC_XAPIC(ver) &&
|
||||
(boot_cpu_data.x86_vendor == X86_VENDOR_INTEL)) ||
|
||||
(boot_cpu_data.x86_vendor == X86_VENDOR_AMD)))
|
||||
def_to_bigsmp = 1;
|
||||
else
|
||||
def_to_bigsmp = 0;
|
||||
|
|
|
@ -393,13 +393,6 @@ void flush_thread(void)
|
|||
{
|
||||
struct task_struct *tsk = current;
|
||||
|
||||
/*
|
||||
* Remove function-return probe instances associated with this task
|
||||
* and put them back on the free list. Do not insert an exit probe for
|
||||
* this function, it will be disabled by kprobe_flush_task if you do.
|
||||
*/
|
||||
kprobe_flush_task(tsk);
|
||||
|
||||
memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
|
||||
memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));
|
||||
/*
|
||||
|
|
|
@ -132,7 +132,7 @@ struct pci_bus * __devinit pcibios_scan_root(int busnum)
|
|||
}
|
||||
}
|
||||
|
||||
printk("PCI: Probing PCI hardware (bus %02x)\n", busnum);
|
||||
printk(KERN_DEBUG "PCI: Probing PCI hardware (bus %02x)\n", busnum);
|
||||
|
||||
return pci_scan_bus_parented(NULL, busnum, &pci_root_ops, NULL);
|
||||
}
|
||||
|
@ -144,7 +144,7 @@ static int __init pcibios_init(void)
|
|||
struct cpuinfo_x86 *c = &boot_cpu_data;
|
||||
|
||||
if (!raw_pci_ops) {
|
||||
printk("PCI: System does not support PCI\n");
|
||||
printk(KERN_WARNING "PCI: System does not support PCI\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -201,7 +201,7 @@ static int __init pci_sanity_check(struct pci_raw_ops *o)
|
|||
return 1;
|
||||
}
|
||||
|
||||
DBG("PCI: Sanity check failed\n");
|
||||
DBG(KERN_WARNING "PCI: Sanity check failed\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -221,6 +221,11 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
|
|||
continue;
|
||||
|
||||
r = &dev->resource[idx];
|
||||
if (!(r->flags & (IORESOURCE_IO | IORESOURCE_MEM)))
|
||||
continue;
|
||||
if ((idx == PCI_ROM_RESOURCE) &&
|
||||
(!(r->flags & IORESOURCE_ROM_ENABLE)))
|
||||
continue;
|
||||
if (!r->start && r->end) {
|
||||
printk(KERN_ERR "PCI: Device %s not available because of resource collisions\n", pci_name(dev));
|
||||
return -EINVAL;
|
||||
|
@ -230,8 +235,6 @@ int pcibios_enable_resources(struct pci_dev *dev, int mask)
|
|||
if (r->flags & IORESOURCE_MEM)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
}
|
||||
if (dev->resource[PCI_ROM_RESOURCE].start)
|
||||
cmd |= PCI_COMMAND_MEMORY;
|
||||
if (cmd != old_cmd) {
|
||||
printk("PCI: Enabling device %s (%04x -> %04x)\n", pci_name(dev), old_cmd, cmd);
|
||||
pci_write_config_word(dev, PCI_COMMAND, cmd);
|
||||
|
|
|
@ -718,13 +718,6 @@ kernel_thread_helper (int (*fn)(void *), void *arg)
|
|||
void
|
||||
flush_thread (void)
|
||||
{
|
||||
/*
|
||||
* Remove function-return probe instances associated with this task
|
||||
* and put them back on the free list. Do not insert an exit probe for
|
||||
* this function, it will be disabled by kprobe_flush_task if you do.
|
||||
*/
|
||||
kprobe_flush_task(current);
|
||||
|
||||
/* drop floating-point and debug-register state if it exists: */
|
||||
current->thread.flags &= ~(IA64_THREAD_FPH_VALID | IA64_THREAD_DBG_VALID);
|
||||
ia64_drop_fpu(current);
|
||||
|
|
|
@ -137,6 +137,7 @@ bte_result_t bte_copy(u64 src, u64 dest, u64 len, u64 mode, void *notification)
|
|||
bte = bte_if_on_node(nasid_to_try[nasid_index],bte_if_index);
|
||||
|
||||
if (bte == NULL) {
|
||||
nasid_index++;
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
@ -492,6 +492,9 @@ static struct proc_dir_entry *proc_sn2_ptc;
|
|||
|
||||
static int __init sn2_ptc_init(void)
|
||||
{
|
||||
if (!ia64_platform_is("sn2"))
|
||||
return -ENOSYS;
|
||||
|
||||
if (!(proc_sn2_ptc = create_proc_entry(PTC_BASENAME, 0444, NULL))) {
|
||||
printk(KERN_ERR "unable to create %s proc entry", PTC_BASENAME);
|
||||
return -EINVAL;
|
||||
|
|
|
@ -743,13 +743,14 @@ sn_hwperf_ioctl(struct inode *in, struct file *fp, u32 op, u64 arg)
|
|||
if ((r = sn_hwperf_enum_objects(&nobj, &objs)) == 0) {
|
||||
memset(p, 0, a.sz);
|
||||
for (i = 0; i < nobj; i++) {
|
||||
int cpuobj_index = 0;
|
||||
if (!SN_HWPERF_IS_NODE(objs + i))
|
||||
continue;
|
||||
node = sn_hwperf_obj_to_cnode(objs + i);
|
||||
for_each_online_cpu(j) {
|
||||
if (node != cpu_to_node(j))
|
||||
continue;
|
||||
cpuobj = (struct sn_hwperf_object_info *) p + j;
|
||||
cpuobj = (struct sn_hwperf_object_info *) p + cpuobj_index++;
|
||||
slice = 'a' + cpuid_to_slice(j);
|
||||
cdata = cpu_data(j);
|
||||
cpuobj->id = j;
|
||||
|
|
|
@ -36,12 +36,13 @@ static inline void *_port2addr(unsigned long port)
|
|||
return (void *)(port + NONCACHE_OFFSET);
|
||||
}
|
||||
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
#if defined(CONFIG_IDE)
|
||||
static inline void *__port2addr_ata(unsigned long port)
|
||||
{
|
||||
static int dummy_reg;
|
||||
|
||||
switch (port) {
|
||||
/* IDE0 CF */
|
||||
case 0x1f0: return (void *)0xb4002000;
|
||||
case 0x1f1: return (void *)0xb4012800;
|
||||
case 0x1f2: return (void *)0xb4012002;
|
||||
|
@ -51,6 +52,17 @@ static inline void *__port2addr_ata(unsigned long port)
|
|||
case 0x1f6: return (void *)0xb4012006;
|
||||
case 0x1f7: return (void *)0xb4012806;
|
||||
case 0x3f6: return (void *)0xb401200e;
|
||||
/* IDE1 IDE */
|
||||
case 0x170: return (void *)0xb4810000; /* Data 16bit */
|
||||
case 0x171: return (void *)0xb4810002; /* Features / Error */
|
||||
case 0x172: return (void *)0xb4810004; /* Sector count */
|
||||
case 0x173: return (void *)0xb4810006; /* Sector number */
|
||||
case 0x174: return (void *)0xb4810008; /* Cylinder low */
|
||||
case 0x175: return (void *)0xb481000a; /* Cylinder high */
|
||||
case 0x176: return (void *)0xb481000c; /* Device head */
|
||||
case 0x177: return (void *)0xb481000e; /* Command */
|
||||
case 0x376: return (void *)0xb480800c; /* Device control / Alt status */
|
||||
|
||||
default: return (void *)&dummy_reg;
|
||||
}
|
||||
}
|
||||
|
@ -108,8 +120,9 @@ unsigned char _inb(unsigned long port)
|
|||
{
|
||||
if (port >= LAN_IOSTART && port < LAN_IOEND)
|
||||
return _ne_inb(PORT2ADDR_NE(port));
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
return *(volatile unsigned char *)__port2addr_ata(port);
|
||||
}
|
||||
#endif
|
||||
|
@ -127,8 +140,9 @@ unsigned short _inw(unsigned long port)
|
|||
{
|
||||
if (port >= LAN_IOSTART && port < LAN_IOEND)
|
||||
return _ne_inw(PORT2ADDR_NE(port));
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
return *(volatile unsigned short *)__port2addr_ata(port);
|
||||
}
|
||||
#endif
|
||||
|
@ -185,8 +199,9 @@ void _outb(unsigned char b, unsigned long port)
|
|||
if (port >= LAN_IOSTART && port < LAN_IOEND)
|
||||
_ne_outb(b, PORT2ADDR_NE(port));
|
||||
else
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
*(volatile unsigned char *)__port2addr_ata(port) = b;
|
||||
} else
|
||||
#endif
|
||||
|
@ -203,8 +218,9 @@ void _outw(unsigned short w, unsigned long port)
|
|||
if (port >= LAN_IOSTART && port < LAN_IOEND)
|
||||
_ne_outw(w, PORT2ADDR_NE(port));
|
||||
else
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
*(volatile unsigned short *)__port2addr_ata(port) = w;
|
||||
} else
|
||||
#endif
|
||||
|
@ -253,8 +269,9 @@ void _insb(unsigned int port, void * addr, unsigned long count)
|
|||
{
|
||||
if (port >= LAN_IOSTART && port < LAN_IOEND)
|
||||
_ne_insb(PORT2ADDR_NE(port), addr, count);
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
unsigned char *buf = addr;
|
||||
unsigned char *portp = __port2addr_ata(port);
|
||||
while (count--)
|
||||
|
@ -289,8 +306,9 @@ void _insw(unsigned int port, void * addr, unsigned long count)
|
|||
pcc_ioread_word(9, port, (void *)addr, sizeof(unsigned short),
|
||||
count, 1);
|
||||
#endif
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
} else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
} else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
portp = __port2addr_ata(port);
|
||||
while (count--)
|
||||
*buf++ = *(volatile unsigned short *)portp;
|
||||
|
@ -321,8 +339,9 @@ void _outsb(unsigned int port, const void * addr, unsigned long count)
|
|||
portp = PORT2ADDR_NE(port);
|
||||
while (count--)
|
||||
_ne_outb(*buf++, portp);
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
} else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
} else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
portp = __port2addr_ata(port);
|
||||
while (count--)
|
||||
*(volatile unsigned char *)portp = *buf++;
|
||||
|
@ -348,8 +367,9 @@ void _outsw(unsigned int port, const void * addr, unsigned long count)
|
|||
portp = PORT2ADDR_NE(port);
|
||||
while (count--)
|
||||
*(volatile unsigned short *)portp = *buf++;
|
||||
#if defined(CONFIG_IDE) && !defined(CONFIG_M32R_CFC)
|
||||
} else if ((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) {
|
||||
#if defined(CONFIG_IDE)
|
||||
} else if ( ((port >= 0x170 && port <=0x177) || port == 0x376) ||
|
||||
((port >= 0x1f0 && port <=0x1f7) || port == 0x3f6) ){
|
||||
portp = __port2addr_ata(port);
|
||||
while (count--)
|
||||
*(volatile unsigned short *)portp = *buf++;
|
||||
|
|
|
@ -151,7 +151,7 @@ void __init init_IRQ(void)
|
|||
disable_mappi3_irq(M32R_IRQ_INT1);
|
||||
#endif /* CONFIG_USB */
|
||||
|
||||
/* ICUCR40: CFC IREQ */
|
||||
/* CFC IREQ */
|
||||
irq_desc[PLD_IRQ_CFIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFIREQ].handler = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_CFIREQ].action = 0;
|
||||
|
@ -160,7 +160,7 @@ void __init init_IRQ(void)
|
|||
disable_mappi3_irq(PLD_IRQ_CFIREQ);
|
||||
|
||||
#if defined(CONFIG_M32R_CFC)
|
||||
/* ICUCR41: CFC Insert */
|
||||
/* ICUCR41: CFC Insert & eject */
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].handler = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_INSERT].action = 0;
|
||||
|
@ -168,14 +168,16 @@ void __init init_IRQ(void)
|
|||
icu_data[PLD_IRQ_CFC_INSERT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD00;
|
||||
disable_mappi3_irq(PLD_IRQ_CFC_INSERT);
|
||||
|
||||
/* ICUCR42: CFC Eject */
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].handler = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].action = 0;
|
||||
irq_desc[PLD_IRQ_CFC_EJECT].depth = 1; /* disable nested irq */
|
||||
icu_data[PLD_IRQ_CFC_EJECT].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi3_irq(PLD_IRQ_CFC_EJECT);
|
||||
#endif /* CONFIG_M32R_CFC */
|
||||
|
||||
/* IDE IREQ */
|
||||
irq_desc[PLD_IRQ_IDEIREQ].status = IRQ_DISABLED;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].handler = &mappi3_irq_type;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].action = 0;
|
||||
irq_desc[PLD_IRQ_IDEIREQ].depth = 1; /* disable nested irq */
|
||||
icu_data[PLD_IRQ_IDEIREQ].icucr = M32R_ICUCR_IEN|M32R_ICUCR_ISMOD10;
|
||||
disable_mappi3_irq(PLD_IRQ_IDEIREQ);
|
||||
|
||||
}
|
||||
|
||||
#if defined(CONFIG_SMC91X)
|
||||
|
|
|
@ -41,7 +41,8 @@ asmlinkage int sys_tas(int *addr)
|
|||
return -EFAULT;
|
||||
local_irq_save(flags);
|
||||
oldval = *addr;
|
||||
*addr = 1;
|
||||
if (!oldval)
|
||||
*addr = 1;
|
||||
local_irq_restore(flags);
|
||||
return oldval;
|
||||
}
|
||||
|
@ -59,7 +60,8 @@ asmlinkage int sys_tas(int *addr)
|
|||
|
||||
_raw_spin_lock(&tas_lock);
|
||||
oldval = *addr;
|
||||
*addr = 1;
|
||||
if (!oldval)
|
||||
*addr = 1;
|
||||
_raw_spin_unlock(&tas_lock);
|
||||
|
||||
return oldval;
|
||||
|
|
|
@ -61,15 +61,17 @@ endif
|
|||
LDFLAGS_vmlinux := -Bstatic
|
||||
|
||||
# The -Iarch/$(ARCH)/include is temporary while we are merging
|
||||
CPPFLAGS += -Iarch/$(ARCH) -Iarch/$(ARCH)/include
|
||||
AFLAGS += -Iarch/$(ARCH)
|
||||
CFLAGS += -Iarch/$(ARCH) -msoft-float -pipe
|
||||
CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -Iarch/$(ARCH)/include
|
||||
AFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
|
||||
CFLAGS-$(CONFIG_PPC64) := -mminimal-toc -mtraceback=none -mcall-aixdesc
|
||||
CFLAGS-$(CONFIG_PPC32) := -ffixed-r2 -mmultiple
|
||||
CFLAGS += $(CFLAGS-y)
|
||||
CFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH) -ffixed-r2 -mmultiple
|
||||
CPPFLAGS += $(CPPFLAGS-y)
|
||||
AFLAGS += $(AFLAGS-y)
|
||||
CFLAGS += -msoft-float -pipe $(CFLAGS-y)
|
||||
CPP = $(CC) -E $(CFLAGS)
|
||||
# Temporary hack until we have migrated to asm-powerpc
|
||||
LINUXINCLUDE += -Iarch/$(ARCH)/include
|
||||
LINUXINCLUDE-$(CONFIG_PPC32) := -Iarch/$(ARCH)/include
|
||||
LINUXINCLUDE += $(LINUXINCLUDE-y)
|
||||
|
||||
CHECKFLAGS += -m$(SZ) -D__powerpc__ -D__powerpc$(SZ)__
|
||||
|
||||
|
@ -173,11 +175,13 @@ archclean:
|
|||
|
||||
archprepare: checkbin
|
||||
|
||||
ifeq ($(CONFIG_PPC32),y)
|
||||
# Temporary hack until we have migrated to asm-powerpc
|
||||
include/asm: arch/$(ARCH)/include/asm
|
||||
arch/$(ARCH)/include/asm: FORCE
|
||||
$(Q)if [ ! -d arch/$(ARCH)/include ]; then mkdir -p arch/$(ARCH)/include; fi
|
||||
$(Q)ln -fsn $(srctree)/include/asm-$(OLDARCH) arch/$(ARCH)/include/asm
|
||||
endif
|
||||
|
||||
# Use the file '.tmp_gas_check' for binutils tests, as gas won't output
|
||||
# to stdout and these checks are run even on install targets.
|
||||
|
|
|
@ -457,7 +457,6 @@ void flush_thread(void)
|
|||
if (t->flags & _TIF_ABI_PENDING)
|
||||
t->flags ^= (_TIF_ABI_PENDING | _TIF_32BIT);
|
||||
#endif
|
||||
kprobe_flush_task(current);
|
||||
|
||||
#ifndef CONFIG_SMP
|
||||
if (last_task_used_math == current)
|
||||
|
|
|
@ -145,8 +145,7 @@ static void dump_vdso_pages(struct vm_area_struct * vma)
|
|||
struct page *pg = virt_to_page(vdso32_kbase +
|
||||
i*PAGE_SIZE);
|
||||
struct page *upg = (vma && vma->vm_mm) ?
|
||||
follow_page(vma->vm_mm, vma->vm_start +
|
||||
i*PAGE_SIZE, 0)
|
||||
follow_page(vma, vma->vm_start + i*PAGE_SIZE, 0)
|
||||
: NULL;
|
||||
dump_one_vdso_page(pg, upg);
|
||||
}
|
||||
|
@ -157,8 +156,7 @@ static void dump_vdso_pages(struct vm_area_struct * vma)
|
|||
struct page *pg = virt_to_page(vdso64_kbase +
|
||||
i*PAGE_SIZE);
|
||||
struct page *upg = (vma && vma->vm_mm) ?
|
||||
follow_page(vma->vm_mm, vma->vm_start +
|
||||
i*PAGE_SIZE, 0)
|
||||
follow_page(vma, vma->vm_start + i*PAGE_SIZE, 0)
|
||||
: NULL;
|
||||
dump_one_vdso_page(pg, upg);
|
||||
}
|
||||
|
@ -285,8 +283,7 @@ int arch_setup_additional_pages(struct linux_binprm *bprm,
|
|||
* It's fine to use that for setting breakpoints in the vDSO code
|
||||
* pages though
|
||||
*/
|
||||
vma->vm_flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE |
|
||||
VM_MAYEXEC | VM_RESERVED;
|
||||
vma->vm_flags = VM_READ | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC;
|
||||
vma->vm_flags |= mm->def_flags;
|
||||
vma->vm_page_prot = protection_map[vma->vm_flags & 0x7];
|
||||
vma->vm_ops = &vdso_vmops;
|
||||
|
|
|
@ -110,13 +110,11 @@ unsigned long __init mmu_mapin_ram(void)
|
|||
pmd_t *pmdp;
|
||||
unsigned long val = p | _PMD_SIZE_16M | _PAGE_HWEXEC | _PAGE_HWWRITE;
|
||||
|
||||
spin_lock(&init_mm.page_table_lock);
|
||||
pmdp = pmd_offset(pgd_offset_k(v), v);
|
||||
pmd_val(*pmdp++) = val;
|
||||
pmd_val(*pmdp++) = val;
|
||||
pmd_val(*pmdp++) = val;
|
||||
pmd_val(*pmdp++) = val;
|
||||
spin_unlock(&init_mm.page_table_lock);
|
||||
|
||||
v += LARGE_PAGE_SIZE_16M;
|
||||
p += LARGE_PAGE_SIZE_16M;
|
||||
|
@ -127,10 +125,8 @@ unsigned long __init mmu_mapin_ram(void)
|
|||
pmd_t *pmdp;
|
||||
unsigned long val = p | _PMD_SIZE_4M | _PAGE_HWEXEC | _PAGE_HWWRITE;
|
||||
|
||||
spin_lock(&init_mm.page_table_lock);
|
||||
pmdp = pmd_offset(pgd_offset_k(v), v);
|
||||
pmd_val(*pmdp) = val;
|
||||
spin_unlock(&init_mm.page_table_lock);
|
||||
|
||||
v += LARGE_PAGE_SIZE_4M;
|
||||
p += LARGE_PAGE_SIZE_4M;
|
||||
|
|
|
@ -287,15 +287,15 @@ static int open_high_hpage_areas(struct mm_struct *mm, u16 newareas)
|
|||
|
||||
int prepare_hugepage_range(unsigned long addr, unsigned long len)
|
||||
{
|
||||
int err;
|
||||
int err = 0;
|
||||
|
||||
if ( (addr+len) < addr )
|
||||
return -EINVAL;
|
||||
|
||||
if ((addr + len) < 0x100000000UL)
|
||||
if (addr < 0x100000000UL)
|
||||
err = open_low_hpage_areas(current->mm,
|
||||
LOW_ESID_MASK(addr, len));
|
||||
else
|
||||
if ((addr + len) > 0x100000000UL)
|
||||
err = open_high_hpage_areas(current->mm,
|
||||
HTLB_AREA_MASK(addr, len));
|
||||
if (err) {
|
||||
|
@ -754,9 +754,7 @@ int hash_huge_page(struct mm_struct *mm, unsigned long access,
|
|||
}
|
||||
|
||||
/*
|
||||
* No need to use ldarx/stdcx here because all who
|
||||
* might be updating the pte will hold the
|
||||
* page_table_lock
|
||||
* No need to use ldarx/stdcx here
|
||||
*/
|
||||
*ptep = __pte(new_pte & ~_PAGE_BUSY);
|
||||
|
||||
|
|
|
@ -495,7 +495,7 @@ EXPORT_SYMBOL(flush_icache_user_range);
|
|||
* We use it to preload an HPTE into the hash table corresponding to
|
||||
* the updated linux PTE.
|
||||
*
|
||||
* This must always be called with the mm->page_table_lock held
|
||||
* This must always be called with the pte lock held.
|
||||
*/
|
||||
void update_mmu_cache(struct vm_area_struct *vma, unsigned long address,
|
||||
pte_t pte)
|
||||
|
|
|
@ -149,6 +149,12 @@ void flush_tlb_mm(struct mm_struct *mm)
|
|||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* It is safe to go down the mm's list of vmas when called
|
||||
* from dup_mmap, holding mmap_sem. It would also be safe from
|
||||
* unmap_region or exit_mmap, but not from vmtruncate on SMP -
|
||||
* but it seems dup_mmap is the only SMP case which gets here.
|
||||
*/
|
||||
for (mp = mm->mmap; mp != NULL; mp = mp->vm_next)
|
||||
flush_range(mp->vm_mm, mp->vm_start, mp->vm_end);
|
||||
FINISH_FLUSH;
|
||||
|
|
|
@ -95,7 +95,7 @@ static void pte_free_submit(struct pte_freelist_batch *batch)
|
|||
|
||||
void pgtable_free_tlb(struct mmu_gather *tlb, pgtable_free_t pgf)
|
||||
{
|
||||
/* This is safe as we are holding page_table_lock */
|
||||
/* This is safe since tlb_gather_mmu has disabled preemption */
|
||||
cpumask_t local_cpumask = cpumask_of_cpu(smp_processor_id());
|
||||
struct pte_freelist_batch **batchp = &__get_cpu_var(pte_freelist_cur);
|
||||
|
||||
|
@ -206,7 +206,7 @@ void __flush_tlb_pending(struct ppc64_tlb_batch *batch)
|
|||
|
||||
void pte_free_finish(void)
|
||||
{
|
||||
/* This is safe as we are holding page_table_lock */
|
||||
/* This is safe since tlb_gather_mmu has disabled preemption */
|
||||
struct pte_freelist_batch **batchp = &__get_cpu_var(pte_freelist_cur);
|
||||
|
||||
if (*batchp == NULL)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Rewrite, cleanup:
|
||||
*
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
* Dynamic DMA mapping support, iSeries-specific parts.
|
||||
*
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
*
|
||||
* Rewrite, cleanup:
|
||||
*
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
* Dynamic DMA mapping support, pSeries-specific parts, both SMP and LPAR.
|
||||
*
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
/*
|
||||
* arch/powerpc/sysdev/u3_iommu.c
|
||||
*
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
* Based on pSeries_iommu.c:
|
||||
* Copyright (C) 2001 Mike Corrigan & Dave Engebretsen, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@austin.ibm.com>, IBM Corporation
|
||||
* Copyright (C) 2004 Olof Johansson <olof@lixom.net>, IBM Corporation
|
||||
*
|
||||
* Dynamic DMA mapping support, Apple U3 & IBM CPC925 "DART" iommu.
|
||||
*
|
||||
|
|
|
@ -252,7 +252,7 @@ void *sbus_alloc_consistent(struct sbus_dev *sdev, long len, u32 *dma_addrp)
|
|||
}
|
||||
|
||||
order = get_order(len_total);
|
||||
if ((va = __get_free_pages(GFP_KERNEL, order)) == 0)
|
||||
if ((va = __get_free_pages(GFP_KERNEL|__GFP_COMP, order)) == 0)
|
||||
goto err_nopages;
|
||||
|
||||
if ((res = kmalloc(sizeof(struct resource), GFP_KERNEL)) == NULL)
|
||||
|
|
|
@ -32,9 +32,7 @@ static inline void io_remap_pte_range(struct mm_struct *mm, pte_t * pte, unsigne
|
|||
if (end > PMD_SIZE)
|
||||
end = PMD_SIZE;
|
||||
do {
|
||||
pte_t oldpage = *pte;
|
||||
pte_clear(mm, address, pte);
|
||||
set_pte(pte, mk_pte_io(offset, prot, space));
|
||||
set_pte_at(mm, address, pte, mk_pte_io(offset, prot, space));
|
||||
address += PAGE_SIZE;
|
||||
offset += PAGE_SIZE;
|
||||
pte++;
|
||||
|
@ -63,7 +61,7 @@ static inline int io_remap_pmd_range(struct mm_struct *mm, pmd_t * pmd, unsigned
|
|||
}
|
||||
|
||||
int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
||||
unsigned long pfn, unsigned long size, pgprot_t prot)
|
||||
unsigned long pfn, unsigned long size, pgprot_t prot)
|
||||
{
|
||||
int error = 0;
|
||||
pgd_t * dir;
|
||||
|
@ -74,7 +72,9 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
|||
unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
|
||||
|
||||
/* See comment in mm/memory.c remap_pfn_range */
|
||||
vma->vm_flags |= VM_IO | VM_RESERVED;
|
||||
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
||||
vma->vm_pgoff = (offset >> PAGE_SHIFT) |
|
||||
((unsigned long)space << 28UL);
|
||||
|
||||
prot = __pgprot(pg_iobits);
|
||||
offset -= from;
|
||||
|
|
|
@ -327,7 +327,7 @@ void *sbus_alloc_consistent(struct sbus_dev *sdev, size_t size, dma_addr_t *dvma
|
|||
order = get_order(size);
|
||||
if (order >= 10)
|
||||
return NULL;
|
||||
first_page = __get_free_pages(GFP_KERNEL, order);
|
||||
first_page = __get_free_pages(GFP_KERNEL|__GFP_COMP, order);
|
||||
if (first_page == 0UL)
|
||||
return NULL;
|
||||
memset((char *)first_page, 0, PAGE_SIZE << order);
|
||||
|
|
|
@ -15,6 +15,15 @@
|
|||
#include <asm/page.h>
|
||||
#include <asm/tlbflush.h>
|
||||
|
||||
static inline pte_t mk_pte_io(unsigned long page, pgprot_t prot, int space)
|
||||
{
|
||||
pte_t pte;
|
||||
pte_val(pte) = (((page) | pgprot_val(prot) | _PAGE_E) &
|
||||
~(unsigned long)_PAGE_CACHE);
|
||||
pte_val(pte) |= (((unsigned long)space) << 32);
|
||||
return pte;
|
||||
}
|
||||
|
||||
/* Remap IO memory, the same way as remap_pfn_range(), but use
|
||||
* the obio memory space.
|
||||
*
|
||||
|
@ -126,9 +135,13 @@ int io_remap_pfn_range(struct vm_area_struct *vma, unsigned long from,
|
|||
struct mm_struct *mm = vma->vm_mm;
|
||||
int space = GET_IOSPACE(pfn);
|
||||
unsigned long offset = GET_PFN(pfn) << PAGE_SHIFT;
|
||||
unsigned long phys_base;
|
||||
|
||||
phys_base = offset | (((unsigned long) space) << 32UL);
|
||||
|
||||
/* See comment in mm/memory.c remap_pfn_range */
|
||||
vma->vm_flags |= VM_IO | VM_RESERVED;
|
||||
vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
|
||||
vma->vm_pgoff = phys_base >> PAGE_SHIFT;
|
||||
|
||||
prot = __pgprot(pg_iobits);
|
||||
offset -= from;
|
||||
|
|
|
@ -17,7 +17,7 @@ core-y += $(ARCH_DIR)/kernel/ \
|
|||
|
||||
# Have to precede the include because the included Makefiles reference them.
|
||||
SYMLINK_HEADERS := archparam.h system.h sigcontext.h processor.h ptrace.h \
|
||||
module.h vm-flags.h elf.h
|
||||
module.h vm-flags.h elf.h ldt.h
|
||||
SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
|
||||
|
||||
# XXX: The "os" symlink is only used by arch/um/include/os.h, which includes
|
||||
|
|
|
@ -16,6 +16,15 @@ extern void stub_clone_handler(void);
|
|||
#define STUB_MMAP_NR __NR_mmap2
|
||||
#define MMAP_OFFSET(o) ((o) >> PAGE_SHIFT)
|
||||
|
||||
static inline long stub_syscall0(long syscall)
|
||||
{
|
||||
long ret;
|
||||
|
||||
__asm__ volatile ("int $0x80" : "=a" (ret) : "0" (syscall));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline long stub_syscall1(long syscall, long arg1)
|
||||
{
|
||||
long ret;
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
#ifndef __SYSDEP_STUB_H
|
||||
#define __SYSDEP_STUB_H
|
||||
|
||||
#include <asm/ptrace.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <sysdep/ptrace_user.h>
|
||||
|
||||
|
@ -20,6 +19,17 @@ extern void stub_clone_handler(void);
|
|||
#define __syscall_clobber "r11","rcx","memory"
|
||||
#define __syscall "syscall"
|
||||
|
||||
static inline long stub_syscall0(long syscall)
|
||||
{
|
||||
long ret;
|
||||
|
||||
__asm__ volatile (__syscall
|
||||
: "=a" (ret)
|
||||
: "0" (syscall) : __syscall_clobber );
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline long stub_syscall2(long syscall, long arg1, long arg2)
|
||||
{
|
||||
long ret;
|
||||
|
|
|
@ -9,18 +9,24 @@
|
|||
#include "stub-data.h"
|
||||
#include "uml-config.h"
|
||||
#include "sysdep/stub.h"
|
||||
#include "kern_constants.h"
|
||||
|
||||
/* This is in a separate file because it needs to be compiled with any
|
||||
* extraneous gcc flags (-pg, -fprofile-arcs, -ftest-coverage) disabled
|
||||
*
|
||||
* Use UM_KERN_PAGE_SIZE instead of PAGE_SIZE because that calls getpagesize
|
||||
* on some systems.
|
||||
*/
|
||||
|
||||
#define STUB_DATA(field) (((struct stub_data *) UML_CONFIG_STUB_DATA)->field)
|
||||
|
||||
void __attribute__ ((__section__ (".__syscall_stub")))
|
||||
stub_clone_handler(void)
|
||||
{
|
||||
long err;
|
||||
struct stub_data *from = (struct stub_data *) UML_CONFIG_STUB_DATA;
|
||||
|
||||
err = stub_syscall2(__NR_clone, CLONE_PARENT | CLONE_FILES | SIGCHLD,
|
||||
UML_CONFIG_STUB_DATA + PAGE_SIZE / 2 -
|
||||
UML_CONFIG_STUB_DATA + UM_KERN_PAGE_SIZE / 2 -
|
||||
sizeof(void *));
|
||||
if(err != 0)
|
||||
goto out;
|
||||
|
@ -30,15 +36,16 @@ stub_clone_handler(void)
|
|||
goto out;
|
||||
|
||||
err = stub_syscall3(__NR_setitimer, ITIMER_VIRTUAL,
|
||||
(long) &from->timer, 0);
|
||||
(long) &STUB_DATA(timer), 0);
|
||||
if(err)
|
||||
goto out;
|
||||
|
||||
err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA, PAGE_SIZE,
|
||||
PROT_READ | PROT_WRITE, MAP_FIXED | MAP_SHARED,
|
||||
from->fd, from->offset);
|
||||
err = stub_syscall6(STUB_MMAP_NR, UML_CONFIG_STUB_DATA,
|
||||
UM_KERN_PAGE_SIZE, PROT_READ | PROT_WRITE,
|
||||
MAP_FIXED | MAP_SHARED, STUB_DATA(fd),
|
||||
STUB_DATA(offset));
|
||||
out:
|
||||
/* save current result. Parent: pid; child: retcode of mmap */
|
||||
from->err = err;
|
||||
STUB_DATA(err) = err;
|
||||
trap_myself();
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ obj-y = bitops.o bugs.o checksum.o delay.o fault.o ksyms.o ldt.o ptrace.o \
|
|||
obj-$(CONFIG_HIGHMEM) += highmem.o
|
||||
obj-$(CONFIG_MODULES) += module.o
|
||||
|
||||
USER_OBJS := bugs.o ptrace_user.o sigcontext.o fault.o
|
||||
USER_OBJS := bugs.o ptrace_user.o sigcontext.o fault.o stub_segv.o
|
||||
|
||||
SYMLINKS = bitops.c semaphore.c highmem.c module.c
|
||||
|
||||
|
|
|
@ -228,7 +228,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount)
|
|||
size = LDT_ENTRY_SIZE*LDT_DIRECT_ENTRIES;
|
||||
if(size > bytecount)
|
||||
size = bytecount;
|
||||
if(copy_to_user(ptr, ldt->entries, size))
|
||||
if(copy_to_user(ptr, ldt->u.entries, size))
|
||||
err = -EFAULT;
|
||||
bytecount -= size;
|
||||
ptr += size;
|
||||
|
@ -239,7 +239,7 @@ static int read_ldt(void __user * ptr, unsigned long bytecount)
|
|||
size = PAGE_SIZE;
|
||||
if(size > bytecount)
|
||||
size = bytecount;
|
||||
if(copy_to_user(ptr, ldt->pages[i], size)){
|
||||
if(copy_to_user(ptr, ldt->u.pages[i], size)){
|
||||
err = -EFAULT;
|
||||
break;
|
||||
}
|
||||
|
@ -321,10 +321,11 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int func)
|
|||
i*LDT_ENTRIES_PER_PAGE <= ldt_info.entry_number;
|
||||
i++){
|
||||
if(i == 0)
|
||||
memcpy(&entry0, ldt->entries, sizeof(entry0));
|
||||
ldt->pages[i] = (struct ldt_entry *)
|
||||
__get_free_page(GFP_KERNEL|__GFP_ZERO);
|
||||
if(!ldt->pages[i]){
|
||||
memcpy(&entry0, ldt->u.entries,
|
||||
sizeof(entry0));
|
||||
ldt->u.pages[i] = (struct ldt_entry *)
|
||||
__get_free_page(GFP_KERNEL|__GFP_ZERO);
|
||||
if(!ldt->u.pages[i]){
|
||||
err = -ENOMEM;
|
||||
/* Undo the change in host */
|
||||
memset(&ldt_info, 0, sizeof(ldt_info));
|
||||
|
@ -332,8 +333,9 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int func)
|
|||
goto out_unlock;
|
||||
}
|
||||
if(i == 0) {
|
||||
memcpy(ldt->pages[0], &entry0, sizeof(entry0));
|
||||
memcpy(ldt->pages[0]+1, ldt->entries+1,
|
||||
memcpy(ldt->u.pages[0], &entry0,
|
||||
sizeof(entry0));
|
||||
memcpy(ldt->u.pages[0]+1, ldt->u.entries+1,
|
||||
sizeof(entry0)*(LDT_DIRECT_ENTRIES-1));
|
||||
}
|
||||
ldt->entry_count = (i + 1) * LDT_ENTRIES_PER_PAGE;
|
||||
|
@ -343,9 +345,9 @@ static int write_ldt(void __user * ptr, unsigned long bytecount, int func)
|
|||
ldt->entry_count = ldt_info.entry_number + 1;
|
||||
|
||||
if(ldt->entry_count <= LDT_DIRECT_ENTRIES)
|
||||
ldt_p = ldt->entries + ldt_info.entry_number;
|
||||
ldt_p = ldt->u.entries + ldt_info.entry_number;
|
||||
else
|
||||
ldt_p = ldt->pages[ldt_info.entry_number/LDT_ENTRIES_PER_PAGE] +
|
||||
ldt_p = ldt->u.pages[ldt_info.entry_number/LDT_ENTRIES_PER_PAGE] +
|
||||
ldt_info.entry_number%LDT_ENTRIES_PER_PAGE;
|
||||
|
||||
if(ldt_info.base_addr == 0 && ldt_info.limit == 0 &&
|
||||
|
@ -501,8 +503,8 @@ long init_new_ldt(struct mmu_context_skas * new_mm,
|
|||
*/
|
||||
down(&from_mm->ldt.semaphore);
|
||||
if(from_mm->ldt.entry_count <= LDT_DIRECT_ENTRIES){
|
||||
memcpy(new_mm->ldt.entries, from_mm->ldt.entries,
|
||||
sizeof(new_mm->ldt.entries));
|
||||
memcpy(new_mm->ldt.u.entries, from_mm->ldt.u.entries,
|
||||
sizeof(new_mm->ldt.u.entries));
|
||||
}
|
||||
else{
|
||||
i = from_mm->ldt.entry_count / LDT_ENTRIES_PER_PAGE;
|
||||
|
@ -512,9 +514,10 @@ long init_new_ldt(struct mmu_context_skas * new_mm,
|
|||
err = -ENOMEM;
|
||||
break;
|
||||
}
|
||||
new_mm->ldt.pages[i] = (struct ldt_entry*)page;
|
||||
memcpy(new_mm->ldt.pages[i],
|
||||
from_mm->ldt.pages[i], PAGE_SIZE);
|
||||
new_mm->ldt.u.pages[i] =
|
||||
(struct ldt_entry *) page;
|
||||
memcpy(new_mm->ldt.u.pages[i],
|
||||
from_mm->ldt.u.pages[i], PAGE_SIZE);
|
||||
}
|
||||
}
|
||||
new_mm->ldt.entry_count = from_mm->ldt.entry_count;
|
||||
|
@ -532,7 +535,7 @@ void free_ldt(struct mmu_context_skas * mm)
|
|||
if(!ptrace_ldt && mm->ldt.entry_count > LDT_DIRECT_ENTRIES){
|
||||
i = mm->ldt.entry_count / LDT_ENTRIES_PER_PAGE;
|
||||
while(i-- > 0){
|
||||
free_page((long )mm->ldt.pages[i]);
|
||||
free_page((long )mm->ldt.u.pages[i]);
|
||||
}
|
||||
}
|
||||
mm->ldt.entry_count = 0;
|
||||
|
|
|
@ -3,9 +3,11 @@
|
|||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include <asm/signal.h>
|
||||
#include <signal.h>
|
||||
#include <sys/select.h> /* The only way I can see to get sigset_t */
|
||||
#include <asm/unistd.h>
|
||||
#include "uml-config.h"
|
||||
#include "sysdep/stub.h"
|
||||
#include "sysdep/sigcontext.h"
|
||||
#include "sysdep/faultinfo.h"
|
||||
|
||||
|
@ -13,13 +15,14 @@ void __attribute__ ((__section__ (".__syscall_stub")))
|
|||
stub_segv_handler(int sig)
|
||||
{
|
||||
struct sigcontext *sc = (struct sigcontext *) (&sig + 1);
|
||||
int pid;
|
||||
|
||||
GET_FAULTINFO_FROM_SC(*((struct faultinfo *) UML_CONFIG_STUB_DATA),
|
||||
sc);
|
||||
|
||||
__asm__("movl %0, %%eax ; int $0x80": : "g" (__NR_getpid));
|
||||
__asm__("movl %%eax, %%ebx ; movl %0, %%eax ; movl %1, %%ecx ;"
|
||||
"int $0x80": : "g" (__NR_kill), "g" (SIGUSR1));
|
||||
pid = stub_syscall0(__NR_getpid);
|
||||
stub_syscall2(__NR_kill, pid, SIGUSR1);
|
||||
|
||||
/* Load pointer to sigcontext into esp, since we need to leave
|
||||
* the stack in its original form when we do the sigreturn here, by
|
||||
* hand.
|
||||
|
|
|
@ -12,7 +12,7 @@ lib-y = bitops.o bugs.o csum-partial.o delay.o fault.o ldt.o mem.o memcpy.o \
|
|||
obj-y := ksyms.o
|
||||
obj-$(CONFIG_MODULES) += module.o um_module.o
|
||||
|
||||
USER_OBJS := ptrace_user.o sigcontext.o
|
||||
USER_OBJS := ptrace_user.o sigcontext.o stub_segv.o
|
||||
|
||||
SYMLINKS = bitops.c csum-copy.S csum-partial.c csum-wrappers.c ldt.c memcpy.S \
|
||||
thunk.S module.c
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
* Licensed under the GPL
|
||||
*/
|
||||
|
||||
#include <asm/signal.h>
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <asm/unistd.h>
|
||||
#include <asm/ucontext.h>
|
||||
#include "uml-config.h"
|
||||
#include "sysdep/sigcontext.h"
|
||||
#include "sysdep/faultinfo.h"
|
||||
#include <stddef.h>
|
||||
#include "sysdep/stub.h"
|
||||
|
||||
/* Copied from sys-x86_64/signal.c - Can't find an equivalent definition
|
||||
* in the libc headers anywhere.
|
||||
|
@ -31,21 +31,21 @@ void __attribute__ ((__section__ (".__syscall_stub")))
|
|||
stub_segv_handler(int sig)
|
||||
{
|
||||
struct ucontext *uc;
|
||||
int pid;
|
||||
|
||||
__asm__("movq %%rdx, %0" : "=g" (uc) :);
|
||||
GET_FAULTINFO_FROM_SC(*((struct faultinfo *) UML_CONFIG_STUB_DATA),
|
||||
&uc->uc_mcontext);
|
||||
|
||||
__asm__("movq %0, %%rax ; syscall": : "g" (__NR_getpid));
|
||||
__asm__("movq %%rax, %%rdi ; movq %0, %%rax ; movq %1, %%rsi ;"
|
||||
"syscall": : "g" (__NR_kill), "g" (SIGUSR1) :
|
||||
"%rdi", "%rax", "%rsi");
|
||||
pid = stub_syscall0(__NR_getpid);
|
||||
stub_syscall2(__NR_kill, pid, SIGUSR1);
|
||||
|
||||
/* sys_sigreturn expects that the stack pointer will be 8 bytes into
|
||||
* the signal frame. So, we use the ucontext pointer, which we know
|
||||
* already, to get the signal frame pointer, and add 8 to that.
|
||||
*/
|
||||
__asm__("movq %0, %%rsp": :
|
||||
__asm__("movq %0, %%rsp; movq %1, %%rax ; syscall": :
|
||||
"g" ((unsigned long) container_of(uc, struct rt_sigframe,
|
||||
uc) + 8));
|
||||
__asm__("movq %0, %%rax ; syscall" : : "g" (__NR_rt_sigreturn));
|
||||
uc) + 8),
|
||||
"g" (__NR_rt_sigreturn));
|
||||
}
|
||||
|
|
|
@ -351,13 +351,6 @@ void flush_thread(void)
|
|||
struct task_struct *tsk = current;
|
||||
struct thread_info *t = current_thread_info();
|
||||
|
||||
/*
|
||||
* Remove function-return probe instances associated with this task
|
||||
* and put them back on the free list. Do not insert an exit probe for
|
||||
* this function, it will be disabled by kprobe_flush_task if you do.
|
||||
*/
|
||||
kprobe_flush_task(tsk);
|
||||
|
||||
if (t->flags & _TIF_ABI_PENDING)
|
||||
t->flags ^= (_TIF_ABI_PENDING | _TIF_IA32);
|
||||
|
||||
|
|
|
@ -1371,10 +1371,6 @@ static void as_add_request(request_queue_t *q, struct request *rq)
|
|||
struct as_rq *alias;
|
||||
int data_dir;
|
||||
|
||||
if (arq->state != AS_RQ_PRESCHED) {
|
||||
printk("arq->state: %d\n", arq->state);
|
||||
WARN_ON(1);
|
||||
}
|
||||
arq->state = AS_RQ_NEW;
|
||||
|
||||
if (rq_data_dir(arq->request) == READ
|
||||
|
|
|
@ -133,7 +133,7 @@ static struct kobj_type ktype_bus = {
|
|||
decl_subsys(bus, &ktype_bus, NULL);
|
||||
|
||||
|
||||
/* Manually detach a device from it's associated driver. */
|
||||
/* Manually detach a device from its associated driver. */
|
||||
static int driver_helper(struct device *dev, void *data)
|
||||
{
|
||||
const char *name = data;
|
||||
|
@ -151,14 +151,13 @@ static ssize_t driver_unbind(struct device_driver *drv,
|
|||
int err = -ENODEV;
|
||||
|
||||
dev = bus_find_device(bus, NULL, (void *)buf, driver_helper);
|
||||
if ((dev) &&
|
||||
(dev->driver == drv)) {
|
||||
if (dev && dev->driver == drv) {
|
||||
device_release_driver(dev);
|
||||
err = count;
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
return count;
|
||||
put_device(dev);
|
||||
put_bus(bus);
|
||||
return err;
|
||||
}
|
||||
static DRIVER_ATTR(unbind, S_IWUSR, NULL, driver_unbind);
|
||||
|
||||
|
@ -175,16 +174,14 @@ static ssize_t driver_bind(struct device_driver *drv,
|
|||
int err = -ENODEV;
|
||||
|
||||
dev = bus_find_device(bus, NULL, (void *)buf, driver_helper);
|
||||
if ((dev) &&
|
||||
(dev->driver == NULL)) {
|
||||
if (dev && dev->driver == NULL) {
|
||||
down(&dev->sem);
|
||||
err = driver_probe_device(drv, dev);
|
||||
up(&dev->sem);
|
||||
put_device(dev);
|
||||
}
|
||||
if (err)
|
||||
return err;
|
||||
return count;
|
||||
put_device(dev);
|
||||
put_bus(bus);
|
||||
return err;
|
||||
}
|
||||
static DRIVER_ATTR(bind, S_IWUSR, NULL, driver_bind);
|
||||
|
||||
|
|
|
@ -62,7 +62,6 @@ void device_bind_driver(struct device * dev)
|
|||
* because we don't know the format of the ID structures, nor what
|
||||
* is to be considered a match and what is not.
|
||||
*
|
||||
*
|
||||
* This function returns 1 if a match is found, an error if one
|
||||
* occurs (that is not -ENODEV or -ENXIO), and 0 otherwise.
|
||||
*
|
||||
|
@ -158,7 +157,6 @@ static int __driver_attach(struct device * dev, void * data)
|
|||
driver_probe_device(drv, dev);
|
||||
up(&dev->sem);
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -225,15 +223,15 @@ void driver_detach(struct device_driver * drv)
|
|||
struct device * dev;
|
||||
|
||||
for (;;) {
|
||||
spin_lock_irq(&drv->klist_devices.k_lock);
|
||||
spin_lock(&drv->klist_devices.k_lock);
|
||||
if (list_empty(&drv->klist_devices.k_list)) {
|
||||
spin_unlock_irq(&drv->klist_devices.k_lock);
|
||||
spin_unlock(&drv->klist_devices.k_lock);
|
||||
break;
|
||||
}
|
||||
dev = list_entry(drv->klist_devices.k_list.prev,
|
||||
struct device, knode_driver.n_node);
|
||||
get_device(dev);
|
||||
spin_unlock_irq(&drv->klist_devices.k_lock);
|
||||
spin_unlock(&drv->klist_devices.k_lock);
|
||||
|
||||
down(&dev->sem);
|
||||
if (dev->driver == drv)
|
||||
|
|
|
@ -3714,12 +3714,6 @@ static int floppy_open(struct inode *inode, struct file *filp)
|
|||
USETF(FD_VERIFY);
|
||||
}
|
||||
|
||||
/* set underlying gendisk policy to reflect real ro/rw status */
|
||||
if (UTESTF(FD_DISK_WRITABLE))
|
||||
inode->i_bdev->bd_disk->policy = 0;
|
||||
else
|
||||
inode->i_bdev->bd_disk->policy = 1;
|
||||
|
||||
if (UDRS->fd_ref == -1 || (UDRS->fd_ref && (filp->f_flags & O_EXCL)))
|
||||
goto out2;
|
||||
|
||||
|
|
|
@ -416,7 +416,7 @@ static void __devinit amd8151_init(struct pci_dev *pdev, struct agp_bridge_data
|
|||
}
|
||||
|
||||
|
||||
static struct aper_size_info_32 uli_sizes[7] =
|
||||
static const struct aper_size_info_32 uli_sizes[7] =
|
||||
{
|
||||
{256, 65536, 6, 10},
|
||||
{128, 32768, 5, 9},
|
||||
|
@ -470,7 +470,7 @@ static int __devinit uli_agp_init(struct pci_dev *pdev)
|
|||
}
|
||||
|
||||
|
||||
static struct aper_size_info_32 nforce3_sizes[5] =
|
||||
static const struct aper_size_info_32 nforce3_sizes[5] =
|
||||
{
|
||||
{512, 131072, 7, 0x00000000 },
|
||||
{256, 65536, 6, 0x00000008 },
|
||||
|
|
|
@ -97,7 +97,7 @@ void agp_backend_release(struct agp_bridge_data *bridge)
|
|||
EXPORT_SYMBOL(agp_backend_release);
|
||||
|
||||
|
||||
static struct { int mem, agp; } maxes_table[] = {
|
||||
static const struct { int mem, agp; } maxes_table[] = {
|
||||
{0, 0},
|
||||
{32, 4},
|
||||
{64, 28},
|
||||
|
|
|
@ -371,6 +371,11 @@ static struct agp_device_ids via_agp_device_ids[] __devinitdata =
|
|||
.device_id = PCI_DEVICE_ID_VIA_3296_0,
|
||||
.chipset_name = "P4M800",
|
||||
},
|
||||
/* P4M800CE */
|
||||
{
|
||||
.device_id = PCI_DEVICE_ID_VIA_P4M800CE,
|
||||
.chipset_name = "P4M800CE",
|
||||
},
|
||||
|
||||
{ }, /* dummy final entry, always present */
|
||||
};
|
||||
|
@ -511,6 +516,7 @@ static struct pci_device_id agp_via_pci_table[] = {
|
|||
ID(PCI_DEVICE_ID_VIA_3269_0),
|
||||
ID(PCI_DEVICE_ID_VIA_83_87XX_1),
|
||||
ID(PCI_DEVICE_ID_VIA_3296_0),
|
||||
ID(PCI_DEVICE_ID_VIA_P4M800CE),
|
||||
{ }
|
||||
};
|
||||
|
||||
|
|
|
@ -104,6 +104,10 @@ int drm_lock(struct inode *inode, struct file *filp,
|
|||
__set_current_state(TASK_RUNNING);
|
||||
remove_wait_queue(&dev->lock.lock_queue, &entry);
|
||||
|
||||
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
sigemptyset(&dev->sigmask);
|
||||
sigaddset(&dev->sigmask, SIGSTOP);
|
||||
sigaddset(&dev->sigmask, SIGTSTP);
|
||||
|
@ -116,8 +120,12 @@ int drm_lock(struct inode *inode, struct file *filp,
|
|||
if (dev->driver->dma_ready && (lock.flags & _DRM_LOCK_READY))
|
||||
dev->driver->dma_ready(dev);
|
||||
|
||||
if (dev->driver->dma_quiescent && (lock.flags & _DRM_LOCK_QUIESCENT))
|
||||
return dev->driver->dma_quiescent(dev);
|
||||
if (dev->driver->dma_quiescent && (lock.flags & _DRM_LOCK_QUIESCENT)) {
|
||||
if (dev->driver->dma_quiescent(dev)) {
|
||||
DRM_DEBUG("%d waiting for DMA quiescent\n", lock.context);
|
||||
return DRM_ERR(EBUSY);
|
||||
}
|
||||
}
|
||||
|
||||
/* dev->driver->kernel_context_switch isn't used by any of the x86
|
||||
* drivers but is used by the Sparc driver.
|
||||
|
@ -128,9 +136,7 @@ int drm_lock(struct inode *inode, struct file *filp,
|
|||
dev->driver->kernel_context_switch(dev, dev->last_context,
|
||||
lock.context);
|
||||
}
|
||||
DRM_DEBUG("%d %s\n", lock.context, ret ? "interrupted" : "has lock");
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -95,7 +95,7 @@ unsigned long drm_alloc_pages(int order, int area)
|
|||
unsigned long addr;
|
||||
unsigned int sz;
|
||||
|
||||
address = __get_free_pages(GFP_KERNEL, order);
|
||||
address = __get_free_pages(GFP_KERNEL|__GFP_COMP, order);
|
||||
if (!address)
|
||||
return 0;
|
||||
|
||||
|
|
|
@ -221,7 +221,7 @@ unsigned long DRM(alloc_pages) (int order, int area) {
|
|||
}
|
||||
spin_unlock(&DRM(mem_lock));
|
||||
|
||||
address = __get_free_pages(GFP_KERNEL, order);
|
||||
address = __get_free_pages(GFP_KERNEL|__GFP_COMP, order);
|
||||
if (!address) {
|
||||
spin_lock(&DRM(mem_lock));
|
||||
++DRM(mem_stats)[area].fail_count;
|
||||
|
|
|
@ -161,7 +161,7 @@ static int mga_driver_device_is_agp(drm_device_t * dev)
|
|||
* device.
|
||||
*/
|
||||
|
||||
if ((pdev->device == 0x0525)
|
||||
if ((pdev->device == 0x0525) && pdev->bus->self
|
||||
&& (pdev->bus->self->vendor == 0x3388)
|
||||
&& (pdev->bus->self->device == 0x0021)) {
|
||||
return 0;
|
||||
|
|
|
@ -214,8 +214,6 @@ typedef struct drm_radeon_private {
|
|||
|
||||
int microcode_version;
|
||||
|
||||
int is_pci;
|
||||
|
||||
struct {
|
||||
u32 boxes;
|
||||
int freelist_timeouts;
|
||||
|
@ -275,6 +273,7 @@ typedef struct drm_radeon_private {
|
|||
|
||||
/* starting from here on, data is preserved accross an open */
|
||||
uint32_t flags; /* see radeon_chip_flags */
|
||||
int is_pci;
|
||||
} drm_radeon_private_t;
|
||||
|
||||
typedef struct drm_radeon_buf_priv {
|
||||
|
|
|
@ -693,8 +693,8 @@ static int cpufreq_remove_dev (struct sys_device * sys_dev)
|
|||
unsigned int cpu = sys_dev->id;
|
||||
unsigned long flags;
|
||||
struct cpufreq_policy *data;
|
||||
struct sys_device *cpu_sys_dev;
|
||||
#ifdef CONFIG_SMP
|
||||
struct sys_device *cpu_sys_dev;
|
||||
unsigned int j;
|
||||
#endif
|
||||
|
||||
|
@ -1113,21 +1113,13 @@ int __cpufreq_driver_target(struct cpufreq_policy *policy,
|
|||
{
|
||||
int retval = -EINVAL;
|
||||
|
||||
/*
|
||||
* If we are already in context of hotplug thread, we dont need to
|
||||
* acquire the hotplug lock. Otherwise acquire cpucontrol to prevent
|
||||
* hotplug from removing this cpu that we are working on.
|
||||
*/
|
||||
if (!current_in_cpu_hotplug())
|
||||
lock_cpu_hotplug();
|
||||
|
||||
lock_cpu_hotplug();
|
||||
dprintk("target for CPU %u: %u kHz, relation %u\n", policy->cpu,
|
||||
target_freq, relation);
|
||||
if (cpu_online(policy->cpu) && cpufreq_driver->target)
|
||||
retval = cpufreq_driver->target(policy, target_freq, relation);
|
||||
|
||||
if (!current_in_cpu_hotplug())
|
||||
unlock_cpu_hotplug();
|
||||
unlock_cpu_hotplug();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ config EFI_PCDP
|
|||
|
||||
config DELL_RBU
|
||||
tristate "BIOS update support for DELL systems via sysfs"
|
||||
depends on X86
|
||||
select FW_LOADER
|
||||
help
|
||||
Say m if you want to have the option of updating the BIOS for your
|
||||
|
|
|
@ -570,7 +570,7 @@ static int __init hdaps_init(void)
|
|||
hdaps_idev->evbit[0] = BIT(EV_ABS);
|
||||
input_set_abs_params(hdaps_idev, ABS_X,
|
||||
-256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT);
|
||||
input_set_abs_params(hdaps_idev, ABS_X,
|
||||
input_set_abs_params(hdaps_idev, ABS_Y,
|
||||
-256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT);
|
||||
|
||||
input_register_device(hdaps_idev);
|
||||
|
|
|
@ -522,8 +522,15 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,
|
|||
struct i2c_client *client = to_i2c_client(dev);
|
||||
struct it87_data *data = i2c_get_clientdata(client);
|
||||
int val = simple_strtol(buf, NULL, 10);
|
||||
u8 reg = it87_read_value(client, IT87_REG_FAN_DIV);
|
||||
|
||||
down(&data->update_lock);
|
||||
switch (nr) {
|
||||
case 0: data->fan_div[nr] = reg & 0x07; break;
|
||||
case 1: data->fan_div[nr] = (reg >> 3) & 0x07; break;
|
||||
case 2: data->fan_div[nr] = (reg & 0x40) ? 3 : 1; break;
|
||||
}
|
||||
|
||||
data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr]));
|
||||
it87_write_value(client, IT87_REG_FAN_MIN(nr), data->fan_min[nr]);
|
||||
up(&data->update_lock);
|
||||
|
|
|
@ -451,7 +451,7 @@ static DEVICE_ATTR(fan3_div, S_IRUGO, show_fan_3_div, NULL);
|
|||
static ssize_t show_vid(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
{
|
||||
struct lm78_data *data = lm78_update_device(dev);
|
||||
return sprintf(buf, "%d\n", vid_from_reg(82, data->vid));
|
||||
return sprintf(buf, "%d\n", vid_from_reg(data->vid, 82));
|
||||
}
|
||||
static DEVICE_ATTR(cpu0_vid, S_IRUGO, show_vid, NULL);
|
||||
|
||||
|
|
|
@ -456,7 +456,9 @@ static ssize_t store_regs_in_min0(struct device *dev, struct device_attribute *a
|
|||
(w83627thf == data->type || w83637hf == data->type))
|
||||
|
||||
/* use VRM9 calculation */
|
||||
data->in_min[0] = (u8)(((val * 100) - 70000 + 244) / 488);
|
||||
data->in_min[0] =
|
||||
SENSORS_LIMIT(((val * 100) - 70000 + 244) / 488, 0,
|
||||
255);
|
||||
else
|
||||
/* use VRM8 (standard) calculation */
|
||||
data->in_min[0] = IN_TO_REG(val);
|
||||
|
@ -481,7 +483,9 @@ static ssize_t store_regs_in_max0(struct device *dev, struct device_attribute *a
|
|||
(w83627thf == data->type || w83637hf == data->type))
|
||||
|
||||
/* use VRM9 calculation */
|
||||
data->in_max[0] = (u8)(((val * 100) - 70000 + 244) / 488);
|
||||
data->in_max[0] =
|
||||
SENSORS_LIMIT(((val * 100) - 70000 + 244) / 488, 0,
|
||||
255);
|
||||
else
|
||||
/* use VRM8 (standard) calculation */
|
||||
data->in_max[0] = IN_TO_REG(val);
|
||||
|
|
|
@ -2350,6 +2350,7 @@ static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int dest
|
|||
struct scsi_cmnd *SCpnt = NULL;
|
||||
u32 scsi_status = SBP2_SCSI_STATUS_GOOD;
|
||||
struct sbp2_command_info *command;
|
||||
unsigned long flags;
|
||||
|
||||
SBP2_DEBUG("sbp2_handle_status_write");
|
||||
|
||||
|
@ -2451,9 +2452,11 @@ static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int dest
|
|||
* null out last orb so that next time around we write directly to the orb pointer...
|
||||
* Quick start saves one 1394 bus transaction.
|
||||
*/
|
||||
spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
|
||||
if (list_empty(&scsi_id->sbp2_command_orb_inuse)) {
|
||||
scsi_id->last_orb = NULL;
|
||||
}
|
||||
spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
|
||||
|
||||
} else {
|
||||
|
||||
|
@ -2563,9 +2566,11 @@ static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id
|
|||
struct sbp2scsi_host_info *hi = scsi_id->hi;
|
||||
struct list_head *lh;
|
||||
struct sbp2_command_info *command;
|
||||
unsigned long flags;
|
||||
|
||||
SBP2_DEBUG("sbp2scsi_complete_all_commands");
|
||||
|
||||
spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags);
|
||||
while (!list_empty(&scsi_id->sbp2_command_orb_inuse)) {
|
||||
SBP2_DEBUG("Found pending command to complete");
|
||||
lh = scsi_id->sbp2_command_orb_inuse.next;
|
||||
|
@ -2582,6 +2587,7 @@ static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id
|
|||
command->Current_done(command->Current_SCpnt);
|
||||
}
|
||||
}
|
||||
spin_unlock_irqrestore(&scsi_id->sbp2_command_orb_lock, flags);
|
||||
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -355,9 +355,9 @@ struct ib_mad_agent *ib_register_mad_agent(struct ib_device *device,
|
|||
spin_unlock_irqrestore(&port_priv->reg_lock, flags);
|
||||
kfree(reg_req);
|
||||
error3:
|
||||
kfree(mad_agent_priv);
|
||||
error2:
|
||||
ib_dereg_mr(mad_agent_priv->agent.mr);
|
||||
error2:
|
||||
kfree(mad_agent_priv);
|
||||
error1:
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -339,14 +339,20 @@ static struct gameport_event *gameport_get_event(void)
|
|||
return event;
|
||||
}
|
||||
|
||||
static void gameport_handle_events(void)
|
||||
static void gameport_handle_event(void)
|
||||
{
|
||||
struct gameport_event *event;
|
||||
struct gameport_driver *gameport_drv;
|
||||
|
||||
down(&gameport_sem);
|
||||
|
||||
while ((event = gameport_get_event())) {
|
||||
/*
|
||||
* Note that we handle only one event here to give swsusp
|
||||
* a chance to freeze kgameportd thread. Gameport events
|
||||
* should be pretty rare so we are not concerned about
|
||||
* taking performance hit.
|
||||
*/
|
||||
if ((event = gameport_get_event())) {
|
||||
|
||||
switch (event->type) {
|
||||
case GAMEPORT_REGISTER_PORT:
|
||||
|
@ -433,7 +439,7 @@ static struct gameport *gameport_get_pending_child(struct gameport *parent)
|
|||
static int gameport_thread(void *nothing)
|
||||
{
|
||||
do {
|
||||
gameport_handle_events();
|
||||
gameport_handle_event();
|
||||
wait_event_interruptible(gameport_wait,
|
||||
kthread_should_stop() || !list_empty(&gameport_event_list));
|
||||
try_to_freeze();
|
||||
|
|
|
@ -536,7 +536,7 @@ static struct attribute *input_dev_attrs[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
static struct attribute_group input_dev_group = {
|
||||
static struct attribute_group input_dev_attr_group = {
|
||||
.attrs = input_dev_attrs,
|
||||
};
|
||||
|
||||
|
@ -717,35 +717,14 @@ struct input_dev *input_allocate_device(void)
|
|||
return dev;
|
||||
}
|
||||
|
||||
static void input_register_classdevice(struct input_dev *dev)
|
||||
{
|
||||
static atomic_t input_no = ATOMIC_INIT(0);
|
||||
const char *path;
|
||||
|
||||
__module_get(THIS_MODULE);
|
||||
|
||||
dev->dev = dev->cdev.dev;
|
||||
|
||||
snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id),
|
||||
"input%ld", (unsigned long) atomic_inc_return(&input_no) - 1);
|
||||
|
||||
path = kobject_get_path(&dev->cdev.class->subsys.kset.kobj, GFP_KERNEL);
|
||||
printk(KERN_INFO "input: %s as %s/%s\n",
|
||||
dev->name ? dev->name : "Unspecified device",
|
||||
path ? path : "", dev->cdev.class_id);
|
||||
kfree(path);
|
||||
|
||||
class_device_add(&dev->cdev);
|
||||
sysfs_create_group(&dev->cdev.kobj, &input_dev_group);
|
||||
sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
|
||||
sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
|
||||
}
|
||||
|
||||
int input_register_device(struct input_dev *dev)
|
||||
{
|
||||
static atomic_t input_no = ATOMIC_INIT(0);
|
||||
struct input_handle *handle;
|
||||
struct input_handler *handler;
|
||||
struct input_device_id *id;
|
||||
const char *path;
|
||||
int error;
|
||||
|
||||
if (!dev->dynalloc) {
|
||||
printk(KERN_WARNING "input: device %s is statically allocated, will not register\n"
|
||||
|
@ -773,7 +752,32 @@ int input_register_device(struct input_dev *dev)
|
|||
INIT_LIST_HEAD(&dev->h_list);
|
||||
list_add_tail(&dev->node, &input_dev_list);
|
||||
|
||||
input_register_classdevice(dev);
|
||||
dev->cdev.class = &input_class;
|
||||
snprintf(dev->cdev.class_id, sizeof(dev->cdev.class_id),
|
||||
"input%ld", (unsigned long) atomic_inc_return(&input_no) - 1);
|
||||
|
||||
error = class_device_add(&dev->cdev);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
error = sysfs_create_group(&dev->cdev.kobj, &input_dev_attr_group);
|
||||
if (error)
|
||||
goto fail1;
|
||||
|
||||
error = sysfs_create_group(&dev->cdev.kobj, &input_dev_id_attr_group);
|
||||
if (error)
|
||||
goto fail2;
|
||||
|
||||
error = sysfs_create_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
|
||||
if (error)
|
||||
goto fail3;
|
||||
|
||||
__module_get(THIS_MODULE);
|
||||
|
||||
path = kobject_get_path(&dev->cdev.kobj, GFP_KERNEL);
|
||||
printk(KERN_INFO "input: %s as %s\n",
|
||||
dev->name ? dev->name : "Unspecified device", path ? path : "N/A");
|
||||
kfree(path);
|
||||
|
||||
list_for_each_entry(handler, &input_handler_list, node)
|
||||
if (!handler->blacklist || !input_match_device(handler->blacklist, dev))
|
||||
|
@ -784,6 +788,11 @@ int input_register_device(struct input_dev *dev)
|
|||
input_wakeup_procfs_readers();
|
||||
|
||||
return 0;
|
||||
|
||||
fail3: sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
|
||||
fail2: sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
|
||||
fail1: class_device_del(&dev->cdev);
|
||||
return error;
|
||||
}
|
||||
|
||||
void input_unregister_device(struct input_dev *dev)
|
||||
|
@ -805,7 +814,7 @@ void input_unregister_device(struct input_dev *dev)
|
|||
|
||||
sysfs_remove_group(&dev->cdev.kobj, &input_dev_caps_attr_group);
|
||||
sysfs_remove_group(&dev->cdev.kobj, &input_dev_id_attr_group);
|
||||
sysfs_remove_group(&dev->cdev.kobj, &input_dev_group);
|
||||
sysfs_remove_group(&dev->cdev.kobj, &input_dev_attr_group);
|
||||
class_device_unregister(&dev->cdev);
|
||||
|
||||
input_wakeup_procfs_readers();
|
||||
|
|
|
@ -166,6 +166,9 @@ static unsigned char atkbd_unxlate_table[128] = {
|
|||
|
||||
#define ATKBD_SPECIAL 248
|
||||
|
||||
#define ATKBD_LED_EVENT_BIT 0
|
||||
#define ATKBD_REP_EVENT_BIT 1
|
||||
|
||||
static struct {
|
||||
unsigned char keycode;
|
||||
unsigned char set2;
|
||||
|
@ -211,6 +214,10 @@ struct atkbd {
|
|||
unsigned char err_xl;
|
||||
unsigned int last;
|
||||
unsigned long time;
|
||||
|
||||
struct work_struct event_work;
|
||||
struct semaphore event_sem;
|
||||
unsigned long event_mask;
|
||||
};
|
||||
|
||||
static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
|
||||
|
@ -424,58 +431,86 @@ static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
|
|||
}
|
||||
|
||||
/*
|
||||
* Event callback from the input module. Events that change the state of
|
||||
* the hardware are processed here.
|
||||
* atkbd_event_work() is used to complete processing of events that
|
||||
* can not be processed by input_event() which is often called from
|
||||
* interrupt context.
|
||||
*/
|
||||
|
||||
static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
|
||||
static void atkbd_event_work(void *data)
|
||||
{
|
||||
struct atkbd *atkbd = dev->private;
|
||||
const short period[32] =
|
||||
{ 33, 37, 42, 46, 50, 54, 58, 63, 67, 75, 83, 92, 100, 109, 116, 125,
|
||||
133, 149, 167, 182, 200, 217, 232, 250, 270, 303, 333, 370, 400, 435, 470, 500 };
|
||||
const short delay[4] =
|
||||
{ 250, 500, 750, 1000 };
|
||||
|
||||
struct atkbd *atkbd = data;
|
||||
struct input_dev *dev = atkbd->dev;
|
||||
unsigned char param[2];
|
||||
int i, j;
|
||||
|
||||
down(&atkbd->event_sem);
|
||||
|
||||
if (test_and_clear_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask)) {
|
||||
param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
|
||||
| (test_bit(LED_NUML, dev->led) ? 2 : 0)
|
||||
| (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
|
||||
ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS);
|
||||
|
||||
if (atkbd->extra) {
|
||||
param[0] = 0;
|
||||
param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
|
||||
| (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
|
||||
| (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
|
||||
| (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
|
||||
| (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
|
||||
ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS);
|
||||
}
|
||||
}
|
||||
|
||||
if (test_and_clear_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask)) {
|
||||
i = j = 0;
|
||||
while (i < 31 && period[i] < dev->rep[REP_PERIOD])
|
||||
i++;
|
||||
while (j < 3 && delay[j] < dev->rep[REP_DELAY])
|
||||
j++;
|
||||
dev->rep[REP_PERIOD] = period[i];
|
||||
dev->rep[REP_DELAY] = delay[j];
|
||||
param[0] = i | (j << 5);
|
||||
ps2_command(&atkbd->ps2dev, param, ATKBD_CMD_SETREP);
|
||||
}
|
||||
|
||||
up(&atkbd->event_sem);
|
||||
}
|
||||
|
||||
/*
|
||||
* Event callback from the input module. Events that change the state of
|
||||
* the hardware are processed here. If action can not be performed in
|
||||
* interrupt context it is offloaded to atkbd_event_work.
|
||||
*/
|
||||
|
||||
static int atkbd_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
|
||||
{
|
||||
struct atkbd *atkbd = dev->private;
|
||||
|
||||
if (!atkbd->write)
|
||||
return -1;
|
||||
|
||||
switch (type) {
|
||||
|
||||
case EV_LED:
|
||||
|
||||
param[0] = (test_bit(LED_SCROLLL, dev->led) ? 1 : 0)
|
||||
| (test_bit(LED_NUML, dev->led) ? 2 : 0)
|
||||
| (test_bit(LED_CAPSL, dev->led) ? 4 : 0);
|
||||
ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_SETLEDS);
|
||||
|
||||
if (atkbd->extra) {
|
||||
param[0] = 0;
|
||||
param[1] = (test_bit(LED_COMPOSE, dev->led) ? 0x01 : 0)
|
||||
| (test_bit(LED_SLEEP, dev->led) ? 0x02 : 0)
|
||||
| (test_bit(LED_SUSPEND, dev->led) ? 0x04 : 0)
|
||||
| (test_bit(LED_MISC, dev->led) ? 0x10 : 0)
|
||||
| (test_bit(LED_MUTE, dev->led) ? 0x20 : 0);
|
||||
ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_EX_SETLEDS);
|
||||
}
|
||||
|
||||
set_bit(ATKBD_LED_EVENT_BIT, &atkbd->event_mask);
|
||||
wmb();
|
||||
schedule_work(&atkbd->event_work);
|
||||
return 0;
|
||||
|
||||
case EV_REP:
|
||||
|
||||
if (atkbd->softrepeat) return 0;
|
||||
|
||||
i = j = 0;
|
||||
while (i < 31 && period[i] < dev->rep[REP_PERIOD])
|
||||
i++;
|
||||
while (j < 3 && delay[j] < dev->rep[REP_DELAY])
|
||||
j++;
|
||||
dev->rep[REP_PERIOD] = period[i];
|
||||
dev->rep[REP_DELAY] = delay[j];
|
||||
param[0] = i | (j << 5);
|
||||
ps2_schedule_command(&atkbd->ps2dev, param, ATKBD_CMD_SETREP);
|
||||
if (!atkbd->softrepeat) {
|
||||
set_bit(ATKBD_REP_EVENT_BIT, &atkbd->event_mask);
|
||||
wmb();
|
||||
schedule_work(&atkbd->event_work);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -810,6 +845,8 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
|
|||
|
||||
atkbd->dev = dev;
|
||||
ps2_init(&atkbd->ps2dev, serio);
|
||||
INIT_WORK(&atkbd->event_work, atkbd_event_work, atkbd);
|
||||
init_MUTEX(&atkbd->event_sem);
|
||||
|
||||
switch (serio->id.type) {
|
||||
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue